@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.
Files changed (95) hide show
  1. package/AGENTS.md +1 -1
  2. package/CLAUDE.md +1 -1
  3. package/CONTRIBUTING.md +3 -0
  4. package/README.md +7 -5
  5. package/cli/github-sync.js +17 -201
  6. package/cli/install.js +16 -13
  7. package/cli/lib/config.cjs +1 -1
  8. package/cli/lib/github-sync-discover.cjs +304 -0
  9. package/cli/lib/namespace-migrate.cjs +16 -1
  10. package/cli/uninstall.js +7 -2
  11. package/dist/rcode.js +197 -197
  12. package/package.json +1 -1
  13. package/rcode/agents/rcode-code-reviewer.md +1 -1
  14. package/rcode/agents/rcode-docs-auditor.md +1 -1
  15. package/rcode/agents/rcode-edge-case-hunter.md +1 -1
  16. package/rcode/agents/rcode-haitham.md +1 -1
  17. package/rcode/agents/rcode-hanzla.md +1 -1
  18. package/rcode/agents/rcode-hussain-pm.md +1 -1
  19. package/rcode/agents/rcode-nyquist-auditor.md +1 -1
  20. package/rcode/agents/rcode-omar.md +1 -1
  21. package/rcode/agents/rcode-remediation-planner.md +1 -1
  22. package/rcode/agents/rcode-security-adversary.md +1 -1
  23. package/rcode/agents/rcode-security-auditor.md +1 -1
  24. package/rcode/agents/rcode-sprint-checker.md +1 -1
  25. package/rcode/agents/rcode-verifier.md +1 -1
  26. package/rcode/agents/rcode-waleed.md +1 -1
  27. package/rcode/agents/rcode-yousef.md +1 -1
  28. package/rcode/agents/rules/planner/task-templates.md +24 -22
  29. package/rcode/agents/rules/verifier/verification-report.md +2 -2
  30. package/rcode/bin/lib/roadmap.cjs +80 -4
  31. package/rcode/bin/rcode-tools.cjs +124 -1
  32. package/rcode/brain/best-practices/state-sync-rule.md +1 -1
  33. package/rcode/references/council-protocol.md +9 -4
  34. package/rcode/references/execute-auto-copy-learnings.md +15 -0
  35. package/rcode/references/execute-close-parent-artifacts.md +49 -0
  36. package/rcode/references/execute-interactive-mode.md +44 -0
  37. package/rcode/references/execute-notify-webhooks.md +22 -0
  38. package/rcode/references/execution-protocol.md +11 -11
  39. package/rcode/references/git-preflight.md +7 -4
  40. package/rcode/references/output-format.md +5 -5
  41. package/rcode/references/plan-gaps-mode.md +89 -0
  42. package/rcode/references/plan-thinking-partner.md +20 -0
  43. package/rcode/references/plan-windows-troubleshooting.md +25 -0
  44. package/rcode/references/planner-playbook.md +23 -29
  45. package/rcode/skills/_shared/state-sync-rule.md +1 -1
  46. package/rcode/skills/actions/1-analysis/rcode-document-project/SKILL.md +2 -0
  47. package/rcode/skills/actions/1-analysis/rcode-prfaq/SKILL.md +2 -0
  48. package/rcode/skills/actions/2-plan/rcode-create-epics-and-stories/SKILL.md +11 -0
  49. package/rcode/skills/actions/2-plan/rcode-create-prd/SKILL.md +2 -0
  50. package/rcode/skills/actions/2-plan/rcode-create-story/SKILL.md +11 -0
  51. package/rcode/skills/actions/2-plan/rcode-edit-prd/SKILL.md +2 -0
  52. package/rcode/skills/actions/2-plan/rcode-validate-prd/SKILL.md +2 -0
  53. package/rcode/skills/actions/3-solutioning/rcode-check-implementation-readiness/SKILL.md +2 -0
  54. package/rcode/skills/actions/3-solutioning/rcode-create-architecture/SKILL.md +2 -0
  55. package/rcode/skills/actions/4-implementation/rcode-checkpoint-preview/SKILL.md +2 -0
  56. package/rcode/skills/actions/4-implementation/rcode-code-review/SKILL.md +2 -0
  57. package/rcode/skills/actions/4-implementation/rcode-correct-course/SKILL.md +2 -0
  58. package/rcode/skills/actions/4-implementation/rcode-debug/SKILL.md +1 -1
  59. package/rcode/skills/actions/4-implementation/rcode-dev-story/SKILL.md +2 -0
  60. package/rcode/skills/actions/4-implementation/rcode-retrospective/SKILL.md +2 -0
  61. package/rcode/skills/actions/4-implementation/rcode-scaffold-project/SKILL.md +2 -0
  62. package/rcode/skills/actions/4-implementation/rcode-sprint-planning/SKILL.md +3 -2
  63. package/rcode/skills/actions/4-implementation/rcode-sprint-status/SKILL.md +2 -0
  64. package/rcode/skills/agents/haitham-frontend/SKILL.md +6 -0
  65. package/rcode/skills/agents/hanzla-engineer/SKILL.md +6 -0
  66. package/rcode/skills/agents/hussain-pm/SKILL.md +1 -1
  67. package/rcode/skills/agents/hussain-sm/SKILL.md +3 -3
  68. package/rcode/skills/agents/majlis-council/references.md +17 -7
  69. package/rcode/skills/agents/raees-orchestrator/SKILL.md +13 -11
  70. package/rcode/skills/agents/yousef-backend/SKILL.md +6 -0
  71. package/rcode/templates/github/epic-template.md +1 -1
  72. package/rcode/templates/github/feature-template.md +1 -1
  73. package/rcode/templates/github/task-template.md +1 -1
  74. package/rcode/templates/sprint.md +14 -3
  75. package/rcode/templates/verification-report.md +7 -4
  76. package/rcode/workflows/add-phase.md +33 -14
  77. package/rcode/workflows/code-review-fix.md +5 -5
  78. package/rcode/workflows/code-review.md +1 -1
  79. package/rcode/workflows/council.md +1 -0
  80. package/rcode/workflows/create-epics-and-stories.md +12 -6
  81. package/rcode/workflows/dev-story.md +12 -14
  82. package/rcode/workflows/do.md +12 -9
  83. package/rcode/workflows/execute-sprint.md +7 -4
  84. package/rcode/workflows/execute-waves.md +38 -2
  85. package/rcode/workflows/execute.md +42 -138
  86. package/rcode/workflows/init.md +10 -2
  87. package/rcode/workflows/lens-audit.md +7 -7
  88. package/rcode/workflows/plan-research-validation.md +10 -5
  89. package/rcode/workflows/plan-spawn-planner.md +9 -14
  90. package/rcode/workflows/plan.md +27 -138
  91. package/rcode/workflows/quick.md +1 -1
  92. package/rcode/workflows/scaffold-skill.md +19 -1
  93. package/rcode/workflows/secure-phase.md +7 -1
  94. package/rcode/workflows/sprint-planning.md +14 -37
  95. 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 `.rcode/phases/{current}/prd.md`
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 | Multi-agent review of all work completed across an epic (retrospective) | rcode-retrospective |
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 `.rcode/phases/{current}/epics.md` and find next unstarted story
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 `.rcode/phases/{current}/stories/story-{id}.md`
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
- Majlis has two execution modes:
34
-
35
- **Real mode (default).** Dispatches actual subagents via the `Task` tool. Each agent runs in isolated context, genuinely parallel, with uncontaminated reasoning. Use for high-stakes decisions and demos.
36
-
37
- **Fast mode.** Single-Claude structured roleplay following each agent's SKILL.md principles. Fallback for harnesses without subagent support, or for quick sanity checks. Faster but reasoning runs in shared context.
38
-
39
- When in doubt, use real mode.
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 (رئيس) dispatches the right specialists for execution. Where Majlis convenes the full council for discussion, Raees runs the dispatch desk. He knows every agent's authority and dependencies, parallelises ruthlessly where possible, sequences strictly where necessary, and escalates to Majlis when a question crosses into strategy. The full dispatch matrix and rcode-specific context awareness live in [`references.md`](references.md).
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 dispatch plans to `.rcode/progress/dispatch-{date}.md`.
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` Layla invoked first.
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. Dispatching Haitham directly. No coordination needed."
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. Escalate: "Cross-domain strategic question — handing to Majlis. I'll reconvene for execution once Majlis has a verdict."
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. Escalate to Majlis with the conflict framed.
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.
@@ -54,4 +54,4 @@
54
54
 
55
55
  ---
56
56
 
57
- <sub>Generated by rcode — `.rcode/phases/{{phase}}/tasks/{{source_file}}`</sub>
57
+ <sub>Generated by rcode — `.planning/phases/{{phase}}/{{source_file}}`</sub>
@@ -52,4 +52,4 @@
52
52
 
53
53
  ---
54
54
 
55
- <sub>Generated by rcode — `.rcode/phases/{{phase}}/stories/{{source_file}}`</sub>
55
+ <sub>Generated by rcode — `.planning/phases/{{phase}}/{{source_file}}`</sub>
@@ -49,4 +49,4 @@
49
49
 
50
50
  ---
51
51
 
52
- <sub>Generated by rcode — `.rcode/phases/{{phase}}/tasks/{{source_file}}`</sub>
52
+ <sub>Generated by rcode — `.planning/phases/{{phase}}/{{source_file}}`</sub>
@@ -13,9 +13,20 @@
13
13
 
14
14
  ## Stories
15
15
 
16
- | ID | Title | Points | Status | Done when |
17
- |----|-------|--------|--------|-----------|
18
- | {story_id} | {title} | {points} | {status} | {verifiable_ac} |
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
- verdict: pass | fail | partial
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
- ### Verdict reasoning
69
+ ### Status reasoning
67
70
 
68
- One paragraph explaining why the verdict (pass / fail / partial) was chosen. Include any judgment calls.
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
- Verdict: <verdict from frontmatter>
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 "0" 2>/dev/null)
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
- If `INIT` is empty or `INIT.ok` is false, print error and exit:
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, run the milestone-health gauge (issue #718):
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
- ```bash
116
- HEALTH=$(node ".rcode/bin/rcode-tools.cjs" milestone-health 2>/dev/null)
117
- RECOMMENDATION=$(echo "$HEALTH" | node -e "let s='';process.stdin.on('data',d=>s+=d).on('end',()=>{try{console.log(JSON.parse(s).recommendation||'unknown')}catch{console.log('unknown')}})")
118
- OPEN_COUNT=$(echo "$HEALTH" | node -e "let s='';process.stdin.on('data',d=>s+=d).on('end',()=>{try{console.log(JSON.parse(s).open_phases||0)}catch{console.log(0)}})")
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
- Milestone health: {MILESTONE_NAME} has {OPEN_COUNT} open phases.
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 {MILESTONE_NAME} cleanly + archive done phases
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
- Milestone health: {MILESTONE_NAME} has {OPEN_COUNT} open phases — getting full.
143
- Consider /rcode-complete-milestone before adding more.
162
+ ℹ {NUDGE}
144
163
  ```
145
164
 
146
- If `RECOMMENDATION` is `healthy`, say nothing.
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-code-reviewer",
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`)
@@ -388,7 +388,7 @@ done
388
388
  Spawn the rcode-reviewer agent:
