@joshuafolkken/kit 1.1035.0 → 1.1094.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/.claude/settings.json +9 -8
- package/.claude/skills/epic-commands/SKILL.md +5 -7
- package/.claude/skills/verify-ui/SKILL.md +1 -1
- package/.claude/skills/workflow-commands/SKILL.md +21 -13
- package/.claude/skills/workflow-commands/background-commands.md +5 -4
- package/.claude/skills/workflow-commands/backlogrun-child.md +3 -3
- package/.claude/skills/workflow-commands/backlogrun-lanes.md +9 -7
- package/.claude/skills/workflow-commands/backlogrun-park.md +6 -0
- package/.claude/skills/workflow-commands/backlogrun-progress.md +31 -37
- package/.claude/skills/workflow-commands/backlogrun-steps.md +25 -25
- package/.claude/skills/workflow-commands/backlogrun.md +2 -2
- package/.claude/skills/workflow-commands/chain-rule.md +6 -4
- package/.claude/skills/workflow-commands/delegation.md +3 -3
- package/.claude/skills/workflow-commands/followup-reference.md +3 -3
- package/.claude/skills/workflow-commands/followup.md +7 -3
- package/.claude/skills/workflow-commands/fullrun-steps.md +3 -2
- package/.claude/skills/workflow-commands/fullrun.md +3 -2
- package/.claude/skills/workflow-commands/halfrun.md +16 -19
- package/.claude/skills/workflow-commands/issue-comments.md +2 -2
- package/.claude/skills/workflow-commands/issue-fold-existing.md +10 -10
- package/.claude/skills/workflow-commands/issue-scout.md +1 -1
- package/.claude/skills/workflow-commands/kickoff.md +9 -4
- package/.claude/skills/workflow-commands/latest-gate.md +1 -1
- package/.claude/skills/workflow-commands/needs-human-review.md +1 -1
- package/.claude/skills/workflow-commands/observation-filing.md +44 -89
- package/.claude/skills/workflow-commands/pre-gate-cut.md +33 -36
- package/.claude/skills/workflow-commands/prerequisite.md +1 -1
- package/.claude/skills/workflow-commands/prrun.md +36 -0
- package/.claude/skills/workflow-commands/retrospective.md +1 -1
- package/.claude/skills/workflow-commands/working-tree-hold.md +24 -4
- package/.codex/hooks.json +16 -20
- package/.github/actions/setup-pnpm/action.yml +93 -0
- package/.github/dependabot.yml +5 -1
- package/.github/workflows/auto-tag.yml +21 -0
- package/.github/workflows/ci.yml +26 -128
- package/.github/workflows/pr-classification.yml +5 -41
- package/.github/workflows/publish.yml +42 -48
- package/.github/workflows/sonar-qube.yml +37 -4
- package/AGENTS.md +12 -2
- package/CLAUDE.md +15 -16
- package/GEMINI.md +14 -2
- package/README.md +59 -18
- package/SECURITY.md +36 -6
- package/cspell/index.yaml +2 -1
- package/dist/CLAUDE.md +15 -16
- package/dist/config-merge/index.js +15 -3
- package/dist/hooks/batch-guard.js +4 -4
- package/dist/hooks/{chunk-Y27M6A7X.js → chunk-3C4YCCEF.js} +5 -13
- package/dist/hooks/{chunk-D67KVGGY.js → chunk-7ZPFAVR7.js} +17 -88
- package/dist/hooks/{chunk-HOYJU5RM.js → chunk-E54KGFEQ.js} +11 -4
- package/dist/hooks/{chunk-KG6PZD72.js → chunk-IL27YTPH.js} +2 -2
- package/dist/hooks/{chunk-GJT4BNVE.js → chunk-KHWHKJOM.js} +3 -3
- package/dist/hooks/{chunk-HU66PWWL.js → chunk-M2XDCUKD.js} +1076 -509
- package/dist/hooks/{chunk-GLBDBJOK.js → chunk-NKOG3XAV.js} +199 -304
- package/dist/hooks/{chunk-ZXNE6NY3.js → chunk-O4LL4HTI.js} +2 -7
- package/dist/hooks/{chunk-XPLP27WA.js → chunk-OIZUHPJI.js} +5 -27
- package/dist/hooks/{chunk-EIFCAJRB.js → chunk-UD24EAIL.js} +2546 -1636
- package/dist/hooks/codex-hook-adapter.js +10 -11
- package/dist/hooks/duplicate-read-guard.js +5 -5
- package/dist/hooks/format-edited.js +15 -34
- package/dist/hooks/inputs.json +279 -0
- package/dist/hooks/investigation-guard.js +5 -5
- package/dist/hooks/pretool-guard.js +23 -16
- package/dist/hooks/session-lang.js +0 -1
- package/dist/hooks/stop-guard.js +188 -509
- package/dist/josh.js +166 -225
- package/dist/managed-marker/index.js +2 -1
- package/dist/version/index.js +412 -64
- package/eslint/rules/promise.js +5 -0
- package/package.json +13 -8
- package/prompts/collaboration-workflow/file-edits.md +6 -53
- package/prompts/collaboration-workflow/issue-citation.md +5 -5
- package/prompts/collaboration-workflow/operating-rules.md +4 -4
- package/prompts/collaboration-workflow/overview.md +13 -1
- package/prompts/collaboration-workflow/report-format.md +1 -1
- package/prompts/collaboration-workflow/residency.md +4 -4
- package/prompts/collaboration-workflow/rule-delivery.md +5 -36
- package/prompts/collaboration-workflow/shell-body.md +7 -9
- package/prompts/collaboration-workflow/turn-batching.md +21 -37
- package/prompts/collaboration-workflow/upstream-interrupt.md +1 -1
- package/prompts/collaboration-workflow/wip-cap.md +36 -36
- package/prompts/collaboration-workflow.md +5 -8
- package/prompts/review-rubric.md +1 -1
- package/prompts/review.md +3 -3
- package/prompts/sonar-hotspot-handling.md +12 -4
- package/prompts/testing-guide.md +3 -3
- package/scripts/adopt/adopt-toolkits.ts +2 -2
- package/scripts/adopt/adopt.ts +0 -2
- package/scripts/agent/agent-argv.ts +0 -2
- package/scripts/agent/agent-diagnostics.ts +1 -1
- package/scripts/agent/agent-role-profile.ts +0 -7
- package/scripts/agent/claude-agent-argv.ts +0 -2
- package/scripts/agent/codex-agent-argv.ts +1 -1
- package/scripts/agent/codex-hooks.ts +92 -0
- package/scripts/agent/interactive-ask.ts +1 -1
- package/scripts/auto-ok/auto-ok-cli.ts +15 -25
- package/scripts/backlog/backlog-budget.ts +0 -2
- package/scripts/backlog/backlog-defect-priority.ts +2 -2
- package/scripts/backlog/backlog-drive-cli.ts +10 -8
- package/scripts/backlog/backlog-drive-named-offer.ts +16 -3
- package/scripts/backlog/backlog-drive-named.ts +2 -1
- package/scripts/backlog/backlog-drive.ts +76 -16
- package/scripts/backlog/backlog-named.ts +0 -3
- package/scripts/backlog/backlog-next.ts +32 -22
- package/scripts/backlog/backlog-offer-cli.ts +0 -5
- package/scripts/backlog/backlog-plan-cli.ts +6 -8
- package/scripts/backlog/backlog-plan.ts +1 -1
- package/scripts/backlog/backlog-pool.ts +34 -17
- package/scripts/backlog/backlog-rank.ts +106 -0
- package/scripts/backlog/backlog-ready.ts +19 -3
- package/scripts/backlog/backlog-scope.ts +1 -3
- package/scripts/backlog/backlog-stalled-detect.ts +2 -2
- package/scripts/backlog/backlog-stalled.ts +0 -1
- package/scripts/backlog/backlog-waves.ts +47 -31
- package/scripts/behavior/behavior-cli.ts +1 -1
- package/scripts/build/build-codex-hooks.ts +26 -0
- package/scripts/build/build-hooks.ts +92 -11
- package/scripts/build/hook-bundle-stamp.ts +111 -0
- package/scripts/cases/cases-cli.ts +1 -1
- package/scripts/cases/cases-logic.ts +1 -1
- package/scripts/ci/composite-actions.ts +30 -0
- package/scripts/ci/pr-classification.ts +3 -3
- package/scripts/claude/workflow-destination.ts +10 -1
- package/scripts/clone/clone-fingerprint.ts +0 -1
- package/scripts/clone/clone-scan-cli.ts +1 -1
- package/scripts/clone/clone-scan.ts +1 -1
- package/scripts/config-merge/json-format.ts +0 -1
- package/scripts/config-merge/patch-yaml-list.ts +1 -1
- package/scripts/cost-runtime/codex-usage.ts +2 -9
- package/scripts/cost-runtime/cost-attribute.ts +0 -1
- package/scripts/cost-runtime/cost-cli.ts +0 -3
- package/scripts/cost-runtime/cost-corpus.ts +0 -2
- package/scripts/cost-runtime/cost-format.ts +0 -3
- package/scripts/cost-runtime/cost-pricing.ts +0 -1
- package/scripts/cost-runtime/cost-tokens.ts +0 -1
- package/scripts/delegation/delegation-cli.ts +1 -1
- package/scripts/delegation/delegation-policy.ts +11 -1
- package/scripts/delegation/duplicate-read-guard.ts +0 -8
- package/scripts/delegation/fanout-cli.ts +1 -1
- package/scripts/delegation/fanout.ts +0 -2
- package/scripts/delegation/investigation-reads.ts +1 -164
- package/scripts/discovery/repo-map-logic.ts +0 -1
- package/scripts/discovery/repo-party-cli.ts +1 -1
- package/scripts/doctor/doctor-consumer.ts +4 -6
- package/scripts/doctor/doctor-logic.ts +0 -4
- package/scripts/doctor/doctor.ts +14 -9
- package/scripts/document/document-byte-budget.ts +8 -9
- package/scripts/document/document-byte-check.ts +0 -1
- package/scripts/document/document-read-cli.ts +0 -2
- package/scripts/document/document-section-cli.ts +1 -1
- package/scripts/document/document-section.ts +0 -3
- package/scripts/document/edit-files-cli.ts +0 -1
- package/scripts/document/entry-read-budget.ts +13 -4
- package/scripts/document/lane-child-read-set.ts +1 -6
- package/scripts/document/read-files-cli.ts +0 -4
- package/scripts/document/read-set-cli.ts +0 -2
- package/scripts/document/read-set-point-of-use.ts +1 -0
- package/scripts/document/read-set-pricing.ts +0 -1
- package/scripts/document/read-set-trim.ts +1 -1
- package/scripts/epic/epic-add.ts +1 -1
- package/scripts/epic/epic-audit-cli.ts +1 -4
- package/scripts/epic/epic-audit-orphans.ts +1 -3
- package/scripts/epic/epic-audit-rationale.ts +0 -1
- package/scripts/epic/epic-audit-report.ts +0 -2
- package/scripts/epic/epic-audit.ts +5 -4
- package/scripts/epic/epic-bundle-cli.ts +1 -1
- package/scripts/epic/epic-bundle-evidence.ts +0 -1
- package/scripts/epic/epic-bundle-referenced.ts +1 -5
- package/scripts/epic/epic-bundle.ts +0 -4
- package/scripts/epic/epic-busy.ts +4 -5
- package/scripts/epic/epic-candidate-confirm.ts +0 -5
- package/scripts/epic/epic-classify.ts +2 -2
- package/scripts/epic/epic-cli-argv.ts +0 -1
- package/scripts/epic/epic-close-comment.ts +1 -1
- package/scripts/epic/epic-close.ts +5 -2
- package/scripts/epic/epic-cross-repo.ts +2 -4
- package/scripts/epic/epic-decision.ts +0 -1
- package/scripts/epic/epic-fetch.ts +2 -2
- package/scripts/epic/epic-index.ts +2 -3
- package/scripts/epic/epic-issue.ts +1 -15
- package/scripts/epic/epic-lane-offer.ts +20 -30
- package/scripts/epic/epic-nested.ts +1 -1
- package/scripts/epic/epic-next-read.ts +1 -3
- package/scripts/epic/epic-next-views.ts +0 -1
- package/scripts/epic/epic-next.ts +1 -10
- package/scripts/epic/epic-parse.ts +0 -1
- package/scripts/epic/epic-promote.ts +0 -9
- package/scripts/epic/epic-rank.ts +37 -0
- package/scripts/epic/epic-read.ts +1 -2
- package/scripts/epic/epic-reconcile.ts +1 -1
- package/scripts/epic/epic-reference.ts +1 -13
- package/scripts/epic/epic-relation-recheck.ts +1 -1
- package/scripts/epic/epic-relations.ts +1 -1
- package/scripts/epic/epic-remove.ts +1 -1
- package/scripts/epic/epic-report.ts +0 -1
- package/scripts/epic/epic-run.ts +2 -3
- package/scripts/epic/epic-shape.ts +1 -1
- package/scripts/epic/epic-solo-stale.ts +107 -0
- package/scripts/epic/epic-solo.ts +32 -30
- package/scripts/epic/epic-triage.ts +1 -1
- package/scripts/epic/epic-validate.ts +1 -1
- package/scripts/epic/epic.ts +1 -1
- package/scripts/exports/unused-members-cli.ts +53 -0
- package/scripts/{git → followup}/followup-issue-number.ts +1 -6
- package/scripts/{git → followup}/git-followup-cleanup.ts +2 -1
- package/scripts/{git → followup}/git-followup-finish.ts +1 -3
- package/scripts/{git → followup}/git-followup-flush.ts +2 -2
- package/scripts/{git → followup}/git-followup-issue-close.ts +2 -2
- package/scripts/{git → followup}/git-followup-label.ts +4 -4
- package/scripts/followup/git-followup-merged.ts +112 -0
- package/scripts/{git → followup}/git-followup-pending.ts +1 -1
- package/scripts/{git → followup}/git-followup-workflow.ts +19 -11
- package/scripts/{git → followup}/git-pr-followup-wrapup.ts +9 -3
- package/scripts/{git → followup}/git-pr-followup.ts +53 -16
- package/scripts/gate/core-budget.ts +3 -9
- package/scripts/gate/gate-plan.ts +7 -4
- package/scripts/gate/gate-report.ts +0 -6
- package/scripts/gate/gate-tree.ts +1 -1
- package/scripts/gate/pre-commit-type-check.ts +0 -6
- package/scripts/gate/project-checks.ts +7 -8
- package/scripts/gate/scoped-green.ts +0 -1
- package/scripts/gate/type-check-step.ts +1 -1
- package/scripts/gate/verification-gate.ts +0 -2
- package/scripts/gh/fix-gh-packages.ts +15 -12
- package/scripts/gh/gh-spawn.ts +2 -2
- package/scripts/{git → gh}/git-ai-review-scan.ts +1 -5
- package/scripts/{git → gh}/git-gh-check.ts +2 -1
- package/scripts/{git → gh}/git-gh-exec.ts +1 -1
- package/scripts/{git → gh}/git-gh-failure.ts +1 -1
- package/scripts/{git → gh}/git-gh-helpers.ts +0 -1
- package/scripts/{git → gh}/git-gh-issue-list.ts +2 -0
- package/scripts/{git → gh}/git-gh-issue-read.ts +1 -1
- package/scripts/{git → gh}/git-gh-issue-rest.ts +6 -3
- package/scripts/{git → gh}/git-gh-pr-read.ts +24 -0
- package/scripts/{git → gh}/git-gh-pr-rest.ts +5 -2
- package/scripts/{git → gh}/git-gh-pr-review.ts +2 -2
- package/scripts/{git → gh}/git-gh-pr-rollup.ts +1 -3
- package/scripts/{git → gh}/git-gh-pr.ts +3 -1
- package/scripts/{git → gh}/git-pr-ai-review.ts +2 -5
- package/scripts/{git → gh}/git-pr-checks-eval.ts +0 -10
- package/scripts/{git → gh}/git-pr-checks-parse.ts +4 -20
- package/scripts/{git → gh}/git-pr-checks.ts +2 -1
- package/scripts/{git → gh}/git-pr-coderabbit.ts +2 -5
- package/scripts/{git → gh}/git-pr-confirmation.ts +1 -3
- package/scripts/{git → gh}/git-pr-managed-config.ts +2 -3
- package/scripts/{git → gh}/git-pr.ts +3 -3
- package/scripts/git/changed-file-scope.ts +0 -1
- package/scripts/git/git-branch.ts +3 -6
- package/scripts/git/git-command.ts +1 -1
- package/scripts/git/git-commit.ts +1 -1
- package/scripts/git/git-common-directory.ts +80 -24
- package/scripts/git/git-error.ts +66 -9
- package/scripts/git/git-execa-error.ts +6 -1
- package/scripts/git/git-issue.ts +1 -1
- package/scripts/git/git-preflight.ts +24 -6
- package/scripts/git/git-prompt.ts +6 -31
- package/scripts/git/git-push-transport.ts +12 -69
- package/scripts/git/git-push.ts +1 -1
- package/scripts/git/git-spawn.ts +79 -3
- package/scripts/git/git-ssh-keepalive.ts +74 -0
- package/scripts/git/git-staging.ts +1 -0
- package/scripts/git/git-status.ts +1 -1
- package/scripts/git/git-workflow.ts +1 -1
- package/scripts/git/gone-branch.ts +4 -2
- package/scripts/git/listing-cutoff.ts +1 -1
- package/scripts/git/main-merge.ts +1 -1
- package/scripts/git/main-sync.ts +19 -1
- package/scripts/git/parse-json-array.ts +0 -3
- package/scripts/git/repository-lock.ts +16 -16
- package/scripts/git/{git-stash.ts → stash/git-stash.ts} +1 -1
- package/scripts/git/{stash-pop-args.ts → stash/stash-pop-args.ts} +1 -1
- package/scripts/git/{stash-pop-cli.ts → stash/stash-pop-cli.ts} +0 -1
- package/scripts/git/{stash-sweep-lock.ts → stash/stash-sweep-lock.ts} +3 -3
- package/scripts/hooks/codex-hook-adapter.ts +0 -1
- package/scripts/hooks/edited-cspell.ts +1 -1
- package/scripts/hooks/format-edited-cli.ts +15 -0
- package/scripts/hooks/format-edited-file.ts +4 -9
- package/scripts/hooks/pre-push-unit.ts +0 -4
- package/scripts/hooks/pretool-guard-cli.ts +21 -0
- package/scripts/hooks/pretool-guard.ts +36 -19
- package/scripts/hooks/reserved-run.ts +1 -1
- package/scripts/hooks/step-zero-notice.ts +76 -0
- package/scripts/hooks/stop-guard.ts +47 -21
- package/scripts/init/claude-plugin-config.ts +4 -5
- package/scripts/init/hook-command-rewrite.ts +16 -8
- package/scripts/init/hook-launch.ts +41 -15
- package/scripts/init/init-basic.ts +2 -5
- package/scripts/init/init-logic.ts +7 -0
- package/scripts/init/init.ts +0 -3
- package/scripts/init/project-profile.ts +6 -11
- package/scripts/init/start-exec.ts +8 -2
- package/scripts/init/start-plan.ts +18 -5
- package/scripts/init/start-setup-pr.ts +52 -25
- package/scripts/init/start-steps.ts +42 -9
- package/scripts/init/start.ts +40 -10
- package/scripts/issue/behavior-change-lint.ts +0 -1
- package/scripts/issue/defect-rate-cli.ts +3 -3
- package/scripts/issue/defect-rate.ts +1 -2
- package/scripts/{git → issue}/git-next-issues.ts +37 -8
- package/scripts/issue/issue-backlinks-cli.ts +1 -5
- package/scripts/issue/issue-cite-cli.ts +2 -6
- package/scripts/issue/issue-cite.ts +19 -3
- package/scripts/issue/issue-classification.ts +1 -9
- package/scripts/issue/issue-closing-pr.ts +4 -4
- package/scripts/issue/issue-comment-cli.ts +2 -2
- package/scripts/issue/issue-file-cli.ts +5 -5
- package/scripts/issue/issue-file.ts +2 -2
- package/scripts/issue/issue-fold-cli.ts +1 -1
- package/scripts/issue/issue-fold-existing-cli.ts +1 -1
- package/scripts/{git → issue}/issue-labels.ts +20 -0
- package/scripts/issue/issue-lint-cli.ts +1 -1
- package/scripts/issue/issue-merged.ts +2 -2
- package/scripts/issue/issue-rank.ts +89 -0
- package/scripts/issue/issue-read-cli.ts +8 -47
- package/scripts/issue/issue-read.ts +0 -2
- package/scripts/issue/issue-report-failures.ts +80 -0
- package/scripts/issue/issue-scout-cli.ts +1 -7
- package/scripts/issue/issue-scout-closed.ts +2 -2
- package/scripts/issue/issue-scout.ts +0 -2
- package/scripts/issue/issue-state-cli.ts +5 -46
- package/scripts/issue/issue-state.ts +1 -5
- package/scripts/issue/markdown-section.ts +1 -1
- package/scripts/issue/measure-rerun-cli.ts +1 -1
- package/scripts/issue/reproduction-measure.ts +1 -1
- package/scripts/josh/cli-body.ts +1 -1
- package/scripts/josh/file-map-stamp.ts +0 -3
- package/scripts/josh/josh-command-map.ts +2 -102
- package/scripts/josh/josh-commands-ai.ts +9 -102
- package/scripts/josh/josh-commands-backlog.ts +5 -1
- package/scripts/josh/josh-commands-development.ts +10 -3
- package/scripts/josh/josh-commands-issue.ts +2 -2
- package/scripts/josh/josh-commands-maintenance.ts +7 -0
- package/scripts/josh/josh-commands-project.ts +7 -1
- package/scripts/josh/josh-commands-run.ts +114 -0
- package/scripts/josh/josh-commands-versioning.ts +8 -0
- package/scripts/josh/josh-commands-workflow.ts +2 -2
- package/scripts/josh/path-decision.ts +0 -3
- package/scripts/josh/process-owner.ts +16 -0
- package/scripts/josh/session-language-cli.ts +0 -1
- package/scripts/lane/lane-await.ts +3 -6
- package/scripts/lane/lane-capacity.ts +6 -3
- package/scripts/lane/lane-child-invocation.ts +20 -7
- package/scripts/lane/lane-child-marker.ts +16 -2
- package/scripts/lane/lane-cli.ts +33 -18
- package/scripts/lane/lane-close.ts +1 -3
- package/scripts/lane/lane-dispatch.ts +3 -4
- package/scripts/lane/lane-environment.ts +0 -9
- package/scripts/lane/lane-handoff.ts +38 -0
- package/scripts/lane/lane-launch-cli.ts +21 -11
- package/scripts/lane/lane-open.ts +0 -3
- package/scripts/lane/lane-output.ts +0 -1
- package/scripts/lane/lane-registry.ts +9 -0
- package/scripts/lane/lane-report.ts +10 -4
- package/scripts/lane/openai-lane-ship.ts +2 -0
- package/scripts/lane/openai-lane-supervisor-decision.ts +2 -1
- package/scripts/lane/openai-lane-supervisor.ts +6 -4
- package/scripts/lane/openai-review-broker.ts +3 -0
- package/scripts/lib/bounded-pool.ts +1 -0
- package/scripts/lib/json-value.ts +5 -4
- package/scripts/lib/poll.ts +3 -1
- package/scripts/lib/timed-fetch.ts +15 -0
- package/scripts/lib/timeouts.ts +13 -0
- package/scripts/{yaml → lib}/yaml-document.ts +3 -1
- package/scripts/{bytes → lines}/bytes-command.ts +0 -2
- package/scripts/lines/lines-command.ts +0 -1
- package/scripts/lint/lint-related-scope.ts +0 -1
- package/scripts/lint/lint-related.ts +1 -1
- package/scripts/{git → notify}/telegram-notify.ts +2 -2
- package/scripts/{git → notify}/telegram-test.ts +4 -4
- package/scripts/observations/observation-ledger-home.ts +0 -1
- package/scripts/observations/observation-ledger-line.ts +0 -1
- package/scripts/observations/observation-ledger-migrate.ts +1 -1
- package/scripts/observations/observations-flush-landing.ts +3 -3
- package/scripts/observations/observations-flush.ts +2 -2
- package/scripts/overrides/lockfile-overrides.ts +1 -1
- package/scripts/overrides/overrides-logic.ts +1 -1
- package/scripts/package/package-scout-cli.ts +2 -7
- package/scripts/package/package-scout.ts +0 -2
- package/scripts/propagate/propagate-git-failure.ts +0 -1
- package/scripts/propagate/propagate-git.ts +0 -2
- package/scripts/propagate/propagate-plan.ts +185 -0
- package/scripts/propagate/propagate-publish.ts +2 -3
- package/scripts/propagate/propagate-run.ts +5 -3
- package/scripts/propagate/propagate-steps.ts +19 -6
- package/scripts/propagate/propagate-targets.ts +13 -6
- package/scripts/propagate/propagate.ts +60 -46
- package/scripts/refactor/import-graph.ts +0 -1
- package/scripts/refactor/refactor-lint.ts +0 -2
- package/scripts/refactor/refactor-scan.ts +0 -1
- package/scripts/refactor/refactor-targets.ts +0 -1
- package/scripts/registry-migration/migrate-logic.ts +1 -2
- package/scripts/registry-migration/migrate.ts +19 -9
- package/scripts/release/github-release-cli.ts +8 -6
- package/scripts/release/github-release-environment.ts +46 -0
- package/scripts/release/github-release.ts +151 -94
- package/scripts/release/release-history.ts +0 -1
- package/scripts/release/release-plan.ts +0 -1
- package/scripts/release/release-publish.ts +2 -3
- package/scripts/release/release-scope-cli.ts +1 -2
- package/scripts/release/release-tag.ts +2 -4
- package/scripts/repo/auto-merge-setting-logic.ts +1 -4
- package/scripts/repo/repo-setting.ts +1 -1
- package/scripts/repo/repository-labels.ts +3 -3
- package/scripts/repo/required-checks-logic.ts +206 -0
- package/scripts/repo/required-checks-report.ts +71 -0
- package/scripts/repo/ruleset-check-cli.ts +53 -0
- package/scripts/repo/ruleset-check.ts +147 -0
- package/scripts/report/report-lint-cli.ts +0 -4
- package/scripts/review/disposition-cli.ts +1 -1
- package/scripts/review/live-evidence.ts +1 -1
- package/scripts/review/review-attest-cli.ts +0 -6
- package/scripts/review/review-attest.ts +48 -16
- package/scripts/review/review-brief-cli.ts +72 -8
- package/scripts/review/review-brief.ts +67 -9
- package/scripts/review/review-diff-parts.ts +89 -0
- package/scripts/review/review-diff-write.ts +97 -0
- package/scripts/review/review-finding-ledger.ts +0 -1
- package/scripts/review/review-record-cli.ts +1 -1
- package/scripts/review/review-record.ts +0 -1
- package/scripts/review/review-round2-cli.ts +1 -1
- package/scripts/review/review-stamps.ts +6 -2
- package/scripts/review/review-tree.ts +14 -2
- package/scripts/rules/decision-oracle-stage.ts +18 -0
- package/scripts/rules/decision-oracle.ts +10 -7
- package/scripts/rules/delivered-rules.ts +9 -1
- package/scripts/rules/destructive-command.ts +119 -0
- package/scripts/rules/direct-filing.ts +1 -1
- package/scripts/rules/file-body.ts +0 -3
- package/scripts/rules/filing-cap.ts +0 -2
- package/scripts/rules/gh-api.ts +7 -2
- package/scripts/rules/git-argv.ts +18 -7
- package/scripts/rules/git-force.ts +0 -2
- package/scripts/rules/implementation-cut.ts +1 -2
- package/scripts/rules/index-guard.ts +71 -0
- package/scripts/rules/issue-citation.ts +50 -25
- package/scripts/rules/issue-fold.ts +1 -2
- package/scripts/rules/lane-background.ts +15 -7
- package/scripts/rules/lane-carry-conflict.ts +1 -2
- package/scripts/rules/lane-park.ts +14 -8
- package/scripts/rules/last-prompt.ts +1 -0
- package/scripts/rules/oracle-consulted.ts +1 -1
- package/scripts/rules/oracle-firing.ts +1 -0
- package/scripts/rules/oracle-list-cli.ts +0 -3
- package/scripts/rules/permission-guards.ts +14 -0
- package/scripts/rules/pre-gate-cut.ts +2 -2
- package/scripts/rules/protected-files.ts +74 -0
- package/scripts/rules/reply-language.ts +1 -1
- package/scripts/rules/rule-body-guard.ts +0 -3
- package/scripts/rules/rule-value-cli.ts +0 -1
- package/scripts/rules/shell-body-trigger.ts +0 -1
- package/scripts/rules/shell-segments.ts +0 -1
- package/scripts/rules/stop-rules.ts +13 -5
- package/scripts/rules/tail-commands.ts +1 -1
- package/scripts/rules/test-declared-commit.ts +1 -1
- package/scripts/rules/third-party-write.ts +0 -1
- package/scripts/rules/worktree-guard.ts +26 -9
- package/scripts/run/run-carry-cli.ts +0 -2
- package/scripts/run/run-carry-stash.ts +2 -2
- package/scripts/run/run-carry-streak.ts +1 -1
- package/scripts/run/run-cut-cli.ts +0 -7
- package/scripts/run/run-cut.ts +8 -54
- package/scripts/run/run-ending-cli.ts +1 -1
- package/scripts/run/run-ending.ts +1 -4
- package/scripts/run/run-entry-cli.ts +101 -24
- package/scripts/run/run-entry.ts +0 -1
- package/scripts/run/run-event-cli.ts +0 -2
- package/scripts/run/run-event-follow.ts +1 -0
- package/scripts/run/run-event-render.ts +1 -1
- package/scripts/run/run-event-scope.ts +53 -4
- package/scripts/run/run-event-stream.ts +0 -3
- package/scripts/run/run-event-watch.ts +1 -0
- package/scripts/run/run-halfrun-resume.ts +20 -7
- package/scripts/run/run-headless.ts +24 -8
- package/scripts/run/run-hold-cli.ts +33 -10
- package/scripts/run/run-hold.ts +25 -5
- package/scripts/run/run-issue-number.ts +1 -1
- package/scripts/run/run-liveness-cli.ts +1 -1
- package/scripts/run/run-liveness.ts +2 -3
- package/scripts/run/run-merge-cli.ts +5 -13
- package/scripts/run/run-merge-steps.ts +5 -5
- package/scripts/run/run-merge.ts +1 -1
- package/scripts/run/run-next-cli.ts +1 -1
- package/scripts/run/run-parent-cut-hook.ts +143 -0
- package/scripts/run/run-preflight.ts +2 -9
- package/scripts/run/run-prep-cli.ts +2 -2
- package/scripts/run/run-prep-locate.ts +1 -1
- package/scripts/run/run-progress-cli.ts +4 -7
- package/scripts/run/run-progress-clock.ts +6 -34
- package/scripts/run/run-progress-config.ts +0 -4
- package/scripts/run/run-progress-read.ts +3 -3
- package/scripts/run/run-progress.ts +22 -10
- package/scripts/run/run-prrun-resume.ts +117 -0
- package/scripts/run/run-report-cli.ts +1 -2
- package/scripts/run/run-report.ts +0 -1
- package/scripts/run/run-retrospective.ts +1 -1
- package/scripts/run/run-review-cli.ts +0 -3
- package/scripts/run/run-review-steps.ts +2 -0
- package/scripts/run/run-review.ts +0 -2
- package/scripts/run/run-ship-cli.ts +27 -77
- package/scripts/run/run-ship-detach.ts +1 -0
- package/scripts/run/run-ship-next.ts +106 -0
- package/scripts/run/run-ship-preflight.ts +87 -0
- package/scripts/run/run-ship-return.ts +8 -3
- package/scripts/run/run-ship-review-steps.ts +23 -30
- package/scripts/run/run-ship-review.ts +20 -0
- package/scripts/run/run-ship-scoped.ts +45 -0
- package/scripts/run/run-ship-stage.ts +5 -1
- package/scripts/run/run-ship-steps.ts +105 -0
- package/scripts/run/run-ship.ts +2 -1
- package/scripts/run/run-stage-read.ts +62 -0
- package/scripts/run/run-stage.ts +160 -0
- package/scripts/run/run-status-cli.ts +1 -1
- package/scripts/run/run-step-cli.ts +21 -14
- package/scripts/run/run-step.ts +1 -1
- package/scripts/run/run-stop-notify.ts +1 -3
- package/scripts/run/run-stranded-cli.ts +0 -4
- package/scripts/run/run-stranded-detect.ts +2 -2
- package/scripts/run/run-tail-cli.ts +17 -11
- package/scripts/run/run-tail.ts +2 -0
- package/scripts/run/run-tidy-lanes.ts +2 -1
- package/scripts/run/run-tidy-stashes.ts +12 -12
- package/scripts/run/run-wake-cli.ts +4 -5
- package/scripts/run/run-wake-describe.ts +19 -1
- package/scripts/run/run-wake-loop.ts +2 -2
- package/scripts/run/run-wake.ts +2 -4
- package/scripts/run/run-watcher-guard-cli.ts +0 -4
- package/scripts/run/run-watcher-guard.ts +9 -7
- package/scripts/run/run-watcher-hook.ts +1 -1
- package/scripts/safe-chain/ci-installer-pin.ts +11 -5
- package/scripts/safe-chain/project-config.ts +1 -1
- package/scripts/security/security-audit-provision-logic.ts +0 -1
- package/scripts/security/security-audit-provision.ts +3 -2
- package/scripts/security/security-audit.ts +0 -1
- package/scripts/security/security-updates-logic.ts +0 -1
- package/scripts/sonar/sonar-hotspots-cli.ts +10 -52
- package/scripts/sonar/sonar-hotspots.ts +0 -1
- package/scripts/sonar/sonar-new-code-cli.ts +150 -0
- package/scripts/sonar/sonar-new-code.ts +79 -0
- package/scripts/sonar/sonar-project.ts +97 -0
- package/scripts/split/split-assess-cli.ts +1 -1
- package/scripts/split/split-assess.ts +2 -5
- package/scripts/sync/managed-config-scope-cli.ts +1 -1
- package/scripts/sync/skill-migration.ts +0 -1
- package/scripts/sync/sync-hook-safety.ts +2 -3
- package/scripts/sync/sync.ts +1 -8
- package/scripts/sync/template-source-logic.ts +0 -1
- package/scripts/sync/workflow-pin-logic.ts +16 -28
- package/scripts/test/test-declared-logic.ts +0 -1
- package/scripts/test/test-declared.ts +0 -2
- package/scripts/test/test-red-commit.ts +2 -2
- package/scripts/test/test-red.ts +14 -7
- package/scripts/test/test-type-logic.ts +1 -1
- package/scripts/test/unit-worker-share.ts +7 -16
- package/scripts/time-runtime/time-batch-guard.ts +1 -2
- package/scripts/time-runtime/time-bundle-call.ts +2 -3
- package/scripts/time-runtime/time-bundles.ts +0 -4
- package/scripts/time-runtime/time-density-hook.ts +0 -2
- package/scripts/time-runtime/time-followup-stage.ts +1 -1
- package/scripts/time-runtime/time-format.ts +0 -73
- package/scripts/time-runtime/time-round-trips.ts +0 -4
- package/scripts/time-runtime/time-single-check.ts +1 -1
- package/scripts/time-runtime/time-spans.ts +1 -1
- package/scripts/time-runtime/time-transcript-line.ts +1 -2
- package/scripts/ui/ui-routes-cli.ts +0 -5
- package/scripts/ui/ui-routes.ts +0 -5
- package/scripts/version/effective-upstream.ts +2 -2
- package/scripts/version/latest-corepack.ts +7 -9
- package/scripts/version/latest-scope-cli.ts +0 -2
- package/scripts/version/latest-update.ts +0 -2
- package/scripts/version/npm-registry.ts +97 -0
- package/scripts/version/publishable-range-check.ts +1 -1
- package/scripts/version/release-hold.ts +0 -4
- package/scripts/version/running-binary.ts +2 -2
- package/scripts/version/version-check-logic.ts +0 -2
- package/scripts/version/version-commands.ts +5 -4
- package/scripts/version/version-remote.ts +28 -14
- package/scripts/version/version-targets.ts +4 -4
- package/templates/sonar-project.properties +28 -1
- package/templates/workflows/dependabot-auto-merge.yml +5 -3
- package/templates/workflows/github-release.yml +81 -0
- package/prompts/collaboration-workflow/cross-repo-epic.md +0 -5
- package/prompts/collaboration-workflow/epic-audit.md +0 -5
- package/prompts/collaboration-workflow/epic-bundle.md +0 -5
- package/scripts/init/plugin-install-hint.ts +0 -47
- package/scripts/version/parse-json.ts +0 -13
- /package/scripts/{git → followup}/git-followup-stages.ts +0 -0
- /package/scripts/{git → gh}/git-gh-api-path.ts +0 -0
- /package/scripts/{git → gh}/git-gh-command.ts +0 -0
- /package/scripts/{git → gh}/git-gh-issue-write.ts +0 -0
- /package/scripts/{git → gh}/git-gh-issue.ts +0 -0
- /package/scripts/{git → gh}/git-gh-pr-auto-merge.ts +0 -0
- /package/scripts/{git → gh}/git-gh-pr-snapshot.ts +0 -0
- /package/scripts/{git → gh}/git-gh-reachability.ts +0 -0
- /package/scripts/{git → gh}/git-gh-repo.ts +0 -0
- /package/scripts/{git → gh}/git-gh-rest-state.ts +0 -0
- /package/scripts/{git → gh}/git-pr-checks-watch.ts +0 -0
- /package/scripts/{git → gh}/git-pr-error.ts +0 -0
- /package/scripts/{git → gh}/git-pr-messages.ts +0 -0
- /package/scripts/{git → gh}/github-issue-url.ts +0 -0
- /package/scripts/git/{stash-orphans.ts → stash/stash-orphans.ts} +0 -0
- /package/scripts/{git → issue}/issue-reference.ts +0 -0
- /package/scripts/{git → lib}/animation-helpers.ts +0 -0
- /package/scripts/{git → lib}/git-animation.ts +0 -0
- /package/scripts/{git → notify}/git-notify.ts +0 -0
- /package/scripts/{git → notify}/telegram-test-logic.ts +0 -0
package/.claude/settings.json
CHANGED
|
@@ -5,6 +5,11 @@
|
|
|
5
5
|
"deny": [
|
|
6
6
|
"Bash(rm -rf *)",
|
|
7
7
|
"Bash(rm -rf /*)",
|
|
8
|
+
"Bash(rm -fr *)",
|
|
9
|
+
"Bash(gh repo delete*)",
|
|
10
|
+
"Bash(gh repo archive*)",
|
|
11
|
+
"Bash(gh pr close*)",
|
|
12
|
+
"Read(./.env)",
|
|
8
13
|
"Bash(git push --force*)",
|
|
9
14
|
"Bash(git push -f*)",
|
|
10
15
|
"Bash(git push *--force*)",
|
|
@@ -56,11 +61,7 @@
|
|
|
56
61
|
"hooks": [
|
|
57
62
|
{
|
|
58
63
|
"type": "command",
|
|
59
|
-
"command": "
|
|
60
|
-
},
|
|
61
|
-
{
|
|
62
|
-
"type": "command",
|
|
63
|
-
"command": "if [ -f dist/hooks/session-lang.js ]; then node dist/hooks/session-lang.js; else pnpm josh session:lang; fi",
|
|
64
|
+
"command": "if project_root=\"$(env -u GIT_ALTERNATE_OBJECT_DIRECTORIES -u GIT_COMMON_DIR -u GIT_DIR -u GIT_INDEX_FILE -u GIT_NAMESPACE -u GIT_OBJECT_DIRECTORY -u GIT_WORK_TREE git rev-parse --show-toplevel 2>/dev/null)\"; then unset GIT_ALTERNATE_OBJECT_DIRECTORIES GIT_COMMON_DIR GIT_DIR GIT_INDEX_FILE GIT_NAMESPACE GIT_OBJECT_DIRECTORY GIT_WORK_TREE; else project_root=\"$(git rev-parse --show-toplevel)\" || exit 1; fi; cd \"$project_root\" && if node --disable-warning=ExperimentalWarning scripts/hooks/hook-bundle-ready.ts; then node dist/hooks/session-lang.js; else pnpm josh session:lang; fi",
|
|
64
65
|
"timeout": 10
|
|
65
66
|
}
|
|
66
67
|
]
|
|
@@ -72,7 +73,7 @@
|
|
|
72
73
|
"hooks": [
|
|
73
74
|
{
|
|
74
75
|
"type": "command",
|
|
75
|
-
"command": "if
|
|
76
|
+
"command": "if project_root=\"$(env -u GIT_ALTERNATE_OBJECT_DIRECTORIES -u GIT_COMMON_DIR -u GIT_DIR -u GIT_INDEX_FILE -u GIT_NAMESPACE -u GIT_OBJECT_DIRECTORY -u GIT_WORK_TREE git rev-parse --show-toplevel 2>/dev/null)\"; then unset GIT_ALTERNATE_OBJECT_DIRECTORIES GIT_COMMON_DIR GIT_DIR GIT_INDEX_FILE GIT_NAMESPACE GIT_OBJECT_DIRECTORY GIT_WORK_TREE; else project_root=\"$(git rev-parse --show-toplevel)\" || exit 1; fi; cd \"$project_root\" && if node --disable-warning=ExperimentalWarning scripts/hooks/hook-bundle-ready.ts; then node dist/hooks/pretool-guard.js; else pnpm josh pretool:guard; fi",
|
|
76
77
|
"timeout": 20
|
|
77
78
|
}
|
|
78
79
|
]
|
|
@@ -84,7 +85,7 @@
|
|
|
84
85
|
"hooks": [
|
|
85
86
|
{
|
|
86
87
|
"type": "command",
|
|
87
|
-
"command": "if
|
|
88
|
+
"command": "if project_root=\"$(env -u GIT_ALTERNATE_OBJECT_DIRECTORIES -u GIT_COMMON_DIR -u GIT_DIR -u GIT_INDEX_FILE -u GIT_NAMESPACE -u GIT_OBJECT_DIRECTORY -u GIT_WORK_TREE git rev-parse --show-toplevel 2>/dev/null)\"; then unset GIT_ALTERNATE_OBJECT_DIRECTORIES GIT_COMMON_DIR GIT_DIR GIT_INDEX_FILE GIT_NAMESPACE GIT_OBJECT_DIRECTORY GIT_WORK_TREE; else project_root=\"$(git rev-parse --show-toplevel)\" || exit 1; fi; cd \"$project_root\" && if node --disable-warning=ExperimentalWarning scripts/hooks/hook-bundle-ready.ts; then node dist/hooks/format-edited.js; else pnpm josh format:edited; fi",
|
|
88
89
|
"timeout": 90
|
|
89
90
|
}
|
|
90
91
|
]
|
|
@@ -96,7 +97,7 @@
|
|
|
96
97
|
"hooks": [
|
|
97
98
|
{
|
|
98
99
|
"type": "command",
|
|
99
|
-
"command": "if
|
|
100
|
+
"command": "if project_root=\"$(env -u GIT_ALTERNATE_OBJECT_DIRECTORIES -u GIT_COMMON_DIR -u GIT_DIR -u GIT_INDEX_FILE -u GIT_NAMESPACE -u GIT_OBJECT_DIRECTORY -u GIT_WORK_TREE git rev-parse --show-toplevel 2>/dev/null)\"; then unset GIT_ALTERNATE_OBJECT_DIRECTORIES GIT_COMMON_DIR GIT_DIR GIT_INDEX_FILE GIT_NAMESPACE GIT_OBJECT_DIRECTORY GIT_WORK_TREE; else project_root=\"$(git rev-parse --show-toplevel)\" || exit 1; fi; cd \"$project_root\" && if node --disable-warning=ExperimentalWarning scripts/hooks/hook-bundle-ready.ts; then node dist/hooks/stop-guard.js; else pnpm josh stop:guard; fi",
|
|
100
101
|
"timeout": 20
|
|
101
102
|
}
|
|
102
103
|
]
|
|
@@ -6,9 +6,7 @@ description: The procedures for the `josh epic:*` commands that make an epic run
|
|
|
6
6
|
# The `josh epic:*` commands
|
|
7
7
|
|
|
8
8
|
These three commands are what turn an epic from a list of issue numbers into something a run can
|
|
9
|
-
execute unattended. **This skill is their single source
|
|
10
|
-
`epic-bundle.md`, `epic-audit.md` and `cross-repo-epic.md` only as pointers here, and the history
|
|
11
|
-
behind the rules is `docs/maintainers/epic-commands-rationale.md` (joshuafolkken/kit#2892).
|
|
9
|
+
execute unattended. **This skill is their single source**, and the history behind the rules is `docs/maintainers/epic-commands-rationale.md` (joshuafolkken/kit#2892).
|
|
12
10
|
|
|
13
11
|
The workflow keywords themselves — `kickoff`, `fullrun`, `halfrun`, `backlogrun` — live in the
|
|
14
12
|
`workflow-commands` skill.
|
|
@@ -118,7 +116,7 @@ about the search itself rather than about anything the children say (joshuafolkk
|
|
|
118
116
|
|
|
119
117
|
**One thing it cannot check** belongs to planning: when a child introduces a new label, command,
|
|
120
118
|
state or artifact, list the existing code referencing that concept and confirm some child owns
|
|
121
|
-
updating it. Label names are single-sourced in `scripts/
|
|
119
|
+
updating it. Label names are single-sourced in `scripts/issue/issue-labels.ts`.
|
|
122
120
|
|
|
123
121
|
History: `docs/maintainers/epic-commands-rationale.md` → "`epic:audit` — why the children are read across".
|
|
124
122
|
|
|
@@ -153,7 +151,7 @@ command prints a ⚠️ line naming that child rather than reporting a reorderin
|
|
|
153
151
|
`owner/repo#number` and kept by the epic named earlier; withheld there, it stays withheld, because a
|
|
154
152
|
`blocked-by` relation belongs to the issue rather than to the epic listing it. **One unusable graph
|
|
155
153
|
refuses the whole answer**, and **one reference that does not parse fails the read** rather than
|
|
156
|
-
being dropped. `docs/josh-commands.md` → "`josh epic:next`" carries the worked form.
|
|
154
|
+
being dropped. `docs/josh-commands-automation.md` → "`josh epic:next`" carries the worked form.
|
|
157
155
|
|
|
158
156
|
**An `in-progress` issue occupies a lane rather than the whole repository.** The occupancy is counted
|
|
159
157
|
from that repository's own `in-progress` listing — never from anything the session remembers, since
|
|
@@ -196,7 +194,7 @@ inherits; open and tracked by none, the child waits on a person and the
|
|
|
196
194
|
blocker is named on standard error; a state the relation did not carry reads as waiting. **So an order
|
|
197
195
|
between two epics is recorded with a native `blocked-by` relation and honoured by naming both epics**
|
|
198
196
|
— `epic:next 1936 1931`, or `backlog:next`, whose set is the whole opted-in backlog. The table is
|
|
199
|
-
`docs/josh-commands.md` → "`josh epic:next`".
|
|
197
|
+
`docs/josh-commands-automation.md` → "`josh epic:next`".
|
|
200
198
|
|
|
201
199
|
Two things stop the command rather than being worked around: a **circular dependency**, and a
|
|
202
200
|
**disagreement between the epic body and the `blocked-by` relations** (an epic written before `josh`
|
|
@@ -484,7 +482,7 @@ than restated — and beside it the one thing this one deliberately refuses: whe
|
|
|
484
482
|
already been filed, from a title comparison (joshuafolkken/kit#1252). **Both run**, and neither
|
|
485
483
|
replaces the other: `pnpm josh issue:file` runs the scout before it creates the issue, and
|
|
486
484
|
`epic:bundle` afterwards, from the real number and the relations recorded against it.
|
|
487
|
-
Full behavior: `docs/josh-commands.md` → "`josh issue:file`".
|
|
485
|
+
Full behavior: `docs/josh-commands-automation.md` → "`josh issue:file`".
|
|
488
486
|
|
|
489
487
|
**When the relation carries an order, record it** in `blocked-by` and in the epic's `Dependencies` —
|
|
490
488
|
on an addition as much as on a new epic. Without it the batch survives and the reason for it does
|
|
@@ -15,7 +15,7 @@ green while spacing, layout and styling are visibly broken. This skill is the lo
|
|
|
15
15
|
In order:
|
|
16
16
|
|
|
17
17
|
1. The routes given as arguments (`/verify-ui / /blog`).
|
|
18
|
-
2. Otherwise, derive the candidates with `pnpm josh ui:routes
|
|
18
|
+
2. Otherwise, derive the candidates with `pnpm josh ui:routes`: it reads the
|
|
19
19
|
change (the branch diff, or the staged diff with `--staged`) and lists the routes it touches,
|
|
20
20
|
tracing a changed shared component to the routes that render it. From that list **pick the ones a
|
|
21
21
|
reader would notice** — that narrowing is the judgement the command leaves to you.
|
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: workflow-commands
|
|
3
|
-
description: The procedures for the Issue-driven shorthand commands `kickoff`, `fullrun`, `halfrun` and `backlogrun` — planning, implementation, the verification gate, unattended epic and backlog execution, the `/code-review` → `followup` chain rule, auto-merge and the Telegram notifications. Read this the moment the user types one of those keywords (with or without `#N` / `new`), before running any command, and read it too when asked what one of them does or when a run of one has to be resumed or repaired.
|
|
3
|
+
description: The procedures for the Issue-driven shorthand commands `kickoff`, `fullrun`, `halfrun`, `prrun` and `backlogrun` — planning, implementation, the verification gate, unattended epic and backlog execution, the `/code-review` → `followup` chain rule, auto-merge and the Telegram notifications. Read this the moment the user types one of those keywords (with or without `#N` / `new`), before running any command, and read it too when asked what one of them does or when a run of one has to be resumed or repaired.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Issue-driven workflow commands
|
|
7
7
|
|
|
8
|
-
`kickoff`, `fullrun`, `halfrun` and `backlogrun` are the shorthand commands this
|
|
8
|
+
`kickoff`, `fullrun`, `halfrun`, `prrun` and `backlogrun` are the shorthand commands this
|
|
9
9
|
package's collaboration workflow is built on. Their procedures live here rather than in `CLAUDE.md`
|
|
10
10
|
because each one applies only while its own command is running.
|
|
11
11
|
|
|
12
|
-
|
|
13
|
-
|
|
12
|
+
Each topic file under `prompts/collaboration-workflow/` sources its own rule; this skill sources the
|
|
13
|
+
procedures. Neither restates the other.
|
|
14
14
|
|
|
15
15
|
## 0. The rule that fires before any of them — explicit invocation
|
|
16
16
|
|
|
17
|
-
**Never start a `kickoff` / `halfrun` / `fullrun` / `backlogrun` workflow (including their
|
|
17
|
+
**Never start a `kickoff` / `halfrun` / `prrun` / `fullrun` / `backlogrun` workflow (including their
|
|
18
18
|
`#N` and `new` variants) unless the user has typed the keyword in the current turn's prompt.** This rule is also
|
|
19
19
|
resident in the AI documents, because it has to hold when this skill has *not* been loaded.
|
|
20
20
|
|
|
@@ -44,6 +44,7 @@ the file its pointer names (for `fullrun`, the step lists are `fullrun-steps.md`
|
|
|
44
44
|
| `kickoff` / `kickoff #N` / `kickoff new` | `kickoff.md` |
|
|
45
45
|
| `fullrun` / `fullrun #N` / `fullrun new` | `fullrun.md` |
|
|
46
46
|
| `halfrun` / `halfrun #N` / `halfrun new` | `halfrun.md` |
|
|
47
|
+
| `prrun` / `prrun #N` / `prrun new` | `prrun.md` — the difference over `fullrun.md`, read with it |
|
|
47
48
|
| `backlogrun` / `backlogrun #N…` / `backlogrun #E…` | `backlogrun.md` — its dispatched child reads `fullrun.md` + `split-assessment.md` in its own unit, not the parent at entry |
|
|
48
49
|
|
|
49
50
|
Each command manifest cites `split-assessment.md` → "The question" — the split decision, read at the
|
|
@@ -92,8 +93,8 @@ procedure alone, and the rest of `backlogrun-park.md` is read only when it is re
|
|
|
92
93
|
**A pointer written `` `X.md` → "Heading" `` is read as that section, never by opening `X.md` whole:**
|
|
93
94
|
|
|
94
95
|
```bash
|
|
95
|
-
pnpm josh doc:section <file.md> "<heading>" # the section, verbatim
|
|
96
|
-
pnpm josh read:set [<keyword>] # what an entry reads, and what it costs
|
|
96
|
+
pnpm josh doc:section <file.md> "<heading>" # the section, verbatim
|
|
97
|
+
pnpm josh read:set [<keyword>] # what an entry reads, and what it costs
|
|
97
98
|
```
|
|
98
99
|
|
|
99
100
|
The section is fetched in the same turn, printed verbatim with its subsections; **a heading that does
|
|
@@ -115,12 +116,12 @@ procedure.
|
|
|
115
116
|
| While implementing | Re-run one check by name, not the whole gate — `pnpm josh lint:related`, `pnpm josh cspell:dot`, `pnpm josh test:related`; the last pair runs in front of the gate, and `pnpm josh review:brief` refuses a brief on a tree neither was green on | `chain-rule.md` |
|
|
116
117
|
| A review has run | Its verdict counts only once `pnpm josh review:attest --check` answers `ok`; `missing` / `mismatch` are refusals `pnpm josh followup` blocks the merge on | `chain-rule.md` → "The brief names the checkout, and a review that read another one is refused" |
|
|
117
118
|
| E2E gate | The CI E2E job where the command ends in a PR (`fullrun` / `backlogrun`, enforced by `pnpm josh followup`); you run `pnpm josh test:e2e` yourself where it does not (`halfrun`) | `prompts/testing-guide.md` → "Closing the E2E gate without a human run" |
|
|
118
|
-
| A defect in
|
|
119
|
+
| A defect in kit's own verification turns up | It runs alone, and a batch resumes only once it has merged, when three conditions all hold (a defect, in kit's own verification, making unrelated PRs answer wrongly on `main` now) — never from how serious it looks | `prompts/collaboration-workflow/wip-cap.md` → 「実行のしかた」 |
|
|
119
120
|
| A command can take minutes | Issue it in the background; the turn never ends at the push (`pnpm josh followup` stays foreground) | §2h → `background-commands.md` → "Background the gate and push" |
|
|
120
121
|
| `pnpm josh issue:state <N>` answers `human_review: yes` | Implement and gate, then stop before the commit | §2z → `needs-human-review.md` |
|
|
121
122
|
| Under `backlogrun`, a stop that would end a batch, or a named non-epic item | Park one child and continue; run a named non-epic item as a `fullrun` | `backlogrun-park.md` → "park and continue"; `backlogrun-child.md` → "When `#N` is not an epic" |
|
|
122
123
|
| `backlogrun`'s authorization | The whole `auto-ok` opted-in pool as well as its named items; `pnpm josh backlog:next` offers them | `backlogrun.md` |
|
|
123
|
-
| First call of
|
|
124
|
+
| First call of any entry | `#N`: `pnpm josh run:entry <N> --to <command>` (claims the tree, except `kickoff`); `new` (not `kickoff`): `pnpm josh run:hold` | §2k; §2f → `working-tree-hold.md` |
|
|
124
125
|
| Same turn as the hold (not a dispatched child, not `kickoff`) | `pnpm josh cost --cut`; `under` continues, `over` stops with a `confirmation` Telegram and the resume command, then `pnpm josh run:release` | `backlogrun-progress.md` → "The hand-off" (shared 135,000 threshold) |
|
|
125
126
|
| Before any work starts (every entry) | The split assessment; the default is not to split — separability **and** a scope clearly over one gate must hold together; a `fullrun` / `halfrun` that finds a split files the epic and **stops** | `split-assessment.md` → "The question" |
|
|
126
127
|
| Another Issue here must land first | A prerequisite is a dependency, not a park (the third of four mid-run discoveries) | §2d → `prerequisite.md` |
|
|
@@ -193,14 +194,14 @@ refuses the second `pnpm josh issue:file` call until it has.
|
|
|
193
194
|
its duplicate and epic answers.** This applies inside every workflow, including observations and review
|
|
194
195
|
follow-ups. The guard refuses any other filing call. Read `issue-scout.md` at that point for the
|
|
195
196
|
duplicate, closed-Issue and epic decisions and for `--distinct`; `issue-fold-existing.md` handles a
|
|
196
|
-
compatible duplicate. `docs/josh-commands.md` → "`josh issue:file`" defines the command.
|
|
197
|
+
compatible duplicate. `docs/josh-commands-automation.md` → "`josh issue:file`" defines the command.
|
|
197
198
|
|
|
198
199
|
## 2f. The working-tree hold — one run per tree
|
|
199
200
|
|
|
200
201
|
**Trigger:** the first call of `fullrun` and `halfrun` alike — before the title is normalized, before
|
|
201
|
-
`git switch main`, and before a `new` entry files its Issue. **Then:**
|
|
202
|
-
`pnpm josh run:entry <N
|
|
203
|
-
`pnpm josh run:hold
|
|
202
|
+
`git switch main`, and before a `new` entry files its Issue. **Then:** a `#N` entry first runs
|
|
203
|
+
`pnpm josh run:entry <N> --to <command>` (§2k, the tree claim included); `new` runs bare
|
|
204
|
+
`pnpm josh run:hold`. `hold` continues; `busy` and `unknown` stop with a `confirmation` Telegram
|
|
204
205
|
carrying what stderr printed. **`kickoff` is exempt** (it edits nothing). A stop that leaves the tree
|
|
205
206
|
clean releases explicitly with `pnpm josh run:release [<N>]`; a `halfrun` or `needs-human-review` stop
|
|
206
207
|
keeps the hold; `pnpm josh followup` releases a merged run. The answer table, the per-child rule and
|
|
@@ -241,6 +242,13 @@ digest it names once.** File up to two worthwhile improvements through `issue:fi
|
|
|
241
242
|
`epic:bundle` included), stack the rest in the observation ledger, and close the step with the command described
|
|
242
243
|
there. A dispatched lane child never runs the retrospective.
|
|
243
244
|
|
|
245
|
+
## 2k. The stage ladder
|
|
246
|
+
|
|
247
|
+
`kickoff` → `halfrun` → `prrun` → `fullrun` (joshuafolkken/kit#3042): the command sets how far a run
|
|
248
|
+
goes, the Issue where it starts. `run:entry <N> --to <command>` prints `stage #<N> — at: … · start:
|
|
249
|
+
…`; **`start: reached` redoes nothing — stop** (at `merged`, the next line answers). A
|
|
250
|
+
stop's `Next:` line names the commands further up. Table: `docs/how-to/run-issues.md`.
|
|
251
|
+
|
|
244
252
|
## 3. What stays resident, and what is read from here
|
|
245
253
|
|
|
246
254
|
**The residency criterion is `prompts/collaboration-workflow/residency.md`, its single source — read
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
## Background the gate and push
|
|
4
4
|
|
|
5
|
-
- **The clean path folds the region into one backgrounded `pnpm josh ship`** (gate → `git -y` →
|
|
5
|
+
- **The clean path folds the region into one backgrounded `pnpm josh ship`** (preflight → gate → `git -y` →
|
|
6
6
|
foreground `followup` → `run:tail`; joshuafolkken/kit#2398). The calls below serve a due second round.
|
|
7
7
|
- Background `pnpm josh gate` beside the review; join it before commit.
|
|
8
8
|
- Issue `pnpm josh git -y` in the background; its completion resumes the run, so the turn never ends
|
|
@@ -131,9 +131,10 @@ turn-end this section forbids. The boundary, its two commands and the resume ver
|
|
|
131
131
|
|
|
132
132
|
**A headless lane child (`claude -p`) is where "a background command re-invokes the run" does not
|
|
133
133
|
hold: its background Bash tasks are killed when its turn ends** (joshuafolkken/kit#2704). It hands the
|
|
134
|
-
gate-to-merge region to `pnpm josh ship --detach` instead (`chain-rule.md` step 0)
|
|
135
|
-
|
|
136
|
-
|
|
134
|
+
gate-to-merge region to a foreground `pnpm josh ship --detach` instead (`chain-rule.md` step 0) —
|
|
135
|
+
its preflight runs before the supervisor exists, so a backgrounded `ship` dies with the turn
|
|
136
|
+
(joshuafolkken/kit#3027); `pnpm josh rule:guard` refuses a backgrounded `josh gate` / `git` /
|
|
137
|
+
`followup` / `ship` there, and the `Stop` hook sends a child with a task still running back to wait.
|
|
137
138
|
|
|
138
139
|
The operational section above is the single source of the rule. `followup.md`, `chain-rule.md` and
|
|
139
140
|
`backlogrun-progress.md` → "Progress while the run is quiet" route here for it rather than restating it.
|
|
@@ -94,7 +94,7 @@ child over" in `backlogrun-lanes.md` carries the command.
|
|
|
94
94
|
JSONL. `JOSH_WORKER_MODEL` overrides Claude Code only; `JOSH_WORKER_EFFORT` covers both providers,
|
|
95
95
|
and legacy `JOSH_LANE_*` applies only here. Bad markers, missing CLI/auth and failure
|
|
96
96
|
refuse or park without fallback or retry.
|
|
97
|
-
`docs/josh-commands.md` → "`josh lane:dispatch`" is the single source.
|
|
97
|
+
`docs/josh-commands-automation.md` → "`josh lane:dispatch`" is the single source.
|
|
98
98
|
|
|
99
99
|
**The parent reads GitHub, never the summary.** That is `epic-child`'s verifier: a unit that reports
|
|
100
100
|
a child finished without its PR merged leaves that child open, and `pnpm josh issue:state <N>` says so
|
|
@@ -164,7 +164,7 @@ unit was given** — this session's own unless the unit was handed a separate wo
|
|
|
164
164
|
the recovery below is taken there too.
|
|
165
165
|
|
|
166
166
|
```bash
|
|
167
|
-
pnpm josh run:liveness <N> --output <path> --process none
|
|
167
|
+
pnpm josh run:liveness <N> --output <path> --process none
|
|
168
168
|
pnpm josh run:liveness <N> --output <path> --process alive
|
|
169
169
|
pnpm josh run:liveness <N> --output <path> --process none --window 45 --repo <owner/repo>
|
|
170
170
|
```
|
|
@@ -290,7 +290,7 @@ separate command to ask first. Rationale: `docs/maintainers/backlogrun-child-rat
|
|
|
290
290
|
preflight is part of the claim".
|
|
291
291
|
|
|
292
292
|
```bash
|
|
293
|
-
answer=$(pnpm josh run:hold 926) #
|
|
293
|
+
answer=$(pnpm josh run:hold 926) # one token on stdout, prose on stderr
|
|
294
294
|
```
|
|
295
295
|
|
|
296
296
|
| Answer | What it found | What to do |
|
|
@@ -65,7 +65,7 @@ it is".
|
|
|
65
65
|
|
|
66
66
|
`pnpm josh epic:next <E> --repo <owner/repo> --lanes` answers with **one issue number per line**, up to
|
|
67
67
|
the number of free lanes, and each of those children runs in a **lane** of its own: a linked git work
|
|
68
|
-
tree with its own branch, its own `.env` and its own dev and preview ports (`docs/josh-commands.md` →
|
|
68
|
+
tree with its own branch, its own `.env` and its own dev and preview ports (`docs/josh-commands-automation.md` →
|
|
69
69
|
"`josh lane:open` / `josh lane:close` / `josh lane:list` / `josh lane:prune`"). **Implementation, the
|
|
70
70
|
verification gate and the review run in parallel; the merges stay serial** — each one lands on the
|
|
71
71
|
`main` the next is then measured against.
|
|
@@ -76,12 +76,14 @@ verification are `pre-gate-cut.md`, the single source. **The child is told apart
|
|
|
76
76
|
resume stage is handed to it, by a mark the dispatch sets** — `JOSH_LANE_CHILD`, the lane's issue
|
|
77
77
|
number (`pre-gate-cut.md` → "The dispatch mark" and "The stage is passed to the resumed child").
|
|
78
78
|
|
|
79
|
-
**One kind of child takes no lane beside anything:
|
|
80
|
-
|
|
81
|
-
from
|
|
79
|
+
**One kind of child takes no lane beside anything: a defect in kit's own verification that makes
|
|
80
|
+
unrelated PRs answer wrongly on `main` today.** It runs alone, and the batch resumes only once it has
|
|
81
|
+
merged. **Decide it from three conditions that must all hold, never from how serious it looks** — is
|
|
82
|
+
it a defect (not an improvement, refactor, removal or feature)? Is it in kit's own verification gate
|
|
82
83
|
(lint / type check / spell check / unit tests), the code review, the pre-push hook, or the merge
|
|
83
|
-
checks
|
|
84
|
-
|
|
84
|
+
checks — not a consumer repository's CI or template? Does it, on `main` now, make unrelated PRs
|
|
85
|
+
answer wrongly (a false green or a false red)? All three, and the issue carries `run:solo`; any one
|
|
86
|
+
missing, and it carries `run:lane` and fills a lane like any other child. `backlog:next` and `epic:next --lanes` enforce both (joshuafolkken/kit#2776,
|
|
85
87
|
#2779). The rule is
|
|
86
88
|
`prompts/collaboration-workflow/wip-cap.md` → 「実行のしかた」, its single source.
|
|
87
89
|
|
|
@@ -137,7 +139,7 @@ runs `lane:open`, then — only when `--stash` is given, which is the first lane
|
|
|
137
139
|
into the lane and re-installs against the lock it brought in, then `lane:dispatch`:
|
|
138
140
|
|
|
139
141
|
```bash
|
|
140
|
-
pid=$(pnpm josh lane:launch "$n") || exit 1 # the child's pid on stdout, nothing else
|
|
142
|
+
pid=$(pnpm josh lane:launch "$n") || exit 1 # the child's pid on stdout, nothing else
|
|
141
143
|
pid=$(pnpm josh lane:launch "$n" --stash "backlogrun: josh latest before lanes") || exit 1 # the first lane only, and only if `josh latest` stashed
|
|
142
144
|
```
|
|
143
145
|
|
|
@@ -33,6 +33,12 @@ authorization, whether it came from a named epic or from the opted-in pool:
|
|
|
33
33
|
is Tier A" carries the re-dispatch itself. A released child takes a lane exactly as any batch child
|
|
34
34
|
does.
|
|
35
35
|
|
|
36
|
+
## The parent does not investigate a lane failure itself
|
|
37
|
+
|
|
38
|
+
**A lane failure whose reason is not on its Issue is read by a unit** — `pnpm josh delegate
|
|
39
|
+
lane-failure-investigation` (joshuafolkken/kit#2947); the parent checks the cited lines and
|
|
40
|
+
`pnpm josh issue:state` before it parks, re-dispatches or files.
|
|
41
|
+
|
|
36
42
|
## `needs-human-review` — the one stop that is not a park
|
|
37
43
|
|
|
38
44
|
A child carrying **`needs-human-review`** is degraded to a `halfrun`-shaped stop and **the whole run ends
|
|
@@ -48,13 +48,13 @@ for a whole interval (that exit says so on standard error). **Nothing in flight
|
|
|
48
48
|
|
|
49
49
|
**`--mark` at every real report.** Whenever this loop reports something of its own — a child merged,
|
|
50
50
|
parked, a stop — run `pnpm josh run:progress --mark` in the same turn to restart the silence clock. The clock is silence, never a timer
|
|
51
|
-
(`docs/josh-commands.md` → "`josh run:progress`").
|
|
51
|
+
(`docs/josh-commands-automation.md` → "`josh run:progress`").
|
|
52
52
|
|
|
53
|
-
**Do not keep a progress clock of your own** — the hook refuses the arm rather than asking
|
|
54
|
-
`scripts/rules/early-heartbeat.ts` → `decide`
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
53
|
+
**Do not keep a progress clock of your own** — the hook refuses the arm rather than asking
|
|
54
|
+
(`scripts/rules/early-heartbeat.ts` → `decide`), though **a single correctly-spaced arm is allowed**. It
|
|
55
|
+
is still not the way to report; the step above prints without arming anything, and `--wait` is not a
|
|
56
|
+
wait timer. Rationale: `docs/maintainers/backlogrun-progress-rationale.md` → "Why the heartbeat reads
|
|
57
|
+
as it does".
|
|
58
58
|
|
|
59
59
|
**The default interval is twenty minutes, overridable — by the person, not the run.**
|
|
60
60
|
`JOSH_PROGRESS_INTERVAL_MINUTES` moves both sides (the guard reads it through the watcher's reader);
|
|
@@ -65,14 +65,11 @@ moves the watcher alone** — it makes the watcher quieter than the floor, never
|
|
|
65
65
|
**Every unscheduled progress statement is answered by `pnpm josh run:progress --once`** — presented in
|
|
66
66
|
the same five field lines, the reply to an explicit ask and the note just after a run starts alike.
|
|
67
67
|
**Never write a clock time the command did not print** (not an approximation, not a placeholder — where
|
|
68
|
-
a field is missing, say so). **`--once` records the report**, so no `--mark` beside it.
|
|
69
|
-
is counted from the record the guard writes when it allows one**, never from the machine's `sleep`
|
|
70
|
-
processes.
|
|
68
|
+
a field is missing, say so). **`--once` records the report**, so no `--mark` beside it.
|
|
71
69
|
|
|
72
70
|
**Every report opens with the time the observation was taken** — not only how long it has been quiet: an
|
|
73
|
-
absolute instant, `at YYYY-MM-DD HH:MM±HH:MM / YYYY-MM-DDTHH:MMZ`. **
|
|
74
|
-
|
|
75
|
-
elapsed figure**, and **the presented line needs no stamp computed for it** — the command prints the
|
|
71
|
+
absolute instant, `at YYYY-MM-DD HH:MM±HH:MM / YYYY-MM-DDTHH:MMZ`. **It is added, never substituted for
|
|
72
|
+
the elapsed figure**, and **the presented line needs no stamp computed for it** — the command prints the
|
|
76
73
|
`at` stamp and the `next` field.
|
|
77
74
|
|
|
78
75
|
**The line carries observations, never "still running", and nothing in it is a verification result** —
|
|
@@ -87,8 +84,8 @@ promoted to interrupt, never demoted to requested.**
|
|
|
87
84
|
|
|
88
85
|
**The report surface belongs to the run, not to the session** (joshuafolkken/kit#2207). The run's
|
|
89
86
|
session-facing events — a plan posted, a child launched, a PR opened, a review round, a park, a cut, a
|
|
90
|
-
stop, a merge — are appended to one ordered stream keyed to the run's identity (`pnpm josh run:event`)
|
|
91
|
-
|
|
87
|
+
stop, a merge — are appended to one ordered stream keyed to the run's identity (`pnpm josh run:event`).
|
|
88
|
+
**Every session is a writer;
|
|
92
89
|
the reader is a script in a pane of the person's own, never a conversation** (#2492):
|
|
93
90
|
`pnpm josh run:event --watch` prints each event the moment it lands, in the session language, and the
|
|
94
91
|
`heartbeat` events say the run is alive when quiet. **No session relays the stream** — name the watch command once, at the first cut or when
|
|
@@ -106,8 +103,7 @@ remaining child blocked behind a parked one, the backlog drained of anything run
|
|
|
106
103
|
streak tripped — is pushed to the interrupt tier: `pnpm josh run:carry --end --stopped "<reason>"` sends one ⏸️ confirmation
|
|
107
104
|
as it ends the record, and because the record is gone by the second `--end` the same stop never notifies
|
|
108
105
|
twice. A parked child is pushed by the child itself, which records the park and sends its own
|
|
109
|
-
`confirmation` before it stops (`backlogrun-park.md`).
|
|
110
|
-
existing notification types and the record the watcher already keeps. Rationale for the tiers:
|
|
106
|
+
`confirmation` before it stops (`backlogrun-park.md`). Rationale for the tiers:
|
|
111
107
|
`docs/maintainers/backlogrun-progress-rationale.md` → "Why the signal tiers are split this way".
|
|
112
108
|
|
|
113
109
|
**A heartbeat is emitted from the moment a run has started, even before any child carries
|
|
@@ -146,9 +142,8 @@ long.
|
|
|
146
142
|
watcher's scope and placement: `docs/maintainers/backlogrun-progress-rationale.md` → "Why the watcher
|
|
147
143
|
runs where it does".
|
|
148
144
|
|
|
149
|
-
**A run that merges needs no teardown; a run that stops has to end the reporting itself.**
|
|
150
|
-
|
|
151
|
-
it. **A stop keeps that label on purpose** — so **no further `--wait` is started** after the stop
|
|
145
|
+
**A run that merges needs no teardown; a run that stops has to end the reporting itself.** **A stop
|
|
146
|
+
keeps the `in-progress` label on purpose** — so **no further `--wait` is started** after the stop
|
|
152
147
|
notification, and any long-running watcher still in the background is stopped in the same turn. That
|
|
153
148
|
covers `halfrun`'s stop before commit, a `needs-human-review` stop, a split or prerequisite stop, and
|
|
154
149
|
a `backlogrun` named issue's failure stop.
|
|
@@ -167,9 +162,9 @@ answers=$(pnpm josh epic:next 858 909 --repo joshuafolkken/kit --lanes)
|
|
|
167
162
|
# every named epic, merged into the same pool — "Several epics in one run" above
|
|
168
163
|
```
|
|
169
164
|
|
|
170
|
-
**`--lanes` is the form to use.**
|
|
171
|
-
|
|
172
|
-
|
|
165
|
+
**`--lanes` is the form to use.** Read a line per child, and treat a single non-numeric line as the
|
|
166
|
+
verdict. Rationale: `docs/maintainers/backlogrun-progress-rationale.md` → "Why a named epic's children
|
|
167
|
+
run in lanes".
|
|
173
168
|
|
|
174
169
|
1. Run the command above.
|
|
175
170
|
2. **One or more numbers** — where the child runs in this session's own checkout, its `fullrun` claim
|
|
@@ -317,8 +312,8 @@ the next turn of this session costs more than the threshold in billed input.
|
|
|
317
312
|
|
|
318
313
|
**135,000 is shared by the scheduler entry, scheduler hand-off and lane worker implementation cut.**
|
|
319
314
|
The value is `CONTEXT_CUT_THRESHOLD` in `scripts/cost-runtime/context-cut-threshold.ts`; `cost --cut`,
|
|
320
|
-
`run:merge
|
|
321
|
-
|
|
315
|
+
`run:merge`, `run_cut.IMPLEMENTATION_CONTEXT_THRESHOLD` and the parent hand-off guard all read it. The
|
|
316
|
+
output ceiling and the entry-read figure are a separate 150,000, not this threshold.
|
|
322
317
|
|
|
323
318
|
### The check is asked at every merge, and delegation does not excuse it
|
|
324
319
|
|
|
@@ -333,7 +328,7 @@ answer, and take `over`'s branch at that child.
|
|
|
333
328
|
|
|
334
329
|
### When to ask, and what to do
|
|
335
330
|
|
|
336
|
-
**Ask once per child, immediately after its merge and `pnpm josh ms
|
|
331
|
+
**Ask once per child, immediately after its merge and `pnpm josh ms`**; mid-child, a hook asks (#2947).
|
|
337
332
|
|
|
338
333
|
### A parent without a completion callback hands off at its first dispatch
|
|
339
334
|
|
|
@@ -443,10 +438,9 @@ survive the cut is re-dispatched, never adopted** — `pnpm josh lane:open <N>`
|
|
|
443
438
|
progress comment is generated from it** (joshuafolkken/kit#2024) — children run, Issues filed,
|
|
444
439
|
**consecutive failures**, and the time the run started. `pnpm josh run:merge` writes the merge into
|
|
445
440
|
the record and mirrors the counters onto the epic comment at every child's merge. **The
|
|
446
|
-
consecutive-failure count is the one that matters
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
in records, not the conversation".
|
|
441
|
+
consecutive-failure count is the one that matters**, and a merge resets it. Rationale:
|
|
442
|
+
`docs/maintainers/backlogrun-progress-rationale.md` → "Why state lives in records, not the
|
|
443
|
+
conversation".
|
|
450
444
|
|
|
451
445
|
### What carries over, and where it lives
|
|
452
446
|
|
|
@@ -463,16 +457,18 @@ in records, not the conversation".
|
|
|
463
457
|
|
|
464
458
|
## Waiting, and never waiting forever
|
|
465
459
|
|
|
466
|
-
| Setting | Value |
|
|
460
|
+
| Setting | Value | Meaning |
|
|
467
461
|
| --- | --- | --- |
|
|
468
462
|
| Polling interval | 60 s | **A floor between two asks, never a clock the parent sets.** It bounds a re-ask made while the parent is *already awake*; what wakes it is "The parent keeps no clock of its own" below. |
|
|
469
463
|
| `backlogrun` idle-watch poll | 5 min | Not the interval above, and a floor in the same sense. |
|
|
470
464
|
| Silent delegated unit | 30 min | Not the child's duration — the time its output has gone **unchanged**. Past it, run the traces above and book a stopped unit as a failure. |
|
|
471
|
-
| Stale `in-progress` | 90 min |
|
|
465
|
+
| Stale `in-progress` | 90 min | Past it, the other session is gone. |
|
|
472
466
|
| Publish wait | 10 min | `josh propagate`'s own budget. A failed publish never appears. |
|
|
473
|
-
| Whole run | 8 h |
|
|
467
|
+
| Whole run | 8 h | Past it, the run needs a person. |
|
|
474
468
|
|
|
475
|
-
Each timeout **ends the wait and reports** — none is retried indefinitely.
|
|
469
|
+
Each timeout **ends the wait and reports** — none is retried indefinitely. Rationale for the figures:
|
|
470
|
+
`docs/maintainers/backlogrun-progress-rationale.md` → "Why the parent waits on classification, not a
|
|
471
|
+
clock". A stale child's label is
|
|
476
472
|
removed first, so the next poll can offer it. **A graph that has deadlocked on a cycle is not this loop's
|
|
477
473
|
to untangle**: `epic:next` detects it and exits with an error.
|
|
478
474
|
|
|
@@ -487,9 +483,7 @@ source and `run:report` the final report.
|
|
|
487
483
|
`docs/maintainers/backlogrun-progress-rationale.md` → "Why the parent waits on classification, not a
|
|
488
484
|
clock".
|
|
489
485
|
|
|
490
|
-
The
|
|
491
|
-
minute after the previous offer, except after collecting a child — waits that cost no AI turns. The
|
|
492
|
-
watcher reports on its own interval, and a judgment session may take its exit as a prompt to act.
|
|
486
|
+
The watcher reports on its own interval, and a judgment session may take its exit as a prompt to act.
|
|
493
487
|
|
|
494
488
|
#### The wake exists only while something is in flight
|
|
495
489
|
|
|
@@ -527,7 +521,7 @@ Per-child completion notifications are unchanged: `pnpm josh followup` sends one
|
|
|
527
521
|
**start** notification when the run begins, and an epic **completion** summary at the end. **Do not
|
|
528
522
|
compose that summary by hand — `pnpm josh run:report` generates it from this invocation's events**
|
|
529
523
|
(joshuafolkken/kit#2249, scoped in #2393): it renders what merged, what parked and why, and what was cut,
|
|
530
|
-
|
|
524
|
+
closing with the release tail below. Its output is the Telegram body too — pass it to
|
|
531
525
|
`pnpm josh notify --body-file`.
|
|
532
526
|
|
|
533
527
|
**That same session asks `pnpm josh release:scope` once, after the last child has merged** — in the
|