@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.
- package/README.md +93 -256
- package/agents/developer.md +9 -8
- package/agents/scrum-master.md +57 -23
- package/agents/tester.md +51 -5
- package/hooks/on_session_end.sh +13 -1
- package/lib/generate-agent-context.js +18 -1
- package/lib/generate-copilot-instructions.js +18 -1
- package/lib/generate-skill-allow-list.js +197 -0
- package/lib/skill-allow-list.json +42 -0
- package/package.json +17 -13
- package/scripts/apply-j-prefix.sh +243 -0
- package/scripts/consume-context-digest.sh +103 -0
- package/scripts/generate-j-alias.sh +333 -0
- package/scripts/postinstall.js +25 -0
- package/scripts/sweep-stale-context-digests.sh +132 -0
- package/scripts/validate-board.sh +5 -0
- package/scripts/write-context-digest.sh +230 -0
- package/skills/{brainstorm → j-brainstorm}/SKILL.md +9 -2
- package/skills/{btw → j-btw}/SKILL.md +9 -2
- package/skills/{clearify → j-clearify}/SKILL.md +9 -2
- package/skills/{close-story → j-close-story}/SKILL.md +92 -13
- package/skills/j-close-story/scripts/check-privatized.sh +345 -0
- package/skills/{close-story → j-close-story}/scripts/check-story-closeable.sh +1 -1
- package/skills/{close-story → j-close-story}/scripts/extract-task-diff-stats.sh +1 -1
- package/skills/{commit → j-commit}/SKILL.md +9 -2
- package/skills/j-continue/SKILL.md +36 -0
- package/skills/{deep-dive → j-deep-dive}/SKILL.md +9 -8
- package/skills/{dev-done → j-dev-done}/SKILL.md +11 -4
- package/skills/{dev-done → j-dev-done}/scripts/classify-commit-outcome.sh +4 -4
- package/skills/{distribute → j-distribute}/SKILL.md +17 -10
- package/skills/{distribute → j-distribute}/scripts/distribute-changes.sh +1 -1
- package/skills/{do → j-do}/SKILL.md +111 -14
- package/skills/j-doc/README.md +155 -0
- package/skills/{doc → j-doc}/SKILL.md +55 -18
- package/skills/j-doc/authoring-notes.md +72 -0
- package/skills/j-doc/scripts/resolve_last_update.py +149 -0
- package/skills/{doc-sync → j-doc-sync}/SKILL.md +9 -2
- package/skills/{dooo → j-dooo}/SKILL.md +9 -2
- package/skills/j-error/SKILL.md +36 -0
- package/skills/{evaluate → j-evaluate}/SKILL.md +9 -2
- package/skills/j-examplify/SKILL.md +49 -0
- package/skills/{help → j-help}/SKILL.md +9 -2
- package/skills/{idea → j-idea}/SKILL.md +10 -3
- package/skills/{idea → j-idea}/assets/idea_handoff_template.md +1 -1
- package/skills/{improve → j-improve}/SKILL.md +9 -2
- package/skills/{init → j-init}/SKILL.md +21 -8
- package/skills/j-init/assets/scope-thresholds_template.json +7 -0
- package/skills/j-jbp/SKILL.md +32 -0
- package/skills/j-lgtm/SKILL.md +28 -0
- package/skills/{pi-plan → j-pi-plan}/SKILL.md +10 -3
- package/skills/{proceed → j-proceed}/SKILL.md +9 -2
- package/skills/{publish → j-publish}/SKILL.md +47 -40
- package/skills/{publish → j-publish}/adapters/droplet.md +1 -1
- package/skills/{publish → j-publish}/adapters/mobile-ios.md +3 -3
- package/skills/{publish → j-publish}/adapters/npm-ci.md +29 -7
- package/skills/{publish → j-publish}/adapters/npm.md +8 -8
- package/skills/{publish → j-publish}/assets/ci-contract.md +2 -2
- package/skills/{publish → j-publish}/schemas/publish.schema.json +1 -1
- package/skills/{publish → j-publish}/scripts/npm_ci_pipeline.sh +21 -1
- package/skills/{publish → j-publish}/scripts/npm_stage_inspect.sh +34 -1
- package/skills/{publish → j-publish}/scripts/npm_stage_pipeline.sh +9 -4
- package/skills/{publish → j-publish}/scripts/publish_deploy.sh +4 -4
- package/skills/{publish → j-publish}/scripts/validate_npm_stage_env.sh +1 -1
- package/skills/{publish → j-publish}/wizards/droplet.md +1 -1
- package/skills/{publish → j-publish}/wizards/mobile-ios.md +1 -1
- package/skills/{publish → j-publish}/wizards/npm-ci.md +1 -1
- package/skills/{publish → j-publish}/wizards/npm.md +1 -1
- package/skills/{reconcile → j-reconcile}/SKILL.md +12 -5
- package/skills/{reconcile → j-reconcile}/scripts/detect-unlinked-code.sh +2 -2
- package/skills/{reconcile → j-reconcile}/scripts/resolve-reconcile-scope.sh +3 -3
- package/skills/{reconcile-origin → j-reconcile-origin}/SKILL.md +13 -6
- package/skills/{redo → j-redo}/SKILL.md +9 -2
- package/skills/{skillify → j-skillify}/SKILL.md +10 -3
- package/skills/{spinoff → j-spinoff}/SKILL.md +9 -2
- package/skills/{status → j-status}/SKILL.md +9 -2
- package/skills/j-todo/SKILL.md +92 -0
- package/skills/{todo → j-todo}/assets/todo_handoff_template.md +1 -1
- package/skills/j-todo/scripts/add_trivial_task.sh +216 -0
- package/skills/j-todo/scripts/update_story_tasks.py +87 -0
- package/skills/{uncharted → j-uncharted}/SKILL.md +35 -28
- package/skills/{uncharted → j-uncharted}/assets/UNDERSTANDING_DOC_TEMPLATE.md +2 -2
- package/skills/{uncharted → j-uncharted}/scripts/detect-dependencies.sh +1 -1
- package/skills/{uncharted → j-uncharted}/scripts/detect-tests.sh +1 -1
- package/skills/{uncharted → j-uncharted}/scripts/directory-triage.sh +3 -3
- package/skills/{uncharted → j-uncharted}/scripts/elicitation-state.sh +3 -3
- package/skills/{uncharted → j-uncharted}/scripts/enumerate-target.sh +1 -1
- package/skills/{uncharted → j-uncharted}/scripts/import-source.sh +1 -1
- package/skills/{uncharted → j-uncharted}/scripts/inspect-provenance.sh +1 -1
- package/skills/{uncharted → j-uncharted}/scripts/resolve-segment-target.sh +5 -5
- package/skills/{uncharted → j-uncharted}/scripts/run-engine.sh +1 -1
- package/skills/{uncharted → j-uncharted}/scripts/validate-proposed-items.sh +2 -2
- package/skills/{uncharted → j-uncharted}/scripts/write-backfilled-epics.sh +1 -1
- package/skills/j-wtf/SKILL.md +27 -0
- package/skills/jenga/SKILL.md +1 -1
- package/skills/jenga/scripts/render-confirmation.sh +55 -18
- package/skills/jenga-permission-level/SKILL.md +1 -1
- package/templates/SCRUM_BOARD_SCHEMA.md +33 -2
- package/templates/agent-context.md.tpl +32 -9
- package/templates/copilot-instructions.md.tpl +66 -11
- package/skills/continue/SKILL.md +0 -29
- package/skills/error/SKILL.md +0 -29
- package/skills/examplify/SKILL.md +0 -42
- package/skills/init/assets/scope-thresholds_template.json +0 -7
- package/skills/jbp/SKILL.md +0 -25
- package/skills/lgtm/SKILL.md +0 -21
- package/skills/todo/SKILL.md +0 -48
- package/skills/wtf/SKILL.md +0 -20
- /package/skills/{close-story → j-close-story}/scripts/compute-scope-divergence.sh +0 -0
- /package/skills/{close-story → j-close-story}/scripts/extract-diff-stats.sh +0 -0
- /package/skills/{close-story → j-close-story}/scripts/update-task-frontmatter.sh +0 -0
- /package/skills/{commit → j-commit}/assets/user_instructions_template.md +0 -0
- /package/skills/{distribute → j-distribute}/CONFIG_SCHEMA.md +0 -0
- /package/skills/{distribute → j-distribute}/scripts/check-version.sh +0 -0
- /package/skills/{distribute → j-distribute}/scripts/commit-version-bump.sh +0 -0
- /package/skills/{do → j-do}/assets/intent-vs-diff-prompt.md +0 -0
- /package/skills/{do → j-do}/assets/sender_template.json +0 -0
- /package/skills/{doc → j-doc}/assets/path-objectives.yaml +0 -0
- /package/skills/{doc-sync → j-doc-sync}/assets/default_excludes.txt +0 -0
- /package/skills/{doc-sync → j-doc-sync}/assets/doc_targets.md +0 -0
- /package/skills/{evaluate → j-evaluate}/assets/evaluation_invokation_template.yml +0 -0
- /package/skills/{evaluate → j-evaluate}/assets/evaluation_rapport_template.md +0 -0
- /package/skills/{idea → j-idea}/assets/idea_template.md +0 -0
- /package/skills/{init → j-init}/assets/.gitignore_template +0 -0
- /package/skills/{init → j-init}/assets/PROJECT_SUMMARY_template.md +0 -0
- /package/skills/{init → j-init}/assets/directory_structure.txt +0 -0
- /package/skills/{init → j-init}/assets/strategy_stub_template.md +0 -0
- /package/skills/{init → j-init}/assets/test-config_template.json +0 -0
- /package/skills/{init → j-init}/assets/workflow_template.json +0 -0
- /package/skills/{init → j-init}/scripts/apply-project-visibility.sh +0 -0
- /package/skills/{init → j-init}/scripts/detect-existing-codebase.sh +0 -0
- /package/skills/{init → j-init}/scripts/init.sh +0 -0
- /package/skills/{pi-plan → j-pi-plan}/assets/epic.json +0 -0
- /package/skills/{pi-plan → j-pi-plan}/assets/story_template.md +0 -0
- /package/skills/{publish → j-publish}/assets/ExportOptions.plist.template +0 -0
- /package/skills/{publish → j-publish}/assets/ownership-matrix.md +0 -0
- /package/skills/{publish → j-publish}/assets/publish.example.json +0 -0
- /package/skills/{publish → j-publish}/assets/publish.example.npm-ci.json +0 -0
- /package/skills/{publish → j-publish}/assets/publish.example.npm.json +0 -0
- /package/skills/{publish → j-publish}/assets/secrets-guide.md +0 -0
- /package/skills/{publish → j-publish}/schemas/fixtures/npm-ci-minimal.json +0 -0
- /package/skills/{publish → j-publish}/schemas/fixtures/npm-ci-with-empty-secrets.json +0 -0
- /package/skills/{publish → j-publish}/schemas/fixtures/npm-ci-with-workflow-path.json +0 -0
- /package/skills/{publish → j-publish}/scripts/check_target_config.sh +0 -0
- /package/skills/{publish → j-publish}/scripts/droplet_pipeline.sh +0 -0
- /package/skills/{publish → j-publish}/scripts/finalize_changelog.sh +0 -0
- /package/skills/{publish → j-publish}/scripts/generate_release_notes.sh +0 -0
- /package/skills/{publish → j-publish}/scripts/ios_pipeline.sh +0 -0
- /package/skills/{publish → j-publish}/scripts/npm_pipeline.sh +0 -0
- /package/skills/{publish → j-publish}/scripts/publish_common.sh +0 -0
- /package/skills/{publish → j-publish}/scripts/reconcile_tags.sh +0 -0
- /package/skills/{publish → j-publish}/scripts/run_gates.sh +0 -0
- /package/skills/{publish → j-publish}/scripts/setup_wizard.sh +0 -0
- /package/skills/{publish → j-publish}/scripts/show_history.sh +0 -0
- /package/skills/{publish → j-publish}/scripts/suggest_semver_bump.sh +0 -0
- /package/skills/{publish → j-publish}/scripts/validate_config.sh +0 -0
- /package/skills/{publish → j-publish}/scripts/validate_droplet_env.sh +0 -0
- /package/skills/{publish → j-publish}/scripts/validate_ios_env.sh +0 -0
- /package/skills/{publish → j-publish}/scripts/validate_npm_ci_env.sh +0 -0
- /package/skills/{publish → j-publish}/scripts/validate_npm_env.sh +0 -0
- /package/skills/{publish → j-publish}/scripts/write_ledger_entry.sh +0 -0
- /package/skills/{reconcile → j-reconcile}/assets/report_format.md +0 -0
- /package/skills/{reconcile-origin → j-reconcile-origin}/scripts/reconcile-origin.sh +0 -0
- /package/skills/{skillify → j-skillify}/assets/init-new/SKILL.md +0 -0
- /package/skills/{skillify → j-skillify}/assets/init-new/assets/.gitignore_template +0 -0
- /package/skills/{skillify → j-skillify}/assets/init-new/assets/PROJECT_SUMMARY_template.md +0 -0
- /package/skills/{skillify → j-skillify}/assets/init-new/assets/directory_structure.txt +0 -0
- /package/skills/{skillify → j-skillify}/assets/init-new/assets/test-config_template.json +0 -0
- /package/skills/{skillify → j-skillify}/assets/init-new/assets/workflow_template.json +0 -0
- /package/skills/{skillify → j-skillify}/assets/init-new/scripts/init.sh +0 -0
- /package/skills/{skillify → j-skillify}/assets/init-old/SKILL.md +0 -0
- /package/skills/{status → j-status}/assets/output_format.md +0 -0
- /package/skills/{todo → j-todo}/assets/todo_template.md +0 -0
- /package/skills/{uncharted → j-uncharted}/assets/SEGMENT_PROPOSAL_TEMPLATE.md +0 -0
- /package/skills/{uncharted → j-uncharted}/scripts/apply-subsystem-cap.sh +0 -0
- /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,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.
|
package/skills/jenga/SKILL.md
CHANGED
|
@@ -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
|