389
389
 
390
390
  ```
391
- Task(subagent_type="rcode-code-reviewer",
391
+ Task(subagent_type="rcode-reviewer",
392
392
  model="{model}", prompt="
393
393
  <files_to_read>
394
394
  ${FILES_TO_READ}
@@ -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
- To execute with an AI coder:
340
-
341
- ```bash
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
- Next: /rcode {path to dev-prompt.md}
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 — Optional: Spawn AI Coder
399
+ ## Step 6 — Next Step: Continue or Fold Into a Phase
400
400
 
401
- If user says "start coding" or "let's build", spawn the code execution workflow:
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
- ```bash
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
- /rcode {dev-prompt-file}
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
 
@@ -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 via the routing banner. Skip greenfield_guard / external_data_guard / explicit_intent_check / route — the user already chose the persona AND the action. The persona itself can still refuse internally if its preconditions aren't met.
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 call Bash, Read, Grep, Glob, Write, or Edit tools. The dispatcher does not investigate, read code, or write files. Period.
429
- - MUST NOT spawn Task / Agent / subagents. Dispatch is a Skill tool call to a routed command — nothing else.
430
- - MUST NOT "do a quick check" before routing. If you feel the urge to grep or read a file to "figure out the right route," the dispatcher contract has already failed STOP and use the no-route exit.
431
- - The ONLY tools allowed inside /rcode-do are: AskUserQuestion (for disambiguation), Skill (for dispatch), and the one Bash call to the classifier (`classify-question`). Nothing else.
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 commandnothing 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 Bash/Read/Grep/Write/Edit/Task tool calls during execution (only AskUserQuestion + Skill + classifier Bash)
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 `<acceptance_criteria>` says.
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
- 3. `<acceptance_criteria>` prose checklist. **Lowest authority.** Use as a guide during implementation, but automated results override prose judgments.
204
- - If `<verify><automated>` is absent: fall back to `<done>`, then `<acceptance_criteria>`.
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).