@joshuafolkken/kit 1.1455.0 → 1.1514.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 +6 -6
- package/.claude/skills/dependency-update/SKILL.md +26 -55
- package/.claude/skills/epic-commands/SKILL.md +83 -156
- package/.claude/skills/epic-commands/epic-bundle.md +51 -79
- package/.claude/skills/epic-commands/execution-waves.md +43 -81
- package/.claude/skills/verify-ui/SKILL.md +24 -50
- package/.claude/skills/workflow-commands/SKILL.md +7 -9
- package/.claude/skills/workflow-commands/background-commands.md +31 -46
- package/.claude/skills/workflow-commands/backlogrun-child.md +65 -85
- package/.claude/skills/workflow-commands/backlogrun-lanes.md +86 -125
- package/.claude/skills/workflow-commands/backlogrun-park.md +68 -118
- package/.claude/skills/workflow-commands/backlogrun-progress.md +17 -28
- package/.claude/skills/workflow-commands/backlogrun-recovery.md +17 -26
- package/.claude/skills/workflow-commands/backlogrun-steps.md +35 -52
- package/.claude/skills/workflow-commands/backlogrun.md +31 -50
- package/.claude/skills/workflow-commands/chain-rule.md +31 -40
- package/.claude/skills/workflow-commands/delegation.md +12 -8
- package/.claude/skills/workflow-commands/entry-sequence.md +1 -3
- package/.claude/skills/workflow-commands/followup.md +55 -77
- package/.claude/skills/workflow-commands/fullrun-steps.md +3 -5
- package/.claude/skills/workflow-commands/fullrun.md +4 -6
- package/.claude/skills/workflow-commands/halfrun.md +3 -7
- package/.claude/skills/workflow-commands/into-target.md +1 -2
- package/.claude/skills/workflow-commands/issue-comments.md +43 -60
- package/.claude/skills/workflow-commands/issue-scout.md +3 -2
- package/.claude/skills/workflow-commands/kickoff.md +65 -74
- package/.claude/skills/workflow-commands/latest-gate.md +2 -6
- package/.claude/skills/workflow-commands/needs-human-review.md +2 -5
- package/.claude/skills/workflow-commands/observation-filing.md +59 -118
- package/.claude/skills/workflow-commands/observation-ledger.md +52 -112
- package/.claude/skills/workflow-commands/pre-gate-cut.md +88 -142
- package/.claude/skills/workflow-commands/prerequisite.md +11 -17
- package/.claude/skills/workflow-commands/progress-watcher.md +23 -33
- package/.claude/skills/workflow-commands/prrun.md +3 -5
- package/.claude/skills/workflow-commands/retrospective.md +35 -54
- package/.claude/skills/workflow-commands/split-assessment.md +32 -58
- package/.claude/skills/workflow-commands/target-repository.md +1 -2
- package/.claude/skills/workflow-commands/working-tree-hold.md +54 -73
- package/.codex/hooks.json +6 -6
- package/.github/actions/setup-node/action.yml +1 -1
- package/.github/workflows/ci.yml +1 -1
- package/.github/workflows/publish.yml +2 -2
- package/CLAUDE.md +7 -6
- package/cspell/index.yaml +7 -0
- package/dist/CLAUDE.md +7 -6
- package/dist/commands/document-section-cli.js +67 -34
- package/dist/hooks/batch-guard.js +6 -6
- package/dist/hooks/chunk-4KKD2UTK.js +66 -0
- package/dist/hooks/{chunk-GPLGZ6IC.js → chunk-6TS2JD6D.js} +14 -3
- package/dist/hooks/chunk-7DSBJVFH.js +50 -0
- package/dist/hooks/{chunk-5H4SSDSD.js → chunk-A65Y4YOR.js} +3 -3
- package/dist/hooks/{chunk-3C4XRYG6.js → chunk-APUO6U4J.js} +102 -19
- package/dist/hooks/{chunk-IX6TTTI6.js → chunk-EFXE6C37.js} +8 -22
- package/dist/hooks/chunk-GP4IEC4O.js +20 -0
- package/dist/hooks/chunk-JP45SOCJ.js +56 -0
- package/dist/hooks/{chunk-OLMO72ON.js → chunk-LAOV7NLM.js} +1 -1
- package/dist/hooks/chunk-M4HGZV7U.js +83 -0
- package/dist/hooks/{chunk-TBJFTSUY.js → chunk-O6GDRNJB.js} +9 -7
- package/dist/hooks/{chunk-HFGWYGUV.js → chunk-PF2NZL2A.js} +5 -5
- package/dist/hooks/{chunk-WNLVGT7E.js → chunk-PTICX4OL.js} +4 -5
- package/dist/hooks/{chunk-HHI6FO3R.js → chunk-RT27QRJW.js} +763 -1515
- package/dist/hooks/{chunk-7WQBPLUN.js → chunk-SYOTDYCI.js} +1149 -1095
- package/dist/hooks/{chunk-LIAFCXL7.js → chunk-TNUMY6NL.js} +1519 -1332
- package/dist/hooks/chunk-UPUZF3AN.js +279 -0
- package/dist/hooks/{chunk-Z4XI7CZS.js → chunk-WK6SMBIC.js} +1932 -784
- package/dist/hooks/codex-hook-adapter.js +17 -14
- package/dist/hooks/duplicate-read-guard.js +7 -7
- package/dist/hooks/format-edited.js +5 -4
- package/dist/hooks/inputs.json +302 -247
- package/dist/hooks/investigation-guard.js +8 -11
- package/dist/hooks/pretool-guard.js +16 -13
- package/dist/hooks/session-lang.js +372 -26
- package/dist/hooks/stop-guard.js +2593 -189
- package/dist/josh.js +2128 -282
- package/dist/managed-marker/index.js +1 -2
- package/dist/version/index.js +15 -12
- package/eslint/base.js +2 -1
- package/eslint/rules/unicorn.js +16 -0
- package/lefthook/base.yml +5 -3
- package/package.json +14 -12
- package/prompts/coding-standards.md +12 -22
- package/prompts/collaboration-workflow/file-edits.md +25 -45
- package/prompts/collaboration-workflow/gh-rest.md +19 -36
- package/prompts/collaboration-workflow/glossary.md +5 -7
- package/prompts/collaboration-workflow/issue-citation.md +6 -14
- package/prompts/collaboration-workflow/issue-template.md +40 -32
- package/prompts/collaboration-workflow/lane-instructions.md +35 -0
- package/prompts/collaboration-workflow/operating-rules.md +33 -46
- package/prompts/collaboration-workflow/output-bounds.md +15 -15
- package/prompts/collaboration-workflow/overview.md +14 -19
- package/prompts/collaboration-workflow/plan-comment.md +13 -13
- package/prompts/collaboration-workflow/principles.md +57 -54
- package/prompts/collaboration-workflow/proposal-request.md +1 -9
- package/prompts/collaboration-workflow/report-format.md +41 -49
- package/prompts/collaboration-workflow/residency.md +15 -11
- package/prompts/collaboration-workflow/rule-delivery.md +7 -15
- package/prompts/collaboration-workflow/shell-body.md +10 -20
- package/prompts/collaboration-workflow/turn-batching.md +8 -14
- package/prompts/collaboration-workflow/upstream-interrupt.md +26 -34
- package/prompts/collaboration-workflow/wip-cap.md +26 -32
- package/prompts/collaboration-workflow.md +25 -25
- package/prompts/refactoring.md +33 -43
- package/prompts/review-rubric.md +84 -129
- package/prompts/review.md +110 -141
- package/prompts/sonar-hotspot-handling.md +22 -50
- package/prompts/testing-guide.md +48 -99
- package/scripts/adopt/adopt-toolkits.ts +2 -4
- package/scripts/agent/agent-argv.ts +20 -4
- package/scripts/agent/agent-exit-record.ts +23 -1
- package/scripts/agent/agent-role-profile.ts +101 -45
- package/scripts/agent/agent-safe-text.ts +60 -0
- package/scripts/agent/claude-agent-argv.ts +14 -0
- package/scripts/agent/codex-agent-argv.ts +9 -2
- package/scripts/agent/lane-instructions.ts +144 -0
- package/scripts/backlog/backlog-budget-cli.ts +1 -2
- package/scripts/backlog/backlog-budget.ts +4 -4
- package/scripts/backlog/backlog-drive-carried.ts +26 -0
- package/scripts/backlog/backlog-drive-cli.ts +10 -5
- package/scripts/backlog/backlog-drive-named.ts +3 -5
- package/scripts/backlog/backlog-drive-restore.ts +28 -2
- package/scripts/backlog/backlog-drive-seats.ts +27 -0
- package/scripts/backlog/backlog-drive.ts +11 -6
- package/scripts/backlog/backlog-occupied.ts +56 -0
- package/scripts/backlog/backlog-ready.ts +59 -15
- package/scripts/behavior/behavior-rules.ts +3 -2
- package/scripts/cost-runtime/codex-usage.ts +4 -2
- package/scripts/cost-runtime/cost-cli.ts +1 -2
- package/scripts/delegation/duplicate-read-guard.ts +2 -2
- package/scripts/delegation/investigation-guard.ts +15 -65
- package/scripts/delegation/investigation-reads.ts +1 -2
- package/scripts/discovery/repo-discovery.ts +4 -2
- package/scripts/discovery/repo-origin.ts +2 -4
- package/scripts/doctor/doctor-logic.ts +6 -3
- package/scripts/document/document-byte-budget.ts +28 -27
- package/scripts/document/document-byte-check.ts +1 -2
- package/scripts/document/document-section-cli.ts +17 -5
- package/scripts/document/entry-read-budget.ts +3 -3
- package/scripts/document/read-set-cli.ts +4 -1
- package/scripts/epic/epic-audit-orphans.ts +5 -8
- package/scripts/epic/epic-audit-rationale.ts +8 -2
- package/scripts/epic/epic-audit.ts +52 -1
- package/scripts/epic/epic-bundle-cli.ts +1 -2
- package/scripts/epic/epic-bundle-evidence.ts +49 -26
- package/scripts/epic/epic-bundle-referenced.ts +14 -3
- package/scripts/epic/epic-bundle.ts +17 -9
- package/scripts/epic/epic-chains.ts +6 -2
- package/scripts/epic/epic-close-comment.ts +1 -2
- package/scripts/followup/git-followup-workflow.ts +19 -1
- package/scripts/gate/check-inputs.ts +129 -0
- package/scripts/gate/check-reuse.ts +162 -0
- package/scripts/gate/core-budget.ts +93 -44
- package/scripts/gate/core-wait.ts +130 -0
- package/scripts/gate/free-cores.ts +49 -0
- package/scripts/gate/gate-ledger.ts +17 -3
- package/scripts/gate/gate-plan.ts +23 -1
- package/scripts/gate/gate-report.ts +15 -2
- package/scripts/gate/gate-run-steps.ts +150 -0
- package/scripts/gate/held-mark.ts +55 -0
- package/scripts/gate/machine-capacity.ts +70 -11
- package/scripts/gate/pre-commit-type-check.ts +14 -1
- package/scripts/gate/verification-gate.ts +65 -127
- package/scripts/gh/git-gh-issue-rest.ts +1 -0
- package/scripts/gh/git-gh-issue-write.ts +24 -2
- package/scripts/gh/git-pr.ts +19 -3
- package/scripts/git/git-common-directory.ts +3 -3
- package/scripts/git/git-diff-reads.ts +16 -9
- package/scripts/git/git-execa-error.ts +1 -2
- package/scripts/git/main-merge-regenerate.ts +78 -0
- package/scripts/git/main-merge.ts +14 -5
- package/scripts/hooks/batch-guard.ts +5 -8
- package/scripts/hooks/format-edited-file.ts +10 -4
- package/scripts/hooks/pre-commit-lint.ts +91 -0
- package/scripts/hooks/pre-push-unit.ts +15 -4
- package/scripts/hooks/pretool-guard.ts +48 -79
- package/scripts/hooks/reserved-run.ts +1 -0
- package/scripts/hooks/run-hook.sh +10 -12
- package/scripts/hooks/step-zero-notice.ts +3 -2
- package/scripts/hooks/stop-actions.ts +204 -0
- package/scripts/hooks/stop-guard.ts +62 -21
- package/scripts/init/hook-command-rewrite.ts +6 -2
- package/scripts/init/hook-launch.ts +12 -7
- package/scripts/init/init-logic-deploy-vps.ts +4 -2
- package/scripts/issue/behavior-change-lint.ts +12 -6
- package/scripts/issue/expected-effect-lint.ts +59 -0
- package/scripts/issue/issue-cite-cli.ts +35 -15
- package/scripts/issue/issue-classification.ts +1 -1
- package/scripts/issue/issue-lint-cli.ts +5 -3
- package/scripts/issue/issue-scout-cli.ts +22 -16
- package/scripts/issue/markdown-section.ts +19 -5
- package/scripts/josh/command-usage.ts +110 -0
- package/scripts/josh/file-map-stamp.ts +1 -3
- package/scripts/josh/hook-decision.ts +17 -2
- package/scripts/josh/josh-command-map.ts +2 -0
- package/scripts/josh/josh-command-types.ts +55 -9
- package/scripts/josh/josh-commands-ai.ts +13 -0
- package/scripts/josh/josh-commands-development.ts +1 -1
- package/scripts/josh/josh-commands-hooks.ts +6 -0
- package/scripts/josh/josh-commands-lane.ts +10 -1
- package/scripts/josh/josh-commands-workflow.ts +5 -0
- package/scripts/josh/josh-logic.ts +6 -15
- package/scripts/josh/josh-usage-automation.ts +121 -0
- package/scripts/josh/josh-usage-backlog.ts +180 -0
- package/scripts/josh/josh-usage-developer.ts +230 -0
- package/scripts/josh/josh-usage-hooks.ts +38 -0
- package/scripts/josh/josh-usage-issue.ts +205 -0
- package/scripts/josh/josh-usage-review.ts +101 -0
- package/scripts/josh/josh-usage-run.ts +252 -0
- package/scripts/josh/josh-usage-session.ts +238 -0
- package/scripts/josh/josh-usage-workflow.ts +212 -0
- package/scripts/josh/josh.ts +14 -5
- package/scripts/josh/package-directory.ts +20 -0
- package/scripts/lane/lane-await.ts +3 -2
- package/scripts/lane/lane-capacity.ts +8 -2
- package/scripts/lane/lane-check-stats.ts +56 -0
- package/scripts/lane/lane-child-invocation.ts +49 -5
- package/scripts/lane/lane-dispatch.ts +3 -3
- package/scripts/lane/lane-guard-policy.ts +5 -5
- package/scripts/lane/lane-handoff.ts +8 -1
- package/scripts/lane/lane-install.ts +12 -4
- package/scripts/lane/lane-ledger.ts +52 -1
- package/scripts/lane/lane-limit-cli.ts +8 -9
- package/scripts/lane/lane-load.ts +9 -2
- package/scripts/lane/lane-measure-cli.ts +4 -0
- package/scripts/lane/lane-parked.ts +18 -0
- package/scripts/lane/lane-preserve.ts +29 -1
- package/scripts/lane/lane-process-load.ts +125 -0
- package/scripts/lane/lane-process-stats.ts +93 -0
- package/scripts/lane/lane-registry.ts +17 -10
- package/scripts/lane/lane-restart.ts +5 -26
- package/scripts/lane/lane-session-action.ts +146 -0
- package/scripts/lane/lane-session-broker.ts +68 -125
- package/scripts/lane/lane-spent.ts +14 -3
- package/scripts/lane/lane-stats.ts +1 -0
- package/scripts/lane/lane-withdraw-cli.ts +71 -0
- package/scripts/lane/lane-withdraw.ts +182 -0
- package/scripts/lint/format.ts +4 -4
- package/scripts/lint/lint-parallel.ts +10 -3
- package/scripts/lint/lint-related-scope.ts +4 -1
- package/scripts/managed-marker/managed-marker-logic.ts +1 -2
- package/scripts/notify/telegram-test.ts +10 -5
- package/scripts/overrides/lockfile-overrides.ts +1 -3
- package/scripts/propagate/propagate.ts +1 -2
- package/scripts/release/release-progress.ts +3 -2
- package/scripts/report/report-format-reference.ts +2 -0
- package/scripts/report/report-lint.ts +7 -4
- package/scripts/review/acceptance-map-check.ts +61 -0
- package/scripts/review/acceptance-map.ts +205 -0
- package/scripts/review/review-brief-cli.ts +1 -1
- package/scripts/review/review-record-cli.ts +6 -2
- package/scripts/rules/agent-model.ts +59 -0
- package/scripts/rules/delivered-rules.ts +11 -2
- package/scripts/rules/destructive-command.ts +6 -9
- package/scripts/rules/direct-filing.ts +3 -7
- package/scripts/rules/early-heartbeat.ts +7 -18
- package/scripts/rules/file-body.ts +6 -13
- package/scripts/rules/filing-cap.ts +4 -6
- package/scripts/rules/firing-point.ts +6 -5
- package/scripts/rules/git-force.ts +5 -9
- package/scripts/rules/guard-remedy.ts +117 -0
- package/scripts/rules/implementation-cut.ts +37 -35
- package/scripts/rules/index-guard.ts +4 -7
- package/scripts/rules/issue-comments.ts +67 -16
- package/scripts/rules/josh-git-bare.ts +3 -6
- package/scripts/rules/lane-background.ts +10 -21
- package/scripts/rules/lane-carry-conflict.ts +7 -17
- package/scripts/rules/lane-interactive-ask.ts +6 -11
- package/scripts/rules/lane-park.ts +5 -13
- package/scripts/rules/lane-split-park.ts +2 -7
- package/scripts/rules/lane-switch-main.ts +9 -12
- package/scripts/rules/last-prompt.ts +50 -5
- package/scripts/rules/oracle-consulted.ts +4 -5
- package/scripts/rules/oracle-list-cli.ts +7 -0
- package/scripts/rules/piped-verification.ts +84 -32
- package/scripts/rules/poll-loop.ts +7 -17
- package/scripts/rules/pre-gate-cut.ts +7 -21
- package/scripts/rules/prior-comment-read.ts +7 -5
- package/scripts/rules/protected-files.ts +5 -9
- package/scripts/rules/raw-field-body.ts +3 -7
- package/scripts/rules/rule-body-guard.ts +4 -11
- package/scripts/rules/rule-list.ts +4 -1
- package/scripts/rules/rule-registry-rows.ts +10 -0
- package/scripts/rules/rule-registry.ts +7 -4
- package/scripts/rules/rule-rewrite.ts +114 -0
- package/scripts/rules/rule-value.ts +7 -1
- package/scripts/rules/run-tail-rule.ts +6 -22
- package/scripts/rules/shell-body-trigger.ts +4 -6
- package/scripts/rules/shell-segments.ts +22 -0
- package/scripts/rules/stop-decision.ts +77 -0
- package/scripts/rules/stop-rules.ts +164 -77
- package/scripts/rules/tail-commands.ts +15 -1
- package/scripts/rules/test-declared-commit.ts +4 -10
- package/scripts/rules/third-party-write.ts +5 -10
- package/scripts/rules/worktree-guard.ts +5 -12
- package/scripts/run/board/run-board-cli.ts +2 -0
- package/scripts/run/board/run-board-closed.ts +8 -2
- package/scripts/run/board/run-board-github.ts +19 -3
- package/scripts/run/board/run-board-header.ts +4 -1
- package/scripts/run/board/run-board-idle.ts +31 -0
- package/scripts/run/board/run-board-labels.ts +2 -0
- package/scripts/run/board/run-board-layout.ts +1 -1
- package/scripts/run/board/run-board-read.ts +25 -12
- package/scripts/run/board/run-board-reason.ts +17 -4
- package/scripts/run/board/run-board-render-legend.ts +1 -0
- package/scripts/run/board/run-board-render-slot.ts +1 -1
- package/scripts/run/board/run-board-render-waits.ts +41 -0
- package/scripts/run/board/run-board-render.ts +6 -1
- package/scripts/run/board/run-board-row-yield.ts +1 -0
- package/scripts/run/board/run-board-state.ts +9 -0
- package/scripts/run/board/run-board-status.ts +89 -23
- package/scripts/run/board/run-board-thanks.ts +7 -2
- package/scripts/run/board/run-board-tick.ts +37 -8
- package/scripts/run/carry/run-carry-args.ts +1 -3
- package/scripts/run/carry/run-carry-conversation.ts +7 -2
- package/scripts/run/cut/run-cut-cli.ts +18 -22
- package/scripts/run/cut/run-cut-decline.ts +72 -0
- package/scripts/run/cut/run-cut-ready.ts +74 -0
- package/scripts/run/cut/run-cut-report.ts +29 -0
- package/scripts/run/cut/run-cut.ts +10 -1
- package/scripts/run/detached-launch.ts +23 -4
- package/scripts/run/entry/run-entry-cli.ts +8 -1
- package/scripts/run/event/run-event-render.ts +1 -0
- package/scripts/run/event/run-event-scope.ts +19 -1
- package/scripts/run/event/run-event-stream-emit.ts +13 -6
- package/scripts/run/event/run-event-stream.ts +4 -0
- package/scripts/run/hold/run-hold-cli.ts +14 -3
- package/scripts/run/hold/run-hold-session.ts +46 -0
- package/scripts/run/hold/run-hold.ts +13 -4
- package/scripts/run/launch-priority.ts +32 -0
- package/scripts/run/merge/run-merge-cli.ts +16 -42
- package/scripts/run/merge/run-merge-ship.ts +59 -1
- package/scripts/run/merge/run-merge-signals.ts +99 -0
- package/scripts/run/merge/run-merge-steps.ts +11 -1
- package/scripts/run/merge/run-merge.ts +22 -9
- package/scripts/run/run-ending.ts +31 -3
- package/scripts/run/run-liveness.ts +1 -1
- package/scripts/run/run-parent-cut-hook.ts +5 -10
- package/scripts/run/run-poll-hook.ts +157 -0
- package/scripts/run/run-preflight.ts +1 -2
- package/scripts/run/run-step-cli.ts +22 -15
- package/scripts/run/run-step-section.ts +85 -0
- package/scripts/run/run-stop-notify.ts +1 -2
- package/scripts/run/run-watcher-guard.ts +6 -3
- package/scripts/run/ship/run-ship-cli.ts +5 -12
- package/scripts/run/ship/run-ship-detach.ts +9 -0
- package/scripts/run/ship/run-ship-next.ts +10 -2
- package/scripts/run/ship/run-ship-overlap.ts +195 -0
- package/scripts/run/ship/run-ship-pre-detach.ts +33 -15
- package/scripts/run/ship/run-ship-preflight.ts +28 -2
- package/scripts/run/ship/run-ship-return.ts +31 -7
- package/scripts/run/ship/run-ship-review-steps.ts +25 -14
- package/scripts/run/ship/run-ship-review.ts +15 -2
- package/scripts/run/ship/run-ship-steps.ts +1 -1
- package/scripts/run/ship/run-ship-stop-context.ts +206 -0
- package/scripts/run/ship/run-ship-sync.ts +14 -6
- package/scripts/run/tidy/run-tidy-cli.ts +3 -3
- package/scripts/run/tidy/run-tidy-lanes.ts +3 -2
- package/scripts/safe-chain/project-config.ts +7 -2
- package/scripts/sync/sync-hook-safety.ts +8 -2
- package/scripts/test/test-e2e-guard.ts +30 -5
- package/scripts/test/test-unit-guard.ts +16 -1
- package/scripts/test/unit-worker-share.ts +26 -3
- package/scripts/time-runtime/time-batch-guard.ts +3 -3
- package/scripts/time-runtime/time-hook-transcript.ts +3 -2
- package/scripts/time-runtime/time-shell.ts +39 -4
- package/scripts/time-runtime/time-spans.ts +1 -0
- package/scripts/time-runtime/time-tool-call.ts +7 -0
- package/scripts/version/effective-upstream.ts +3 -4
- package/scripts/version/kit-version-config.ts +8 -2
- package/scripts/version/latest-corepack.ts +1 -2
- package/scripts/version/release-hold.ts +11 -4
- package/scripts/version/version-commands.ts +12 -4
- package/templates/gitignore +6 -2
- package/dist/hooks/chunk-D5QBTOCZ.js +0 -68
- package/dist/hooks/chunk-UT7YC3N2.js +0 -56
|
@@ -1,10 +1,5 @@
|
|
|
1
1
|
# `backlogrun` — the manifest (named issues, epics and the opted-in backlog)
|
|
2
2
|
|
|
3
|
-
**This file is the manifest, not the procedure**: the ordered flow as terse triggers, and the route
|
|
4
|
-
table naming the one section each moment reads. Rationale and provenance:
|
|
5
|
-
`docs/maintainers/backlogrun-rationale.md` → "Why the loop's position is computed";
|
|
6
|
-
`docs/maintainers/backlogrun-rationale.md` → "Where each rule came from".
|
|
7
|
-
|
|
8
3
|
**`backlogrun` names either nothing, or the issues and epics to run first.** With no argument it runs
|
|
9
4
|
whatever `pnpm josh backlog:next` offers — the whole opted-in backlog, every issue carrying `auto-ok`
|
|
10
5
|
plus every child of an epic whose root carries it, ordered by dependency and grouped into waves. With
|
|
@@ -12,9 +7,9 @@ plus every child of an epic whose root carries it, ordered by dependency and gro
|
|
|
12
7
|
that same backlog. **`--only` stops it after the named list**, draining nothing.
|
|
13
8
|
|
|
14
9
|
**The loop's current position is computed, not carried in the conversation.** `pnpm josh run:step <N>`
|
|
15
|
-
reads
|
|
16
|
-
|
|
17
|
-
for the parent itself
|
|
10
|
+
reads it from the event stream, the carry record and the issue state, and prints the next single
|
|
11
|
+
action — a runnable command, or the one point a person has to judge — followed by the section that
|
|
12
|
+
governs it. With no `<N>` it answers for the parent itself, from the carry record alone.
|
|
18
13
|
|
|
19
14
|
**A named item may be a single issue or an epic.** A single-issue item is one `fullrun`; **a named epic runs its children in
|
|
20
15
|
dependency order across the free lanes, and the run does not advance to the next named item until
|
|
@@ -29,52 +24,46 @@ is still that one invocation (`backlogrun-steps.md` → "The session cut is insi
|
|
|
29
24
|
|
|
30
25
|
## The manifest — the ordered flow
|
|
31
26
|
|
|
27
|
+
A section `run:step` prints is not fetched again. Every other one is read at its step with
|
|
28
|
+
`pnpm josh doc:section <file> "<heading>"` — never a whole document (`SKILL.md` → "A section
|
|
29
|
+
reference is read as a section").
|
|
30
|
+
|
|
32
31
|
1. **Claim nothing at the entry — this parent orchestrates and never implements.** The working-tree
|
|
33
32
|
hold, the split assessment and `fullrun.md` are read by a dispatched child inside its own delegated
|
|
34
33
|
`fullrun` unit, never at the parent's entry.
|
|
35
34
|
2. **Begin the carry record before the plan** — `pnpm josh run:carry --begin "<invocation>" --owner
|
|
36
|
-
"$PPID"` and `pnpm josh run:wake --start`, in the same turn as the first `pnpm josh ms`.
|
|
35
|
+
"$PPID"` and `pnpm josh run:wake --start`, in the same turn as the first `pnpm josh ms`. Its answers:
|
|
36
|
+
`backlogrun-steps.md` → "The session cut is inside the invocation"; a resumed session:
|
|
37
|
+
`backlogrun-progress.md` → "Resuming after a cut".
|
|
37
38
|
3. **What this invocation approves** — the opted-in pool, a run's own filings once bundled, and the
|
|
38
|
-
brake that bounds the amount
|
|
39
|
+
brake that bounds the amount: `backlogrun-steps.md` → "What one invocation approves".
|
|
39
40
|
4. **Report the plan before the first child** — `pnpm josh backlog:plan`, then resolve every
|
|
40
41
|
`needs-decision` issue decidable from its body in one pass, recording `blocked-by`, `run:solo` and
|
|
41
|
-
`run:lane` in the same pass.
|
|
42
|
+
`run:lane` in the same pass: `backlogrun-steps.md` → "The plan, before the first child starts";
|
|
43
|
+
`run:solo`: `backlogrun-lanes.md` → "A solo run".
|
|
42
44
|
5. **Named issues run first, in order** — each as a delegated `fullrun`, one at a time, then the pool;
|
|
43
45
|
`--only` stops after the list.
|
|
46
|
+
- Once per session: `backlogrun-steps.md` → "What runs once per session, not once per issue" and
|
|
47
|
+
`backlogrun-child.md` → "`josh latest` runs once per session, not once per child"
|
|
48
|
+
(`latest-gate.md` whole on `required`).
|
|
49
|
+
- The watcher: `progress-watcher.md` → "Progress while the run is quiet".
|
|
50
|
+
- Lanes: `backlogrun-lanes.md` → "Once per repository, before the first lane opens", by hand
|
|
51
|
+
`backlogrun-lanes.md` → "Opening one lane and dispatching its child".
|
|
52
|
+
- Dispatch: `backlogrun-child.md` → "Each child runs in a delegated unit".
|
|
44
53
|
6. **The loop belongs to the supervisor — hand it over with what the bare `pnpm josh run:step`
|
|
45
54
|
prints**, whatever the plan held: `run:wake` runs `backlog:drive`, which returns a branch to an AI
|
|
46
|
-
session only when it needs judgment.
|
|
55
|
+
session only when it needs judgment (`backlogrun-steps.md` → "The loop").
|
|
56
|
+
- An `epic #N` hand-back or a `merge` branch: `backlogrun-progress.md` → "Running a named epic's
|
|
57
|
+
children".
|
|
58
|
+
- A merge answered `over`: `backlogrun-progress.md` → "The hand-off".
|
|
59
|
+
- A unit gone silent: `backlogrun-recovery.md` → "A delegated unit that stopped without reporting".
|
|
60
|
+
- A child that cannot finish: `backlogrun-park.md` → "park and continue".
|
|
47
61
|
7. **End the record when the run ends** — `run:report`, then `run:carry --end` (or `--end --stopped
|
|
48
|
-
"<reason>"`) and `run:wake --stop
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
**Read one section, at the moment its row names, with `pnpm josh doc:section <file> "<heading>"`** —
|
|
54
|
-
never a whole document (`SKILL.md` → "A section reference is read as a section"):
|
|
55
|
-
|
|
56
|
-
| The moment | Read |
|
|
57
|
-
| --- | --- |
|
|
58
|
-
| The entry: the carry record and its answers | `backlogrun-steps.md` → "The session cut is inside the invocation" |
|
|
59
|
-
| What the invocation may merge, and the `auto-ok` rule | `backlogrun-steps.md` → "What one invocation approves" |
|
|
60
|
-
| Before the first child: the plan and the decision pass | `backlogrun-steps.md` → "The plan, before the first child starts" |
|
|
61
|
-
| The driver hands a branch back | `backlogrun-steps.md` → "The loop" |
|
|
62
|
-
| Once per session | `backlogrun-steps.md` → "What runs once per session, not once per issue" |
|
|
63
|
-
| `josh latest:scope` answers `required` | `latest-gate.md` (whole) |
|
|
64
|
-
| Starting the progress watcher | `progress-watcher.md` → "Progress while the run is quiet" |
|
|
65
|
-
| The run ends | `backlogrun-steps.md` → "End the record when the run ends" |
|
|
66
|
-
| Labelling an issue `run:solo` | `backlogrun-lanes.md` → "A solo run" |
|
|
67
|
-
| Before the first lane opens | `backlogrun-lanes.md` → "Once per repository, before the first lane opens" |
|
|
68
|
-
| Opening a lane by hand | `backlogrun-lanes.md` → "Opening one lane and dispatching its child" |
|
|
69
|
-
| The first child is in hand | `backlogrun-child.md` → "`josh latest` runs once per session, not once per child" |
|
|
70
|
-
| Dispatching a child | `backlogrun-child.md` → "Each child runs in a delegated unit" |
|
|
71
|
-
| An `epic #N` hand-back, a `merge` branch, or a `run:merge` token | `backlogrun-progress.md` → "Running a named epic's children" |
|
|
72
|
-
| A merge answered `over` | `backlogrun-progress.md` → "The hand-off" |
|
|
73
|
-
| A resumed session | `backlogrun-progress.md` → "Resuming after a cut" |
|
|
74
|
-
| The run's last merge | `backlogrun-progress.md` → "Who sends the summary, and who propagates" |
|
|
75
|
-
| `josh release:scope`, after the last merge | `followup.md` → "When `pnpm josh release` runs" |
|
|
76
|
-
| A unit went silent | `backlogrun-recovery.md` → "A delegated unit that stopped without reporting" |
|
|
77
|
-
| A child cannot finish | `backlogrun-park.md` → "park and continue" |
|
|
62
|
+
"<reason>"`) and `run:wake --stop`: `backlogrun-steps.md` → "End the record when the run ends".
|
|
63
|
+
- An empty plan is not that end; the driver's idle watch decides it. A person stops a run from the
|
|
64
|
+
terminal with `pnpm josh backlogrun --stop`, which makes both calls.
|
|
65
|
+
- The last merge: `backlogrun-progress.md` → "Who sends the summary, and who propagates", then
|
|
66
|
+
`followup.md` → "When `pnpm josh release` runs".
|
|
78
67
|
|
|
79
68
|
## Guards
|
|
80
69
|
|
|
@@ -85,11 +74,3 @@ never a whole document (`SKILL.md` → "A section reference is read as a section
|
|
|
85
74
|
| Consecutive child failures | 3 | Stop and report; something is wrong with the environment, not the children. |
|
|
86
75
|
|
|
87
76
|
A failure that is not consecutive parks its child and the run continues.
|
|
88
|
-
|
|
89
|
-
## This file is the single source of the `backlogrun` procedure
|
|
90
|
-
|
|
91
|
-
`CLAUDE.md` carries the keyword's row in the shorthand table and the explicit-invocation rule;
|
|
92
|
-
`SKILL.md` → §1 routes here. This manifest names which children there are and in what order; each
|
|
93
|
-
step's procedure is the section its route-table row names. Where any of them could disagree, the rule
|
|
94
|
-
is that this manifest and `backlogrun-steps.md` add nothing to a child's procedure — they only say
|
|
95
|
-
which children there are.
|
|
@@ -8,7 +8,8 @@ Review results and successful pushes are never turn boundaries.
|
|
|
8
8
|
0. **A lane child**: `pnpm josh main:merge`, the self-check (`prompts/review.md` → "Before round 1 —
|
|
9
9
|
the implementer's self-check"), the scoped pair, `pnpm josh ship --detach --review
|
|
10
10
|
"<title> #<N>"` (`--cite <N>`), then **end the turn** on `launched`/`busy`. A stop relaunches a child
|
|
11
|
-
whose prompt
|
|
11
|
+
whose prompt carries the failed output's tail and the changed files (`pnpm josh ship --log <N>` when
|
|
12
|
+
the stage printed nothing) and (Anthropic lane) the re-detach to run after
|
|
12
13
|
the fix — `pnpm josh ship --detach`, `--review` only if the stopped ship carried it and stopped before
|
|
13
14
|
round 2, which is final (`scripts/run/ship/run-ship-next.ts`); the supervisor skips a recorded round 1.
|
|
14
15
|
`failed` → step 1. A backgrounded `ship` issued alone is moved to the foreground by the hook
|
|
@@ -18,7 +19,8 @@ Review results and successful pushes are never turn boundaries.
|
|
|
18
19
|
(`prompts/review.md` → "Before round 1 — the implementer's self-check"), run the final scoped lint/test pair and
|
|
19
20
|
`pnpm josh run:review`: it starts `pnpm josh gate` in the background and prints the `/code-review`
|
|
20
21
|
brief in one call, so the two overlap. Launch the `/code-review` subagent as the `general-purpose`
|
|
21
|
-
agent type with that brief
|
|
22
|
+
agent type with that brief and the alias of its `model=` id (`claude-opus-5-5` → `opus`) (every
|
|
23
|
+
tool, so `--fix` applies; never a guessed type name).
|
|
22
24
|
Never load the review skill in the main line.
|
|
23
25
|
2. Once the review returns, run `pnpm josh run:review --join` to join and read the gate before
|
|
24
26
|
committing; it exits non-zero on a red gate. Fix any red check, then rerun the affected scoped check
|
|
@@ -40,7 +42,8 @@ Review results and successful pushes are never turn boundaries.
|
|
|
40
42
|
**`pnpm josh followup` refuses the merge until the round is recorded**
|
|
41
43
|
(`pnpm josh review:record --check --issue <N>`).
|
|
42
44
|
5. **The clean path ships in one call** — with no second round due, background
|
|
43
|
-
`pnpm josh ship "<title> #<N>" --body-file <evidence.md
|
|
45
|
+
`pnpm josh ship "<title> #<N>" --body-file <evidence.md>` — the file carries `## 実機証跡` and
|
|
46
|
+
`## 受け入れ条件の対応` (`report-format.md`), both asked at the preflight: PR preflight → gate → `git -y` →
|
|
44
47
|
`followup` → `run:tail`, stopping at the first failure. `--review` runs both rounds. **Else a due
|
|
45
48
|
round 2 does not fit `ship`**: the PR opens between the rounds — background
|
|
46
49
|
`pnpm josh git -y "<title> #<N>"`, round 2 beside CI, then `pnpm josh followup`.
|
|
@@ -54,46 +57,34 @@ Recommendations are informational; severity decides. A CodeRabbit rate-limit war
|
|
|
54
57
|
## Orchestration facts single-sourced here
|
|
55
58
|
|
|
56
59
|
These are the gate → review → PR → merge facts other documents cite; this file is their single source
|
|
57
|
-
(`prompts/review.md` carries the review _policy_, `prompts/review-rubric.md` the rubric).
|
|
58
|
-
rule came from and why it holds: `docs/maintainers/chain-rule-rationale.md` → "Where each rule came
|
|
59
|
-
from", `docs/maintainers/chain-rule-rationale.md` → "Why the orchestration facts hold".
|
|
60
|
+
(`prompts/review.md` carries the review _policy_, `prompts/review-rubric.md` the rubric).
|
|
60
61
|
|
|
61
|
-
- **The gate runs beside this review, not in front of it** —
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
- **
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
pull request, beside the CI the commit started.
|
|
84
|
-
- **The round-2 fix commit is pushed before its gate** — a fix the second round makes in place is
|
|
85
|
-
pushed (`pnpm josh git -y` again, a follow-up commit) before its `pnpm josh gate`, so the gate runs
|
|
86
|
-
inside the CI wait and is joined before `pnpm josh followup` rather than in front of it.
|
|
87
|
-
- **A clean second round issues the merge in the same turn** — the turn that reads a clean second round
|
|
88
|
-
issues `pnpm josh followup`, after any branch-2 filing and `pnpm josh epic:bundle` and never in a turn
|
|
89
|
-
of its own. Clean has two halves: no confirmed High is standing, and nothing was routed to branch 1 of
|
|
90
|
-
the disposition.
|
|
91
|
-
- **The review runs in a subagent, never a main-line skill load** — `/code-review` is spawned through
|
|
92
|
-
the `Agent` tool in its own context, as the agent type step 1 names.
|
|
62
|
+
- **The gate runs beside this review, not in front of it** — started with the review, joined before the
|
|
63
|
+
commit. A red gate is fixed and re-run whatever the review concluded.
|
|
64
|
+
- **origin/main is merged in before the gate** — `pnpm josh main:merge` is the last edit, so the scoped
|
|
65
|
+
pair and the gate run once over it; a conflict fires `backlogrun-recovery.md` → "Conflicts are not
|
|
66
|
+
predicted" early. **This is the one place a conflicted merge's procedure is written**: `main:merge`
|
|
67
|
+
refuses when uncommitted changes touch a path the default branch also changed, or the index holds
|
|
68
|
+
unresolved or staged paths — commit first with `pnpm josh git -y`, rerun, and **never stash around the
|
|
69
|
+
merge**. A merge stopped on a conflict: remove the markers, then `pnpm josh git -y` stages the
|
|
70
|
+
resolution and records the merge commit — **Tier A**; a lane child never asks a person for `git add`.
|
|
71
|
+
- **A single check answers once per tree** — re-run one check by name (`pnpm josh lint:related`,
|
|
72
|
+
`pnpm josh cspell:dot`, `pnpm josh test:related`, or the type check) after every edit, never twice
|
|
73
|
+
over an untouched tree. In kit a detached `pnpm josh ship` also checks the metrics totals; accept a
|
|
74
|
+
grown total with its reason, as its output names.
|
|
75
|
+
- **The pull request opens between the rounds, so CI runs beside round 2** — round 1 runs on the
|
|
76
|
+
uncommitted tree and its High/Medium fixes land before the commit; the verification pass runs against
|
|
77
|
+
the open pull request.
|
|
78
|
+
- **The round-2 fix commit is pushed before its gate** — `pnpm josh git -y` again, so the gate runs
|
|
79
|
+
inside the CI wait and is joined before `pnpm josh followup`.
|
|
80
|
+
- **A clean second round issues the merge in the same turn** — `pnpm josh followup`, after any branch-2
|
|
81
|
+
filing and `pnpm josh epic:bundle`. Clean: no confirmed High standing, nothing routed to branch 1.
|
|
82
|
+
- **The review runs in a subagent, never a main-line skill load** — `/code-review` through the `Agent`
|
|
83
|
+
tool, as the agent type step 1 names.
|
|
93
84
|
- **The brief names the checkout, and a review that read another one is refused** — `pnpm josh
|
|
94
|
-
review:brief` prints the checkout root, branch
|
|
85
|
+
review:brief` prints the checkout root, branch, HEAD and a nonce; the review runs `pnpm josh
|
|
95
86
|
review:attest <nonce>` from the tree it read, and `pnpm josh review:attest --check` must answer `ok`
|
|
96
|
-
before
|
|
87
|
+
before anything acts on the verdict.
|
|
97
88
|
|
|
98
89
|
This file is the single source of the gate → review → PR → merge chain rule; other documents reference
|
|
99
90
|
it rather than restating it. `prompts/collaboration-workflow/plan-comment.md` keeps Step 3.
|
|
@@ -37,15 +37,13 @@ classification lives in `backlogrun-child.md` → "Each child runs in a delegate
|
|
|
37
37
|
main line.** The unit returns conclusions with `file:line` citations, never the file text. It may run
|
|
38
38
|
a temporary probe script and return its output.
|
|
39
39
|
|
|
40
|
-
**The threshold is 3 files, and it is a count, not a forecast.**
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
the threshold.
|
|
40
|
+
**The threshold is 3 files, and it is a count, not a forecast.** Brief the unit on what was already
|
|
41
|
+
read. **A delegation resets the counter rather than spending it**; `pnpm josh investigation:guard`
|
|
42
|
+
refuses the threshold call, in a lane child too (`pnpm josh delegate --list`; counting:
|
|
43
|
+
`docs/josh-commands-automation.md` → "`josh investigation:guard`").
|
|
45
44
|
|
|
46
|
-
**Dispatch the unit as the `investigator` agent** (`kit:investigator` in a consumer) —
|
|
47
|
-
model
|
|
48
|
-
`docs/josh-commands-automation.md` → "`josh investigation:guard`" carries the command's counting details.
|
|
45
|
+
**Dispatch the unit as the `investigator` agent** (`kit:investigator` in a consumer) — read-only, on
|
|
46
|
+
the `model` its definition names.
|
|
49
47
|
|
|
50
48
|
**The main line does not idle while the unit reads:** read files this run will edit, then verify the
|
|
51
49
|
unit's cited lines. Independent investigations launch together; a brief that needs another unit's
|
|
@@ -54,3 +52,9 @@ answer waits for that answer.
|
|
|
54
52
|
**When the Issue already names the file, function or rule, read that edit target in the main line.**
|
|
55
53
|
It is not `survey`, and it is not `diagnosis`: the unit describes how the subject works;
|
|
56
54
|
the main line decides what that means and what to change.
|
|
55
|
+
|
|
56
|
+
## A `general-purpose` subagent names its model
|
|
57
|
+
|
|
58
|
+
**A `general-purpose` dispatch → set `model`**: `sonnet` for routine work, `opus` for judgment; a review
|
|
59
|
+
takes the alias of the `model=` id its brief prints (`claude-opus-5-5` → `opus`). Delivered by the
|
|
60
|
+
`agent-model` row of `pnpm josh rule:guard`.
|
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
# The entry sequence and the stop branches — shared by `fullrun`, `halfrun` and `prrun`
|
|
2
2
|
|
|
3
|
-
`
|
|
4
|
-
procedure; `pnpm josh run:step <N>` prints the run's next single action. History:
|
|
5
|
-
`docs/maintainers/entry-sequence-rationale.md` → "Where each rule came from".
|
|
3
|
+
`pnpm josh run:step <N>` prints the run's next single action.
|
|
6
4
|
|
|
7
5
|
## The ordered entry sequence
|
|
8
6
|
|
|
@@ -1,10 +1,8 @@
|
|
|
1
1
|
# Finishing a run — `pnpm josh followup`
|
|
2
2
|
|
|
3
3
|
Everything between a green CI and a merged PR: the command, the merge it authorizes, the notifications,
|
|
4
|
-
the reviewer scan, the config report and the release ask. `fullrun` and `backlogrun` end here;
|
|
5
|
-
|
|
6
|
-
of the rule. Where each rule came from: `docs/maintainers/followup-rationale.md` → "Where each rule
|
|
7
|
-
came from".
|
|
4
|
+
the reviewer scan, the config report and the release ask. `fullrun` and `backlogrun` end here; `halfrun`
|
|
5
|
+
stops before the commit.
|
|
8
6
|
|
|
9
7
|
## Run `pnpm josh followup`
|
|
10
8
|
|
|
@@ -20,85 +18,75 @@ bullets. Use the file option whenever it contains a command or path.
|
|
|
20
18
|
It waits for required CI, checks CodeRabbit and top-level AI review comments, sends the completion
|
|
21
19
|
Telegram, merges by default, posts the Issue report, closes completed epics, removes `in-progress`,
|
|
22
20
|
and releases the hold. Only `--no-merge` stops the merge; `--merge` is a deprecated no-op. **A pull
|
|
23
|
-
request already merged by hand** (a `prrun` stop)
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
is inapplicable; rate-limit text is not a finding.
|
|
21
|
+
request already merged by hand** (a `prrun` stop) runs only the post-merge tail; a report already on the
|
|
22
|
+
Issue is not posted twice, so re-running is safe. Keep the default Issue target. Ignore a finding only
|
|
23
|
+
after verifying it is inapplicable; rate-limit text is not a finding.
|
|
27
24
|
|
|
28
|
-
**A red rate-limited CodeRabbit check is cleared by a retrigger, not a bypass.** Wait out the
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
25
|
+
**A red rate-limited CodeRabbit check is cleared by a retrigger, not a bypass.** Wait out the stated
|
|
26
|
+
window, post `@coderabbitai review` on the pull request, and rerun `followup`. Bypassing is Tier C — on
|
|
27
|
+
explicit user instruction only, when the window is impractically long or the retrigger is rate-limited
|
|
28
|
+
again.
|
|
32
29
|
|
|
33
|
-
A pre-merge failure stops the run; an unverifiable AI finding or CI failure needing input
|
|
34
|
-
`confirmation` Telegram.
|
|
35
|
-
named recovery without rerunning
|
|
36
|
-
authoritative.
|
|
30
|
+
A pre-merge failure stops the run; an unverifiable AI finding or CI failure needing input sends a
|
|
31
|
+
`confirmation` Telegram. A post-merge cleanup failure is named and does not undo the merge; run the
|
|
32
|
+
named recovery without rerunning `followup`. The printed result is authoritative.
|
|
37
33
|
|
|
38
|
-
After success, run `pnpm josh ms`; in a lane
|
|
39
|
-
|
|
40
|
-
after execution, when its output needs reading.
|
|
34
|
+
After success, run `pnpm josh ms`; in a lane it refuses and the parent uses `pnpm josh lane:close <N>`.
|
|
35
|
+
Never delete the branch unless requested. The sections below are read when the output needs reading.
|
|
41
36
|
|
|
42
37
|
## The options
|
|
43
38
|
|
|
44
39
|
| Option | What it is |
|
|
45
40
|
| --- | --- |
|
|
46
|
-
| `--no-merge` | **The only flag that stops the merge**
|
|
47
|
-
| `--notify-target` | `pr` \| `issue` \| `both`,
|
|
48
|
-
| `--notify-message` / `--notify-message-file` | The completion comment
|
|
49
|
-
| `--coderabbit-ignore-reason` |
|
|
50
|
-
| `--ai-review-ignore-reason` |
|
|
51
|
-
| `--issue-number` | The Issue number — or
|
|
41
|
+
| `--no-merge` | **The only flag that stops the merge** |
|
|
42
|
+
| `--notify-target` | `pr` \| `issue` \| `both`, default `issue`. **Keep the default** |
|
|
43
|
+
| `--notify-message` / `--notify-message-file` | The completion comment in the two-layer shape — `Cause: / Fix: / Result:`, then `Details:` bullets, never a bare `Added … / Changed …` list. **Use the file form whenever the report names a command or a path** (`prompts/collaboration-workflow/shell-body.md`); `-` reads stdin |
|
|
44
|
+
| `--coderabbit-ignore-reason` | Why CodeRabbit line comments stay unresolved |
|
|
45
|
+
| `--ai-review-ignore-reason` | Why an AI-review blocker (Claude Review / a CodeRabbit summary) stays unresolved |
|
|
46
|
+
| `--issue-number` | The Issue number — or positionally as `"<title> #<number>"`; with neither, the PR body's `closes #N` |
|
|
52
47
|
|
|
53
48
|
## `auto-merge` — Default `fullrun` behavior
|
|
54
49
|
|
|
55
|
-
Invoking `fullrun` is itself the explicit authorization to merge
|
|
50
|
+
Invoking `fullrun` is itself the explicit authorization to merge.
|
|
56
51
|
|
|
57
|
-
- **Always run `pnpm josh ms` after a successful merge**
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
`
|
|
62
|
-
scanned here; the required `SonarQube` check carries it.
|
|
52
|
+
- **Always run `pnpm josh ms` after a successful merge**. **In a lane, `pnpm josh lane:close <N>` is the
|
|
53
|
+
terminal step instead** — `josh ms` refuses there.
|
|
54
|
+
- **Green CI is not authorization to merge while AI review findings are open.** A blocker sends a
|
|
55
|
+
`confirmation` Telegram and exits non-zero — fix and re-run. SonarCloud is carried by the required
|
|
56
|
+
`SonarQube` check.
|
|
63
57
|
- **Verify a CodeRabbit finding before bypassing it.** Never pass `--coderabbit-ignore-reason`
|
|
64
58
|
reflexively: a SHA pin flagged "not matching the tag" is checked with `gh api
|
|
65
59
|
repos/<owner>/<repo>/commits/<tag> --jq '.sha'`, and the bypass cites that command.
|
|
66
|
-
- **The merge is `followup`'s, not yours** —
|
|
67
|
-
|
|
68
|
-
"Git Rules"). Do **not** pass `--delete-branch` unless the user asks.
|
|
60
|
+
- **The merge is `followup`'s, not yours** — `.claude/settings.json` refuses `gh pr merge` and its
|
|
61
|
+
`gh api` spellings (`CLAUDE.md` → "Git Rules"). Do **not** pass `--delete-branch` unless asked.
|
|
69
62
|
- **A failed merge** (branch protection, a conflict) is reported and stops the run — never retried with
|
|
70
|
-
other flags
|
|
71
|
-
|
|
63
|
+
other flags. To skip the merge, use `kickoff` or say "do not merge" in the same turn and pass
|
|
64
|
+
`--no-merge`.
|
|
72
65
|
|
|
73
66
|
## Completion notifications: always via `pnpm josh followup`
|
|
74
67
|
|
|
75
|
-
**Never send a `completion` Telegram with `pnpm josh notify`** — `followup`
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
proof the PR merged — read what the command printed; a silent run is a failed run.
|
|
68
|
+
**Never send a `completion` Telegram with `pnpm josh notify`** — `followup` fills in the PR URL.
|
|
69
|
+
`pnpm josh notify` stays the tool for `planning`, `confirmation`, `kickoff_retry` and `failure`. **It
|
|
70
|
+
fires before the merge**, so a ✅ is not proof the PR merged — read what the command printed.
|
|
79
71
|
|
|
80
|
-
**Always run it in the foreground** — the
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
and re-run once CI has settled. Re-run it after every follow-up commit.
|
|
72
|
+
**Always run it in the foreground** — the exception to `background-commands.md`. The CI wait defaults
|
|
73
|
+
to 32 minutes; give the call the largest timeout it accepts (`timeout: 600000` in Claude Code). Where the
|
|
74
|
+
harness detaches the call, wait for its report; where it kills it, set `JOSH_CI_TIMEOUT_SECONDS` and
|
|
75
|
+
re-run once CI has settled. Re-run after every follow-up commit.
|
|
85
76
|
|
|
86
77
|
**The count of unreleased merges is surfaced at completion — not a version.** It prints `🚚 unreleased
|
|
87
|
-
merges on main: <n
|
|
88
|
-
|
|
89
|
-
`pnpm josh release` runs" below.
|
|
78
|
+
merges on main: <n>`. **Do not report a shipped version** — a child no longer bumps. See "When `pnpm
|
|
79
|
+
josh release` runs" below.
|
|
90
80
|
|
|
91
81
|
## Reading the stage-timing block
|
|
92
82
|
|
|
93
|
-
|
|
94
|
-
`followup stages total:` line, so where it spent its time is read, not guessed.
|
|
83
|
+
One `followup stage: <name> <seconds>` row per stage, then `followup stages total:`.
|
|
95
84
|
|
|
96
|
-
- **A failed run prints it too**, up to the stage that threw, named `interrupted
|
|
97
|
-
|
|
85
|
+
- **A failed run prints it too**, up to the stage that threw, named `interrupted`. The `merge` row
|
|
86
|
+
appears only on a run that merged.
|
|
98
87
|
- **A row named `<a>-and-<b>` is a batch of requests sent together**; `checks-wait` is never
|
|
99
|
-
overlapped
|
|
100
|
-
- **The total is the sum of the stages**, not the wall clock — the post-merge tail
|
|
101
|
-
hold release, the next-issue listing) sits outside it.
|
|
88
|
+
overlapped.
|
|
89
|
+
- **The total is the sum of the stages**, not the wall clock — the post-merge tail sits outside it.
|
|
102
90
|
|
|
103
91
|
A `failure` Telegram is sent **by hand, exactly once**, and only when recovery is given up:
|
|
104
92
|
|
|
@@ -108,36 +96,28 @@ pnpm josh notify --task-type failure --issue-url "<issue-url>" --body-file <reas
|
|
|
108
96
|
|
|
109
97
|
## AI reviewer comment scan
|
|
110
98
|
|
|
111
|
-
`followup` scans top-level PR comments from AI reviewers **independently of CI status
|
|
112
|
-
posted after CI goes green is not silently shipped.
|
|
99
|
+
`followup` scans top-level PR comments from AI reviewers **independently of CI status**.
|
|
113
100
|
|
|
114
101
|
- **Blockers are structural, not NLP**: a Claude Review body with `### Issues`, `### Problem`,
|
|
115
102
|
`#### Logic bug` or a numbered `### 1. …` heading; a CodeRabbit `Actionable comments posted: N` with
|
|
116
103
|
N > 0. Rate-limit notices and sign-offs (`All issues resolved ✓`) match nothing.
|
|
117
104
|
- **A standing blocker without `--ai-review-ignore-reason`** sends a `confirmation` Telegram and exits
|
|
118
|
-
non-zero; with it, the reason is posted
|
|
119
|
-
- **A comment listing that could not be read is a standing blocker
|
|
120
|
-
passes.
|
|
105
|
+
non-zero; with it, the reason is posted and the run proceeds.
|
|
106
|
+
- **A comment listing that could not be read is a standing blocker**.
|
|
121
107
|
- **Temporary**: CodeRabbit is non-blocking end to end — out of the default required checks
|
|
122
|
-
(restore via `JOSH_REQUIRED_CHECKS`)
|
|
123
|
-
audit notes rather than blockers. When it is reverted:
|
|
124
|
-
`docs/maintainers/followup-rationale.md` → "The temporary CodeRabbit exemption".
|
|
108
|
+
(restore via `JOSH_REQUIRED_CHECKS`); its findings are audit notes.
|
|
125
109
|
|
|
126
110
|
## Config file reporting
|
|
127
111
|
|
|
128
112
|
`followup` matches every changed path against what `josh sync` distributes (`AI_COPY_FILES`,
|
|
129
113
|
`AI_COPY_FILE_MAPPINGS`, `AI_COPY_DIRECTORIES`, `SYNCED_PATHS`) and **reports** the claimed paths in the
|
|
130
|
-
|
|
131
|
-
(`docs/maintainers/followup-rationale.md` → "Why config claims are reported, not stopped").
|
|
132
|
-
`pnpm josh sync:scope` gives the same answer on demand; there is no flag to pass.
|
|
114
|
+
notification and the Issue report. **It stops nothing.** `pnpm josh sync:scope` gives the same answer.
|
|
133
115
|
|
|
134
116
|
## When `pnpm josh release` runs
|
|
135
117
|
|
|
136
|
-
**The release point is a position plus a command's answer, never a judgement.**
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
`backlogrun`'s **last** child, never once per child. In a lane the parent asks it, in the primary
|
|
140
|
-
checkout, after the last lane is closed.
|
|
118
|
+
**The release point is a position plus a command's answer, never a judgement.** **The position: once
|
|
119
|
+
per invocation, after the last merge** — a lone `fullrun`'s only one, a `backlogrun`'s **last** child.
|
|
120
|
+
With lanes the parent asks it, in the primary checkout, after the last lane is closed.
|
|
141
121
|
|
|
142
122
|
```bash
|
|
143
123
|
pnpm josh release:scope # → required | skip | unknown
|
|
@@ -149,11 +129,9 @@ pnpm josh release:scope # → required | skip | unknown
|
|
|
149
129
|
| `skip` | the count is zero — nothing is waiting to ship | Say so in one line and finish |
|
|
150
130
|
| `unknown` | the count could not be read | **Report it as `unknown`** — it is never read as `skip` |
|
|
151
131
|
|
|
152
|
-
**The run never types `pnpm josh release` itself
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
primary checkout, on the default branch, with a clean tree. `release:scope` counts nothing of its own —
|
|
156
|
-
it reads the same fetch-then-count `followup` uses for the Telegram line, so the two cannot disagree.
|
|
132
|
+
**The run never types `pnpm josh release` itself** — it starts the tag → publish → `production` chain,
|
|
133
|
+
outward-facing and effectively irreversible, so Tier C. A person types it in the primary checkout, on
|
|
134
|
+
the default branch, with a clean tree.
|
|
157
135
|
|
|
158
136
|
**On `required`, the release request cites the open release Issue** — the one `issue:file --release` / `issue:release <N>` links blockers to — with a number-link
|
|
159
137
|
(`prompts/collaboration-workflow/issue-citation.md`). List it with
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
# `fullrun` — the step lists and the branches
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
`docs/maintainers/fullrun-steps-rationale.md` → "Where each rule came from".
|
|
3
|
+
`pnpm josh run:next <N>` names which step the run is at, and the sections below carry that step in
|
|
4
|
+
full.
|
|
6
5
|
|
|
7
6
|
## The `fullrun #N` step list
|
|
8
7
|
|
|
@@ -31,8 +30,7 @@ fit**: open the PR between the rounds with `pnpm josh git -y "<title> #<N>"`, ru
|
|
|
31
30
|
default `ja`). Before implementing, run `pnpm josh ms`, then `pnpm josh latest:scope`
|
|
32
31
|
and update dependencies only on `required` — `latest-gate.md` is its single source, and on `required`
|
|
33
32
|
load the `dependency-update` skill afterwards. **A dispatched lane child skips `pnpm josh ms`** — it
|
|
34
|
-
refuses in a lane, and `pnpm josh main:merge` brings the latest default in during the gate
|
|
35
|
-
(`docs/maintainers/fullrun-steps-rationale.md` → "Why a lane child skips `josh ms`"). The parent runs
|
|
33
|
+
refuses in a lane, and `pnpm josh main:merge` brings the latest default in during the gate. The parent runs
|
|
36
34
|
`pnpm josh ms` in the primary checkout, never the child — `backlogrun-lanes.md` and
|
|
37
35
|
`backlogrun-child.md` are the single sources. When running `pnpm josh followup`, pass an
|
|
38
36
|
implementation summary via `--notify-message` in the session language, leading with the three
|
|
@@ -1,11 +1,9 @@
|
|
|
1
1
|
# `fullrun` — the manifest (plan → implement → PR → merge → notify)
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
`
|
|
5
|
-
`
|
|
6
|
-
`
|
|
7
|
-
use. The step lists are `fullrun-steps.md`, read when a step needs its detail. History:
|
|
8
|
-
`docs/maintainers/fullrun-rationale.md` → "Where each rule came from".
|
|
3
|
+
The entry sequence and the stop branches are `entry-sequence.md`. `pnpm josh run:step <N>` prints the
|
|
4
|
+
run's next single action. `chain-rule.md`, `followup.md`, `background-commands.md` and
|
|
5
|
+
`latest-gate.md` are **not entry reads** — each is fetched at its point of use. The step lists are
|
|
6
|
+
`fullrun-steps.md`, read when a step needs its detail.
|
|
9
7
|
|
|
10
8
|
## The difference — the entry and the end
|
|
11
9
|
|
|
@@ -2,13 +2,9 @@
|
|
|
2
2
|
|
|
3
3
|
When this run files a new Issue, file it with `pnpm josh issue:file`, which lints the body and applies the classification labels it declares beside the `--depth` and `--route` labels; `prompts/collaboration-workflow/issue-template.md` is the single source for this classification.
|
|
4
4
|
|
|
5
|
-
`halfrun`
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
**This file is the manifest.** The entry sequence and the stop branches are `entry-sequence.md`,
|
|
10
|
-
shared with `fullrun` and `prrun`; this file names only what is `halfrun`'s own. History:
|
|
11
|
-
`docs/maintainers/halfrun-rationale.md` → "Where each rule came from".
|
|
5
|
+
`halfrun` implements the change and runs the full verification gate, then **stops before commit** —
|
|
6
|
+
nothing is committed, pushed, or opened as a PR — so a person verifies the working tree by hand. The
|
|
7
|
+
entry sequence and the stop branches are `entry-sequence.md`.
|
|
12
8
|
|
|
13
9
|
## The difference — the entry
|
|
14
10
|
|
|
@@ -2,8 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
**This file is the suffix's single source, read at its point of use — the moment a `new` entry is
|
|
4
4
|
typed with an `into <target>` suffix, not at any entry.** A run given a `#N` or a bare `new` never
|
|
5
|
-
reaches it.
|
|
6
|
-
`docs/maintainers/into-target-rationale.md` → "Why the suffix reads as it does".
|
|
5
|
+
reaches it.
|
|
7
6
|
|
|
8
7
|
`kickoff new` / `fullrun new` / `halfrun new` accept a suffix naming the epic the run's artifact
|
|
9
8
|
belongs to. Without it the artifact belongs to no epic, and `epic:next` only ever offers an epic's
|