@jenga-ai/agent 2.0.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 (165) hide show
  1. package/README.md +75 -243
  2. package/agents/developer.md +5 -5
  3. package/agents/scrum-master.md +23 -23
  4. package/agents/tester.md +5 -5
  5. package/lib/generate-skill-allow-list.js +9 -3
  6. package/lib/skill-allow-list.json +2 -3
  7. package/package.json +15 -25
  8. package/scripts/apply-j-prefix.sh +25 -12
  9. package/scripts/generate-j-alias.sh +333 -0
  10. package/skills/{brainstorm → j-brainstorm}/SKILL.md +9 -2
  11. package/skills/{btw → j-btw}/SKILL.md +9 -2
  12. package/skills/{clearify → j-clearify}/SKILL.md +9 -2
  13. package/skills/{close-story → j-close-story}/SKILL.md +17 -10
  14. package/skills/{close-story → j-close-story}/scripts/check-privatized.sh +2 -2
  15. package/skills/{close-story → j-close-story}/scripts/check-story-closeable.sh +1 -1
  16. package/skills/{close-story → j-close-story}/scripts/extract-task-diff-stats.sh +1 -1
  17. package/skills/{commit → j-commit}/SKILL.md +9 -2
  18. package/skills/j-continue/SKILL.md +36 -0
  19. package/skills/{deep-dive → j-deep-dive}/SKILL.md +9 -8
  20. package/skills/{dev-done → j-dev-done}/SKILL.md +11 -4
  21. package/skills/{dev-done → j-dev-done}/scripts/classify-commit-outcome.sh +4 -4
  22. package/skills/{distribute → j-distribute}/SKILL.md +17 -10
  23. package/skills/{distribute → j-distribute}/scripts/distribute-changes.sh +1 -1
  24. package/skills/{do → j-do}/SKILL.md +12 -5
  25. package/skills/{doc → j-doc}/README.md +5 -5
  26. package/skills/{doc → j-doc}/SKILL.md +15 -8
  27. package/skills/{doc → j-doc}/authoring-notes.md +1 -1
  28. package/skills/{doc-sync → j-doc-sync}/SKILL.md +9 -2
  29. package/skills/{dooo → j-dooo}/SKILL.md +9 -2
  30. package/skills/j-error/SKILL.md +36 -0
  31. package/skills/{evaluate → j-evaluate}/SKILL.md +9 -2
  32. package/skills/j-examplify/SKILL.md +49 -0
  33. package/skills/{help → j-help}/SKILL.md +9 -2
  34. package/skills/{idea → j-idea}/SKILL.md +10 -3
  35. package/skills/{idea → j-idea}/assets/idea_handoff_template.md +1 -1
  36. package/skills/{improve → j-improve}/SKILL.md +9 -2
  37. package/skills/j-init/SKILL.md +2 -2
  38. package/skills/j-jbp/SKILL.md +32 -0
  39. package/skills/j-lgtm/SKILL.md +28 -0
  40. package/skills/{pi-plan → j-pi-plan}/SKILL.md +10 -3
  41. package/skills/{proceed → j-proceed}/SKILL.md +9 -2
  42. package/skills/{publish → j-publish}/SKILL.md +47 -40
  43. package/skills/{publish → j-publish}/adapters/droplet.md +1 -1
  44. package/skills/{publish → j-publish}/adapters/mobile-ios.md +3 -3
  45. package/skills/{publish → j-publish}/adapters/npm-ci.md +3 -3
  46. package/skills/{publish → j-publish}/adapters/npm.md +8 -8
  47. package/skills/{publish → j-publish}/assets/ci-contract.md +2 -2
  48. package/skills/{publish → j-publish}/schemas/publish.schema.json +1 -1
  49. package/skills/{publish → j-publish}/scripts/npm_stage_inspect.sh +34 -1
  50. package/skills/{publish → j-publish}/scripts/npm_stage_pipeline.sh +9 -4
  51. package/skills/{publish → j-publish}/scripts/publish_deploy.sh +4 -4
  52. package/skills/{publish → j-publish}/scripts/validate_npm_stage_env.sh +1 -1
  53. package/skills/{publish → j-publish}/wizards/droplet.md +1 -1
  54. package/skills/{publish → j-publish}/wizards/mobile-ios.md +1 -1
  55. package/skills/{publish → j-publish}/wizards/npm-ci.md +1 -1
  56. package/skills/{publish → j-publish}/wizards/npm.md +1 -1
  57. package/skills/{reconcile → j-reconcile}/SKILL.md +12 -5
  58. package/skills/{reconcile → j-reconcile}/scripts/detect-unlinked-code.sh +2 -2
  59. package/skills/{reconcile → j-reconcile}/scripts/resolve-reconcile-scope.sh +3 -3
  60. package/skills/{reconcile-origin → j-reconcile-origin}/SKILL.md +13 -6
  61. package/skills/{redo → j-redo}/SKILL.md +9 -2
  62. package/skills/{skillify → j-skillify}/SKILL.md +10 -3
  63. package/skills/{spinoff → j-spinoff}/SKILL.md +9 -2
  64. package/skills/{status → j-status}/SKILL.md +9 -2
  65. package/skills/{todo → j-todo}/SKILL.md +10 -3
  66. package/skills/{todo → j-todo}/assets/todo_handoff_template.md +1 -1
  67. package/skills/{todo → j-todo}/scripts/add_trivial_task.sh +3 -3
  68. package/skills/{todo → j-todo}/scripts/update_story_tasks.py +2 -2
  69. package/skills/{uncharted → j-uncharted}/SKILL.md +35 -28
  70. package/skills/{uncharted → j-uncharted}/assets/UNDERSTANDING_DOC_TEMPLATE.md +2 -2
  71. package/skills/{uncharted → j-uncharted}/scripts/detect-dependencies.sh +1 -1
  72. package/skills/{uncharted → j-uncharted}/scripts/detect-tests.sh +1 -1
  73. package/skills/{uncharted → j-uncharted}/scripts/directory-triage.sh +3 -3
  74. package/skills/{uncharted → j-uncharted}/scripts/elicitation-state.sh +3 -3
  75. package/skills/{uncharted → j-uncharted}/scripts/enumerate-target.sh +1 -1
  76. package/skills/{uncharted → j-uncharted}/scripts/import-source.sh +1 -1
  77. package/skills/{uncharted → j-uncharted}/scripts/inspect-provenance.sh +1 -1
  78. package/skills/{uncharted → j-uncharted}/scripts/resolve-segment-target.sh +5 -5
  79. package/skills/{uncharted → j-uncharted}/scripts/run-engine.sh +1 -1
  80. package/skills/{uncharted → j-uncharted}/scripts/validate-proposed-items.sh +2 -2
  81. package/skills/{uncharted → j-uncharted}/scripts/write-backfilled-epics.sh +1 -1
  82. package/skills/j-wtf/SKILL.md +27 -0
  83. package/skills/jenga/SKILL.md +1 -1
  84. package/skills/jenga-permission-level/SKILL.md +1 -1
  85. package/templates/SCRUM_BOARD_SCHEMA.md +1 -1
  86. package/templates/agent-context.md.tpl +10 -10
  87. package/templates/copilot-instructions.md.tpl +57 -19
  88. package/skills/continue/SKILL.md +0 -29
  89. package/skills/error/SKILL.md +0 -29
  90. package/skills/examplify/SKILL.md +0 -42
  91. package/skills/init/SKILL.md +0 -155
  92. package/skills/init/assets/scope-thresholds_template.json +0 -7
  93. package/skills/init/assets/strategy_stub_template.md +0 -38
  94. package/skills/init/assets/workflow_template.json +0 -30
  95. package/skills/init/scripts/apply-project-visibility.sh +0 -176
  96. package/skills/init/scripts/detect-existing-codebase.sh +0 -166
  97. package/skills/init/scripts/init.sh +0 -116
  98. package/skills/jbp/SKILL.md +0 -25
  99. package/skills/lgtm/SKILL.md +0 -21
  100. package/skills/skillify/assets/init-new/assets/.gitignore_template +0 -15
  101. package/skills/skillify/assets/init-new/assets/PROJECT_SUMMARY_template.md +0 -13
  102. package/skills/skillify/assets/init-new/assets/directory_structure.txt +0 -14
  103. package/skills/skillify/assets/init-new/assets/test-config_template.json +0 -4
  104. package/skills/wtf/SKILL.md +0 -20
  105. /package/skills/{close-story → j-close-story}/scripts/compute-scope-divergence.sh +0 -0
  106. /package/skills/{close-story → j-close-story}/scripts/extract-diff-stats.sh +0 -0
  107. /package/skills/{close-story → j-close-story}/scripts/update-task-frontmatter.sh +0 -0
  108. /package/skills/{commit → j-commit}/assets/user_instructions_template.md +0 -0
  109. /package/skills/{distribute → j-distribute}/CONFIG_SCHEMA.md +0 -0
  110. /package/skills/{distribute → j-distribute}/scripts/check-version.sh +0 -0
  111. /package/skills/{distribute → j-distribute}/scripts/commit-version-bump.sh +0 -0
  112. /package/skills/{do → j-do}/assets/intent-vs-diff-prompt.md +0 -0
  113. /package/skills/{do → j-do}/assets/sender_template.json +0 -0
  114. /package/skills/{doc → j-doc}/assets/path-objectives.yaml +0 -0
  115. /package/skills/{doc → j-doc}/scripts/resolve_last_update.py +0 -0
  116. /package/skills/{doc-sync → j-doc-sync}/assets/default_excludes.txt +0 -0
  117. /package/skills/{doc-sync → j-doc-sync}/assets/doc_targets.md +0 -0
  118. /package/skills/{evaluate → j-evaluate}/assets/evaluation_invokation_template.yml +0 -0
  119. /package/skills/{evaluate → j-evaluate}/assets/evaluation_rapport_template.md +0 -0
  120. /package/skills/{idea → j-idea}/assets/idea_template.md +0 -0
  121. /package/skills/{pi-plan → j-pi-plan}/assets/epic.json +0 -0
  122. /package/skills/{pi-plan → j-pi-plan}/assets/story_template.md +0 -0
  123. /package/skills/{publish → j-publish}/assets/ExportOptions.plist.template +0 -0
  124. /package/skills/{publish → j-publish}/assets/ownership-matrix.md +0 -0
  125. /package/skills/{publish → j-publish}/assets/publish.example.json +0 -0
  126. /package/skills/{publish → j-publish}/assets/publish.example.npm-ci.json +0 -0
  127. /package/skills/{publish → j-publish}/assets/publish.example.npm.json +0 -0
  128. /package/skills/{publish → j-publish}/assets/secrets-guide.md +0 -0
  129. /package/skills/{publish → j-publish}/schemas/fixtures/npm-ci-minimal.json +0 -0
  130. /package/skills/{publish → j-publish}/schemas/fixtures/npm-ci-with-empty-secrets.json +0 -0
  131. /package/skills/{publish → j-publish}/schemas/fixtures/npm-ci-with-workflow-path.json +0 -0
  132. /package/skills/{publish → j-publish}/scripts/check_target_config.sh +0 -0
  133. /package/skills/{publish → j-publish}/scripts/droplet_pipeline.sh +0 -0
  134. /package/skills/{publish → j-publish}/scripts/finalize_changelog.sh +0 -0
  135. /package/skills/{publish → j-publish}/scripts/generate_release_notes.sh +0 -0
  136. /package/skills/{publish → j-publish}/scripts/ios_pipeline.sh +0 -0
  137. /package/skills/{publish → j-publish}/scripts/npm_ci_pipeline.sh +0 -0
  138. /package/skills/{publish → j-publish}/scripts/npm_pipeline.sh +0 -0
  139. /package/skills/{publish → j-publish}/scripts/publish_common.sh +0 -0
  140. /package/skills/{publish → j-publish}/scripts/reconcile_tags.sh +0 -0
  141. /package/skills/{publish → j-publish}/scripts/run_gates.sh +0 -0
  142. /package/skills/{publish → j-publish}/scripts/setup_wizard.sh +0 -0
  143. /package/skills/{publish → j-publish}/scripts/show_history.sh +0 -0
  144. /package/skills/{publish → j-publish}/scripts/suggest_semver_bump.sh +0 -0
  145. /package/skills/{publish → j-publish}/scripts/validate_config.sh +0 -0
  146. /package/skills/{publish → j-publish}/scripts/validate_droplet_env.sh +0 -0
  147. /package/skills/{publish → j-publish}/scripts/validate_ios_env.sh +0 -0
  148. /package/skills/{publish → j-publish}/scripts/validate_npm_ci_env.sh +0 -0
  149. /package/skills/{publish → j-publish}/scripts/validate_npm_env.sh +0 -0
  150. /package/skills/{publish → j-publish}/scripts/write_ledger_entry.sh +0 -0
  151. /package/skills/{reconcile → j-reconcile}/assets/report_format.md +0 -0
  152. /package/skills/{reconcile-origin → j-reconcile-origin}/scripts/reconcile-origin.sh +0 -0
  153. /package/skills/{skillify → j-skillify}/assets/init-new/SKILL.md +0 -0
  154. /package/skills/{init → j-skillify/assets/init-new}/assets/.gitignore_template +0 -0
  155. /package/skills/{init → j-skillify/assets/init-new}/assets/PROJECT_SUMMARY_template.md +0 -0
  156. /package/skills/{init → j-skillify/assets/init-new}/assets/directory_structure.txt +0 -0
  157. /package/skills/{init → j-skillify/assets/init-new}/assets/test-config_template.json +0 -0
  158. /package/skills/{skillify → j-skillify}/assets/init-new/assets/workflow_template.json +0 -0
  159. /package/skills/{skillify → j-skillify}/assets/init-new/scripts/init.sh +0 -0
  160. /package/skills/{skillify → j-skillify}/assets/init-old/SKILL.md +0 -0
  161. /package/skills/{status → j-status}/assets/output_format.md +0 -0
  162. /package/skills/{todo → j-todo}/assets/todo_template.md +0 -0
  163. /package/skills/{uncharted → j-uncharted}/assets/SEGMENT_PROPOSAL_TEMPLATE.md +0 -0
  164. /package/skills/{uncharted → j-uncharted}/scripts/apply-subsystem-cap.sh +0 -0
  165. /package/skills/{uncharted → j-uncharted}/scripts/discover-subsystems.sh +0 -0
