@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
@@ -0,0 +1,87 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ skills/j-todo/scripts/update_story_tasks.py
4
+
5
+ Mechanically inserts a task ID into a story board file's `tasks:` frontmatter
6
+ list, if it is not already present. Idempotent (a re-run with the same
7
+ task_id is a no-op, exit 0).
8
+
9
+ This is a pure text/frontmatter edit and does no board-wide validation beyond
10
+ "frontmatter block exists" — it is intended to be invoked already wrapped in
11
+ scripts/with-lock.sh, keyed to the story file, per templates/SCRUM_BOARD_SCHEMA.md's
12
+ File Locking section (board frontmatter writes must go through the lock wrapper).
13
+
14
+ Usage:
15
+ python3 skills/j-todo/scripts/update_story_tasks.py <story-file> <task-id>
16
+
17
+ Exit codes:
18
+ 0 success (task_id inserted, or already present)
19
+ 1 usage error
20
+ 2 story file has no parseable frontmatter block
21
+ """
22
+ import sys
23
+
24
+
25
+ def main() -> int:
26
+ if len(sys.argv) != 3:
27
+ print("Usage: update_story_tasks.py <story-file> <task-id>", file=sys.stderr)
28
+ return 1
29
+
30
+ path, task_id = sys.argv[1], sys.argv[2]
31
+
32
+ with open(path, "r", encoding="utf-8") as f:
33
+ content = f.read()
34
+
35
+ parts = content.split("---", 2)
36
+ if len(parts) < 3:
37
+ print(f"Error: {path} has no valid '---' frontmatter block", file=sys.stderr)
38
+ return 2
39
+
40
+ _, frontmatter, rest = parts
41
+ lines = frontmatter.split("\n")
42
+ task_line = f" - {task_id}"
43
+
44
+ if any(line.strip() == task_line.strip() for line in lines):
45
+ print(f"No-op: {task_id} already present in {path}'s tasks: list")
46
+ return 0
47
+
48
+ idx = None
49
+ inline_empty_idx = None
50
+ for i, line in enumerate(lines):
51
+ stripped = line.strip()
52
+ if stripped == "tasks:":
53
+ idx = i
54
+ break
55
+ if stripped == "tasks: []":
56
+ inline_empty_idx = i
57
+ break
58
+
59
+ if inline_empty_idx is not None:
60
+ lines[inline_empty_idx] = "tasks:"
61
+ lines.insert(inline_empty_idx + 1, task_line)
62
+ elif idx is not None:
63
+ j = idx + 1
64
+ while j < len(lines) and lines[j].strip().startswith("- "):
65
+ j += 1
66
+ lines.insert(j, task_line)
67
+ else:
68
+ # No tasks: key found at all — append one at the end of the frontmatter,
69
+ # trimming any single trailing blank line first so formatting stays tidy.
70
+ if lines and lines[-1].strip() == "":
71
+ lines.pop()
72
+ lines.append("tasks:")
73
+ lines.append(task_line)
74
+ lines.append("")
75
+
76
+ new_frontmatter = "\n".join(lines)
77
+ new_content = "---" + new_frontmatter + "---" + rest
78
+
79
+ with open(path, "w", encoding="utf-8") as f:
80
+ f.write(new_content)
81
+
82
+ print(f"Updated {path}: added {task_id} to tasks:")
83
+ return 0
84
+
85
+
86
+ if __name__ == "__main__":
87
+ sys.exit(main())
@@ -1,6 +1,6 @@
1
1
  ---
2
- name: uncharted
3
- description: Investigate code that has no Jenga board provenance — a foreign file, an external source being pulled in, or an entire pre-existing codebase — and give it a consistent understanding document plus proper board representation.
2
+ name: j.uncharted
3
+ description: Polyfill alias of the uncharted skill under a collision-safe directory name. Identical behavior to /uncharted — Investigate code that has no Jenga board provenance — a foreign file, an external source being pulled in, or an entire pre-existing codebase — and give it a consistent understanding document plus proper board representation. Use when the bare /uncharted form is shadowed by another tool's own built-in command of the same name.
4
4
  metadata:
5
5
  prefered_agent: scrum-master
6
6
  keywords:
@@ -12,6 +12,8 @@ keywords:
12
12
  - "import source"
13
13
  - "unlinked code"
14
14
  - "no board history"
15
+ - j-uncharted
16
+ - polyfill
15
17
  examples:
16
18
  - "what does this file actually do?"
17
19
  - "help me understand this directory I inherited"
@@ -20,10 +22,15 @@ examples:
20
22
  - "this code has no board history, get it onto the board"
21
23
  - "analyse the legacy module nobody understands"
22
24
  - "onboard this existing codebase"
25
+ - "j-uncharted"
23
26
  ---
24
27
 
25
28
  # Uncharted — Investigative Workflow for Foreign & Pre-Existing Code
26
29
 
30
+ This skill is a literal-directory-name duplicate of `skills/uncharted/`. It exists so that `/j-uncharted` (and `j.j-uncharted`) give a guaranteed-unshadowed way to reach the same flow as `/uncharted`, even if a host tool's own built-in command of the same name would otherwise shadow or override the bare `/uncharted` alias (Claude Code's native skill resolution is a literal-string, directory-name-based match — see `docs/skill-authoring.md`'s "Invocation Convention").
31
+
32
+ This file is generated/synced by `scripts/generate-j-alias.sh uncharted` from `skills/uncharted/SKILL.md` — do not hand-edit it; re-run the generator instead to pick up source changes.
33
+
27
34
  `/uncharted` is the entry point for code with **no board provenance** — code that was never planned, decomposed, or executed through the Jenga workflow.
28
35
 
29
36
  It fills a gap the existing investigative skills leave open:
@@ -62,7 +69,7 @@ Every mode runs the same shared investigative engine and emits the same understa
62
69
 
63
70
  ## Shared Investigative Engine
64
71
 
65
- All three modes call the same engine rather than reimplementing analysis. Per the Skill Implementation Principle in `CLAUDE.md`, the deterministic work lives in scripts under `skills/uncharted/scripts/`, not in this file:
72
+ All three modes call the same engine rather than reimplementing analysis. Per the Skill Implementation Principle in `CLAUDE.md`, the deterministic work lives in scripts under `skills/j-uncharted/scripts/`, not in this file:
66
73
 
67
74
  | Script | Responsibility | Implemented by |
68
75
  |---|---|---|
@@ -74,7 +81,7 @@ All three modes call the same engine rather than reimplementing analysis. Per th
74
81
  **Invoke `run-engine.sh`, never the individual detectors.** It is the only supported entry point; calling a detector directly gets you raw JSON and no document.
75
82
 
76
83
  ```bash
77
- DOC=$(bash skills/uncharted/scripts/run-engine.sh --mode segment <target>)
84
+ DOC=$(bash skills/j-uncharted/scripts/run-engine.sh --mode segment <target>)
78
85
  ```
79
86
 
80
87
  | Option | Effect |
@@ -106,7 +113,7 @@ Do not restate in prose what these scripts do step by step, and do not reimpleme
106
113
 
107
114
  ## Output: the Understanding Document
108
115
 
109
- Every mode produces exactly one document per target, rendered from `skills/uncharted/assets/UNDERSTANDING_DOC_TEMPLATE.md`.
116
+ Every mode produces exactly one document per target, rendered from `skills/j-uncharted/assets/UNDERSTANDING_DOC_TEMPLATE.md`.
110
117
 
111
118
  **Where it goes:** `project/rapports/analysis/`, named `uncharted-<mode>-<slug>-<YYYYMMDDTHHMMSSZ>.md`. Nothing is ever overwritten — a name collision gets a `-2`, `-3`… suffix, so repeated runs against one target leave a diffable history.
112
119
 
@@ -170,7 +177,7 @@ Runs once per elicitation, between discovery and the first Investigative Mode di
170
177
 
171
178
  ```bash
172
179
  discover-subsystems.sh <root> | jq -r '.candidates[].path' \
173
- | bash skills/uncharted/scripts/directory-triage.sh <root>
180
+ | bash skills/j-uncharted/scripts/directory-triage.sh <root>
174
181
  ```
175
182
 
176
183
  Read `ignored` (already excluded by `.gitignore`, or matching the fixed vendor/generated pattern list — see the script's own header for the full list) and `remaining`. This is a mechanical classification; do not second-guess it or re-run judgement over an `ignored` entry.
@@ -211,7 +218,7 @@ Runs once per surviving candidate (a subsystem, a named flow, a directory) after
211
218
  4. **Confirm/correct, one round per call to `elicitation-state.sh turn`.** For a node requiring confirmation, present the draft and ask the user to confirm or correct it (per the Interaction Pattern in `CLAUDE.md` — confirm / correct-with-detail / defer as "unconfirmed" / other). Each round, call:
212
219
 
213
220
  ```bash
214
- bash skills/uncharted/scripts/elicitation-state.sh turn --id <elicitation-id> --node <node-id>
221
+ bash skills/j-uncharted/scripts/elicitation-state.sh turn --id <elicitation-id> --node <node-id>
215
222
  ```
216
223
 
217
224
  Exit `0` means keep looping (cap not yet reached) if the user corrected rather than confirmed. Exit `3` means **the hard turn cap has been reached** — the node is now marked `flagged` in the state file. **Do not loop again on that node.** Instead present it as unresolved and offer an explicit choice rather than looping indefinitely (solution assessment, Problem 10, Solution A — RECOMMENDED):
@@ -228,7 +235,7 @@ Runs once per surviving candidate (a subsystem, a named flow, a directory) after
228
235
  5. **On convergence** (confirmed, corrected-and-accepted, or resolved via the cap choice above), call:
229
236
 
230
237
  ```bash
231
- bash skills/uncharted/scripts/elicitation-state.sh converge --id <elicitation-id> --node <node-id> --note "<one-line summary of what was confirmed>"
238
+ bash skills/j-uncharted/scripts/elicitation-state.sh converge --id <elicitation-id> --node <node-id> --note "<one-line summary of what was confirmed>"
232
239
  ```
233
240
 
234
241
  then write the node/edge to `project/knowledge-graph/graph.json` per the stub schema, and checkpoint the elicitation state (next section) — **after every converged node**, not only at the end of the whole run.
@@ -240,7 +247,7 @@ A whole-codebase `onboard` conversation, or an investigation of a large director
240
247
  - **`init` once, at the start of an elicitation:**
241
248
 
242
249
  ```bash
243
- bash skills/uncharted/scripts/elicitation-state.sh init --id <elicitation-id> --target "<path or description>" --cap 5
250
+ bash skills/j-uncharted/scripts/elicitation-state.sh init --id <elicitation-id> --target "<path or description>" --cap 5
244
251
  ```
245
252
 
246
253
  Idempotent — safe to call again on a resumed `<elicitation-id>` without resetting progress. Choose `<elicitation-id>` so it is stable and re-derivable across sessions (e.g. `onboard-<root-slug>-<date>`, or `segment-investigate-<target-slug>`), since a resuming session must be able to reconstruct it to call `init` again.
@@ -288,7 +295,7 @@ Unchanged from before E20_S08_T03 — every step below is exactly what `segment`
288
295
  **Step 1 — Resolve the target.** Deterministic; do not eyeball it.
289
296
 
290
297
  ```bash
291
- bash skills/uncharted/scripts/resolve-segment-target.sh --json-only "<path-or-description>"
298
+ bash skills/j-uncharted/scripts/resolve-segment-target.sh --json-only "<path-or-description>"
292
299
  ```
293
300
 
294
301
  It returns one `results[]` record. Read three fields:
@@ -310,7 +317,7 @@ It returns one `results[]` record. Read three fields:
310
317
  **Step 2 — Run the engine** on the resolved absolute path:
311
318
 
312
319
  ```bash
313
- DOC=$(bash skills/uncharted/scripts/run-engine.sh --mode segment "<resolved target>")
320
+ DOC=$(bash skills/j-uncharted/scripts/run-engine.sh --mode segment "<resolved target>")
314
321
  ```
315
322
 
316
323
  Options, streams, and exit codes are in **Shared Investigative Engine** above — do not restate them here, and do not reimplement enumeration, dependency, or test detection. Two mode-specific readings:
@@ -332,7 +339,7 @@ List `project/board/epics/` and apply the normal scrum-master intake rule (`agen
332
339
 
333
340
  A new epic is the last option, not the default, and needs a stated reason. Record the epics you weighed and rejected — "none fit" is a claim the user should be able to check.
334
341
 
335
- **Step 5 — Draft the proposal** using `skills/uncharted/assets/SEGMENT_PROPOSAL_TEMPLATE.md`. Its six headings are fixed; fill every one of them. Two things it will not let you skip:
342
+ **Step 5 — Draft the proposal** using `skills/j-uncharted/assets/SEGMENT_PROPOSAL_TEMPLATE.md`. Its six headings are fixed; fill every one of them. Two things it will not let you skip:
336
343
 
337
344
  - **Every proposed task carries `execution_scope` and a non-empty `scope_rationale`** containing a file-count or line-count claim, assigned against `project/configs/scope-thresholds.json` rather than by feel — `inline` at or under 1 file / 20 lines, `story` when tasks share files across the story (up to 5 files), `task` otherwise. Never self-assign `execution_scope: epic`: it requires `epic_scope_approval: true`, which only a human sets. Propose `story` and say the task looks bigger instead. Field semantics live in `templates/SCRUM_BOARD_SCHEMA.md` — read them there, do not paraphrase them here.
338
345
  - **The document's `Open Questions` carry over verbatim**, not re-derived, each with who can answer it and whether it blocks confirmation. A blocking question is resolved *before* the proposal is accepted, because the breakdown depends on its answer.
@@ -371,7 +378,7 @@ Shape, field names, and file naming come from `templates/SCRUM_BOARD_SCHEMA.md`.
371
378
  Then prove it mechanically rather than asserting it:
372
379
 
373
380
  ```bash
374
- bash skills/uncharted/scripts/validate-proposed-items.sh <every file just written>
381
+ bash skills/j-uncharted/scripts/validate-proposed-items.sh <every file just written>
375
382
  ```
376
383
 
377
384
  It runs `scripts/validate-board.sh` over every file and `scripts/validate-story-format.sh` over every story file, and exits non-zero listing **each** failure — not just the first, because deciding whether to repair or roll back needs the whole list. Exit 2 means a usage error or a missing validator, not a bad board file.
@@ -395,7 +402,7 @@ New in **E20_S08_T03**. Produces a plain-language understanding plus graph nodes
395
402
  **Step 3 — Convergence loop.** Run the shared Convergence Loop procedure above. For a single-file target this is one node; for a directory target (after triage) it is one node per surviving candidate. Initialize persistence first:
396
403
 
397
404
  ```bash
398
- bash skills/uncharted/scripts/elicitation-state.sh init --id "segment-investigate-$(basename "$RESOLVED_TARGET")-$(date -u +%Y%m%d)" --target "$RESOLVED_TARGET"
405
+ bash skills/j-uncharted/scripts/elicitation-state.sh init --id "segment-investigate-$(basename "$RESOLVED_TARGET")-$(date -u +%Y%m%d)" --target "$RESOLVED_TARGET"
399
406
  ```
400
407
 
401
408
  **Step 4 — On convergence, write the graph and the board item.** Write each converged node/edge to `project/knowledge-graph/graph.json` per the stub schema (`source: "human"`), then present a single `[ARCH]`-tagged board item proposal — epic, story, or task, whichever level fits what was actually investigated (a single flow is usually task-scale; a whole subsystem may warrant a story or, rarely, an epic) — and stop at the same kind of confirmation gate the delivery-shaped path's Step 6 uses (accept / revise / discard / other). **Nothing is written to `project/board/` before that gate is confirmed**, matching the delivery-shaped path's own "nothing written before option 1" guarantee. On acceptance, write the board item and call `elicitation-state.sh complete`.
@@ -416,7 +423,7 @@ Pull an external source into the repo, then investigate it as a segment.
416
423
  **Step 1 — Acquire into staging.** Deterministic; do not hand-roll a clone or a copy.
417
424
 
418
425
  ```bash
419
- SUMMARY_JSON=$(bash skills/uncharted/scripts/import-source.sh --json-only "<source>")
426
+ SUMMARY_JSON=$(bash skills/j-uncharted/scripts/import-source.sh --json-only "<source>")
420
427
  ```
421
428
 
422
429
  `<source>` is a git URL, a local path **outside** this repo, or `-` (with the snippet piped
@@ -436,7 +443,7 @@ itself on failure).
436
443
  destination proposal is presented *alongside* these findings, never before them.
437
444
 
438
445
  ```bash
439
- PROVENANCE_JSON=$(bash skills/uncharted/scripts/inspect-provenance.sh \
446
+ PROVENANCE_JSON=$(bash skills/j-uncharted/scripts/inspect-provenance.sh \
440
447
  --origin-source "$(echo "$SUMMARY_JSON" | jq -r .source)" \
441
448
  --origin-type "$(echo "$SUMMARY_JSON" | jq -r .source_type)" \
442
449
  --origin-ref "$(echo "$SUMMARY_JSON" | jq -r '.git_ref // ""')" \
@@ -616,7 +623,7 @@ convention to be onboarded. This guarantee is enforced in three independent plac
616
623
  stated here:
617
624
 
618
625
  1. **This prohibition**, read by any agent driving `onboard` mode.
619
- 2. **A structural write-path guard** in `skills/uncharted/scripts/write-backfilled-epics.sh` — its
626
+ 2. **A structural write-path guard** in `skills/j-uncharted/scripts/write-backfilled-epics.sh` — its
620
627
  `--epics-dir` and `--json-out` destinations are canonicalised and checked against
621
628
  `<repo-root>/project/` *before* any file is written, with no flag able to point either one
622
629
  outside it. A path that resolves outside `project/` is a hard failure (exit 3), nothing
@@ -631,7 +638,7 @@ New in **E20_S08_T03**. Runs when `onboard` is invoked without `--legacy`.
631
638
  **Step 1 — discovery stays scripted.** Run the exact same deterministic discovery chain the legacy pipeline uses — `discover-subsystems.sh` — unchanged. Evidence-gathering is not where this rework touches anything; only what happens with the output differs.
632
639
 
633
640
  ```bash
634
- bash skills/uncharted/scripts/discover-subsystems.sh <root>
641
+ bash skills/j-uncharted/scripts/discover-subsystems.sh <root>
635
642
  ```
636
643
 
637
644
  **Step 2 — directory triage.** Feed the discovery output's candidate paths into the shared Directory Triage procedure (see Conversational Elicitation above), and stop at its confirmation gate before anything else happens.
@@ -639,7 +646,7 @@ bash skills/uncharted/scripts/discover-subsystems.sh <root>
639
646
  **Step 3 — initialize persistence.**
640
647
 
641
648
  ```bash
642
- bash skills/uncharted/scripts/elicitation-state.sh init --id "onboard-$(basename "$(cd "$root" && pwd)")-$(date -u +%Y%m%d)" --target "<root>" --cap 5
649
+ bash skills/j-uncharted/scripts/elicitation-state.sh init --id "onboard-$(basename "$(cd "$root" && pwd)")-$(date -u +%Y%m%d)" --target "<root>" --cap 5
643
650
  ```
644
651
 
645
652
  **Step 4 — convergence loop, once per surviving candidate.** Run the shared Convergence Loop procedure (see Conversational Elicitation above) for each candidate that survived triage — this is where the legacy pipeline's `apply-subsystem-cap.sh` and `write-backfilled-epics.sh` would have silently produced a capped set of `provenance: backfilled` epics; the conversational default asks about each one instead, subject to the same risk-weighted gating and hard turn cap. There is deliberately **no subsystem cap** on the conversational path — the turn cap already bounds cost per candidate, and capping the *candidate count* the way the legacy path does would silently drop subsystems from a human-in-the-loop conversation the same way the legacy path drops them from an unattended one, which defeats the point of asking. A codebase with far more subsystems than is practical to walk through conversationally in one sitting is exactly the multi-session case Multi-Session Persistence exists for — pause, resume across sessions, rather than truncate the candidate list.
@@ -656,12 +663,12 @@ Everything below is `E40_S04`'s original, fully-automated, zero-prompt pipeline
656
663
 
657
664
  Live as of `E40_S04_T03`. `onboard` does **not** create one epic per discovered subsystem — a
658
665
  40-subsystem repository would bury the board on day one. It caps how many become epics, and
659
- `skills/uncharted/scripts/apply-subsystem-cap.sh` applies that cap to `discover-subsystems.sh`'s
666
+ `skills/j-uncharted/scripts/apply-subsystem-cap.sh` applies that cap to `discover-subsystems.sh`'s
660
667
  ranked output:
661
668
 
662
669
  ```bash
663
- bash skills/uncharted/scripts/discover-subsystems.sh <root> \
664
- | bash skills/uncharted/scripts/apply-subsystem-cap.sh --rapport "$DOC"
670
+ bash skills/j-uncharted/scripts/discover-subsystems.sh <root> \
671
+ | bash skills/j-uncharted/scripts/apply-subsystem-cap.sh --rapport "$DOC"
665
672
  ```
666
673
 
667
674
  It emits JSON with two explicit arrays — `kept` (the subsystems that become backfilled epics) and
@@ -702,7 +709,7 @@ re-running `onboard` with a higher `--cap`.
702
709
 
703
710
  #### Generating the backfilled epics
704
711
 
705
- Live as of `E40_S04_T04`. `skills/uncharted/scripts/write-backfilled-epics.sh` is the only thing
712
+ Live as of `E40_S04_T04`. `skills/j-uncharted/scripts/write-backfilled-epics.sh` is the only thing
706
713
  that actually writes backfilled epics to the board — it consumes `apply-subsystem-cap.sh`'s
707
714
  `kept` array and renders one epic file per entry, following the Epic format in
708
715
  `templates/SCRUM_BOARD_SCHEMA.md` exactly (`provenance: backfilled`, `status: Pending`, an empty
@@ -710,9 +717,9 @@ that actually writes backfilled epics to the board — it consumes `apply-subsys
710
717
  framed around understanding and integration, never original construction):
711
718
 
712
719
  ```bash
713
- bash skills/uncharted/scripts/discover-subsystems.sh <root> \
714
- | bash skills/uncharted/scripts/apply-subsystem-cap.sh --rapport "$DOC" \
715
- | bash skills/uncharted/scripts/write-backfilled-epics.sh
720
+ bash skills/j-uncharted/scripts/discover-subsystems.sh <root> \
721
+ | bash skills/j-uncharted/scripts/apply-subsystem-cap.sh --rapport "$DOC" \
722
+ | bash skills/j-uncharted/scripts/write-backfilled-epics.sh
716
723
  ```
717
724
 
718
725
  | Option | Effect |
@@ -775,7 +782,7 @@ above have been written (or confirmed skipped). Its job is to close the gap the
775
782
  describes: a project adopting Jenga should not end up with a populated board sitting underneath a
776
783
  `PROJECT_SUMMARY.md` that still reads as if the codebase were empty.
777
784
 
778
- **This is a scrum-master action, not a script.** Nothing under `skills/uncharted/scripts/` writes
785
+ **This is a scrum-master action, not a script.** Nothing under `skills/j-uncharted/scripts/` writes
779
786
  `PROJECT_SUMMARY.md`, and the developer agent never touches it either — both `agents/developer.md`
780
787
  and `agents/scrum-master.md` already establish `PROJECT_SUMMARY.md` as scrum-master-owned, sole
781
788
  writer, no exceptions, and `onboard` does not get to be the exception just because the content
@@ -865,7 +872,7 @@ These hold across every mode:
865
872
  - **Confirm before writing to the board.** Proposals are presented for approval first, consistent with the brainstorm-before-commit convention. Since `E20_S08_T03`, this also covers Directory Triage's confirmation gate and each converged node's graph/board write in the conversational elicitation flow — same convention, applied to a new output type (graph nodes), not a new exception to it.
866
873
  - **No new rapport type.** Understanding documents use the existing `analysis` type and land in `project/rapports/analysis/`. Conversational elicitation's output (graph nodes + `[ARCH]` board items) is not an understanding document and does not need one — see Conversational Elicitation above for what it produces instead.
867
874
  - **Never invent findings.** If the evidence does not support a conclusion, say so under Open Questions (delivery-shaped/legacy paths) or state the uncertainty plainly in the node itself (conversational paths — see Human-Oracle-Availability Limitation above).
868
- - **Deterministic work belongs in `skills/uncharted/scripts/`**, agent judgement belongs here.
875
+ - **Deterministic work belongs in `skills/j-uncharted/scripts/`**, agent judgement belongs here.
869
876
  - **Existing zero-prompt behavior is never silently retired.** `onboard --legacy` and `segment --mode delivery` reproduce exactly what `/uncharted` did before `E20_S08_T03`, with no behavior drift for a caller who keeps using them.
870
877
 
871
878
  ---
@@ -4,7 +4,7 @@
4
4
  OUTPUT CONTRACT — /uncharted shared investigative engine.
5
5
 
6
6
  Every mode (`segment`, `import`, `onboard`) emits this exact document shape.
7
- It is rendered by `skills/uncharted/scripts/run-engine.sh` and written to
7
+ It is rendered by `skills/j-uncharted/scripts/run-engine.sh` and written to
8
8
  `project/rapports/analysis/` using the existing `analysis` rapport type
9
9
  defined in `templates/SCRUM_BOARD_SCHEMA.md`.
10
10
 
@@ -34,7 +34,7 @@
34
34
 
35
35
  **Mode:** {{MODE}}
36
36
  **Generated:** {{TIMESTAMP}}
37
- **Engine:** `skills/uncharted/scripts/run-engine.sh`
37
+ **Engine:** `skills/j-uncharted/scripts/run-engine.sh`
38
38
 
39
39
  ---
40
40
 
@@ -19,7 +19,7 @@
19
19
  # no git state. Its only outputs are JSON on stdout and diagnostics on stderr.
20
20
  #
21
21
  # ---------------------------------------------------------------------------
22
- # Output contract (stdout, JSON) — consumed by skills/uncharted/scripts/run-engine.sh
22
+ # Output contract (stdout, JSON) — consumed by skills/j-uncharted/scripts/run-engine.sh
23
23
  # ---------------------------------------------------------------------------
24
24
  # {
25
25
  # "script": "detect-dependencies.sh",
@@ -28,7 +28,7 @@
28
28
  # no git state. Its only outputs are JSON on stdout and diagnostics on stderr.
29
29
  #
30
30
  # ---------------------------------------------------------------------------
31
- # Output contract (stdout, JSON) — consumed by skills/uncharted/scripts/run-engine.sh
31
+ # Output contract (stdout, JSON) — consumed by skills/j-uncharted/scripts/run-engine.sh
32
32
  # ---------------------------------------------------------------------------
33
33
  # {
34
34
  # "script": "detect-tests.sh",
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env bash
2
2
  # ---------------------------------------------------------------------------
3
- # skills/uncharted/scripts/directory-triage.sh
3
+ # skills/j-uncharted/scripts/directory-triage.sh
4
4
  #
5
5
  # Deterministic front half of the directory-triage step (E20_S08_T03) that
6
6
  # sits between discovery and any developer/tester Investigative Mode
@@ -90,7 +90,7 @@
90
90
  # does not attempt content-based judgement (reading file contents to guess
91
91
  # "this looks like SOAP mock-ups") at all. That pass is agent judgement, per
92
92
  # the Skill Implementation Principle in CLAUDE.md, and lives in
93
- # skills/uncharted/SKILL.md's Directory Triage subsection, not here.
93
+ # skills/j-uncharted/SKILL.md's Directory Triage subsection, not here.
94
94
  #
95
95
  # ---------------------------------------------------------------------------
96
96
  # EXIT CODES
@@ -124,7 +124,7 @@ Classifies candidate directories under <root> into:
124
124
  .venv, venv, __pycache__, .next, coverage, target, .git,
125
125
  .tox, .mypy_cache, .pytest_cache, .cache, *.egg-info)
126
126
  - remaining: everything else — the input to the agent-judgement
127
- generalize-list pass documented in skills/uncharted/SKILL.md
127
+ generalize-list pass documented in skills/j-uncharted/SKILL.md
128
128
 
129
129
  Options:
130
130
  --root DIR Root the candidates are resolved against (or give it as
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env bash
2
2
  # ---------------------------------------------------------------------------
3
- # skills/uncharted/scripts/elicitation-state.sh
3
+ # skills/j-uncharted/scripts/elicitation-state.sh
4
4
  #
5
5
  # Deterministic persistence + turn-cap counting for `/uncharted`'s
6
6
  # conversational convergence loop (E20_S08_T03) — the "propose understanding,
@@ -27,7 +27,7 @@
27
27
  # This script performs NO judgement — it does not decide what to ask, what
28
28
  # counts as high-impact, or when understanding has actually converged. It
29
29
  # only counts turns, tracks status, and persists whatever the agent asks it
30
- # to persist. All of that judgement lives in skills/uncharted/SKILL.md's
30
+ # to persist. All of that judgement lives in skills/j-uncharted/SKILL.md's
31
31
  # Convergence Loop subsection.
32
32
  #
33
33
  # ---------------------------------------------------------------------------
@@ -89,7 +89,7 @@
89
89
  # Set status "paused" and update "updated_at". The caller (the agent
90
90
  # driving `/uncharted`) is responsible for also writing a scrum-master
91
91
  # SessionEnd handoff with status "elicitation_paused" and this state
92
- # file's path, per skills/uncharted/SKILL.md's Multi-Session
92
+ # file's path, per skills/j-uncharted/SKILL.md's Multi-Session
93
93
  # Persistence subsection — this script only updates the state file
94
94
  # itself, it does not write handoffs.
95
95
  #
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env bash
2
- # skills/uncharted/scripts/enumerate-target.sh
2
+ # skills/j-uncharted/scripts/enumerate-target.sh
3
3
  #
4
4
  # Read-only target resolution and structure enumeration for the /uncharted investigative engine.
5
5
  #
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env bash
2
2
  # ---------------------------------------------------------------------------
3
- # skills/uncharted/scripts/import-source.sh
3
+ # skills/j-uncharted/scripts/import-source.sh
4
4
  #
5
5
  # Acquisition half of `/uncharted import`. Fetches an external source into a
6
6
  # STAGING directory only — it never places anything at a final destination
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env bash
2
2
  # ---------------------------------------------------------------------------
3
- # skills/uncharted/scripts/inspect-provenance.sh
3
+ # skills/j-uncharted/scripts/inspect-provenance.sh
4
4
  #
5
5
  # Provenance surface for `/uncharted import`'s placement-confirmation gate
6
6
  # (E40_S03_T02). Given a staged source -- the `content_path` that
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env bash
2
2
  # ---------------------------------------------------------------------------
3
- # skills/uncharted/scripts/resolve-segment-target.sh
3
+ # skills/j-uncharted/scripts/resolve-segment-target.sh
4
4
  #
5
5
  # Deterministic front half of `/uncharted segment`. Given the raw argument the
6
6
  # user typed, it answers two mechanical questions so the agent never has to
@@ -13,7 +13,7 @@
13
13
  # It resolves, it classifies, it reports. It NEVER writes anything, never runs
14
14
  # the engine, and never touches application code. Deciding what to do with the
15
15
  # answer — which candidate to pick, whether the segment is worth investigating
16
- # — is agent judgement and lives in `skills/uncharted/SKILL.md`.
16
+ # — is agent judgement and lives in `skills/j-uncharted/SKILL.md`.
17
17
  #
18
18
  # ---------------------------------------------------------------------------
19
19
  # BOARD-LINKAGE CHECK — the reusable interface
@@ -51,7 +51,7 @@
51
51
  # (`[A-Za-z0-9_./-]+`, trailing `.`/`-` stripped so a filename ending a sentence
52
52
  # still counts). A board file references the path when one of its tokens either
53
53
  # equals the path or is a DESCENDANT of it — so `skills/uncharted` is referenced
54
- # by a board item that only names `skills/uncharted/scripts/run-engine.sh`.
54
+ # by a board item that only names `skills/j-uncharted/scripts/run-engine.sh`.
55
55
  #
56
56
  # This is a path-boundary test, not a substring test: `docs/hooks` does not make
57
57
  # `hooks` linked, and `src/app.js` does not make `src/app` linked.
@@ -343,7 +343,7 @@ def load_board():
343
343
 
344
344
  Every path-like run in a board file is registered under itself AND under each of its
345
345
  ancestor directories, so `skills/uncharted` is found via a board item that only ever names
346
- `skills/uncharted/scripts/run-engine.sh`.
346
+ `skills/j-uncharted/scripts/run-engine.sh`.
347
347
  """
