@jenga-ai/agent 3.6.0 → 4.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 (79) hide show
  1. package/lib/generate-skill-allow-list.js +42 -5
  2. package/lib/skill-allow-list.json +1 -1
  3. package/package.json +1 -2
  4. package/project/app/api/lib/resolve-project-root.js +1 -1
  5. package/project/app/package.json +4 -0
  6. package/project/app/ui/dist/assets/index-BADc5mmH.css +1 -0
  7. package/project/app/ui/dist/assets/index-C3oiuli_.js +104 -0
  8. package/project/app/ui/dist/index.html +2 -2
  9. package/scripts/acquire-concurrency-slot.sh +34 -4
  10. package/scripts/apply-j-prefix.sh +1 -1
  11. package/scripts/delete-bare-skill-dirs.sh +1 -2
  12. package/scripts/idea_manager.sh +16 -1
  13. package/scripts/release-concurrency-slot.sh +34 -4
  14. package/scripts/render-ranked-list.sh +270 -0
  15. package/scripts/repoint-dead-bare-path-prose.py +81 -0
  16. package/scripts/rewrite-stale-skill-preambles.py +188 -0
  17. package/scripts/strip-polyfill-frontmatter.py +166 -0
  18. package/scripts/todo_manager.sh +16 -1
  19. package/scripts/validate-typed-object.sh +750 -0
  20. package/skills/j-brainstorm/SKILL.md +3 -4
  21. package/skills/j-btw/SKILL.md +3 -4
  22. package/skills/j-clearify/SKILL.md +3 -4
  23. package/skills/j-close-story/SKILL.md +11 -12
  24. package/skills/j-close-story/scripts/check-story-closeable.sh +11 -4
  25. package/skills/j-commit/SKILL.md +3 -4
  26. package/skills/j-continue/SKILL.md +5 -6
  27. package/skills/j-deep-dive/SKILL.md +3 -4
  28. package/skills/j-distribute/SKILL.md +3 -4
  29. package/skills/j-do/SKILL.md +13 -15
  30. package/skills/j-doc/SKILL.md +3 -4
  31. package/skills/j-doc-sync/SKILL.md +3 -4
  32. package/skills/j-dooo/SKILL.md +6 -15
  33. package/skills/j-error/SKILL.md +3 -4
  34. package/skills/j-evaluate/SKILL.md +3 -4
  35. package/skills/j-examplify/SKILL.md +3 -4
  36. package/skills/j-help/SKILL.md +3 -4
  37. package/skills/j-idea/SKILL.md +3 -4
  38. package/skills/j-improve/SKILL.md +3 -4
  39. package/skills/j-init/SKILL.md +20 -11
  40. package/skills/j-init/scripts/apply-scaffold-visibility.sh +8 -6
  41. package/skills/j-jbp/SKILL.md +3 -4
  42. package/skills/j-lgtm/SKILL.md +3 -4
  43. package/skills/j-pi-plan/SKILL.md +3 -4
  44. package/skills/j-proceed/SKILL.md +3 -4
  45. package/skills/j-publish/SKILL.md +3 -4
  46. package/skills/j-publish/scripts/run_gates.sh +1 -1
  47. package/skills/j-reconcile/SKILL.md +38 -5
  48. package/skills/j-reconcile/assets/report_format.md +11 -0
  49. package/skills/j-reconcile/scripts/detect-unlinked-code.sh +2 -2
  50. package/skills/j-reconcile-origin/SKILL.md +3 -4
  51. package/skills/j-redo/SKILL.md +3 -4
  52. package/skills/j-skillify/SKILL.md +3 -4
  53. package/skills/j-spinoff/SKILL.md +3 -4
  54. package/skills/j-status/SKILL.md +4 -5
  55. package/skills/j-todo/SKILL.md +42 -5
  56. package/skills/j-todo/scripts/argument-is-not-ranked-list.sh +92 -0
  57. package/skills/j-todo/scripts/argument-is-ranked-list.sh +78 -0
  58. package/skills/j-uncharted/SKILL.md +251 -12
  59. package/skills/j-uncharted/scripts/detect-dependencies.sh +79 -21
  60. package/skills/j-uncharted/scripts/diff-since-baseline.sh +600 -0
  61. package/skills/j-uncharted/scripts/find-scan-baseline.sh +545 -0
  62. package/skills/j-uncharted/scripts/run-engine.sh +36 -2
  63. package/skills/j-uncharted/scripts/write-scan-record.sh +361 -0
  64. package/skills/j-wtf/SKILL.md +3 -4
  65. package/skills/jenga/SKILL.md +69 -8
  66. package/skills/jenga/playbooks/schema.json +4 -4
  67. package/skills/jenga/scripts/load-nl-catalog.js +5 -2
  68. package/skills/jenga/scripts/load-playbooks.sh +289 -4
  69. package/skills/jenga/scripts/match-playbook.sh +4 -4
  70. package/skills/jenga/scripts/run-playbook-step.sh +267 -1
  71. package/templates/permission-levels/level-1-locked.json +1 -1
  72. package/templates/permission-levels/level-2-guarded.json +1 -1
  73. package/templates/permission-levels/level-3-standard.json +1 -1
  74. package/templates/permission-levels/level-4-elevated.json +1 -1
  75. package/templates/permission-levels/level-5-unrestricted.json +1 -1
  76. package/templates/playbook-types.json +6 -0
  77. package/project/app/ui/dist/assets/index-BVR_7Owg.css +0 -1
  78. package/project/app/ui/dist/assets/index-CtU2xLQm.js +0 -104
  79. package/scripts/audit-twin-divergence.sh +0 -693
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: j.error
3
- description: Polyfill alias of the error skill under a collision-safe directory name. Identical behavior to /error — Guided troubleshooting flow that gathers context about an error — where it occurs, what was attempted, what went wrong, and what was expected. Use when the bare /error form is shadowed by another tool's own built-in command of the same name.
3
+ description: Guided troubleshooting flow that gathers context about an error — where it occurs, what was attempted, what went wrong, and what was expected.
4
4
  keywords:
5
5
  - error
6
6
  - bug
@@ -9,7 +9,6 @@ keywords:
9
9
  - debug
10
10
  - broken
11
11
  - j-error
12
- - polyfill
13
12
  examples:
14
13
  - "I'm getting an error"
15
14
  - "help me fix this bug"
@@ -20,9 +19,9 @@ metadata:
20
19
 
