diff --git a/README.md b/README.md index ecee0e4b9..505f0091a 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ Unify **engineering teams** around **standardized workflows** and **shared best 🧱 **IDE agnostic** · 🏗️ **Legacy systems** · 🌱 **Token-optimized** · 🇫🇷 **Made in France**
- 8 plugins · 50 skills · 2 agents + 8 plugins · 51 skills · 2 agents
[](https://opensource.org/) @@ -257,9 +257,9 @@ Code transformation: plan, implement, assert, audit, review, test, refactor, deb ### 🌿 [aidd-vcs](plugins/aidd-vcs/README.md) -`5 skills` · stable +`6 skills` · stable -Repo init, commits, pull / merge requests, release tags, issues. +Repo init, commits, pull / merge requests, release tags, issues, conflict resolution. diff --git a/aidd_docs/tasks/2026_09/2026_09_02_resolve-conflict-skill/review.md b/aidd_docs/tasks/2026_09/2026_09_02_resolve-conflict-skill/review.md new file mode 100644 index 000000000..f37d27917 --- /dev/null +++ b/aidd_docs/tasks/2026_09/2026_09_02_resolve-conflict-skill/review.md @@ -0,0 +1,32 @@ +# Review: Resolve conflict skill + +- **Verdict**: approve +- **Diff**: `main...working-tree` +- **Axes run**: code, functional, relevancy +- **Date**: 2026_09_03 +- **Findings**: 0 critical, 0 warning, 0 minor + +## Phases + +### Phase 1 — Conflict resolution + +- [x] One VCS skill exposes one `resolve` action — `plugins/aidd-vcs/skills/05-resolve-conflict/SKILL.md:23` +- [x] Each hunk or non-text conflict gets a choice row — `plugins/aidd-vcs/skills/05-resolve-conflict/assets/resolution-table.md:5` +- [x] An unapproved proposal changes nothing — `plugins/aidd-vcs/skills/05-resolve-conflict/actions/01-resolve.md:17` +- [x] Approved matching choices apply and stage resolved paths — `plugins/aidd-vcs/skills/05-resolve-conflict/actions/01-resolve.md:16-18` +- [x] Validation checks only resolved paths — `plugins/aidd-vcs/skills/05-resolve-conflict/actions/01-resolve.md:19` +- [x] Manifest, catalogs, and root summary expose the skill — `plugins/aidd-vcs/.claude-plugin/plugin.json:16`, `docs/CATALOG.md:87`, `README.md:243` + +## Findings + +| Sev | Kind | Phase | Location | Issue | Fix | +| --- | ---- | ----- | -------- | ----- | --- | + +## Verification + +| Metric | Value | +| ------ | ----- | +| Verified | 100% (6/6) | +| Files checked | `SKILL.md`, `actions/01-resolve.md`, `resolution-table.md`, plugin manifest, READMEs, catalogs | +| Unchecked | none | +| Unplanned | none | diff --git a/docs/CATALOG.md b/docs/CATALOG.md index 66890a81c..f9e59a8a8 100644 --- a/docs/CATALOG.md +++ b/docs/CATALOG.md @@ -90,6 +90,7 @@ Version-control workflows: repo init, commit, pull/merge request, release tag, i | `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` | +| `05-resolve-conflict` | Resolve deterministic conflicts or approved choices | `01-resolve` | ## 🎼 aidd-orchestrator diff --git a/plugins/aidd-vcs/.claude-plugin/plugin.json b/plugins/aidd-vcs/.claude-plugin/plugin.json index db7ac449f..830bb68a2 100644 --- a/plugins/aidd-vcs/.claude-plugin/plugin.json +++ b/plugins/aidd-vcs/.claude-plugin/plugin.json @@ -2,7 +2,7 @@ "$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json", "name": "aidd-vcs", "version": "2.3.1", - "description": "External artifacts: repo-init, commit, pull-request, release-tag, issue-create", + "description": "External artifacts: repo-init, commit, pull-request, release-tag, issue-create, resolve-conflict", "author": { "name": "AI-Driven Dev", "url": "https://github.com/ai-driven-dev" @@ -12,7 +12,8 @@ "./skills/01-commit", "./skills/02-pull-request", "./skills/03-release-tag", - "./skills/04-issue-create" + "./skills/04-issue-create", + "./skills/05-resolve-conflict" ], "keywords": [ "git", @@ -20,7 +21,8 @@ "commit", "pull-request", "release", - "version-control" + "version-control", + "conflict-resolution" ], "repository": "https://github.com/ai-driven-dev/framework", "homepage": "https://ai-driven.dev", diff --git a/plugins/aidd-vcs/CATALOG.md b/plugins/aidd-vcs/CATALOG.md index fed85e299..ec2b3490c 100644 --- a/plugins/aidd-vcs/CATALOG.md +++ b/plugins/aidd-vcs/CATALOG.md @@ -13,6 +13,7 @@ Auto-generated index of skills, agents, references and assets shipped by the `ai - [`skills/02-pull-request`](#skills02-pull-request) - [`skills/03-release-tag`](#skills03-release-tag) - [`skills/04-issue-create`](#skills04-issue-create) + - [`skills/05-resolve-conflict`](#skills05-resolve-conflict) --- @@ -71,3 +72,11 @@ Auto-generated index of skills, agents, references and assets shipped by the `ai | `assets` | [issue-template.md](skills/04-issue-create/assets/issue-template.md) | `VCS issue/ticket template` | | `-` | [SKILL.md](skills/04-issue-create/SKILL.md) | `Create an issue in the configured ticketing tool. Use when the user wants to file a bug, open an issue, or report a problem. Not for committing, opening a pull request, or commenting on an existing issue.` | +#### `skills/05-resolve-conflict` + +| Group | File | Description | +|-------|------|---| +| `actions` | [01-resolve.md](skills/05-resolve-conflict/actions/01-resolve.md) | - | +| `assets` | [resolution-table.md](skills/05-resolve-conflict/assets/resolution-table.md) | - | +| `-` | [SKILL.md](skills/05-resolve-conflict/SKILL.md) | `Resolves deterministic Git conflicts or approved choices. Use when the user wants to resolve a merge, rebase, or cherry-pick conflict. Not for deciding between competing implementations or committing changes.` | + diff --git a/plugins/aidd-vcs/README.md b/plugins/aidd-vcs/README.md index 75e4898df..4b16f3a20 100644 --- a/plugins/aidd-vcs/README.md +++ b/plugins/aidd-vcs/README.md @@ -8,9 +8,7 @@ VCS workflow plugin for the AI-Driven Development framework. First time? Install with `/plugin install aidd-vcs@aidd-framework`, then run `aidd-vcs:01-commit`. -Typical flow: `00-repo-init` once to set up the repo; `01-commit` after each unit of work; `02-pull-request` when the branch is ready; `03-release-tag` at release time; `04-issue-create` from anywhere. - -Covers all external artifact creation: repo init, commits, pull/merge requests, release tags, and issue tracking. +Flow: init once; commit each change; open PRs when ready; tag releases; file issues anywhere; resolve conflicts when Git stops. ## Skills @@ -21,6 +19,7 @@ Covers all external artifact creation: repo init, commits, pull/merge requests, | [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. | +| [3.5] | [resolve-conflict](skills/05-resolve-conflict/SKILL.md) | Resolve deterministic conflicts or approved choices. | ## Assets diff --git a/plugins/aidd-vcs/skills/05-resolve-conflict/SKILL.md b/plugins/aidd-vcs/skills/05-resolve-conflict/SKILL.md new file mode 100644 index 000000000..0d94e17c9 --- /dev/null +++ b/plugins/aidd-vcs/skills/05-resolve-conflict/SKILL.md @@ -0,0 +1,29 @@ +--- +name: resolve-conflict +description: Resolves deterministic Git conflicts or approved choices. Use when the user wants to resolve a merge, rebase, or cherry-pick conflict. Not for deciding between competing implementations or committing changes. +argument-hint: conflict | decision +--- + +# Resolve Conflict + +```mermaid +flowchart LR + start([active Git conflict]) --> resolve + resolve -->|no active conflict| none([report no conflict]) + resolve -->|all rows decided| applied([resolve and report]) + resolve -->|approval needed| proposal([propose and stop]) + proposal -->|approved table| resolve +``` + +## Actions + +Read only the next action file. + +| Action | Does | +| ------ | ---- | +| resolve | resolve conflicts or propose choices | + +## Transversal rules + +- Never commit, discard, reset, or check out changes. +- Stage only files resolved by this skill, never unrelated files. diff --git a/plugins/aidd-vcs/skills/05-resolve-conflict/actions/01-resolve.md b/plugins/aidd-vcs/skills/05-resolve-conflict/actions/01-resolve.md new file mode 100644 index 000000000..98d0b96ba --- /dev/null +++ b/plugins/aidd-vcs/skills/05-resolve-conflict/actions/01-resolve.md @@ -0,0 +1,29 @@ +# 01 - Resolve + +Resolve deterministic conflicts or approved proposals. + +## Input + +An active conflict, optionally with its approved decision table. + +## Output + +A resolved working tree and decision table, or an unapplied proposal, formatted with [resolution table](../assets/resolution-table.md). + +## Process + +1. **Inspect.** Read the operation, unmerged paths, and conflicted hunks; if none exist, report and stop. +2. **Decide.** Add one row per conflict to the [resolution table](../assets/resolution-table.md): matching approved rows keep their choice; identical sides keep common content; otherwise propose ours, theirs, or both with a reason. +3. **Gate.** If a proposal lacks approval, return the unchanged table and stop; otherwise confirm approved rows still match. +4. **Resolve.** Apply every decided row and stage the resolved paths. +5. **Validate.** Confirm no unmerged paths and a cached whitespace check limited to resolved paths; otherwise report the failed check. + +## Test + +| Case | Pass | +| ---- | ---- | +| deterministic conflict | markers are removed, Git has no unmerged paths, and rows are `Applied` | +| unapproved proposal | conflicted files and index entries stay unchanged, and rows are `Proposed` | +| approved proposal | matching choices apply, Git has no unmerged paths, and rows are `Applied` | +| unrelated staged error | resolved-path validation passes and the unrelated file stays untouched | +| no active conflict | no file or index entry changes, and the run reports no conflict | diff --git a/plugins/aidd-vcs/skills/05-resolve-conflict/assets/resolution-table.md b/plugins/aidd-vcs/skills/05-resolve-conflict/assets/resolution-table.md new file mode 100644 index 000000000..98199bea6 --- /dev/null +++ b/plugins/aidd-vcs/skills/05-resolve-conflict/assets/resolution-table.md @@ -0,0 +1,7 @@ +# Conflict resolution decisions + +Replace the example with one row per hunk or non-text conflict. Set `Applied` only after Git validation. Remove this instruction before presenting the table. + +| File | Conflict | Choice | Status | Reason | +| ---- | -------- | ------ | ------ | ------ | +| path | exact hunk or conflict | common content, ours, theirs, or both | Applied or Proposed | choice evidence |