@jenga-ai/agent 2.0.0 → 3.1.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 +82 -243
- package/agents/developer.md +5 -5
- package/agents/scrum-master.md +23 -23
- package/agents/tester.md +5 -5
- package/bin/jenga.js +10 -0
- package/hooks/copilot_session_end.sh +7 -3
- package/hooks/prompt_router_helper.js +17 -5
- package/lib/commands/doctor.js +351 -0
- package/lib/commands/init.js +16 -0
- package/lib/generate-copilot-hooks.js +116 -0
- package/lib/generate-skill-allow-list.js +9 -3
- package/lib/legacy-shipped-paths.json +336 -0
- package/lib/postinstall-manifest.js +469 -0
- package/lib/skill-allow-list.json +2 -3
- package/package.json +16 -25
- package/scripts/apply-j-prefix.sh +25 -12
- package/scripts/generate-j-alias.sh +333 -0
- package/scripts/generate-legacy-shipped-paths.js +248 -0
- package/scripts/postinstall.js +205 -2
- package/scripts/verify-legacy-seed-reconcile.sh +254 -0
- package/scripts/verify-postinstall-reconcile.sh +392 -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 +17 -10
- package/skills/{close-story → j-close-story}/scripts/check-privatized.sh +2 -2
- 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 +12 -5
- package/skills/{doc → j-doc}/README.md +5 -5
- package/skills/{doc → j-doc}/SKILL.md +15 -8
- package/skills/{doc → j-doc}/authoring-notes.md +1 -1
- 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/j-init/SKILL.md +2 -2
- 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 +3 -3
- 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_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/{todo → j-todo}/SKILL.md +10 -3
- package/skills/{todo → j-todo}/assets/todo_handoff_template.md +1 -1
- package/skills/{todo → j-todo}/scripts/add_trivial_task.sh +3 -3
- package/skills/{todo → j-todo}/scripts/update_story_tasks.py +2 -2
- 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-permission-level/SKILL.md +1 -1
- package/templates/SCRUM_BOARD_SCHEMA.md +1 -1
- package/templates/agent-context.md.tpl +10 -10
- package/templates/copilot-instructions.md.tpl +89 -19
- package/skills/continue/SKILL.md +0 -29
- package/skills/error/SKILL.md +0 -29
- package/skills/examplify/SKILL.md +0 -42
- package/skills/init/SKILL.md +0 -155
- package/skills/init/assets/scope-thresholds_template.json +0 -7
- package/skills/init/assets/strategy_stub_template.md +0 -38
- package/skills/init/assets/workflow_template.json +0 -30
- package/skills/init/scripts/apply-project-visibility.sh +0 -176
- package/skills/init/scripts/detect-existing-codebase.sh +0 -166
- package/skills/init/scripts/init.sh +0 -116
- package/skills/jbp/SKILL.md +0 -25
- package/skills/lgtm/SKILL.md +0 -21
- package/skills/skillify/assets/init-new/assets/.gitignore_template +0 -15
- package/skills/skillify/assets/init-new/assets/PROJECT_SUMMARY_template.md +0 -13
- package/skills/skillify/assets/init-new/assets/directory_structure.txt +0 -14
- package/skills/skillify/assets/init-new/assets/test-config_template.json +0 -4
- 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 → j-doc}/scripts/resolve_last_update.py +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/{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_ci_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/{init → j-skillify/assets/init-new}/assets/.gitignore_template +0 -0
- /package/skills/{init → j-skillify/assets/init-new}/assets/PROJECT_SUMMARY_template.md +0 -0
- /package/skills/{init → j-skillify/assets/init-new}/assets/directory_structure.txt +0 -0
- /package/skills/{init → 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
|
@@ -379,13 +379,18 @@ if [[ -z "${STAGE_ID}" ]] && printf '%s' "${STAGE_OUTPUT}" | jq -e . >/dev/null
|
|
|
379
379
|
STAGE_ID="$(printf '%s' "${STAGE_OUTPUT}" | jq -r '.id // .stageId // .stage_id // empty' 2>/dev/null || true)"
|
|
380
380
|
fi
|
|
381
381
|
|
|
382
|
-
# Attempt 3: fall back to `npm stage list <package
|
|
383
|
-
#
|
|
382
|
+
# Attempt 3: fall back to `npm stage list <package> --json` and extract the
|
|
383
|
+
# most recent matching entry's id. `npm stage list` rejects a version-
|
|
384
|
+
# qualified spec ("Version specifiers are not supported for listing staged
|
|
385
|
+
# packages") — it only accepts a bare package name — so this must pass
|
|
386
|
+
# PACKAGE_NAME, never PACKAGE_SPEC; the version match happens client-side via
|
|
387
|
+
# jq below instead (confirmed live on jenga-npm during v1.3.0 staging on
|
|
388
|
+
# 2026-09-01, project/todo.md).
|
|
384
389
|
if [[ -z "${STAGE_ID}" ]]; then
|
|
385
390
|
log_warn "could not parse a stage id directly from stage output; falling back to 'npm stage list --json'..."
|
|
386
391
|
|
|
387
392
|
LIST_STATUS=0
|
|
388
|
-
LIST_OUTPUT="$(npm stage list "${
|
|
393
|
+
LIST_OUTPUT="$(npm stage list "${PACKAGE_NAME}" --json 2>&1)" || LIST_STATUS=$?
|
|
389
394
|
|
|
390
395
|
if [[ ${LIST_STATUS} -ne 0 ]]; then
|
|
391
396
|
printf '%s\n' "${LIST_OUTPUT}" >&2
|
|
@@ -405,7 +410,7 @@ if [[ -z "${STAGE_ID}" ]]; then
|
|
|
405
410
|
fi
|
|
406
411
|
|
|
407
412
|
if [[ -z "${STAGE_ID}" ]]; then
|
|
408
|
-
printf 'npm stage pipeline: staged successfully but the stage id could not be captured from either the direct output or "npm stage list --json". Run "npm stage list %s --json" manually to recover it.\n' "${
|
|
413
|
+
printf 'npm stage pipeline: staged successfully but the stage id could not be captured from either the direct output or "npm stage list --json". Run "npm stage list %s --json" manually to recover it (bare package name — a version-qualified spec is rejected by npm).\n' "${PACKAGE_NAME}" >&2
|
|
409
414
|
exit "${EXIT_STAGE_FAILURE}"
|
|
410
415
|
fi
|
|
411
416
|
|
|
@@ -463,16 +463,16 @@ print_manual_steps() {
|
|
|
463
463
|
local adapter_doc
|
|
464
464
|
case "$TARGET_TYPE" in
|
|
465
465
|
droplet)
|
|
466
|
-
adapter_doc="$PUBLISH_REPO_ROOT/skills/publish/adapters/droplet.md"
|
|
466
|
+
adapter_doc="$PUBLISH_REPO_ROOT/skills/j-publish/adapters/droplet.md"
|
|
467
467
|
;;
|
|
468
468
|
npm)
|
|
469
|
-
adapter_doc="$PUBLISH_REPO_ROOT/skills/publish/adapters/npm.md"
|
|
469
|
+
adapter_doc="$PUBLISH_REPO_ROOT/skills/j-publish/adapters/npm.md"
|
|
470
470
|
;;
|
|
471
471
|
npm-ci)
|
|
472
|
-
adapter_doc="$PUBLISH_REPO_ROOT/skills/publish/adapters/npm-ci.md"
|
|
472
|
+
adapter_doc="$PUBLISH_REPO_ROOT/skills/j-publish/adapters/npm-ci.md"
|
|
473
473
|
;;
|
|
474
474
|
mobile-ios)
|
|
475
|
-
adapter_doc="$PUBLISH_REPO_ROOT/skills/publish/adapters/mobile-ios.md"
|
|
475
|
+
adapter_doc="$PUBLISH_REPO_ROOT/skills/j-publish/adapters/mobile-ios.md"
|
|
476
476
|
;;
|
|
477
477
|
*)
|
|
478
478
|
return 0
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
# Exit codes:
|
|
14
14
|
# 0 all four preflight checks passed
|
|
15
15
|
# 4 one of the checks failed (config/environment invalid), matching
|
|
16
|
-
# skills/publish/assets/ci-contract.md
|
|
16
|
+
# skills/j-publish/assets/ci-contract.md
|
|
17
17
|
#
|
|
18
18
|
# Security note: the registry probe (check 4) never prints npm's raw stdout/stderr. Only
|
|
19
19
|
# messages composed by this script are emitted, so nothing npm writes — which could in
|
|
@@ -261,7 +261,7 @@ Once all answers have been collected, perform the following steps in order:
|
|
|
261
261
|
```
|
|
262
262
|
|
|
263
263
|
4. **Validate against the schema.** Run
|
|
264
|
-
`bash skills/publish/scripts/validate_config.sh <path-to-publish.json>`
|
|
264
|
+
`bash skills/j-publish/scripts/validate_config.sh <path-to-publish.json>`
|
|
265
265
|
before saving. If validation fails, report the error and abort — do not
|
|
266
266
|
write a broken `publish.json`.
|
|
267
267
|
|
|
@@ -110,7 +110,7 @@ Optional short string such as `exampleco`.
|
|
|
110
110
|
Maps to: `targets[].secrets.app_store_connect_api_key_id`
|
|
111
111
|
|
|
112
112
|
Enter the environment-variable name that will supply the App Store Connect API key identifier.
|
|
113
|
-
See `skills/publish/assets/secrets-guide.md` before answering.
|
|
113
|
+
See `skills/j-publish/assets/secrets-guide.md` before answering.
|
|
114
114
|
|
|
115
115
|
## Expected format:
|
|
116
116
|
|
|
@@ -213,7 +213,7 @@ Once all six answers have been collected, perform the following steps in order:
|
|
|
213
213
|
- Do not include a `secrets` block — this adapter uses OIDC and no token
|
|
214
214
|
is required.
|
|
215
215
|
4. **Validate against the schema.** Run
|
|
216
|
-
`skills/publish/scripts/validate_config.sh` before saving. If validation
|
|
216
|
+
`skills/j-publish/scripts/validate_config.sh` before saving. If validation
|
|
217
217
|
fails, report the error and abort — do not write a broken `publish.json`.
|
|
218
218
|
5. **Report to the user.** Print a short summary confirming (a) the target
|
|
219
219
|
block written, (b) the `github_repo` value, and (c) the `workflow_path`
|
|
@@ -97,7 +97,7 @@ deploy).
|
|
|
97
97
|
## Prerequisite: NPM_TOKEN
|
|
98
98
|
|
|
99
99
|
The npm pipeline reads the auth token from the `NPM_TOKEN` environment
|
|
100
|
-
variable at publish time (`skills/publish/adapters/npm.md` defines this
|
|
100
|
+
variable at publish time (`skills/j-publish/adapters/npm.md` defines this
|
|
101
101
|
contract). The wizard does not collect the token value — that would be
|
|
102
102
|
unsafe. Instead, at the end of the wizard, write the following instructions
|
|
103
103
|
file so the user knows exactly what to configure:
|
|
@@ -1,12 +1,19 @@
|
|
|
1
1
|
---
|
|
2
|
-
name: j
|
|
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".
|
|
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.
|
|
4
4
|
metadata:
|
|
5
5
|
prefered_agent: scrum-master
|
|
6
|
+
keywords:
|
|
7
|
+
- j-reconcile
|
|
8
|
+
- polyfill
|
|
6
9
|
---
|
|
7
10
|
|
|
8
11
|
# Reconcile — Board ↔ Code Synchronisation
|
|
9
12
|
|
|
13
|
+
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").
|
|
14
|
+
|
|
15
|
+
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.
|
|
16
|
+
|
|
10
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.
|
|
11
18
|
|
|
12
19
|
## Scope argument
|
|
@@ -35,7 +42,7 @@ Omitting the argument entirely keeps today's full-board behavior completely unch
|
|
|
35
42
|
phase below.
|
|
36
43
|
|
|
37
44
|
Scope resolution itself is deterministic and handled entirely by
|
|
38
|
-
`skills/reconcile/scripts/resolve-reconcile-scope.sh` (see Phase 0 immediately below) — this skill
|
|
45
|
+
`skills/j-reconcile/scripts/resolve-reconcile-scope.sh` (see Phase 0 immediately below) — this skill
|
|
39
46
|
only interprets that script's output; it does not re-parse scope arguments or re-derive range
|
|
40
47
|
expansion.
|
|
41
48
|
|
|
@@ -50,7 +57,7 @@ Before touching anything else, resolve the scope argument (if any — see "Scope
|
|
|
50
57
|
into a concrete set of epic/story/task ids:
|
|
51
58
|
|
|
52
59
|
```bash
|
|
53
|
-
skills/reconcile/scripts/resolve-reconcile-scope.sh <scope-argument>
|
|
60
|
+
skills/j-reconcile/scripts/resolve-reconcile-scope.sh <scope-argument>
|
|
54
61
|
```
|
|
55
62
|
|
|
56
63
|
Omit `<scope-argument>` entirely for an unscoped, full-board run (the script's own no-argument
|
|
@@ -176,7 +183,7 @@ Phases 2 and 3 ask "does this board item exist in the code?". This phase asks th
|
|
|
176
183
|
Run:
|
|
177
184
|
|
|
178
185
|
```bash
|
|
179
|
-
skills/reconcile/scripts/detect-unlinked-code.sh
|
|
186
|
+
skills/j-reconcile/scripts/detect-unlinked-code.sh
|
|
180
187
|
```
|
|
181
188
|
|
|
182
189
|
It emits a single JSON object and exits `0` whether or not it finds anything; read
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env bash
|
|
2
2
|
# ---------------------------------------------------------------------------
|
|
3
|
-
# skills/reconcile/scripts/detect-unlinked-code.sh
|
|
3
|
+
# skills/j-reconcile/scripts/detect-unlinked-code.sh
|
|
4
4
|
#
|
|
5
5
|
# The inverse half of `/reconcile`. The normal pass asks "does this board item
|
|
6
6
|
# exist in the code?"; this asks "does this code exist on the board?" and finds
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
# It scans, it classifies, it reports. It NEVER writes anything, never touches
|
|
32
32
|
# the board, and never invokes `/uncharted`. Deciding which groups are worth
|
|
33
33
|
# investigating and presenting the offer is agent judgement and lives in
|
|
34
|
-
# `skills/reconcile/SKILL.md`.
|
|
34
|
+
# `skills/j-reconcile/SKILL.md`.
|
|
35
35
|
#
|
|
36
36
|
# ---------------------------------------------------------------------------
|
|
37
37
|
# SIGNAL A IS BORROWED, NOT REBUILT
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
#!/usr/bin/env bash
|
|
2
2
|
# ---------------------------------------------------------------------------
|
|
3
|
-
# skills/reconcile/scripts/resolve-reconcile-scope.sh
|
|
3
|
+
# skills/j-reconcile/scripts/resolve-reconcile-scope.sh
|
|
4
4
|
#
|
|
5
5
|
# Deterministic scope-argument resolver backing `/reconcile`'s new scope
|
|
6
6
|
# argument (story E17_S07). This script owns ALL scope-argument parsing and
|
|
7
|
-
# id-range expansion for `/reconcile` — `skills/reconcile/SKILL.md` (wired in
|
|
7
|
+
# id-range expansion for `/reconcile` — `skills/j-reconcile/SKILL.md` (wired in
|
|
8
8
|
# the sibling task E17_S07_T02) only interprets this script's structured
|
|
9
9
|
# stdout output; it must not re-derive any parsing or resolution logic
|
|
10
10
|
# inline.
|
|
@@ -124,7 +124,7 @@
|
|
|
124
124
|
# "epic_ids": ["E12"],
|
|
125
125
|
# "story_ids": ["E12_S03", "E12_S04", "E12_S05"],
|
|
126
126
|
# "task_ids": ["E12_S03_T01", "..."],
|
|
127
|
-
# "owned_path_hints": ["skills/reconcile/", "..."]
|
|
127
|
+
# "owned_path_hints": ["skills/j-reconcile/", "..."]
|
|
128
128
|
# }
|
|
129
129
|
#
|
|
130
130
|
# scope_type "full" epic_ids/story_ids/task_ids are all EMPTY arrays.
|
|
@@ -1,19 +1,26 @@
|
|
|
1
1
|
---
|
|
2
|
-
name: j
|
|
3
|
-
description: Sync the current (or specified) branch with origin by rebasing local commits on top of the latest upstream state.
|
|
2
|
+
name: j.reconcile-origin
|
|
3
|
+
description: Polyfill alias of the reconcile-origin skill under a collision-safe directory name. Identical behavior to /reconcile-origin — Sync the current (or specified) branch with origin by rebasing local commits on top of the latest upstream state. Use when the bare /reconcile-origin form is shadowed by another tool's own built-in command of the same name.
|
|
4
4
|
keywords:
|
|
5
5
|
- "sync branch"
|
|
6
6
|
- "rebase origin"
|
|
7
7
|
- "reconcile origin"
|
|
8
8
|
- "pull rebase"
|
|
9
|
+
- j-reconcile-origin
|
|
10
|
+
- polyfill
|
|
9
11
|
examples:
|
|
10
12
|
- "sync my branch with origin"
|
|
11
13
|
- "rebase local commits on top of origin"
|
|
12
14
|
- "reconcile-origin feature/my-branch"
|
|
15
|
+
- "j-reconcile-origin"
|
|
13
16
|
---
|
|
14
17
|
|
|
15
18
|
# Reconcile Origin
|
|
16
19
|
|
|
20
|
+
This skill is a literal-directory-name duplicate of `skills/reconcile-origin/`. It exists so that `/j-reconcile-origin` (and `j.j-reconcile-origin`) give a guaranteed-unshadowed way to reach the same flow as `/reconcile-origin`, even if a host tool's own built-in command of the same name would otherwise shadow or override the bare `/reconcile-origin` alias (Claude Code's native skill resolution is a literal-string, directory-name-based match — see `docs/skill-authoring.md`'s "Invocation Convention").
|
|
21
|
+
|
|
22
|
+
This file is generated/synced by `scripts/generate-j-alias.sh reconcile-origin` from `skills/reconcile-origin/SKILL.md` — do not hand-edit it; re-run the generator instead to pick up source changes.
|
|
23
|
+
|
|
17
24
|
Use this skill to rebase local work on top of the latest `origin/<branch>` state without re-implementing git logic inline.
|
|
18
25
|
|
|
19
26
|
## Instructions
|
|
@@ -22,7 +29,7 @@ Use this skill to rebase local work on top of the latest `origin/<branch>` state
|
|
|
22
29
|
- If the user passed an argument, use that branch name.
|
|
23
30
|
- Otherwise, use the current branch name.
|
|
24
31
|
|
|
25
|
-
2. Invoke `.agents/skills/reconcile-origin/scripts/reconcile-origin.sh [<branch>]` and capture stdout.
|
|
32
|
+
2. Invoke `.agents/skills/j-reconcile-origin/scripts/reconcile-origin.sh [<branch>]` and capture stdout.
|
|
26
33
|
- Do not run any inline git commands in this skill — all git work is handled by the script.
|
|
27
34
|
- The script handles dirty-worktree detection internally and returns `{"status":"error","code":"uncommitted_changes",...}` if the working tree is not clean.
|
|
28
35
|
|
|
@@ -38,7 +45,7 @@ Use this skill to rebase local work on top of the latest `origin/<branch>` state
|
|
|
38
45
|
2. Cancel and inspect the branch setup manually
|
|
39
46
|
3. Other (describe below)
|
|
40
47
|
|
|
41
|
-
- If the user chooses option 1, invoke `.agents/skills/reconcile-origin/scripts/reconcile-origin.sh <branch> --create-tracking`.
|
|
48
|
+
- If the user chooses option 1, invoke `.agents/skills/j-reconcile-origin/scripts/reconcile-origin.sh <branch> --create-tracking`.
|
|
42
49
|
- If `remote_exists` is `false`, explain that neither a local branch nor `origin/<branch>` was found and stop.
|
|
43
50
|
- `conflict`
|
|
44
51
|
- Present one structured conflict rapport per item in `conflicts`.
|
|
@@ -55,7 +62,7 @@ Use this skill to rebase local work on top of the latest `origin/<branch>` state
|
|
|
55
62
|
3. Handle it later — leave annotated conflict markers in the file and continue the scripted flow
|
|
56
63
|
4. Other (describe below)
|
|
57
64
|
|
|
58
|
-
- If the user chooses “Handle it later”, invoke `.agents/skills/reconcile-origin/scripts/reconcile-origin.sh <branch> --handle-later <file>` for the selected conflict file.
|
|
65
|
+
- If the user chooses “Handle it later”, invoke `.agents/skills/j-reconcile-origin/scripts/reconcile-origin.sh <branch> --handle-later <file>` for the selected conflict file.
|
|
59
66
|
- `handled_later`
|
|
60
67
|
- Confirm that the selected file was annotated for later resolution.
|
|
61
68
|
- Tell the user the conflict markers were intentionally preserved with a `# RECONCILE-ORIGIN CONFLICT:` note.
|
|
@@ -71,5 +78,5 @@ Use this skill to rebase local work on top of the latest `origin/<branch>` state
|
|
|
71
78
|
|
|
72
79
|
## Guard Rails
|
|
73
80
|
|
|
74
|
-
- All git work must go through `.agents/skills/reconcile-origin/scripts/reconcile-origin.sh`.
|
|
81
|
+
- All git work must go through `.agents/skills/j-reconcile-origin/scripts/reconcile-origin.sh`.
|
|
75
82
|
- Do not inline fetch, checkout, pull, merge, rebase, or status commands in this skill body.
|
|
@@ -1,21 +1,28 @@
|
|
|
1
1
|
---
|
|
2
|
-
name: j
|
|
3
|
-
description: Redo parts or entire previous implementations identified by a commit SHA or an Epic/Story number (e.g. E01, E02_S03). Expects an identifier and a description of what to redo and why. Use when the user wants to revisit, rework, or rewrite previously completed work, including updating all affected documentation.
|
|
2
|
+
name: j.redo
|
|
3
|
+
description: Polyfill alias of the redo skill under a collision-safe directory name. Identical behavior to /redo — Redo parts or entire previous implementations identified by a commit SHA or an Epic/Story number (e.g. E01, E02_S03). Expects an identifier and a description of what to redo and why. Use when the user wants to revisit, rework, or rewrite previously completed work, including updating all affected documentation. Use when the bare /redo form is shadowed by another tool's own built-in command of the same name.
|
|
4
4
|
keywords:
|
|
5
5
|
- redo
|
|
6
6
|
- rework
|
|
7
7
|
- rewrite
|
|
8
8
|
- revisit
|
|
9
9
|
- redo task
|
|
10
|
+
- j-redo
|
|
11
|
+
- polyfill
|
|
10
12
|
examples:
|
|
11
13
|
- "redo the login implementation"
|
|
12
14
|
- "rewrite story E02_S01"
|
|
15
|
+
- "j-redo"
|
|
13
16
|
metadata:
|
|
14
17
|
prefered_agent: scrum-master
|
|
15
18
|
---
|
|
16
19
|
|
|
17
20
|
# Redo — Rework a Previous Implementation
|
|
18
21
|
|
|
22
|
+
This skill is a literal-directory-name duplicate of `skills/redo/`. It exists so that `/j-redo` (and `j.j-redo`) give a guaranteed-unshadowed way to reach the same flow as `/redo`, even if a host tool's own built-in command of the same name would otherwise shadow or override the bare `/redo` alias (Claude Code's native skill resolution is a literal-string, directory-name-based match — see `docs/skill-authoring.md`'s "Invocation Convention").
|
|
23
|
+
|
|
24
|
+
This file is generated/synced by `scripts/generate-j-alias.sh redo` from `skills/redo/SKILL.md` — do not hand-edit it; re-run the generator instead to pick up source changes.
|
|
25
|
+
|
|
19
26
|
## Input Format
|
|
20
27
|
|
|
21
28
|
```
|
|
@@ -1,10 +1,17 @@
|
|
|
1
1
|
---
|
|
2
|
-
name: j
|
|
3
|
-
description: Refactor one or more existing skills into a cleaner, more maintainable structure — extracting hardcoded content into asset files, offloading deterministic steps into scripts, and reorganizing the skill body to reflect the leaner result. Use this whenever the user wants to clean up, improve, or restructure an existing skill, mentions that a skill has hardcoded content that could be templated, or asks to "skillify", "refactor", or "tidy up" a skill. Trigger even if the user just pastes a skill and says something like "can we make this better?".
|
|
2
|
+
name: j.skillify
|
|
3
|
+
description: Polyfill alias of the skillify skill under a collision-safe directory name. Identical behavior to /skillify — Refactor one or more existing skills into a cleaner, more maintainable structure — extracting hardcoded content into asset files, offloading deterministic steps into scripts, and reorganizing the skill body to reflect the leaner result. Use this whenever the user wants to clean up, improve, or restructure an existing skill, mentions that a skill has hardcoded content that could be templated, or asks to "skillify", "refactor", or "tidy up" a skill. Trigger even if the user just pastes a skill and says something like "can we make this better?". Use when the bare /skillify form is shadowed by another tool's own built-in command of the same name.
|
|
4
|
+
keywords:
|
|
5
|
+
- j-skillify
|
|
6
|
+
- polyfill
|
|
4
7
|
---
|
|
5
8
|
|
|
6
9
|
# Skillify — Refactor a Skill into a Cleaner Structure
|
|
7
10
|
|
|
11
|
+
This skill is a literal-directory-name duplicate of `skills/skillify/`. It exists so that `/j-skillify` (and `j.j-skillify`) give a guaranteed-unshadowed way to reach the same flow as `/skillify`, even if a host tool's own built-in command of the same name would otherwise shadow or override the bare `/skillify` alias (Claude Code's native skill resolution is a literal-string, directory-name-based match — see `docs/skill-authoring.md`'s "Invocation Convention").
|
|
12
|
+
|
|
13
|
+
This file is generated/synced by `scripts/generate-j-alias.sh skillify` from `skills/skillify/SKILL.md` — do not hand-edit it; re-run the generator instead to pick up source changes.
|
|
14
|
+
|
|
8
15
|
## What this skill does
|
|
9
16
|
|
|
10
17
|
Takes one or more existing skills and refactors them by:
|
|
@@ -65,4 +72,4 @@ The rewritten SKILL.md should:
|
|
|
65
72
|
- `assets/init-old/SKILL.md` — The init skill before refactoring (hardcoded heredocs, inline JSON, hardcoded directory list)
|
|
66
73
|
- `assets/init-new/SKILL.md` — The init skill after refactoring (all content in assets, steps delegated to `init.sh`)
|
|
67
74
|
|
|
68
|
-
Read these when you need a concrete example of the before/after pattern.
|
|
75
|
+
Read these when you need a concrete example of the before/after pattern.
|
|
@@ -1,21 +1,28 @@
|
|
|
1
1
|
---
|
|
2
|
-
name: j
|
|
3
|
-
description: Capture a diverging topic mid-conversation. Collects context and a mandatory origin, optionally runs /brainstorm for prerequisites, saves an /idea entry, and returns focus to the primary thread.
|
|
2
|
+
name: j.spinoff
|
|
3
|
+
description: Polyfill alias of the spinoff skill under a collision-safe directory name. Identical behavior to /spinoff — Capture a diverging topic mid-conversation. Collects context and a mandatory origin, optionally runs /brainstorm for prerequisites, saves an /idea entry, and returns focus to the primary thread. Use when the bare /spinoff form is shadowed by another tool's own built-in command of the same name.
|
|
4
4
|
keywords:
|
|
5
5
|
- spinoff
|
|
6
6
|
- diverge
|
|
7
7
|
- side topic
|
|
8
8
|
- capture topic
|
|
9
9
|
- new thread
|
|
10
|
+
- j-spinoff
|
|
11
|
+
- polyfill
|
|
10
12
|
examples:
|
|
11
13
|
- "let's spinoff this idea"
|
|
12
14
|
- "capture this as a separate thread"
|
|
15
|
+
- "j-spinoff"
|
|
13
16
|
metadata:
|
|
14
17
|
prefered_agent: scrum-master
|
|
15
18
|
---
|
|
16
19
|
|
|
17
20
|
# Spinoff — Capture a Diverging Topic
|
|
18
21
|
|
|
22
|
+
This skill is a literal-directory-name duplicate of `skills/spinoff/`. It exists so that `/j-spinoff` (and `j.j-spinoff`) give a guaranteed-unshadowed way to reach the same flow as `/spinoff`, even if a host tool's own built-in command of the same name would otherwise shadow or override the bare `/spinoff` alias (Claude Code's native skill resolution is a literal-string, directory-name-based match — see `docs/skill-authoring.md`'s "Invocation Convention").
|
|
23
|
+
|
|
24
|
+
This file is generated/synced by `scripts/generate-j-alias.sh spinoff` from `skills/spinoff/SKILL.md` — do not hand-edit it; re-run the generator instead to pick up source changes.
|
|
25
|
+
|
|
19
26
|
## Instructions
|
|
20
27
|
|
|
21
28
|
1. **Identify the diverging topic** — Ask the user to confirm or briefly describe the diverging topic.
|
|
@@ -1,19 +1,26 @@
|
|
|
1
1
|
---
|
|
2
|
-
name: j
|
|
3
|
-
description: Print a human-readable summary of the entire scrum board — all epics, stories, and tasks with their statuses — plus any open rapports and unprocessed queue triggers. Use when you want a quick overview of project state without reading raw files.
|
|
2
|
+
name: j.status
|
|
3
|
+
description: Polyfill alias of the status skill under a collision-safe directory name. Identical behavior to /status — Print a human-readable summary of the entire scrum board — all epics, stories, and tasks with their statuses — plus any open rapports and unprocessed queue triggers. Use when you want a quick overview of project state without reading raw files. Use when the bare /status form is shadowed by another tool's own built-in command of the same name.
|
|
4
4
|
keywords:
|
|
5
5
|
- status
|
|
6
6
|
- board summary
|
|
7
7
|
- overview
|
|
8
8
|
- project state
|
|
9
9
|
- what's done
|
|
10
|
+
- j-status
|
|
11
|
+
- polyfill
|
|
10
12
|
examples:
|
|
11
13
|
- "show me the project status"
|
|
12
14
|
- "what's the state of the board?"
|
|
15
|
+
- "j-status"
|
|
13
16
|
---
|
|
14
17
|
|
|
15
18
|
# Status — Board Overview
|
|
16
19
|
|
|
20
|
+
This skill is a literal-directory-name duplicate of `skills/status/`. It exists so that `/j-status` (and `j.j-status`) give a guaranteed-unshadowed way to reach the same flow as `/status`, even if a host tool's own built-in command of the same name would otherwise shadow or override the bare `/status` alias (Claude Code's native skill resolution is a literal-string, directory-name-based match — see `docs/skill-authoring.md`'s "Invocation Convention").
|
|
21
|
+
|
|
22
|
+
This file is generated/synced by `scripts/generate-j-alias.sh status` from `skills/status/SKILL.md` — do not hand-edit it; re-run the generator instead to pick up source changes.
|
|
23
|
+
|
|
17
24
|
## Instructions
|
|
18
25
|
|
|
19
26
|
1. **Read `project/configs/workflow.json`** to confirm board paths. Fall back to `project/board/` if the file does not exist.
|
|
@@ -1,21 +1,28 @@
|
|
|
1
1
|
---
|
|
2
|
-
name: j
|
|
3
|
-
description: Add missions to the project todo list (project/todo.md), optionally linking them to epics and stories. Loops until the user is done, then optionally executes the list.
|
|
2
|
+
name: j.todo
|
|
3
|
+
description: Polyfill alias of the todo skill under a collision-safe directory name. Identical behavior to /todo — Add missions to the project todo list (project/todo.md), optionally linking them to epics and stories. Loops until the user is done, then optionally executes the list. Use when the bare /todo form is shadowed by another tool's own built-in command of the same name.
|
|
4
4
|
keywords:
|
|
5
5
|
- todo
|
|
6
6
|
- add task
|
|
7
7
|
- queue work
|
|
8
8
|
- backlog
|
|
9
9
|
- add to list
|
|
10
|
+
- j-todo
|
|
11
|
+
- polyfill
|
|
10
12
|
examples:
|
|
11
13
|
- "add this to the todo list"
|
|
12
14
|
- "queue this as a task"
|
|
15
|
+
- "j-todo"
|
|
13
16
|
metadata:
|
|
14
17
|
prefered_agent: scrum-master
|
|
15
18
|
---
|
|
16
19
|
|
|
17
20
|
# Todo — Add Missions to the Todo List
|
|
18
21
|
|
|
22
|
+
This skill is a literal-directory-name duplicate of `skills/todo/`. It exists so that `/j-todo` (and `j.j-todo`) give a guaranteed-unshadowed way to reach the same flow as `/todo`, even if a host tool's own built-in command of the same name would otherwise shadow or override the bare `/todo` alias (Claude Code's native skill resolution is a literal-string, directory-name-based match — see `docs/skill-authoring.md`'s "Invocation Convention").
|
|
23
|
+
|
|
24
|
+
This file is generated/synced by `scripts/generate-j-alias.sh todo` from `skills/todo/SKILL.md` — do not hand-edit it; re-run the generator instead to pick up source changes.
|
|
25
|
+
|
|
19
26
|
## `--trivial` Flag
|
|
20
27
|
|
|
21
28
|
**Syntax:** `/todo --trivial <description>` — optionally combined with the same `: <Epic no.>_<Story no.>` linkage syntax normal `/todo` entries use, e.g. `/todo --trivial Fix typo in error message: E12_S03`.
|
|
@@ -58,7 +65,7 @@ When `--trivial` is present, the mission is written as a **fully-formed task boa
|
|
|
58
65
|
|
|
59
66
|
c. **Run the helper script**, which handles everything mechanical — next task-ID assignment, writing the task board file with `execution_scope: inline` forced, registering the new task ID into the parent story's `tasks:` frontmatter list, and adding the `project/todo.md` entry using the full task ID (so `/do` routes straight into its Inline Execution Path with no redundant breakdown pass):
|
|
60
67
|
```
|
|
61
|
-
bash skills/todo/scripts/add_trivial_task.sh \
|
|
68
|
+
bash skills/j-todo/scripts/add_trivial_task.sh \
|
|
62
69
|
--story <E##_S##> \
|
|
63
70
|
--title "<mission title>" \
|
|
64
71
|
--description "<mission description>" \
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
<!-- PLACEHOLDER: what this todo is trying to achieve -->
|
|
14
14
|
|
|
15
15
|
## Affected Files or Scope
|
|
16
|
-
<!-- PLACEHOLDER: which files, modules, or areas are involved, e.g. src/auth/, skills/todo/ -->
|
|
16
|
+
<!-- PLACEHOLDER: which files, modules, or areas are involved, e.g. src/auth/, skills/j-todo/ -->
|
|
17
17
|
|
|
18
18
|
## Intended Approach
|
|
19
19
|
<!-- PLACEHOLDER: step-by-step or high-level approach to the work -->
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env bash
|
|
2
|
-
# skills/todo/scripts/add_trivial_task.sh
|
|
2
|
+
# skills/j-todo/scripts/add_trivial_task.sh
|
|
3
3
|
#
|
|
4
4
|
# Creates a fully-formed task board file for a `/todo --trivial` mission,
|
|
5
5
|
# forced to execution_scope: inline unconditionally, and registers it both
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
# The JUDGMENT half — estimating file/line counts and deciding what
|
|
11
11
|
# execution_scope the normal heuristic in agents/scrum-master.md would have
|
|
12
12
|
# assigned (computed_tier) — happens in the calling agent's instructions
|
|
13
|
-
# (skills/todo/SKILL.md), per the Skill Implementation Principle: a step that
|
|
13
|
+
# (skills/j-todo/SKILL.md), per the Skill Implementation Principle: a step that
|
|
14
14
|
# requires reasoning about branching logic, new dependencies, etc. does not
|
|
15
15
|
# belong in a script. This script never reads project/configs/scope-thresholds.json
|
|
16
16
|
# or recomputes computed_tier itself — it only records what it was told.
|
|
@@ -33,7 +33,7 @@ cd "$REPO_ROOT"
|
|
|
33
33
|
|
|
34
34
|
TASKS_DIR="project/board/tasks"
|
|
35
35
|
STORIES_DIR="project/board/stories"
|
|
36
|
-
UPDATE_STORY_SCRIPT="skills/todo/scripts/update_story_tasks.py"
|
|
36
|
+
UPDATE_STORY_SCRIPT="skills/j-todo/scripts/update_story_tasks.py"
|
|
37
37
|
|
|
38
38
|
story_id=""
|
|
39
39
|
title=""
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env python3
|
|
2
2
|
"""
|
|
3
|
-
skills/todo/scripts/update_story_tasks.py
|
|
3
|
+
skills/j-todo/scripts/update_story_tasks.py
|
|
4
4
|
|
|
5
5
|
Mechanically inserts a task ID into a story board file's `tasks:` frontmatter
|
|
6
6
|
list, if it is not already present. Idempotent (a re-run with the same
|
|
@@ -12,7 +12,7 @@ scripts/with-lock.sh, keyed to the story file, per templates/SCRUM_BOARD_SCHEMA.
|
|
|
12
12
|
File Locking section (board frontmatter writes must go through the lock wrapper).
|
|
13
13
|
|
|
14
14
|
Usage:
|
|
15
|
-
python3 skills/todo/scripts/update_story_tasks.py <story-file> <task-id>
|
|
15
|
+
python3 skills/j-todo/scripts/update_story_tasks.py <story-file> <task-id>
|
|
16
16
|
|
|
17
17
|
Exit codes:
|
|
18
18
|
0 success (task_id inserted, or already present)
|