@@ -1,19 +1,26 @@
1
1
  ---
2
- name: j:reconcile-origin
3
- description: Sync the current (or specified) branch with origin by rebasing local commits on top of the latest upstream state.
2
+ name: j.reconcile-origin
3
+ description: Polyfill alias of the reconcile-origin skill under a collision-safe directory name. Identical behavior to /reconcile-origin — Sync the current (or specified) branch with origin by rebasing local commits on top of the latest upstream state. Use when the bare /reconcile-origin form is shadowed by another tool's own built-in command of the same name.
4
4
  keywords:
5
5
  - "sync branch"
6
6
  - "rebase origin"
7
7
  - "reconcile origin"
8
8
  - "pull rebase"
9
+ - j-reconcile-origin
10
+ - polyfill
9
11
  examples:
10
12
  - "sync my branch with origin"
11
13
  - "rebase local commits on top of origin"
12
14
  - "reconcile-origin feature/my-branch"
15
+ - "j-reconcile-origin"
13
16
  ---
14
17
 
15
18
  # Reconcile Origin
16
19
 
20
+ This skill is a literal-directory-name duplicate of `skills/reconcile-origin/`. It exists so that `/j-reconcile-origin` (and `j.j-reconcile-origin`) give a guaranteed-unshadowed way to reach the same flow as `/reconcile-origin`, even if a host tool's own built-in command of the same name would otherwise shadow or override the bare `/reconcile-origin` alias (Claude Code's native skill resolution is a literal-string, directory-name-based match — see `docs/skill-authoring.md`'s "Invocation Convention").
21
+
22
+ This file is generated/synced by `scripts/generate-j-alias.sh reconcile-origin` from `skills/reconcile-origin/SKILL.md` — do not hand-edit it; re-run the generator instead to pick up source changes.
23
+
17
24
  Use this skill to rebase local work on top of the latest `origin/<branch>` state without re-implementing git logic inline.
