@hanzlaa/rcode 4.15.1 → 4.15.2

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hanzlaa/rcode",
3
- "version": "4.15.1",
3
+ "version": "4.15.2",
4
4
  "description": "rcode — the AI team that never forgets. Persistent memory, specialist agents, and slash commands for AI IDEs. Works in Claude Code, Cursor, Gemini, VS Code, and Antigravity.",
5
5
  "main": "cli/index.js",
6
6
  "bin": {
@@ -66,7 +66,23 @@ Read ONLY when current task needs them. Don't preemptively load.
66
66
 
67
67
  **`rcode/templates/sprint.md` is the single canonical template — read it now, don't improvise a different structure.** It is not optional/decorative; it is what `execute-sprint.md`'s `owner_agent_resolution` step and its per-task dashboard-state-sync step parse via `grep '^owner:'`/`^phase:'`/`^sprint:'`. A SPRINT.md that free-styles a different structure (bold-label metadata, `### Story N — Title` headings, or any shape without the exact `phase:`/`sprint:`/`owner:` YAML frontmatter block) silently breaks that parsing — the sprint still executes and commits real code, but the dashboard never learns it happened (confirmed live, issue class closed by #1034-#1036's fixes — do not reintroduce it by drifting from the template).
68
68
 
69
- **`owner:` field.** If this plan is grounded in a council session (a `.planning/council-sessions/council-*.md` file is referenced in `<context>` as the authoritative decision), set `owner:` to the id of that session's lead/highest-consensus technical persona for THIS sprint's dominant work — one of `haitham`, `hanzla`, `omar`, `waleed`, `yousef` (the engineer personas with execute permission; `sadiq`/`fatima`/others are advisory-only and never valid here). Pick by domain match: a sprint whose `files_modified` is mostly `src/routes|services|models` → `yousef` (backend); mostly `src/components|pages` → `haitham` (frontend); architecture-level, cross-cutting → `waleed`; general/full-stack with no clear split → `hanzla`. If there was no council session, or the domain split is genuinely ambiguous, omit `owner:` entirely — `execute-sprint.md` defaults to the generic `rcode-executor` when the field is absent. Do not guess an owner just to fill the field; an absent `owner:` is the correct, safe default.
69
+ **`owner:` field.** Set it from EITHER of two signals, whichever is present:
70
+
71
+ 1. **The specialist review panel** (plan.md step 9.5). The panel already seated a
72
+ domain persona for this phase by reading the plan's own `files_modified`,
73
+ migrations, and decisions — that is a stronger signal than any keyword match,
74
+ because it comes from what the work actually touches. If a domain persona sat
75
+ on the panel and it is one of the engineer personas below, it is the owner.
76
+ 2. **A council session** (a `.planning/council-sessions/council-*.md` referenced
77
+ in `<context>` as the authoritative decision) — use that session's
78
+ lead/highest-consensus technical persona for THIS sprint's dominant work.
79
+
80
+ Without this, the chain breaks in the middle: the panel seats Waleed and Yousef,
81
+ they find real problems in the plan, and then execution hands every sprint to the
82
+ generic `rcode-executor` — so the plan-time expertise never reaches the
83
+ implementation. `owner:` is what carries it across.
84
+
85
+ Pick by domain match when using either signal: one of `haitham`, `hanzla`, `omar`, `waleed`, `yousef` (the engineer personas with execute permission; `sadiq`/`fatima`/others are advisory-only and never valid here). A sprint whose `files_modified` is mostly `src/routes|services|models` → `yousef` (backend); mostly `src/components|pages` → `haitham` (frontend); architecture-level, cross-cutting → `waleed`; general/full-stack with no clear split → `hanzla`. If neither signal is present, or the domain split is genuinely ambiguous, omit `owner:` entirely — `execute-sprint.md` defaults to the generic `rcode-executor` when the field is absent. Do not guess an owner just to fill the field; an absent `owner:` is the correct, safe default.
70
86
 
71
87
  ## Dependency Graph Rules
72
88
 
@@ -718,6 +718,25 @@ Do not restate the plan. Do not summarize. {response_language pass-through}
718
718
  Report to the user which agents sat on the panel and what each blocked on — a
719
719
  silent panel is indistinguishable from a skipped one.
720
720
 
721
+ ### 9.5d — Carry the panel's domain seat into `owner:`
722
+
723
+ The panel just picked a domain persona by reading this phase's actual files,
724
+ migrations, and decisions. **That selection is the execution owner** — pass it to
725
+ the planner so each SPRINT.md carries `owner: {persona-id}` in its frontmatter,
726
+ and `execute-sprint.md`'s `owner_agent_resolution` spawns that persona instead of
727
+ the generic `rcode-executor`.
728
+
729
+ Without this step the chain breaks in the middle: the panel seats the right
730
+ specialists, they find real problems, and then every sprint is handed to a
731
+ generic executor — plan-time expertise that never reaches the implementation.
732
+
733
+ Only the engineer personas can own a sprint (`haitham`, `hanzla`, `omar`,
734
+ `waleed`, `yousef`). If the panel's domain seat was advisory-only (Fatima,
735
+ Sadiq), or the panel was the two standing seats alone, leave `owner:` unset —
736
+ `rcode-executor` is the correct default. **Do not invent an owner to fill the
737
+ field**; an absent `owner:` is safe, a wrong one sends the work to someone whose
738
+ lens does not fit it.
739
+
721
740
  ## 10. Spawn rcode-sprint-checker Agent
722
741
 
723
742
  Display banner: