@joshuafolkken/kit 1.1035.0 → 1.1094.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/settings.json +9 -8
- package/.claude/skills/epic-commands/SKILL.md +5 -7
- package/.claude/skills/verify-ui/SKILL.md +1 -1
- package/.claude/skills/workflow-commands/SKILL.md +21 -13
- package/.claude/skills/workflow-commands/background-commands.md +5 -4
- package/.claude/skills/workflow-commands/backlogrun-child.md +3 -3
- package/.claude/skills/workflow-commands/backlogrun-lanes.md +9 -7
- package/.claude/skills/workflow-commands/backlogrun-park.md +6 -0
- package/.claude/skills/workflow-commands/backlogrun-progress.md +31 -37
- package/.claude/skills/workflow-commands/backlogrun-steps.md +25 -25
- package/.claude/skills/workflow-commands/backlogrun.md +2 -2
- package/.claude/skills/workflow-commands/chain-rule.md +6 -4
- package/.claude/skills/workflow-commands/delegation.md +3 -3
- package/.claude/skills/workflow-commands/followup-reference.md +3 -3
- package/.claude/skills/workflow-commands/followup.md +7 -3
- package/.claude/skills/workflow-commands/fullrun-steps.md +3 -2
- package/.claude/skills/workflow-commands/fullrun.md +3 -2
- package/.claude/skills/workflow-commands/halfrun.md +16 -19
- package/.claude/skills/workflow-commands/issue-comments.md +2 -2
- package/.claude/skills/workflow-commands/issue-fold-existing.md +10 -10
- package/.claude/skills/workflow-commands/issue-scout.md +1 -1
- package/.claude/skills/workflow-commands/kickoff.md +9 -4
- package/.claude/skills/workflow-commands/latest-gate.md +1 -1
- package/.claude/skills/workflow-commands/needs-human-review.md +1 -1
- package/.claude/skills/workflow-commands/observation-filing.md +44 -89
- package/.claude/skills/workflow-commands/pre-gate-cut.md +33 -36
- package/.claude/skills/workflow-commands/prerequisite.md +1 -1
- package/.claude/skills/workflow-commands/prrun.md +36 -0
- package/.claude/skills/workflow-commands/retrospective.md +1 -1
- package/.claude/skills/workflow-commands/working-tree-hold.md +24 -4
- package/.codex/hooks.json +16 -20
- package/.github/actions/setup-pnpm/action.yml +93 -0
- package/.github/dependabot.yml +5 -1
- package/.github/workflows/auto-tag.yml +21 -0
- package/.github/workflows/ci.yml +26 -128
- package/.github/workflows/pr-classification.yml +5 -41
- package/.github/workflows/publish.yml +42 -48
- package/.github/workflows/sonar-qube.yml +37 -4
- package/AGENTS.md +12 -2
- package/CLAUDE.md +15 -16
- package/GEMINI.md +14 -2
- package/README.md +59 -18
- package/SECURITY.md +36 -6
- package/cspell/index.yaml +2 -1
- package/dist/CLAUDE.md +15 -16
- package/dist/config-merge/index.js +15 -3
- package/dist/hooks/batch-guard.js +4 -4
- package/dist/hooks/{chunk-Y27M6A7X.js → chunk-3C4YCCEF.js} +5 -13
- package/dist/hooks/{chunk-D67KVGGY.js → chunk-7ZPFAVR7.js} +17 -88
- package/dist/hooks/{chunk-HOYJU5RM.js → chunk-E54KGFEQ.js} +11 -4
- package/dist/hooks/{chunk-KG6PZD72.js → chunk-IL27YTPH.js} +2 -2
- package/dist/hooks/{chunk-GJT4BNVE.js → chunk-KHWHKJOM.js} +3 -3
- package/dist/hooks/{chunk-HU66PWWL.js → chunk-M2XDCUKD.js} +1076 -509
- package/dist/hooks/{chunk-GLBDBJOK.js → chunk-NKOG3XAV.js} +199 -304
- package/dist/hooks/{chunk-ZXNE6NY3.js → chunk-O4LL4HTI.js} +2 -7
- package/dist/hooks/{chunk-XPLP27WA.js → chunk-OIZUHPJI.js} +5 -27
- package/dist/hooks/{chunk-EIFCAJRB.js → chunk-UD24EAIL.js} +2546 -1636
- package/dist/hooks/codex-hook-adapter.js +10 -11
- package/dist/hooks/duplicate-read-guard.js +5 -5
- package/dist/hooks/format-edited.js +15 -34
- package/dist/hooks/inputs.json +279 -0
- package/dist/hooks/investigation-guard.js +5 -5
- package/dist/hooks/pretool-guard.js +23 -16
- package/dist/hooks/session-lang.js +0 -1
- package/dist/hooks/stop-guard.js +188 -509
- package/dist/josh.js +166 -225
- package/dist/managed-marker/index.js +2 -1
- package/dist/version/index.js +412 -64
- package/eslint/rules/promise.js +5 -0
- package/package.json +13 -8
- package/prompts/collaboration-workflow/file-edits.md +6 -53
- package/prompts/collaboration-workflow/issue-citation.md +5 -5
- package/prompts/collaboration-workflow/operating-rules.md +4 -4
- package/prompts/collaboration-workflow/overview.md +13 -1
- package/prompts/collaboration-workflow/report-format.md +1 -1
- package/prompts/collaboration-workflow/residency.md +4 -4
- package/prompts/collaboration-workflow/rule-delivery.md +5 -36
- package/prompts/collaboration-workflow/shell-body.md +7 -9
- package/prompts/collaboration-workflow/turn-batching.md +21 -37
- package/prompts/collaboration-workflow/upstream-interrupt.md +1 -1
- package/prompts/collaboration-workflow/wip-cap.md +36 -36
- package/prompts/collaboration-workflow.md +5 -8
- package/prompts/review-rubric.md +1 -1
- package/prompts/review.md +3 -3
- package/prompts/sonar-hotspot-handling.md +12 -4
- package/prompts/testing-guide.md +3 -3
- package/scripts/adopt/adopt-toolkits.ts +2 -2
- package/scripts/adopt/adopt.ts +0 -2
- package/scripts/agent/agent-argv.ts +0 -2
- package/scripts/agent/agent-diagnostics.ts +1 -1
- package/scripts/agent/agent-role-profile.ts +0 -7
- package/scripts/agent/claude-agent-argv.ts +0 -2
- package/scripts/agent/codex-agent-argv.ts +1 -1
- package/scripts/agent/codex-hooks.ts +92 -0
- package/scripts/agent/interactive-ask.ts +1 -1
- package/scripts/auto-ok/auto-ok-cli.ts +15 -25
- package/scripts/backlog/backlog-budget.ts +0 -2
- package/scripts/backlog/backlog-defect-priority.ts +2 -2
- package/scripts/backlog/backlog-drive-cli.ts +10 -8
- package/scripts/backlog/backlog-drive-named-offer.ts +16 -3
- package/scripts/backlog/backlog-drive-named.ts +2 -1
- package/scripts/backlog/backlog-drive.ts +76 -16
- package/scripts/backlog/backlog-named.ts +0 -3
- package/scripts/backlog/backlog-next.ts +32 -22
- package/scripts/backlog/backlog-offer-cli.ts +0 -5
- package/scripts/backlog/backlog-plan-cli.ts +6 -8
- package/scripts/backlog/backlog-plan.ts +1 -1
- package/scripts/backlog/backlog-pool.ts +34 -17
- package/scripts/backlog/backlog-rank.ts +106 -0
- package/scripts/backlog/backlog-ready.ts +19 -3
- package/scripts/backlog/backlog-scope.ts +1 -3
- package/scripts/backlog/backlog-stalled-detect.ts +2 -2
- package/scripts/backlog/backlog-stalled.ts +0 -1
- package/scripts/backlog/backlog-waves.ts +47 -31
- package/scripts/behavior/behavior-cli.ts +1 -1
- package/scripts/build/build-codex-hooks.ts +26 -0
- package/scripts/build/build-hooks.ts +92 -11
- package/scripts/build/hook-bundle-stamp.ts +111 -0
- package/scripts/cases/cases-cli.ts +1 -1
- package/scripts/cases/cases-logic.ts +1 -1
- package/scripts/ci/composite-actions.ts +30 -0
- package/scripts/ci/pr-classification.ts +3 -3
- package/scripts/claude/workflow-destination.ts +10 -1
- package/scripts/clone/clone-fingerprint.ts +0 -1
- package/scripts/clone/clone-scan-cli.ts +1 -1
- package/scripts/clone/clone-scan.ts +1 -1
- package/scripts/config-merge/json-format.ts +0 -1
- package/scripts/config-merge/patch-yaml-list.ts +1 -1
- package/scripts/cost-runtime/codex-usage.ts +2 -9
- package/scripts/cost-runtime/cost-attribute.ts +0 -1
- package/scripts/cost-runtime/cost-cli.ts +0 -3
- package/scripts/cost-runtime/cost-corpus.ts +0 -2
- package/scripts/cost-runtime/cost-format.ts +0 -3
- package/scripts/cost-runtime/cost-pricing.ts +0 -1
- package/scripts/cost-runtime/cost-tokens.ts +0 -1
- package/scripts/delegation/delegation-cli.ts +1 -1
- package/scripts/delegation/delegation-policy.ts +11 -1
- package/scripts/delegation/duplicate-read-guard.ts +0 -8
- package/scripts/delegation/fanout-cli.ts +1 -1
- package/scripts/delegation/fanout.ts +0 -2
- package/scripts/delegation/investigation-reads.ts +1 -164
- package/scripts/discovery/repo-map-logic.ts +0 -1
- package/scripts/discovery/repo-party-cli.ts +1 -1
- package/scripts/doctor/doctor-consumer.ts +4 -6
- package/scripts/doctor/doctor-logic.ts +0 -4
- package/scripts/doctor/doctor.ts +14 -9
- package/scripts/document/document-byte-budget.ts +8 -9
- package/scripts/document/document-byte-check.ts +0 -1
- package/scripts/document/document-read-cli.ts +0 -2
- package/scripts/document/document-section-cli.ts +1 -1
- package/scripts/document/document-section.ts +0 -3
- package/scripts/document/edit-files-cli.ts +0 -1
- package/scripts/document/entry-read-budget.ts +13 -4
- package/scripts/document/lane-child-read-set.ts +1 -6
- package/scripts/document/read-files-cli.ts +0 -4
- package/scripts/document/read-set-cli.ts +0 -2
- package/scripts/document/read-set-point-of-use.ts +1 -0
- package/scripts/document/read-set-pricing.ts +0 -1
- package/scripts/document/read-set-trim.ts +1 -1
- package/scripts/epic/epic-add.ts +1 -1
- package/scripts/epic/epic-audit-cli.ts +1 -4
- package/scripts/epic/epic-audit-orphans.ts +1 -3
- package/scripts/epic/epic-audit-rationale.ts +0 -1
- package/scripts/epic/epic-audit-report.ts +0 -2
- package/scripts/epic/epic-audit.ts +5 -4
- package/scripts/epic/epic-bundle-cli.ts +1 -1
- package/scripts/epic/epic-bundle-evidence.ts +0 -1
- package/scripts/epic/epic-bundle-referenced.ts +1 -5
- package/scripts/epic/epic-bundle.ts +0 -4
- package/scripts/epic/epic-busy.ts +4 -5
- package/scripts/epic/epic-candidate-confirm.ts +0 -5
- package/scripts/epic/epic-classify.ts +2 -2
- package/scripts/epic/epic-cli-argv.ts +0 -1
- package/scripts/epic/epic-close-comment.ts +1 -1
- package/scripts/epic/epic-close.ts +5 -2
- package/scripts/epic/epic-cross-repo.ts +2 -4
- package/scripts/epic/epic-decision.ts +0 -1
- package/scripts/epic/epic-fetch.ts +2 -2
- package/scripts/epic/epic-index.ts +2 -3
- package/scripts/epic/epic-issue.ts +1 -15
- package/scripts/epic/epic-lane-offer.ts +20 -30
- package/scripts/epic/epic-nested.ts +1 -1
- package/scripts/epic/epic-next-read.ts +1 -3
- package/scripts/epic/epic-next-views.ts +0 -1
- package/scripts/epic/epic-next.ts +1 -10
- package/scripts/epic/epic-parse.ts +0 -1
- package/scripts/epic/epic-promote.ts +0 -9
- package/scripts/epic/epic-rank.ts +37 -0
- package/scripts/epic/epic-read.ts +1 -2
- package/scripts/epic/epic-reconcile.ts +1 -1
- package/scripts/epic/epic-reference.ts +1 -13
- package/scripts/epic/epic-relation-recheck.ts +1 -1
- package/scripts/epic/epic-relations.ts +1 -1
- package/scripts/epic/epic-remove.ts +1 -1
- package/scripts/epic/epic-report.ts +0 -1
- package/scripts/epic/epic-run.ts +2 -3
- package/scripts/epic/epic-shape.ts +1 -1
- package/scripts/epic/epic-solo-stale.ts +107 -0
- package/scripts/epic/epic-solo.ts +32 -30
- package/scripts/epic/epic-triage.ts +1 -1
- package/scripts/epic/epic-validate.ts +1 -1
- package/scripts/epic/epic.ts +1 -1
- package/scripts/exports/unused-members-cli.ts +53 -0
- package/scripts/{git → followup}/followup-issue-number.ts +1 -6
- package/scripts/{git → followup}/git-followup-cleanup.ts +2 -1
- package/scripts/{git → followup}/git-followup-finish.ts +1 -3
- package/scripts/{git → followup}/git-followup-flush.ts +2 -2
- package/scripts/{git → followup}/git-followup-issue-close.ts +2 -2
- package/scripts/{git → followup}/git-followup-label.ts +4 -4
- package/scripts/followup/git-followup-merged.ts +112 -0
- package/scripts/{git → followup}/git-followup-pending.ts +1 -1
- package/scripts/{git → followup}/git-followup-workflow.ts +19 -11
- package/scripts/{git → followup}/git-pr-followup-wrapup.ts +9 -3
- package/scripts/{git → followup}/git-pr-followup.ts +53 -16
- package/scripts/gate/core-budget.ts +3 -9
- package/scripts/gate/gate-plan.ts +7 -4
- package/scripts/gate/gate-report.ts +0 -6
- package/scripts/gate/gate-tree.ts +1 -1
- package/scripts/gate/pre-commit-type-check.ts +0 -6
- package/scripts/gate/project-checks.ts +7 -8
- package/scripts/gate/scoped-green.ts +0 -1
- package/scripts/gate/type-check-step.ts +1 -1
- package/scripts/gate/verification-gate.ts +0 -2
- package/scripts/gh/fix-gh-packages.ts +15 -12
- package/scripts/gh/gh-spawn.ts +2 -2
- package/scripts/{git → gh}/git-ai-review-scan.ts +1 -5
- package/scripts/{git → gh}/git-gh-check.ts +2 -1
- package/scripts/{git → gh}/git-gh-exec.ts +1 -1
- package/scripts/{git → gh}/git-gh-failure.ts +1 -1
- package/scripts/{git → gh}/git-gh-helpers.ts +0 -1
- package/scripts/{git → gh}/git-gh-issue-list.ts +2 -0
- package/scripts/{git → gh}/git-gh-issue-read.ts +1 -1
- package/scripts/{git → gh}/git-gh-issue-rest.ts +6 -3
- package/scripts/{git → gh}/git-gh-pr-read.ts +24 -0
- package/scripts/{git → gh}/git-gh-pr-rest.ts +5 -2
- package/scripts/{git → gh}/git-gh-pr-review.ts +2 -2
- package/scripts/{git → gh}/git-gh-pr-rollup.ts +1 -3
- package/scripts/{git → gh}/git-gh-pr.ts +3 -1
- package/scripts/{git → gh}/git-pr-ai-review.ts +2 -5
- package/scripts/{git → gh}/git-pr-checks-eval.ts +0 -10
- package/scripts/{git → gh}/git-pr-checks-parse.ts +4 -20
- package/scripts/{git → gh}/git-pr-checks.ts +2 -1
- package/scripts/{git → gh}/git-pr-coderabbit.ts +2 -5
- package/scripts/{git → gh}/git-pr-confirmation.ts +1 -3
- package/scripts/{git → gh}/git-pr-managed-config.ts +2 -3
- package/scripts/{git → gh}/git-pr.ts +3 -3
- package/scripts/git/changed-file-scope.ts +0 -1
- package/scripts/git/git-branch.ts +3 -6
- package/scripts/git/git-command.ts +1 -1
- package/scripts/git/git-commit.ts +1 -1
- package/scripts/git/git-common-directory.ts +80 -24
- package/scripts/git/git-error.ts +66 -9
- package/scripts/git/git-execa-error.ts +6 -1
- package/scripts/git/git-issue.ts +1 -1
- package/scripts/git/git-preflight.ts +24 -6
- package/scripts/git/git-prompt.ts +6 -31
- package/scripts/git/git-push-transport.ts +12 -69
- package/scripts/git/git-push.ts +1 -1
- package/scripts/git/git-spawn.ts +79 -3
- package/scripts/git/git-ssh-keepalive.ts +74 -0
- package/scripts/git/git-staging.ts +1 -0
- package/scripts/git/git-status.ts +1 -1
- package/scripts/git/git-workflow.ts +1 -1
- package/scripts/git/gone-branch.ts +4 -2
- package/scripts/git/listing-cutoff.ts +1 -1
- package/scripts/git/main-merge.ts +1 -1
- package/scripts/git/main-sync.ts +19 -1
- package/scripts/git/parse-json-array.ts +0 -3
- package/scripts/git/repository-lock.ts +16 -16
- package/scripts/git/{git-stash.ts → stash/git-stash.ts} +1 -1
- package/scripts/git/{stash-pop-args.ts → stash/stash-pop-args.ts} +1 -1
- package/scripts/git/{stash-pop-cli.ts → stash/stash-pop-cli.ts} +0 -1
- package/scripts/git/{stash-sweep-lock.ts → stash/stash-sweep-lock.ts} +3 -3
- package/scripts/hooks/codex-hook-adapter.ts +0 -1
- package/scripts/hooks/edited-cspell.ts +1 -1
- package/scripts/hooks/format-edited-cli.ts +15 -0
- package/scripts/hooks/format-edited-file.ts +4 -9
- package/scripts/hooks/pre-push-unit.ts +0 -4
- package/scripts/hooks/pretool-guard-cli.ts +21 -0
- package/scripts/hooks/pretool-guard.ts +36 -19
- package/scripts/hooks/reserved-run.ts +1 -1
- package/scripts/hooks/step-zero-notice.ts +76 -0
- package/scripts/hooks/stop-guard.ts +47 -21
- package/scripts/init/claude-plugin-config.ts +4 -5
- package/scripts/init/hook-command-rewrite.ts +16 -8
- package/scripts/init/hook-launch.ts +41 -15
- package/scripts/init/init-basic.ts +2 -5
- package/scripts/init/init-logic.ts +7 -0
- package/scripts/init/init.ts +0 -3
- package/scripts/init/project-profile.ts +6 -11
- package/scripts/init/start-exec.ts +8 -2
- package/scripts/init/start-plan.ts +18 -5
- package/scripts/init/start-setup-pr.ts +52 -25
- package/scripts/init/start-steps.ts +42 -9
- package/scripts/init/start.ts +40 -10
- package/scripts/issue/behavior-change-lint.ts +0 -1
- package/scripts/issue/defect-rate-cli.ts +3 -3
- package/scripts/issue/defect-rate.ts +1 -2
- package/scripts/{git → issue}/git-next-issues.ts +37 -8
- package/scripts/issue/issue-backlinks-cli.ts +1 -5
- package/scripts/issue/issue-cite-cli.ts +2 -6
- package/scripts/issue/issue-cite.ts +19 -3
- package/scripts/issue/issue-classification.ts +1 -9
- package/scripts/issue/issue-closing-pr.ts +4 -4
- package/scripts/issue/issue-comment-cli.ts +2 -2
- package/scripts/issue/issue-file-cli.ts +5 -5
- package/scripts/issue/issue-file.ts +2 -2
- package/scripts/issue/issue-fold-cli.ts +1 -1
- package/scripts/issue/issue-fold-existing-cli.ts +1 -1
- package/scripts/{git → issue}/issue-labels.ts +20 -0
- package/scripts/issue/issue-lint-cli.ts +1 -1
- package/scripts/issue/issue-merged.ts +2 -2
- package/scripts/issue/issue-rank.ts +89 -0
- package/scripts/issue/issue-read-cli.ts +8 -47
- package/scripts/issue/issue-read.ts +0 -2
- package/scripts/issue/issue-report-failures.ts +80 -0
- package/scripts/issue/issue-scout-cli.ts +1 -7
- package/scripts/issue/issue-scout-closed.ts +2 -2
- package/scripts/issue/issue-scout.ts +0 -2
- package/scripts/issue/issue-state-cli.ts +5 -46
- package/scripts/issue/issue-state.ts +1 -5
- package/scripts/issue/markdown-section.ts +1 -1
- package/scripts/issue/measure-rerun-cli.ts +1 -1
- package/scripts/issue/reproduction-measure.ts +1 -1
- package/scripts/josh/cli-body.ts +1 -1
- package/scripts/josh/file-map-stamp.ts +0 -3
- package/scripts/josh/josh-command-map.ts +2 -102
- package/scripts/josh/josh-commands-ai.ts +9 -102
- package/scripts/josh/josh-commands-backlog.ts +5 -1
- package/scripts/josh/josh-commands-development.ts +10 -3
- package/scripts/josh/josh-commands-issue.ts +2 -2
- package/scripts/josh/josh-commands-maintenance.ts +7 -0
- package/scripts/josh/josh-commands-project.ts +7 -1
- package/scripts/josh/josh-commands-run.ts +114 -0
- package/scripts/josh/josh-commands-versioning.ts +8 -0
- package/scripts/josh/josh-commands-workflow.ts +2 -2
- package/scripts/josh/path-decision.ts +0 -3
- package/scripts/josh/process-owner.ts +16 -0
- package/scripts/josh/session-language-cli.ts +0 -1
- package/scripts/lane/lane-await.ts +3 -6
- package/scripts/lane/lane-capacity.ts +6 -3
- package/scripts/lane/lane-child-invocation.ts +20 -7
- package/scripts/lane/lane-child-marker.ts +16 -2
- package/scripts/lane/lane-cli.ts +33 -18
- package/scripts/lane/lane-close.ts +1 -3
- package/scripts/lane/lane-dispatch.ts +3 -4
- package/scripts/lane/lane-environment.ts +0 -9
- package/scripts/lane/lane-handoff.ts +38 -0
- package/scripts/lane/lane-launch-cli.ts +21 -11
- package/scripts/lane/lane-open.ts +0 -3
- package/scripts/lane/lane-output.ts +0 -1
- package/scripts/lane/lane-registry.ts +9 -0
- package/scripts/lane/lane-report.ts +10 -4
- package/scripts/lane/openai-lane-ship.ts +2 -0
- package/scripts/lane/openai-lane-supervisor-decision.ts +2 -1
- package/scripts/lane/openai-lane-supervisor.ts +6 -4
- package/scripts/lane/openai-review-broker.ts +3 -0
- package/scripts/lib/bounded-pool.ts +1 -0
- package/scripts/lib/json-value.ts +5 -4
- package/scripts/lib/poll.ts +3 -1
- package/scripts/lib/timed-fetch.ts +15 -0
- package/scripts/lib/timeouts.ts +13 -0
- package/scripts/{yaml → lib}/yaml-document.ts +3 -1
- package/scripts/{bytes → lines}/bytes-command.ts +0 -2
- package/scripts/lines/lines-command.ts +0 -1
- package/scripts/lint/lint-related-scope.ts +0 -1
- package/scripts/lint/lint-related.ts +1 -1
- package/scripts/{git → notify}/telegram-notify.ts +2 -2
- package/scripts/{git → notify}/telegram-test.ts +4 -4
- package/scripts/observations/observation-ledger-home.ts +0 -1
- package/scripts/observations/observation-ledger-line.ts +0 -1
- package/scripts/observations/observation-ledger-migrate.ts +1 -1
- package/scripts/observations/observations-flush-landing.ts +3 -3
- package/scripts/observations/observations-flush.ts +2 -2
- package/scripts/overrides/lockfile-overrides.ts +1 -1
- package/scripts/overrides/overrides-logic.ts +1 -1
- package/scripts/package/package-scout-cli.ts +2 -7
- package/scripts/package/package-scout.ts +0 -2
- package/scripts/propagate/propagate-git-failure.ts +0 -1
- package/scripts/propagate/propagate-git.ts +0 -2
- package/scripts/propagate/propagate-plan.ts +185 -0
- package/scripts/propagate/propagate-publish.ts +2 -3
- package/scripts/propagate/propagate-run.ts +5 -3
- package/scripts/propagate/propagate-steps.ts +19 -6
- package/scripts/propagate/propagate-targets.ts +13 -6
- package/scripts/propagate/propagate.ts +60 -46
- package/scripts/refactor/import-graph.ts +0 -1
- package/scripts/refactor/refactor-lint.ts +0 -2
- package/scripts/refactor/refactor-scan.ts +0 -1
- package/scripts/refactor/refactor-targets.ts +0 -1
- package/scripts/registry-migration/migrate-logic.ts +1 -2
- package/scripts/registry-migration/migrate.ts +19 -9
- package/scripts/release/github-release-cli.ts +8 -6
- package/scripts/release/github-release-environment.ts +46 -0
- package/scripts/release/github-release.ts +151 -94
- package/scripts/release/release-history.ts +0 -1
- package/scripts/release/release-plan.ts +0 -1
- package/scripts/release/release-publish.ts +2 -3
- package/scripts/release/release-scope-cli.ts +1 -2
- package/scripts/release/release-tag.ts +2 -4
- package/scripts/repo/auto-merge-setting-logic.ts +1 -4
- package/scripts/repo/repo-setting.ts +1 -1
- package/scripts/repo/repository-labels.ts +3 -3
- package/scripts/repo/required-checks-logic.ts +206 -0
- package/scripts/repo/required-checks-report.ts +71 -0
- package/scripts/repo/ruleset-check-cli.ts +53 -0
- package/scripts/repo/ruleset-check.ts +147 -0
- package/scripts/report/report-lint-cli.ts +0 -4
- package/scripts/review/disposition-cli.ts +1 -1
- package/scripts/review/live-evidence.ts +1 -1
- package/scripts/review/review-attest-cli.ts +0 -6
- package/scripts/review/review-attest.ts +48 -16
- package/scripts/review/review-brief-cli.ts +72 -8
- package/scripts/review/review-brief.ts +67 -9
- package/scripts/review/review-diff-parts.ts +89 -0
- package/scripts/review/review-diff-write.ts +97 -0
- package/scripts/review/review-finding-ledger.ts +0 -1
- package/scripts/review/review-record-cli.ts +1 -1
- package/scripts/review/review-record.ts +0 -1
- package/scripts/review/review-round2-cli.ts +1 -1
- package/scripts/review/review-stamps.ts +6 -2
- package/scripts/review/review-tree.ts +14 -2
- package/scripts/rules/decision-oracle-stage.ts +18 -0
- package/scripts/rules/decision-oracle.ts +10 -7
- package/scripts/rules/delivered-rules.ts +9 -1
- package/scripts/rules/destructive-command.ts +119 -0
- package/scripts/rules/direct-filing.ts +1 -1
- package/scripts/rules/file-body.ts +0 -3
- package/scripts/rules/filing-cap.ts +0 -2
- package/scripts/rules/gh-api.ts +7 -2
- package/scripts/rules/git-argv.ts +18 -7
- package/scripts/rules/git-force.ts +0 -2
- package/scripts/rules/implementation-cut.ts +1 -2
- package/scripts/rules/index-guard.ts +71 -0
- package/scripts/rules/issue-citation.ts +50 -25
- package/scripts/rules/issue-fold.ts +1 -2
- package/scripts/rules/lane-background.ts +15 -7
- package/scripts/rules/lane-carry-conflict.ts +1 -2
- package/scripts/rules/lane-park.ts +14 -8
- package/scripts/rules/last-prompt.ts +1 -0
- package/scripts/rules/oracle-consulted.ts +1 -1
- package/scripts/rules/oracle-firing.ts +1 -0
- package/scripts/rules/oracle-list-cli.ts +0 -3
- package/scripts/rules/permission-guards.ts +14 -0
- package/scripts/rules/pre-gate-cut.ts +2 -2
- package/scripts/rules/protected-files.ts +74 -0
- package/scripts/rules/reply-language.ts +1 -1
- package/scripts/rules/rule-body-guard.ts +0 -3
- package/scripts/rules/rule-value-cli.ts +0 -1
- package/scripts/rules/shell-body-trigger.ts +0 -1
- package/scripts/rules/shell-segments.ts +0 -1
- package/scripts/rules/stop-rules.ts +13 -5
- package/scripts/rules/tail-commands.ts +1 -1
- package/scripts/rules/test-declared-commit.ts +1 -1
- package/scripts/rules/third-party-write.ts +0 -1
- package/scripts/rules/worktree-guard.ts +26 -9
- package/scripts/run/run-carry-cli.ts +0 -2
- package/scripts/run/run-carry-stash.ts +2 -2
- package/scripts/run/run-carry-streak.ts +1 -1
- package/scripts/run/run-cut-cli.ts +0 -7
- package/scripts/run/run-cut.ts +8 -54
- package/scripts/run/run-ending-cli.ts +1 -1
- package/scripts/run/run-ending.ts +1 -4
- package/scripts/run/run-entry-cli.ts +101 -24
- package/scripts/run/run-entry.ts +0 -1
- package/scripts/run/run-event-cli.ts +0 -2
- package/scripts/run/run-event-follow.ts +1 -0
- package/scripts/run/run-event-render.ts +1 -1
- package/scripts/run/run-event-scope.ts +53 -4
- package/scripts/run/run-event-stream.ts +0 -3
- package/scripts/run/run-event-watch.ts +1 -0
- package/scripts/run/run-halfrun-resume.ts +20 -7
- package/scripts/run/run-headless.ts +24 -8
- package/scripts/run/run-hold-cli.ts +33 -10
- package/scripts/run/run-hold.ts +25 -5
- package/scripts/run/run-issue-number.ts +1 -1
- package/scripts/run/run-liveness-cli.ts +1 -1
- package/scripts/run/run-liveness.ts +2 -3
- package/scripts/run/run-merge-cli.ts +5 -13
- package/scripts/run/run-merge-steps.ts +5 -5
- package/scripts/run/run-merge.ts +1 -1
- package/scripts/run/run-next-cli.ts +1 -1
- package/scripts/run/run-parent-cut-hook.ts +143 -0
- package/scripts/run/run-preflight.ts +2 -9
- package/scripts/run/run-prep-cli.ts +2 -2
- package/scripts/run/run-prep-locate.ts +1 -1
- package/scripts/run/run-progress-cli.ts +4 -7
- package/scripts/run/run-progress-clock.ts +6 -34
- package/scripts/run/run-progress-config.ts +0 -4
- package/scripts/run/run-progress-read.ts +3 -3
- package/scripts/run/run-progress.ts +22 -10
- package/scripts/run/run-prrun-resume.ts +117 -0
- package/scripts/run/run-report-cli.ts +1 -2
- package/scripts/run/run-report.ts +0 -1
- package/scripts/run/run-retrospective.ts +1 -1
- package/scripts/run/run-review-cli.ts +0 -3
- package/scripts/run/run-review-steps.ts +2 -0
- package/scripts/run/run-review.ts +0 -2
- package/scripts/run/run-ship-cli.ts +27 -77
- package/scripts/run/run-ship-detach.ts +1 -0
- package/scripts/run/run-ship-next.ts +106 -0
- package/scripts/run/run-ship-preflight.ts +87 -0
- package/scripts/run/run-ship-return.ts +8 -3
- package/scripts/run/run-ship-review-steps.ts +23 -30
- package/scripts/run/run-ship-review.ts +20 -0
- package/scripts/run/run-ship-scoped.ts +45 -0
- package/scripts/run/run-ship-stage.ts +5 -1
- package/scripts/run/run-ship-steps.ts +105 -0
- package/scripts/run/run-ship.ts +2 -1
- package/scripts/run/run-stage-read.ts +62 -0
- package/scripts/run/run-stage.ts +160 -0
- package/scripts/run/run-status-cli.ts +1 -1
- package/scripts/run/run-step-cli.ts +21 -14
- package/scripts/run/run-step.ts +1 -1
- package/scripts/run/run-stop-notify.ts +1 -3
- package/scripts/run/run-stranded-cli.ts +0 -4
- package/scripts/run/run-stranded-detect.ts +2 -2
- package/scripts/run/run-tail-cli.ts +17 -11
- package/scripts/run/run-tail.ts +2 -0
- package/scripts/run/run-tidy-lanes.ts +2 -1
- package/scripts/run/run-tidy-stashes.ts +12 -12
- package/scripts/run/run-wake-cli.ts +4 -5
- package/scripts/run/run-wake-describe.ts +19 -1
- package/scripts/run/run-wake-loop.ts +2 -2
- package/scripts/run/run-wake.ts +2 -4
- package/scripts/run/run-watcher-guard-cli.ts +0 -4
- package/scripts/run/run-watcher-guard.ts +9 -7
- package/scripts/run/run-watcher-hook.ts +1 -1
- package/scripts/safe-chain/ci-installer-pin.ts +11 -5
- package/scripts/safe-chain/project-config.ts +1 -1
- package/scripts/security/security-audit-provision-logic.ts +0 -1
- package/scripts/security/security-audit-provision.ts +3 -2
- package/scripts/security/security-audit.ts +0 -1
- package/scripts/security/security-updates-logic.ts +0 -1
- package/scripts/sonar/sonar-hotspots-cli.ts +10 -52
- package/scripts/sonar/sonar-hotspots.ts +0 -1
- package/scripts/sonar/sonar-new-code-cli.ts +150 -0
- package/scripts/sonar/sonar-new-code.ts +79 -0
- package/scripts/sonar/sonar-project.ts +97 -0
- package/scripts/split/split-assess-cli.ts +1 -1
- package/scripts/split/split-assess.ts +2 -5
- package/scripts/sync/managed-config-scope-cli.ts +1 -1
- package/scripts/sync/skill-migration.ts +0 -1
- package/scripts/sync/sync-hook-safety.ts +2 -3
- package/scripts/sync/sync.ts +1 -8
- package/scripts/sync/template-source-logic.ts +0 -1
- package/scripts/sync/workflow-pin-logic.ts +16 -28
- package/scripts/test/test-declared-logic.ts +0 -1
- package/scripts/test/test-declared.ts +0 -2
- package/scripts/test/test-red-commit.ts +2 -2
- package/scripts/test/test-red.ts +14 -7
- package/scripts/test/test-type-logic.ts +1 -1
- package/scripts/test/unit-worker-share.ts +7 -16
- package/scripts/time-runtime/time-batch-guard.ts +1 -2
- package/scripts/time-runtime/time-bundle-call.ts +2 -3
- package/scripts/time-runtime/time-bundles.ts +0 -4
- package/scripts/time-runtime/time-density-hook.ts +0 -2
- package/scripts/time-runtime/time-followup-stage.ts +1 -1
- package/scripts/time-runtime/time-format.ts +0 -73
- package/scripts/time-runtime/time-round-trips.ts +0 -4
- package/scripts/time-runtime/time-single-check.ts +1 -1
- package/scripts/time-runtime/time-spans.ts +1 -1
- package/scripts/time-runtime/time-transcript-line.ts +1 -2
- package/scripts/ui/ui-routes-cli.ts +0 -5
- package/scripts/ui/ui-routes.ts +0 -5
- package/scripts/version/effective-upstream.ts +2 -2
- package/scripts/version/latest-corepack.ts +7 -9
- package/scripts/version/latest-scope-cli.ts +0 -2
- package/scripts/version/latest-update.ts +0 -2
- package/scripts/version/npm-registry.ts +97 -0
- package/scripts/version/publishable-range-check.ts +1 -1
- package/scripts/version/release-hold.ts +0 -4
- package/scripts/version/running-binary.ts +2 -2
- package/scripts/version/version-check-logic.ts +0 -2
- package/scripts/version/version-commands.ts +5 -4
- package/scripts/version/version-remote.ts +28 -14
- package/scripts/version/version-targets.ts +4 -4
- package/templates/sonar-project.properties +28 -1
- package/templates/workflows/dependabot-auto-merge.yml +5 -3
- package/templates/workflows/github-release.yml +81 -0
- package/prompts/collaboration-workflow/cross-repo-epic.md +0 -5
- package/prompts/collaboration-workflow/epic-audit.md +0 -5
- package/prompts/collaboration-workflow/epic-bundle.md +0 -5
- package/scripts/init/plugin-install-hint.ts +0 -47
- package/scripts/version/parse-json.ts +0 -13
- /package/scripts/{git → followup}/git-followup-stages.ts +0 -0
- /package/scripts/{git → gh}/git-gh-api-path.ts +0 -0
- /package/scripts/{git → gh}/git-gh-command.ts +0 -0
- /package/scripts/{git → gh}/git-gh-issue-write.ts +0 -0
- /package/scripts/{git → gh}/git-gh-issue.ts +0 -0
- /package/scripts/{git → gh}/git-gh-pr-auto-merge.ts +0 -0
- /package/scripts/{git → gh}/git-gh-pr-snapshot.ts +0 -0
- /package/scripts/{git → gh}/git-gh-reachability.ts +0 -0
- /package/scripts/{git → gh}/git-gh-repo.ts +0 -0
- /package/scripts/{git → gh}/git-gh-rest-state.ts +0 -0
- /package/scripts/{git → gh}/git-pr-checks-watch.ts +0 -0
- /package/scripts/{git → gh}/git-pr-error.ts +0 -0
- /package/scripts/{git → gh}/git-pr-messages.ts +0 -0
- /package/scripts/{git → gh}/github-issue-url.ts +0 -0
- /package/scripts/git/{stash-orphans.ts → stash/stash-orphans.ts} +0 -0
- /package/scripts/{git → issue}/issue-reference.ts +0 -0
- /package/scripts/{git → lib}/animation-helpers.ts +0 -0
- /package/scripts/{git → lib}/git-animation.ts +0 -0
- /package/scripts/{git → notify}/git-notify.ts +0 -0
- /package/scripts/{git → notify}/telegram-test-logic.ts +0 -0
|
@@ -19,7 +19,7 @@ Tier C (`CLAUDE.md`). Name what was filed in the completion report. An observati
|
|
|
19
19
|
on is dropped rather than filed.
|
|
20
20
|
|
|
21
21
|
**The filing ceilings still apply.** Count this filing in the ten-Issue limit for the run. An
|
|
22
|
-
observation is discretionary, so above
|
|
22
|
+
observation is discretionary, so above the WIP cap in the target repository, close one first or do
|
|
23
23
|
not file (`prompts/collaboration-workflow/wip-cap.md`). File it with `pnpm josh issue:file`
|
|
24
24
|
(`issue-scout.md`), which lints the body against `prompts/collaboration-workflow/issue-template.md`,
|
|
25
25
|
applies the classification labels it declares, runs the duplicate scan, and runs `epic:bundle` on the
|
|
@@ -32,13 +32,7 @@ The detail below is read at the filing decision, and the marker suite pins the r
|
|
|
32
32
|
|
|
33
33
|
### The depth test — a discretionary filing cites the product work it blocked
|
|
34
34
|
|
|
35
|
-
**
|
|
36
|
-
tooling** (joshuafolkken/kit#1698). Measured on the `backlogrun` of 2026-09-09: 5 Issues shipped and
|
|
37
|
-
15 filed, of which 13 were discretionary — and all 20 were about this package's own run
|
|
38
|
-
orchestration or the tools that measure it, with not one change a consumer of the package would see.
|
|
39
|
-
**A listing that measures itself has no natural stopping condition**, because every measurement
|
|
40
|
-
creates something new to measure. So the condition comes from outside, and **depth is what supplies
|
|
41
|
-
it — read off the subject rather than judged**:
|
|
35
|
+
**Depth is read off the subject rather than judged** (joshuafolkken/kit#1698):
|
|
42
36
|
|
|
43
37
|
| Depth | The subject | Where it lives |
|
|
44
38
|
| --- | --- | --- |
|
|
@@ -48,7 +42,7 @@ it — read off the subject rather than judged**:
|
|
|
48
42
|
|
|
49
43
|
**The depth is recorded on the Issue as a label, and the label is applied when the Issue is filed**
|
|
50
44
|
(joshuafolkken/kit#1729). `depth:0`, `depth:1` and `depth:2` are the three, defined once in
|
|
51
|
-
`scripts/
|
|
45
|
+
`scripts/issue/issue-labels.ts` and carrying no definition of their own — **the table above is the
|
|
52
46
|
single source**, and a label description that paraphrased it would be a second copy of the rule.
|
|
53
47
|
**Every filing route applies one**, this route and the other three of §2d's table alike: a `new`
|
|
54
48
|
entry point, a `route:tier-a` prerequisite, a `route:interrupt`, a split child and a review round
|
|
@@ -62,7 +56,7 @@ gh api repos/{owner}/{repo}/issues/<N>/labels -f 'labels[]=depth:1' # an Issue
|
|
|
62
56
|
|
|
63
57
|
**Create the three once per repository**, before the first filing that applies one — REST auto-creates
|
|
64
58
|
a missing label with a generated color and no description, and the three lines below are what give
|
|
65
|
-
each a stable color a reader can scan a listing by. `DEPTH_LABELS` in `scripts/
|
|
59
|
+
each a stable color a reader can scan a listing by. `DEPTH_LABELS` in `scripts/issue/issue-labels.ts`
|
|
66
60
|
is the single source of the colors and descriptions, and `scripts/rules/issue-depth-label.test.ts` keys
|
|
67
61
|
these lines to it so the two cannot drift.
|
|
68
62
|
|
|
@@ -75,16 +69,14 @@ gh api repos/{owner}/{repo}/labels -f name=depth:2 -f color=c5def5 -f descriptio
|
|
|
75
69
|
- **It is read off the subject, exactly as the table is** — so applying it is not a judgement and not
|
|
76
70
|
a person's to make, which is what separates it from `auto-ok` and `needs-human-review`. Those two
|
|
77
71
|
decide what a run may do; this one records what an Issue is about and withholds nothing.
|
|
78
|
-
- **Applied at filing, not at completion.**
|
|
79
|
-
whoever happens to close it, and the share below is a question about the *open* backlog — an Issue
|
|
80
|
-
that never carried the label was never in the numerator's reach.
|
|
72
|
+
- **Applied at filing, not at completion.**
|
|
81
73
|
- **An Issue carrying more than one counts as the lowest depth present**, the one closest to the
|
|
82
|
-
consumer.
|
|
83
|
-
twice can answer twice, which is the whole defect joshuafolkken/kit#1729 was filed for.
|
|
74
|
+
consumer.
|
|
84
75
|
- **An `epic` takes no depth label**, because it has no subject of its own to read one off — its
|
|
85
76
|
children carry the subjects, and the share below excludes it from the denominator for that same
|
|
86
|
-
reason.
|
|
87
|
-
|
|
77
|
+
reason.
|
|
78
|
+
|
|
79
|
+
Rationale: `docs/maintainers/observation-filing-rationale.md` → "Why the depth label is applied at filing".
|
|
88
80
|
|
|
89
81
|
- **A discretionary observation at depth 1 or deeper is filed only where it can cite the depth-0 work
|
|
90
82
|
it stopped or delayed** — named as an Issue number or a run, never as "this would slow runs down".
|
|
@@ -96,12 +88,8 @@ gh api repos/{owner}/{repo}/labels -f name=depth:2 -f color=c5def5 -f descriptio
|
|
|
96
88
|
- **`route:tier-a` and `route:interrupt` do not take it either**, at any depth: a filing the run
|
|
97
89
|
cannot proceed without is already citing its own blockage.
|
|
98
90
|
- **A depth-2 filing — one whose subject is what measures a run — carries a further requirement, on
|
|
99
|
-
top of the depth-0 citation above rather than in place of it** (joshuafolkken/kit#1975).
|
|
100
|
-
|
|
101
|
-
measurement Issue: "runs are slow" and "the diff is large" both name depth-0 work, while the number
|
|
102
|
-
the Issue proposes to produce changes nothing — and a listing that measures itself has no natural
|
|
103
|
-
stopping condition precisely there. So a discretionary depth-2 filing states two things the depth-0
|
|
104
|
-
citation does not force:
|
|
91
|
+
top of the depth-0 citation above rather than in place of it** (joshuafolkken/kit#1975). A
|
|
92
|
+
discretionary depth-2 filing states two things the depth-0 citation does not force:
|
|
105
93
|
- **The decision the number would change, named** — the Issue number holding the choice it is
|
|
106
94
|
waiting on, or a decision a person is about to make. "Slow", "large" and "worth knowing" are not a
|
|
107
95
|
decision.
|
|
@@ -115,15 +103,15 @@ gh api repos/{owner}/{repo}/labels -f name=depth:2 -f color=c5def5 -f descriptio
|
|
|
115
103
|
depth-0 observation does not take it because it is the product, and a review round cap's branch-2
|
|
116
104
|
filing (below) clears its own bar and never reaches this one.
|
|
117
105
|
|
|
106
|
+
Rationale: `docs/maintainers/observation-filing-rationale.md` → "Why depth gates a discretionary filing".
|
|
107
|
+
|
|
118
108
|
**It governs this route only — the fourth row of §2d's table.** A review finding routed to branch 2
|
|
119
109
|
of `prompts/review.md` → "Review round cap" is filed under that section's own bar — a confirmed
|
|
120
110
|
defect reaching a runtime path, with a written failure scenario — and **does not take the depth
|
|
121
111
|
test**: it has already cleared a bar this route has not, so gating it on a citation as well would
|
|
122
112
|
drop the one kind of finding both documents agree is never dropped. **That bar is the reason, and the
|
|
123
|
-
subject's depth is not
|
|
124
|
-
|
|
125
|
-
filings whose subject is the epic tooling, which the table above puts at depth 1
|
|
126
|
-
(joshuafolkken/kit#1675).
|
|
113
|
+
subject's depth is not.** Rationale: `docs/maintainers/observation-filing-rationale.md` → "Why a
|
|
114
|
+
review branch-2 filing skips the depth test".
|
|
127
115
|
|
|
128
116
|
**This is not the count cap that was rejected.** A cap is rationing — past the number the finding is
|
|
129
117
|
lost, and nothing about it says which findings were worth having. This changes what counts as a
|
|
@@ -133,34 +121,26 @@ finding at all, so what it excludes is excluded for a reason a reader can check.
|
|
|
133
121
|
a depth-2 Issue that *proposes* a measurement; a pull request that *adds* one — a new report column,
|
|
134
122
|
section, scope or subcommand, a diagnostic step — states in its body the reader that consumes it: the
|
|
135
123
|
Issue number that read the value to decide something, or the path of the rule that reads it. **A
|
|
136
|
-
measurement with no reader is not added**
|
|
137
|
-
|
|
138
|
-
never has to be filed again. `route:tier-a` and `route:interrupt` carry over unchanged.
|
|
124
|
+
measurement with no reader is not added** (joshuafolkken/kit#2012). `route:tier-a` and
|
|
125
|
+
`route:interrupt` carry over unchanged.
|
|
139
126
|
|
|
140
127
|
### The depth-0 share — what is counted
|
|
141
128
|
|
|
142
|
-
**
|
|
143
|
-
|
|
144
|
-
2026-09-10 it produced 3/14 ≈ 21%, and the two figures **are not comparable**: they took different
|
|
145
|
-
denominators, and neither said which. So the denominator is fixed here as a rule rather than left to
|
|
146
|
-
the counter.
|
|
129
|
+
**The depth-0 share is the share of open Issues at depth 0** (joshuafolkken/kit#1698,
|
|
130
|
+
joshuafolkken/kit#1729).
|
|
147
131
|
|
|
148
132
|
**The denominator is a rule, not a choice, and this is it:**
|
|
149
133
|
|
|
150
|
-
- **Counted: every open Issue that does not carry `epic`.**
|
|
151
|
-
rather than a deliverable of its own — counting one counts its children twice, and an epic has no
|
|
152
|
-
subject of its own to read a depth off.
|
|
134
|
+
- **Counted: every open Issue that does not carry `epic`.**
|
|
153
135
|
- **`route:tier-a` and `route:interrupt` are counted like anything else.** The depth test above
|
|
154
|
-
exempts them from its *citation* requirement; it never said they are not work.
|
|
155
|
-
|
|
156
|
-
- **An Issue with no depth label is in the denominator**, counted separately as `unlabelled`. Left
|
|
157
|
-
out, the share would improve every time a filing skipped the label — the one direction a
|
|
158
|
-
measurement must never be able to move on its own.
|
|
136
|
+
exempts them from its *citation* requirement; it never said they are not work.
|
|
137
|
+
- **An Issue with no depth label is in the denominator**, counted separately as `unlabelled`.
|
|
159
138
|
- **The numerator is what is left**: open, non-epic Issues carrying `depth:0`.
|
|
160
139
|
|
|
161
|
-
**Two readings of the same backlog give the same number
|
|
162
|
-
|
|
163
|
-
|
|
140
|
+
**Two readings of the same backlog give the same number**: nothing in the count is left to the
|
|
141
|
+
counter's judgement.
|
|
142
|
+
|
|
143
|
+
Rationale: `docs/maintainers/observation-filing-rationale.md` → "Why the depth-0 denominator is fixed".
|
|
164
144
|
|
|
165
145
|
**What the number is for is not decided here.** Changing what `backlog:next` offers on the strength
|
|
166
146
|
of it, and setting a target value, are both deliberately out of scope until the current value has
|
|
@@ -168,12 +148,9 @@ been measured the same way more than once (joshuafolkken/kit#1729 → 範囲外)
|
|
|
168
148
|
|
|
169
149
|
### The ledger — where an observation that cannot cite a blockage goes
|
|
170
150
|
|
|
171
|
-
**
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
joshuafolkken/kit#1726 is the worked case: its own body says the depth test would not have filed it,
|
|
175
|
-
and it was filed anyway, because **discarding it was the only alternative on offer**
|
|
176
|
-
(joshuafolkken/kit#1728).
|
|
151
|
+
**An observation the depth test turns away is recorded in the ledger, not discarded**
|
|
152
|
+
(joshuafolkken/kit#1728). Rationale: `docs/maintainers/observation-filing-rationale.md` → "Why the
|
|
153
|
+
ledger exists".
|
|
177
154
|
|
|
178
155
|
- **The destination is the `docs/maintainers/observations/` directory in the repository the
|
|
179
156
|
observation is about** — the same repository the Issue would have been filed into — **one file per
|
|
@@ -221,9 +198,8 @@ A sample, in the shape a real entry takes:
|
|
|
221
198
|
|
|
222
199
|
**`k:example` is reserved for this sample and is never used by a real observation**, so the count
|
|
223
200
|
below can be run over the whole ledger without the sample answering for one. **The grammar is defined
|
|
224
|
-
here rather than in the ledger**
|
|
225
|
-
|
|
226
|
-
leave every consumer's ledger shaped by hand.
|
|
201
|
+
here rather than in the ledger** (`docs/maintainers/observation-filing-rationale.md` → "Why the
|
|
202
|
+
ledger exists").
|
|
227
203
|
|
|
228
204
|
**The identity key is the whole of the repeat test — never a similarity judgement about the prose.**
|
|
229
205
|
Choose the key from the phenomenon rather than from the run, then count what the ledger already holds
|
|
@@ -244,27 +220,17 @@ rather than by editing the one already written.
|
|
|
244
220
|
|
|
245
221
|
**The depth gate is not withdrawn, and this is not a way around it.** An observation that *can* cite
|
|
246
222
|
the depth-0 work it stopped is filed exactly as it was before — this route is only for the ones that
|
|
247
|
-
could not
|
|
248
|
-
unchanged).
|
|
223
|
+
could not.
|
|
249
224
|
|
|
250
225
|
### The commit path — how an appended line reaches the default branch
|
|
251
226
|
|
|
252
|
-
**An append nobody commits is an append nobody can count** (joshuafolkken/kit#1756).
|
|
253
|
-
|
|
254
|
-
nobody was going to commit one**: the parent session that appends never runs `pnpm josh git`, a child
|
|
255
|
-
runs it inside a lane work tree that cannot see the parent's checkout, and in the primary checkout
|
|
256
|
-
`git add -u` swept the line into whatever unrelated pull request that run was opening. Measured on
|
|
257
|
-
the day the ledger shipped, `docs/observations.md` had exactly one commit — the one that created
|
|
258
|
-
it — and seven lines had never left a working tree. **So the repeat count below was reading a file
|
|
259
|
-
that is empty on every other machine**, and every sighting was a first one, which is the state
|
|
260
|
-
joshuafolkken/kit#1728 created the ledger to end.
|
|
227
|
+
**An append nobody commits is an append nobody can count** (joshuafolkken/kit#1756). Rationale:
|
|
228
|
+
`docs/maintainers/observation-filing-rationale.md` → "Why the ledger has a commit path".
|
|
261
229
|
|
|
262
230
|
- **A run's appended lines ride its own commit** (joshuafolkken/kit#2763). `pnpm josh git` stages
|
|
263
231
|
`docs/maintainers/observations/` with the run's other changes, in the one staging step every entry
|
|
264
232
|
point goes through (`scripts/git/git-staging.ts`), so the lines are reviewed and merged with the
|
|
265
|
-
pull request of the run that recorded them, and the run's CI is the only wait they cost.
|
|
266
|
-
#2763 the ledger was excluded there (joshuafolkken/kit#1756) and every run that appended a line
|
|
267
|
-
paid a second branch, CI wait and merge after its own — 144 ledger-only pull requests in one month.
|
|
233
|
+
pull request of the run that recorded them, and the run's CI is the only wait they cost.
|
|
268
234
|
**Record before the commit, not after the merge:** a finding recorded with `pnpm josh review:record`
|
|
269
235
|
before `pnpm josh git -y` is carried; the time while CI runs is for the records that need no CI
|
|
270
236
|
result — filing an observation Issue, drafting the completion report.
|
|
@@ -280,10 +246,7 @@ joshuafolkken/kit#1728 created the ledger to end.
|
|
|
280
246
|
otherwise be lost with the branch. A run whose lines rode its commit pays nothing.
|
|
281
247
|
- **A lane carries its own lines, in its own pull request** (joshuafolkken/kit#2919). Its writers
|
|
282
248
|
append to its own tree's `<N>.md`, so the two steps above take them to the default branch exactly as
|
|
283
|
-
they do for a run in the primary checkout.
|
|
284
|
-
instead (joshuafolkken/kit#2419) and a `backlogrun` flushed them all at `run:carry --end`
|
|
285
|
-
(joshuafolkken/kit#2492); another run's stash of that checkout took the lines before the flush saw
|
|
286
|
-
them, so neither route remains. **Nothing is held in the primary checkout for later.**
|
|
249
|
+
they do for a run in the primary checkout. **Nothing is held in the primary checkout for later.**
|
|
287
250
|
- **`pnpm josh observations:flush` is left for a line written outside any issue's run** — the
|
|
288
251
|
date-named file a retrospective or a hand append on the default branch writes. It stages the ledger
|
|
289
252
|
and nothing else, commits it on a branch of its own, opens a docs-only pull request, waits on the
|
|
@@ -300,10 +263,9 @@ joshuafolkken/kit#1728 created the ledger to end.
|
|
|
300
263
|
|
|
301
264
|
### The second sighting is what files it
|
|
302
265
|
|
|
303
|
-
**A repeat is the citation
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
it is counted rather than judged:
|
|
266
|
+
**A repeat is the citation**, so the gate has a second way through, and it is counted rather than
|
|
267
|
+
judged (rationale: `docs/maintainers/observation-filing-rationale.md` → "Why a second sighting
|
|
268
|
+
files"):
|
|
307
269
|
|
|
308
270
|
- **On the count answering exactly `1`, the observation is filed**, at depth 1 or deeper, with no
|
|
309
271
|
depth-0 citation — `1` and not "1 or more", because a higher count means the Issue was already
|
|
@@ -336,19 +298,12 @@ could bite later" line (`backlogrun-child.md` → "What the summary carries, and
|
|
|
336
298
|
parent files what survives — under the depth test above, and inside the run's ceiling.
|
|
337
299
|
|
|
338
300
|
**A delegated child does not append to the ledger either — the parent collapses the duplicates and
|
|
339
|
-
appends what is left.** The
|
|
340
|
-
holding one Issue's worth of context cannot tell its observation from the sibling lane's: eight
|
|
341
|
-
children appending in parallel would write the same thing under eight keys, and every one of them
|
|
342
|
-
would then read as a first sighting. The child's route is unchanged and is the only one it has —
|
|
301
|
+
appends what is left.** The child's route is unchanged and is the only one it has —
|
|
343
302
|
the summary's "Observations that could bite later" line — and the parent chooses the key, checks the
|
|
344
|
-
count and writes the line.
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
filings of 2026-09-09 were collapsed to 12 within that same day, which means they were collapsible
|
|
349
|
-
at the moment they were made. And **the 10-per-run ceiling for this route is the parent's to
|
|
350
|
-
count**: six children counting two or three filings each never reach it, which is why it did not
|
|
351
|
-
fire once on the run that filed fifteen.
|
|
303
|
+
count and writes the line. **The 10-per-run ceiling for this route is the parent's to count.**
|
|
304
|
+
|
|
305
|
+
Rationale: `docs/maintainers/observation-filing-rationale.md` → "Why a delegated child neither files
|
|
306
|
+
nor appends".
|
|
352
307
|
|
|
353
308
|
**This file is the single source of every procedure above**, and `SKILL.md` → §2i is the single
|
|
354
309
|
source of the rule they carry out; nothing under `prompts/collaboration-workflow/` restates either
|
|
@@ -7,7 +7,7 @@ from the gate onward. Rationale: `docs/maintainers/pre-gate-cut-rationale.md`
|
|
|
7
7
|
|
|
8
8
|
This file is the single source of the boundary. `run:cut` takes it, and `run:cut --resume` is the
|
|
9
9
|
check a fresh process makes at its own entry. **A second boundary is added below** — the
|
|
10
|
-
implementation-phase cut
|
|
10
|
+
implementation-phase cut, at a context threshold _during_ implementation.
|
|
11
11
|
Everything through "What is carried" describes the pre-gate cut; the later section states only what
|
|
12
12
|
differs.
|
|
13
13
|
|
|
@@ -23,7 +23,7 @@ verification the fresh process runs on the tree.
|
|
|
23
23
|
|
|
24
24
|
The cut is for a **detached** `fullrun` a lane dispatched; a person's interactive `fullrun` never
|
|
25
25
|
relaunches itself. A dispatched child is told apart **mechanically, by a mark the dispatch sets** — never
|
|
26
|
-
by the model reading the shape of its own prompt
|
|
26
|
+
by the model reading the shape of its own prompt.
|
|
27
27
|
|
|
28
28
|
### The dispatch mark
|
|
29
29
|
|
|
@@ -44,16 +44,15 @@ checkout, a cut in a lane.
|
|
|
44
44
|
|
|
45
45
|
## Taking the cut
|
|
46
46
|
|
|
47
|
-
**The order is fixed in the chain
|
|
47
|
+
**The order is fixed in the chain**: `chain-rule.md` step 1 issues
|
|
48
48
|
`pnpm josh run:cut <N>` after `pnpm josh main:merge`, before the scoped pair and the gate. **The command
|
|
49
|
-
is issued unconditionally**; `run:cut` itself decides whether the cut is warranted
|
|
50
|
-
(joshuafolkken/kit#2312), so a short lane with nothing to drop is answered `under-threshold` and walks on
|
|
49
|
+
is issued unconditionally**; `run:cut` itself decides whether the cut is warranted, so a short lane with nothing to drop is answered `under-threshold` and walks on
|
|
51
50
|
to the gate rather than relaunching.
|
|
52
51
|
|
|
53
52
|
At the pre-gate boundary, issue:
|
|
54
53
|
|
|
55
54
|
```bash
|
|
56
|
-
pnpm josh run:cut <N>
|
|
55
|
+
pnpm josh run:cut <N>
|
|
57
56
|
```
|
|
58
57
|
|
|
59
58
|
- `cut` (0) — record written and handed to the lane's launch owner (OpenAI supervisor starts the
|
|
@@ -72,25 +71,25 @@ the current process to carry the run on itself.
|
|
|
72
71
|
|
|
73
72
|
### The gate refuses until the cut has been taken (joshuafolkken/kit#1864)
|
|
74
73
|
|
|
75
|
-
**This step was carried as prose and fired exactly never.**
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
refusal is insurance, not the primary trigger. Rationale:
|
|
74
|
+
**This step was carried as prose and fired exactly never.** In measured lane children the cut was taken **0 times**, so
|
|
75
|
+
`pnpm josh rule:guard` **refuses `pnpm josh gate`** while this checkout is a lane and no cut record is
|
|
76
|
+
carried, handing back the command above. Rationale:
|
|
79
77
|
`docs/maintainers/pre-gate-cut-rationale.md` → "Why the rules are guards, not prose".
|
|
80
78
|
|
|
81
79
|
- **It fires for a marked child and nowhere else**: the working directory is a lane —
|
|
82
80
|
`<lane root>/<issue number>` — **and** `JOSH_LANE_CHILD` names that same issue. An interactive
|
|
83
81
|
`fullrun` carries no mark and runs its gate untouched. `run:cut` uses an open-lane lookup instead, so
|
|
84
82
|
the guard and the command need not agree byte for byte.
|
|
85
|
-
- **It fires only when the recent-window context warrants a cut
|
|
83
|
+
- **It fires only when the recent-window context warrants a cut**. The guard
|
|
86
84
|
reads the same `cost_cli.session_verdict` `run:cut` reads, so an `under`-threshold lane is let through
|
|
87
85
|
to the gate rather than refused.
|
|
88
86
|
- **It is silent once the cut is carried**, so the resumed process goes straight to the gate.
|
|
89
|
-
- **It fires once per run.**
|
|
87
|
+
- **It fires once per run.**
|
|
90
88
|
- **`--resume`, `--end` and `--json` do not count as taking the cut.**
|
|
91
89
|
|
|
92
90
|
The row, its trigger and the enumeration it joins are
|
|
93
|
-
`prompts/collaboration-workflow/rule-delivery.md
|
|
91
|
+
`prompts/collaboration-workflow/rule-delivery.md`. The suites that pin this and the three guards below:
|
|
92
|
+
`docs/maintainers/pre-gate-cut-rationale.md` → "Which suites pin each guard".
|
|
94
93
|
|
|
95
94
|
## Resuming — the fresh process's entry check
|
|
96
95
|
|
|
@@ -106,8 +105,7 @@ pnpm josh run:cut --resume <N>
|
|
|
106
105
|
- `resume` (0) — a declared pre-gate cut whose tree matches was verified and taken over. **Skip the
|
|
107
106
|
title, the plan, the fresh hold claim and the implementation**; re-read the issue body and comments
|
|
108
107
|
for the plan and the recorded decisions, then go straight to `pnpm josh gate`.
|
|
109
|
-
- `resume-impl` (0) — like `resume`, but the cut was taken **during** implementation
|
|
110
|
-
(joshuafolkken/kit#1933). Skip the title, the plan, the fresh hold claim and the split assessment,
|
|
108
|
+
- `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,
|
|
111
109
|
re-read the plan, then **continue implementation** — do **not** go straight to the gate.
|
|
112
110
|
- `handed-off` (0) — a successor has already adopted this cut, `is_handed_off` is spent
|
|
113
111
|
(joshuafolkken/kit#1935). This process was woken **after** its own cut. **End the turn quietly and do
|
|
@@ -154,7 +152,7 @@ decisions are read back from the issue. Rationale:
|
|
|
154
152
|
|
|
155
153
|
## The implementation-phase cut — a lane child cuts before the gate too
|
|
156
154
|
|
|
157
|
-
The **implementation-phase cut**
|
|
155
|
+
The **implementation-phase cut** caps the context accumulated _during_
|
|
158
156
|
implementation — the child ends mid-implementation and a fresh one resumes the lane **back into
|
|
159
157
|
implementation**.
|
|
160
158
|
|
|
@@ -162,15 +160,15 @@ implementation**.
|
|
|
162
160
|
|
|
163
161
|
The guard below refuses on the same measurement the parent uses between children —
|
|
164
162
|
`cost_verdict.per_request_cost`, read through `cost_cli.session_verdict` (the read-only form of
|
|
165
|
-
`pnpm josh cost --cut
|
|
163
|
+
`pnpm josh cost --cut`), single-sourced at `backlogrun-progress.md` → "The
|
|
166
164
|
hand-off". The parent's seam and the child's `run_cut.IMPLEMENTATION_CONTEXT_THRESHOLD` share the
|
|
167
165
|
**135_000** `CONTEXT_CUT_THRESHOLD` (aliased so the tests cannot drift). No separate measurement is
|
|
168
166
|
built for the lane child.
|
|
169
167
|
|
|
170
168
|
### It is a guard, fired at the edit that crosses the threshold (joshuafolkken/kit#2310)
|
|
171
169
|
|
|
172
|
-
**This step was carried as prose and fired exactly never** —
|
|
173
|
-
|
|
170
|
+
**This step was carried as prose and fired exactly never** — the cut fired **0 times** while 33.9% of
|
|
171
|
+
lane requests ran past 200,000 tokens. Rationale:
|
|
174
172
|
`docs/maintainers/pre-gate-cut-rationale.md` → "Why the rules are guards, not prose".
|
|
175
173
|
|
|
176
174
|
So `pnpm josh rule:guard` **refuses an `Edit` / `Write`** while this checkout is a dispatched lane child
|
|
@@ -185,7 +183,7 @@ crossing one successor.
|
|
|
185
183
|
- **It fires for a marked child, or a run held outside a lane on a measured `over`**
|
|
186
184
|
(joshuafolkken/kit#2760); a person's tree holds no run. Outside a lane `cut` relaunches nothing: keep
|
|
187
185
|
the hold, send a `confirmation` Telegram naming `fullrun #<N>`, end the turn.
|
|
188
|
-
- **It fires on every threshold crossing, not once per run**
|
|
186
|
+
- **It fires on every threshold crossing, not once per run** — it re-asks on
|
|
189
187
|
each over-threshold edit, including after a `busy` / `failed` / `unready` verdict.
|
|
190
188
|
- **An edit reissued right after a refusal passes** — so a `busy` / `failed` cut cannot wedge the run:
|
|
191
189
|
the reissue lands inside a short window and goes through, a genuinely new crossing past it refuses
|
|
@@ -196,8 +194,8 @@ crossing one successor.
|
|
|
196
194
|
- **The verdict read is reused over a short window** — cached per checkout for a few seconds, so a
|
|
197
195
|
turn's burst of edits shares one read.
|
|
198
196
|
|
|
199
|
-
`scripts/rules/implementation-cut.ts` implements the trigger,
|
|
200
|
-
|
|
197
|
+
`scripts/rules/implementation-cut.ts` implements the trigger, and the row joins
|
|
198
|
+
`prompts/collaboration-workflow/rule-delivery.md`. **A child that ended
|
|
201
199
|
without cutting is still detected after the fact by `pnpm josh run:ending <N> --output <path>`**
|
|
202
200
|
(joshuafolkken/kit#2139). **A single check (`lint:related` / `test:related`) is run after a batch of
|
|
203
201
|
edits, not after each one.**
|
|
@@ -206,12 +204,10 @@ edits, not after each one.**
|
|
|
206
204
|
|
|
207
205
|
**`CONTEXT_CUT_THRESHOLD` (135_000) is one value, and `cost_verdict.per_request_cost` — the one
|
|
208
206
|
statistic the parent and the lane child both read — averages the most recent `RECENT_REQUEST_WINDOW`
|
|
209
|
-
(10) requests, not the whole session
|
|
210
|
-
|
|
211
|
-
cut's one-time preamble rewrite (`POST_CUT_CONTEXT`, ~60_000 tokens — a cut carries a request from ~130k
|
|
212
|
-
down to ~60k), the cache multipliers in `cost-pricing.ts`, and a 10-request horizon.
|
|
207
|
+
(10) requests, not the whole session**. The value is computed by
|
|
208
|
+
`scripts/cost-runtime/context-cut-payback.ts`, its single source.
|
|
213
209
|
|
|
214
|
-
**The cut is conditional
|
|
210
|
+
**The cut is conditional**: taken only when the recent-window per-request cost
|
|
215
211
|
is over `CONTEXT_CUT_THRESHOLD` — the same statistic and threshold the implementation-phase cut reads, so
|
|
216
212
|
no second threshold exists. Below it `run:cut` answers `under-threshold` and the gate runs uncut; the
|
|
217
213
|
guard reads the same verdict and stays silent. An **unmeasurable** session is always cut.
|
|
@@ -227,8 +223,8 @@ cut is the same pattern one boundary earlier.
|
|
|
227
223
|
## A lane child records its park before it stops
|
|
228
224
|
|
|
229
225
|
**A dispatched lane child records its park on the Issue before it stops for a decision**
|
|
230
|
-
(joshuafolkken/kit#2034). A headless child's only route to ask a person is to park the Issue
|
|
231
|
-
|
|
226
|
+
(joshuafolkken/kit#2034). A headless child's only route to ask a person is to park the Issue (#2012,
|
|
227
|
+
#2011). Rationale:
|
|
232
228
|
`docs/maintainers/pre-gate-cut-rationale.md` → "Why the rules are guards, not prose".
|
|
233
229
|
|
|
234
230
|
**The record, before the Telegram, is the park procedure exactly** — `needs-decision` plus a comment
|
|
@@ -255,21 +251,22 @@ lane child — the mark `JOSH_LANE_CHILD` names this lane's own issue — handin
|
|
|
255
251
|
on the compliant path is safe.
|
|
256
252
|
|
|
257
253
|
This section is the single source of the lane-child park rule; `scripts/rules/lane-park.ts` implements
|
|
258
|
-
the trigger,
|
|
254
|
+
the trigger, and the row joins the enumeration in
|
|
259
255
|
`prompts/collaboration-workflow/rule-delivery.md`.
|
|
260
256
|
|
|
261
257
|
### The interactive ask is refused one call earlier
|
|
262
258
|
|
|
263
259
|
(joshuafolkken/kit#2201) The harness refuses an interactive ask in a headless session by **ending the
|
|
264
|
-
turn**, so the notify guard never fires — #
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
260
|
+
turn**, so the notify guard never fires (#2178 — the failure joshuafolkken/kit#2034 set out to prevent,
|
|
261
|
+
one call upstream). So `pnpm josh rule:guard` **refuses `AskUserQuestion` for a marked lane child**; the
|
|
262
|
+
deny returns to the model, and the instruction is to park the question. It fires on **every occurrence**
|
|
263
|
+
and stays silent for a person working in a lane. Rationale:
|
|
264
|
+
`docs/maintainers/pre-gate-cut-rationale.md` → "Why the rules are guards, not prose".
|
|
268
265
|
|
|
269
266
|
**A child that slips past it is still recoverable** — `pnpm josh run:ending` lifts the refused ask out
|
|
270
267
|
of the exit record's `permission_denials` into the `abandoned` verdict's park basis, so the parent puts
|
|
271
|
-
it into the park comment. `scripts/rules/lane-interactive-ask.ts` implements the trigger,
|
|
272
|
-
`scripts/
|
|
268
|
+
it into the park comment. `scripts/rules/lane-interactive-ask.ts` implements the trigger, and
|
|
269
|
+
`scripts/agent/interactive-ask.ts` is the
|
|
273
270
|
shared extractor the guard and `run:ending` both read.
|
|
274
271
|
|
|
275
272
|
This file is the single source of the rule.
|
|
@@ -31,7 +31,7 @@ pnpm josh issue:file "<title>" --body-file <body-file> --depth <n> --route tier-
|
|
|
31
31
|
|
|
32
32
|
The command lints the body against `prompts/collaboration-workflow/issue-template.md`, applies the
|
|
33
33
|
classification labels it declares, and runs the duplicate scan and `epic:bundle` itself
|
|
34
|
-
(`docs/josh-commands.md` → `josh issue:file`).
|
|
34
|
+
(`docs/josh-commands-automation.md` → `josh issue:file`).
|
|
35
35
|
|
|
36
36
|
Every "file the prerequisite" below means that labelled filing, and it always happens **first**: the
|
|
37
37
|
steps after it name a number that does not exist until it is. **Its duplicate scan is read exactly as
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# `prrun` — the manifest (plan → implement → PR → green → stop, a person merges)
|
|
2
|
+
|
|
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
|
+
(joshuafolkken/kit#3023). **Read `fullrun.md` for every step** — the entry sequence, the step lists,
|
|
6
|
+
the gate, the review and the stop branches are `fullrun`'s, unchanged. This file names only the
|
|
7
|
+
difference, never a second copy of the procedure.
|
|
8
|
+
|
|
9
|
+
## The difference — the entry
|
|
10
|
+
|
|
11
|
+
`prrun #<N>` opens with `pnpm josh run:entry <N> --to prrun` where `fullrun` passes no `--to`
|
|
12
|
+
(`SKILL.md` → §2k): a planned Issue starts at the implementation, a `halfrun` stop is adopted and
|
|
13
|
+
resumes at the gate, and an Issue already stopped by a `prrun` is reached — report the stage line and
|
|
14
|
+
stop. A merged Issue is reached too, but the `entry #<N>` line after the stage line answers it (§2k).
|
|
15
|
+
|
|
16
|
+
## The difference — the end of the run
|
|
17
|
+
|
|
18
|
+
Where `fullrun` runs `pnpm josh followup` and merges, `prrun` does three things and stops:
|
|
19
|
+
|
|
20
|
+
1. **Watch the pull request to mergeable** — `pnpm josh followup "<title> #<N>" --no-merge`
|
|
21
|
+
(`followup.md` → "Run `pnpm josh followup`", read in the same turn): required CI green and the AI
|
|
22
|
+
review findings resolved. A failure stops the run exactly as it stops a `fullrun`.
|
|
23
|
+
2. **Mark the stop — `pnpm josh run:hold <N> --prrun-stop`.** It records the commit the pull request is
|
|
24
|
+
on in this run's own hold, the record `fullrun #<N>` adopts (its prrun resume, `working-tree-hold.md`). **The hold and `in-progress` stay**: the run is not finished until the merge's tail runs.
|
|
25
|
+
3. **Send a `confirmation` Telegram with the resume commands, then stop.** **`fullrun #<N>` first** —
|
|
26
|
+
its `run:entry` reads where the pull request stands and resumes from there; the direct command
|
|
27
|
+
follows for finishing without an agent:
|
|
28
|
+
`pnpm josh notify --task-type confirmation --issue-url "<issue-url>" --body=$'prrun ready to
|
|
29
|
+
merge: <pr-url>\nNext: fullrun #<N>\nAfter a manual merge, without an agent: pnpm josh followup
|
|
30
|
+
"<title> #<N>"'`. The stop report names the same two, in the same order.
|
|
31
|
+
|
|
32
|
+
**Invoking `prrun` is _not_ authorization to merge** — never run `pnpm josh followup` without
|
|
33
|
+
`--no-merge` in a `prrun`. After a person merges by hand, the same `pnpm josh followup "<title> #<N>"`
|
|
34
|
+
runs only the post-merge tail (`followup.md`).
|
|
35
|
+
|
|
36
|
+
`prrun new`: `fullrun new` up to the pull request, then the three steps above with the filed number.
|
|
@@ -65,7 +65,7 @@ Issue, as after any filing.
|
|
|
65
65
|
input, so the next run picks the improvements up without waiting for a person. **`backlogrun-steps.md` →
|
|
66
66
|
"What one invocation approves" is that carve-out's single source**; it is written there, beside the
|
|
67
67
|
brakes that bound it, rather than restated here. Every brake still counts a retrospective's filings: the
|
|
68
|
-
ten-per-invocation ceiling, the WIP cap
|
|
68
|
+
ten-per-invocation ceiling, the WIP cap, `--max`, the 150,000-token session budget and the 8-hour
|
|
69
69
|
whole-run bound.
|
|
70
70
|
|
|
71
71
|
**Close with `pnpm josh run:carry --retrospective --summary "<result>" --owner "$PPID"`.** It marks the
|
|
@@ -11,9 +11,9 @@ a `new` entry files its Issue**, because a run stopped after the filing has alre
|
|
|
11
11
|
artifact it should not have created.
|
|
12
12
|
|
|
13
13
|
```bash
|
|
14
|
-
pnpm josh run:hold <N> # a `#N` entry point
|
|
14
|
+
pnpm josh run:hold <N> # a `#N` entry point
|
|
15
15
|
pnpm josh run:hold # a `new` entry point, before the issue exists
|
|
16
|
-
pnpm josh run:release <N> # that same run releasing its own record
|
|
16
|
+
pnpm josh run:release <N> # that same run releasing its own record
|
|
17
17
|
pnpm josh run:release # the bare form releases the unnumbered run's own record
|
|
18
18
|
pnpm josh run:release --force # a record left behind by a run that has ended
|
|
19
19
|
```
|
|
@@ -63,12 +63,13 @@ or release once the work is done; only an expired record over a clean tree is re
|
|
|
63
63
|
**The batch entry points claim per child, not per batch.** `backlogrun` never
|
|
64
64
|
call it themselves; each child runs the `fullrun` procedure, so it claims on entry and `pnpm josh
|
|
65
65
|
followup` releases it at that child's merge. The command's behavior and the answer table are
|
|
66
|
-
`docs/josh-commands.md` → "`josh run:hold` / `josh run:release`"; this file is the single source of
|
|
66
|
+
`docs/josh-commands-automation.md` → "`josh run:hold` / `josh run:release`"; this file is the single source of
|
|
67
67
|
the procedure.
|
|
68
68
|
|
|
69
69
|
## The halfrun resume
|
|
70
70
|
|
|
71
|
-
**`fullrun #<N>` after a `halfrun` stop resumes it instead of claiming**
|
|
71
|
+
**`fullrun #<N>` or `prrun #<N>` after a `halfrun` stop resumes it instead of claiming**
|
|
72
|
+
(joshuafolkken/kit#2796, #3042). The
|
|
72
73
|
stop is **recorded, never inferred**: the `halfrun` ends with `pnpm josh run:hold <N> --halfrun-stop`,
|
|
73
74
|
which marks its own record (re-keying a `halfrun new`'s unnumbered one to the filed issue) — a
|
|
74
75
|
`halfrun` still implementing or a `backlogrun` child leaves the same hold over the same dirty tree, and
|
|
@@ -79,3 +80,22 @@ halfrun`. **Skip the title, the plan, the split assessment, `git switch main &&
|
|
|
79
80
|
issue (`pnpm josh issue:read <N>`), then run the gate **in full** from the refactor (`chain-rule.md` →
|
|
80
81
|
"Run the review-to-merge chain") — a fix made during the manual check has had no gate — and ship as
|
|
81
82
|
any `fullrun` does.
|
|
83
|
+
|
|
84
|
+
## The prrun resume
|
|
85
|
+
|
|
86
|
+
**`fullrun #<N>` after a `prrun` stop resumes it the same way** (joshuafolkken/kit#3023). The `prrun`
|
|
87
|
+
ends with `pnpm josh run:hold <N> --prrun-stop`, which writes the commit its pull request is on into its
|
|
88
|
+
own record; only a record carrying that commit is adopted. `run:entry` asks the session budget, adopts
|
|
89
|
+
the hold with the `fullrun` mark and prints one of three tokens — read, never inferred:
|
|
90
|
+
|
|
91
|
+
- **`resume: prrun-merged`** — a person merged the pull request. Run `pnpm josh followup "<title>
|
|
92
|
+
#<N>"` alone: it detects the merge and runs only the post-merge tail.
|
|
93
|
+
- **`resume: prrun-merge`** — the branch is still on the stop's commit, both here and on the pull
|
|
94
|
+
request, and the tree is clean, so what was verified is what would merge. Skip the gate and the
|
|
95
|
+
review; run `pnpm josh followup` to merge.
|
|
96
|
+
- **`resume: prrun-gate`** — the branch moved (locally, or by a push made on GitHub), its pull request
|
|
97
|
+
could not be read, or the tree is dirty: a person changed something. Run the
|
|
98
|
+
gate **in full** and the review (`chain-rule.md` → "Run the review-to-merge chain"), then ship as any
|
|
99
|
+
`fullrun` does.
|
|
100
|
+
|
|
101
|
+
All three skip the title, the plan, the split assessment and the implementation.
|