21
20
  # Error — Guided Troubleshooting
22
21
 
23
- This skill is a literal-directory-name duplicate of `skills/error/`. It exists so that `/j-error` (and `j.j-error`) give a guaranteed-unshadowed way to reach the same flow as `/error`, even if a host tool's own built-in command of the same name would otherwise shadow or override the bare `/error` alias (Claude Code's native skill resolution is a literal-string, directory-name-based match — see `docs/skill-authoring.md`'s "Invocation Convention").
22
+ `skills/j-error/` is the **canonical, hand-edited** directory for this skill, per CLAUDE.md's "The Canonical Naming Contract" (the `E50` reopening of 2026-09-09, which promoted `skills/j-error/` from generated twin to sole canonical form). The `j-` prefix is there for collision safety — a real directory under a distinct name, so a host tool shipping its own same-named built-in command cannot shadow it (Claude Code's native skill resolution is a literal-string, directory-name-based match; see `docs/skill-authoring.md`'s "Invocation Convention").
24
23
 
25
- This file is generated/synced by `scripts/generate-j-alias.sh error` from `skills/error/SKILL.md` — do not hand-edit it; re-run the generator instead to pick up source changes.
24
+ > ⚠️ **`scripts/generate-j-alias.sh` was retired by `E50_S14` and no longer exists — there is nothing to run.** This file was previously generated from a bare `skills/error/SKILL.md` source; `E50_S15` deleted that directory. This file is now the sole canonical, hand-edited source for this skill — edit it directly.
26
25
 
27
26
  ## Instructions
28
27
 
@@ -1,16 +1,15 @@
1
1
  ---
2
2
  name: j.evaluate
3
- description: Polyfill alias of the evaluate skill under a collision-safe directory name. Identical behavior to /evaluate — Analyzes example files against a target goal and produces a structured evaluation rapport. Use when the bare /evaluate form is shadowed by another tool's own built-in command of the same name.
3
+ description: Analyzes example files against a target goal and produces a structured evaluation rapport.
4
4
  keywords:
5
5
  - j-evaluate
6
- - polyfill
7
6
  ---
8
7
 
9
8
  # Evaluate
10
9
 
11
- This skill is a literal-directory-name duplicate of `skills/evaluate/`. It exists so that `/j-evaluate` (and `j.j-evaluate`) give a guaranteed-unshadowed way to reach the same flow as `/evaluate`, even if a host tool's own built-in command of the same name would otherwise shadow or override the bare `/evaluate` alias (Claude Code's native skill resolution is a literal-string, directory-name-based match — see `docs/skill-authoring.md`'s "Invocation Convention").
10
+ `skills/j-evaluate/` is the **canonical, hand-edited** directory for this skill, per CLAUDE.md's "The Canonical Naming Contract" (the `E50` reopening of 2026-09-09, which promoted `skills/j-evaluate/` from generated twin to sole canonical form). The `j-` prefix is there for collision safety — a real directory under a distinct name, so a host tool shipping its own same-named built-in command cannot shadow it (Claude Code's native skill resolution is a literal-string, directory-name-based match; see `docs/skill-authoring.md`'s "Invocation Convention").
12
11
 
13
- This file is generated/synced by `scripts/generate-j-alias.sh evaluate` from `skills/evaluate/SKILL.md` — do not hand-edit it; re-run the generator instead to pick up source changes.
12
+ > ⚠️ **`scripts/generate-j-alias.sh` was retired by `E50_S14` and no longer exists — there is nothing to run.** This file was previously generated from a bare `skills/evaluate/SKILL.md` source; `E50_S15` deleted that directory. This file is now the sole canonical, hand-edited source for this skill — edit it directly.
14
13
 
15
14
  ## Input
16
15
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: j.examplify
3
- description: Polyfill alias of the examplify skill under a collision-safe directory name. Identical behavior to /examplify — Explains concepts, features, use cases, and patterns based on provided context — a description, scenario, code snippet, or file. Use when the user wants to understand what something is, how it works, when to use it, or wants a concrete example. Use when the bare /examplify form is shadowed by another tool's own built-in command of the same name.
3
+ description: Explains concepts, features, use cases, and patterns based on provided context — a description, scenario, code snippet, or file. Use when the user wants to understand what something is, how it works, when to use it, or wants a concrete example.
4
4
  keywords:
5
5
  - examplify
6
6
  - explain
@@ -8,7 +8,6 @@ keywords:
8
8
  - how does
9
9
  - understand
10
10
  - j-examplify
11
- - polyfill
12
11
  examples:
13
12
  - "explain how this works"
14
13
  - "give me an example of X"
@@ -17,9 +16,9 @@ examples:
17
16
 
18
17
  # Concept Explainer
19
18
 
20
- This skill is a literal-directory-name duplicate of `skills/examplify/`. It exists so that `/j-examplify` (and `j.j-examplify`) give a guaranteed-unshadowed way to reach the same flow as `/examplify`, even if a host tool's own built-in command of the same name would otherwise shadow or override the bare `/examplify` alias (Claude Code's native skill resolution is a literal-string, directory-name-based match — see `docs/skill-authoring.md`'s "Invocation Convention").
19
+ `skills/j-examplify/` is the **canonical, hand-edited** directory for this skill, per CLAUDE.md's "The Canonical Naming Contract" (the `E50` reopening of 2026-09-09, which promoted `skills/j-examplify/` from generated twin to sole canonical form). The `j-` prefix is there for collision safety — a real directory under a distinct name, so a host tool shipping its own same-named built-in command cannot shadow it (Claude Code's native skill resolution is a literal-string, directory-name-based match; see `docs/skill-authoring.md`'s "Invocation Convention").
21
20
 
22
- This file is generated/synced by `scripts/generate-j-alias.sh examplify` from `skills/examplify/SKILL.md` — do not hand-edit it; re-run the generator instead to pick up source changes.
21
+ > ⚠️ **`scripts/generate-j-alias.sh` was retired by `E50_S14` and no longer exists — there is nothing to run.** This file was previously generated from a bare `skills/examplify/SKILL.md` source; `E50_S15` deleted that directory. This file is now the sole canonical, hand-edited source for this skill — edit it directly.
23
22
 
24
23
  ## Instructions
