Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ Unify **engineering teams** around **standardized workflows** and **shared best
🧱 **IDE agnostic** · 🏗️ **Legacy systems** · 🌱 **Token-optimized** · 🇫🇷 **Made in France**

<p>
<!--counts:start--><kbd>9 plugins</kbd> · <kbd>51 skills</kbd> · <kbd>2 agents</kbd><!--counts:end-->
<!--counts:start--><kbd>9 plugins</kbd> · <kbd>52 skills</kbd> · <kbd>2 agents</kbd><!--counts:end-->
</p>

[![Open Source](https://img.shields.io/badge/Open_Source-Yes-yellow?logo=open-source-initiative&logoColor=white)](https://opensource.org/)
Expand Down Expand Up @@ -266,7 +266,7 @@ 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.

Expand Down
Original file line number Diff line number Diff line change
@@ -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/actions/01-resolve.md:16`
- [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 |
1 change: 1 addition & 0 deletions docs/CATALOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
8 changes: 5 additions & 3 deletions plugins/aidd-vcs/.claude-plugin/plugin.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json",
"name": "aidd-vcs",
"version": "2.4.0",
"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"
Expand All @@ -12,15 +12,17 @@
"./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",
"repo-init",
"commit",
"pull-request",
"release",
"version-control"
"version-control",
"conflict-resolution"
],
"repository": "https://github.com/ai-driven-dev/framework",
"homepage": "https://ai-driven.dev",
Expand Down
9 changes: 9 additions & 0 deletions plugins/aidd-vcs/CATALOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -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)

---

Expand Down Expand Up @@ -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.` |

5 changes: 3 additions & 2 deletions plugins/aidd-vcs/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,9 @@ 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.
Flow: init once; commit each change; open PRs when ready; tag releases; file issues anywhere; resolve conflicts when Git stops.

Covers all external artifact creation: repo init, commits, pull/merge requests, release tags, and issue tracking.
Covers all external artifact creation: repo init, commits, pull/merge requests, release tags, issue tracking, and conflict resolution.

## Skills

Expand All @@ -21,6 +21,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

Expand Down
29 changes: 29 additions & 0 deletions plugins/aidd-vcs/skills/05-resolve-conflict/SKILL.md
Original file line number Diff line number Diff line change
@@ -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.
Original file line number Diff line number Diff line change
@@ -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).
Comment thread
alexsoyes marked this conversation as resolved.

## Process

1. **Inspect.** Read the operation, unmerged paths, and conflicted hunks; if none exist, report and stop.
2. **Decide.** Add one row per hunk or non-text 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. Set rows to `Applied` only after both checks succeed; otherwise report the failed check and never mark rows `Applied`.

## 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 |
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# Conflict resolution decisions

| File | Conflict | Choice | Status | Reason |
| ---- | -------- | ------ | ------ | ------ |
| path | exact hunk or conflict | common content, ours, theirs, or both | Applied or Proposed | choice evidence |
2 changes: 1 addition & 1 deletion scripts/__tests__/architecture-rules.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -229,7 +229,7 @@ test("sweeping the repository's own plugins/ tree yields zero violations", () =>
assert.deepEqual(violations, []);
// A sweep that never actually exercised a skill with action files would pass the same way —
// this pins the sweep to the measured count so it cannot go vacuously green.
assert.equal(skillsWithActions, 48);
assert.equal(skillsWithActions, 49);
});

test("a table that declares no action column cites nothing, whatever its cells read", () => {
Expand Down
Loading