diff --git a/docs/CATALOG.md b/docs/CATALOG.md index d08bf4696..33d6cf502 100644 --- a/docs/CATALOG.md +++ b/docs/CATALOG.md @@ -82,13 +82,13 @@ Meta-cognition: brainstorm, challenge, blind-spot scan, fact-check. Version-control workflows: repo init, commit, pull/merge request, release tag, issue. -| Skill | Role | Actions | -| ----------------- | ------------------------------------------------------------------------------- | ----------------------- | -| `00-repo-init` | Initialize a repo: git init, default branch, bootstrap commit, optional remote | `01-init`, `02-publish` | -| `01-commit` | Create an atomic conventional commit | `01-commit` | -| `02-pull-request` | Create a draft pull or merge request | `01-pull-request` | -| `03-release-tag` | Cut a semver release with annotated tag and notes | `01-release-tag` | -| `04-issue-create` | Create an issue in the configured ticketing tool | `01-issue-create` | +| Skill | Role | Actions | +| ----------------- | ------------------------------------------------------------------------------ | --------------------------------------- | +| `00-repo-init` | Initialize a repo: git init, default branch, bootstrap commit, optional remote | `01-init`, `02-publish` | +| `01-commit` | Commit atomically; safely retry scoped hook fixes | `01-collect`, `02-message`, `03-commit` | +| `02-pull-request` | Create a draft pull or merge request | `01-pull-request` | +| `03-release-tag` | Cut a semver release with annotated tag and notes | `01-release-tag` | +| `04-issue-create` | Create an issue in the configured ticketing tool | `01-issue-create` | ## 🎼 aidd-orchestrator diff --git a/plugins/aidd-vcs/CATALOG.md b/plugins/aidd-vcs/CATALOG.md index fed85e299..93dd51901 100644 --- a/plugins/aidd-vcs/CATALOG.md +++ b/plugins/aidd-vcs/CATALOG.md @@ -41,7 +41,7 @@ Auto-generated index of skills, agents, references and assets shipped by the `ai | `actions` | [02-message.md](skills/01-commit/actions/02-message.md) | - | | `actions` | [03-commit.md](skills/01-commit/actions/03-commit.md) | - | | `assets` | [commit-template.md](skills/01-commit/assets/commit-template.md) | `VCS commit message template` | -| `-` | [SKILL.md](skills/01-commit/SKILL.md) | `Create an atomic git commit with a conventional message, optionally pushing. Use when the user wants to commit changes, optionally pushing the branch. Not for amending, rebasing, opening a pull request, or tagging a release.` | +| `-` | [SKILL.md](skills/01-commit/SKILL.md) | `Create atomic conventional commits; safely retry scoped hook fixes; optionally push. Use when the user wants to commit changes, optionally pushing the branch. Not for amending, rebasing, opening a pull request, or tagging a release.` | #### `skills/02-pull-request` diff --git a/plugins/aidd-vcs/README.md b/plugins/aidd-vcs/README.md index 75e4898df..55566ca53 100644 --- a/plugins/aidd-vcs/README.md +++ b/plugins/aidd-vcs/README.md @@ -17,7 +17,7 @@ Covers all external artifact creation: repo init, commits, pull/merge requests, | Bracket ID | Skill | Description | |---|---|---| | [3.0] | [repo-init](skills/00-repo-init/SKILL.md) | Initialize a repo: git init, default branch, bootstrap commit, CONTRIBUTING.md, optional remote. | -| [3.1] | [commit](skills/01-commit/SKILL.md) | Create a git commit with proper conventional message format. | +| [3.1] | [commit](skills/01-commit/SKILL.md) | Commit atomically; safely retry scoped hook fixes. | | [3.2] | [pull-request](skills/02-pull-request/SKILL.md) | Create PR (GitHub) or MR (GitLab) with filled template. | | [3.3] | [release-tag](skills/03-release-tag/SKILL.md) | Create and push a semantic version git tag with release notes. | | [3.4] | [issue-create](skills/04-issue-create/SKILL.md) | Create issues in the configured ticketing tool. | diff --git a/plugins/aidd-vcs/skills/01-commit/SKILL.md b/plugins/aidd-vcs/skills/01-commit/SKILL.md index ea1286d44..98ecd3533 100644 --- a/plugins/aidd-vcs/skills/01-commit/SKILL.md +++ b/plugins/aidd-vcs/skills/01-commit/SKILL.md @@ -1,20 +1,20 @@ --- name: 01-commit -description: Create an atomic git commit with a conventional message, optionally pushing. Use when the user wants to commit changes, optionally pushing the branch. Not for amending, rebasing, opening a pull request, or tagging a release. +description: Create atomic conventional commits; safely retry scoped hook fixes; optionally push. Use when the user wants to commit changes, optionally pushing the branch. Not for amending, rebasing, opening a pull request, or tagging a release. argument-hint: paths | auto | push --- # Commit -Stage the right changes, write the message, commit. `01 → 02 → 03`. +Stage, message, commit. `01 → 02 → 03`. ## Actions -| # | Action | Step | -| --- | --------- | ----------------------------------------------------- | -| 01 | `collect` | Review the change and stage what belongs in one commit | -| 02 | `message` | Write the conventional message | -| 03 | `commit` | Commit, and push when asked | +| # | Action | Step | +| --- | --------- | ---------------------------------------------- | +| 01 | `collect` | Stage one concern | +| 02 | `message` | Write the conventional message | +| 03 | `commit` | Commit, safely retry scoped fixes, push if asked | Several concerns means several commits: repeat the chain, one concern at a time. Before running an action, read its file in `actions/`, not only the table or assets. @@ -25,7 +25,7 @@ Before running an action, read its file in `actions/`, not only the table or ass - One concern per commit. Imperative mood. The body says why, not what. - Reference the issue in the body when there is one. - Never `--force` push; `--force-with-lease` only when explicitly asked. -- A hook that rejects the commit is not this skill's job: report which hook and why, then stop. Re-stage only files a hook auto-formatted. +- Retry a rejected hook only for deterministic changes within the current commit's files. Never broaden the change to make a check pass. - `auto` never prompts. `interactive` confirms before staging and before each split. - Commits locally by default; pushes as well only when the push option is set. diff --git a/plugins/aidd-vcs/skills/01-commit/actions/03-commit.md b/plugins/aidd-vcs/skills/01-commit/actions/03-commit.md index 49d2a7aa0..2b7cabce2 100644 --- a/plugins/aidd-vcs/skills/01-commit/actions/03-commit.md +++ b/plugins/aidd-vcs/skills/01-commit/actions/03-commit.md @@ -1,6 +1,6 @@ # 03 - Commit -Record the commit, and push when asked. +Record the commit, safely retry scoped hook fixes, and push when asked. ## Input @@ -8,16 +8,18 @@ The staged set from `01-collect`, the message from `02-message`, and whether to ## Output -The commit sha, the branch, and whether it was pushed. +The commit sha, branch, correction count, and push outcome. ## Process 1. **Commit.** Run `git commit` with the message. -2. **Hook.** If a pre-commit hook rejects it, report which hook and why, then stop; fixing it is the caller's job. Re-stage and retry once only when the hook merely auto-formatted files. +2. **Retry.** On hook rejection, re-stage and retry only a deterministic correction within the current commit's files. Stop and report the hook and error when it needs judgment, leaves scope, makes no progress, or fails three times. 3. **Push.** When asked, push the branch. Use `--force-with-lease` only when explicitly required, never `--force`. +4. **Report.** Return the short sha, subject, file count, correction count, and push outcome. ## Test - `git rev-parse HEAD` returns the new sha and its message matches the project convention. -- A rejecting hook leaves no commit and a clear report, not a retry loop. -- When pushed, the remote branch shows the sha. +- Every correction and re-staged file belongs to the current commit's staged files. +- An ambiguous, out-of-scope, no-progress, or third failed correction leaves no commit and reports the blocker. +- When pushed, the remote branch shows the final sha.