25
24
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: j.help
3
- description: Polyfill alias of the help skill under a collision-safe directory name. Identical behavior to /help — List all available skills with a short description of what each one does. Also use this skill when the user wants to know what commands or skills are available in the project. Use when the bare /help form is shadowed by another tool's own built-in command of the same name.
3
+ description: List all available skills with a short description of what each one does. Also use this skill when the user wants to know what commands or skills are available in the project.
4
4
  keywords:
5
5
  - help
6
6
  - skills
@@ -8,7 +8,6 @@ keywords:
8
8
  - what can you do
9
9
  - list skills
10
10
  - j-help
11
- - polyfill
12
11
  examples:
13
12
  - "what skills are available?"
14
13
  - "show me all commands"
@@ -17,9 +16,9 @@ examples:
17
16
 
18
17
  # Help — List Available Skills
19
18
 
20
- This skill is a literal-directory-name duplicate of `skills/help/`. It exists so that `/j-help` (and `j.j-help`) give a guaranteed-unshadowed way to reach the same flow as `/help`, even if a host tool's own built-in command of the same name would otherwise shadow or override the bare `/help` alias (Claude Code's native skill resolution is a literal-string, directory-name-based match — see `docs/skill-authoring.md`'s "Invocation Convention").
19
+ `skills/j-help/` is the **canonical, hand-edited** directory for this skill, per CLAUDE.md's "The Canonical Naming Contract" (the `E50` reopening of 2026-09-09, which promoted `skills/j-help/` from generated twin to sole canonical form). The `j-` prefix is there for collision safety — a real directory under a distinct name, so a host tool shipping its own same-named built-in command cannot shadow it (Claude Code's native skill resolution is a literal-string, directory-name-based match; see `docs/skill-authoring.md`'s "Invocation Convention").
21
20
 
22
- This file is generated/synced by `scripts/generate-j-alias.sh help` from `skills/help/SKILL.md` — do not hand-edit it; re-run the generator instead to pick up source changes.
21
+ > ⚠️ **`scripts/generate-j-alias.sh` was retired by `E50_S14` and no longer exists — there is nothing to run.** This file was previously generated from a bare `skills/help/SKILL.md` source; `E50_S15` deleted that directory. This file is now the sole canonical, hand-edited source for this skill — edit it directly.
23
22
 
24
23
  ## Instructions
25
24
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: j.idea
3
- description: Polyfill alias of the idea skill under a collision-safe directory name. Identical behavior to /idea — DEPRECATED - use the prefixed 'j-idea' skill instead. Capture a loosely-defined idea to project/ideas.md — a lightweight, "maybe someday" log with no board or promotion overhead. Use when the bare /idea form is shadowed by another tool's own built-in command of the same name.
3
+ description: Capture a loosely-defined idea to project/ideas.md — a lightweight, "maybe someday" log with no board or promotion overhead.
4
4
  keywords:
5
5
  - idea
6
6
  - capture idea
@@ -8,7 +8,6 @@ keywords:
8
8
  - brain dump
9
9
  - maybe someday
10
10
  - j-idea
11
- - polyfill
12
11
  examples:
13
12
  - "capture this as an idea"
14
13
  - "log this idea for later"
@@ -20,9 +19,9 @@ metadata:
20
19
 
21
20
  # Idea — Lightweight Idea Capture
22
21
 
23
- This skill is a literal-directory-name duplicate of `skills/idea/`. It exists so that `/j-idea` (and `j.j-idea`) give a guaranteed-unshadowed way to reach the same flow as `/idea`, even if a host tool's own built-in command of the same name would otherwise shadow or override the bare `/idea` alias (Claude Code's native skill resolution is a literal-string, directory-name-based match — see `docs/skill-authoring.md`'s "Invocation Convention").
22
+ `skills/j-idea/` is the **canonical, hand-edited** directory for this skill, per CLAUDE.md's "The Canonical Naming Contract" (the `E50` reopening of 2026-09-09, which promoted `skills/j-idea/` from generated twin to sole canonical form). The `j-` prefix is there for collision safety — a real directory under a distinct name, so a host tool shipping its own same-named built-in command cannot shadow it (Claude Code's native skill resolution is a literal-string, directory-name-based match; see `docs/skill-authoring.md`'s "Invocation Convention").
24
23
 
25
- This file is generated/synced by `scripts/generate-j-alias.sh idea` from `skills/idea/SKILL.md` — do not hand-edit it; re-run the generator instead to pick up source changes.
24
+ > ⚠️ **`scripts/generate-j-alias.sh` was retired by `E50_S14` and no longer exists — there is nothing to run.** This file was previously generated from a bare `skills/idea/SKILL.md` source; `E50_S15` deleted that directory. This file is now the sole canonical, hand-edited source for this skill — edit it directly.
26
25
 
27
26
  ## Instructions
28
27
 
@@ -1,16 +1,15 @@
1
1
  ---
2
2
  name: j.improve
3
- description: Polyfill alias of the improve skill under a collision-safe directory name. Identical behavior to /improve — A skill for analyzing a codebase and producing a structured improvement plan toward a defined goal. Use when the bare /improve form is shadowed by another tool's own built-in command of the same name.
3
+ description: A skill for analyzing a codebase and producing a structured improvement plan toward a defined goal.
4
4
  keywords:
5
5
  - j-improve
6
- - polyfill
7
6
  ---
8
7
 
9
8
  # Improve
10
9
 
11
- This skill is a literal-directory-name duplicate of `skills/improve/`. It exists so that `/j-improve` (and `j.j-improve`) give a guaranteed-unshadowed way to reach the same flow as `/improve`, even if a host tool's own built-in command of the same name would otherwise shadow or override the bare `/improve` alias (Claude Code's native skill resolution is a literal-string, directory-name-based match — see `docs/skill-authoring.md`'s "Invocation Convention").
10
+ `skills/j-improve/` is the **canonical, hand-edited** directory for this skill, per CLAUDE.md's "The Canonical Naming Contract" (the `E50` reopening of 2026-09-09, which promoted `skills/j-improve/` from generated twin to sole canonical form). The `j-` prefix is there for collision safety — a real directory under a distinct name, so a host tool shipping its own same-named built-in command cannot shadow it (Claude Code's native skill resolution is a literal-string, directory-name-based match; see `docs/skill-authoring.md`'s "Invocation Convention").
12
11
 
13
- This file is generated/synced by `scripts/generate-j-alias.sh improve` from `skills/improve/SKILL.md` — do not hand-edit it; re-run the generator instead to pick up source changes.
12
+ > ⚠️ **`scripts/generate-j-alias.sh` was retired by `E50_S14` and no longer exists — there is nothing to run.** This file was previously generated from a bare `skills/improve/SKILL.md` source; `E50_S15` deleted that directory. This file is now the sole canonical, hand-edited source for this skill — edit it directly.
14
13
 