18
25
 
19
26
  ## Instructions
@@ -22,7 +29,7 @@ Use this skill to rebase local work on top of the latest `origin/<branch>` state
22
29
  - If the user passed an argument, use that branch name.
23
30
  - Otherwise, use the current branch name.
24
31
 
25
- 2. Invoke `.agents/skills/reconcile-origin/scripts/reconcile-origin.sh [<branch>]` and capture stdout.
32
+ 2. Invoke `.agents/skills/j-reconcile-origin/scripts/reconcile-origin.sh [<branch>]` and capture stdout.
26
33
  - Do not run any inline git commands in this skill — all git work is handled by the script.
27
34
  - The script handles dirty-worktree detection internally and returns `{"status":"error","code":"uncommitted_changes",...}` if the working tree is not clean.
28
35
 
@@ -38,7 +45,7 @@ Use this skill to rebase local work on top of the latest `origin/<branch>` state
38
45
  2. Cancel and inspect the branch setup manually
39
46
  3. Other (describe below)
40
47
 
41
- - If the user chooses option 1, invoke `.agents/skills/reconcile-origin/scripts/reconcile-origin.sh <branch> --create-tracking`.
48
+ - If the user chooses option 1, invoke `.agents/skills/j-reconcile-origin/scripts/reconcile-origin.sh <branch> --create-tracking`.
42
49
  - If `remote_exists` is `false`, explain that neither a local branch nor `origin/<branch>` was found and stop.
