@joshuafolkken/kit 1.1240.0 → 1.1373.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 +52 -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 +19 -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 +26 -16
- package/.claude/skills/workflow-commands/latest-gate.md +17 -28
- 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/.vscode/tasks.json +14 -0
- package/CLAUDE.md +10 -61
- package/README.md +23 -66
- package/SECURITY.md +1 -1
- package/dist/CLAUDE.md +10 -61
- package/dist/commands/document-section-cli.js +43 -11
- 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-KHGB5S3Y.js → chunk-7UBFU3CL.js} +18 -20
- package/dist/hooks/{chunk-ZQGD4GBY.js → chunk-7WKYHEGU.js} +8 -44
- package/dist/hooks/{chunk-4TZVB44A.js → chunk-AKGCP4LX.js} +285 -363
- package/dist/hooks/{chunk-QVSWU24O.js → chunk-BZMPVFDY.js} +7 -5
- package/dist/hooks/{chunk-5VNDSNG3.js → chunk-FZ6FUSBM.js} +1 -1
- package/dist/hooks/{chunk-GPTFMK5E.js → chunk-GG72ANKI.js} +1 -1
- package/dist/hooks/{chunk-XZYKEM6J.js → chunk-JCRDBQXB.js} +13 -11
- package/dist/hooks/{chunk-F3ELQ2AF.js → chunk-JGW24KKM.js} +4 -4
- package/dist/hooks/{chunk-ELCN5LCH.js → chunk-NEC4AT4Z.js} +34 -12
- package/dist/hooks/chunk-NZN2UFI6.js +2409 -0
- package/dist/hooks/{chunk-WK2XSHSI.js → chunk-SLSFIWTX.js} +550 -875
- package/dist/hooks/chunk-UTHMB4O2.js +1590 -0
- package/dist/hooks/{chunk-KRBERBBI.js → chunk-V4TKZHER.js} +4 -4
- package/dist/hooks/chunk-YLBBSSTF.js +3705 -0
- 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 +195 -181
- 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 -187
- package/dist/josh.js +282 -95
- 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 +17 -11
- 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 +3 -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 +30 -5
- 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 +2 -2
- package/scripts/gate/core-budget.ts +15 -26
- package/scripts/gate/gate-ledger.ts +114 -0
- package/scripts/gate/gate-log.ts +7 -9
- package/scripts/gate/gate-plan.ts +70 -35
- package/scripts/gate/gate-report.ts +14 -15
- 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 +168 -30
- 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 +53 -51
- 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 +7 -7
- 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 +1 -1
- 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 +24 -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 +52 -15
- package/scripts/issue/issue-file-fold.ts +155 -0
- package/scripts/issue/issue-file.ts +9 -6
- package/scripts/issue/issue-fold-cli.ts +14 -9
- package/scripts/issue/issue-fold.ts +23 -8
- package/scripts/issue/issue-labels.ts +34 -38
- 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 +17 -7
- package/scripts/issue/issue-release.ts +3 -3
- 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 +30 -35
- 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 +25 -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 +4 -5
- package/scripts/josh/josh-commands-lane.ts +14 -4
- package/scripts/josh/josh-commands-lint.ts +1 -1
- package/scripts/josh/josh-commands-run.ts +21 -7
- 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 +6 -7
- 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 +12 -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 +2 -2
- 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 +20 -19
- package/scripts/lane/lane-output.ts +4 -3
- package/scripts/lane/lane-paths.ts +12 -11
- package/scripts/lane/lane-phase.ts +33 -0
- package/scripts/lane/lane-reap.ts +2 -2
- package/scripts/lane/lane-registry.ts +16 -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 +1 -1
- 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/cross-file-recheck.ts +155 -0
- package/scripts/lint/cspell-cached.ts +1 -1
- package/scripts/lint/format.ts +1 -2
- package/scripts/lint/lint-parallel.ts +35 -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-runs.ts +1 -1
- 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 +6 -7
- 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 +54 -36
- 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 +9 -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 +171 -46
- 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 +26 -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 +64 -18
- package/scripts/run/run-step.ts +107 -51
- 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 -32
- package/scripts/run/wake/run-wake-describe.ts +24 -28
- 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 +9 -9
- 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 -279
- 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 +26 -26
- 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/dist/hooks/chunk-KHX4U3BG.js +0 -6400
- 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
|
@@ -6,12 +6,12 @@ import { time_shell } from './time-shell'
|
|
|
6
6
|
const { BASH_TOOL } = cost_blocks
|
|
7
7
|
|
|
8
8
|
// What one call has to say about itself before anything can ask whether it could have gone out
|
|
9
|
-
// beside another
|
|
9
|
+
// beside another.
|
|
10
10
|
//
|
|
11
11
|
// `time-round-trips.ts` counts how many times a run stopped, and `time-density.ts` says the count is
|
|
12
12
|
// too high while the run is still going. Neither can say **which** of those stops were avoidable, and
|
|
13
|
-
// that is the number
|
|
14
|
-
//
|
|
13
|
+
// that is the number this reads: an estimate drawn from a target density is arithmetic, not a
|
|
14
|
+
// reading of what the run actually did.
|
|
15
15
|
//
|
|
16
16
|
// **Two facts, and both have to be read while the input is in hand.** A span keeps no input, for the
|
|
17
17
|
// reason `time-spans.ts` states beside `marker`: the tool's input is what decides the answer, and by
|
|
@@ -36,7 +36,7 @@ const { BASH_TOOL } = cost_blocks
|
|
|
36
36
|
// or a stop for a person.
|
|
37
37
|
const BUNDLEABLE_TOOLS = new Set(['Edit', 'Glob', 'Grep', 'Read', 'WebFetch', 'WebSearch', 'Write'])
|
|
38
38
|
|
|
39
|
-
// The tools that launch a *fresh* subagent
|
|
39
|
+
// The tools that launch a *fresh* subagent. Both spellings occur across
|
|
40
40
|
// harnesses — this one names it `Agent`, others `Task` — and `time-batch-guard.ts` already treats the
|
|
41
41
|
// two the same. They are deliberately not `time-parent-turns.ts`'s wider dispatch set: `SendMessage`
|
|
42
42
|
// continues an existing agent and is dependent by nature, so a fan-out could never have included it.
|
|
@@ -46,7 +46,7 @@ const LAUNCH_TOOLS = new Set(['Agent', 'Task'])
|
|
|
46
46
|
|
|
47
47
|
// A launch whose prompt builds on an earlier agent's *finding* rather than on the codebase as it
|
|
48
48
|
// stands — the one dependency `time-agent-bundles.ts` cannot see from an intervening write, because a
|
|
49
|
-
// read-only investigation chain writes nothing between its links
|
|
49
|
+
// read-only investigation chain writes nothing between its links. It is a
|
|
50
50
|
// marker scan and therefore a floor: a prompt that quotes the prior finding without any of these
|
|
51
51
|
// phrases reads as independent, which is the same output-only blind spot this module documents beside
|
|
52
52
|
// `targets`. It never over-calls — a marker present is treated as dependent, which drops the launch
|
|
@@ -170,7 +170,7 @@ const MUTATION_WORDS = new Set([
|
|
|
170
170
|
'wget',
|
|
171
171
|
])
|
|
172
172
|
|
|
173
|
-
// The read-only `pnpm josh` bookkeeping subcommands
|
|
173
|
+
// The read-only `pnpm josh` bookkeeping subcommands. Every `pnpm josh …`
|
|
174
174
|
// leads with `pnpm`, which is a mutation word above so the writing josh commands — `gate`, `followup`,
|
|
175
175
|
// `git` — are turned away; that same leading word turned the read-only ones away too, so the batching
|
|
176
176
|
// guard never saw the bookkeeping calls the Issue measured going out one per turn, and `Bundling:`
|
|
@@ -242,7 +242,7 @@ const FLAG_PREFIX = '-'
|
|
|
242
242
|
const PATH_SEPARATOR = '/'
|
|
243
243
|
const MIN_TARGET_LENGTH = 3
|
|
244
244
|
|
|
245
|
-
// The tools that write. **Kept here rather than in the guard
|
|
245
|
+
// The tools that write. **Kept here rather than in the guard**: the guard
|
|
246
246
|
// held its own copy, and the sequence builder had no way to ask at all — so a run of edits to one
|
|
247
247
|
// file was read as a chain of dependent calls and no sequence ever formed. One answer, one place.
|
|
248
248
|
const WRITING_TOOLS: ReadonlySet<string> = new Set(['Edit', 'Write', 'NotebookEdit'])
|
|
@@ -272,8 +272,7 @@ interface BundleFacts {
|
|
|
272
272
|
targets: ReadonlyArray<string>
|
|
273
273
|
// Whether the call **certainly** rewrites what it names. **Two writes to one file do not depend on
|
|
274
274
|
// each other** — the text is already held, so both belong in one turn — while a write after a read
|
|
275
|
-
// of the same file genuinely does. `time-bundles.ts` reads this to tell the two apart
|
|
276
|
-
// (joshuafolkken/kit#1509).
|
|
275
|
+
// of the same file genuinely does. `time-bundles.ts` reads this to tell the two apart.
|
|
277
276
|
is_writing: boolean
|
|
278
277
|
// Whether the call **might** write, which is a different question and needs the opposite bias.
|
|
279
278
|
//
|
|
@@ -283,8 +282,8 @@ interface BundleFacts {
|
|
|
283
282
|
// dependency *removed*, so `sed -n '1,200p' x.ts` twice would read as a bundleable pair when the
|
|
284
283
|
// second may well have needed the first. Same bias, opposite consequences, so they are two fields.
|
|
285
284
|
may_write: boolean
|
|
286
|
-
// Whether this is a subagent launch whose prompt builds on an earlier launch's finding
|
|
287
|
-
//
|
|
285
|
+
// Whether this is a subagent launch whose prompt builds on an earlier launch's finding.
|
|
286
|
+
// `false` for every call that is not a launch, and for a launch whose
|
|
288
287
|
// prompt names no back-reference marker. `time-agent-bundles.ts` reads it to break a fan-out group
|
|
289
288
|
// that a read-only investigation chain would otherwise slip through, since such a chain writes
|
|
290
289
|
// nothing between its links for the intervening-write test to catch.
|
|
@@ -306,7 +305,7 @@ function not_bundleable(): BundleFacts {
|
|
|
306
305
|
}
|
|
307
306
|
|
|
308
307
|
// Whether a tool name is a fresh subagent launch. Exported so `time-agent-bundles.ts` reads the one
|
|
309
|
-
// set rather than keeping a second copy of it
|
|
308
|
+
// set rather than keeping a second copy of it.
|
|
310
309
|
function is_launch_tool(name: string): boolean {
|
|
311
310
|
return LAUNCH_TOOLS.has(name)
|
|
312
311
|
}
|
|
@@ -339,7 +338,7 @@ function josh_subcommand(command: string): string | undefined {
|
|
|
339
338
|
// line falls through. An alias is resolved to its canonical name first, so the allow-list holds
|
|
340
339
|
// canonical names alone. Everything not on the list falls
|
|
341
340
|
// through to the read/mutation test, which is what keeps `josh gate` / `followup` / `git`
|
|
342
|
-
// non-bundleable
|
|
341
|
+
// non-bundleable.
|
|
343
342
|
function is_read_josh(command: string): boolean {
|
|
344
343
|
if (COMMAND_CHAIN.test(command)) return false
|
|
345
344
|
|
|
@@ -365,8 +364,7 @@ function may_write_command(command: string): boolean {
|
|
|
365
364
|
// one shell line that certainly rewrites a file *and* is bundleable is the in-place `sed`: `sed` is on
|
|
366
365
|
// the read list because `sed -n` prints, so the flag is what separates the two spellings. Everything
|
|
367
366
|
// else answers `false` — a genuine write missed here only leaves a sequence broken the way it already
|
|
368
|
-
// was, while a read caught here would have its dependency removed, which is the failure that matters
|
|
369
|
-
// (joshuafolkken/kit#1509).
|
|
367
|
+
// was, while a read caught here would have its dependency removed, which is the failure that matters.
|
|
370
368
|
// **The one segment that runs the command, with its quoted text removed first — never the whole
|
|
371
369
|
// line.** Each half closes an over-call, and this predicate feeds the dependency test, so an
|
|
372
370
|
// over-call removes a dependency that is really there:
|
|
@@ -382,8 +380,8 @@ function write_segment(command: string): string {
|
|
|
382
380
|
|
|
383
381
|
// **The certain half of the write question, asked in one place for both readers.** `time-writes.ts`
|
|
384
382
|
// answers *which* files an in-place `sed` wrote and this module answers *whether* it wrote at all;
|
|
385
|
-
// they were two implementations of the same test and disagreed in both directions
|
|
386
|
-
//
|
|
383
|
+
// they were two implementations of the same test and disagreed in both directions.
|
|
384
|
+
// The predicate lives here because `time-writes.ts` already imports this
|
|
387
385
|
// module, so the reverse direction would be a cycle.
|
|
388
386
|
function is_in_place_sed(segment: string): boolean {
|
|
389
387
|
if (time_shell.leading_word(segment) !== IN_PLACE_COMMAND) return false
|
|
@@ -466,7 +464,7 @@ function tool_facts(name: string, input: unknown): BundleFacts {
|
|
|
466
464
|
// A tool names what it does, so here the two questions have the same answer.
|
|
467
465
|
const writes = { is_writing: WRITING_TOOLS.has(name), may_write: WRITING_TOOLS.has(name) }
|
|
468
466
|
// Only a launch is asked, and only a launch can answer `true` — a non-launch tool has no prompt to
|
|
469
|
-
// build on a prior finding
|
|
467
|
+
// build on a prior finding.
|
|
470
468
|
const has_prior_reference = LAUNCH_TOOLS.has(name) && prompt_references_prior(input)
|
|
471
469
|
|
|
472
470
|
if (!BUNDLEABLE_TOOLS.has(name)) return { ...not_bundleable(), ...writes, has_prior_reference }
|
|
@@ -478,7 +476,7 @@ function tool_facts(name: string, input: unknown): BundleFacts {
|
|
|
478
476
|
// second reader here — the two answers have to be the same one, or a call could be labelled by one
|
|
479
477
|
// command and classified by another.
|
|
480
478
|
//
|
|
481
|
-
// **The quoted spans come off before the targets are read
|
|
479
|
+
// **The quoted spans come off before the targets are read**. `words_of`
|
|
482
480
|
// treats a quote as a separator rather than as a boundary, and `/` is not a separator at all — so
|
|
483
481
|
// `sed -i '' 's/old/new/' scripts/one.ts` yielded `s/old/new` beside the real path, and
|
|
484
482
|
// `investigation-reads.ts` then held a file that no edit could ever name pending for the rest of the
|
|
@@ -500,8 +498,8 @@ function bash_facts(command: string): BundleFacts {
|
|
|
500
498
|
}
|
|
501
499
|
|
|
502
500
|
// A read-only `josh` bookkeeping command is bundleable even though `pnpm` leads it and is a mutation
|
|
503
|
-
// word: the allow-list above is the read-only half the leading-word test could not reach
|
|
504
|
-
//
|
|
501
|
+
// word: the allow-list above is the read-only half the leading-word test could not reach.
|
|
502
|
+
// Its writes are already `false` — no `>`, no in-place `sed` — so the guard
|
|
505
503
|
// can refuse a run of them and `Bundling:` can count them recoverable.
|
|
506
504
|
if (is_read_josh(command)) {
|
|
507
505
|
return {
|
|
@@ -526,7 +524,7 @@ function bash_facts(command: string): BundleFacts {
|
|
|
526
524
|
}
|
|
527
525
|
|
|
528
526
|
// The facts for one call named the way a caller holding a raw tool invocation names it — a tool and
|
|
529
|
-
// its input, with nothing unwrapped yet
|
|
527
|
+
// its input, with nothing unwrapped yet.
|
|
530
528
|
//
|
|
531
529
|
// **It exists so the live guard and the parser cannot disagree about what a call is.** `time-spans.ts`
|
|
532
530
|
// reaches the two functions above directly because it has already read the shell command out of the
|
|
@@ -545,27 +543,27 @@ const time_bundle_call = {
|
|
|
545
543
|
bash_facts,
|
|
546
544
|
call_facts,
|
|
547
545
|
tool_facts,
|
|
548
|
-
// Exported for `time-agent-bundles.ts
|
|
546
|
+
// Exported for `time-agent-bundles.ts`, which asks the launch question of a
|
|
549
547
|
// span's `label` — the tool name for a non-Bash call — so the set lives in one place.
|
|
550
548
|
is_launch_tool,
|
|
551
|
-
// Exported for `time-writes.ts
|
|
549
|
+
// Exported for `time-writes.ts`, which asks what a call *wrote* rather
|
|
552
550
|
// than what it named. The extraction is the same one either way — a second copy of it would let a
|
|
553
551
|
// path be recognized as a target when read and missed when written.
|
|
554
552
|
targets_in,
|
|
555
553
|
tool_targets,
|
|
556
|
-
// Exported for the batching guard's own word scan
|
|
554
|
+
// Exported for the batching guard's own word scan, so the two scanners
|
|
557
555
|
// cannot come to disagree about where one word of a shell line ends and the next begins.
|
|
558
|
-
// Exported for the read-fold notice
|
|
556
|
+
// Exported for the read-fold notice, which offers `read:files <path>` only
|
|
559
557
|
// over file-shaped targets — a bare directory like `scripts/` is a target here but not something
|
|
560
558
|
// `read:files` can read, so the notice reuses this test rather than keep a second copy that could
|
|
561
559
|
// drift from what counts as a file path.
|
|
562
560
|
has_extension,
|
|
563
|
-
// Exported for `time-writes.ts
|
|
561
|
+
// Exported for `time-writes.ts`, which needs the same two answers to say
|
|
564
562
|
// *which* files an in-place `sed` wrote. Two copies of this test disagreed in both directions at
|
|
565
563
|
// once — one called a piped `grep -i` a write, the other missed a bundled `sed -ni`.
|
|
566
564
|
write_segment,
|
|
567
565
|
is_in_place_sed,
|
|
568
|
-
// Exported for the drift test in `time-bundle-call.test.ts
|
|
566
|
+
// Exported for the drift test in `time-bundle-call.test.ts`, which pins that
|
|
569
567
|
// every name here is a real `josh` command and none of them writes.
|
|
570
568
|
READ_JOSH_SUBCOMMANDS,
|
|
571
569
|
}
|
|
@@ -3,11 +3,10 @@ import { time_format } from './time-format'
|
|
|
3
3
|
import { time_round_trips } from './time-round-trips'
|
|
4
4
|
import { time_spans, type Span } from './time-spans'
|
|
5
5
|
|
|
6
|
-
// How many of a run's round trips were avoidable, read from the run rather than assumed
|
|
7
|
-
// (joshuafolkken/kit#1344).
|
|
6
|
+
// How many of a run's round trips were avoidable, read from the run rather than assumed.
|
|
8
7
|
//
|
|
9
8
|
// Three runs in a row came in at 1.10–1.12 calls per round trip against a 1.50 floor, and neither the
|
|
10
|
-
// end-of-run warning
|
|
9
|
+
// end-of-run warning nor the live line moved the
|
|
11
10
|
// number. The Issue's estimate of what batching would return — 33 round trips of 136, about 4.8
|
|
12
11
|
// minutes — was arithmetic on the floor: it assumed every call could be bundled to 1.50 and said
|
|
13
12
|
// nothing about which ones actually could. **A mechanism proposed on that figure would be sized by an
|
|
@@ -42,7 +41,7 @@ const SAVING_LABEL = 'recoverable wait'
|
|
|
42
41
|
// transcript has no per-tool answer either, and a table printed under a `not measured` heading would
|
|
43
42
|
// be the empty-means-nothing-to-recover reading this block refuses everywhere else.
|
|
44
43
|
const BY_TOOL_LABEL = 'recoverable by tool'
|
|
45
|
-
// The one label the spread-apart series contributes
|
|
44
|
+
// The one label the spread-apart series contributes. Both launch spellings —
|
|
46
45
|
// `Agent` here, `Task` elsewhere — collapse into this one row, so the reconciliation stays balanced.
|
|
47
46
|
const AGENT_ROW_LABEL = 'Agent'
|
|
48
47
|
// The per-tool rows sit one level under that row. Two spaces rather than a separate column, because
|
|
@@ -62,7 +61,7 @@ const FIRST_CALL = 1
|
|
|
62
61
|
// what it leaves out is exactly what `unattributed_round_trips` below then reports.
|
|
63
62
|
const NO_LABEL = ''
|
|
64
63
|
|
|
65
|
-
// One tool's share of what the run could have recovered
|
|
64
|
+
// One tool's share of what the run could have recovered. `sequence_count` is
|
|
66
65
|
// the number of sequences this tool contributed a recoverable trip to, not the number of calls it
|
|
67
66
|
// made — a tool appearing four times inside one sequence is one sequence to go and look at.
|
|
68
67
|
interface BundleToolRow {
|
|
@@ -75,7 +74,7 @@ interface BundleToolRow {
|
|
|
75
74
|
// batched everything genuinely has no sequence, and a run whose transcript was never read has none
|
|
76
75
|
// either — printing `0` for both would report the first as though it were the second.
|
|
77
76
|
//
|
|
78
|
-
// **`by_tool` is what makes the count actionable
|
|
77
|
+
// **`by_tool` is what makes the count actionable**. `recoverable_round_trips`
|
|
79
78
|
// says how many turns could have been one and nothing about *whose* turns they were, so a diag that
|
|
80
79
|
// read only it could name a density and never a tool — and the tool was then found by reading the
|
|
81
80
|
// transcript by hand, once per run.
|
|
@@ -141,7 +140,7 @@ function shares_target(left: ReadonlyArray<string>, right: ReadonlyArray<string>
|
|
|
141
140
|
// earlier one's result", and for a read after a write it is a good one — an `Edit`'s `old_string`
|
|
142
141
|
// came from the `Read` before it.
|
|
143
142
|
//
|
|
144
|
-
// **Between two writes it is not
|
|
143
|
+
// **Between two writes it is not**. A second edit to a file already held
|
|
145
144
|
// needs nothing from the first, so both belong in one turn — and treating the pair as dependent is
|
|
146
145
|
// what kept the guard silent for a whole run. `extend` below does not merely decline to count such a
|
|
147
146
|
// pair: it *flushes* the sequence and restarts it at the conflicting call, so a stretch of single-call
|
|
@@ -183,7 +182,7 @@ function is_turn_boundary(span: Span): boolean {
|
|
|
183
182
|
// The walk's three running pieces: the calls of the round trip currently open, the sequence being
|
|
184
183
|
// extended, and the sequences already closed.
|
|
185
184
|
//
|
|
186
|
-
// **`closed` keeps the calls rather than their lengths
|
|
185
|
+
// **`closed` keeps the calls rather than their lengths**. A length is all the
|
|
187
186
|
// three totals need, and it is also everything the per-tool breakdown cannot be rebuilt from — the
|
|
188
187
|
// labels are gone by the time anything asks. Retaining the spans is what lets one walk answer both,
|
|
189
188
|
// and a second walk over the same rule would be the clone `CLAUDE.md` prohibits.
|
|
@@ -225,7 +224,7 @@ function close_trip(walk: Walk): void {
|
|
|
225
224
|
|
|
226
225
|
// Whether this span is still the turn whose calls are pending. **A turn's calls are separated by its
|
|
227
226
|
// own model spans**, because Claude Code writes one line per content block and the harness returns
|
|
228
|
-
// each result as it arrives
|
|
227
|
+
// each result as it arrives — so closing the trip on every model span read
|
|
229
228
|
// one batched turn as several single-call ones and offered it back as a sequence that could have been
|
|
230
229
|
// bundled, which it already was. An absent id matches nothing, leaving the adjacency reading intact
|
|
231
230
|
// for a transcript that wrote none.
|
|
@@ -286,7 +285,7 @@ function tally_for(tallies: Map<string, ToolTally>, label: string): ToolTally {
|
|
|
286
285
|
return created
|
|
287
286
|
}
|
|
288
287
|
|
|
289
|
-
// **Attribution is per call, not per sequence
|
|
288
|
+
// **Attribution is per call, not per sequence**. A sequence of `n` calls
|
|
290
289
|
// holds `n - 1` avoidable trips, and the call that made each of them its own turn is the one after
|
|
291
290
|
// the first — so each trip goes to *that* call's tool. Attributing a whole sequence to one tool would
|
|
292
291
|
// have named a tool only where every call in the sequence shared one, and a real run's sequences are
|
|
@@ -338,7 +337,7 @@ function attributed_of(rows: ReadonlyArray<BundleToolRow>): number {
|
|
|
338
337
|
// arrive in time order: a delegated unit's are appended after the parent's, and `time_corpus`
|
|
339
338
|
// concatenates one session after another. Walked in array order, two turns from different sessions
|
|
340
339
|
// would read as consecutive and be counted as a sequence nobody could have batched.
|
|
341
|
-
// The spread-apart launch series folded in as one row
|
|
340
|
+
// The spread-apart launch series folded in as one row. Appended and re-sorted
|
|
342
341
|
// rather than pushed in place, so the heaviest-first order still holds; omitted entirely when it
|
|
343
342
|
// recovered nothing, so a run that fanned out its launches shows no empty `Agent` row. Its whole count
|
|
344
343
|
// enters the total below beside it, which is what keeps `unattributed_round_trips` at zero.
|
|
@@ -387,7 +386,7 @@ function build_bundles(spans: ReadonlyArray<Span>): BundleTotals {
|
|
|
387
386
|
}
|
|
388
387
|
|
|
389
388
|
// The sequence the walk is still inside when the spans run out — the trailing run of consecutive
|
|
390
|
-
// single-call bundleable turns
|
|
389
|
+
// single-call bundleable turns.
|
|
391
390
|
//
|
|
392
391
|
// **Neither `close_trip` nor `flush` is called, and that is the whole difference from
|
|
393
392
|
// `build_bundles`.** The report closes the walk because it is pricing a run that has ended; a guard
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { time_command_key } from './time-command-key'
|
|
2
2
|
import type { Span } from './time-spans'
|
|
3
3
|
|
|
4
|
-
// What "the same call" means, in one place
|
|
4
|
+
// What "the same call" means, in one place.
|
|
5
5
|
//
|
|
6
6
|
// Two readers ask it and must agree. `time-guard-refusals.ts` asks whether a refused call was later
|
|
7
7
|
// re-issued unchanged — the false-positive hint on the guard breakdown — and `time-batch-guard.ts`
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { time_spans, type Span } from './time-spans'
|
|
2
2
|
|
|
3
|
-
// What counts as *the same command* across a run's spans
|
|
3
|
+
// What counts as *the same command* across a run's spans.
|
|
4
4
|
//
|
|
5
5
|
// Two questions need it and used to answer it separately: the failure chain asks whether a call
|
|
6
6
|
// repeats one that just failed, and the per-invocation listing asks which calls belong on one row.
|
|
@@ -22,7 +22,7 @@ import { time_spans, type Span } from './time-spans'
|
|
|
22
22
|
const UNNAMED_KEY = ''
|
|
23
23
|
|
|
24
24
|
// **The parameter is the two fields it reads, not the whole `Span`.** A full span satisfies it, and so
|
|
25
|
-
// does a `ToolCall` the batching guard builds for a live call
|
|
25
|
+
// does a `ToolCall` the batching guard builds for a live call — the key has
|
|
26
26
|
// to mean the same thing whether it is read off a recorded span or the call about to repeat it.
|
|
27
27
|
function command_key(span: Pick<Span, 'label' | 'josh_command'>): string {
|
|
28
28
|
if (span.label === time_spans.UNKNOWN_TOOL) return UNNAMED_KEY
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { closeSync, fstatSync, openSync, readSync } from 'node:fs'
|
|
2
2
|
import { stamp_file } from '#scripts/josh/stamp-file'
|
|
3
|
+
import { json_value } from '#scripts/lib/json-value'
|
|
3
4
|
import { z } from 'zod'
|
|
4
5
|
import { time_batch_guard, type GuardedCall } from './time-batch-guard'
|
|
5
6
|
import { time_density } from './time-density'
|
|
6
7
|
import { time_hook_transcript } from './time-hook-transcript'
|
|
7
8
|
|
|
8
|
-
// The disk half of the live density line
|
|
9
|
+
// The disk half of the live density line: find the transcript, read enough
|
|
9
10
|
// of it, and remember when the line was last emitted.
|
|
10
11
|
//
|
|
11
12
|
// **It rides the hook that already runs, and adds no second one.** `.claude/settings.json` wires
|
|
@@ -13,8 +14,8 @@ import { time_hook_transcript } from './time-hook-transcript'
|
|
|
13
14
|
// tool would put a process start in front of all ~250 calls of a run to say something on a handful of
|
|
14
15
|
// them.
|
|
15
16
|
//
|
|
16
|
-
// **`Bash` is in that list because the edit half was measured missing its audience
|
|
17
|
-
//
|
|
17
|
+
// **`Bash` is in that list because the edit half was measured missing its audience**.
|
|
18
|
+
// Riding the edit hook was chosen on run #1299, where `Edit` was the
|
|
18
19
|
// most-called tool at 65 calls — and that run no longer represents how these sessions work. Of the
|
|
19
20
|
// ten most recent in this checkout, **seven called `Edit` and `Write` zero times**: they edit through
|
|
20
21
|
// `sed` instead, and they are the same sessions measured at 1.00–1.31 against the 1.50 floor, so the
|
|
@@ -50,8 +51,8 @@ const NEVER_MS = 0
|
|
|
50
51
|
// `tool_input` the formatter half uses, so a file is named rather than searched for — no
|
|
51
52
|
// home-directory walk.
|
|
52
53
|
//
|
|
53
|
-
// **`agent_id` is what makes a delegated unit answerable with its own transcript
|
|
54
|
-
//
|
|
54
|
+
// **`agent_id` is what makes a delegated unit answerable with its own transcript**.
|
|
55
|
+
// The path in the payload is the *parent* session's, whichever agent issued
|
|
55
56
|
// the call, so without this field the line a fork read described the parent's calls per round trip —
|
|
56
57
|
// a number about a run the reader is not in. `time-hook-transcript.ts` carries the derivation.
|
|
57
58
|
const payload_schema = z.object({
|
|
@@ -72,7 +73,7 @@ function parse_transcript_path(raw_payload: string): string | undefined {
|
|
|
72
73
|
return time_hook_transcript.transcript_of(parsed.data.transcript_path, parsed.data.agent_id)
|
|
73
74
|
}
|
|
74
75
|
|
|
75
|
-
// The call that has just run, as the payload names it
|
|
76
|
+
// The call that has just run, as the payload names it — what the line checks
|
|
76
77
|
// against the turns behind it, so a call that needed their result is never offered as one that could
|
|
77
78
|
// have shared their turn. A payload without a tool name answers `undefined`, judged on those turns alone.
|
|
78
79
|
function parse_call(raw_payload: string): GuardedCall | undefined {
|
|
@@ -116,11 +117,7 @@ function last_notice_ms(source: string): number {
|
|
|
116
117
|
|
|
117
118
|
if (raw === undefined) return NEVER_MS
|
|
118
119
|
|
|
119
|
-
|
|
120
|
-
return notice_schema.parse(JSON.parse(raw)).notified_at_ms
|
|
121
|
-
} catch {
|
|
122
|
-
return NEVER_MS
|
|
123
|
-
}
|
|
120
|
+
return json_value.parse_with(raw, notice_schema)?.notified_at_ms ?? NEVER_MS
|
|
124
121
|
}
|
|
125
122
|
|
|
126
123
|
// **Arming the throttle is best-effort, and never costs the line.** The caller prints and exits, so
|
|
@@ -2,12 +2,12 @@ import { cost_blocks } from '#scripts/cost-runtime/cost-blocks'
|
|
|
2
2
|
import { time_round_trips } from './time-round-trips'
|
|
3
3
|
import { time_spans, type TranscriptLine } from './time-spans'
|
|
4
4
|
|
|
5
|
-
// The round-trip density a run can be told **while it is still running
|
|
5
|
+
// The round-trip density a run can be told **while it is still running**.
|
|
6
6
|
//
|
|
7
7
|
// `time-round-trips.ts` already computes the number this reads, and `josh time` already warns on it
|
|
8
8
|
// — after the run has ended. Measured on run #1299, that report changed nothing: the density stayed
|
|
9
9
|
// at 1.08 with 159 of 172 tool-issuing turns making a single call, because the norm
|
|
10
|
-
//
|
|
10
|
+
// stated as prose in `CLAUDE.md` reaches a reader who has already finished.
|
|
11
11
|
// What was missing is the number arriving in time to change the next turn.
|
|
12
12
|
//
|
|
13
13
|
// **The density is `time_round_trips`, reused rather than restated.** A second calculation here
|
|
@@ -25,8 +25,8 @@ import { time_spans, type TranscriptLine } from './time-spans'
|
|
|
25
25
|
// to skip — which costs more than the line saves.
|
|
26
26
|
const MIN_ROUND_TRIPS = 10
|
|
27
27
|
// At most one line per this interval, per checkout. The line lands in the run's context and stays
|
|
28
|
-
// there, so a reminder with no throttle would spend
|
|
29
|
-
//
|
|
28
|
+
// there, so a reminder with no throttle would spend the very context budget it is
|
|
29
|
+
// meant to save: 65 edits of run #1299 would have carried 65 copies of it. Five minutes is roughly 30 round
|
|
30
30
|
// trips at
|
|
31
31
|
// the 9.7s each cost in that run — often enough to reach the phase that is drifting, rare enough that
|
|
32
32
|
// a whole run pays well under a thousand tokens for the feedback.
|
|
@@ -121,7 +121,7 @@ function is_due(reading: DensityReading, since_last_ms: number): boolean {
|
|
|
121
121
|
// what to do differently. The instruction is last because it is the only part worth acting on, and it
|
|
122
122
|
// names the resident rule rather than restating it — the rule is already in the run's context, and a
|
|
123
123
|
// second wording of it would be a clone that can drift. `candidates` is the concrete calls that could
|
|
124
|
-
// have shared a turn
|
|
124
|
+
// have shared a turn, appended last so the line ends on what to do next.
|
|
125
125
|
function format_notice(reading: DensityReading, candidates = ''): string {
|
|
126
126
|
const density = time_round_trips.format_density(reading.density)
|
|
127
127
|
const floor = time_round_trips.format_density(time_round_trips.CALLS_PER_ROUND_TRIP_FLOOR)
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { git_followup_stages, type FollowupStage } from '#scripts/followup/git-followup-stages'
|
|
2
2
|
|
|
3
|
-
// Reading `followup`'s own stage rows back out of what it printed
|
|
3
|
+
// Reading `followup`'s own stage rows back out of what it printed.
|
|
4
4
|
//
|
|
5
|
-
//
|
|
6
|
-
// `followup stage: <name> <n> s` row per lap — and
|
|
7
|
-
//
|
|
8
|
-
// `josh time` sees a `followup` invocation as one Bash span, so the breakdown
|
|
9
|
-
// screen of whoever happened to be watching that run: two runs
|
|
10
|
-
// and a transcript recorded last week
|
|
5
|
+
// `pnpm josh followup` prints a per-stage block — one
|
|
6
|
+
// `followup stage: <name> <n> s` row per lap — and declares the prefix as a constant so a reader
|
|
7
|
+
// can be added without matching a string the printer is free to reword. This is that reader.
|
|
8
|
+
// `josh time` sees a `followup` invocation as one Bash span, so without it the breakdown exists only
|
|
9
|
+
// on the screen of whoever happened to be watching that run: two runs cannot be compared stage by
|
|
10
|
+
// stage, and a transcript recorded last week cannot be read at all.
|
|
11
11
|
//
|
|
12
12
|
// **The prefix is imported rather than retyped**, which is the whole of what keeps this from being a
|
|
13
13
|
// guess about another module's output — the shape `time-reported-failure.ts` already uses for
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// The column and number formatting every timing report is laid out through
|
|
1
|
+
// The column and number formatting every timing report is laid out through.
|
|
2
2
|
//
|
|
3
3
|
// It was `time-report.ts`'s until three renderers shared it: the run scope's own tables, the epic
|
|
4
4
|
// scope's child rows, and the failure block `time-failures.ts` prints. Two of those already reached
|
|
@@ -29,18 +29,18 @@ const MINUTES_WIDTH = 9
|
|
|
29
29
|
const NOT_MEASURED = 'not measured'
|
|
30
30
|
// What a row says instead of a rate when there was no round trip to divide by. It sits here rather
|
|
31
31
|
// than in `time-report.ts` because two blocks print it — the round-trip price and the bundling block —
|
|
32
|
-
// and `time-bundles.ts` cannot import `time-report.ts`, which imports it
|
|
32
|
+
// and `time-bundles.ts` cannot import `time-report.ts`, which imports it.
|
|
33
33
|
const NO_CALLS = 'no tool call to divide'
|
|
34
34
|
// How many rows of a table any of these reports prints. Capped, because a long run touches thirty-odd
|
|
35
35
|
// distinct leading commands and a table that long is read by nobody. `--json` carries every row the
|
|
36
36
|
// report holds, so the display cap costs a caller nothing.
|
|
37
37
|
//
|
|
38
38
|
// **It moved here when the segment and per-invocation tables became the fourth and fifth renderers to
|
|
39
|
-
// need it
|
|
39
|
+
// need it**. Those two cannot import `time-report.ts`, which imports them —
|
|
40
40
|
// and a second cap beside a second renderer is exactly the drift this file was split out to prevent.
|
|
41
41
|
const MAX_ROWS = 15
|
|
42
42
|
|
|
43
|
-
// **The parenthetical says "this report" rather than "them all"
|
|
43
|
+
// **The parenthetical says "this report" rather than "them all"**: since
|
|
44
44
|
// `--top` can cut the record itself before either rendering, a promise that `--json` carries every row
|
|
45
45
|
// *there ever was* would be false beside a `--top` above this display cap — and the report would then
|
|
46
46
|
// contradict its own truncation note. What was cut from the record, if anything, is said in `notes`;
|
|
@@ -74,7 +74,7 @@ function format_share(part: number, whole: number): string {
|
|
|
74
74
|
// to the cent, a per-round-trip figure finer), so the decimals are the caller's and only the `$` and
|
|
75
75
|
// the `toFixed` are shared. It sits here beside the other number formatters rather than in one block,
|
|
76
76
|
// for the reason `format_minutes` does: a second copy beside the second renderer is how two cost rows
|
|
77
|
-
// of one report come to punctuate a dollar amount two ways
|
|
77
|
+
// of one report come to punctuate a dollar amount two ways.
|
|
78
78
|
function usd(amount: number, decimals: number): string {
|
|
79
79
|
return `$${amount.toFixed(decimals)}`
|
|
80
80
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import path from 'node:path'
|
|
2
2
|
import { cost_transcript } from '#scripts/cost-runtime/cost-transcript'
|
|
3
3
|
|
|
4
|
-
// Which transcript a Claude Code hook payload is actually about
|
|
4
|
+
// Which transcript a Claude Code hook payload is actually about.
|
|
5
5
|
//
|
|
6
6
|
// **A hook fired for a forked agent's tool call is handed the *parent* session's transcript.** Both
|
|
7
7
|
// events this package wires carry the same session fields, and neither of them names the fork's own
|
|
@@ -10,8 +10,8 @@ import { cost_transcript } from '#scripts/cost-runtime/cost-transcript'
|
|
|
10
10
|
// `<projects>/<slug>/<session-id>/subagents/agent-<agent-id>.jsonl`.
|
|
11
11
|
//
|
|
12
12
|
// **So every reader built on `transcript_path` alone has been reading the wrong run inside a fork**,
|
|
13
|
-
// and two of them are: the batching guard
|
|
14
|
-
//
|
|
13
|
+
// and two of them are: the batching guard and the live density line.
|
|
14
|
+
// Measured on 551 forked review agents in this checkout, the guard refused
|
|
15
15
|
// **zero** calls — while a replay of the same transcripts through the fork's own file refuses 1–4 per
|
|
16
16
|
// review round. The parent's timeline is frozen for as long as a fork runs, because the fork's lines
|
|
17
17
|
// go to the fork's file: its open sequence never advances, so it either never reaches the limit or
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// One decision about an unparseable timestamp, made once
|
|
1
|
+
// One decision about an unparseable timestamp, made once.
|
|
2
2
|
//
|
|
3
3
|
// Both halves of a run carry dates from somewhere else — the transcript's `timestamp` and GitHub's
|
|
4
4
|
// `created_at` / `merged_at` / check-run times — and both have to answer the same question about a
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { cost_attribute } from '#scripts/cost-runtime/cost-attribute'
|
|
2
2
|
import { json_value } from '#scripts/lib/json-value'
|
|
3
3
|
|
|
4
|
-
// Which workflow boundary a tool call marks
|
|
4
|
+
// Which workflow boundary a tool call marks.
|
|
5
5
|
//
|
|
6
6
|
// The per-tool totals answer "which command is slow" and say nothing about "which *stage* is long".
|
|
7
7
|
// A stage is bounded by things a transcript can be read for, so this module is the one rule for what
|
|
@@ -14,7 +14,7 @@ import { json_value } from '#scripts/lib/json-value'
|
|
|
14
14
|
// would be a second rule for the same thing. What is left is four: the plan comment, the first
|
|
15
15
|
// edit, the code-review invocation, and the instant the workflow itself opened.
|
|
16
16
|
//
|
|
17
|
-
// **The workflow boundary has two spellings, and both are the same marker
|
|
17
|
+
// **The workflow boundary has two spellings, and both are the same marker**.
|
|
18
18
|
// A run is not a session: the transcript attributed to an issue reaches back into whatever the
|
|
19
19
|
// session was doing before the keyword was typed, so without a marker for "the run starts here"
|
|
20
20
|
// that earlier conversation is measured as part of it. Loading the `workflow-commands` skill is the
|
|
@@ -22,22 +22,18 @@ import { json_value } from '#scripts/lib/json-value'
|
|
|
22
22
|
// them performs on GitHub — so the earliest of the two is taken and neither is required, which is
|
|
23
23
|
// what keeps a delegated unit (whose parent loaded the skill) and a resumed run measurable.
|
|
24
24
|
//
|
|
25
|
-
// **The review boundary sits on whatever call the main line spends the review inside**,
|
|
26
|
-
//
|
|
27
|
-
//
|
|
28
|
-
// with the finding list — so the `Skill(code-review)` call carried the review's whole duration and
|
|
29
|
-
// was the marker. #1855 moved the review into a forked subagent launched with the `Agent` tool, and
|
|
30
|
-
// the main line no longer loads the skill at all: the `Skill(code-review)` call now lives inside the
|
|
31
|
-
// fork's own transcript, where it returns instantly (it only loads the skill text), and the review's
|
|
25
|
+
// **The review boundary sits on whatever call the main line spends the review inside**, which is an
|
|
26
|
+
// `Agent` call: the review runs in a forked subagent, and the `Skill(code-review)` call lives inside
|
|
27
|
+
// the fork's own transcript, where it returns instantly (it only loads the skill text). The review's
|
|
32
28
|
// real wall clock is the fork's own `Read`/`grep` spans. Those spans carry no marker of their own, so
|
|
33
|
-
// they inherit the marker of the parent span they run inside — the `Agent` call (`time-overlap.ts
|
|
34
|
-
//
|
|
35
|
-
//
|
|
36
|
-
//
|
|
29
|
+
// they inherit the marker of the parent span they run inside — the `Agent` call (`time-overlap.ts`).
|
|
30
|
+
// Left unmarked that parent deletes the phase rather than moving it, leaving a ~0 ms `review`. So the
|
|
31
|
+
// `Agent` launch is marked here, and the `Skill(code-review)` marker stays for older transcripts in
|
|
32
|
+
// which the main line loaded the skill itself.
|
|
37
33
|
//
|
|
38
34
|
// **The launch is recognized by its prompt carrying both `/code-review` and `review:attest`.** The
|
|
39
35
|
// first is the instruction to invoke the review skill; the second is the attestation line
|
|
40
|
-
// `pnpm josh review:brief` emits into the brief the launch passes verbatim
|
|
36
|
+
// `pnpm josh review:brief` emits into the brief the launch passes verbatim.
|
|
41
37
|
// Neither alone is enough: an investigation subagent about the review tooling quotes `/code-review`
|
|
42
38
|
// in prose and is handed no brief, so `review:attest` is what tells a genuine review launch from a
|
|
43
39
|
// discussion of one — measured against five real launches, it admits the review and rejects every
|
|
@@ -59,7 +55,7 @@ const SKILL_KEY = 'skill'
|
|
|
59
55
|
const REVIEW_SKILL = 'code-review'
|
|
60
56
|
const WORKFLOW_SKILL = 'workflow-commands'
|
|
61
57
|
|
|
62
|
-
// The forked review launch
|
|
58
|
+
// The forked review launch. `Agent` is the tool the main line spawns the
|
|
63
59
|
// review subagent with, and `prompt` is where the instruction to it lives.
|
|
64
60
|
const AGENT_TOOL = 'Agent'
|
|
65
61
|
const PROMPT_KEY = 'prompt'
|
|
@@ -99,7 +95,7 @@ const BODY_FLAG_PATTERN = /--body(?:-file)?\b/u
|
|
|
99
95
|
// The API path is required alongside it for the reason the plan boundary requires one: a command that
|
|
100
96
|
// merely quotes the flag, which this repository's own issue bodies do, is not the call.
|
|
101
97
|
// The number is captured because the same call is the only place a run states, in its own transcript,
|
|
102
|
-
// which issue it is running
|
|
98
|
+
// which issue it is running. Capturing changes nothing for the `test` above
|
|
103
99
|
// it — the boundary is still the whole match.
|
|
104
100
|
// **The trailing `(?!\/)` is what keeps the capture on the issue being labelled.** `labels[]=in-progress`
|
|
105
101
|
// only has to appear somewhere in the command, and the capture takes the leftmost match — so one call
|
|
@@ -111,7 +107,7 @@ const BODY_FLAG_PATTERN = /--body(?:-file)?\b/u
|
|
|
111
107
|
const ISSUE_LABELS_PATTERN = /repos\/\S+\/issues\/(\d+)\/labels\b(?!\/)/u
|
|
112
108
|
const IN_PROGRESS_FIELD = 'labels[]=in-progress'
|
|
113
109
|
|
|
114
|
-
// **`run:entry` applies the label itself now
|
|
110
|
+
// **`run:entry` applies the label itself now**, so a run opened through it
|
|
115
111
|
// leaves no `gh api` add form in its transcript — the call that opens the run and names its issue is
|
|
116
112
|
// `pnpm josh run:entry <N>`, and it is read as the same declaration. `run:release` is not: like the
|
|
117
113
|
// removal form above, it ends a hold rather than opening one.
|
|
@@ -173,8 +169,8 @@ function is_run_start(command: string): boolean {
|
|
|
173
169
|
|
|
174
170
|
// Which issue a Bash call declares its run to be running, or `undefined` where it declares nothing.
|
|
175
171
|
//
|
|
176
|
-
// **Attribution's other evidence is the branch, and a lane run has none to give
|
|
177
|
-
//
|
|
172
|
+
// **Attribution's other evidence is the branch, and a lane run has none to give**:
|
|
173
|
+
// the session writing the transcript stays on the default branch while the
|
|
178
174
|
// child's commands run in a linked work tree, so `gitBranch` says `main` on every line and
|
|
179
175
|
// `cost_attribute` has nothing to fill forward. This call is what is left, and it is the right thing
|
|
180
176
|
// to be left with — it is the run naming its own issue, once, and `time-sessions.ts` already treats
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
// grew past its length limit as phases were added to it, and this is the half with nothing to decide
|
|
6
6
|
// — it says what a phase *is*, while the file it left decides which one a span belongs to. Nothing
|
|
7
7
|
// here imports the classifier, so the dependency runs one way and the next phase added costs one
|
|
8
|
-
// line rather than a fresh argument about where to put it
|
|
8
|
+
// line rather than a fresh argument about where to put it.
|
|
9
9
|
|
|
10
10
|
type PhaseName =
|
|
11
11
|
| 'plan'
|
|
@@ -71,12 +71,12 @@ const PHASE_ORDER: ReadonlyArray<PhaseName> = [
|
|
|
71
71
|
// transcript was read at all, rather than on a marker.
|
|
72
72
|
//
|
|
73
73
|
// **They are withheld on exactly the terms the three transcript category rows are**
|
|
74
|
-
//
|
|
74
|
+
// — no span read at all. `wait` printing `0.0 min` where nothing was read
|
|
75
75
|
// asserts that nobody waited, and the run that produces it is the one a reader is least able to check.
|
|
76
76
|
// Keying every one of them off the same criterion is also what keeps `wait` + `wait-outside` equal to
|
|
77
77
|
// the `human wait` category row: they are withheld together or printed together, never some of each.
|
|
78
78
|
//
|
|
79
|
-
// **`wait-outside` is in this set rather than detected on the run's edges
|
|
79
|
+
// **`wait-outside` is in this set rather than detected on the run's edges**,
|
|
80
80
|
// which is where it differs from `pre-run` and `post-run`. Its zero is not a claim about an unchecked
|
|
81
81
|
// half, because those two rows report the same two boundaries in their own right — a reader seeing
|
|
82
82
|
// `pre-run not detected` beside `wait-outside 0.0 min` already knows that edge was never found, and
|