15
14
  ## Instructions
16
15
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: j.init
3
- description: Polyfill alias of the init skill under a collision-safe directory name. Identical behavior to /init — initializes a new project with the standard directory structure, PROJECT_SUMMARY.md, workflow.json, git repo, and gitignore. Use when the built-in "/init" command (e.g. GH Copilot's own init) shadows Jenga's /init alias.
3
+ description: initializes a new project with the standard directory structure, PROJECT_SUMMARY.md, workflow.json, git repo, and gitignore. Use when the built-in "/init" command (e.g. GH Copilot's own init) shadows Jenga's /init alias.
4
4
  keywords:
5
5
  - init
6
6
  - initialize
@@ -8,7 +8,6 @@ keywords:
8
8
  - new project
9
9
  - scaffold
10
10
  - j-init
11
- - polyfill
12
11
  examples:
13
12
  - "initialize a new project"
14
13
  - "set up a new workspace"
@@ -17,15 +16,25 @@ examples:
17
16
 
18
17
  # J-Init — Project Setup (polyfill alias of Init)
19
18
 
20
- This skill is a literal-directory-name duplicate of `skills/init/`. It exists because
21
- some host tools/harnesses (e.g. GH Copilot) ship their own built-in command literally
22
- named `/init`, which can shadow or override Jenga AI's own `/init` alias (Claude Code's
23
- native skill resolution is a literal-string, directory-name-based match — see
24
- `docs/skill-authoring.md`'s "Invocation Convention"). `/j-init` (and `j.j-init`) give
25
- users a guaranteed-unshadowed way to reach the exact same setup flow.
26
-
27
- Keep this file's instructions in lockstep with `skills/init/SKILL.md` — any change made
28
- there should be mirrored here.
19
+ `skills/j-init/` is the **sole canonical directory** for this skill. The `j-` prefix is
20
+ there for collision safety: some host tools/harnesses (e.g. GH Copilot) ship their own
21
+ built-in command literally named `/init`, which would shadow a bare `/init` alias, since
22
+ Claude Code's native skill resolution is a literal-string, directory-name-based match —
23
+ see `docs/skill-authoring.md`'s "Invocation Convention". Invoke it as `j.init` or
24
+ `/j-init`.
25
+
26
+ > **This file was previously described as a duplicate of `skills/init/`, with an
27
+ > instruction to keep the two in lockstep. That instruction is void.** `E50_S15_T04`
28
+ > deleted every bare-name `skills/<name>/` directory on 2026-09-19, making
29
+ > `skills/j-<name>/` the sole canonical form (see `docs/skill-authoring.md`'s "The
30
+ > Canonical Naming Contract"), and `scripts/generate-j-alias.sh` — which had excluded this
31
+ > hand-maintained pair from generation anyway — was retired by `E50_S14_T01`. There is no
32
+ > second copy to mirror a change into, and none should be created. Edit this file directly.
33
+ >
34
+ > Corrected by `E42_S07_T01`'s follow-up, per
35
+ > `project/rapports/problems/E42_S07_T01-j-init-skill-md-lockstep-instruction-still-stale.md`.
36
+ > The same correction already landed one level down, in
37
+ > `skills/j-init/scripts/apply-scaffold-visibility.sh`.
29
38
 
30
39
  ## Instructions
31
40
 
@@ -14,12 +14,14 @@
14
14
  # skills/j-distribute/CONFIG_SCHEMA.md's "Scaffold visibility" section for the
15
15
  # full rationale.
16
16
  #
17
- # This is skills/j-init/'s own copy of skills/init/scripts/apply-scaffold-visibility.sh
18
- # (E31_S07_T03) — skills/j-init/ is a separate, hand-maintained directory, not
19
- # auto-synced with skills/init/ (scripts/generate-j-alias.sh explicitly excludes
20
- # this pair), and is the copy that actually ships to public-GitHub-mirror and
21
- # npm-package consumers. Keep this file's logic in lockstep with skills/init/'s
22
- # copy — any behavioral change made there should be mirrored here.
17
+ # This file is the sole copy. It was added by E31_S07_T03 as skills/j-init/'s own
18
+ # hand-maintained duplicate of a then-existing skills/init/scripts/ copy, with an
19
+ # instruction to keep the two in lockstep. That instruction is void: E50_S15_T04
20
+ # deleted every bare-name skills/<name>/ directory on 2026-09-19, making
21
+ # skills/j-<name>/ the sole canonical form (see docs/skill-authoring.md's "The
22
+ # Canonical Naming Contract"), and scripts/generate-j-alias.sh — which had excluded
23
+ # this pair from generation as hand-maintained — was itself retired by E50_S14_T01.
24
+ # There is no second copy to mirror a change into, and none should be created.
23
25
  #
24
26
  # Usage:
25
27
  # apply-scaffold-visibility.sh <mode> [project_root]
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: j.jbp
3
- description: Polyfill alias of the jbp skill under a collision-safe directory name. Identical behavior to /jbp — Scaffold the project using the JengaBasePlate boilerplate repo template from https://github.com/samwelmunga/JengaBasePlate.git. Use when the bare /jbp form is shadowed by another tool's own built-in command of the same name.
3
+ description: Scaffold the project using the JengaBasePlate boilerplate repo template from https://github.com/samwelmunga/JengaBasePlate.git.
4
4
  keywords:
5
5
  - jbp
6
6
  - boilerplate
@@ -8,7 +8,6 @@ keywords:
8
8
  - template
9
9
  - jenga base
10
10
  - j-jbp
11
- - polyfill
12
11
  examples:
13
12
  - "scaffold with JengaBasePlate"
14
13
  - "set up the base template"
@@ -17,9 +16,9 @@ examples:
17
16
 
18
17
  # JBP — JengaBasePlate Scaffold
19
18
 
20
- This skill is a literal-directory-name duplicate of `skills/jbp/`. It exists so that `/j-jbp` (and `j.j-jbp`) give a guaranteed-unshadowed way to reach the same flow as `/jbp`, even if a host tool's own built-in command of the same name would otherwise shadow or override the bare `/jbp` alias (Claude Code's native skill resolution is a literal-string, directory-name-based match — see `docs/skill-authoring.md`'s "Invocation Convention").
19
+ `skills/j-jbp/` is the **canonical, hand-edited** directory for this skill, per CLAUDE.md's "The Canonical Naming Contract" (the `E50` reopening of 2026-09-09, which promoted `skills/j-jbp/` from generated twin to sole canonical form). The `j-` prefix is there for collision safety — a real directory under a distinct name, so a host tool shipping its own same-named built-in command cannot shadow it (Claude Code's native skill resolution is a literal-string, directory-name-based match; see `docs/skill-authoring.md`'s "Invocation Convention").
21
20
 
22
- This file is generated/synced by `scripts/generate-j-alias.sh jbp` from `skills/jbp/SKILL.md` — do not hand-edit it; re-run the generator instead to pick up source changes.
21
+ > ⚠️ **`scripts/generate-j-alias.sh` was retired by `E50_S14` and no longer exists — there is nothing to run.** This file was previously generated from a bare `skills/jbp/SKILL.md` source; `E50_S15` deleted that directory. This file is now the sole canonical, hand-edited source for this skill — edit it directly.
23
22
 
24
23
  ## Instructions
25
24
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: j.lgtm
3
- description: Polyfill alias of the lgtm skill under a collision-safe directory name. Identical behavior to /lgtm — Approve and commit the current work, then continue to the next task. Shortcut that chains /commit followed by /continue. Use when the bare /lgtm form is shadowed by another tool's own built-in command of the same name.
3
+ description: Approve and commit the current work, then continue to the next task. Shortcut that chains /commit followed by /continue.
4
4
  keywords:
5
5
  - lgtm
6
6
  - approve
@@ -8,7 +8,6 @@ keywords:
8
8
  - done
9
9
  - commit and continue
10
10
  - j-lgtm
11
- - polyfill
12
11
  examples:
13
12
  - "lgtm, commit this"
14
13
  - "looks good, move on"
@@ -17,9 +16,9 @@ examples:
17
16
 
18
17
  # LGTM — Approve, Commit, and Continue
19
18
 
20
- This skill is a literal-directory-name duplicate of `skills/lgtm/`. It exists so that `/j-lgtm` (and `j.j-lgtm`) give a guaranteed-unshadowed way to reach the same flow as `/lgtm`, even if a host tool's own built-in command of the same name would otherwise shadow or override the bare `/lgtm` alias (Claude Code's native skill resolution is a literal-string, directory-name-based match — see `docs/skill-authoring.md`'s "Invocation Convention").
19
+ `skills/j-lgtm/` is the **canonical, hand-edited** directory for this skill, per CLAUDE.md's "The Canonical Naming Contract" (the `E50` reopening of 2026-09-09, which promoted `skills/j-lgtm/` from generated twin to sole canonical form). The `j-` prefix is there for collision safety — a real directory under a distinct name, so a host tool shipping its own same-named built-in command cannot shadow it (Claude Code's native skill resolution is a literal-string, directory-name-based match; see `docs/skill-authoring.md`'s "Invocation Convention").
21
20
 
22
- This file is generated/synced by `scripts/generate-j-alias.sh lgtm` from `skills/lgtm/SKILL.md` — do not hand-edit it; re-run the generator instead to pick up source changes.
21
+ > ⚠️ **`scripts/generate-j-alias.sh` was retired by `E50_S14` and no longer exists — there is nothing to run.** This file was previously generated from a bare `skills/lgtm/SKILL.md` source; `E50_S15` deleted that directory. This file is now the sole canonical, hand-edited source for this skill — edit it directly.
23
22
 
24
23
  ## Instructions
25
24
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: j.pi-plan
3
- description: Polyfill alias of the pi-plan skill under a collision-safe directory name. Identical behavior to /pi-plan — Define or expand project Epics in PROJECT_SUMMARY.md. Use this at the start of a project to establish its foundation, AND whenever the user wants to add major new features, plan a significant new area of work, or make epic-level changes to an existing project. Trigger whenever you hear things like "new feature area", "big change", "new epic", "expand the project", "add a major capability", or "plan a new phase" — even mid-project. Use when the bare /pi-plan form is shadowed by another tool's own built-in command of the same name.
3
+ description: Define or expand project Epics in PROJECT_SUMMARY.md. Use this at the start of a project to establish its foundation, AND whenever the user wants to add major new features, plan a significant new area of work, or make epic-level changes to an existing project. Trigger whenever you hear things like "new feature area", "big change", "new epic", "expand the project", "add a major capability", or "plan a new phase" — even mid-project.
4
4
  keywords:
5
5
  - epic
6
6
  - template
@@ -8,7 +8,6 @@ keywords:
8
8
  - new feature area
9
9
  - project structure
10
10
  - j-pi-plan
11
- - polyfill
12
11
  examples:
13
12
  - "add a new epic for X"
14
13
  - "expand the project with a new feature area"
@@ -19,9 +18,9 @@ metadata:
19
18
 
20
19
  # Pi-plan — Define and Expand Project Epics
21
20
 
22
- This skill is a literal-directory-name duplicate of `skills/pi-plan/`. It exists so that `/j-pi-plan` (and `j.j-pi-plan`) give a guaranteed-unshadowed way to reach the same flow as `/pi-plan`, even if a host tool's own built-in command of the same name would otherwise shadow or override the bare `/pi-plan` alias (Claude Code's native skill resolution is a literal-string, directory-name-based match — see `docs/skill-authoring.md`'s "Invocation Convention").
21
+ `skills/j-pi-plan/` is the **canonical, hand-edited** directory for this skill, per CLAUDE.md's "The Canonical Naming Contract" (the `E50` reopening of 2026-09-09, which promoted `skills/j-pi-plan/` from generated twin to sole canonical form). The `j-` prefix is there for collision safety — a real directory under a distinct name, so a host tool shipping its own same-named built-in command cannot shadow it (Claude Code's native skill resolution is a literal-string, directory-name-based match; see `docs/skill-authoring.md`'s "Invocation Convention").
23
22
 
24
- This file is generated/synced by `scripts/generate-j-alias.sh pi-plan` from `skills/pi-plan/SKILL.md` — do not hand-edit it; re-run the generator instead to pick up source changes.
23
+ > ⚠️ **`scripts/generate-j-alias.sh` was retired by `E50_S14` and no longer exists — there is nothing to run.** This file was previously generated from a bare `skills/pi-plan/SKILL.md` source; `E50_S15` deleted that directory. This file is now the sole canonical, hand-edited source for this skill — edit it directly.
25
24
 
26
25
  ## When to use this skill
27
26
 
@@ -1,13 +1,12 @@
1
1
  ---
2
2
  name: j.proceed
3
- description: Polyfill alias of the proceed skill under a collision-safe directory name. Identical behavior to /proceed — Review project progress by checking epics and stories, optionally consulting PROJECT_SUMMARY.md and WARP.md, then continue executing the project plan. Use when the bare /proceed form is shadowed by another tool's own built-in command of the same name.
3
+ description: Review project progress by checking epics and stories, optionally consulting PROJECT_SUMMARY.md and WARP.md, then continue executing the project plan.
4
4
  keywords:
5
5
  - proceed
6
6
  - review progress
7
7
  - check epics
8
8
  - continue executing
9
9
  - j-proceed
10
- - polyfill
11
10
  examples:
12
11
  - "proceed with the plan"
13
12
  - "review progress and continue"
@@ -18,9 +17,9 @@ metadata:
18
17
 
19
18
  # Proceed — Resume Project Execution
20
19
 
21
- This skill is a literal-directory-name duplicate of `skills/proceed/`. It exists so that `/j-proceed` (and `j.j-proceed`) give a guaranteed-unshadowed way to reach the same flow as `/proceed`, even if a host tool's own built-in command of the same name would otherwise shadow or override the bare `/proceed` alias (Claude Code's native skill resolution is a literal-string, directory-name-based match — see `docs/skill-authoring.md`'s "Invocation Convention").
20
+ `skills/j-proceed/` is the **canonical, hand-edited** directory for this skill, per CLAUDE.md's "The Canonical Naming Contract" (the `E50` reopening of 2026-09-09, which promoted `skills/j-proceed/` from generated twin to sole canonical form). The `j-` prefix is there for collision safety — a real directory under a distinct name, so a host tool shipping its own same-named built-in command cannot shadow it (Claude Code's native skill resolution is a literal-string, directory-name-based match; see `docs/skill-authoring.md`'s "Invocation Convention").
22
21
 
23
- This file is generated/synced by `scripts/generate-j-alias.sh proceed` from `skills/proceed/SKILL.md` — do not hand-edit it; re-run the generator instead to pick up source changes.
22
+ > ⚠️ **`scripts/generate-j-alias.sh` was retired by `E50_S14` and no longer exists — there is nothing to run.** This file was previously generated from a bare `skills/proceed/SKILL.md` source; `E50_S15` deleted that directory. This file is now the sole canonical, hand-edited source for this skill — edit it directly.
24
23
 
25
24
  ## Instructions
26
25
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: j.publish
3
- description: Polyfill alias of the publish skill under a collision-safe directory name. Identical behavior to /publish — Configure, validate, and orchestrate scaffolded release workflows through a single `/publish` entry point with bounded sub-commands. Use when the bare /publish form is shadowed by another tool's own built-in command of the same name.
3
+ description: Configure, validate, and orchestrate scaffolded release workflows through a single `/publish` entry point with bounded sub-commands.
4
4
  keywords:
5
5
  - publish
6
6
  - deploy
@@ -12,7 +12,6 @@ keywords:
12
12
  - staged publishing
13
13
  - stage
14
14
  - j-publish
15
- - polyfill
16
15
  examples:
17
16
  - "publish setup --target staging-appstore"
18
17
  - "publish setup --type mobile-ios"
@@ -42,9 +41,9 @@ metadata:
42
41
 
43
42
  # Publish — Deployment Pipeline Orchestrator
44
43
 
45
- This skill is a literal-directory-name duplicate of `skills/publish/`. It exists so that `/j-publish` (and `j.j-publish`) give a guaranteed-unshadowed way to reach the same flow as `/publish`, even if a host tool's own built-in command of the same name would otherwise shadow or override the bare `/publish` alias (Claude Code's native skill resolution is a literal-string, directory-name-based match — see `docs/skill-authoring.md`'s "Invocation Convention").
44
+ `skills/j-publish/` is the **canonical, hand-edited** directory for this skill, per CLAUDE.md's "The Canonical Naming Contract" (the `E50` reopening of 2026-09-09, which promoted `skills/j-publish/` from generated twin to sole canonical form). The `j-` prefix is there for collision safety — a real directory under a distinct name, so a host tool shipping its own same-named built-in command cannot shadow it (Claude Code's native skill resolution is a literal-string, directory-name-based match; see `docs/skill-authoring.md`'s "Invocation Convention").
46
45
 
47
- This file is generated/synced by `scripts/generate-j-alias.sh publish` from `skills/publish/SKILL.md` — do not hand-edit it; re-run the generator instead to pick up source changes.
46
+ > ⚠️ **`scripts/generate-j-alias.sh` was retired by `E50_S14` and no longer exists — there is nothing to run.** This file was previously generated from a bare `skills/publish/SKILL.md` source; `E50_S15` deleted that directory. This file is now the sole canonical, hand-edited source for this skill — edit it directly.
48
47
 
49
48
  `/publish` is the single entry point for release workflows in this repository. It wires configuration validation, setup, gated deployment, release-note drafting, and ledger history into one end-to-end flow, and dispatches the final publish step to a per-type adapter.
50
49
 
@@ -292,7 +292,7 @@ run_command_capture() {
292
292
  local command="$1"
293
293
  LAST_GATE_COMMAND="$command"
294
294
  set +e
295
- RUN_OUTPUT="$(bash -lc "$command" 2>&1)"
295
+ RUN_OUTPUT="$(bash -c "$command" 2>&1)"
296
296
  RUN_STATUS=$?
297
297
  set -e
298
298
  }
@@ -1,19 +1,18 @@
1
1
  ---
2
2
  name: j.reconcile
3
- description: Polyfill alias of the reconcile skill under a collision-safe directory name. Identical behavior to /reconcile — Reconcile the scrum board with actual implementation state. Cross-checks every task's board status against git history and worktrees, merges orphaned worktree branches, demotes unimplemented "Done" items, promotes secretly-implemented items, flags code with no board provenance and offers /uncharted segment for it, and cleans stale entries from todo.md. Use when the board feels out of sync, after a big merge session, when tasks were completed outside the normal workflow, or when todo.md has grown stale. Trigger on phrases like "sync the board", "clean up the board", "reconcile", "board is out of date", "todo is stale", or "check what's really done". Use when the bare /reconcile form is shadowed by another tool's own built-in command of the same name.
3
+ description: Reconcile the scrum board with actual implementation state. Cross-checks every task's board status against git history and worktrees, merges orphaned worktree branches, demotes unimplemented "Done" items, promotes secretly-implemented items, flags code with no board provenance and offers /uncharted segment for it, and cleans stale entries from todo.md. Use when the board feels out of sync, after a big merge session, when tasks were completed outside the normal workflow, or when todo.md has grown stale. Trigger on phrases like "sync the board", "clean up the board", "reconcile", "board is out of date", "todo is stale", or "check what's really done".
4
4
  metadata:
5
5
  prefered_agent: scrum-master
6
6
  output_types: id_list
7
7
  keywords:
8
8
  - j-reconcile
9
- - polyfill
10
9
  ---
11
10
 
12
11
  # Reconcile — Board ↔ Code Synchronisation
13
12
 
14
- This skill is a literal-directory-name duplicate of `skills/reconcile/`. It exists so that `/j-reconcile` (and `j.j-reconcile`) give a guaranteed-unshadowed way to reach the same flow as `/reconcile`, even if a host tool's own built-in command of the same name would otherwise shadow or override the bare `/reconcile` alias (Claude Code's native skill resolution is a literal-string, directory-name-based match — see `docs/skill-authoring.md`'s "Invocation Convention").
13
+ `skills/j-reconcile/` is the **canonical, hand-edited** directory for this skill, per CLAUDE.md's "The Canonical Naming Contract" (the `E50` reopening of 2026-09-09, which promoted `skills/j-reconcile/` from generated twin to sole canonical form). The `j-` prefix is there for collision safety — a real directory under a distinct name, so a host tool shipping its own same-named built-in command cannot shadow it (Claude Code's native skill resolution is a literal-string, directory-name-based match; see `docs/skill-authoring.md`'s "Invocation Convention").
15
14
 
16
- This file is generated/synced by `scripts/generate-j-alias.sh reconcile` from `skills/reconcile/SKILL.md` — do not hand-edit it; re-run the generator instead to pick up source changes.
15
+ > ⚠️ **`scripts/generate-j-alias.sh` was retired by `E50_S14` and no longer exists — there is nothing to run.** This file was previously generated from a bare `skills/reconcile/SKILL.md` source; `E50_S15` deleted that directory. This file is now the sole canonical, hand-edited source for this skill — edit it directly.
17
16
 
18
17
  Walks the full board (epics → stories → tasks), verifies each item's status against what actually exists in git, and fixes any drift. Also cleans `project/todo.md` of entries that are already done. Then runs the same check in reverse — code that exists with no board item and no EST-tagged commit behind it — and offers `/uncharted segment` for what it finds.
19
18
 
@@ -136,7 +135,41 @@ in-scope tasks when scoped) whose status is **not** a completed status (Pending,
136
135
  2. **Check documentation artefacts** as in phase 2.
137
136
  3. **Spot-check acceptance criteria** against the codebase.
138
137
 
139
- If implementation **is confirmed**:
138
+ Before treating a matching commit as grounds to promote, run two more checks. These exist because
139
+ a commit referencing a task ID is evidence the code was *touched*, not evidence it is *finished* —
140
+ a separate, still-running `/do` pipeline for this exact task may have a real fix sitting unmerged
141
+ in a worktree while an earlier, incomplete commit already landed on the branch this `/reconcile`
142
+ pass is reading. This is the exact race documented in
143
+ `project/rapports/problems/E40_S01_T05-premature-main-reconcile-vs-worktree-fix.md` — a `/reconcile`
144
+ pass promoted a task to `Passed`/`Done` from a matching commit alone while a fallback developer/tester
145
+ pipeline for that same task still had its bugfix unmerged on a worktree branch.
146
+
147
+ 4. **Check for an active concurrency-slot holder** — glob `project/queue/concurrency-slots-*.json`
148
+ (there can be several; one per orchestrating session, per `skills/j-do/SKILL.md`'s
149
+ `### 4.4. Developer Concurrency Slot Enforcement`). For each file found, check both
150
+ `.developer.holders` and `.tester.holders` for a key matching this task's id (`E##_S##_T##`) —
151
+ or, if this task belongs to a story-bundle dispatch, the containing story's id (`E##_S##`),
152
+ since a bundle acquires one shared slot keyed to the story id rather than one per task (`### 1.5`
153
+ step 3 of that skill). A matching key means a developer or tester subagent for this exact item is
154
+ (or very recently was) live in another session.
155
+ 5. **Check for an unmerged worktree or branch** — run `git worktree list` and `git branch --all`,
156
+ and look for an entry matching this task's `<E##_S##_T##-short-slug>` naming convention
157
+ (`skills/j-do/SKILL.md`'s worktree-naming convention, e.g. its Light Execution Path and Fallback
158
+ to Full Task-Scope Pipeline sections) that has not yet been merged into the branch this
159
+ `/reconcile` run is executing against. A match means real work for this task exists on a branch
160
+ this reconcile pass hasn't accounted for yet.
161
+
162
+ If **either** check 4 or 5 matches, skip promotion for this task:
163
+ - Leave the task's status exactly as it is now — do not touch `date_started`, `date_completed`, or
164
+ its `project/todo.md` entry.
165
+ - Do **not** merge the branch/worktree found in check 5 yourself — that is a live pipeline's own
166
+ work-in-progress, not an orphaned branch like phase 2's merge case.
167
+ - Report it in the reconcile report as **"likely still in-flight — skipped"** (see
168
+ `assets/report_format.md`'s "⏳ IN-FLIGHT — SKIPPED" section) — not silently promoted, and not
169
+ silently left unmentioned.
170
+ - Continue to the next task in Phase 3 — this is a per-task skip, not a phase abort.
171
+
172
+ If implementation **is confirmed** and **neither** check 4 nor 5 matched:
140
173
  - Update the task's status to **Passed** in its board file.
141
174
  - Set `date_completed` to today (ISO 8601).
142
175
  - If the task is listed in `project/todo.md`, **comment it out** by wrapping the line:
@@ -18,6 +18,10 @@ Scope: <resolved scope — see forms below>
18
18
  ⬆️ PROMOTED (were incomplete → now Passed)
19
19
  🔧 E##_S##_T## · <Task Title> — commits found, acceptance criteria met
20
20
 
21
+ ⏳ IN-FLIGHT — SKIPPED (implementation confirmed by commit, but not promoted — active work appears ongoing)
22
+ 🔧 E##_S##_T## · <Task Title> — concurrency-slot holder found in <concurrency-slots-file>
23
+ 🔧 E##_S##_T## · <Task Title> — unmerged branch <branch-name>
24
+
21
25
  🔄 ROLL-UP CHANGES
22
26
  📖 E##_S## · <Story Title> — <old status> → <new status>
23
27
  📦 E## · <Epic Title> — <old status> → <new status>
@@ -51,6 +55,13 @@ Scope: <resolved scope — see forms below>
51
55
  own epics/stories/tasks only — not the whole board's.
52
56
  - Omit any section that has zero items (e.g. if nothing was demoted, skip the DEMOTED block entirely).
53
57
  - The MERGED section should include the branch name that was merged.
58
+ - The IN-FLIGHT — SKIPPED section is distinct from both PROMOTED and the ordinary "implementation
59
+ not confirmed, no action" case (which is never reported at all): it means Phase 3 found a
60
+ matching commit (implementation confirmed) but withheld promotion because an active
61
+ concurrency-slot holder or an unmerged matching worktree/branch was also found — see
62
+ `/reconcile`'s Phase 3. Name the specific reason found (the concurrency-slots file, or the
63
+ branch/worktree name) so the report is checkable, not just asserted. Omit this section entirely
64
+ when no task was skipped for this reason.
54
65
  - The TODO CLEANUP section is always shown if `project/todo.md` existed at the start, even if zero changes were made (in that case show all counts as 0).
55
66
  - If `project/todo.md` did not exist, omit the TODO CLEANUP section.
56
67
  - The DOD GAPS section is omitted if no completed stories have unchecked DoD checkboxes.
@@ -143,7 +143,7 @@
143
143
  # --board-dir <dir> Board directory to consult.
144
144
  # Default: <repo-root>/project/board
145
145
  # --resolver <path> Path to resolve-segment-target.sh.
146
- # Default: ../../uncharted/scripts/resolve-segment-target.sh
146
+ # Default: ../../j-uncharted/scripts/resolve-segment-target.sh
147
147
  # --exclude <glob> Additional exclusion, matched against the repo-relative
148
148
  # path with shell-glob semantics. Repeatable.
149
149
  # --limit N Cap on files listed per group. Default 10. 0 = unlimited.
@@ -292,7 +292,7 @@ REPO_ROOT=$(cd -- "$REPO_ROOT" && pwd -P)
292
292
  [ -n "$BOARD_DIR" ] || BOARD_DIR="$REPO_ROOT/project/board"
293
293
 
294
294
  # --- the borrowed linkage check -------------------------------------------------------------
295
- [ -n "$RESOLVER" ] || RESOLVER="$SCRIPT_DIR/../../uncharted/scripts/resolve-segment-target.sh"
295
+ [ -n "$RESOLVER" ] || RESOLVER="$SCRIPT_DIR/../../j-uncharted/scripts/resolve-segment-target.sh"
296
296
  [ -f "$RESOLVER" ] || die 4 "board-linkage checker not found: $RESOLVER
297
297
  This script deliberately has no fallback implementation -- see the header. Restore
298
298
  skills/j-uncharted/scripts/resolve-segment-target.sh or pass --resolver <path>."
@@ -1,13 +1,12 @@
1
1
  ---
2
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.
3
+ description: Sync the current (or specified) branch with origin by rebasing local commits on top of the latest upstream state.
4
4
  keywords:
5
5
  - "sync branch"
6
6
  - "rebase origin"
7
7
  - "reconcile origin"
8
8
  - "pull rebase"
9
9
  - j-reconcile-origin
10
- - polyfill
11
10
  examples:
12
11
  - "sync my branch with origin"
13
12
  - "rebase local commits on top of origin"
@@ -17,9 +16,9 @@ examples:
17
16
 
18
17
  # Reconcile Origin
19
18
 
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").
19
+ `skills/j-reconcile-origin/` is the **canonical, hand-edited** directory for this skill, per CLAUDE.md's "The Canonical Naming Contract" (the `E50` reopening of 2026-09-09, which promoted `skills/j-reconcile-origin/` from generated twin to sole canonical form). The `j-` prefix is there for collision safety — a real directory under a distinct name, so a host tool shipping its own same-named built-in command cannot shadow it (Claude Code's native skill resolution is a literal-string, directory-name-based match; see `docs/skill-authoring.md`'s "Invocation Convention").
21
20
 
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.
21
+ > ⚠️ **`scripts/generate-j-alias.sh` was retired by `E50_S14` and no longer exists — there is nothing to run.** This file was previously generated from a bare `skills/reconcile-origin/SKILL.md` source; `E50_S15` deleted that directory. This file is now the sole canonical, hand-edited source for this skill — edit it directly.
23
22
 
24
23
  Use this skill to rebase local work on top of the latest `origin/<branch>` state without re-implementing git logic inline.
25
24
 
@@ -1,6 +1,6 @@
1
1
  ---
2
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.
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.
4
4
  keywords:
5
5
  - redo
6
6
  - rework
@@ -8,7 +8,6 @@ keywords:
8
8
  - revisit
9
9
  - redo task
10
10
  - j-redo
11
- - polyfill
12
11
  examples:
13
12
  - "redo the login implementation"
14
13
  - "rewrite story E02_S01"
@@ -19,9 +18,9 @@ metadata:
19
18
 
20
19
  # Redo — Rework a Previous Implementation
21
20
 
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").
21
+ `skills/j-redo/` is the **canonical, hand-edited** directory for this skill, per CLAUDE.md's "The Canonical Naming Contract" (the `E50` reopening of 2026-09-09, which promoted `skills/j-redo/` from generated twin to sole canonical form). The `j-` prefix is there for collision safety — a real directory under a distinct name, so a host tool shipping its own same-named built-in command cannot shadow it (Claude Code's native skill resolution is a literal-string, directory-name-based match; see `docs/skill-authoring.md`'s "Invocation Convention").
23
22
 
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.
23
+ > ⚠️ **`scripts/generate-j-alias.sh` was retired by `E50_S14` and no longer exists — there is nothing to run.** This file was previously generated from a bare `skills/redo/SKILL.md` source; `E50_S15` deleted that directory. This file is now the sole canonical, hand-edited source for this skill — edit it directly.
25
24
 
26
25
  ## Input Format
27
26