@jenga-ai/agent 1.3.0 → 3.0.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 (175) hide show
  1. package/README.md +93 -256
  2. package/agents/developer.md +9 -8
  3. package/agents/scrum-master.md +57 -23
  4. package/agents/tester.md +51 -5
  5. package/hooks/on_session_end.sh +13 -1
  6. package/lib/generate-agent-context.js +18 -1
  7. package/lib/generate-copilot-instructions.js +18 -1
  8. package/lib/generate-skill-allow-list.js +197 -0
  9. package/lib/skill-allow-list.json +42 -0
  10. package/package.json +17 -13
  11. package/scripts/apply-j-prefix.sh +243 -0
  12. package/scripts/consume-context-digest.sh +103 -0
  13. package/scripts/generate-j-alias.sh +333 -0
  14. package/scripts/postinstall.js +25 -0
  15. package/scripts/sweep-stale-context-digests.sh +132 -0
  16. package/scripts/validate-board.sh +5 -0
  17. package/scripts/write-context-digest.sh +230 -0
  18. package/skills/{brainstorm → j-brainstorm}/SKILL.md +9 -2
  19. package/skills/{btw → j-btw}/SKILL.md +9 -2
  20. package/skills/{clearify → j-clearify}/SKILL.md +9 -2
  21. package/skills/{close-story → j-close-story}/SKILL.md +92 -13
  22. package/skills/j-close-story/scripts/check-privatized.sh +345 -0
  23. package/skills/{close-story → j-close-story}/scripts/check-story-closeable.sh +1 -1
  24. package/skills/{close-story → j-close-story}/scripts/extract-task-diff-stats.sh +1 -1
  25. package/skills/{commit → j-commit}/SKILL.md +9 -2
  26. package/skills/j-continue/SKILL.md +36 -0
  27. package/skills/{deep-dive → j-deep-dive}/SKILL.md +9 -8
  28. package/skills/{dev-done → j-dev-done}/SKILL.md +11 -4
  29. package/skills/{dev-done → j-dev-done}/scripts/classify-commit-outcome.sh +4 -4
  30. package/skills/{distribute → j-distribute}/SKILL.md +17 -10
  31. package/skills/{distribute → j-distribute}/scripts/distribute-changes.sh +1 -1
  32. package/skills/{do → j-do}/SKILL.md +111 -14
  33. package/skills/j-doc/README.md +155 -0
  34. package/skills/{doc → j-doc}/SKILL.md +55 -18
  35. package/skills/j-doc/authoring-notes.md +72 -0
  36. package/skills/j-doc/scripts/resolve_last_update.py +149 -0
  37. package/skills/{doc-sync → j-doc-sync}/SKILL.md +9 -2
  38. package/skills/{dooo → j-dooo}/SKILL.md +9 -2
  39. package/skills/j-error/SKILL.md +36 -0
  40. package/skills/{evaluate → j-evaluate}/SKILL.md +9 -2
  41. package/skills/j-examplify/SKILL.md +49 -0
  42. package/skills/{help → j-help}/SKILL.md +9 -2
  43. package/skills/{idea → j-idea}/SKILL.md +10 -3
  44. package/skills/{idea → j-idea}/assets/idea_handoff_template.md +1 -1
  45. package/skills/{improve → j-improve}/SKILL.md +9 -2
  46. package/skills/{init → j-init}/SKILL.md +21 -8
  47. package/skills/j-init/assets/scope-thresholds_template.json +7 -0
  48. package/skills/j-jbp/SKILL.md +32 -0
  49. package/skills/j-lgtm/SKILL.md +28 -0
  50. package/skills/{pi-plan → j-pi-plan}/SKILL.md +10 -3
  51. package/skills/{proceed → j-proceed}/SKILL.md +9 -2
  52. package/skills/{publish → j-publish}/SKILL.md +47 -40
  53. package/skills/{publish → j-publish}/adapters/droplet.md +1 -1
  54. package/skills/{publish → j-publish}/adapters/mobile-ios.md +3 -3
  55. package/skills/{publish → j-publish}/adapters/npm-ci.md +29 -7
  56. package/skills/{publish → j-publish}/adapters/npm.md +8 -8
  57. package/skills/{publish → j-publish}/assets/ci-contract.md +2 -2
  58. package/skills/{publish → j-publish}/schemas/publish.schema.json +1 -1
  59. package/skills/{publish → j-publish}/scripts/npm_ci_pipeline.sh +21 -1
  60. package/skills/{publish → j-publish}/scripts/npm_stage_inspect.sh +34 -1
  61. package/skills/{publish → j-publish}/scripts/npm_stage_pipeline.sh +9 -4
  62. package/skills/{publish → j-publish}/scripts/publish_deploy.sh +4 -4
  63. package/skills/{publish → j-publish}/scripts/validate_npm_stage_env.sh +1 -1
  64. package/skills/{publish → j-publish}/wizards/droplet.md +1 -1
  65. package/skills/{publish → j-publish}/wizards/mobile-ios.md +1 -1
  66. package/skills/{publish → j-publish}/wizards/npm-ci.md +1 -1
  67. package/skills/{publish → j-publish}/wizards/npm.md +1 -1
  68. package/skills/{reconcile → j-reconcile}/SKILL.md +12 -5
  69. package/skills/{reconcile → j-reconcile}/scripts/detect-unlinked-code.sh +2 -2
  70. package/skills/{reconcile → j-reconcile}/scripts/resolve-reconcile-scope.sh +3 -3
  71. package/skills/{reconcile-origin → j-reconcile-origin}/SKILL.md +13 -6
  72. package/skills/{redo → j-redo}/SKILL.md +9 -2
  73. package/skills/{skillify → j-skillify}/SKILL.md +10 -3
  74. package/skills/{spinoff → j-spinoff}/SKILL.md +9 -2
  75. package/skills/{status → j-status}/SKILL.md +9 -2
  76. package/skills/j-todo/SKILL.md +92 -0
  77. package/skills/{todo → j-todo}/assets/todo_handoff_template.md +1 -1
  78. package/skills/j-todo/scripts/add_trivial_task.sh +216 -0
  79. package/skills/j-todo/scripts/update_story_tasks.py +87 -0
  80. package/skills/{uncharted → j-uncharted}/SKILL.md +35 -28
  81. package/skills/{uncharted → j-uncharted}/assets/UNDERSTANDING_DOC_TEMPLATE.md +2 -2
  82. package/skills/{uncharted → j-uncharted}/scripts/detect-dependencies.sh +1 -1
  83. package/skills/{uncharted → j-uncharted}/scripts/detect-tests.sh +1 -1
  84. package/skills/{uncharted → j-uncharted}/scripts/directory-triage.sh +3 -3
  85. package/skills/{uncharted → j-uncharted}/scripts/elicitation-state.sh +3 -3
  86. package/skills/{uncharted → j-uncharted}/scripts/enumerate-target.sh +1 -1
  87. package/skills/{uncharted → j-uncharted}/scripts/import-source.sh +1 -1
  88. package/skills/{uncharted → j-uncharted}/scripts/inspect-provenance.sh +1 -1
  89. package/skills/{uncharted → j-uncharted}/scripts/resolve-segment-target.sh +5 -5
  90. package/skills/{uncharted → j-uncharted}/scripts/run-engine.sh +1 -1
  91. package/skills/{uncharted → j-uncharted}/scripts/validate-proposed-items.sh +2 -2
  92. package/skills/{uncharted → j-uncharted}/scripts/write-backfilled-epics.sh +1 -1
  93. package/skills/j-wtf/SKILL.md +27 -0
  94. package/skills/jenga/SKILL.md +1 -1
  95. package/skills/jenga/scripts/render-confirmation.sh +55 -18
  96. package/skills/jenga-permission-level/SKILL.md +1 -1
  97. package/templates/SCRUM_BOARD_SCHEMA.md +33 -2
  98. package/templates/agent-context.md.tpl +32 -9
  99. package/templates/copilot-instructions.md.tpl +66 -11
  100. package/skills/continue/SKILL.md +0 -29
  101. package/skills/error/SKILL.md +0 -29
  102. package/skills/examplify/SKILL.md +0 -42
  103. package/skills/init/assets/scope-thresholds_template.json +0 -7
  104. package/skills/jbp/SKILL.md +0 -25
  105. package/skills/lgtm/SKILL.md +0 -21
  106. package/skills/todo/SKILL.md +0 -48
  107. package/skills/wtf/SKILL.md +0 -20
  108. /package/skills/{close-story → j-close-story}/scripts/compute-scope-divergence.sh +0 -0
  109. /package/skills/{close-story → j-close-story}/scripts/extract-diff-stats.sh +0 -0
  110. /package/skills/{close-story → j-close-story}/scripts/update-task-frontmatter.sh +0 -0
  111. /package/skills/{commit → j-commit}/assets/user_instructions_template.md +0 -0
  112. /package/skills/{distribute → j-distribute}/CONFIG_SCHEMA.md +0 -0
  113. /package/skills/{distribute → j-distribute}/scripts/check-version.sh +0 -0
  114. /package/skills/{distribute → j-distribute}/scripts/commit-version-bump.sh +0 -0
  115. /package/skills/{do → j-do}/assets/intent-vs-diff-prompt.md +0 -0
  116. /package/skills/{do → j-do}/assets/sender_template.json +0 -0
  117. /package/skills/{doc → j-doc}/assets/path-objectives.yaml +0 -0
  118. /package/skills/{doc-sync → j-doc-sync}/assets/default_excludes.txt +0 -0
  119. /package/skills/{doc-sync → j-doc-sync}/assets/doc_targets.md +0 -0
  120. /package/skills/{evaluate → j-evaluate}/assets/evaluation_invokation_template.yml +0 -0
  121. /package/skills/{evaluate → j-evaluate}/assets/evaluation_rapport_template.md +0 -0
  122. /package/skills/{idea → j-idea}/assets/idea_template.md +0 -0
  123. /package/skills/{init → j-init}/assets/.gitignore_template +0 -0
  124. /package/skills/{init → j-init}/assets/PROJECT_SUMMARY_template.md +0 -0
  125. /package/skills/{init → j-init}/assets/directory_structure.txt +0 -0
  126. /package/skills/{init → j-init}/assets/strategy_stub_template.md +0 -0
  127. /package/skills/{init → j-init}/assets/test-config_template.json +0 -0
  128. /package/skills/{init → j-init}/assets/workflow_template.json +0 -0
  129. /package/skills/{init → j-init}/scripts/apply-project-visibility.sh +0 -0
  130. /package/skills/{init → j-init}/scripts/detect-existing-codebase.sh +0 -0
  131. /package/skills/{init → j-init}/scripts/init.sh +0 -0
  132. /package/skills/{pi-plan → j-pi-plan}/assets/epic.json +0 -0
  133. /package/skills/{pi-plan → j-pi-plan}/assets/story_template.md +0 -0
  134. /package/skills/{publish → j-publish}/assets/ExportOptions.plist.template +0 -0
  135. /package/skills/{publish → j-publish}/assets/ownership-matrix.md +0 -0
  136. /package/skills/{publish → j-publish}/assets/publish.example.json +0 -0
  137. /package/skills/{publish → j-publish}/assets/publish.example.npm-ci.json +0 -0
  138. /package/skills/{publish → j-publish}/assets/publish.example.npm.json +0 -0
  139. /package/skills/{publish → j-publish}/assets/secrets-guide.md +0 -0
  140. /package/skills/{publish → j-publish}/schemas/fixtures/npm-ci-minimal.json +0 -0
  141. /package/skills/{publish → j-publish}/schemas/fixtures/npm-ci-with-empty-secrets.json +0 -0
  142. /package/skills/{publish → j-publish}/schemas/fixtures/npm-ci-with-workflow-path.json +0 -0
  143. /package/skills/{publish → j-publish}/scripts/check_target_config.sh +0 -0
  144. /package/skills/{publish → j-publish}/scripts/droplet_pipeline.sh +0 -0
  145. /package/skills/{publish → j-publish}/scripts/finalize_changelog.sh +0 -0
  146. /package/skills/{publish → j-publish}/scripts/generate_release_notes.sh +0 -0
  147. /package/skills/{publish → j-publish}/scripts/ios_pipeline.sh +0 -0
  148. /package/skills/{publish → j-publish}/scripts/npm_pipeline.sh +0 -0
  149. /package/skills/{publish → j-publish}/scripts/publish_common.sh +0 -0
  150. /package/skills/{publish → j-publish}/scripts/reconcile_tags.sh +0 -0
  151. /package/skills/{publish → j-publish}/scripts/run_gates.sh +0 -0
  152. /package/skills/{publish → j-publish}/scripts/setup_wizard.sh +0 -0
  153. /package/skills/{publish → j-publish}/scripts/show_history.sh +0 -0
  154. /package/skills/{publish → j-publish}/scripts/suggest_semver_bump.sh +0 -0
  155. /package/skills/{publish → j-publish}/scripts/validate_config.sh +0 -0
  156. /package/skills/{publish → j-publish}/scripts/validate_droplet_env.sh +0 -0
  157. /package/skills/{publish → j-publish}/scripts/validate_ios_env.sh +0 -0
  158. /package/skills/{publish → j-publish}/scripts/validate_npm_ci_env.sh +0 -0
  159. /package/skills/{publish → j-publish}/scripts/validate_npm_env.sh +0 -0
  160. /package/skills/{publish → j-publish}/scripts/write_ledger_entry.sh +0 -0
  161. /package/skills/{reconcile → j-reconcile}/assets/report_format.md +0 -0
  162. /package/skills/{reconcile-origin → j-reconcile-origin}/scripts/reconcile-origin.sh +0 -0
  163. /package/skills/{skillify → j-skillify}/assets/init-new/SKILL.md +0 -0
  164. /package/skills/{skillify → j-skillify}/assets/init-new/assets/.gitignore_template +0 -0
  165. /package/skills/{skillify → j-skillify}/assets/init-new/assets/PROJECT_SUMMARY_template.md +0 -0
  166. /package/skills/{skillify → j-skillify}/assets/init-new/assets/directory_structure.txt +0 -0
  167. /package/skills/{skillify → j-skillify}/assets/init-new/assets/test-config_template.json +0 -0
  168. /package/skills/{skillify → j-skillify}/assets/init-new/assets/workflow_template.json +0 -0
  169. /package/skills/{skillify → j-skillify}/assets/init-new/scripts/init.sh +0 -0
  170. /package/skills/{skillify → j-skillify}/assets/init-old/SKILL.md +0 -0
  171. /package/skills/{status → j-status}/assets/output_format.md +0 -0
  172. /package/skills/{todo → j-todo}/assets/todo_template.md +0 -0
  173. /package/skills/{uncharted → j-uncharted}/assets/SEGMENT_PROPOSAL_TEMPLATE.md +0 -0
  174. /package/skills/{uncharted → j-uncharted}/scripts/apply-subsystem-cap.sh +0 -0
  175. /package/skills/{uncharted → j-uncharted}/scripts/discover-subsystems.sh +0 -0