348
348
  docs = []
349
349
  index = {}
@@ -382,7 +382,7 @@ def load_board():
382
382
  for k in range(1, len(parts) + 1):
383
383
  prefix = "/".join(parts[:k])
384
384
  # The token itself is registered too, not just its ancestors -- an exact
385
- # mention of `skills/uncharted/SKILL.md` must make that file linked.
385
+ # mention of `skills/j-uncharted/SKILL.md` must make that file linked.
386
386
  if not prefix or prefix in seen_prefixes:
387
387
  continue
388
388
  seen_prefixes.add(prefix)
@@ -7,7 +7,7 @@
7
7
  # This is the ONE script the calling agent invokes. It does not reimplement any analysis:
8
8
  # it orchestrates the three deterministic detectors delivered by E40_S01_T02/T03, merges
9
9
  # their JSON, renders the understanding document from
10
- # skills/uncharted/assets/UNDERSTANDING_DOC_TEMPLATE.md, writes it into
10
+ # skills/j-uncharted/assets/UNDERSTANDING_DOC_TEMPLATE.md, writes it into
11
11
  # project/rapports/analysis/, and prints the written path — and nothing else — on stdout.
12
12
  #
13
13
  # enumerate-target.sh → Target + Structure sections
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env bash
2
2
  # ---------------------------------------------------------------------------