43
50
  - `conflict`
44
51
  - Present one structured conflict rapport per item in `conflicts`.
@@ -55,7 +62,7 @@ Use this skill to rebase local work on top of the latest `origin/<branch>` state
55
62
  3. Handle it later — leave annotated conflict markers in the file and continue the scripted flow
56
63
  4. Other (describe below)
57
64
 
58
- - If the user chooses “Handle it later”, invoke `.agents/skills/reconcile-origin/scripts/reconcile-origin.sh <branch> --handle-later <file>` for the selected conflict file.
65
+ - If the user chooses “Handle it later”, invoke `.agents/skills/j-reconcile-origin/scripts/reconcile-origin.sh <branch> --handle-later <file>` for the selected conflict file.
59
66
  - `handled_later`
60
67
  - Confirm that the selected file was annotated for later resolution.
61
68
  - Tell the user the conflict markers were intentionally preserved with a `# RECONCILE-ORIGIN CONFLICT:` note.
@@ -71,5 +78,5 @@ Use this skill to rebase local work on top of the latest `origin/<branch>` state
71
78
 
72
79
  ## Guard Rails
73
80
 
74
- - All git work must go through `.agents/skills/reconcile-origin/scripts/reconcile-origin.sh`.
81
+ - All git work must go through `.agents/skills/j-reconcile-origin/scripts/reconcile-origin.sh`.
75
82
  - Do not inline fetch, checkout, pull, merge, rebase, or status commands in this skill body.
