@hanzlaa/rcode 4.7.3 → 4.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +1 -1
- package/CLAUDE.md +1 -1
- package/CONTRIBUTING.md +3 -0
- package/README.md +7 -5
- package/cli/github-sync.js +17 -201
- package/cli/install.js +16 -13
- package/cli/lib/config.cjs +1 -1
- package/cli/lib/github-sync-discover.cjs +304 -0
- package/cli/lib/namespace-migrate.cjs +16 -1
- package/cli/uninstall.js +7 -2
- package/dist/rcode.js +197 -197
- package/package.json +1 -1
- package/rcode/agents/rcode-code-reviewer.md +1 -1
- package/rcode/agents/rcode-docs-auditor.md +1 -1
- package/rcode/agents/rcode-edge-case-hunter.md +1 -1
- package/rcode/agents/rcode-haitham.md +1 -1
- package/rcode/agents/rcode-hanzla.md +1 -1
- package/rcode/agents/rcode-hussain-pm.md +1 -1
- package/rcode/agents/rcode-nyquist-auditor.md +1 -1
- package/rcode/agents/rcode-omar.md +1 -1
- package/rcode/agents/rcode-remediation-planner.md +1 -1
- package/rcode/agents/rcode-security-adversary.md +1 -1
- package/rcode/agents/rcode-security-auditor.md +1 -1
- package/rcode/agents/rcode-sprint-checker.md +1 -1
- package/rcode/agents/rcode-verifier.md +1 -1
- package/rcode/agents/rcode-waleed.md +1 -1
- package/rcode/agents/rcode-yousef.md +1 -1
- package/rcode/agents/rules/planner/task-templates.md +24 -22
- package/rcode/agents/rules/verifier/verification-report.md +2 -2
- package/rcode/bin/lib/roadmap.cjs +80 -4
- package/rcode/bin/rcode-tools.cjs +124 -1
- package/rcode/brain/best-practices/state-sync-rule.md +1 -1
- package/rcode/references/council-protocol.md +9 -4
- package/rcode/references/execute-auto-copy-learnings.md +15 -0
- package/rcode/references/execute-close-parent-artifacts.md +49 -0
- package/rcode/references/execute-interactive-mode.md +44 -0
- package/rcode/references/execute-notify-webhooks.md +22 -0
- package/rcode/references/execution-protocol.md +11 -11
- package/rcode/references/git-preflight.md +7 -4
- package/rcode/references/output-format.md +5 -5
- package/rcode/references/plan-gaps-mode.md +89 -0
- package/rcode/references/plan-thinking-partner.md +20 -0
- package/rcode/references/plan-windows-troubleshooting.md +25 -0
- package/rcode/references/planner-playbook.md +23 -29
- package/rcode/skills/_shared/state-sync-rule.md +1 -1
- package/rcode/skills/actions/1-analysis/rcode-document-project/SKILL.md +2 -0
- package/rcode/skills/actions/1-analysis/rcode-prfaq/SKILL.md +2 -0
- package/rcode/skills/actions/2-plan/rcode-create-epics-and-stories/SKILL.md +11 -0
- package/rcode/skills/actions/2-plan/rcode-create-prd/SKILL.md +2 -0
- package/rcode/skills/actions/2-plan/rcode-create-story/SKILL.md +11 -0
- package/rcode/skills/actions/2-plan/rcode-edit-prd/SKILL.md +2 -0
- package/rcode/skills/actions/2-plan/rcode-validate-prd/SKILL.md +2 -0
- package/rcode/skills/actions/3-solutioning/rcode-check-implementation-readiness/SKILL.md +2 -0
- package/rcode/skills/actions/3-solutioning/rcode-create-architecture/SKILL.md +2 -0
- package/rcode/skills/actions/4-implementation/rcode-checkpoint-preview/SKILL.md +2 -0
- package/rcode/skills/actions/4-implementation/rcode-code-review/SKILL.md +2 -0
- package/rcode/skills/actions/4-implementation/rcode-correct-course/SKILL.md +2 -0
- package/rcode/skills/actions/4-implementation/rcode-debug/SKILL.md +1 -1
- package/rcode/skills/actions/4-implementation/rcode-dev-story/SKILL.md +2 -0
- package/rcode/skills/actions/4-implementation/rcode-retrospective/SKILL.md +2 -0
- package/rcode/skills/actions/4-implementation/rcode-scaffold-project/SKILL.md +2 -0
- package/rcode/skills/actions/4-implementation/rcode-sprint-planning/SKILL.md +3 -2
- package/rcode/skills/actions/4-implementation/rcode-sprint-status/SKILL.md +2 -0
- package/rcode/skills/agents/haitham-frontend/SKILL.md +6 -0
- package/rcode/skills/agents/hanzla-engineer/SKILL.md +6 -0
- package/rcode/skills/agents/hussain-pm/SKILL.md +1 -1
- package/rcode/skills/agents/hussain-sm/SKILL.md +3 -3
- package/rcode/skills/agents/majlis-council/references.md +17 -7
- package/rcode/skills/agents/raees-orchestrator/SKILL.md +13 -11
- package/rcode/skills/agents/yousef-backend/SKILL.md +6 -0
- package/rcode/templates/github/epic-template.md +1 -1
- package/rcode/templates/github/feature-template.md +1 -1
- package/rcode/templates/github/task-template.md +1 -1
- package/rcode/templates/sprint.md +14 -3
- package/rcode/templates/verification-report.md +7 -4
- package/rcode/workflows/add-phase.md +33 -14
- package/rcode/workflows/code-review-fix.md +5 -5
- package/rcode/workflows/code-review.md +1 -1
- package/rcode/workflows/council.md +1 -0
- package/rcode/workflows/create-epics-and-stories.md +12 -6
- package/rcode/workflows/dev-story.md +12 -14
- package/rcode/workflows/do.md +12 -9
- package/rcode/workflows/execute-sprint.md +7 -4
- package/rcode/workflows/execute-waves.md +38 -2
- package/rcode/workflows/execute.md +42 -138
- package/rcode/workflows/init.md +10 -2
- package/rcode/workflows/lens-audit.md +7 -7
- package/rcode/workflows/plan-research-validation.md +10 -5
- package/rcode/workflows/plan-spawn-planner.md +9 -14
- package/rcode/workflows/plan.md +27 -138
- package/rcode/workflows/quick.md +1 -1
- package/rcode/workflows/scaffold-skill.md +19 -1
- package/rcode/workflows/secure-phase.md +7 -1
- package/rcode/workflows/sprint-planning.md +14 -37
- package/rcode/workflows/validate-phase.md +7 -1
|
@@ -15,6 +15,8 @@ triggers:
|
|
|
15
15
|
- "where are we in the sprint"
|
|
16
16
|
user-invocable: true
|
|
17
17
|
---
|
|
18
|
+
|
|
19
|
+
<!-- Bridge status: not currently invoked by any rcode/workflows/*.md file (no delegate_to_skill cross-reference exists in either direction). Reachable only via direct phrase-trigger match or explicit @-inclusion. See AUDIT-redundant-work.md finding 3. -->
|
|
18
20
|
@.rcode/references/karpathy-guidelines.md
|
|
19
21
|
|
|
20
22
|
|
|
@@ -53,6 +53,12 @@ This skill embodies Haitham (هيثم), senior frontend engineer archetype. Hait
|
|
|
53
53
|
|
|
54
54
|
rcode's frontend stack: **React 18+, Next.js 15 App Router, TypeScript strict, Tailwind v4, shadcn/ui, Framer Motion, next-intl for Arabic-English localization.** Haitham follows these conventions without needing to be told.
|
|
55
55
|
|
|
56
|
+
## Dispatch Mode
|
|
57
|
+
|
|
58
|
+
Invoking this skill directly (triggers like "talk to Haitham", "build this UI") loads Haitham's persona instructions **inline into the current session** — no isolated context, no `Task()` call. This is structured roleplay, not a spawned subagent.
|
|
59
|
+
|
|
60
|
+
For genuine isolated Task-tool dispatch, Haitham is separately registered as a Task-dispatchable agent (`rcode-haitham`, see `rcode/agents/rcode-haitham.md`) and is spawned for real, isolated-context dispatch by `/rcode-council`. It is **not yet** wired into `/rcode-execute` — that workflow currently spawns only the generic `rcode-executor` subagent type; routing execution work to persona-specific agents like this one is pending issue #1003 (in progress in parallel on branch `fix-execute-routing`). Unlike Hanzla, there is currently no `@haitham` shortcut in `do.md`'s `@persona CODE` alias table.
|
|
61
|
+
|
|
56
62
|
## Identity
|
|
57
63
|
|
|
58
64
|
Senior frontend engineer specializing in Next.js App Router, TypeScript, Tailwind, shadcn/ui, and bilingual (Arabic-English) web apps. Committed to pixel-perfect craft, accessibility, and performance.
|
|
@@ -49,6 +49,12 @@ user-invocable: true
|
|
|
49
49
|
|
|
50
50
|
This skill embodies Hanzla (حنظلة), senior full-stack engineer archetype. It executes approved stories with strict adherence to story details, writes tests before marking work complete, and refactors only incrementally. Hanzla never rewrites code from scratch, never commits code he doesn't understand, and never lies about test status.
|
|
51
51
|
|
|
52
|
+
## Dispatch Mode
|
|
53
|
+
|
|
54
|
+
Invoking this skill directly (triggers like "talk to Hanzla", "implement this") loads Hanzla's persona instructions **inline into the current session** — no isolated context, no `Task()` call. This is structured roleplay, not a spawned subagent.
|
|
55
|
+
|
|
56
|
+
For genuine isolated Task-tool dispatch, Hanzla is separately registered as a Task-dispatchable agent (`rcode-hanzla`, see `rcode/agents/rcode-hanzla.md`) and is spawned for real, isolated-context dispatch by `/rcode-council`. It is **not yet** wired into `/rcode-execute` — that workflow currently spawns only the generic `rcode-executor` subagent type; routing execution work to persona-specific agents like this one is pending issue #1003 (in progress in parallel on branch `fix-execute-routing`). `do.md`'s `@persona CODE` shortcut table already has an alias for this persona (`@hanzla`, aliases: hanzla/dev/engineer) as its deterministic API surface.
|
|
57
|
+
|
|
52
58
|
## Identity
|
|
53
59
|
|
|
54
60
|
Senior software engineer who executes approved stories with strict adherence to story details and team standards. Pragmatic, test-driven, and allergic to premature abstractions.
|
|
@@ -142,7 +142,7 @@ State the rule by name when refusing.
|
|
|
142
142
|
- What's explicitly out of scope?
|
|
143
143
|
- Kill criteria: when would we stop this project?
|
|
144
144
|
2. After answers, draft PRD with: Problem, User, Scope, Success Metrics, Kill Criteria, Out-of-Scope
|
|
145
|
-
3. Save to `.
|
|
145
|
+
3. Save to `.planning/prd.md`
|
|
146
146
|
|
|
147
147
|
### Edge Case: Vague Request
|
|
148
148
|
**Input:** "We need a feature for notifications"
|
|
@@ -79,7 +79,7 @@ Crisp and checklist-driven. Every word has a purpose. Zero tolerance for ambigui
|
|
|
79
79
|
| SP | Generate or update the sprint plan that sequences tasks for the dev agent | rcode-sprint-planning |
|
|
80
80
|
| CS | Prepare a story with all required context for implementation | rcode-create-story |
|
|
81
81
|
| SS | Generate sprint status report from current epics and stories | rcode-sprint-status |
|
|
82
|
-
| ER |
|
|
82
|
+
| ER | Structured single-session retrospective roleplay covering all work completed across an epic | rcode-retrospective |
|
|
83
83
|
| CC | Determine how to proceed if major change is discovered mid-implementation | rcode-correct-course |
|
|
84
84
|
|
|
85
85
|
## Workflow
|
|
@@ -108,7 +108,7 @@ Crisp and checklist-driven. Every word has a purpose. Zero tolerance for ambigui
|
|
|
108
108
|
**Input:** "Prepare the next story from the backlog"
|
|
109
109
|
|
|
110
110
|
**Expected behavior:**
|
|
111
|
-
1. Read `.
|
|
111
|
+
1. Read `.planning/epics/EPIC-{NN}.md` and find next unstarted story
|
|
112
112
|
2. Create story file with ALL sections populated:
|
|
113
113
|
- Goal (one sentence)
|
|
114
114
|
- Context (references to PRD, architecture, UX)
|
|
@@ -117,7 +117,7 @@ Crisp and checklist-driven. Every word has a purpose. Zero tolerance for ambigui
|
|
|
117
117
|
- Dependencies (other stories, external systems)
|
|
118
118
|
- File List (empty — for Hanzla to fill)
|
|
119
119
|
- Dev Agent Record (empty — for Hanzla to fill)
|
|
120
|
-
3. Save to `.
|
|
120
|
+
3. Save to `.planning/epics/stories/{N}.{M}.md`
|
|
121
121
|
4. Report: "Story {id} ready. Assign to Hanzla with `rcode-dev-story {path}`."
|
|
122
122
|
|
|
123
123
|
### Edge Case: Ambiguous Story from User
|
|
@@ -30,13 +30,23 @@ In Omani and Arab tradition, a Majlis is a gathering where voices are heard befo
|
|
|
30
30
|
|
|
31
31
|
## Dispatch modes
|
|
32
32
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
**
|
|
38
|
-
|
|
39
|
-
|
|
33
|
+
Within this skill, the CV/CVF/QC/DM/CM convene-mode sub-skills listed in SKILL.md's
|
|
34
|
+
Capabilities table are **not yet implemented** — do not claim real Task-tool dispatch
|
|
35
|
+
is available through this skill today.
|
|
36
|
+
|
|
37
|
+
**For genuine parallel, isolated-context subagent dispatch, use the separate
|
|
38
|
+
`/rcode-council` slash command** (`rcode/workflows/council.md`) — a different,
|
|
39
|
+
already-working implementation: deterministic panel scoring, parallel Task-tool
|
|
40
|
+
spawning (not sequential roleplay), and structured artifact output to
|
|
41
|
+
`.planning/council-sessions/`.
|
|
42
|
+
|
|
43
|
+
**Fast mode (the only mode this skill currently supports).** Single-Claude
|
|
44
|
+
structured roleplay following each agent's SKILL.md principles, in shared context.
|
|
45
|
+
Use this skill (phrase-triggered: "convene the majlis", "consult the team", etc.)
|
|
46
|
+
only when a `/rcode-council` slash-command invocation isn't available or a quick
|
|
47
|
+
sanity check is enough.
|
|
48
|
+
|
|
49
|
+
When real, isolated-context dispatch matters, prefer `/rcode-council` over this skill.
|
|
40
50
|
|
|
41
51
|
---
|
|
42
52
|
|
|
@@ -45,7 +45,9 @@ user-invocable: true
|
|
|
45
45
|
|
|
46
46
|
## Overview
|
|
47
47
|
|
|
48
|
-
Raees (رئيس)
|
|
48
|
+
Raees (رئيس) produces a dispatch **plan** — text output for a human (or another workflow) to act on, not a dispatch action. Where Majlis convenes the full council for discussion, Raees works out who should own what: he reasons about every agent's authority and dependencies, identifies what can run in parallel vs. what must sequence strictly, and flags when a question should escalate to Majlis instead. The full dispatch matrix and rcode-specific context awareness live in [`references.md`](references.md).
|
|
49
|
+
|
|
50
|
+
**No live routing mechanism exists yet.** The DP/SQ/PL/HO sub-skills in the Capabilities table below are planned, not implemented — there is no `Task()` call, no `rcode-raees*` subagent, and no automatic handoff. Raees writes the plan; a human or another command (e.g. `/rcode-execute`) is what actually carries it out today.
|
|
49
51
|
|
|
50
52
|
## Capabilities
|
|
51
53
|
|
|
@@ -76,10 +78,10 @@ Raees (رئيس) dispatches the right specialists for execution. Where Majlis co
|
|
|
76
78
|
|
|
77
79
|
## Output Format
|
|
78
80
|
|
|
79
|
-
Dispatch plans use this exact structure:
|
|
81
|
+
Dispatch plans use this exact structure — this is the deliverable, a document, not a log of actions taken:
|
|
80
82
|
|
|
81
83
|
```
|
|
82
|
-
Dispatch: <request summary>
|
|
84
|
+
Dispatch Plan: <request summary>
|
|
83
85
|
|
|
84
86
|
Step 1 (BLOCKING): <agent> → <skill> — delivers: <output>
|
|
85
87
|
Step 2 (PARALLEL): <agent A> → <task A> | <agent B> → <task B>
|
|
@@ -88,29 +90,29 @@ Step 3 (BLOCKING): <agent> → <skill> — gate
|
|
|
88
90
|
|
|
89
91
|
Always show: primary owner, dependencies (arrows or "blocked by"), parallel opportunities.
|
|
90
92
|
|
|
91
|
-
Save
|
|
93
|
+
Save the plan to `.rcode/progress/dispatch-{date}.md`. Raees does not invoke the agents named in the plan — no `Task()` call is made. Executing the plan is a separate, manual step for the user (or a workflow like `/rcode-execute`, once persona routing lands there).
|
|
92
94
|
|
|
93
|
-
Do NOT include: diffuse responsibility, unowned tasks, or silent handoffs. Do NOT synthesise strategic decisions — that's Majlis's job. Do NOT override specialist authority.
|
|
95
|
+
Do NOT include: diffuse responsibility, unowned tasks, or silent handoffs. Do NOT synthesise strategic decisions — that's Majlis's job. Do NOT override specialist authority. Do NOT phrase output as if dispatch already happened ("invoked", "dispatching X now") — phrase it as a recommendation ("plan calls for X", "recommended: assign to X").
|
|
94
96
|
|
|
95
97
|
## Examples
|
|
96
98
|
|
|
97
99
|
**Happy path — feature request**
|
|
98
|
-
"Add Arabic RTL support to our dashboard" → touches UX (Layla), FE (Haitham), BE (Yousef), QA (Fatima), localisation (Noor) → 5-step plan with Layla blocking, Haitham/Yousef/Noor in parallel, Fatima gate, Khalid ship → saved to `.rcode/progress/dispatch-{date}.md
|
|
100
|
+
"Add Arabic RTL support to our dashboard" → touches UX (Layla), FE (Haitham), BE (Yousef), QA (Fatima), localisation (Noor) → produces a 5-step plan with Layla blocking, Haitham/Yousef/Noor in parallel, Fatima gate, Khalid ship → saved to `.rcode/progress/dispatch-{date}.md`. The plan lists Layla as step 1; nothing is actually invoked.
|
|
99
101
|
|
|
100
102
|
**Happy path — government proposal**
|
|
101
|
-
"Ministry of Housing wants a property management proposal" → context triggers compliance-first + Arabic-first + data residency → Sadiq (research) → Waleed (compliance) → parallel Mariam + Zayd → Noor (full document Arabic + English) → Sadiq final review.
|
|
103
|
+
"Ministry of Housing wants a property management proposal" → context triggers compliance-first + Arabic-first + data residency → plan sequences: Sadiq (research) → Waleed (compliance) → parallel Mariam + Zayd → Noor (full document Arabic + English) → Sadiq final review.
|
|
102
104
|
|
|
103
105
|
**Edge case — single-owner task**
|
|
104
|
-
"Fix the typo in the footer" — don't build a plan. "Single-owner task.
|
|
106
|
+
"Fix the typo in the footer" — don't build a multi-step plan. Output: "Single-owner task. Recommended: assign to Haitham directly. No coordination needed." (a recommendation, not an action).
|
|
105
107
|
|
|
106
108
|
**Edge case — strategic question**
|
|
107
|
-
"Should we enter the Saudi market?" — don't dispatch.
|
|
109
|
+
"Should we enter the Saudi market?" — don't produce a dispatch plan. Recommend escalation: "Cross-domain strategic question — recommend routing to Majlis. Re-run this once Majlis has a verdict."
|
|
108
110
|
|
|
109
111
|
**Edge case — conflicting specialists**
|
|
110
|
-
Waleed wants approach A, Yousef wants approach B. Do NOT pick.
|
|
112
|
+
Waleed wants approach A, Yousef wants approach B. Do NOT pick. Recommend escalation to Majlis with the conflict framed.
|
|
111
113
|
|
|
112
114
|
**Negative — single-domain UX question**
|
|
113
|
-
"What colour should the button be?" — Layla owns this directly. Redirect.
|
|
115
|
+
"What colour should the button be?" — Layla owns this directly. Redirect, don't produce a plan.
|
|
114
116
|
|
|
115
117
|
## Memory Bank Hooks
|
|
116
118
|
|
|
@@ -50,6 +50,12 @@ user-invocable: true
|
|
|
50
50
|
|
|
51
51
|
This skill embodies Yousef (يوسف), senior backend engineer archetype. Yousef builds APIs, databases, data pipelines, and integration services — with particular expertise in data management, RPA (Robotic Process Automation), and enterprise/government integrations.
|
|
52
52
|
|
|
53
|
+
## Dispatch Mode
|
|
54
|
+
|
|
55
|
+
Invoking this skill directly (triggers like "talk to Yousef", "build the backend") loads Yousef's persona instructions **inline into the current session** — no isolated context, no `Task()` call. This is structured roleplay, not a spawned subagent.
|
|
56
|
+
|
|
57
|
+
For genuine isolated Task-tool dispatch, Yousef is separately registered as a Task-dispatchable agent (`rcode-yousef`, see `rcode/agents/rcode-yousef.md`) and is spawned for real, isolated-context dispatch by `/rcode-council`. It is **not yet** wired into `/rcode-execute` — that workflow currently spawns only the generic `rcode-executor` subagent type; routing execution work to persona-specific agents like this one is pending issue #1003 (in progress in parallel on branch `fix-execute-routing`). Unlike Hanzla, there is currently no `@yousef` shortcut in `do.md`'s `@persona CODE` alias table.
|
|
58
|
+
|
|
53
59
|
## Identity
|
|
54
60
|
|
|
55
61
|
Senior backend engineer specializing in REST/GraphQL APIs, relational and time-series databases, data pipelines, and system integrations. Focused on correctness, reliability, and observability.
|
|
@@ -13,9 +13,20 @@
|
|
|
13
13
|
|
|
14
14
|
## Stories
|
|
15
15
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
16
|
+
<!-- One <task> block per story. id= and <title> are REQUIRED (scanner.js's primary parse path) -->
|
|
17
|
+
<tasks>
|
|
18
|
+
<task id="{sprint_id}.{NN}" type="auto">
|
|
19
|
+
<title>{story title}</title>
|
|
20
|
+
<read_first>{files + line ranges the executor must read before writing}</read_first>
|
|
21
|
+
<files>{exact paths this task creates/modifies}</files>
|
|
22
|
+
<action>{specific implementation instructions}</action>
|
|
23
|
+
<verify>
|
|
24
|
+
<automated>{command < 60 sec}</automated>
|
|
25
|
+
</verify>
|
|
26
|
+
<done>{measurable acceptance criteria}</done>
|
|
27
|
+
<evidence>{grep/lines/creates evidence per issue #649}</evidence>
|
|
28
|
+
</task>
|
|
29
|
+
</tasks>
|
|
19
30
|
|
|
20
31
|
## Capacity
|
|
21
32
|
|
|
@@ -10,11 +10,14 @@ phase: NN
|
|
|
10
10
|
phase_name: <slug>
|
|
11
11
|
verifier: <agent / human>
|
|
12
12
|
verified_at: <ISO date>
|
|
13
|
-
|
|
13
|
+
status: passed | gaps_found | human_needed
|
|
14
14
|
goal_source: ROADMAP.md (commit-sha-at-phase-start)
|
|
15
15
|
---
|
|
16
16
|
```
|
|
17
17
|
|
|
18
|
+
`status` is the ONLY key `execute.md`'s `uat_gate` step reads (`grep -qE "^status:[[:space:]]*passed"`). Do not
|
|
19
|
+
substitute `result`, `verdict`, or `outcome` — a wrong key silently strands the phase at `status: executed` forever.
|
|
20
|
+
|
|
18
21
|
## Sections
|
|
19
22
|
|
|
20
23
|
### Phase goal (verbatim)
|
|
@@ -63,9 +66,9 @@ What the phase changed BEYOND the goal. Often these are silent:
|
|
|
63
66
|
|
|
64
67
|
Each side effect should be intentional and documented.
|
|
65
68
|
|
|
66
|
-
###
|
|
69
|
+
### Status reasoning
|
|
67
70
|
|
|
68
|
-
One paragraph explaining why the
|
|
71
|
+
One paragraph explaining why the status (passed / gaps_found / human_needed) was chosen. Include any judgment calls.
|
|
69
72
|
|
|
70
73
|
### Follow-ups
|
|
71
74
|
|
|
@@ -79,5 +82,5 @@ Issues filed (or to file) for gaps surfaced during verification:
|
|
|
79
82
|
```
|
|
80
83
|
Verifier: <name or agent id>
|
|
81
84
|
Date: <ISO>
|
|
82
|
-
|
|
85
|
+
Status: <status from frontmatter>
|
|
83
86
|
```
|
|
@@ -29,11 +29,21 @@ Exit.
|
|
|
29
29
|
Load phase operation context:
|
|
30
30
|
|
|
31
31
|
```bash
|
|
32
|
-
INIT=$(node ".rcode/bin/rcode-tools.cjs" init phase-op "
|
|
32
|
+
INIT=$(node ".rcode/bin/rcode-tools.cjs" init phase-op "1" 2>/dev/null)
|
|
33
33
|
if [[ "$INIT" == @file:* ]]; then INIT=$(cat "${INIT#@file:}"); fi
|
|
34
34
|
```
|
|
35
35
|
|
|
36
|
-
|
|
36
|
+
`init phase-op` only populates the phase-aware fields (`roadmap_exists`,
|
|
37
|
+
`planning_exists`, `phase_found`, ...) when its `question` argument's first
|
|
38
|
+
token parses as an integer `> 0` (rcode-tools.cjs's `phase-op` handler gates
|
|
39
|
+
on `phaseNum > 0`). add-phase has no target phase to pass — it's creating a
|
|
40
|
+
new one — so a placeholder is required. `"0"` fails that guard, silently
|
|
41
|
+
dropping `roadmap_exists` from every response (#1017); `"1"` satisfies it.
|
|
42
|
+
The dummy value only affects unused fields like `phase_found`/`phase_name`
|
|
43
|
+
(harmless here) — `roadmap_exists` itself is purely a file-existence check
|
|
44
|
+
and doesn't depend on phase 1 actually existing.
|
|
45
|
+
|
|
46
|
+
If `INIT` is empty, print error and exit:
|
|
37
47
|
```
|
|
38
48
|
Error: rcode-tools init failed. Verify .rcode/ is installed and state.json is valid.
|
|
39
49
|
```
|
|
@@ -92,7 +102,13 @@ The CLI handles:
|
|
|
92
102
|
- Creating the phase directory (`.planning/phases/{NN}-{slug}/`)
|
|
93
103
|
- Inserting the phase entry into ROADMAP.md with Goal, Depends on, and Plans sections
|
|
94
104
|
|
|
95
|
-
Extract from result: `phase_number`, `padded`, `name`, `slug`, `directory
|
|
105
|
+
Extract from result: `phase_number`, `padded`, `name`, `slug`, `directory`,
|
|
106
|
+
`milestone_health` (object: `open_phases`, `recommendation`, `threshold_should`,
|
|
107
|
+
`threshold_consider`), `nudge` (present only when `recommendation` isn't
|
|
108
|
+
`healthy` — a ready-to-print one-liner naming the milestone). `phase add`
|
|
109
|
+
computes these via `milestoneCloseNudge()` (issue #942) as part of the same
|
|
110
|
+
call, so `milestone_health_check` below reads them straight off `$RESULT`
|
|
111
|
+
instead of re-deriving them.
|
|
96
112
|
|
|
97
113
|
**If `BULK_MODE=true`:** after the CLI returns, write the bulk body to `${directory}/TASKS.md` per the structure defined in `detect_task_list`. This step is non-destructive — it only ADDs a TASKS.md file inside the new phase directory.
|
|
98
114
|
</step>
|
|
@@ -110,26 +126,30 @@ If "Roadmap Evolution" section doesn't exist, create it.
|
|
|
110
126
|
</step>
|
|
111
127
|
|
|
112
128
|
<step name="milestone_health_check">
|
|
113
|
-
After the phase is added,
|
|
129
|
+
After the phase is added, read the milestone-health gauge (issue #718)
|
|
130
|
+
straight off the `phase add` result captured in `add_phase` — no extra
|
|
131
|
+
subprocess calls. Previously this step spawned a separate `milestone-health`
|
|
132
|
+
call plus 3 `node -e` JSON field extractions to re-derive data that `phase
|
|
133
|
+
add` already returns inline via `milestoneCloseNudge()` (#942); that was
|
|
134
|
+
4 wasted calls per phase-add for data already sitting in `$RESULT` (#1018).
|
|
114
135
|
|
|
115
|
-
```
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
MILESTONE_NAME=$(echo "$HEALTH" | node -e "let s='';process.stdin.on('data',d=>s+=d).on('end',()=>{try{console.log(JSON.parse(s).milestone||'')}catch{console.log('')}})")
|
|
136
|
+
```
|
|
137
|
+
RECOMMENDATION="$RESULT.milestone_health.recommendation" # e.g. healthy | consider-closing | should-close
|
|
138
|
+
OPEN_COUNT="$RESULT.milestone_health.open_phases"
|
|
139
|
+
NUDGE="$RESULT.nudge" # ready-to-print, names the milestone; absent when healthy
|
|
120
140
|
```
|
|
121
141
|
|
|
122
142
|
If `RECOMMENDATION` is `should-close` (≥12 open phases), surface a hard nudge:
|
|
123
143
|
|
|
124
144
|
```
|
|
125
|
-
⚠
|
|
145
|
+
⚠ {NUDGE}
|
|
126
146
|
|
|
127
147
|
Phase {N} is now in this milestone, but the milestone is well past the
|
|
128
148
|
12-phase threshold for considering closure. Phases are accumulating without
|
|
129
149
|
a milestone boundary — historically this is where roadmaps lose structure.
|
|
130
150
|
|
|
131
151
|
Recommended next step:
|
|
132
|
-
/rcode-complete-milestone close
|
|
152
|
+
/rcode-complete-milestone close the milestone cleanly + archive done phases
|
|
133
153
|
/rcode-new-milestone start a fresh milestone for ongoing work
|
|
134
154
|
|
|
135
155
|
If you genuinely want a giant single-milestone roadmap, ignore this and
|
|
@@ -139,11 +159,10 @@ continue. The threshold is conservative on purpose.
|
|
|
139
159
|
If `RECOMMENDATION` is `consider-closing` (8-11 open phases), softer nudge:
|
|
140
160
|
|
|
141
161
|
```
|
|
142
|
-
ℹ
|
|
143
|
-
Consider /rcode-complete-milestone before adding more.
|
|
162
|
+
ℹ {NUDGE}
|
|
144
163
|
```
|
|
145
164
|
|
|
146
|
-
If `RECOMMENDATION` is `healthy
|
|
165
|
+
If `RECOMMENDATION` is `healthy` or `milestone_health` is absent (no state.json / no milestone), say nothing.
|
|
147
166
|
</step>
|
|
148
167
|
|
|
149
168
|
<step name="completion">
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<purpose>
|
|
2
|
-
Auto-fix issues from REVIEW.md. Validates phase, checks config gate, verifies REVIEW.md exists and has fixable issues, spawns rcode-fixer agent, handles --auto iteration loop (capped at 3), commits REVIEW-FIX.md once at the end, and presents results.
|
|
2
|
+
Auto-fix issues from REVIEW.md. Validates phase, checks config gate, verifies REVIEW.md exists and has fixable issues, spawns rcode-code-fixer agent, handles --auto iteration loop (capped at 3), commits REVIEW-FIX.md once at the end, and presents results.
|
|
3
3
|
</purpose>
|
|
4
4
|
|
|
5
5
|
<required_reading>
|
|
@@ -9,7 +9,7 @@ Read all files referenced by the invoking prompt's execution_context before star
|
|
|
9
9
|
</required_reading>
|
|
10
10
|
|
|
11
11
|
<available_agent_types>
|
|
12
|
-
- rcode-fixer: Applies fixes to code review findings
|
|
12
|
+
- rcode-code-fixer: Applies fixes to code review findings
|
|
13
13
|
- rcode-reviewer: Reviews source files for bugs and issues
|
|
14
14
|
</available_agent_types>
|
|
15
15
|
|
|
@@ -202,7 +202,7 @@ If REVIEW.md contains a `files_reviewed_list` frontmatter field, use that as the
|
|
|
202
202
|
</step>
|
|
203
203
|
|
|
204
204
|
<step name="spawn_fixer">
|
|
205
|
-
Spawn the rcode-fixer agent with config:
|
|
205
|
+
Spawn the rcode-code-fixer agent with config:
|
|
206
206
|
|
|
207
207
|
```bash
|
|
208
208
|
# Build config for agent
|
|
@@ -295,7 +295,7 @@ if [ "$AUTO_MODE" = "true" ]; then
|
|
|
295
295
|
|
|
296
296
|
# Spawn rcode-reviewer agent to re-review
|
|
297
297
|
# (This overwrites REVIEW_PATH with latest review state)
|
|
298
|
-
Task(subagent_type="rcode-
|
|
298
|
+
Task(subagent_type="rcode-reviewer",
|
|
299
299
|
model="{model}", prompt="
|
|
300
300
|
<config>
|
|
301
301
|
depth: ${REVIEW_DEPTH}
|
|
@@ -527,7 +527,7 @@ echo "════════════════════════
|
|
|
527
527
|
|
|
528
528
|
- [ ] Config gate (`workflow.code_review`) verified before any agent is spawned
|
|
529
529
|
- [ ] `REVIEW.md` confirmed present at `.planning/phases/<N>/REVIEW.md`; workflow exits with explicit error if missing
|
|
530
|
-
- [ ] `rcode-fixer` agent spawned with correct `review_path`, `fix_scope`, and `fix_report_path`
|
|
530
|
+
- [ ] `rcode-code-fixer` agent spawned with correct `review_path`, `fix_scope`, and `fix_report_path`
|
|
531
531
|
- [ ] `--auto` iteration loop capped at 3 rounds; each round re-reviews only the original file scope
|
|
532
532
|
- [ ] `REVIEW-FIX.md` committed exactly once at the end of all iterations (not per iteration)
|
|
533
533
|
- [ ] Results presented inline with a concrete next-step suggestion (e.g., `git log --oneline`)
|
|
@@ -157,6 +157,7 @@ Parse the JSON for:
|
|
|
157
157
|
- `flags.explain` — boolean, show panel scoring
|
|
158
158
|
- `panel` — string[], the pre-computed panel (respects `--full` and `--agents`)
|
|
159
159
|
- `scores` — object, per-agent scoring for explain mode
|
|
160
|
+
- `domain` — string, the detected question domain (`fe`/`be`/`ml`/`deploy`/`strategic`/`market`/`general`) — always populated, used for the `Domain:` banner field
|
|
160
161
|
- `question_type` — `"codebase" | "discovery" | "market" | "greenfield"` — drives Step 1 branching
|
|
161
162
|
- `question_signals` — string[], matched phrases that drove the classification
|
|
162
163
|
- `config` — `{ user_name, project_name, language, mode }` from `.rcode/config.yaml`
|
|
@@ -4,6 +4,16 @@
|
|
|
4
4
|
Parse a PRD, PROJECT.md, or project document to generate numbered epic files in `.planning/epics/`. Each epic file contains user stories with acceptance criteria, development notes, and effort estimates. Output is ready for `/rcode-sprint-planning`.
|
|
5
5
|
</purpose>
|
|
6
6
|
|
|
7
|
+
> **Note (experimental, no execution consumer):** the epics/stories/dev-story pipeline this
|
|
8
|
+
> workflow is part of is not wired to `/rcode-execute` today — `rcode-executor` only reads
|
|
9
|
+
> `*-SPRINT.md` files (see `rcode/agents/rcode-executor.md`). The only way to "run" a story
|
|
10
|
+
> produced here is the manual `/rcode {dev-prompt-file}` invocation documented in
|
|
11
|
+
> `rcode/workflows/dev-story.md`, which has none of `/rcode-execute`'s atomic-commit,
|
|
12
|
+
> checkpoint, wave, or verification machinery. Treat this pipeline as experimental /
|
|
13
|
+
> unsupported for production execution until a decision is made to either wire it to
|
|
14
|
+
> `/rcode-execute` or deprecate it in favor of the SPRINT.md pipeline (see
|
|
15
|
+
> `AUDIT-redundant-work.md` finding 2).
|
|
16
|
+
|
|
7
17
|
|
|
8
18
|
<available_agent_types>
|
|
9
19
|
- `rcode-roadmapper` — reads PRD/context and generates epic structure
|
|
@@ -378,11 +388,7 @@ If arguments are invalid, missing files, or subagent fails:
|
|
|
378
388
|
|
|
379
389
|
## ▶ Next Up
|
|
380
390
|
|
|
381
|
-
- /rcode-sprint-planning
|
|
382
|
-
- /rcode-dev-story {story-id}
|
|
383
|
-
- /rcode-edit-prd
|
|
384
|
-
|
|
385
|
-
## Next Up
|
|
386
|
-
|
|
387
391
|
- `/rcode-sprint-planning` — plan the sprint from the generated epic files
|
|
392
|
+
- `/rcode-dev-story {story-id}`
|
|
393
|
+
- `/rcode-edit-prd`
|
|
388
394
|
- `/rcode-create-story` — develop individual stories into self-contained STORY.md files
|
|
@@ -336,11 +336,9 @@ This story is "Done" when all items in checklist-story-dod.md are checked:
|
|
|
336
336
|
|
|
337
337
|
## Running This Story
|
|
338
338
|
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
/rcode .planning/dev-sessions/{story-id}-dev-prompt.md
|
|
343
|
-
```
|
|
339
|
+
This file is the execution context for an AI coder — there is no standalone command that consumes it directly. Either:
|
|
340
|
+
- Continue in the session that has this context loaded and say "let's build this," or
|
|
341
|
+
- Fold the story into a phase (`/rcode-add-phase`) and run `/rcode-execute {phase-number}` for a full plan/build cycle with checkpoints.
|
|
344
342
|
|
|
345
343
|
---
|
|
346
344
|
|
|
@@ -388,7 +386,9 @@ Acceptance Criteria: {count}
|
|
|
388
386
|
|
|
389
387
|
Context file: {path to dev-prompt.md}
|
|
390
388
|
|
|
391
|
-
|
|
389
|
+
Ready to code this story? Two real options:
|
|
390
|
+
1. Continue this session — I already have full story context loaded, just say "let's build this"
|
|
391
|
+
2. Fold it into a phase (/rcode-add-phase) and run /rcode-execute {phase-number} for a full plan/build cycle with checkpoints
|
|
392
392
|
|
|
393
393
|
Or, continue the current session to:
|
|
394
394
|
- Ask clarifying questions
|
|
@@ -396,24 +396,22 @@ Or, continue the current session to:
|
|
|
396
396
|
- Review dependencies
|
|
397
397
|
```
|
|
398
398
|
|
|
399
|
-
## Step 6 —
|
|
399
|
+
## Step 6 — Next Step: Continue or Fold Into a Phase
|
|
400
400
|
|
|
401
|
-
|
|
401
|
+
There is no standalone command that consumes a dev-prompt.md file directly (`/rcode`, no hyphen, does not exist — every rcode command is hyphenated). This step never spawns anything; it only tells the user how to proceed.
|
|
402
402
|
|
|
403
|
-
|
|
404
|
-
# User says "let's go" or "start", then:
|
|
405
|
-
/rcode "$DEV_PROMPT_FILE"
|
|
406
|
-
```
|
|
403
|
+
If the user says "start coding" or "let's build", continue implementing directly in the current session — it already has the full story context loaded from Step 3-4.
|
|
407
404
|
|
|
408
405
|
Otherwise, offer:
|
|
409
406
|
|
|
410
407
|
```
|
|
411
408
|
Ready to code this story?
|
|
412
409
|
|
|
413
|
-
|
|
410
|
+
1. Continue in this session — say "let's build this" and I'll implement it directly.
|
|
411
|
+
2. Fold it into a phase (/rcode-add-phase) and run /rcode-execute {phase-number} for a full plan/build cycle with checkpoints.
|
|
414
412
|
```
|
|
415
413
|
|
|
416
|
-
Stop and wait for user to proceed. Do NOT auto-spawn.
|
|
414
|
+
Stop and wait for user to proceed. Do NOT auto-spawn — this workflow only wraps the story, it never executes it.
|
|
417
415
|
|
|
418
416
|
## Errors
|
|
419
417
|
|
package/rcode/workflows/do.md
CHANGED
|
@@ -6,10 +6,11 @@ Analyze freeform text from the user and route to the most appropriate rcode comm
|
|
|
6
6
|
@.rcode/references/auto-init-guard.md
|
|
7
7
|
@.rcode/references/output-format.md
|
|
8
8
|
@.rcode/references/verb-dictionary.md
|
|
9
|
-
@.rcode/references/dispatch-banner.md
|
|
10
9
|
Read all files referenced by the invoking prompt's execution_context before starting.
|
|
11
10
|
</required_reading>
|
|
12
11
|
|
|
12
|
+
`.rcode/references/dispatch-banner.md` is NOT required reading here — its banner format is scoped to real `Task(subagent_type=...)` spawns. `/rcode-do` never spawns a Task/subagent (see guardrails); it only dispatches via the `Skill` tool, so it uses the plain `ROUTING` banner defined in the `display` step below.
|
|
13
|
+
|
|
13
14
|
<process>
|
|
14
15
|
|
|
15
16
|
<step name="auto_init_check">
|
|
@@ -71,7 +72,7 @@ Match if `$QUESTION` starts with `@<persona> <CODE>` or `@<persona>:<CODE>` —
|
|
|
71
72
|
{list from the persona's Capabilities table}
|
|
72
73
|
```
|
|
73
74
|
And stop. Do not fall back to fuzzy intent matching — the user used the deterministic API, honour it.
|
|
74
|
-
5. Dispatch directly
|
|
75
|
+
5. Dispatch directly: show the plain `ROUTING` banner (the `display` step's format — "Routing to: {chosen command}") and call the `Skill` tool. Skip greenfield_guard / external_data_guard / explicit_intent_check / route — the user already chose the persona AND the action. This is a `Skill()` dispatch, not a `Task(subagent_type=...)` spawn, so it does NOT use the persona-voiced `dispatch-banner.md` format. The persona itself can still refuse internally if its preconditions aren't met.
|
|
75
76
|
|
|
76
77
|
**This is the deterministic API surface.** Power users (and other agents in council follow-ups) can invoke specific capabilities without re-reading triggers or risking fuzzy match. It's the cheapest way to get repeatable behaviour out of the persona system.
|
|
77
78
|
|
|
@@ -423,15 +424,17 @@ If the chosen command expects a phase number and one wasn't provided in the text
|
|
|
423
424
|
</process>
|
|
424
425
|
|
|
425
426
|
<guardrails>
|
|
426
|
-
**Hard prohibitions during /rcode-do execution (issue #458):**
|
|
427
|
+
**Hard prohibitions during /rcode-do execution (issue #458, refined by #1007):**
|
|
428
|
+
|
|
429
|
+
The steps above (`parse_args`, `check_project`, `auto_init_check`, `greenfield_guard`, `explicit_intent_check`, `persona_shortcut`) legitimately call Bash for structured state/config lookups (`rcode-tools.cjs state load`, `progress init`, `config-get mode`, `classify-question`, milestone/PRD/epic detection via `ls`/`grep`) and Read for the specific persona/capability-table lookup in `persona_shortcut` step 2. That is routing plumbing, not investigation, and is allowed. What's prohibited is using those same tools to figure out the route by inspecting application code, or to do the routed work itself:
|
|
427
430
|
|
|
428
|
-
- MUST NOT
|
|
429
|
-
- MUST NOT
|
|
430
|
-
- MUST NOT
|
|
431
|
-
-
|
|
431
|
+
- MUST NOT use Bash/Read/Grep/Glob to explore or read application source code to guess what a vague request means. The state/config lookups named above are the only sanctioned uses — anything beyond them (grepping `src/`, reading a feature file to understand behavior, etc.) means the dispatcher contract has failed — STOP and use the no-route exit instead.
|
|
432
|
+
- MUST NOT call Write or Edit. The dispatcher never modifies files.
|
|
433
|
+
- MUST NOT spawn Task / Agent / subagents. Dispatch is a `Skill` tool call to a routed command — nothing else.
|
|
434
|
+
- MUST NOT "do a quick check" of source code before routing. If you feel the urge to grep or read application code to "figure out the right route," the dispatcher contract has already failed — STOP and use the no-route exit.
|
|
432
435
|
- If the user's input doesn't match any route and the classifier is ambiguous: invoke the no-route exit menu. Do not "be helpful" by executing the work yourself.
|
|
433
436
|
|
|
434
|
-
Why this is hard: do.md is a router. The moment it does work, two failure modes appear: (a) the work is duplicated when the user re-invokes the proper command, or (b) the work happens in the wrong context with the wrong subagent and produces inferior output. Both are worse than a 1-second routing prompt.
|
|
437
|
+
Why this is hard: do.md is a router. The moment it does the work itself (as opposed to looking up state to decide *where to route*), two failure modes appear: (a) the work is duplicated when the user re-invokes the proper command, or (b) the work happens in the wrong context with the wrong subagent and produces inferior output. Both are worse than a 1-second routing prompt.
|
|
435
438
|
</guardrails>
|
|
436
439
|
|
|
437
440
|
<success_criteria>
|
|
@@ -444,7 +447,7 @@ Why this is hard: do.md is a router. The moment it does work, two failure modes
|
|
|
444
447
|
- [ ] Command invoked via the Skill tool — NOT printed as text
|
|
445
448
|
- [ ] Dispatch banner not repeated (single emission only)
|
|
446
449
|
- [ ] No work done directly — dispatcher only
|
|
447
|
-
- [ ] No
|
|
450
|
+
- [ ] No Write/Edit/Task tool calls, and no Bash/Read/Grep/Glob use beyond the sanctioned state/config lookups and persona/capability-table reads
|
|
448
451
|
- [ ] On no-route, exit cleanly with the disambiguation menu — never silently fall through to inline work
|
|
449
452
|
</success_criteria>
|
|
450
453
|
</content>
|
|
@@ -198,11 +198,10 @@ Deviations are normal — handle via rules below.
|
|
|
198
198
|
- `type="auto"`: if `tdd="true"` → TDD execution. Implement with deviation rules + auth gates. Verify done criteria. Commit (see task_commit). Track hash for Summary.
|
|
199
199
|
- `type="checkpoint:*"`: STOP → checkpoint_protocol → wait for user → continue only after confirmation.
|
|
200
200
|
- **Task completion precedence (when signals conflict):**
|
|
201
|
-
1. `<verify><automated>` — machine-executable shell commands. **Highest authority.** If these pass, the task is done. If these fail, the task is NOT done — regardless of what `<
|
|
201
|
+
1. `<verify><automated>` — machine-executable shell commands. **Highest authority.** If these pass, the task is done. If these fail, the task is NOT done — regardless of what `<done>` says.
|
|
202
202
|
2. `<done>` — single observable sentence. Use as the human-readable confirmation once automated checks pass.
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
- **MANDATORY acceptance_criteria check:** After completing each task, if it has `<acceptance_criteria>`, verify EVERY criterion before moving to the next task. Use grep, file reads, or CLI commands to confirm each criterion. If any criterion fails, fix the implementation before proceeding. Do not skip criteria or mark them as "will verify later".
|
|
203
|
+
- If `<verify><automated>` is absent: fall back to `<done>` alone. `<evidence>` (grep hits, line ranges, or a creates-justification recorded by the planner per issue #649) is supporting grounding, not a completion signal to re-check here — the real plan schema (planner-playbook.md, sprint.md) has no such tag.
|
|
204
|
+
- **MANDATORY completion check:** After completing each task, confirm `<verify><automated>` passes (or, if absent, that the task's `<done>` sentence is observably true). Use grep, file reads, or CLI commands to confirm. If any check fails, fix the implementation before proceeding. Do not skip this or mark it as "will verify later".
|
|
206
205
|
3. Run `<verification>` checks
|
|
207
206
|
4. Confirm `<success_criteria>` met
|
|
208
207
|
5. Document deviations in Summary
|
|
@@ -378,6 +377,8 @@ If new untracked files appeared after running scripts or tools, decide for each:
|
|
|
378
377
|
<hook_revert_detection_gate>
|
|
379
378
|
## Post-Step Hook Revert Detection Gate
|
|
380
379
|
|
|
380
|
+
<!-- See also <post_step_revert_gate> below — catches a different revert shape (shrunk, not identical) -->
|
|
381
|
+
|
|
381
382
|
After each task that writes or edits files, run:
|
|
382
383
|
```bash
|
|
383
384
|
git diff --name-only HEAD
|
|
@@ -394,6 +395,8 @@ Do not proceed to the next task until all expected file changes survive the git
|
|
|
394
395
|
<post_step_revert_gate>
|
|
395
396
|
## Post-Step Revert Detection Gate
|
|
396
397
|
|
|
398
|
+
<!-- See also <hook_revert_detection_gate> above — catches a different revert shape (identical, not shrunk) -->
|
|
399
|
+
|
|
397
400
|
After committing each task, run a diff check to detect accidental reverts. This catches the class of bug where a task's implementation unknowingly undoes work from a previous task or wave.
|
|
398
401
|
|
|
399
402
|
**When to run:** After every `git commit` that records a task completion (not after TDD RED commits or style-only commits).
|