3
- # skills/uncharted/scripts/validate-proposed-items.sh
3
+ # skills/j-uncharted/scripts/validate-proposed-items.sh
4
4
  #
5
5
  # Post-write gate for `/uncharted segment` Step 7. Given the board files a
6
6
  # confirmed proposal just wrote, it answers one mechanical question: do these
@@ -9,7 +9,7 @@
9
9
  # It validates. It NEVER writes, moves, or repairs a board file, and it has no
10
10
  # opinion about content — only about format. Deciding what to do with a failure
11
11
  # (fix and re-run, or roll the write back) is agent judgement and lives in
12
- # `skills/uncharted/SKILL.md`.
12
+ # `skills/j-uncharted/SKILL.md`.
13
13
  #
14
14
  # Usage: validate-proposed-items.sh <board-file> [more-files...]
15
15
  #
@@ -18,7 +18,7 @@
18
18
  # application code. Its entire output surface is project/board/, project/rapports/analysis/,
19
19
  # and project/PROJECT_SUMMARY.md. This script is the one that actually touches disk in the
20
20
  # epic-generation step, so it is where that guarantee is made STRUCTURAL rather than only
21
- # documented in skills/uncharted/SKILL.md:
21
+ # documented in skills/j-uncharted/SKILL.md:
22
22
  #