@@ -1,21 +1,28 @@
1
1
  ---
2
- name: j:redo
3
- description: Redo parts or entire previous implementations identified by a commit SHA or an Epic/Story number (e.g. E01, E02_S03). Expects an identifier and a description of what to redo and why. Use when the user wants to revisit, rework, or rewrite previously completed work, including updating all affected documentation.
2
+ name: j.redo
3
+ description: Polyfill alias of the redo skill under a collision-safe directory name. Identical behavior to /redo — Redo parts or entire previous implementations identified by a commit SHA or an Epic/Story number (e.g. E01, E02_S03). Expects an identifier and a description of what to redo and why. Use when the user wants to revisit, rework, or rewrite previously completed work, including updating all affected documentation. Use when the bare /redo form is shadowed by another tool's own built-in command of the same name.
4
4
  keywords:
5
5
  - redo
6
6
  - rework
7
7
  - rewrite
8
8
  - revisit
9
9
  - redo task
10
+ - j-redo
11
+ - polyfill
10
12
  examples:
11
13
  - "redo the login implementation"
12
14
  - "rewrite story E02_S01"
15
+ - "j-redo"
13
16
  metadata:
14
17
  prefered_agent: scrum-master
15
18
  ---
16
19
 
17
20
  # Redo — Rework a Previous Implementation
18
21
 
