@joshuafolkken/kit 1.1229.0 → 1.1370.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/agents/investigator.md +1 -0
- package/.claude/settings.json +4 -0
- package/.claude/skills/dependency-update/SKILL.md +5 -3
- package/.claude/skills/epic-commands/SKILL.md +82 -113
- package/.claude/skills/epic-commands/epic-bundle.md +38 -63
- package/.claude/skills/epic-commands/execution-waves.md +30 -51
- package/.claude/skills/verify-ui/SKILL.md +13 -20
- package/.claude/skills/workflow-commands/SKILL.md +10 -10
- package/.claude/skills/workflow-commands/background-commands.md +4 -4
- package/.claude/skills/workflow-commands/backlogrun-child.md +30 -105
- package/.claude/skills/workflow-commands/backlogrun-handoff-report.md +29 -0
- package/.claude/skills/workflow-commands/backlogrun-lanes.md +45 -131
- package/.claude/skills/workflow-commands/backlogrun-park.md +36 -53
- package/.claude/skills/workflow-commands/backlogrun-progress.md +81 -331
- package/.claude/skills/workflow-commands/backlogrun-recovery.md +29 -83
- package/.claude/skills/workflow-commands/backlogrun-steps.md +105 -424
- package/.claude/skills/workflow-commands/backlogrun.md +50 -61
- package/.claude/skills/workflow-commands/chain-rule.md +36 -40
- package/.claude/skills/workflow-commands/entry-sequence.md +6 -6
- package/.claude/skills/workflow-commands/followup.md +24 -20
- package/.claude/skills/workflow-commands/fullrun-steps.md +23 -27
- package/.claude/skills/workflow-commands/fullrun.md +10 -10
- package/.claude/skills/workflow-commands/halfrun.md +9 -8
- package/.claude/skills/workflow-commands/into-target.md +12 -18
- package/.claude/skills/workflow-commands/issue-comments.md +11 -26
- package/.claude/skills/workflow-commands/kickoff.md +27 -16
- package/.claude/skills/workflow-commands/latest-gate.md +18 -29
- package/.claude/skills/workflow-commands/needs-human-review.md +13 -24
- package/.claude/skills/workflow-commands/observation-filing.md +37 -28
- package/.claude/skills/workflow-commands/observation-ledger.md +48 -38
- package/.claude/skills/workflow-commands/pre-gate-cut.md +9 -9
- package/.claude/skills/workflow-commands/prerequisite.md +23 -15
- package/.claude/skills/workflow-commands/progress-watcher.md +17 -11
- package/.claude/skills/workflow-commands/prrun.md +3 -3
- package/.claude/skills/workflow-commands/retrospective.md +13 -18
- package/.claude/skills/workflow-commands/split-assessment.md +6 -4
- package/.claude/skills/workflow-commands/target-repository.md +25 -28
- package/.claude/skills/workflow-commands/working-tree-hold.md +11 -17
- package/.gitattributes +2 -1
- package/.github/workflows/ci.yml +14 -0
- package/.github/workflows/publish.yml +2 -0
- package/.vscode/tasks.json +14 -0
- package/CLAUDE.md +10 -61
- package/README.md +38 -57
- package/SECURITY.md +1 -1
- package/dist/CLAUDE.md +10 -61
- package/dist/commands/document-section-cli.js +42 -10
- package/dist/config-merge/index.js +11 -2
- package/dist/hooks/audit-provision.js +2 -2
- package/dist/hooks/batch-guard.js +7 -7
- package/dist/hooks/{chunk-FIVDHQGT.js → chunk-43G45XJF.js} +18 -20
- package/dist/hooks/{chunk-JUDKDCDP.js → chunk-4TW4MQUL.js} +284 -362
- package/dist/hooks/{chunk-5VMKCCC4.js → chunk-76RK6E3H.js} +13 -11
- package/dist/hooks/{chunk-RNWHN5BP.js → chunk-DZWZ3DKY.js} +4 -4
- package/dist/hooks/{chunk-5VNDSNG3.js → chunk-FZ6FUSBM.js} +1 -1
- package/dist/hooks/{chunk-VC3PZPZO.js → chunk-GG72ANKI.js} +1 -1
- package/dist/hooks/{chunk-6HJJXRBX.js → chunk-KPM4YIIX.js} +8 -44
- package/dist/hooks/chunk-MXVQMLDP.js +3705 -0
- package/dist/hooks/{chunk-ELCN5LCH.js → chunk-NEC4AT4Z.js} +34 -12
- package/dist/hooks/{chunk-TQNPDZNH.js → chunk-NZBHG6FW.js} +7 -5
- package/dist/hooks/chunk-NZN2UFI6.js +2409 -0
- package/dist/hooks/{chunk-F56MFS4B.js → chunk-R6CRQEAL.js} +4 -4
- package/dist/hooks/chunk-SYSRHRWU.js +1589 -0
- package/dist/hooks/{chunk-55HHG5PX.js → chunk-TLJYAGZK.js} +799 -903
- package/dist/hooks/chunk-Z5TMJIPW.js +45 -0
- package/dist/hooks/codex-hook-adapter.js +26 -21
- package/dist/hooks/duplicate-read-guard.js +8 -8
- package/dist/hooks/format-edited.js +4 -4
- package/dist/hooks/inputs.json +213 -197
- package/dist/hooks/investigation-guard.js +8 -8
- package/dist/hooks/pretool-guard.js +15 -15
- package/dist/hooks/session-lang.js +406 -8
- package/dist/hooks/stop-guard.js +122 -201
- package/dist/josh.js +540 -137
- package/dist/version/index.js +15 -13
- package/eslint/base.js +43 -5
- package/eslint/rules/english-only-prose.js +3 -3
- package/eslint/rules/import.js +12 -0
- package/eslint/rules/namespace-object-export.js +2 -2
- package/package.json +16 -10
- package/pnpm-workspace.yaml +2 -4
- package/prompts/coding-standards.md +14 -48
- package/prompts/collaboration-workflow/file-edits.md +1 -1
- package/prompts/collaboration-workflow/issue-citation.md +1 -1
- package/prompts/collaboration-workflow/issue-template.md +4 -10
- package/prompts/collaboration-workflow/operating-rules.md +7 -8
- package/prompts/collaboration-workflow/output-bounds.md +1 -1
- package/prompts/collaboration-workflow/overview.md +1 -1
- package/prompts/collaboration-workflow/plan-comment.md +2 -1
- package/prompts/collaboration-workflow/principles.md +21 -3
- package/prompts/collaboration-workflow/report-format.md +16 -29
- package/prompts/collaboration-workflow/residency.md +1 -1
- package/prompts/collaboration-workflow/rule-delivery.md +7 -95
- package/prompts/collaboration-workflow/shell-body.md +3 -23
- package/prompts/collaboration-workflow/turn-batching.md +4 -13
- package/prompts/collaboration-workflow/wip-cap.md +5 -11
- package/prompts/refactoring.md +1 -1
- package/prompts/review-rubric.md +3 -22
- package/prompts/review.md +15 -38
- package/prompts/testing-guide.md +2 -4
- package/scripts/adopt/adopt-logic.ts +5 -5
- package/scripts/adopt/adopt-toolkits.ts +4 -5
- package/scripts/adopt/adopt.ts +2 -3
- package/scripts/agent/agent-argv.ts +7 -7
- package/scripts/agent/agent-diagnostics.ts +2 -2
- package/scripts/agent/agent-exit-record.ts +1 -1
- package/scripts/agent/agent-headless.ts +1 -1
- package/scripts/agent/agent-launch-environment.ts +6 -1
- package/scripts/agent/agent-role-profile.ts +49 -22
- package/scripts/agent/agent-session-role.ts +32 -0
- package/scripts/agent/api-outage.ts +1 -1
- package/scripts/agent/claude-agent-argv.ts +4 -4
- package/scripts/agent/claude-result-event.ts +4 -4
- package/scripts/agent/codex-hooks.ts +2 -2
- package/scripts/agent/interactive-ask.ts +3 -6
- package/scripts/auto-ok/auto-ok-cli.ts +46 -60
- package/scripts/backlog/backlog-arrival-added.ts +34 -0
- package/scripts/backlog/backlog-arrival.ts +54 -17
- package/scripts/backlog/backlog-budget-cli.ts +34 -6
- package/scripts/backlog/backlog-budget.ts +17 -24
- package/scripts/backlog/backlog-defect-priority.ts +1 -1
- package/scripts/backlog/backlog-drive-args.ts +5 -4
- package/scripts/backlog/backlog-drive-cli.ts +14 -10
- package/scripts/backlog/backlog-drive-epic.ts +85 -0
- package/scripts/backlog/backlog-drive-launch.ts +1 -1
- package/scripts/backlog/backlog-drive-named-offer.ts +60 -9
- package/scripts/backlog/backlog-drive-named.ts +39 -9
- package/scripts/backlog/backlog-drive-offer-argv.ts +1 -1
- package/scripts/backlog/backlog-drive-restore.ts +1 -1
- package/scripts/backlog/backlog-drive-retrospective.ts +2 -2
- package/scripts/backlog/backlog-drive.ts +43 -28
- package/scripts/backlog/backlog-idle.ts +88 -0
- package/scripts/backlog/backlog-named.ts +11 -15
- package/scripts/backlog/backlog-next.ts +26 -30
- package/scripts/backlog/backlog-offer-cli.ts +28 -23
- package/scripts/backlog/backlog-offer.ts +7 -7
- package/scripts/backlog/backlog-overlap.ts +178 -0
- package/scripts/backlog/backlog-plan-cli.ts +14 -90
- package/scripts/backlog/backlog-plan-read.ts +111 -0
- package/scripts/backlog/backlog-plan.ts +11 -10
- package/scripts/backlog/backlog-pool.ts +13 -14
- package/scripts/backlog/backlog-rank.ts +11 -11
- package/scripts/backlog/backlog-ready.ts +15 -10
- package/scripts/backlog/backlog-scope.ts +14 -15
- package/scripts/backlog/backlog-stalled-cli.ts +2 -2
- package/scripts/backlog/backlog-stalled-detect.ts +4 -4
- package/scripts/backlog/backlog-stalled.ts +5 -6
- package/scripts/backlog/backlog-waves.ts +4 -4
- package/scripts/backlog/backlogrun-args.ts +74 -0
- package/scripts/backlog/backlogrun-cli.ts +113 -0
- package/scripts/backlog/backlogrun-launch.ts +178 -0
- package/scripts/behavior/behavior-assertion.ts +6 -8
- package/scripts/behavior/behavior-cli.ts +1 -1
- package/scripts/behavior/behavior-rules.ts +3 -3
- package/scripts/build/build-claude-md.ts +4 -4
- package/scripts/build/build-codex-hooks.ts +2 -2
- package/scripts/build/build-commands.ts +1 -1
- package/scripts/build/build-hooks.ts +5 -5
- package/scripts/build/build.ts +1 -1
- package/scripts/build/hook-bundle-stamp.ts +109 -7
- package/scripts/build/local-bin.ts +2 -2
- package/scripts/cases/cases-cli.ts +1 -1
- package/scripts/cases/cases-logic.ts +2 -2
- package/scripts/ci/composite-actions.ts +1 -2
- package/scripts/ci/pr-classification.ts +2 -2
- package/scripts/claude/workflow-destination.ts +1 -1
- package/scripts/clone/clone-aggregate.ts +1 -1
- package/scripts/clone/clone-fingerprint.ts +1 -1
- package/scripts/clone/clone-scan-cli.ts +1 -1
- package/scripts/clone/clone-scan.ts +1 -1
- package/scripts/config-merge/index.ts +1 -1
- package/scripts/config-merge/json-format.ts +1 -3
- package/scripts/config-merge/patch-json-array.ts +90 -0
- package/scripts/config-merge/patch-json-key.ts +6 -3
- package/scripts/config-merge/patch-json-list.ts +1 -1
- package/scripts/cost-runtime/codex-usage.ts +1 -1
- package/scripts/cost-runtime/context-cut-payback.ts +4 -5
- package/scripts/cost-runtime/context-cut-threshold.ts +4 -6
- package/scripts/cost-runtime/cost-attribute.ts +3 -3
- package/scripts/cost-runtime/cost-blocks.ts +3 -4
- package/scripts/cost-runtime/cost-cli.ts +14 -11
- package/scripts/cost-runtime/cost-corpus.ts +11 -11
- package/scripts/cost-runtime/cost-pricing.ts +4 -4
- package/scripts/cost-runtime/cost-tokens.ts +1 -2
- package/scripts/cost-runtime/cost-transcript.ts +29 -29
- package/scripts/cost-runtime/cost-usage.ts +6 -7
- package/scripts/cost-runtime/cost-verdict.ts +10 -11
- package/scripts/cost-runtime/own-session.ts +1 -1
- package/scripts/cost-runtime/transcript-cwd.ts +2 -2
- package/scripts/delegation/delegation-cli.ts +4 -4
- package/scripts/delegation/delegation-policy.ts +13 -15
- package/scripts/delegation/duplicate-read-guard.ts +9 -10
- package/scripts/delegation/fanout-cli.ts +1 -1
- package/scripts/delegation/fanout.ts +1 -1
- package/scripts/delegation/investigation-guard.ts +18 -22
- package/scripts/delegation/investigation-reads.ts +48 -238
- package/scripts/discovery/repo-discovery.ts +1 -1
- package/scripts/discovery/repo-map-logic.ts +1 -2
- package/scripts/discovery/repo-origin.ts +3 -3
- package/scripts/discovery/repo-party-cli.ts +2 -2
- package/scripts/discovery/repo-party.ts +2 -2
- package/scripts/doctor/doctor-consumer.ts +1 -1
- package/scripts/doctor/doctor-io.ts +6 -7
- package/scripts/doctor/doctor-logic.ts +1 -1
- package/scripts/doctor/doctor-ports.ts +1 -1
- package/scripts/doctor/doctor.ts +8 -9
- package/scripts/document/backlogrun-parent-read-set.ts +5 -6
- package/scripts/document/bash-output-cap.ts +5 -7
- package/scripts/document/capped-print-part.ts +1 -1
- package/scripts/document/capped-print.ts +1 -1
- package/scripts/document/document-byte-budget.ts +33 -64
- package/scripts/document/document-byte-check.ts +4 -4
- package/scripts/document/document-reachability.ts +7 -8
- package/scripts/document/document-read-cli.ts +2 -2
- package/scripts/document/document-scan.ts +26 -2
- package/scripts/document/document-section-cli.ts +6 -8
- package/scripts/document/document-section.ts +8 -12
- package/scripts/document/edit-files-cli.ts +3 -4
- package/scripts/document/entry-read-budget.ts +8 -70
- package/scripts/document/entry-read-set.ts +51 -34
- package/scripts/document/lane-child-read-set.ts +9 -9
- package/scripts/document/read-files-cli.ts +1 -2
- package/scripts/document/read-set-cli.ts +16 -19
- package/scripts/document/read-set-cost.ts +4 -4
- package/scripts/document/read-set-point-of-use.ts +28 -38
- package/scripts/document/read-set-pricing.ts +1 -1
- package/scripts/document/read-set-trim.ts +3 -3
- package/scripts/document/resident-budget.ts +8 -10
- package/scripts/epic/epic-add-body.ts +15 -18
- package/scripts/epic/epic-add-plan.ts +26 -28
- package/scripts/epic/epic-add.ts +32 -25
- package/scripts/epic/epic-audit-checks.ts +27 -37
- package/scripts/epic/epic-audit-cli.ts +21 -22
- package/scripts/epic/epic-audit-orphans.ts +16 -17
- package/scripts/epic/epic-audit-rationale.ts +10 -15
- package/scripts/epic/epic-audit-report.ts +2 -5
- package/scripts/epic/epic-audit.ts +18 -14
- package/scripts/epic/epic-body.ts +10 -10
- package/scripts/epic/epic-bundle-cli.ts +36 -34
- package/scripts/epic/epic-bundle-evidence.ts +5 -5
- package/scripts/epic/epic-bundle-gaps.ts +6 -9
- package/scripts/epic/epic-bundle-poll.ts +1 -1
- package/scripts/epic/epic-bundle-referenced.ts +11 -14
- package/scripts/epic/epic-bundle.ts +19 -20
- package/scripts/epic/epic-busy.ts +44 -21
- package/scripts/epic/epic-candidate-confirm.ts +15 -18
- package/scripts/epic/epic-chains.ts +18 -23
- package/scripts/epic/epic-classify.ts +11 -12
- package/scripts/epic/epic-cli-argv.ts +5 -6
- package/scripts/epic/epic-cli-remove.ts +9 -4
- package/scripts/epic/epic-cli.ts +38 -26
- package/scripts/epic/epic-close-comment.ts +14 -15
- package/scripts/epic/epic-close.ts +25 -29
- package/scripts/epic/epic-cross-repo.ts +18 -21
- package/scripts/epic/epic-decision.ts +14 -18
- package/scripts/epic/epic-fetch.ts +25 -31
- package/scripts/epic/epic-graph.ts +15 -17
- package/scripts/epic/epic-index.ts +14 -16
- package/scripts/epic/epic-issue.ts +9 -11
- package/scripts/epic/epic-label-age.ts +74 -0
- package/scripts/epic/epic-lane-offer.ts +35 -24
- package/scripts/epic/epic-nested.ts +1 -1
- package/scripts/epic/epic-next-read.ts +8 -8
- package/scripts/epic/epic-next-views.ts +12 -12
- package/scripts/epic/epic-next.ts +29 -33
- package/scripts/epic/epic-outside-blocker.ts +11 -10
- package/scripts/epic/epic-parse.ts +22 -24
- package/scripts/epic/epic-promote.ts +3 -2
- package/scripts/epic/epic-rank.ts +1 -1
- package/scripts/epic/epic-read.ts +10 -8
- package/scripts/epic/epic-reconcile.ts +8 -6
- package/scripts/epic/epic-reference.ts +5 -4
- package/scripts/epic/epic-relation-recheck.ts +10 -11
- package/scripts/epic/epic-relations.ts +9 -8
- package/scripts/epic/epic-remove-plan.ts +4 -5
- package/scripts/epic/epic-remove.ts +7 -5
- package/scripts/epic/epic-report.ts +18 -20
- package/scripts/epic/epic-run.ts +6 -5
- package/scripts/epic/epic-sections.ts +2 -2
- package/scripts/epic/epic-shape.ts +3 -3
- package/scripts/epic/epic-solo-stale.ts +3 -2
- package/scripts/epic/epic-solo.ts +8 -8
- package/scripts/epic/epic-triage.ts +5 -4
- package/scripts/epic/epic-validate.ts +8 -7
- package/scripts/epic/epic.ts +5 -5
- package/scripts/exports/unused-members-cli.ts +1 -1
- package/scripts/followup/followup-issue-number.ts +1 -2
- package/scripts/followup/git-followup-cleanup.ts +6 -7
- package/scripts/followup/git-followup-finish.ts +11 -13
- package/scripts/followup/git-followup-flush.ts +11 -7
- package/scripts/followup/git-followup-issue-close.ts +16 -13
- package/scripts/followup/git-followup-label.ts +9 -6
- package/scripts/followup/git-followup-merged.ts +1 -1
- package/scripts/followup/git-followup-pending.ts +7 -9
- package/scripts/followup/git-followup-stages.ts +28 -17
- package/scripts/followup/git-followup-workflow.ts +19 -21
- package/scripts/followup/git-pr-followup-checks.ts +13 -20
- package/scripts/followup/git-pr-followup-wrapup.ts +7 -7
- package/scripts/followup/git-pr-followup.ts +18 -17
- package/scripts/gate/core-admission.ts +162 -0
- package/scripts/gate/core-budget.ts +134 -91
- package/scripts/gate/gate-ledger.ts +114 -0
- package/scripts/gate/gate-log.ts +7 -9
- package/scripts/gate/gate-plan.ts +103 -35
- package/scripts/gate/gate-report.ts +39 -21
- package/scripts/gate/gate-skip.ts +11 -13
- package/scripts/gate/gate-steps.ts +5 -1
- package/scripts/gate/gate-tree.ts +3 -4
- package/scripts/gate/hook-gate-reuse.ts +9 -9
- package/scripts/gate/machine-capacity.ts +313 -0
- package/scripts/gate/pre-commit-type-check.ts +4 -4
- package/scripts/gate/project-checks.ts +12 -4
- package/scripts/gate/scoped-green.ts +11 -18
- package/scripts/gate/type-check-command.ts +2 -2
- package/scripts/gate/type-check-step.ts +4 -4
- package/scripts/gate/verification-gate.ts +60 -53
- package/scripts/gh/gh-spawn.ts +2 -2
- package/scripts/gh/git-ai-review-scan.ts +3 -2
- package/scripts/gh/git-gh-api-path.ts +10 -11
- package/scripts/gh/git-gh-exec.ts +43 -48
- package/scripts/gh/git-gh-failure.ts +6 -9
- package/scripts/gh/git-gh-helpers.ts +1 -1
- package/scripts/gh/git-gh-issue-list.ts +15 -19
- package/scripts/gh/git-gh-issue-read.ts +43 -60
- package/scripts/gh/git-gh-issue-rest.ts +14 -15
- package/scripts/gh/git-gh-issue-write.ts +52 -40
- package/scripts/gh/git-gh-issue.ts +23 -24
- package/scripts/gh/git-gh-pr-auto-merge.ts +3 -3
- package/scripts/gh/git-gh-pr-read.ts +46 -50
- package/scripts/gh/git-gh-pr-rest.ts +23 -26
- package/scripts/gh/git-gh-pr-review.ts +2 -2
- package/scripts/gh/git-gh-pr-rollup.ts +4 -4
- package/scripts/gh/git-gh-pr-snapshot.ts +8 -10
- package/scripts/gh/git-gh-pr.ts +16 -16
- package/scripts/gh/git-gh-reachability.ts +11 -12
- package/scripts/gh/git-gh-repo.ts +2 -3
- package/scripts/gh/git-gh-rest-state.ts +1 -1
- package/scripts/gh/git-pr-ai-review.ts +6 -5
- package/scripts/gh/git-pr-checks-eval.ts +28 -30
- package/scripts/gh/git-pr-checks-parse.ts +14 -16
- package/scripts/gh/git-pr-checks-watch.ts +17 -17
- package/scripts/gh/git-pr-checks.ts +20 -23
- package/scripts/gh/git-pr-coderabbit.ts +8 -6
- package/scripts/gh/git-pr-confirmation.ts +5 -5
- package/scripts/gh/git-pr-managed-config.ts +7 -9
- package/scripts/gh/git-pr-messages.ts +1 -1
- package/scripts/gh/git-pr.ts +15 -16
- package/scripts/gh/github-issue-url.ts +8 -9
- package/scripts/git/base-tree.ts +66 -0
- package/scripts/git/change-base.ts +42 -2
- package/scripts/git/changed-file-scope.ts +5 -5
- package/scripts/git/changed-paths.ts +1 -2
- package/scripts/git/constants.ts +2 -2
- package/scripts/git/git-branch.ts +1 -1
- package/scripts/git/git-closes-keyword.ts +3 -3
- package/scripts/git/git-command.ts +53 -41
- package/scripts/git/git-common-directory.ts +3 -3
- package/scripts/git/git-diff-reads.ts +14 -15
- package/scripts/git/git-error.ts +1 -1
- package/scripts/git/git-execa-error.ts +1 -2
- package/scripts/git/git-issue.ts +10 -8
- package/scripts/git/git-location-environment.ts +3 -4
- package/scripts/git/git-ls-remote.ts +6 -8
- package/scripts/git/git-pre-push-hook.ts +11 -10
- package/scripts/git/git-preflight.ts +5 -5
- package/scripts/git/git-push-transport.ts +2 -2
- package/scripts/git/git-remote-branch.ts +1 -2
- package/scripts/git/git-schemas.ts +16 -23
- package/scripts/git/git-spawn-sync.ts +1 -1
- package/scripts/git/git-spawn.ts +37 -14
- package/scripts/git/git-ssh-keepalive.ts +12 -5
- package/scripts/git/git-staging.ts +7 -8
- package/scripts/git/git-workflow.ts +1 -1
- package/scripts/git/git-worktree.ts +35 -27
- package/scripts/git/gone-branch.ts +2 -2
- package/scripts/git/listing-cutoff.ts +1 -2
- package/scripts/git/lockfile-sync.ts +65 -0
- package/scripts/git/main-merge-guard.ts +1 -2
- package/scripts/git/main-merge.ts +7 -7
- package/scripts/git/main-sync.ts +23 -8
- package/scripts/git/parse-json-array.ts +18 -23
- package/scripts/git/repository-lock.ts +34 -2
- package/scripts/git/stash/git-stash.ts +4 -5
- package/scripts/git/stash/stash-orphans.ts +5 -3
- package/scripts/git/stash/stash-pop-args.ts +1 -1
- package/scripts/git/stash/stash-pop-cli.ts +3 -3
- package/scripts/git/stash/stash-sweep-lock.ts +2 -2
- package/scripts/hooks/batch-guard.ts +11 -13
- package/scripts/hooks/check-commit-message.ts +12 -9
- package/scripts/hooks/codex-hook-adapter.ts +16 -10
- package/scripts/hooks/edited-cspell.ts +3 -4
- package/scripts/hooks/format-edited-cli.ts +1 -1
- package/scripts/hooks/format-edited-file.ts +11 -17
- package/scripts/hooks/format-rewrite-notice.ts +19 -17
- package/scripts/hooks/pre-push-unit.ts +10 -14
- package/scripts/hooks/pretool-guard-cli.ts +4 -4
- package/scripts/hooks/pretool-guard.ts +93 -18
- package/scripts/hooks/reserved-run.ts +2 -2
- package/scripts/hooks/step-zero-notice.ts +1 -1
- package/scripts/hooks/stop-guard.ts +21 -10
- package/scripts/init/basic-path-migration.ts +2 -2
- package/scripts/init/claude-kit-only-settings.ts +2 -2
- package/scripts/init/claude-plugin-config.ts +2 -2
- package/scripts/init/distributed-paths.ts +4 -4
- package/scripts/init/hook-command-rewrite.ts +3 -3
- package/scripts/init/hook-launch.ts +5 -5
- package/scripts/init/init-actions.ts +13 -0
- package/scripts/init/init-ai-copy.ts +11 -11
- package/scripts/init/init-bootstrap.ts +3 -3
- package/scripts/init/init-copy-content.ts +4 -4
- package/scripts/init/init-logic-json-merge.ts +7 -9
- package/scripts/init/init-logic-migrate.ts +1 -1
- package/scripts/init/init-logic-templates.ts +1 -1
- package/scripts/init/init-logic-workspace.ts +4 -4
- package/scripts/init/init-logic-yaml-merge.ts +2 -2
- package/scripts/init/init-logic.ts +19 -22
- package/scripts/init/init.ts +12 -8
- package/scripts/init/kit-base-preset.ts +1 -1
- package/scripts/init/kit-setup-state.ts +1 -1
- package/scripts/init/kit-written-paths.ts +1 -2
- package/scripts/init/package-manager-pin.ts +35 -0
- package/scripts/init/project-profile-cli.ts +1 -1
- package/scripts/init/project-profile.ts +3 -3
- package/scripts/init/session-language-environment.ts +1 -1
- package/scripts/init/start-exec.ts +3 -4
- package/scripts/init/start-plan.ts +2 -2
- package/scripts/init/start-setup-pr.ts +3 -2
- package/scripts/init/start-steps.ts +2 -2
- package/scripts/init/tsconfig-preset-migration.ts +1 -1
- package/scripts/init/vscode-tasks.ts +62 -0
- package/scripts/issue/baseline-measure.ts +2 -2
- package/scripts/issue/behavior-change-lint.ts +2 -2
- package/scripts/issue/defect-rate-cli.ts +6 -7
- package/scripts/issue/defect-rate.ts +37 -27
- package/scripts/issue/git-next-issues.ts +9 -8
- package/scripts/issue/issue-auto-ok.ts +49 -11
- package/scripts/issue/issue-backlinks-cli.ts +5 -5
- package/scripts/issue/issue-backlinks.ts +6 -6
- package/scripts/issue/issue-cite-cli.ts +20 -18
- package/scripts/issue/issue-cite.ts +18 -8
- package/scripts/issue/issue-closing-pr.ts +4 -4
- package/scripts/issue/issue-comment-cli.ts +6 -4
- package/scripts/issue/issue-file-cli.ts +75 -15
- package/scripts/issue/issue-file-fold.ts +155 -0
- package/scripts/issue/issue-file.ts +14 -6
- package/scripts/issue/issue-fold-cli.ts +14 -9
- package/scripts/issue/issue-fold.ts +23 -8
- package/scripts/issue/issue-labels.ts +46 -37
- package/scripts/issue/issue-lint-cli.ts +2 -2
- package/scripts/issue/issue-lint.ts +1 -1
- package/scripts/issue/issue-merged.ts +10 -4
- package/scripts/issue/issue-number-shape.ts +27 -0
- package/scripts/issue/issue-rank.ts +1 -1
- package/scripts/issue/issue-read-cli.ts +4 -5
- package/scripts/issue/issue-read.ts +4 -5
- package/scripts/issue/issue-reference.ts +5 -5
- package/scripts/issue/issue-release-cli.ts +165 -0
- package/scripts/issue/issue-release.ts +58 -0
- package/scripts/issue/issue-report-failures.ts +7 -4
- package/scripts/issue/issue-scout-cli.ts +11 -11
- package/scripts/issue/issue-scout-closed.ts +4 -4
- package/scripts/issue/issue-scout.ts +4 -5
- package/scripts/issue/issue-state-cli.ts +17 -10
- package/scripts/issue/issue-state.ts +12 -13
- package/scripts/issue/issue-wip.ts +7 -7
- package/scripts/issue/markdown-section.ts +3 -3
- package/scripts/issue/measure-rerun-cli.ts +10 -9
- package/scripts/issue/reproduction-measure.ts +3 -3
- package/scripts/issue/session-cite.ts +56 -0
- package/scripts/josh/agent-session-environment.ts +10 -8
- package/scripts/josh/cli-body.ts +2 -2
- package/scripts/josh/command-suggest.ts +1 -1
- package/scripts/josh/file-map-stamp.ts +20 -23
- package/scripts/josh/hook-decision.ts +24 -28
- package/scripts/josh/josh-command-map.ts +4 -1
- package/scripts/josh/josh-command-types.ts +32 -34
- package/scripts/josh/josh-commands-ai.ts +6 -6
- package/scripts/josh/josh-commands-backlog.ts +15 -3
- package/scripts/josh/josh-commands-clone.ts +1 -1
- package/scripts/josh/josh-commands-development.ts +33 -4
- package/scripts/josh/josh-commands-document.ts +3 -3
- package/scripts/josh/josh-commands-guard.ts +3 -3
- package/scripts/josh/josh-commands-issue.ts +11 -5
- package/scripts/josh/josh-commands-lane.ts +16 -5
- package/scripts/josh/josh-commands-lint.ts +1 -1
- package/scripts/josh/josh-commands-maintenance.ts +2 -2
- package/scripts/josh/josh-commands-run.ts +20 -6
- package/scripts/josh/josh-commands-split.ts +1 -2
- package/scripts/josh/josh-commands-versioning.ts +5 -5
- package/scripts/josh/josh-commands-workflow.ts +30 -22
- package/scripts/josh/josh-environment-file.ts +1 -1
- package/scripts/josh/josh-in-process.ts +3 -3
- package/scripts/josh/josh-logic.ts +10 -10
- package/scripts/josh/josh-run.ts +3 -3
- package/scripts/josh/josh-verdict.ts +9 -12
- package/scripts/josh/josh.ts +3 -3
- package/scripts/josh/kit-only.ts +2 -2
- package/scripts/josh/path-decision.ts +3 -3
- package/scripts/josh/platform-temporary.ts +7 -5
- package/scripts/josh/process-identity.ts +24 -6
- package/scripts/josh/process-owner.ts +4 -4
- package/scripts/josh/session-language-cli.ts +53 -11
- package/scripts/josh/session-language.ts +1 -1
- package/scripts/josh/stamp-file.ts +48 -29
- package/scripts/josh/stamp-record.ts +57 -0
- package/scripts/lane/lane-await.ts +35 -11
- package/scripts/lane/lane-cache.ts +6 -6
- package/scripts/lane/lane-capacity.ts +32 -17
- package/scripts/lane/lane-child-invocation.ts +17 -15
- package/scripts/lane/lane-child-marker.ts +12 -12
- package/scripts/lane/lane-cli.ts +20 -13
- package/scripts/lane/lane-close.ts +6 -6
- package/scripts/lane/lane-dispatch.ts +61 -72
- package/scripts/lane/lane-environment.ts +5 -5
- package/scripts/lane/lane-guard-policy.ts +7 -21
- package/scripts/lane/lane-handoff.ts +2 -2
- package/scripts/lane/lane-install.ts +9 -10
- package/scripts/lane/lane-launch-cli.ts +13 -8
- package/scripts/lane/lane-ledger.ts +73 -11
- package/scripts/lane/lane-leftover.ts +44 -30
- package/scripts/lane/lane-limit-cli.ts +160 -0
- package/scripts/lane/lane-limit-override.ts +74 -0
- package/scripts/lane/lane-load.ts +19 -68
- package/scripts/lane/lane-measure-cli.ts +15 -25
- package/scripts/lane/lane-occupancy.ts +6 -4
- package/scripts/lane/lane-open.ts +25 -24
- package/scripts/lane/lane-output.ts +4 -3
- package/scripts/lane/lane-paths.ts +22 -8
- package/scripts/lane/lane-phase.ts +33 -0
- package/scripts/lane/lane-reap.ts +2 -2
- package/scripts/lane/lane-registry.ts +27 -15
- package/scripts/lane/lane-relaunch.ts +9 -9
- package/scripts/lane/lane-report.ts +5 -4
- package/scripts/lane/lane-resume.ts +2 -2
- package/scripts/lane/lane-sampler.ts +55 -0
- package/scripts/lane/lane-seed.ts +7 -7
- package/scripts/lane/lane-stage-stats.ts +135 -0
- package/scripts/lane/lane-start-point.ts +8 -11
- package/scripts/lane/lane-stats.ts +60 -15
- package/scripts/lane/lane-stray.ts +140 -0
- package/scripts/lane/lane-vacant.ts +1 -1
- package/scripts/lane/openai-lane-supervisor-decision.ts +3 -7
- package/scripts/lane/openai-lane-supervisor-owner.ts +3 -9
- package/scripts/lane/openai-review-broker.ts +2 -4
- package/scripts/lib/ancestor-directories.ts +1 -1
- package/scripts/lib/bounded-pool.ts +2 -2
- package/scripts/lib/buffered-process.ts +4 -6
- package/scripts/lib/caddy-logs.sh +0 -0
- package/scripts/lib/cli-flags.ts +39 -6
- package/scripts/lib/error-message.ts +1 -1
- package/scripts/lib/json-value.ts +17 -3
- package/scripts/lib/poll.ts +1 -1
- package/scripts/lib/status-icons.ts +3 -3
- package/scripts/lib/timed-fetch.ts +1 -1
- package/scripts/lib/timeouts.ts +1 -1
- package/scripts/lines/bytes-command.ts +3 -4
- package/scripts/lines/effective-limit.ts +25 -12
- package/scripts/lines/line-budget.ts +47 -55
- package/scripts/lines/line-targets.ts +6 -2
- package/scripts/lines/lines-command.ts +3 -3
- package/scripts/lint/cspell-cached.ts +1 -1
- package/scripts/lint/cycle-recheck.ts +122 -0
- package/scripts/lint/format.ts +1 -2
- package/scripts/lint/lint-parallel.ts +34 -19
- package/scripts/lint/lint-related-scope.ts +25 -15
- package/scripts/lint/lint-related.ts +6 -7
- package/scripts/managed-marker/index.ts +1 -1
- package/scripts/managed-marker/managed-marker-logic.ts +1 -2
- package/scripts/notify/git-notify.ts +9 -7
- package/scripts/notify/telegram-notify.ts +53 -37
- package/scripts/notify/telegram-test-logic.ts +3 -3
- package/scripts/notify/telegram-test.ts +45 -30
- package/scripts/observations/observation-ledger-home.ts +14 -8
- package/scripts/observations/observation-ledger-line.ts +3 -2
- package/scripts/observations/observation-ledger-migrate.ts +3 -4
- package/scripts/observations/observation-ledger-prepare.ts +4 -4
- package/scripts/observations/observation-ledger.ts +14 -15
- package/scripts/observations/observation-record-cli.ts +83 -0
- package/scripts/observations/observation-record.ts +91 -0
- package/scripts/observations/observations-flush-cli.ts +1 -1
- package/scripts/observations/observations-flush-landing.ts +7 -6
- package/scripts/observations/observations-flush.ts +26 -27
- package/scripts/overrides/overrides-check.ts +18 -8
- package/scripts/package/package-scout-cli.ts +1 -1
- package/scripts/package/package-scout-format.ts +2 -2
- package/scripts/package/package-scout.ts +1 -1
- package/scripts/propagate/propagate-git-failure.ts +1 -1
- package/scripts/propagate/propagate-git.ts +7 -7
- package/scripts/propagate/propagate-plan.ts +2 -2
- package/scripts/propagate/propagate-publish.ts +2 -3
- package/scripts/propagate/propagate-run.ts +5 -7
- package/scripts/propagate/propagate-select.ts +1 -1
- package/scripts/propagate/propagate-steps.ts +19 -20
- package/scripts/propagate/propagate-targets.ts +6 -10
- package/scripts/propagate/propagate.ts +5 -5
- package/scripts/refactor/import-graph.ts +1 -1
- package/scripts/refactor/refactor-lint.ts +4 -10
- package/scripts/refactor/refactor-scan-cli.ts +1 -1
- package/scripts/refactor/refactor-scan.ts +2 -2
- package/scripts/refactor/refactor-targets.ts +1 -1
- package/scripts/release/github-release-cli.ts +25 -3
- package/scripts/release/github-release-environment.ts +1 -0
- package/scripts/release/github-release-runs.ts +115 -0
- package/scripts/release/github-release.ts +13 -67
- package/scripts/release/release-cli.ts +21 -4
- package/scripts/release/release-history.ts +6 -10
- package/scripts/release/release-plan.ts +3 -3
- package/scripts/release/release-progress.ts +3 -4
- package/scripts/release/release-publish.ts +8 -9
- package/scripts/release/release-scope-cli.ts +8 -10
- package/scripts/release/release-tag.ts +6 -8
- package/scripts/release/release-worktree.ts +5 -5
- package/scripts/repo/auto-merge-setting-logic.ts +7 -9
- package/scripts/repo/auto-merge-setting.ts +1 -1
- package/scripts/repo/repo-setting.ts +4 -4
- package/scripts/repo/repository-labels.ts +1 -1
- package/scripts/repo/required-checks-logic.ts +3 -3
- package/scripts/repo/required-checks-report.ts +1 -1
- package/scripts/repo/ruleset-check-cli.ts +1 -1
- package/scripts/repo/ruleset-check.ts +1 -1
- package/scripts/report/report-format-reference.ts +26 -0
- package/scripts/report/report-lint-cli.ts +2 -2
- package/scripts/report/report-lint.ts +16 -2
- package/scripts/review/disposition-cli.ts +2 -2
- package/scripts/review/disposition-logic.ts +1 -1
- package/scripts/review/live-evidence.ts +9 -6
- package/scripts/review/review-attest-cli.ts +1 -2
- package/scripts/review/review-attest.ts +3 -3
- package/scripts/review/review-brief-cli.ts +19 -20
- package/scripts/review/review-brief.ts +29 -32
- package/scripts/review/review-checkout.ts +2 -2
- package/scripts/review/review-diff-parts.ts +3 -5
- package/scripts/review/review-diff-write.ts +1 -1
- package/scripts/review/review-finding-ledger.ts +7 -4
- package/scripts/review/review-findings-cli.ts +2 -2
- package/scripts/review/review-level.ts +4 -7
- package/scripts/review/review-record-cli.ts +73 -16
- package/scripts/review/review-record.ts +5 -4
- package/scripts/review/review-round2-cli.ts +2 -3
- package/scripts/review/review-round2.ts +13 -21
- package/scripts/review/review-stamps.ts +9 -71
- package/scripts/review/review-tree.ts +4 -5
- package/scripts/rules/bash-triggers.ts +4 -4
- package/scripts/rules/decision-oracle-batch.ts +5 -6
- package/scripts/rules/decision-oracle-stage.ts +1 -1
- package/scripts/rules/decision-oracle-tokens.ts +1 -2
- package/scripts/rules/decision-oracle.ts +2 -2
- package/scripts/rules/delivered-rules.ts +61 -406
- package/scripts/rules/destructive-command.ts +2 -2
- package/scripts/rules/direct-filing.ts +4 -4
- package/scripts/rules/direct-pr-create.ts +2 -2
- package/scripts/rules/early-heartbeat.ts +15 -19
- package/scripts/rules/file-body.ts +5 -6
- package/scripts/rules/filing-cap.ts +6 -7
- package/scripts/rules/filing-offer.ts +1 -1
- package/scripts/rules/firing-point.ts +6 -6
- package/scripts/rules/gh-api.ts +2 -2
- package/scripts/rules/git-argv.ts +3 -3
- package/scripts/rules/git-force.ts +2 -2
- package/scripts/rules/hook-context-line.ts +31 -0
- package/scripts/rules/implementation-cut-verdict.ts +5 -8
- package/scripts/rules/implementation-cut.ts +35 -32
- package/scripts/rules/index-guard.ts +2 -2
- package/scripts/rules/issue-citation.ts +7 -7
- package/scripts/rules/issue-comments.ts +21 -13
- package/scripts/rules/josh-git-bare.ts +2 -2
- package/scripts/rules/lane-background.ts +14 -16
- package/scripts/rules/lane-carry-conflict.ts +41 -5
- package/scripts/rules/lane-interactive-ask.ts +6 -9
- package/scripts/rules/lane-park.ts +12 -16
- package/scripts/rules/lane-split-park.ts +1 -2
- package/scripts/rules/lane-switch-main.ts +10 -13
- package/scripts/rules/last-prompt.ts +1 -1
- package/scripts/rules/oracle-consulted.ts +5 -5
- package/scripts/rules/oracle-firing.ts +6 -9
- package/scripts/rules/oracle-list-cli.ts +2 -2
- package/scripts/rules/permission-guards.ts +2 -2
- package/scripts/rules/piped-verification.ts +79 -9
- package/scripts/rules/poll-loop.ts +9 -11
- package/scripts/rules/pre-gate-cut.ts +33 -30
- package/scripts/rules/prior-comment-read.ts +3 -3
- package/scripts/rules/protected-files.ts +25 -13
- package/scripts/rules/raw-field-body.ts +3 -4
- package/scripts/rules/reply-language.ts +1 -1
- package/scripts/rules/rule-body-guard.ts +10 -12
- package/scripts/rules/rule-guard.ts +1 -1
- package/scripts/rules/rule-list.ts +51 -0
- package/scripts/rules/rule-registry-rows.ts +282 -0
- package/scripts/rules/rule-registry.ts +109 -0
- package/scripts/rules/rule-value-cache.ts +2 -2
- package/scripts/rules/rule-value-cli.ts +6 -4
- package/scripts/rules/rule-value.ts +61 -22
- package/scripts/rules/run-tail-rule.ts +11 -15
- package/scripts/rules/shell-body-trigger.ts +7 -7
- package/scripts/rules/shell-segments.ts +2 -4
- package/scripts/rules/stop-rules.ts +54 -41
- package/scripts/rules/tail-commands.ts +1 -1
- package/scripts/rules/test-declared-commit.ts +2 -2
- package/scripts/rules/third-party-write.ts +3 -3
- package/scripts/rules/worktree-guard.ts +12 -5
- package/scripts/run/add/run-add-cli.ts +165 -0
- package/scripts/run/add/run-add.ts +124 -0
- package/scripts/run/board/run-board-cli.ts +207 -0
- package/scripts/run/board/run-board-closed.ts +95 -0
- package/scripts/run/board/run-board-every.ts +60 -0
- package/scripts/run/board/run-board-fetch.ts +38 -0
- package/scripts/run/board/run-board-fit.ts +219 -0
- package/scripts/run/board/run-board-github.ts +162 -0
- package/scripts/run/board/run-board-header.ts +275 -0
- package/scripts/run/board/run-board-kind.ts +35 -0
- package/scripts/run/board/run-board-labels.ts +299 -0
- package/scripts/run/board/run-board-layout.ts +222 -0
- package/scripts/run/board/run-board-link.ts +31 -0
- package/scripts/run/board/run-board-machine.ts +198 -0
- package/scripts/run/board/run-board-notes.ts +103 -0
- package/scripts/run/board/run-board-phase.ts +136 -0
- package/scripts/run/board/run-board-plan.ts +129 -0
- package/scripts/run/board/run-board-read.ts +62 -0
- package/scripts/run/board/run-board-render-legend.ts +82 -0
- package/scripts/run/board/run-board-render-notes.ts +77 -0
- package/scripts/run/board/run-board-render-slot.ts +50 -0
- package/scripts/run/board/run-board-render.ts +407 -0
- package/scripts/run/board/run-board-scope.ts +17 -0
- package/scripts/run/board/run-board-screen.ts +43 -0
- package/scripts/run/board/run-board-span.ts +66 -0
- package/scripts/run/board/run-board-spin.ts +115 -0
- package/scripts/run/board/run-board-state.ts +113 -0
- package/scripts/run/board/run-board-status.ts +279 -0
- package/scripts/run/board/run-board-tick.ts +210 -0
- package/scripts/run/board/run-board-track.ts +22 -0
- package/scripts/run/board/run-board-usage-read.ts +255 -0
- package/scripts/run/board/run-board-usage-rusage.ts +124 -0
- package/scripts/run/board/run-board-usage-text.ts +80 -0
- package/scripts/run/board/run-board-usage.ts +165 -0
- package/scripts/run/carry/run-carry-added.ts +62 -0
- package/scripts/run/carry/run-carry-args.ts +25 -22
- package/scripts/run/carry/run-carry-change.ts +1 -1
- package/scripts/run/carry/run-carry-cli.ts +71 -48
- package/scripts/run/carry/run-carry-conversation.ts +6 -7
- package/scripts/run/carry/run-carry-ended.ts +85 -0
- package/scripts/run/carry/run-carry-reclaim.ts +1 -1
- package/scripts/run/carry/run-carry-stash.ts +3 -2
- package/scripts/run/carry/run-carry-streak.ts +8 -10
- package/scripts/run/carry/run-carry.ts +85 -89
- package/scripts/run/cut/run-cut-args.ts +7 -7
- package/scripts/run/cut/run-cut-cli.ts +68 -37
- package/scripts/run/cut/run-cut-handoff.ts +15 -15
- package/scripts/run/cut/run-cut-report.ts +37 -16
- package/scripts/run/cut/run-cut.ts +63 -77
- package/scripts/run/detached-launch.ts +35 -50
- package/scripts/run/entry/run-entry-cli.ts +48 -27
- package/scripts/run/entry/run-entry-stop.ts +7 -9
- package/scripts/run/entry/run-entry.ts +5 -6
- package/scripts/run/event/run-event-cli.ts +5 -6
- package/scripts/run/event/run-event-filed.ts +69 -0
- package/scripts/run/event/run-event-follow.ts +3 -3
- package/scripts/run/event/run-event-plan.ts +38 -0
- package/scripts/run/event/run-event-render.ts +10 -4
- package/scripts/run/event/run-event-scope.ts +47 -18
- package/scripts/run/event/run-event-stream-emit.ts +64 -11
- package/scripts/run/event/run-event-stream.ts +172 -43
- package/scripts/run/event/run-event-watch.ts +4 -6
- package/scripts/run/hold/run-hold-cli.ts +65 -62
- package/scripts/run/hold/run-hold.ts +88 -46
- package/scripts/run/merge/run-merge-cli.ts +116 -77
- package/scripts/run/merge/run-merge-collect.ts +107 -0
- package/scripts/run/merge/run-merge-steps.ts +112 -65
- package/scripts/run/merge/run-merge-token.ts +30 -0
- package/scripts/run/merge/run-merge.ts +31 -22
- package/scripts/run/progress/run-progress-args.ts +4 -4
- package/scripts/run/progress/run-progress-cli.ts +39 -50
- package/scripts/run/progress/run-progress-clock.ts +25 -32
- package/scripts/run/progress/run-progress-config.ts +6 -9
- package/scripts/run/progress/run-progress-read.ts +9 -10
- package/scripts/run/progress/run-progress.ts +48 -53
- package/scripts/run/review/run-review-cli.ts +6 -6
- package/scripts/run/review/run-review-steps.ts +6 -6
- package/scripts/run/review/run-review.ts +9 -11
- package/scripts/run/run-cli-fault.ts +29 -0
- package/scripts/run/run-ending-cli.ts +3 -3
- package/scripts/run/run-ending.ts +10 -14
- package/scripts/run/run-halfrun-resume.ts +6 -8
- package/scripts/run/run-headless.ts +25 -12
- package/scripts/run/run-invocation.ts +17 -22
- package/scripts/run/run-label.ts +7 -5
- package/scripts/run/run-liveness-cli.ts +19 -6
- package/scripts/run/run-liveness.ts +27 -38
- package/scripts/run/run-next-cli.ts +5 -9
- package/scripts/run/run-next.ts +4 -5
- package/scripts/run/run-parent-cut-hook.ts +10 -12
- package/scripts/run/run-preflight.ts +25 -29
- package/scripts/run/run-prep-cli.ts +17 -13
- package/scripts/run/run-prep-locate.ts +4 -5
- package/scripts/run/run-prep.ts +7 -10
- package/scripts/run/run-prrun-resume.ts +2 -2
- package/scripts/run/run-report-cli.ts +4 -4
- package/scripts/run/run-report.ts +9 -14
- package/scripts/run/run-retrospective.ts +3 -3
- package/scripts/run/run-section.ts +42 -0
- package/scripts/run/run-stage-read.ts +2 -2
- package/scripts/run/run-stage.ts +6 -4
- package/scripts/run/run-status-cli.ts +7 -5
- package/scripts/run/run-status.ts +6 -7
- package/scripts/run/run-step-cli.ts +13 -15
- package/scripts/run/run-step.ts +62 -48
- package/scripts/run/run-stop-notify.ts +7 -8
- package/scripts/run/run-stranded-cli.ts +1 -1
- package/scripts/run/run-stranded-detect.ts +4 -4
- package/scripts/run/run-stranded.ts +11 -13
- package/scripts/run/run-tail-cli.ts +15 -16
- package/scripts/run/run-tail.ts +14 -33
- package/scripts/run/run-watcher-guard-cli.ts +3 -4
- package/scripts/run/run-watcher-guard.ts +11 -12
- package/scripts/run/run-watcher-hook.ts +6 -12
- package/scripts/run/ship/run-ship-cli.ts +67 -33
- package/scripts/run/ship/run-ship-detach.ts +15 -13
- package/scripts/run/ship/run-ship-lock.ts +1 -1
- package/scripts/run/ship/run-ship-next.ts +7 -8
- package/scripts/run/ship/run-ship-pre-detach.ts +27 -11
- package/scripts/run/ship/run-ship-preflight.ts +10 -11
- package/scripts/run/ship/run-ship-probe.ts +4 -4
- package/scripts/run/ship/run-ship-return.ts +1 -1
- package/scripts/run/ship/run-ship-review-steps.ts +43 -24
- package/scripts/run/ship/run-ship-review.ts +12 -14
- package/scripts/run/ship/run-ship-scoped.ts +15 -6
- package/scripts/run/ship/run-ship-stage.ts +80 -26
- package/scripts/run/ship/run-ship-steps.ts +26 -16
- package/scripts/run/ship/run-ship-stop-text.ts +4 -2
- package/scripts/run/ship/run-ship-sync.ts +9 -8
- package/scripts/run/ship/run-ship.ts +17 -32
- package/scripts/run/tidy/run-tidy-cli.ts +9 -5
- package/scripts/run/tidy/run-tidy-lanes.ts +18 -7
- package/scripts/run/tidy/run-tidy-stashes.ts +8 -8
- package/scripts/run/tidy/run-tidy.ts +4 -3
- package/scripts/run/wake/run-wake-cli.ts +27 -33
- package/scripts/run/wake/run-wake-describe.ts +76 -29
- package/scripts/run/wake/run-wake-driver.ts +14 -14
- package/scripts/run/wake/run-wake-handoff.ts +6 -6
- package/scripts/run/wake/run-wake-loop.ts +13 -21
- package/scripts/run/wake/run-wake-restart.ts +4 -5
- package/scripts/run/wake/run-wake-session.ts +23 -27
- package/scripts/run/wake/run-wake.ts +57 -328
- package/scripts/safe-chain/ci-installer-pin.ts +3 -3
- package/scripts/safe-chain/pack-hook.ts +2 -2
- package/scripts/safe-chain/preinstall-command.ts +2 -2
- package/scripts/security/security-audit-logic.ts +1 -1
- package/scripts/security/security-audit-provision-logic.ts +1 -1
- package/scripts/security/security-audit-provision.ts +2 -2
- package/scripts/security/security-audit.ts +5 -5
- package/scripts/security/security-updates-logic.ts +2 -3
- package/scripts/security/security-updates.ts +2 -4
- package/scripts/self-sync-guard/index.ts +1 -1
- package/scripts/self-sync-guard/self-sync-guard-logic.ts +2 -2
- package/scripts/self-sync-guard/self-sync-refusal.ts +1 -1
- package/scripts/sonar/sonar-hotspots-cli.ts +1 -1
- package/scripts/sonar/sonar-hotspots.ts +1 -1
- package/scripts/sonar/sonar-new-code-cli.ts +1 -1
- package/scripts/sonar/sonar-new-code.ts +1 -1
- package/scripts/sonar/sonar-project.ts +1 -1
- package/scripts/split/split-assess-cli.ts +1 -1
- package/scripts/split/split-assess.ts +3 -3
- package/scripts/sync/directory-copy-guard.ts +2 -3
- package/scripts/sync/managed-config-scope-cli.ts +1 -2
- package/scripts/sync/managed-config-scope.ts +4 -4
- package/scripts/sync/plugin-skill-directories.ts +2 -2
- package/scripts/sync/reconcile-templates.ts +17 -8
- package/scripts/sync/removed-skill-manifest.ts +2 -3
- package/scripts/sync/sync-ai-files.ts +7 -7
- package/scripts/sync/sync-configs.ts +30 -3
- package/scripts/sync/sync-hook-safety.ts +2 -2
- package/scripts/sync/sync.ts +23 -10
- package/scripts/sync/synced-paths.ts +2 -1
- package/scripts/sync/workflow-pin-logic.ts +1 -1
- package/scripts/test/test-declared-changed.ts +4 -4
- package/scripts/test/test-declared-logic.ts +2 -3
- package/scripts/test/test-declared-match.ts +25 -4
- package/scripts/test/test-declared.ts +26 -9
- package/scripts/test/test-red-commit.ts +3 -2
- package/scripts/test/test-red-logic.ts +7 -14
- package/scripts/test/test-red.ts +12 -47
- package/scripts/test/test-related-scope.ts +2 -3
- package/scripts/test/test-related.ts +3 -3
- package/scripts/test/test-type-logic.ts +1 -2
- package/scripts/test/test-unit-guard.ts +13 -17
- package/scripts/test/unit-worker-share.ts +7 -8
- package/scripts/time-runtime/time-agent-bundles.ts +2 -4
- package/scripts/time-runtime/time-background.ts +17 -21
- package/scripts/time-runtime/time-batch-guard.ts +67 -342
- package/scripts/time-runtime/time-bundle-call.ts +26 -28
- package/scripts/time-runtime/time-bundles.ts +11 -12
- package/scripts/time-runtime/time-call-identity.ts +1 -1
- package/scripts/time-runtime/time-command-key.ts +2 -2
- package/scripts/time-runtime/time-density-hook.ts +8 -11
- package/scripts/time-runtime/time-density.ts +5 -5
- package/scripts/time-runtime/time-followup-stage.ts +7 -7
- package/scripts/time-runtime/time-format.ts +5 -5
- package/scripts/time-runtime/time-hook-transcript.ts +3 -3
- package/scripts/time-runtime/time-instant.ts +1 -1
- package/scripts/time-runtime/time-markers.ts +15 -19
- package/scripts/time-runtime/time-phase-names.ts +3 -3
- package/scripts/time-runtime/time-reported-failure.ts +15 -19
- package/scripts/time-runtime/time-round-trips.ts +20 -23
- package/scripts/time-runtime/time-shell.ts +8 -8
- package/scripts/time-runtime/time-single-check.ts +1 -2
- package/scripts/time-runtime/time-spans.ts +35 -40
- package/scripts/time-runtime/time-tool-call.ts +15 -16
- package/scripts/time-runtime/time-transcript-line.ts +53 -34
- package/scripts/time-runtime/time-writes.ts +5 -5
- package/scripts/ui/ui-routes-cli.ts +1 -2
- package/scripts/ui/ui-routes.ts +1 -2
- package/scripts/version/bump-version.ts +1 -1
- package/scripts/version/fresh-metadata-cache.ts +2 -2
- package/scripts/version/latest-corepack.ts +129 -98
- package/scripts/version/latest-lane-guard.ts +1 -1
- package/scripts/version/latest-scope-cli.ts +2 -2
- package/scripts/version/latest-stamp.ts +1 -2
- package/scripts/version/latest-update.ts +2 -2
- package/scripts/version/npm-registry.ts +2 -2
- package/scripts/version/package-manager-version.ts +18 -0
- package/scripts/version/publishable-range-check.ts +2 -1
- package/scripts/version/publishable-range.ts +1 -1
- package/scripts/version/release-age.ts +11 -11
- package/scripts/version/release-hold.ts +2 -2
- package/scripts/version/safe-chain-version-update.ts +3 -3
- package/scripts/version/version-check-logic.ts +2 -3
- package/scripts/version/version-check.ts +1 -2
- package/scripts/version/version-command-config.ts +2 -2
- package/scripts/version/version-commands.ts +3 -3
- package/scripts/version/version-remote.ts +4 -4
- package/scripts/version/version-targets.ts +2 -2
- package/templates/gitignore +7 -0
- package/templates/workflows/github-release.yml +4 -0
- package/dist/hooks/chunk-NV2JRZZO.js +0 -6385
- package/dist/hooks/chunk-RKUAD3I6.js +0 -90
- package/dist/hooks/chunk-WPALEIRX.js +0 -18
- package/scripts/backlog/backlog-restructure.ts +0 -152
- package/scripts/rules/issue-fold-rule.ts +0 -72
- package/scripts/rules/wip-cap.ts +0 -63
- package/scripts/run/run-issue-number.ts +0 -19
|
@@ -1,24 +1,25 @@
|
|
|
1
1
|
# The observation ledger — grammar, commit path and promotion
|
|
2
2
|
|
|
3
3
|
**Read only when the depth test in `observation-filing.md` turns an observation away, or a user
|
|
4
|
-
reports a bug** (its kind of miss, below), in the turn that appends the line
|
|
4
|
+
reports a bug** (its kind of miss, below), in the turn that appends the line.
|
|
5
5
|
A run that files outright, or finds nothing, never reads it. This file is the single source of the ledger's grammar, its commit path and the
|
|
6
|
-
second-sighting promotion.
|
|
6
|
+
second-sighting promotion. Provenance: `docs/maintainers/observation-ledger-rationale.md` → "Where
|
|
7
|
+
each rule came from".
|
|
7
8
|
|
|
8
9
|
## The ledger — where an observation that cannot cite a blockage goes
|
|
9
10
|
|
|
10
|
-
**An observation the depth test turns away is recorded in the ledger, not discarded
|
|
11
|
-
|
|
11
|
+
**An observation the depth test turns away is recorded in the ledger, not discarded.**
|
|
12
|
+
Rationale: `docs/maintainers/observation-ledger-rationale.md` → "Why the
|
|
12
13
|
ledger exists".
|
|
13
14
|
|
|
14
15
|
- **The destination is the `.josh/observations/` directory in the repository the
|
|
15
16
|
observation is about** — the same repository the Issue would have been filed into — **one file per
|
|
16
|
-
issue
|
|
17
|
+
issue**: append to `<N>.md` for the issue the run is executing (the number
|
|
17
18
|
its branch leads with, a lane's included), or to `<YYYY-MM-DD>.md` for a line written on the
|
|
18
19
|
default branch outside any issue's run. Parallel lanes therefore write different files, and their
|
|
19
20
|
pull requests never conflict on the ledger. **The count and the append are both run in that
|
|
20
21
|
repository's checkout** — in this repository, the work tree the run is in, a lane's inside a lane —
|
|
21
|
-
resolved the way `target-repository.md`
|
|
22
|
+
resolved the way `target-repository.md` resolves any cross-repository target, and the
|
|
22
23
|
directory is created on the first append where that repository has none. **The subject decides, never the
|
|
23
24
|
working directory**: an observation about this package's own orchestration, seen while a run is
|
|
24
25
|
inside a repository that consumes it, is recorded here rather than there — the append follows the
|
|
@@ -61,18 +62,22 @@ here rather than in the ledger** (`docs/maintainers/observation-ledger-rationale
|
|
|
61
62
|
ledger exists").
|
|
62
63
|
|
|
63
64
|
**The identity key is the whole of the repeat test — never a similarity judgement about the prose.**
|
|
64
|
-
Choose the key from the phenomenon rather than from the run, then
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
sits in. **The `|| true` is not decoration**: `grep -c` exits non-zero on a count of zero, which is
|
|
68
|
-
the first-sighting branch and the common one, so without it the step reads as a failed command
|
|
69
|
-
wherever an exit status is being watched. **A missing directory is still a first sighting** — `cat`
|
|
70
|
-
complains on standard error and the count is zero; the append below creates the directory.
|
|
65
|
+
Choose the key from the phenomenon rather than from the run, then record the sighting with one
|
|
66
|
+
command — it counts what the ledger already holds for the key, appends the line and prints the
|
|
67
|
+
verdict:
|
|
71
68
|
|
|
72
69
|
```bash
|
|
73
|
-
|
|
70
|
+
pnpm josh observation:record <slug> d<n> '<where>' '<what>' [--checkout <that repository's checkout>]
|
|
74
71
|
```
|
|
75
72
|
|
|
73
|
+
Standard output is one token: `file` (this is the second sighting — file it, below) or `ledger` (the
|
|
74
|
+
line is the record, nothing to file); standard error lists the earlier sightings and the file
|
|
75
|
+
appended to. A line that breaks the grammar, or uses `k:example`, is refused with exit 1 and nothing
|
|
76
|
+
appended. **Every
|
|
77
|
+
file of the directory is counted**, in the named checkout rather than the working directory, because
|
|
78
|
+
a recurrence is a recurrence whichever issue's file each sighting sits in; a missing directory is a
|
|
79
|
+
first sighting, and the append creates it.
|
|
80
|
+
|
|
76
81
|
Free-text comparison is what the key exists to replace, so two lines that read alike under different
|
|
77
82
|
keys are two observations, and a mis-keyed entry is corrected by appending a correctly-keyed line
|
|
78
83
|
rather than by editing the one already written.
|
|
@@ -83,27 +88,34 @@ could not.
|
|
|
83
88
|
|
|
84
89
|
## The commit path — how an appended line reaches the default branch
|
|
85
90
|
|
|
86
|
-
**An append nobody commits is an append nobody can count
|
|
91
|
+
**An append nobody commits is an append nobody can count.** Rationale:
|
|
87
92
|
`docs/maintainers/observation-ledger-rationale.md` → "Why the ledger has a commit path".
|
|
88
93
|
|
|
89
|
-
- **A run's appended lines ride its own commit
|
|
94
|
+
- **A run's appended lines ride its own commit.** `pnpm josh git` stages
|
|
90
95
|
`.josh/observations/` with the run's other changes, in the one staging step every entry
|
|
91
96
|
point goes through (`scripts/git/git-staging.ts`), so the lines are reviewed and merged with the
|
|
92
97
|
pull request of the run that recorded them, and the run's CI is the only wait they cost.
|
|
93
98
|
**Record before the commit, not after the merge:** a finding recorded with `pnpm josh review:record`
|
|
94
99
|
before `pnpm josh git -y` is carried; the time while CI runs is for the records that need no CI
|
|
95
100
|
result — filing an observation Issue, drafting the completion report.
|
|
96
|
-
- **A line that breaks the grammar is not carried
|
|
97
|
-
every file of the ledger first — after moving lines still on an old single-file path
|
|
98
|
-
(joshuafolkken/kit#2724, joshuafolkken/kit#2919) — and on a broken line leaves the ledger out of the
|
|
101
|
+
- **A line that breaks the grammar is not carried.** The staging step parses
|
|
102
|
+
every file of the ledger first — after moving lines still on an old single-file path — and on a broken line leaves the ledger out of the
|
|
99
103
|
commit and says so; the commit itself goes ahead.
|
|
100
|
-
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
104
|
+
- **A review round that passes after the pull request opened is recorded on the Issue, not in the
|
|
105
|
+
ledger** — `pnpm josh review:record --issue <N> --comment` posts the same `- rf:` lines as a comment
|
|
106
|
+
and appends nothing. That round reads only, so no commit of the run's follows it; a line in the tree
|
|
107
|
+
would be pushed onto the open pull request and its CI would start over. `pnpm josh ship --review`
|
|
108
|
+
does this for a passing round 2. **A round 2 that blocks records in the tree as before** — the fix it
|
|
109
|
+
stops for is pushed anyway and carries the lines. The comment's lines are outside the count
|
|
110
|
+
`pnpm josh review:findings` and the retrospective read.
|
|
111
|
+
- **`pnpm josh followup` commits any other line appended after the run's commit onto the pull request,
|
|
112
|
+
before the merge** — the residual path, for an observation recorded between the commit and the
|
|
113
|
+
merge. After the merge gates and before the CI wait, `followup` reads the tree and, **only when the
|
|
114
|
+
ledger holds a pending append**, stages the ledger paths alone, commits them and pushes the branch;
|
|
115
|
+
that push restarts the pull request's CI, and the wait that follows covers it. A broken line refuses
|
|
116
|
+
the merge, because the line would otherwise be lost with the branch. A run whose lines rode its
|
|
117
|
+
commit pays nothing.
|
|
118
|
+
- **A lane carries its own lines, in its own pull request.** Its writers
|
|
107
119
|
append to its own tree's `<N>.md`, so the two steps above take them to the default branch exactly as
|
|
108
120
|
they do for a run in the primary checkout. **Nothing is held in the primary checkout for later.**
|
|
109
121
|
- **`pnpm josh observations:flush` is left for a line written outside any issue's run** — the
|
|
@@ -114,11 +126,8 @@ could not.
|
|
|
114
126
|
and refuses a working tree holding anything besides the ledger, so a run in progress cannot be
|
|
115
127
|
flushed out from under. **Nothing is committed to the default branch directly.**
|
|
116
128
|
- **Nothing to flush is an answer, not a failure.** With the ledger matching the commit it sits on
|
|
117
|
-
the command prints `clean` and exits 0
|
|
118
|
-
|
|
119
|
-
- **The count the promotion below reads is a count of the default branch**, which is what this route
|
|
120
|
-
buys: a ledger line that merged is one every later run, every other machine and every fresh clone
|
|
121
|
-
can see, and only then can a second sighting be recognized as one.
|
|
129
|
+
the command prints `clean` and exits 0.
|
|
130
|
+
- **The count the promotion below reads is a count of the default branch.**
|
|
122
131
|
|
|
123
132
|
## The second sighting is what files it
|
|
124
133
|
|
|
@@ -126,12 +135,13 @@ could not.
|
|
|
126
135
|
judged (rationale: `docs/maintainers/observation-ledger-rationale.md` → "Why a second sighting
|
|
127
136
|
files"):
|
|
128
137
|
|
|
129
|
-
- **On
|
|
130
|
-
depth-0 citation
|
|
131
|
-
opened by the sighting
|
|
132
|
-
stays append-only.
|
|
133
|
-
- **The Issue quotes the ledger's own dates — the first sighting's and this one's
|
|
134
|
-
can check the promotion against the file instead of
|
|
138
|
+
- **On `observation:record` answering `file`, the observation is filed**, at depth 1 or deeper, with
|
|
139
|
+
no depth-0 citation. It answers `file` only when exactly one earlier sighting exists — a higher
|
|
140
|
+
count means the Issue was already opened by the sighting before. The line is appended either way,
|
|
141
|
+
because the ledger stays append-only.
|
|
142
|
+
- **The Issue quotes the ledger's own dates — the first sighting's and this one's**, both on the
|
|
143
|
+
command's standard error — so the reader can check the promotion against the file instead of
|
|
144
|
+
taking the run's word for it.
|
|
135
145
|
- **Both ceilings still apply**, exactly as `observation-filing.md` states them: the 10-per-run cap counts a promoted
|
|
136
146
|
filing, and the WIP cap still bites, since a promoted observation blocks nothing and is therefore
|
|
137
147
|
still discretionary.
|
|
@@ -143,7 +153,7 @@ Issue, not new ones.
|
|
|
143
153
|
## A user-found bug is recorded by its kind of miss (user-found)
|
|
144
154
|
|
|
145
155
|
**A user-reported bug is fixed or filed as always; this records the *kind of miss* alongside so the
|
|
146
|
-
category never recurs as a first sighting
|
|
156
|
+
category never recurs as a first sighting.** The key is the **category of
|
|
147
157
|
oversight** — `k:missed-case-worktree` — so a second bug of the same kind counts against the first.
|
|
148
158
|
**Depth `d1`, never `d0`**: the *kind of miss* is what a run fails to enumerate, which the table puts
|
|
149
159
|
at depth 1. Nothing else changes; the `<what>` field leads with `User-reported:`, and no second
|
|
@@ -106,8 +106,8 @@ pnpm josh run:cut --resume <N>
|
|
|
106
106
|
for the plan and the recorded decisions, then go straight to `pnpm josh gate`.
|
|
107
107
|
- `resume-impl` (0) — like `resume`, but the cut was taken **during** implementation. Skip the title, the plan, the fresh hold claim and the split assessment,
|
|
108
108
|
re-read the plan, then **continue implementation** — do **not** go straight to the gate.
|
|
109
|
-
- `handed-off` (0) — a successor has already adopted this cut, `is_handed_off` is spent
|
|
110
|
-
|
|
109
|
+
- `handed-off` (0) — a successor has already adopted this cut, `is_handed_off` is spent.
|
|
110
|
+
This process was woken **after** its own cut. **End the turn quietly and do
|
|
111
111
|
nothing**: a benign stop, no Telegram owed.
|
|
112
112
|
- `stale` (1) — the record does not match the tree (wrong branch, a clean tree, an expired record, or
|
|
113
113
|
an unknown hand-off state). **A resume failure**: send a `confirmation` Telegram and stop; never gate
|
|
@@ -145,7 +145,7 @@ decisions are read back from the issue. Rationale:
|
|
|
145
145
|
- **The cut is exclusive** — `run:cut` writes the record with an exclusive create, so a second cut on
|
|
146
146
|
the same tree is refused `busy`.
|
|
147
147
|
- **The resume is unique.** Taking the hand-off over spends it — a second `run:cut --resume` reads a
|
|
148
|
-
spent record and is answered `handed-off
|
|
148
|
+
spent record and is answered `handed-off`, and the take-over is itself an
|
|
149
149
|
exclusive create, so two resumes racing cannot both win. One lane crosses the pre-gate boundary
|
|
150
150
|
exactly once.
|
|
151
151
|
|
|
@@ -176,7 +176,7 @@ not once per run**; **An edit reissued right after a refusal passes**; **An unme
|
|
|
176
176
|
warrants the cut**; **It is silent between a cut and its resume**. Rationale:
|
|
177
177
|
`docs/maintainers/pre-gate-cut-rationale.md` → "Why the rules are guards, not prose";
|
|
178
178
|
`scripts/rules/implementation-cut.ts` implements it. A child that ended without cutting is detected
|
|
179
|
-
after the fact by `pnpm josh run:ending <N> --output <path
|
|
179
|
+
after the fact by `pnpm josh run:ending <N> --output <path>`.
|
|
180
180
|
|
|
181
181
|
## The threshold
|
|
182
182
|
|
|
@@ -191,8 +191,7 @@ the push is never a turn boundary (`chain-rule.md`).
|
|
|
191
191
|
|
|
192
192
|
**The trigger**: a dispatched lane child about to stop for a decision (a Tier B toss-up, a Tier C
|
|
193
193
|
action, an upstream defect) parks its own Issue first — `backlogrun-park.md` → "park and
|
|
194
|
-
continue" — so the parent's `pnpm josh run:liveness` reads it `settled`
|
|
195
|
-
after #2012 and #2011. A `needs-human-review` or `already-done` stop already carries its label.
|
|
194
|
+
continue" — so the parent's `pnpm josh run:liveness` reads it `settled`. A `needs-human-review` or `already-done` stop already carries its label.
|
|
196
195
|
`pnpm josh rule:guard` refuses `pnpm josh notify --task-type confirmation` from a marked child until
|
|
197
196
|
then — **It fires once per run.**, and a person's own `fullrun` is never refused
|
|
198
197
|
(`scripts/rules/lane-park.ts`).
|
|
@@ -205,9 +204,10 @@ the child promoted this run, on every occurrence (`scripts/rules/lane-split-park
|
|
|
205
204
|
### The interactive ask is refused one call earlier
|
|
206
205
|
|
|
207
206
|
**The trigger**: a headless session ends the turn on an interactive ask, so the notify guard never
|
|
208
|
-
fires
|
|
209
|
-
every occurrence — park the question instead
|
|
210
|
-
|
|
207
|
+
fires. `pnpm josh rule:guard` therefore refuses `AskUserQuestion` for a marked lane child on
|
|
208
|
+
every occurrence — park the question instead.
|
|
209
|
+
A child that slips past is recovered by `pnpm josh run:ending`, which lifts
|
|
211
210
|
the refused ask into the park basis; `scripts/rules/lane-interactive-ask.ts` and the shared
|
|
212
211
|
`scripts/agent/interactive-ask.ts` implement it.
|
|
213
212
|
|
|
213
|
+
Provenance of each rule: `docs/maintainers/pre-gate-cut-rationale.md` → "Where each rule came from".
|
|
@@ -1,24 +1,32 @@
|
|
|
1
1
|
# A prerequisite discovered mid-run — a dependency, not a park
|
|
2
2
|
|
|
3
|
-
**
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
read at its point of use — the moment a run discovers that another Issue in this repository has to
|
|
7
|
-
land first.
|
|
3
|
+
**The single source of the prerequisite branch**, read at its point of use — the moment a run
|
|
4
|
+
discovers that another Issue in this repository has to land first. History:
|
|
5
|
+
`docs/maintainers/prerequisite-rationale.md` → "Where each rule came from".
|
|
8
6
|
|
|
9
|
-
**A prerequisite discovered mid-run is a dependency, not a park
|
|
10
|
-
|
|
11
|
-
split: the Issue in hand is still one deliverable, it just needs another one before it.
|
|
7
|
+
**A prerequisite discovered mid-run is a dependency, not a park** — the Issue in hand is still one
|
|
8
|
+
deliverable, it just needs another one before it.
|
|
12
9
|
|
|
13
|
-
**Four kinds of other work turn up mid-run, and the procedure differs for each
|
|
14
|
-
another is the failure this section exists to prevent:
|
|
10
|
+
**Four kinds of other work turn up mid-run, and the procedure differs for each:**
|
|
15
11
|
|
|
16
12
|
| What turned up | What to do |
|
|
17
13
|
| --------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------ |
|
|
18
14
|
| A defect originating in **another package** | File the upstream Issue and **stop** — Tier A for a first-party target; a third-party one is Tier C, recorded and drafted rather than filed (`CLAUDE.md` → "Cross-package problems"; `prompts/collaboration-workflow/upstream-interrupt.md`) |
|
|
19
15
|
| This Issue was really **several** (a split) | File the children and the epic and **stop** — except under `backlogrun`, whose authorization already covers a batch, so the children are filed and run through (`split-assessment.md`) |
|
|
20
16
|
| Another Issue in **this** repository has to land first (**a prerequisite**) | This section |
|
|
21
|
-
| Something worth filing that is **none of the three** (**an observation**) | File it **without asking** — Tier A for a first-party target — and **carry the run straight on**: nothing is stashed, nothing is parked (`observation-filing.md`). **A delegated child does not file here**, and a filing at depth 1 or deeper cites the depth-0 work it blocked; one that cannot cite it goes to the run's own `.josh/observations/<N>.md` and is filed on its second sighting — all of them `observation-filing.md`'s |
|
|
17
|
+
| Something worth filing that is **none of the three** (**an observation**) | File it **without asking** in an unattended run, propose it first in an interactive session — Tier A for a first-party target — and **carry the run straight on**: nothing is stashed, nothing is parked (`observation-filing.md`). **A delegated child does not file here**, and a filing at depth 1 or deeper cites the depth-0 work it blocked; one that cannot cite it goes to the run's own `.josh/observations/<N>.md` and is filed on its second sighting — all of them `observation-filing.md`'s |
|
|
18
|
+
|
|
19
|
+
**A stop on a defect in this repository's own gate or run tooling is a prerequisite too.** The
|
|
20
|
+
defect's Issue is the prerequisite — filed if it is not yet, used by its number if it is — and it is
|
|
21
|
+
never recorded as an upstream interrupt, because the tooling is not another package
|
|
22
|
+
(`prompts/collaboration-workflow/upstream-interrupt.md` → "実行中のリポジトリ自身のラン機構の不具合").
|
|
23
|
+
|
|
24
|
+
**A stop that a dependency can express is never a person's decision.** This is the single source of
|
|
25
|
+
that rule. A recommendation of "record `<N>` must land first and go on" is taken without asking;
|
|
26
|
+
`needs-decision` is reserved for a design decision nobody has made, a Tier B toss-up, or a Tier C
|
|
27
|
+
action. `pnpm josh run:merge` enforces the computable half: an unfinished child with an open
|
|
28
|
+
blocked-by is released to **wait** — no `needs-decision` label, no failure counted — and the backlog
|
|
29
|
+
offer hands it back once its blockers merge.
|
|
22
30
|
|
|
23
31
|
**File the prerequisite with the `route:tier-a` label**, so a Tier A filing made during implementation
|
|
24
32
|
stays countable by filing route afterwards. **This paragraph belongs to the prerequisite row, not to
|
|
@@ -33,7 +41,7 @@ The command lints the body against `prompts/collaboration-workflow/issue-templat
|
|
|
33
41
|
classification labels it declares, and runs the duplicate scan and `epic:bundle` itself
|
|
34
42
|
(`docs/josh-commands-backlog.md` → `josh issue:file`).
|
|
35
43
|
|
|
36
|
-
Every
|
|
44
|
+
Every *file the prerequisite* step below means that labelled filing, and it always happens **first**: the
|
|
37
45
|
steps after it name a number that does not exist until it is. **Its duplicate scan is read exactly as
|
|
38
46
|
it is for a `new` entry** (`issue-scout.md`): a filing made mid-run is the one most likely to duplicate something.
|
|
39
47
|
|
|
@@ -42,8 +50,8 @@ it is for a `new` entry** (`issue-scout.md`): a filing made mid-run is the one m
|
|
|
42
50
|
- **A named epic under `backlogrun`** files without confirmation, records the dependency with
|
|
43
51
|
`pnpm josh epic --add <E> <N> --before <M>` — `<E>` the epic, `<N>` the prerequisite just filed,
|
|
44
52
|
`<M>` the child in hand — and the run **continues rather than parking it** (`backlogrun-park.md` → "A
|
|
45
|
-
prerequisite discovered mid-run").
|
|
46
|
-
|
|
53
|
+
prerequisite discovered mid-run"). A child outside any epic records the same relation on itself
|
|
54
|
+
directly; that branch is the same section's.
|
|
47
55
|
- **`fullrun` / `halfrun`** file the same way without asking, insert the prerequisite into the epic
|
|
48
56
|
that already tracks the Issue or create one over both, and then **stop**, leaving the person one
|
|
49
57
|
command to type (`fullrun.md` / `halfrun.md`). Typing `fullrun` approved implementing **one** Issue;
|
|
@@ -53,7 +61,7 @@ it is for a `new` entry** (`issue-scout.md`): a filing made mid-run is the one m
|
|
|
53
61
|
|
|
54
62
|
- **`git stash push -u` — the `-u` is not optional.** The work in progress almost always includes a
|
|
55
63
|
new `*.test.ts`, which is untracked, and a stash without `-u` leaves exactly those files in the tree
|
|
56
|
-
for the next child's `
|
|
64
|
+
for the next child's `pnpm josh ms` to refuse.
|
|
57
65
|
- **The Issue comment is what gets the stash popped, not the Telegram.** The run that later picks the
|
|
58
66
|
paused Issue up reads that comment and pops before implementing — **by message,
|
|
59
67
|
`pnpm josh stash:pop "<the -m message>"`, never a positional `git stash pop`**, because the stash is
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
**Read this file in full when the run's hold is claimed, before the watcher starts.** It is a
|
|
4
4
|
point-of-use document, never an entry read, and the single source of the heartbeat for `fullrun`,
|
|
5
|
-
`halfrun`, `prrun` and the `backlogrun` parent alike
|
|
5
|
+
`halfrun`, `prrun` and the `backlogrun` parent alike. `kickoff` starts none.
|
|
6
6
|
|
|
7
7
|
## Progress while the run is quiet
|
|
8
8
|
|
|
@@ -13,7 +13,7 @@ point-of-use document, never an entry read, and the single source of the heartbe
|
|
|
13
13
|
pnpm josh run:progress --wait --output <the transcript path of each delegated unit> # in the background
|
|
14
14
|
```
|
|
15
15
|
|
|
16
|
-
**Start it once; it reports by itself
|
|
16
|
+
**Start it once; it reports by itself.** Each silence interval appends the
|
|
17
17
|
five labelled lines to the run's event stream as a heartbeat and to the ambient log, prints nothing to
|
|
18
18
|
standard output and keeps running — so a scheduled report never wakes the session, and the session
|
|
19
19
|
relays none. **It exits only on one of three, and the command computes which:**
|
|
@@ -27,8 +27,8 @@ relays none. **It exits only on one of three, and the command computes which:**
|
|
|
27
27
|
**A report is not an exit, and neither is a decline** — with no run recorded it keeps waiting, and the
|
|
28
28
|
`--hours` exit says so on standard error.
|
|
29
29
|
|
|
30
|
-
**`pnpm josh run:watcher:guard` detects a missed restart
|
|
31
|
-
`pretool-guard
|
|
30
|
+
**`pnpm josh run:watcher:guard` detects a missed restart**: wired into
|
|
31
|
+
`pretool-guard`, it refuses the next tool call while lane children are in
|
|
32
32
|
flight and the watcher's life record has gone stale — once per run, so the restart is not blocked.
|
|
33
33
|
|
|
34
34
|
**`--mark` at every real report.** Whenever the run reports something of its own, run
|
|
@@ -47,18 +47,22 @@ Rationale: `docs/maintainers/progress-watcher-rationale.md` → "Why the heartbe
|
|
|
47
47
|
|
|
48
48
|
### What a report says
|
|
49
49
|
|
|
50
|
-
**Every unscheduled progress statement is answered by `pnpm josh run:progress --once`** —
|
|
51
|
-
|
|
52
|
-
the
|
|
50
|
+
**Every unscheduled progress statement is answered by `pnpm josh run:progress --once`** — under
|
|
51
|
+
`backlogrun`, `pnpm josh run:board --chat` in one code block — the reply to an explicit ask and
|
|
52
|
+
the note just after a run starts alike; each is exempt from the interval and records the report
|
|
53
|
+
itself, so no `--mark` beside it. **Relay its lines verbatim** — round, rephrase
|
|
53
54
|
or re-label nothing, and **never write a clock time the command did not print**; where a field is
|
|
54
55
|
missing, say so. **A field's empty value is an observation, never a state** (`record unread` is not
|
|
55
56
|
*not stalled*), and **nothing in the lines is a verification result** — no gate, CI or check rollup.
|
|
56
57
|
|
|
57
|
-
**The heartbeat is ambient, never a Telegram.** `pnpm josh run:
|
|
58
|
-
|
|
59
|
-
|
|
58
|
+
**The heartbeat is ambient, never a Telegram.** `pnpm josh run:board` is its reader, in a pane of the
|
|
59
|
+
person's own; **no session relays the stream** — name the board command once, at the first cut or when
|
|
60
|
+
asked; `.vscode/tasks.json` starts it on folder open once VSCode's automatic-task prompt is allowed.
|
|
61
|
+
`pnpm josh run:event --watch` stays for following the raw events one by one. `pnpm josh run:wake --list` is the one-line read for a person who types for it.
|
|
62
|
+
**A request for periodic progress is never a CronCreate job** — on screen, name `pnpm josh run:board`;
|
|
63
|
+
off-screen, start `pnpm josh run:board --every <minutes>` in the background (`docs/josh-commands-run.md`).
|
|
60
64
|
|
|
61
|
-
**A stop is the only interrupt
|
|
65
|
+
**A stop is the only interrupt**: a `backlogrun` that has stopped ends with
|
|
62
66
|
`pnpm josh run:carry --end --stopped "<reason>"`, which sends one ⏸️ confirmation; a parked child sends
|
|
63
67
|
its own (`backlogrun-park.md`). Rationale: `docs/maintainers/progress-watcher-rationale.md` → "Why the
|
|
64
68
|
signal tiers are split this way".
|
|
@@ -88,3 +92,5 @@ notification, and the running `--wait` is stopped in the same turn, since no rep
|
|
|
88
92
|
covers `halfrun`'s stop before commit, a `needs-human-review` stop, a split or prerequisite stop, and a
|
|
89
93
|
`backlogrun` named issue's failure stop. Rationale: `docs/maintainers/progress-watcher-rationale.md` →
|
|
90
94
|
"Why the watcher runs where it does".
|
|
95
|
+
|
|
96
|
+
Provenance of each rule: `docs/maintainers/progress-watcher-rationale.md` → "Where each rule came from".
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
# `prrun` — the manifest (plan → implement → PR → green → stop, a person merges)
|
|
2
2
|
|
|
3
3
|
`prrun` sits between `halfrun` (stop before commit) and `fullrun` (auto-merge). It runs `fullrun`
|
|
4
|
-
up to a green, mergeable pull request and **stops before the merge**, so a person merges by hand
|
|
5
|
-
|
|
4
|
+
up to a green, mergeable pull request and **stops before the merge**, so a person merges by hand.
|
|
5
|
+
**Read `fullrun.md` and `entry-sequence.md` for every step** — the entry
|
|
6
6
|
sequence, the step lists, the gate, the review and the stop branches are `fullrun`'s, unchanged. This
|
|
7
|
-
file names only the difference
|
|
7
|
+
file names only the difference.
|
|
8
8
|
|
|
9
9
|
## The difference — the entry
|
|
10
10
|
|
|
@@ -1,21 +1,19 @@
|
|
|
1
1
|
# The end-of-run retrospective
|
|
2
2
|
|
|
3
3
|
**This is the retrospective's procedure, and it is read when `run:step` prints the retrospective step —
|
|
4
|
-
not at the entry
|
|
4
|
+
not at the entry.** `SKILL.md` → §2's table keeps the rule itself: run what `run:step` prints once,
|
|
5
5
|
file the improvements worth carrying into the next run, stack the rest, and mark the step done.
|
|
6
|
-
Everything that decides *how* — what the four sections mean, how the top two are chosen
|
|
7
|
-
|
|
8
|
-
because none of it binds until a run has actually drained its backlog. A run that never empties its pool
|
|
9
|
-
never reads it; the one that does reads it in full, in the same turn, before it files.
|
|
6
|
+
Everything that decides *how* — what the four sections mean, how the top two are chosen, the
|
|
7
|
+
exclusions, and the `auto-ok` default — is here. Read it in full, in the same turn, before filing.
|
|
10
8
|
|
|
11
9
|
**When it fires is not this file's, and not a judgement.** The run driver prints the step the moment the
|
|
12
10
|
backlog drains — `backlog:offer` marks that drain on the event stream and `run:step` fires the
|
|
13
11
|
retrospective at it, *before* the idle watch, so the improvement issues it files are what the watch then
|
|
14
|
-
picks up
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
12
|
+
picks up; a run that stops without draining — the failure guard, `--idle 0` — still prints it at the
|
|
13
|
+
stop position. It is kit-only — `run:step` prints the step only in the kit repository.
|
|
14
|
+
|
|
15
|
+
Rationale: `docs/maintainers/retrospective-rationale.md` → "Why the retrospective is read at its step";
|
|
16
|
+
provenance: `docs/maintainers/retrospective-rationale.md` → "Where each rule came from".
|
|
19
17
|
|
|
20
18
|
## The digest is read, not skimmed
|
|
21
19
|
|
|
@@ -45,13 +43,10 @@ improves, and a `depth:2` finding names which decision it turns on (`observation
|
|
|
45
43
|
test"). An improvement that cannot pass the test is not filed; it is not a shortfall of the two-item
|
|
46
44
|
count, it simply is not yet a finding.
|
|
47
45
|
|
|
48
|
-
**Order what passes by effect, and file the top two.**
|
|
49
|
-
|
|
50
|
-
**
|
|
51
|
-
`
|
|
52
|
-
ceiling on what may be recorded. **File nothing when nothing passes** — a run whose measurements show no
|
|
53
|
-
improvement worth carrying files zero Issues, and that is what makes the "file → drain → file again"
|
|
54
|
-
loop converge.
|
|
46
|
+
**Order what passes by effect, and file the top two.** **The third onward is stacked in the observation
|
|
47
|
+
ledger**, on the same append path `pnpm josh observations:flush` already drains. **File nothing when
|
|
48
|
+
nothing passes** — a run whose measurements show no improvement worth carrying files zero Issues.
|
|
49
|
+
`docs/maintainers/retrospective-rationale.md` → "Why the top two are a selection, not a ration".
|
|
55
50
|
|
|
56
51
|
**Exclude what is already filed or already done, through the existing scout** (`issue-scout.md`). File
|
|
57
52
|
each with `pnpm josh issue:file`, which runs the scout before creating anything: an **open** candidate
|
|
@@ -73,7 +68,7 @@ retrospective run on the carry record, so `run:step` prints `stop` from then on
|
|
|
73
68
|
second time. The mark rides the record across a session cut and is removed with the record at
|
|
74
69
|
`pnpm josh run:carry --end`, so one invocation runs the retrospective exactly once whether or not it was
|
|
75
70
|
cut. **`--summary` is required** — the same close writes it as one `retrospective` event on the event
|
|
76
|
-
stream
|
|
71
|
+
stream, so a zero-filing retrospective differs from one that never ran; name
|
|
77
72
|
the issues filed (or that none were) and the candidates dropped with why.
|
|
78
73
|
|
|
79
74
|
**A dispatched lane child never reaches any of this** — the batch runs the retrospective at its own end,
|
|
@@ -29,9 +29,10 @@ whether *several findings from one session* are one Issue — and reads the **sa
|
|
|
29
29
|
same conjunction**: separability, and whether the whole clearly exceeds one gate.
|
|
30
30
|
`pnpm josh issue:fold "<title>" …` answers `fold` / `separate` / `no-fold-needed`; its size half is
|
|
31
31
|
`pnpm josh split:assess`, called not recomputed, and `separate` needs both halves exactly as `split`
|
|
32
|
-
does.
|
|
33
|
-
|
|
34
|
-
second `pnpm josh issue:file`
|
|
32
|
+
does. A diff with no non-test file, or none readable, answers `undetermined`: the size is then the
|
|
33
|
+
whole request's estimate above. **There is no second criterion.** `observation-filing.md`'s observation, the review round cap's branch 2 and `prerequisite.md`'s
|
|
34
|
+
prerequisite each route a second filing through it — `pnpm josh issue:file` asks it itself at the
|
|
35
|
+
run's second filing, never the first, and holds only a `fold`.
|
|
35
36
|
|
|
36
37
|
## Diff size is not a reason to split, and that is measured
|
|
37
38
|
|
|
@@ -76,7 +77,8 @@ moment that child merges and closes.
|
|
|
76
77
|
|
|
77
78
|
**Each split child is filed with the `route:split` label** —
|
|
78
79
|
`pnpm josh issue:file "<sub-title>" --body-file <body-file> --depth <n> --route split` — so the
|
|
79
|
-
backlog's composition stays countable by filing route rather than by grepping issue bodies.
|
|
80
|
+
backlog's composition stays countable by filing route rather than by grepping issue bodies. A split of
|
|
81
|
+
a person's `kickoff new` also takes `--requested` (`kickoff.md` → "Words typed after `new`").
|
|
80
82
|
|
|
81
83
|
## Promote, or create a new epic
|
|
82
84
|
|
|
@@ -1,41 +1,39 @@
|
|
|
1
1
|
# The `owner/repo#` prefix — which repository the run acts on
|
|
2
2
|
|
|
3
3
|
**This file is the prefix's single source, read at its point of use — the moment an entry is typed with an
|
|
4
|
-
`owner/repo#` prefix (or a short `repo#` name), not at any entry
|
|
5
|
-
|
|
6
|
-
|
|
4
|
+
`owner/repo#` prefix (or a short `repo#` name), not at any entry.** A run given a bare `#N` or `new`
|
|
5
|
+
targets the session's own repository and never reaches it. `SKILL.md` → §2's table keeps the trigger and
|
|
6
|
+
points here. Rationale: `docs/maintainers/target-repository-rationale.md` → "Why the prefix reads as it does".
|
|
7
7
|
|
|
8
8
|
Every entry point takes the target repository in front of the Issue reference. Without it the target
|
|
9
9
|
is the repository the session runs in.
|
|
10
10
|
|
|
11
11
|
```
|
|
12
|
-
kickoff joshuafolkken/kit
|
|
12
|
+
kickoff joshuafolkken/kit#<N>
|
|
13
13
|
kickoff kit#new
|
|
14
14
|
kickoff kit#new "<title>"
|
|
15
|
-
fullrun joshuafolkken/app-kit
|
|
16
|
-
halfrun kit
|
|
17
|
-
backlogrun kit
|
|
18
|
-
backlogrun joshuafolkken/kit
|
|
15
|
+
fullrun joshuafolkken/app-kit#<N>
|
|
16
|
+
halfrun kit#<N>
|
|
17
|
+
backlogrun kit#<N> kit#<M>
|
|
18
|
+
backlogrun joshuafolkken/kit#<N> --only
|
|
19
19
|
```
|
|
20
20
|
|
|
21
|
-
- **One definition, every entry point.** The prefix goes where `#N` goes,
|
|
22
|
-
|
|
21
|
+
- **One definition, every entry point.** The prefix goes where `#N` goes, and `owner/repo#new` stands
|
|
22
|
+
in the same slot as `owner/repo#N`.
|
|
23
23
|
- **A short name expands by prefixing the session repository's owner** — `pnpm josh repo:party`
|
|
24
|
-
computes the party — and **never by searching
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
which resolves without complaint to a different issue of the same number; a bare *repository* name
|
|
32
|
-
whose owner is determined has no such failure mode.
|
|
24
|
+
computes the party — and **never by searching `pnpm josh doctor`'s checkout map**. A short name
|
|
25
|
+
therefore satisfies the first-party test (owner equality) by construction, so **there is structurally
|
|
26
|
+
no path by which a short name resolves to a third-party target**, and a repository that is not
|
|
27
|
+
checked out here is still a valid `kickoff` target. A name that does not exist fails as `gh` not
|
|
28
|
+
found: report it, never read it as a near-miss for another name.
|
|
29
|
+
- **It is not the standing prohibition on a bare `#N`**, which forbids a bare *Issue number*; a bare
|
|
30
|
+
*repository* name whose owner is determined is allowed.
|
|
33
31
|
- **An explicit owner that is not the session's is a third-party target, and it stops the run.**
|
|
34
|
-
`fullrun <other-owner>/repo
|
|
32
|
+
`fullrun <other-owner>/repo#<N>` names a tracker we do not own, and every write there is Tier C
|
|
35
33
|
(`CLAUDE.md` → "Third-party repositories are Tier C"). **Decide it mechanically** with
|
|
36
34
|
`pnpm josh repo:party <owner/repo>` — a `third-party` verdict stops the run. Typing the prefix is not the
|
|
37
|
-
explicit instruction that rule requires. **Send a `confirmation` Telegram and stop** —
|
|
38
|
-
|
|
35
|
+
explicit instruction that rule requires. **Send a `confirmation` Telegram and stop** — there is no
|
|
36
|
+
finding to record and no draft to prepare.
|
|
39
37
|
- **No prefix leaves the behavior exactly as it was** — the target is the session's repository.
|
|
40
38
|
- **`kickoff` needs no checkout**: name the target repository with `--repo <owner/repo>` on every
|
|
41
39
|
`pnpm josh issue:file` call and in the path of every `gh api` call, and never clone. The one exception
|
|
@@ -45,15 +43,14 @@ backlogrun joshuafolkken/kit#858 --only
|
|
|
45
43
|
`direct-filing` guard, and `pnpm josh issue:file` lints an epic body against the Issue template. The
|
|
46
44
|
promote arm stops the same way.
|
|
47
45
|
- **The implementing entries require a checkout and never create one — when the target is another
|
|
48
|
-
repository.** A prefix naming the session's own repository changes nothing (`fullrun kit
|
|
49
|
-
kit checkout behaves exactly as `fullrun
|
|
46
|
+
repository.** A prefix naming the session's own repository changes nothing (`fullrun kit#<N>` in the
|
|
47
|
+
kit checkout behaves exactly as `fullrun #<N>`). Otherwise resolve the checkout from `pnpm josh
|
|
50
48
|
doctor`'s map; **no checkout there, or a tree that is not clean, stops the run** with a
|
|
51
|
-
`confirmation` Telegram —
|
|
52
|
-
|
|
53
|
-
checkout.
|
|
49
|
+
`confirmation` Telegram — never clone, never stash. Otherwise the commands that act on the target
|
|
50
|
+
execute in that checkout.
|
|
54
51
|
- **A named epic is exempt from the whole bullet above**: `owner/repo#E` names where the *epic* lives,
|
|
55
52
|
not where its children are implemented. Its state is read against that repository through `gh api`,
|
|
56
53
|
so that repository needs no checkout. The checkout rules bind each child at implementation time,
|
|
57
54
|
against **that child's** repository ("Concurrency" in `backlogrun.md`).
|
|
58
55
|
- **Independent of `into <target>`**: this says which repository the run acts on, `into` says which
|
|
59
|
-
epic the artifact joins — `kickoff kit#new into joshuafolkken/kit
|
|
56
|
+
epic the artifact joins — `kickoff kit#new into joshuafolkken/kit#<E>` is one correct line.
|
|
@@ -1,12 +1,10 @@
|
|
|
1
1
|
# The working-tree hold — one run per tree
|
|
2
2
|
|
|
3
|
-
**
|
|
4
|
-
|
|
5
|
-
`entry-sequence.md` routes here for the definition. It is read at its point of use — the moment
|
|
6
|
-
a run is about to claim or release the tree.
|
|
3
|
+
**The single source of the hold**, read at its point of use — the moment a run is about to claim or
|
|
4
|
+
release the tree. History: `docs/maintainers/working-tree-hold-rationale.md` → "Where each rule came from".
|
|
7
5
|
|
|
8
6
|
**Ask `pnpm josh run:hold` before anything else, and obey what it answers.** It is the first call of
|
|
9
|
-
`fullrun` and `halfrun` alike — before the title is normalized, before `
|
|
7
|
+
`fullrun` and `halfrun` alike — before the title is normalized, before `pnpm josh ms`, and **before
|
|
10
8
|
a `new` entry files its Issue**, because a run stopped after the filing has already left behind the
|
|
11
9
|
artifact it should not have created.
|
|
12
10
|
|
|
@@ -24,15 +22,12 @@ pnpm josh run:release --force # a record left behind by a run that has ended
|
|
|
24
22
|
**File nothing, create no branch, edit nothing.**
|
|
25
23
|
- **`unknown` — nothing was established. Stop the same way.** It is not "the tree is free".
|
|
26
24
|
|
|
27
|
-
**The unit is the working tree
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
**`backlogrun`'s own guard is unchanged** — the two layers guard different resources.
|
|
25
|
+
**The unit is the working tree** — one branch, one index and one uncommitted diff, and a linked work
|
|
26
|
+
tree has its own three. **`backlogrun`'s per-repository guard (`epic-busy.ts`) is a separate layer and is
|
|
27
|
+
unchanged.**
|
|
31
28
|
|
|
32
|
-
**`kickoff` does not claim it
|
|
33
|
-
|
|
34
|
-
notifies and stops, every one of those against GitHub. It is a fact about the command rather than a
|
|
35
|
-
judgement made at the entry, and it changes nothing for `fullrun` or `halfrun`.
|
|
29
|
+
**`kickoff` does not claim it** — it touches GitHub, never the branch, index or diff. Rationale for both:
|
|
30
|
+
`docs/maintainers/working-tree-hold-rationale.md` → "Why the unit is the working tree".
|
|
36
31
|
|
|
37
32
|
**Claim it in the checkout the run will edit.** The record is keyed to the work tree the command runs
|
|
38
33
|
in, so a cross-repository `fullrun owner/repo#N` resolves that repository's checkout from `pnpm josh
|
|
@@ -70,14 +65,13 @@ the procedure.
|
|
|
70
65
|
|
|
71
66
|
## The halfrun resume
|
|
72
67
|
|
|
73
|
-
**`fullrun #<N>` or `prrun #<N>` after a `halfrun` stop resumes it instead of claiming
|
|
74
|
-
(joshuafolkken/kit#2796, #3042). The
|
|
68
|
+
**`fullrun #<N>` or `prrun #<N>` after a `halfrun` stop resumes it instead of claiming.** The
|
|
75
69
|
stop is **recorded, never inferred**: the `halfrun` ends with `pnpm josh run:hold <N> --halfrun-stop`,
|
|
76
70
|
which marks its own record (re-keying a `halfrun new`'s unnumbered one to the filed issue) — a
|
|
77
71
|
`halfrun` still implementing or a `backlogrun` child leaves the same hold over the same dirty tree, and
|
|
78
72
|
must not be adopted. On a marked hold for `#<N>` over a dirty tree, `run:entry` asks the session budget
|
|
79
73
|
(`over` stops as usual), adopts the hold with the `fullrun` mark and prints `entry #<N> — resume:
|
|
80
|
-
halfrun`. **Skip the title, the plan, the split assessment, `
|
|
74
|
+
halfrun`. **Skip the title, the plan, the split assessment, `pnpm josh ms`,
|
|
81
75
|
`latest:scope` and the implementation**: the diff in the tree is what the person verified. Re-read the
|
|
82
76
|
issue (`pnpm josh issue:read <N>`), then run the gate **in full** from the refactor (`chain-rule.md` →
|
|
83
77
|
"Run the review-to-merge chain") — a fix made during the manual check has had no gate — and ship as
|
|
@@ -85,7 +79,7 @@ any `fullrun` does.
|
|
|
85
79
|
|
|
86
80
|
## The prrun resume
|
|
87
81
|
|
|
88
|
-
**`fullrun #<N>` after a `prrun` stop resumes it the same way
|
|
82
|
+
**`fullrun #<N>` after a `prrun` stop resumes it the same way.** The `prrun`
|
|
89
83
|
ends with `pnpm josh run:hold <N> --prrun-stop`, which writes the commit its pull request is on into its
|
|
90
84
|
own record; only a record carrying that commit is adopted. `run:entry` asks the session budget, adopts
|
|
91
85
|
the hold with the `fullrun` mark and prints one of three tokens — read, never inferred:
|