package/README.md CHANGED
@@ -1,6 +1,7 @@
1
1
  # Jenga AI
2
+ ### No agent merges its own code.
2
3
 
3
- **A structured multi-agent development workflow that works with any AI agent or AI-native IDE.** Three specialised AI agents — Scrum Master, Developer, and Tester — collaborate through a shared scrum board, an event-driven trigger queue, and 28 slash-command skills to take a project from idea to verified, committed code — across as many sessions as it takes.
4
+ Jenga AI is an agentic software engineering framework for AI-assisted development: it splits work across three role-bounded agents — a Scrum Master that plans, a Developer that implements in an isolated git worktree, and a Tester that runs your test suite and owns the board status. Work survives session boundaries as Epics, Stories, and Tasks on a Markdown board your agent reads at the start of every session.
4
5
 
5
6
  [![npm version](https://img.shields.io/npm/v/@jenga-ai/agent.svg)](https://www.npmjs.com/package/@jenga-ai/agent)
6
7
  [![license](https://img.shields.io/npm/l/@jenga-ai/agent.svg)](LICENSE)
@@ -9,124 +10,110 @@
9
10
  npm install @jenga-ai/agent
10
11
  ```
11
12
 
12
- ## What You Get
13
-
14
- - **Three specialised agents** — Scrum Master, Developer, Tester — each with a distinct role and no self-graded work
15
- - **A persistent scrum board** — Epics, Stories, and Tasks tracked as Markdown files with structured frontmatter, surviving every session boundary
16
- - **28 slash-command skills** — from planning (`/pi-plan`, `/todo`) to execution (`/do`, `/dooo`) to review (`/status`, `/reconcile`)
17
- - **An event-driven trigger queue** — async handoffs between agents with a full audit trail in `project/logs/events.json`
18
- - **Isolated git worktrees per task** — the Developer never works directly on your main branch
19
- - **Works with any AI agent or IDE** — Claude Code, GitHub Copilot, Warp, and Codex CLI are all supported today
20
-
21
- > 📖 **Full reference:** [project/.wiki/documentation.md](project/.wiki/documentation.md) | [Intro Guide](project/.wiki/intro-guide.md)
22
-
23
- ## Platform Support
24
-
25
- | Agent | Skills & Agents | Root Context File |
26
- |---|---|---|
27
- | **Claude Code** | `.claude/` — mirrored automatically on install | `CLAUDE.md` — generated by `/init` today |
28
- | **GitHub Copilot** | `.agents/` — mirrored automatically on install | `.github/copilot-instructions.md` — bootstrapped at `npm install` time, refined by `jenga init` |
29
- | **Codex** | `.agents/` — mirrored automatically on install | `AGENTS.md` — generated by `/init` today |
30
-
31
- `CLAUDE.md` and `AGENTS.md` are generated unconditionally by `/init` — every agent gets a real, populated root-level context file out of the box, not just a pointer. If either file already exists as a genuine pre-existing user file, Jenga writes its own copy as `J-CLAUDE.md` / `J-AGENTS.md` instead and inserts a short reference into the existing file, leaving it otherwise untouched.
32
-
33
- `.github/copilot-instructions.md` follows a different path: `scripts/postinstall.js` writes it unconditionally and non-interactively the moment `npm install` finishes, so Copilot has working `/skill-name` routing instructions even if a consumer's very first action is a Copilot slash command, before the separate `jenga init` CLI wizard has ever run. Running `jenga init` afterward refines the same file using the user's actual chosen skills path — it is never generated by the `/init` skill itself.
13
+ ## The Problem It Solves
34
14
 
35
- ---
15
+ You've had this happen: Claude wrote the feature, said it worked, and the session ended. Next session it had no idea any of it existed. Without a framework like Jenga AI, AI-assisted development has serious structural weaknesses:
36
16
 
37
- ## The Problem It Solves
17
+ [![How AI Coding Agents Understand Your Codebase & Developer Tools](https://img.youtube.com/vi/zAe-sau06io/maxresdefault.jpg)](https://www.youtube.com/watch?v=zAe-sau06io)
38
18
 
39
- Without a framework like Jenga AI, AI-assisted development has serious structural weaknesses:
19
+ *"How AI Coding Agents Understand Your Codebase & Developer Tools" — IBM Technology on the same gap in persistent development context and tooling context that Jenga AI's board and agent contracts are built to close.*
40
20
 
41
21
  | Problem | Reality |
42
22
  |---|---|
43
- | **AI has no session memory** | Every AI agent session starts from scratch — no awareness of open tasks, past decisions, or what was already tested |
23
+ | **No persistent engineering context** | Every AI agent session starts from scratch — no awareness of open tasks, past decisions, or what was already tested |
44
24
  | **No role separation** | The AI writes *and* "tests" code in the same context, leading to hallucinated test results and self-affirming bugs |
45
25
  | **No structured planning** | Work happens ad-hoc — no Epic → Story → Task hierarchy to organise or track progress |
46
26
  | **No handoff protocol** | Switching from implementing to testing means manually re-explaining context every time |
47
27
  | **No audit trail** | You can't replay *why* something was built, by which agent, based on which task |
48
28
  | **Sessions just end** | Work-in-progress, unresolved problems, and incomplete stories silently vanish |
49
29
 
50
- Jenga AI solves each of these with structure: persistent board state, strict agent roles, typed inter-agent contracts, and session-end hooks that preserve context between sessions.
30
+ Jenga AI solves each of these with structure: persistent engineering context maintained via board state, strict agent roles, typed inter-agent contracts, and session-end hooks that carry that context between sessions.
51
31
 
52
32
  ---
53
33
 
54
- ## Examples
34
+ ## What You Get
55
35
 
56
- ### Before / After
36
+ - **Three specialised agents** — Scrum Master, Developer, Tester — each with a distinct role and no self-graded work
37
+ - **A persistent, Kanban-style scrum board** — Epics, Stories, and Tasks tracked as Markdown files with structured frontmatter, surviving every session boundary
38
+ - **A coordinated skill pipeline — one agentic workflow, not a command list** — planning skills (`j.pi-plan`, `j.todo`) hand off to execution skills (`j.do`, `j.dooo`), which hand off to review skills (`j.status`, `j.reconcile`), each stage reading and writing the same board state — the old bare `/<name>` form still works everywhere as a permanent alias
39
+ - **An event-driven trigger queue** — async handoffs between agents with a full audit trail in `project/logs/events.json`
40
+ - **Isolated git worktrees per task** — the Developer never works directly on your main branch
41
+ - **Works with any AI coding agent or AI-native IDE** — Claude Code, GitHub Copilot, and Codex CLI are all supported today
57
42
 
58
- **Without Jenga AI:**
59
- ```
60
- You: "Add user authentication"
61
- AI agent: [writes auth code, declares it works, session ends]
43
+ > 📖 **Full reference:** [project/.wiki/documentation.md](project/.wiki/documentation.md) | [Intro Guide](project/.wiki/intro-guide.md)
62
44
 
63
- Next session:
64
- You: "What's the status of auth?"
65
- AI agent: "I don't have context from the previous session."
66
- ```
45
+ ### "Isn't this just an LLM grading another LLM?"
67
46
 
68
- **With Jenga AI:**
69
- ```
70
- /todo → "Add user authentication" → linked to E01_S02
71
- /do → Developer creates worktree E01_S02_T01-auth
72
- → implements, commits at milestones
73
- → hands off to Tester with sender object
47
+ The Tester doesn't read your code and form an opinion about it. It executes the test suite you configure in `project/configs/test-config.json` and reports pass or fail — in this repo, `bats` for unit and integration, `shellcheck` for SAST. What Jenga guarantees structurally is that the agent that wrote the code is not the agent that decides it's done, and doesn't get to write its own status onto the board. What comes out of that gate depends on what you wire into it — the same as any CI pipeline.
48
+
49
+ ## Platform Support
74
50
 
75
- Tester → runs tests, updates board status to ✅ Passed
76
- SessionEnd → writes status_review trigger to queue
51
+ | Agent | Skills & Agents | Root Context File |
52
+ |---|---|---|
53
+ | **Claude Code** | `.claude/` — mirrored automatically on install | `CLAUDE.md` — generated by `j.init` today |
54
+ | **GitHub Copilot** | `.agents/` — mirrored automatically on install | `.github/copilot-instructions.md` — bootstrapped at `npm install` time, refined by `jenga init` |
55
+ | **Codex** | `.agents/` — mirrored automatically on install | `AGENTS.md` — generated by `j.init` today |
77
56
 
78
- Next session:
79
- /status → "E01_S02 ✅ complete — E01_S03 pending"
80
- ```
57
+ `CLAUDE.md` and `AGENTS.md` are generated unconditionally by `j.init` — every agent gets a real, populated root-level context file, not just a pointer. If either file already exists as a genuine pre-existing user file, Jenga leaves it untouched, writes its own copy as `J-CLAUDE.md` / `J-AGENTS.md`, and inserts a short reference line into the original.
58
+
59
+ `.github/copilot-instructions.md` follows a different path, because Copilot needs it before `j.init` may ever run: `npm install` triggers `scripts/postinstall.js`, which writes it unconditionally and non-interactively, so `j.<name>` routing (the bare `/<name>` form still resolves too, as a permanent alias) works from a consumer's very first Copilot command. A later `jenga init` run refines that same file using the project's actual chosen skills path.
81
60
 
82
61
  ---
83
62
 
84
- ### Real-World Scenario: Building a Feature Across Sessions
63
+ ## Examples
85
64
 
86
- Imagine you're building a REST API with auth, rate limiting, and an admin dashboard. Each is a separate Epic. Here's how Jenga AI handles that across multiple days:
65
+ ### A Real Session, On This Repo
87
66
 
88
- **Planning**
89
- ```
90
- /init → scaffolds project/, board/, workflow.json
91
- /pi-plan → Scrum Master helps shape the auth epic into stories
92
- /todo → "Add JWT auth" → E01_S01, "Add refresh tokens" → E01_S02
93
- ```
67
+ Not a demo — this is what actually produced the section you're reading.
68
+
69
+ The conversation starts with a request to align this README's language and content with a positioning plan drafted for this epic (E41):
94
70
 
95
- **Implementation**
96
71
  ```
97
- /do → Developer picks up E01_S01_T01-jwt-middleware
98
- → creates isolated worktree, implements, commits
99
- → Tester validates, marks Passed, triggers rollup
100
- /status → E01_S01 ✅, E01_S02 Pending
101
- /continue → picks up E01_S02 automatically
102
- /proceed → resumes project plan from current board state
72
+ j.improve E41: I want to make some adjustments to the README in both
73
+ language as well as content to better match [the E41 positioning plan]
74
+ [...]
103
75
  ```
104
76
 
105
- **New idea mid-session**
77
+ That plan already existed, so the copy gets edited directly — no need to re-run a fresh analysis pass just to re-derive it. A few edits later, ten more issues surface, one with an `j.brainstorm` request attached:
78
+
106
79
  ```
107
- You: "Actually, let's also add API rate limiting while we're at it"
108
- /btw → captures "rate limiting" as E02 without losing E01 context
109
- → returns focus to E01_S02
110
- /spinoff → captures a diverging topic mid-conversation, saves as /todo
111
- → returns focus to primary thread
80
+ Then do a j.todo on this, as there are more places that should be
81
+ edited based on that scrutiny rapport:
82
+ * Remove warning banner about Copilot conflict
83
+ [...]
84
+ * Fewer, better and more relatable examples, we should
85
+ j.brainstorm this so I can send examples from real world usecases
86
+ [...]
87
+ * Should we really display the entire Skill list here?
88
+ [...]
112
89
  ```
113
90
 
114
- **Parallel work**
91
+ `j.todo` classifies the ten items into two stories: nine mechanical README fixes (`E41_S10`), and the Examples section you're reading right now (`E41_S11`) — carved out and held back specifically because of that `j.brainstorm` request, since a real example had to come from the user, not be invented.
92
+
93
+ Once `E41_S10` is on the board, it's picked to run first. The Scrum Master reads the story and decomposes it into seven tasks, executed through `j.do`. Five are small, single-file text fixes deemed `--trivial` — they run inline, smoke-tested and committed directly, no worktree needed. Two need an editorial call — one of them being which skills are "foundational" enough to stay inline — those escalate to a real git worktree with a Developer and a Tester. The Tester independently re-verifies the diff, catches one file the Developer missed, fixes it, and queues the story for rollup. The Scrum Master processes that queue next: `E41_S10` → `Passed`. Epic `E41` stays `In Progress` — three other stories are still open.
94
+
95
+ Then, circling back to the deferred request:
96
+
115
97
  ```
116
- /jenga → interactive board orchestrator: pick or scope, confirm, then execute (`/jenga *` for the original fully automated, no-prompts run)
117
- /dooo → orchestrates E01_S02 and E02_S01 in parallel sub-agents
118
- /reconcile → syncs board with actual git history after parallel merges
98
+ Jenga AI: [...] Remaining open thread from this session: E41_S11
99
+ (Examples rework) is on the board but not started — it's gated on
100
+ a j.brainstorm session where you supply real-world use cases. Want
101
+ to do that now, or leave it queued?
102
+
103
+ You: do it now
119
104
  ```
120
105
 
121
- The board, the audit log, and `PROJECT_SUMMARY.md` survive every session boundary. You never re-explain context.
106
+ `j.brainstorm` opens for the gated story — the session you're reading right now, working out what this example should even say.
107
+
108
+ Nobody hand-wrote this task breakdown. The board did it, the routing rules decided what needed a real worktree versus what could run inline, and the Tester — not the agent that made the edits — decided when each piece was actually done. The board entries are real: `E41_S10` and `E41_S11`.
122
109
 
123
110
  ---
124
111
 
125
- ## How It Works
112
+ ## How Jenga AI's Agentic Workflow Works
126
113
 
127
114
  ```
128
- /init → /pi-plan → /todo → /do
129
- │
115
+ j.init → j.pi-plan → j.todo → j.do
116
+ │
130
117
  Developer agent
131
118
  (isolated worktree, commits)
132
119
  │
@@ -166,8 +153,7 @@ Each agent is defined in `.agents/agents/`. They communicate exclusively through
166
153
 
167
154
  **Prerequisites:** An AI agent or AI-native IDE. Supported platforms include:
168
155
  - [Claude Code](https://docs.anthropic.com/en/docs/claude-code)
169
- - GitHub Copilot (VS Code extension or CLI)
170
- - [Warp](https://www.warp.dev/)
156
+ - [GitHub Copilot](https://github.com/features/copilot) (VS Code extension or CLI)
171
157
  - Codex CLI
172
158
 
173
159
  **Install from npm:**
@@ -177,13 +163,13 @@ npm install -g @jenga-ai/agent
177
163
 
178
164
  Or clone directly:
179
165
 
180
- 1. **Clone or copy this repo** into your project's `.agents/` directory (or wherever you keep project tooling).
181
- 2. **Run `/init`** — scaffolds `project/`, creates `workflow.json`, `PROJECT_SUMMARY.md`, and makes an initial commit.
182
- 3. **Run `/pi-plan`** — define your project goals and initial epics.
183
- 4. **Run `/todo`** — describe features to implement; they're linked to the board automatically.
184
- 5. **Run `/do`** — picks the first task and drives the full implement → test → commit loop.
166
+ 1. **Clone or copy this repo** into your project's root.
167
+ 2. **Run `j.init`** — scaffolds `project/`, creates `workflow.json`, `PROJECT_SUMMARY.md`, and makes an initial commit.
168
+ 3. **Run `j.pi-plan`** — define your project goals and initial epics.
169
+ 4. **Run `j.todo`** — describe features to implement; they're linked to the board automatically.
170
+ 5. **Run `j.do`** — picks the first task and drives the full implement → test → commit loop.
185
171
 
186
- Run `/status` at any time to see where the project stands.
172
+ Run `j.status` at any time to see where the project stands.
187
173
 
188
174
  ---
189
175
 
@@ -195,7 +181,6 @@ Jenga AI has been tested with:
195
181
  |---|---|
196
182
  | [Claude Code](https://docs.anthropic.com/en/docs/claude-code) | AI coding agent |
197
183
  | [GitHub Copilot](https://github.com/features/copilot) | AI coding assistant |
198
- | [Warp](https://www.warp.dev/) | AI-native terminal |
199
184
  | Codex CLI | AI coding agent |
200
185
 
201
186
  The framework is platform-agnostic by design — any AI agent that can read Markdown files and execute slash commands can use it.
@@ -204,188 +189,40 @@ The framework is platform-agnostic by design — any AI agent that can read Mark
204
189
 
205
190
  ## Skills (Slash Commands)
206
191
 
207
- Skills live in `.agents/skills/<name>/SKILL.md`. Invoke with `/<name>` in your AI agent or IDE's command interface.
208
-
209
- ### Setup & Planning
210
-
211
- | Command | Description |
212
- |---|---|
213
- | `/init` | Scaffold project directories, `workflow.json`, `PROJECT_SUMMARY.md`, initial git commit |
214
- | `/jbp` | Scaffold using the [JengaBasePlate](https://github.com/samwelmunga/JengaBasePlate.git) boilerplate |
215
- | `/jenga` | Interactive-by-default board orchestrator — bare shows a picker + confirmation tree, `<ids>` scopes and confirms, `*` runs fully automated with no prompts |
216
- | `/pi-plan` | Define or expand Epics in `PROJECT_SUMMARY.md` — use at start or when adding major new work |
217
- | `/brainstorm` | Focused planning session with the Scrum Master before committing anything to the board |
218
- | `/deep-dive` | Multi-phase investigation — gathers info, brainstorms, scrutinises, and produces a refined output |
219
- | `/uncharted` | Entry point for code with no board provenance — `segment` (a file or directory), `import` (an external source), `onboard` (a whole pre-existing codebase) |
220
- | `/todo` | Add missions to `project/todo.md` linked to epics and stories |
221
- | `/btw` | Capture a mid-flow idea, classify it into epic/story structure, implement now or defer |
222
- | `/spinoff` | Capture a diverging topic without losing your current thread |
223
-
224
- ### Execution
225
-
226
- | Command | Description |
227
- |---|---|
228
- | `/do` | Execute tasks from the scrum board, drives the Developer agent through the full loop |
229
- | `/dooo` | Parallel execution orchestrator — runs multiple tasks simultaneously via sub-agents |
230
- | `/redo` | Rework a previous implementation by commit SHA or Epic/Story number |
231
- | `/publish` | Configure, validate, and orchestrate scaffolded release workflows — `setup`, `deploy`, `stage` (npm/npm-ci pre-approval staged publishing), `history`, `release-notes` |
232
- | `/error` | Guided troubleshooting — gathers context, investigates, and drives a fix |
233
- | `/train` | Scaffold and run ML training jobs (new job from template or run existing) |
234
-
235
- ### Status & Review
236
-
237
- | Command | Description |
238
- |---|---|
239
- | `/status` | Print a full scrum board overview — epics, stories, tasks, rapports, queue depth |
240
- | `/jenga-permission-level` | Report or switch the current session's 5-tier permission level (Locked/Guarded/Standard/Elevated/Unrestricted) without hand-editing settings.json |
241
- | `/continue` | Check project status and pick up the next incomplete item |
242
- | `/proceed` | Review progress and resume executing the project plan |
243
- | `/reconcile` | Sync the board with actual git history — fixes drift, merges orphaned worktrees |
244
- | `/reconcile-origin` | Sync the current or specified branch with origin via rebase. Presents conflict reports with resolution options. |
192
+ Skills live in `.agents/skills/<name>/SKILL.md`. Invoke with `j.<name>` in your AI agent or IDE's command interface — the old bare `/<name>` form also keeps working permanently as an alias. A handful of the most foundational commands:
245
193
 
246
- ### Committing & Maintenance
194
+ > ⚠️ **Command collision with a host tool?** Some host tools ship their own built-in command that can
195
+ > shadow one of Jenga's — e.g. GitHub Copilot's own built-in `/init`, which could silently shadow
196
+ > Jenga's `/init` skill. Every skill (except `init`, already handled) has a collision-safe `/j-<name>`
197
+ > directory-twin form — e.g. `/j-init` — that always resolves to the genuine Jenga skill regardless of
198
+ > what else is installed. This is separate from the `j.<name>` prefix form above: it's a real duplicate
199
+ > directory under a distinct name, not a routing alias, generated and kept in sync via
200
+ > `scripts/generate-j-alias.sh`. If a `j.<name>` or bare `/<name>` command isn't behaving as
201
+ > documented, try its `/j-<name>` form instead.
247
202
 
248
203
  | Command | Description |
249
204
  |---|---|
250
- | `/commit` | Commit completed work using the EST naming convention |
251
- | `/lgtm` | Approve current work, commit, and continue — chains `/commit` + `/continue` |
252
- | `/distribute` | Propagate workflow changes to all registered consumer projects |
253
- | `/doc` | Generate or update a documentation file from codebase evidence |
254
- | `/doc-sync` | Compare project state with documentation and update stale docs |
255
- | `/skillify` | Refactor a skill — extract assets, offload scripts, clean up the body |
256
- | `/route` | Intelligently route a prompt to the best-matching skill |
257
- | `/improve` | Analyse a codebase and produce a structured improvement plan |
258
- | `/evaluate` | Analyse example files against a target goal and produce an evaluation rapport |
259
- | `/examplify` | Explain a concept, feature, or pattern with grounded examples |
260
- | `/help` | List all available skills with descriptions |
261
- | `/customize-cloud-agent` | Configure the Copilot cloud agent environment (`copilot-setup-steps.yml`, preinstalls, runners) |
262
-
263
- ---
264
-
265
- ## Distributing the Workflow
266
-
267
- Jenga AI can propagate its workflow files to other projects on your machine via `/distribute`.
268
-
269
- 1. **Register consumer projects** — add each consuming project to `distribute.config.json` at the repo root (or pass a path directly: `/distribute /path/to/project`).
270
- 2. **Run `/distribute`** — choose `major`, `minor`, `patch`, or `amend` release type; the skill handles versioning, dry-run preview, file copy, and a version bump commit.
271
-
272
- Each consuming project holds a `jenga.config.json` tracking the distributed version, last distribution date, and source. To exclude specific files per consumer project, add a `.jenga_ignore` at the consumer root (never overwritten by distribute).
273
-
274
- ---
205
+ | `j.init` | Scaffold project directories, `workflow.json`, `PROJECT_SUMMARY.md`, initial git commit |
206
+ | `j.jenga` | Interactive-by-default board orchestrator — bare shows a picker + confirmation tree, `<ids>` scopes and confirms, `*` runs fully automated with no prompts |
207
+ | `j.todo` | Add missions to `project/todo.md` linked to epics and stories |
208
+ | `j.do` | Execute tasks from the scrum board, drives the Developer agent through the full loop |
209
+ | `j.status` | Print a full scrum board overview — epics, stories, tasks, rapports, queue depth |
275
210
 
276
- ## Directory Structure
277
-
278
- ```
279
- .agents/ ← Workflow root (place this in your project)
280
- ├── agents/
281
- │ ├── scrum-master.md
282
- │ ├── developer.md
283
- │ └── tester.md
284
- ├── hooks/
285
- │ └── on_session_end.sh
286
- ├── mcp/
287
- │ ├── help/
288
- │ └── execute-ticket/
289
- ├── skills/
290
- │ ├── brainstorm/
291
- │ ├── btw/
292
- │ ├── commit/
293
- │ ├── continue/
294
- │ ├── deep-dive/
295
- │ ├── distribute/
296
- │ ├── do/
297
- │ ├── doc/
298
- │ ├── doc-sync/
299
- │ ├── dooo/
300
- │ ├── error/
301
- │ ├── evaluate/
302
- │ ├── examplify/
303
- │ ├── help/
304
- │ ├── improve/
305
- │ ├── init/
306
- │ ├── pi-plan/
307
- │ ├── jbp/
308
- │ ├── jenga/
309
- │ ├── lgtm/
310
- │ ├── proceed/
311
- │ ├── reconcile/
312
- │ ├── redo/
313
- │ ├── route/
314
- │ ├── skillify/
315
- │ ├── spinoff/
316
- │ ├── status/
317
- │ ├── todo/
318
- │ └── train/
319
- ├── templates/
320
- │ ├── SCRUM_BOARD_SCHEMA.md
321
- │ ├── PROBLEM_RAPPORT_TEMPLATE.md
322
- │ └── JENGA_CONFIG_TEMPLATE.json
323
- ├── settings.json
324
- ├── jenga.config.json ← Workflow version source
325
- ├── .jenga_paths ← Machine-local consumer paths (git-ignored)
326
- └── RELEASE_NOTE.md
327
-
328
- project/ ← Created by /init inside your software project
329
- ├── board/
330
- │ ├── epics/ ← E##_<slug>.md
331
- │ ├── stories/ ← E##_S##_<slug>.md
332
- │ └── tasks/ ← E##_S##_T##_<slug>.md
333
- ├── configs/
334
- │ ├── workflow.json ← Shared constants (statuses, paths, agents)
335
- │ └── test-config.json ← Test tool stack (owned by Tester, user-approved)
336
- ├── data/
337
- │ └── baselines.json ← Analytics baselines (owned by Tester)
338
- ├── documentation/
339
- │ ├── plans/ ← Pre-execution plans by Developer
340
- │ └── summaries/ ← Post-execution summaries by Developer
341
- ├── queue/
342
- │ ├── scrum_triggers.jsonl
343
- │ ├── developer_triggers.jsonl
344
- │ ├── tester_triggers.jsonl
345
- │ └── project_summary_updates.jsonl
346
- ├── rapports/
347
- │ ├── problems/ ← Problem rapports (Developer + Tester)
348
- │ └── analysis/ ← Analysis rapports (Tester)
349
- ├── logs/
350
- │ └── events.json ← Append-only inter-agent event log
351
- └── PROJECT_SUMMARY.md ← Project source of truth (owned by Scrum Master)
352
-
353
- CHANGELOG.md ← Created by /init at the project's repo root; maintained by /publish
354
- ```
355
-
356
- ---
357
-
358
- ## Agent Communication Contract
359
-
360
- Every inter-agent call passes a typed **sender object**:
361
-
362
- ```json
363
- {
364
- "sender": {
365
- "agent": "<scrum-master | developer | tester | orchestrator>",
366
- "session_id": "<session id>",
367
- "task_id": "<E##_S##_T##>",
368
- "story_id": "<E##_S##>",
369
- "epic_id": "<E##>",
370
- "date": "<ISO 8601 UTC>",
371
- "paths": ["<commit SHA>", "..."],
372
- "worktree": "<absolute path to worktree>"
373
- }
374
- }
375
- ```
376
-
377
- All agents log every incoming sender object to `project/logs/events.json` as their **first action** on every invocation.
211
+ > 📖 **Full skill list** (planning, review, committing & maintenance commands): [project/.wiki/documentation.md](project/.wiki/documentation.md#skills)
378
212
 
379
213
  ---
380
214
 
381
215
  ## When to Use Jenga AI
382
216
 
383
217
  **Use it when:**
384
- - You're building a non-trivial project across multiple sessions
385
- - You want reliable test separation — the Tester never trusts the Developer's self-assessment
218
+ - You're building a non-trivial project across multiple sessions and need persistent engineering context instead of re-explaining it every time
219
+ - You want an agentic development workflow with separate planning, coding, testing, and review agents — not one model self-grading its own work
386
220
  - You need traceability — who did what, when, on which task
387
- - You want to reuse and propagate your AI workflow across multiple projects
221
+ - You're working across more than one AI coding agent or AI-native IDE and want one workflow, not a separate setup per tool
222
+ - You want to reuse and propagate the same agentic workflow across multiple projects (`j.distribute`)
388
223
 
389
224
  **You might not need it when:**
390
225
  - You're doing a quick one-off script or single-session experiment
391
226
  - Your project has no meaningful test surface
227
+
228
+ 📖 **Full reference:** [project/.wiki/documentation.md](project/.wiki/documentation.md)
@@ -160,7 +160,7 @@ Commit at defined milestones within a task — not after every line, and not onl
160
160
 
161
161
  Write clear, descriptive commit messages. Your commit messages serve as a guide for the tester — they should communicate what changed and why, not just what files were touched.
162
162
 
163
- Use the `/commit` skill to commit.
163
+ Use the `j.commit` skill to commit.
164
164
 
165
165
  ### Crucial Tier: `advisory`
166
166
 
@@ -213,11 +213,11 @@ This list is fixed and verbatim across both this file and `agents/tester.md` —
213
213
 
214
214
  **Trigger.** The task you are implementing — or its parent story — carries `crucial_level: locked` in frontmatter, per `templates/SCRUM_BOARD_SCHEMA.md`'s "Crucial Flag Fields (Story, Task)" section.
215
215
 
216
- **Effect — forced inline scope.** `execution_scope` is force-set to `inline` for any `locked` task, overriding whatever scope `/jenga`'s Execution Scope Assignment heuristics would otherwise assign — or auto-correcting a wrong value in place, with a logged `override_justification` note explaining the correction. The concrete mechanism is `skills/jenga/SKILL.md` Phase 0.5's **Rule 4 — `crucial_level: locked` forces `execution_scope: inline`** (added by E39_S03_T03).
216
+ **Effect — forced inline scope.** `execution_scope` is force-set to `inline` for any `locked` task, overriding whatever scope `j.jenga`'s Execution Scope Assignment heuristics would otherwise assign — or auto-correcting a wrong value in place, with a logged `override_justification` note explaining the correction. The concrete mechanism is `skills/jenga/SKILL.md` Phase 0.5's **Rule 4 — `crucial_level: locked` forces `execution_scope: inline`** (added by E39_S03_T03).
217
217
 
218
- **Effect — dispatch-time rejection of backgrounding.** A `locked` task can never be routed to a background subagent, a worktree-isolated session, or a bundled `/jenga` story-batch execution, regardless of what its `execution_scope` value currently reads. This is enforced at two separate points, both added by E39_S03_T04: `skills/jenga/SKILL.md` Phase 3.5 step 5's **Guard: locked-task disqualifier (defense-in-depth)**, which disqualifies any story containing a `locked` task from the bundle path before dispatch, and `skills/do/SKILL.md` Section 4.2's **Locked-task dispatch guard (defense-in-depth)**, which forces the inline execution path (no worktree, no developer subagent) at the point of dispatch even if `execution_scope` somehow still reads something other than `inline`.
218
+ **Effect — dispatch-time rejection of backgrounding.** A `locked` task can never be routed to a background subagent, a worktree-isolated session, or a bundled `j.jenga` story-batch execution, regardless of what its `execution_scope` value currently reads. This is enforced at two separate points, both added by E39_S03_T04: `skills/jenga/SKILL.md` Phase 3.5 step 5's **Guard: locked-task disqualifier (defense-in-depth)**, which disqualifies any story containing a `locked` task from the bundle path before dispatch, and `skills/do/SKILL.md` Section 4.2's **Locked-task dispatch guard (defense-in-depth)**, which forces the inline execution path (no worktree, no developer subagent) at the point of dispatch even if `execution_scope` somehow still reads something other than `inline`.
219
219
 
220
- **No agent-discretion obligation.** Unlike `advisory` (a reporting-cadence habit you must remember to keep up) and `gated` (a confirmation you must actively pause and perform), `locked` requires no judgment call from you at all. It is fully enforced by pre-flight validation (Rule 4) and dispatch-time guards (the Phase 3.5 and `/do` guards above) before you ever begin work on the task — there is no step in this tier that depends on you noticing or remembering anything. Your only obligation is to recognize that a `locked` task will always run in the current foreground session, and to never manually route around that guarantee — for example, do not spin up your own background subagent or a separate worktree-isolated session to "help" with a `locked` task, even if it seems more efficient. If a locked task ever reaches you already running in a background or worktree-isolated context, treat that as a guard failure worth flagging (see Rapport System), not something to quietly work through.
220
+ **No agent-discretion obligation.** Unlike `advisory` (a reporting-cadence habit you must remember to keep up) and `gated` (a confirmation you must actively pause and perform), `locked` requires no judgment call from you at all. It is fully enforced by pre-flight validation (Rule 4) and dispatch-time guards (the Phase 3.5 and `j.do` guards above) before you ever begin work on the task — there is no step in this tier that depends on you noticing or remembering anything. Your only obligation is to recognize that a `locked` task will always run in the current foreground session, and to never manually route around that guarantee — for example, do not spin up your own background subagent or a separate worktree-isolated session to "help" with a `locked` task, even if it seems more efficient. If a locked task ever reaches you already running in a background or worktree-isolated context, treat that as a guard failure worth flagging (see Rapport System), not something to quietly work through.
221
221
 
222
222
  ---
223
223
 
@@ -225,7 +225,7 @@ This list is fixed and verbatim across both this file and `agents/tester.md` —
225
225
 
226
226
  You do not run tests. Before calling the tester agent, **write an execution summary** to `project/documentation/summaries/<E##_S##_T##>-summary.md` using `templates/EXECUTION_SUMMARY_TEMPLATE.md`. Fill in all sections — what was implemented, files changed, commit SHAs, acceptance criteria coverage, and any concerns for the tester. This step is mandatory before every tester invocation.
227
227
 
228
- When you reach a meaningful milestone within a task where verification is appropriate — or when the task is complete — call the tester agent. Always pass the following sender object when invoking the tester:
228
+ When you reach a meaningful milestone within a task where verification is appropriate — or when the task is complete — call the tester agent. Before invoking the tester, compose a short `resolved_context` digest of what you already resolved during implementation — which files you touched and why, which acceptance criteria map to which changes, any conventions or precedent you followed — and persist it by calling `scripts/write-context-digest.sh --agent developer --session-id <session_id> --task-id <task_id>` with that content (stays under the ~100-line/few-hundred-token cap defined in `templates/SCRUM_BOARD_SCHEMA.md`'s `resolved_context` subsection; the script rejects oversized input rather than truncating it). Place the script's returned path in the sender object's `resolved_context` field. Always pass the following sender object when invoking the tester:
229
229
 
230
230
  ```json
231
231
  {
@@ -237,12 +237,13 @@ When you reach a meaningful milestone within a task where verification is approp
237
237
  "epic_id": "<E##>",
238
238
  "date": "<ISO 8601 UTC timestamp>",
239
239
  "paths": ["<list of commit SHAs for this work>"],
240
- "worktree": "<absolute path to the worktree>"
240
+ "worktree": "<absolute path to the worktree>",
241
+ "resolved_context": "<path returned by scripts/write-context-digest.sh, or omit if no digest was written>"
241
242
  }
242
243
  }
243
244
  ```
244
245
 
245
- All fields must be present. In addition to the sender object, include a short plain-text implementation summary: what was implemented, which files changed, and any known edge cases or concerns. Reference the execution summary at `project/documentation/summaries/<E##_S##_T##>-summary.md` for full detail.
246
+ All fields must be present except `resolved_context`, which is optional. This digest is a starting point only, never a restriction: the tester may and should still read the full execution summary, the diff itself, or any other source file when the digest doesn't cover what it needs. In addition to the sender object, include a short plain-text implementation summary: what was implemented, which files changed, and any known edge cases or concerns. Reference the execution summary at `project/documentation/summaries/<E##_S##_T##>-summary.md` for full detail.
246
247
 
247
248
  Wait for the tester's response before continuing. If the tester returns `"failed"` or `"error"`, address the findings before proceeding.
248
249
 
@@ -289,7 +290,7 @@ See `templates/PROBLEM_RAPPORT_TEMPLATE.md` for the required format. Commit the
289
290
 
290
291
  ## Investigative Mode
291
292
 
292
- **Trigger.** You are sometimes dispatched not to implement a task, but purely to build understanding of existing code — e.g. by the scrum-master during `/uncharted`'s conversational architecture elicitation, when it needs to know what a named flow or target actually does before proposing graph nodes or asking the user to confirm/correct an understanding. This is a distinct dispatch mode from the standard Task Intake flow above, and it is recognized by the request itself (you are asked to *trace* or *investigate*, not to *implement*), not by any board field.
293
+ **Trigger.** You are sometimes dispatched not to implement a task, but purely to build understanding of existing code — e.g. by the scrum-master during `j.uncharted`'s conversational architecture elicitation, when it needs to know what a named flow or target actually does before proposing graph nodes or asking the user to confirm/correct an understanding. This is a distinct dispatch mode from the standard Task Intake flow above, and it is recognized by the request itself (you are asked to *trace* or *investigate*, not to *implement*), not by any board field.
293
294
 
294
295
  **Hard constraints.** Investigative Mode is strictly read-only:
295
296
  - No worktree is created for write purposes, no application code is written or modified, no dependency installs or generated artifacts.