22
+ This skill is a literal-directory-name duplicate of `skills/redo/`. It exists so that `/j-redo` (and `j.j-redo`) give a guaranteed-unshadowed way to reach the same flow as `/redo`, even if a host tool's own built-in command of the same name would otherwise shadow or override the bare `/redo` alias (Claude Code's native skill resolution is a literal-string, directory-name-based match — see `docs/skill-authoring.md`'s "Invocation Convention").
23
+
24
+ This file is generated/synced by `scripts/generate-j-alias.sh redo` from `skills/redo/SKILL.md` — do not hand-edit it; re-run the generator instead to pick up source changes.
25
+
19
26
  ## Input Format
20
27
 
21
28
  ```
@@ -1,10 +1,17 @@
1
1
  ---
2
- name: j:skillify
3
- description: Refactor one or more existing skills into a cleaner, more maintainable structure — extracting hardcoded content into asset files, offloading deterministic steps into scripts, and reorganizing the skill body to reflect the leaner result. Use this whenever the user wants to clean up, improve, or restructure an existing skill, mentions that a skill has hardcoded content that could be templated, or asks to "skillify", "refactor", or "tidy up" a skill. Trigger even if the user just pastes a skill and says something like "can we make this better?".
2
+ name: j.skillify
3
+ description: Polyfill alias of the skillify skill under a collision-safe directory name. Identical behavior to /skillify — Refactor one or more existing skills into a cleaner, more maintainable structure — extracting hardcoded content into asset files, offloading deterministic steps into scripts, and reorganizing the skill body to reflect the leaner result. Use this whenever the user wants to clean up, improve, or restructure an existing skill, mentions that a skill has hardcoded content that could be templated, or asks to "skillify", "refactor", or "tidy up" a skill. Trigger even if the user just pastes a skill and says something like "can we make this better?". Use when the bare /skillify form is shadowed by another tool's own built-in command of the same name.
4
+ keywords:
5
+ - j-skillify
6
+ - polyfill
4
7
  ---
5
8
 
6
9
  # Skillify — Refactor a Skill into a Cleaner Structure
7
10
 
11
+ This skill is a literal-directory-name duplicate of `skills/skillify/`. It exists so that `/j-skillify` (and `j.j-skillify`) give a guaranteed-unshadowed way to reach the same flow as `/skillify`, even if a host tool's own built-in command of the same name would otherwise shadow or override the bare `/skillify` alias (Claude Code's native skill resolution is a literal-string, directory-name-based match — see `docs/skill-authoring.md`'s "Invocation Convention").
12
+
13
+ This file is generated/synced by `scripts/generate-j-alias.sh skillify` from `skills/skillify/SKILL.md` — do not hand-edit it; re-run the generator instead to pick up source changes.
14
+
8
15
  ## What this skill does
9
16
 
10
17
  Takes one or more existing skills and refactors them by:
@@ -65,4 +72,4 @@ The rewritten SKILL.md should:
65
72
  - `assets/init-old/SKILL.md` — The init skill before refactoring (hardcoded heredocs, inline JSON, hardcoded directory list)
66
73
  - `assets/init-new/SKILL.md` — The init skill after refactoring (all content in assets, steps delegated to `init.sh`)
67
74
 
68
- Read these when you need a concrete example of the before/after pattern.
75
+ Read these when you need a concrete example of the before/after pattern.
@@ -1,21 +1,28 @@
1
1
  ---
2
- name: j:spinoff
3
- description: Capture a diverging topic mid-conversation. Collects context and a mandatory origin, optionally runs /brainstorm for prerequisites, saves an /idea entry, and returns focus to the primary thread.
2
+ name: j.spinoff
3
+ description: Polyfill alias of the spinoff skill under a collision-safe directory name. Identical behavior to /spinoff — Capture a diverging topic mid-conversation. Collects context and a mandatory origin, optionally runs /brainstorm for prerequisites, saves an /idea entry, and returns focus to the primary thread. Use when the bare /spinoff form is shadowed by another tool's own built-in command of the same name.
4
4
  keywords:
5
5
  - spinoff
6
6
  - diverge
7
7
  - side topic
8
8
  - capture topic
9
9
  - new thread
10
+ - j-spinoff
11
+ - polyfill
10
12
  examples:
11
13
  - "let's spinoff this idea"
12
14
  - "capture this as a separate thread"
15
+ - "j-spinoff"
13
16
  metadata:
14
17
  prefered_agent: scrum-master
15
18
  ---
16
19
 
17
20
  # Spinoff — Capture a Diverging Topic
18
21
 
22
+ This skill is a literal-directory-name duplicate of `skills/spinoff/`. It exists so that `/j-spinoff` (and `j.j-spinoff`) give a guaranteed-unshadowed way to reach the same flow as `/spinoff`, even if a host tool's own built-in command of the same name would otherwise shadow or override the bare `/spinoff` alias (Claude Code's native skill resolution is a literal-string, directory-name-based match — see `docs/skill-authoring.md`'s "Invocation Convention").
23
+
24
+ This file is generated/synced by `scripts/generate-j-alias.sh spinoff` from `skills/spinoff/SKILL.md` — do not hand-edit it; re-run the generator instead to pick up source changes.
25
+
19
26
  ## Instructions
20
27
 
21
28
  1. **Identify the diverging topic** — Ask the user to confirm or briefly describe the diverging topic.
@@ -1,19 +1,26 @@
1
1
  ---
2
- name: j:status
3
- description: Print a human-readable summary of the entire scrum board — all epics, stories, and tasks with their statuses — plus any open rapports and unprocessed queue triggers. Use when you want a quick overview of project state without reading raw files.
2
+ name: j.status
3
+ description: Polyfill alias of the status skill under a collision-safe directory name. Identical behavior to /status — Print a human-readable summary of the entire scrum board — all epics, stories, and tasks with their statuses — plus any open rapports and unprocessed queue triggers. Use when you want a quick overview of project state without reading raw files. Use when the bare /status form is shadowed by another tool's own built-in command of the same name.
4
4
  keywords:
5
5
  - status
6
6
  - board summary
7
7
  - overview
8
8
  - project state
9
9
  - what's done
10
+ - j-status
11
+ - polyfill
10
12
  examples:
11
13
  - "show me the project status"
12
14
  - "what's the state of the board?"
15
+ - "j-status"
13
16
  ---
14
17
 
15
18
  # Status — Board Overview
16
19
 
20
+ This skill is a literal-directory-name duplicate of `skills/status/`. It exists so that `/j-status` (and `j.j-status`) give a guaranteed-unshadowed way to reach the same flow as `/status`, even if a host tool's own built-in command of the same name would otherwise shadow or override the bare `/status` alias (Claude Code's native skill resolution is a literal-string, directory-name-based match — see `docs/skill-authoring.md`'s "Invocation Convention").
21
+
22
+ This file is generated/synced by `scripts/generate-j-alias.sh status` from `skills/status/SKILL.md` — do not hand-edit it; re-run the generator instead to pick up source changes.
23
+
17
24
  ## Instructions
18
25
 
19
26
  1. **Read `project/configs/workflow.json`** to confirm board paths. Fall back to `project/board/` if the file does not exist.
@@ -1,21 +1,28 @@
1
1
  ---
2
- name: j:todo
3
- description: Add missions to the project todo list (project/todo.md), optionally linking them to epics and stories. Loops until the user is done, then optionally executes the list.
2
+ name: j.todo
3
+ description: Polyfill alias of the todo skill under a collision-safe directory name. Identical behavior to /todo — Add missions to the project todo list (project/todo.md), optionally linking them to epics and stories. Loops until the user is done, then optionally executes the list. Use when the bare /todo form is shadowed by another tool's own built-in command of the same name.
4
4
  keywords:
5
5
  - todo
6
6
  - add task
7
7
  - queue work
8
8
  - backlog
9
9
  - add to list
10
+ - j-todo
11
+ - polyfill
10
12
  examples:
11
13
  - "add this to the todo list"
12
14
  - "queue this as a task"
15
+ - "j-todo"
13
16
  metadata:
14
17
  prefered_agent: scrum-master
15
18
  ---
16
19
 
17
20
  # Todo — Add Missions to the Todo List
18
21
 
22
+ This skill is a literal-directory-name duplicate of `skills/todo/`. It exists so that `/j-todo` (and `j.j-todo`) give a guaranteed-unshadowed way to reach the same flow as `/todo`, even if a host tool's own built-in command of the same name would otherwise shadow or override the bare `/todo` alias (Claude Code's native skill resolution is a literal-string, directory-name-based match — see `docs/skill-authoring.md`'s "Invocation Convention").
23
+
24
+ This file is generated/synced by `scripts/generate-j-alias.sh todo` from `skills/todo/SKILL.md` — do not hand-edit it; re-run the generator instead to pick up source changes.
25
+
19
26
  ## `--trivial` Flag
20
27
 
21
28
  **Syntax:** `/todo --trivial <description>` — optionally combined with the same `: <Epic no.>_<Story no.>` linkage syntax normal `/todo` entries use, e.g. `/todo --trivial Fix typo in error message: E12_S03`.
@@ -58,7 +65,7 @@ When `--trivial` is present, the mission is written as a **fully-formed task boa
58
65
 
59
66
  c. **Run the helper script**, which handles everything mechanical — next task-ID assignment, writing the task board file with `execution_scope: inline` forced, registering the new task ID into the parent story's `tasks:` frontmatter list, and adding the `project/todo.md` entry using the full task ID (so `/do` routes straight into its Inline Execution Path with no redundant breakdown pass):
60
67
  ```