23
23
  # - The epics directory (--epics-dir, default <repo-root>/project/board/epics) and the
24
24
  # --json-out path, if given, are both canonicalised and checked BEFORE any file is written.
@@ -0,0 +1,27 @@
1
+ ---
2
+ name: j.wtf
3
+ description: Polyfill alias of the wtf skill under a collision-safe directory name. Identical behavior to /wtf — Alias of /clearify — clarifies ambiguous, dense, or under-specified prompts and conversation on request. This folder exists only so the `/wtf` slash command resolves to a skill; behaviour is identical to `/clearify`. Use when the bare /wtf form is shadowed by another tool's own built-in command of the same name.
4
+ keywords:
5
+ - wtf
6
+ - confused
7
+ - huh
8
+ - what does this mean
9
+ - I'm lost
10
+ - j-wtf
11
+ - polyfill
12
+ examples:
13
+ - "wtf"
14
+ - "wtf does this mean"
15
+ - "wtf is going on here"
16
+ - "j-wtf"
17
+ ---
18
+
19
+ # WTF — Alias of /clearify
20
+
21
+ This skill is a literal-directory-name duplicate of `skills/wtf/`. It exists so that `/j-wtf` (and `j.j-wtf`) give a guaranteed-unshadowed way to reach the same flow as `/wtf`, even if a host tool's own built-in command of the same name would otherwise shadow or override the bare `/wtf` alias (Claude Code's native skill resolution is a literal-string, directory-name-based match — see `docs/skill-authoring.md`'s "Invocation Convention").
22
+
23
+ This file is generated/synced by `scripts/generate-j-alias.sh wtf` from `skills/wtf/SKILL.md` — do not hand-edit it; re-run the generator instead to pick up source changes.
24
+
25
+ ## Instructions
26
+
27
+ `/wtf` is an alias of `/clearify`. Follow `skills/clearify/SKILL.md` in full — do not duplicate or reimplement its ambiguity-detection logic here. Read that file's `## Instructions` section and execute it exactly as written, using whatever prompt or conversation context is attached to this `/wtf` invocation.
@@ -1,5 +1,5 @@
1
1
  ---
2
- name: jenga
2
+ name: j.jenga
3
3
  description: Interactive-by-default board orchestrator with a fully automated escape hatch. Bare `/jenga` renders a picker and confirmation tree before scoping the run; `/jenga <ids>` resolves an explicit fuzzy-ID scope and confirms it; `/jenga *` reproduces the original zero-prompt behavior — decomposing any unbroken Epics into Stories, any unbroken Stories into Tasks, queuing all unqueued Tasks into todo.md, then executing every eligible item with no user prompts — until the board is fully started.
4
4
  keywords:
5
5
  - jenga