61
- bash skills/todo/scripts/add_trivial_task.sh \
68
+ bash skills/j-todo/scripts/add_trivial_task.sh \
62
69
  --story <E##_S##> \
63
70
  --title "<mission title>" \
64
71
  --description "<mission description>" \
@@ -13,7 +13,7 @@
13
13
  <!-- PLACEHOLDER: what this todo is trying to achieve -->
14
14
 
15
15
  ## Affected Files or Scope
16
- <!-- PLACEHOLDER: which files, modules, or areas are involved, e.g. src/auth/, skills/todo/ -->
16
+ <!-- PLACEHOLDER: which files, modules, or areas are involved, e.g. src/auth/, skills/j-todo/ -->
17
17
 
18
18
  ## Intended Approach
19
19
  <!-- PLACEHOLDER: step-by-step or high-level approach to the work -->
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env bash
2
- # skills/todo/scripts/add_trivial_task.sh
2
+ # skills/j-todo/scripts/add_trivial_task.sh
3
3
  #
4
4
  # Creates a fully-formed task board file for a `/todo --trivial` mission,
5
5
  # forced to execution_scope: inline unconditionally, and registers it both
@@ -10,7 +10,7 @@
10
10
  # The JUDGMENT half — estimating file/line counts and deciding what
11
11
  # execution_scope the normal heuristic in agents/scrum-master.md would have
12
12
  # assigned (computed_tier) — happens in the calling agent's instructions
13
- # (skills/todo/SKILL.md), per the Skill Implementation Principle: a step that
13
+ # (skills/j-todo/SKILL.md), per the Skill Implementation Principle: a step that
14
14
  # requires reasoning about branching logic, new dependencies, etc. does not
15
15
  # belong in a script. This script never reads project/configs/scope-thresholds.json
16
16
  # or recomputes computed_tier itself — it only records what it was told.
@@ -33,7 +33,7 @@ cd "$REPO_ROOT"
33
33
 
34
34
  TASKS_DIR="project/board/tasks"
35
35
  STORIES_DIR="project/board/stories"
36
- UPDATE_STORY_SCRIPT="skills/todo/scripts/update_story_tasks.py"
36
+ UPDATE_STORY_SCRIPT="skills/j-todo/scripts/update_story_tasks.py"
37
37
 
38
38
  story_id=""
39
39
  title=""
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env python3
2
2
  """
3
- skills/todo/scripts/update_story_tasks.py
3
+ skills/j-todo/scripts/update_story_tasks.py
4
4
 
5
5
  Mechanically inserts a task ID into a story board file's `tasks:` frontmatter
6
6
  list, if it is not already present. Idempotent (a re-run with the same
@@ -12,7 +12,7 @@ scripts/with-lock.sh, keyed to the story file, per templates/SCRUM_BOARD_SCHEMA.
12
12
  File Locking section (board frontmatter writes must go through the lock wrapper).
13
13
 
14
14
  Usage:
15
- python3 skills/todo/scripts/update_story_tasks.py <story-file> <task-id>
15
+ python3 skills/j-todo/scripts/update_story_tasks.py <story-file> <task-id>
16
16
 
17
17
  Exit codes:
18
18
  0 success (task_id inserted, or already present)
@@ -1,6 +1,6 @@
1
1
  ---
2
- name: j: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