@joshuafolkken/kit 1.1240.0 → 1.1370.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/agents/investigator.md +1 -0
- package/.claude/settings.json +4 -0
- package/.claude/skills/dependency-update/SKILL.md +5 -3
- package/.claude/skills/epic-commands/SKILL.md +82 -113
- package/.claude/skills/epic-commands/epic-bundle.md +38 -63
- package/.claude/skills/epic-commands/execution-waves.md +30 -51
- package/.claude/skills/verify-ui/SKILL.md +13 -20
- package/.claude/skills/workflow-commands/SKILL.md +10 -10
- package/.claude/skills/workflow-commands/background-commands.md +4 -4
- package/.claude/skills/workflow-commands/backlogrun-child.md +30 -105
- package/.claude/skills/workflow-commands/backlogrun-handoff-report.md +29 -0
- package/.claude/skills/workflow-commands/backlogrun-lanes.md +45 -131
- package/.claude/skills/workflow-commands/backlogrun-park.md +36 -53
- package/.claude/skills/workflow-commands/backlogrun-progress.md +81 -331
- package/.claude/skills/workflow-commands/backlogrun-recovery.md +29 -83
- package/.claude/skills/workflow-commands/backlogrun-steps.md +105 -424
- package/.claude/skills/workflow-commands/backlogrun.md +50 -61
- package/.claude/skills/workflow-commands/chain-rule.md +36 -40
- package/.claude/skills/workflow-commands/entry-sequence.md +6 -6
- package/.claude/skills/workflow-commands/followup.md +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 +29 -47
- package/SECURITY.md +1 -1
- package/dist/CLAUDE.md +10 -61
- package/dist/commands/document-section-cli.js +42 -10
- package/dist/config-merge/index.js +11 -2
- package/dist/hooks/audit-provision.js +2 -2
- package/dist/hooks/batch-guard.js +7 -7
- package/dist/hooks/{chunk-KHGB5S3Y.js → chunk-43G45XJF.js} +18 -20
- package/dist/hooks/{chunk-4TZVB44A.js → chunk-4TW4MQUL.js} +284 -362
- package/dist/hooks/{chunk-XZYKEM6J.js → chunk-76RK6E3H.js} +13 -11
- package/dist/hooks/{chunk-F3ELQ2AF.js → chunk-DZWZ3DKY.js} +4 -4
- 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-ZQGD4GBY.js → chunk-KPM4YIIX.js} +8 -44
- package/dist/hooks/chunk-MXVQMLDP.js +3705 -0
- package/dist/hooks/{chunk-ELCN5LCH.js → chunk-NEC4AT4Z.js} +34 -12
- package/dist/hooks/{chunk-QVSWU24O.js → chunk-NZBHG6FW.js} +7 -5
- package/dist/hooks/chunk-NZN2UFI6.js +2409 -0
- package/dist/hooks/{chunk-KRBERBBI.js → chunk-R6CRQEAL.js} +4 -4
- package/dist/hooks/chunk-SYSRHRWU.js +1589 -0
- package/dist/hooks/{chunk-WK2XSHSI.js → chunk-TLJYAGZK.js} +549 -874
- 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 +216 -202
- 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 +281 -94
- package/dist/version/index.js +15 -13
- package/eslint/base.js +43 -5
- package/eslint/rules/english-only-prose.js +3 -3
- package/eslint/rules/import.js +12 -0
- package/eslint/rules/namespace-object-export.js +2 -2
- package/package.json +16 -10
- package/pnpm-workspace.yaml +2 -4
- package/prompts/coding-standards.md +14 -48
- package/prompts/collaboration-workflow/file-edits.md +1 -1
- package/prompts/collaboration-workflow/issue-citation.md +1 -1
- package/prompts/collaboration-workflow/issue-template.md +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 +26 -2
- package/scripts/document/document-section-cli.ts +6 -8
- package/scripts/document/document-section.ts +8 -12
- package/scripts/document/edit-files-cli.ts +3 -4
- package/scripts/document/entry-read-budget.ts +8 -70
- package/scripts/document/entry-read-set.ts +51 -34
- package/scripts/document/lane-child-read-set.ts +9 -9
- package/scripts/document/read-files-cli.ts +1 -2
- package/scripts/document/read-set-cli.ts +16 -19
- package/scripts/document/read-set-cost.ts +4 -4
- package/scripts/document/read-set-point-of-use.ts +28 -38
- package/scripts/document/read-set-pricing.ts +1 -1
- package/scripts/document/read-set-trim.ts +3 -3
- package/scripts/document/resident-budget.ts +8 -10
- package/scripts/epic/epic-add-body.ts +15 -18
- package/scripts/epic/epic-add-plan.ts +26 -28
- package/scripts/epic/epic-add.ts +32 -25
- package/scripts/epic/epic-audit-checks.ts +27 -37
- package/scripts/epic/epic-audit-cli.ts +21 -22
- package/scripts/epic/epic-audit-orphans.ts +16 -17
- package/scripts/epic/epic-audit-rationale.ts +10 -15
- package/scripts/epic/epic-audit-report.ts +2 -5
- package/scripts/epic/epic-audit.ts +18 -14
- package/scripts/epic/epic-body.ts +10 -10
- package/scripts/epic/epic-bundle-cli.ts +36 -34
- package/scripts/epic/epic-bundle-evidence.ts +5 -5
- package/scripts/epic/epic-bundle-gaps.ts +6 -9
- package/scripts/epic/epic-bundle-poll.ts +1 -1
- package/scripts/epic/epic-bundle-referenced.ts +11 -14
- package/scripts/epic/epic-bundle.ts +19 -20
- package/scripts/epic/epic-busy.ts +44 -21
- package/scripts/epic/epic-candidate-confirm.ts +15 -18
- package/scripts/epic/epic-chains.ts +18 -23
- package/scripts/epic/epic-classify.ts +11 -12
- package/scripts/epic/epic-cli-argv.ts +5 -6
- package/scripts/epic/epic-cli-remove.ts +9 -4
- package/scripts/epic/epic-cli.ts +38 -26
- package/scripts/epic/epic-close-comment.ts +14 -15
- package/scripts/epic/epic-close.ts +25 -29
- package/scripts/epic/epic-cross-repo.ts +18 -21
- package/scripts/epic/epic-decision.ts +14 -18
- package/scripts/epic/epic-fetch.ts +25 -31
- package/scripts/epic/epic-graph.ts +15 -17
- package/scripts/epic/epic-index.ts +14 -16
- package/scripts/epic/epic-issue.ts +9 -11
- package/scripts/epic/epic-label-age.ts +74 -0
- package/scripts/epic/epic-lane-offer.ts +35 -24
- package/scripts/epic/epic-nested.ts +1 -1
- package/scripts/epic/epic-next-read.ts +8 -8
- package/scripts/epic/epic-next-views.ts +12 -12
- package/scripts/epic/epic-next.ts +29 -33
- package/scripts/epic/epic-outside-blocker.ts +11 -10
- package/scripts/epic/epic-parse.ts +22 -24
- package/scripts/epic/epic-promote.ts +3 -2
- package/scripts/epic/epic-rank.ts +1 -1
- package/scripts/epic/epic-read.ts +10 -8
- package/scripts/epic/epic-reconcile.ts +8 -6
- package/scripts/epic/epic-reference.ts +5 -4
- package/scripts/epic/epic-relation-recheck.ts +10 -11
- package/scripts/epic/epic-relations.ts +9 -8
- package/scripts/epic/epic-remove-plan.ts +4 -5
- package/scripts/epic/epic-remove.ts +7 -5
- package/scripts/epic/epic-report.ts +18 -20
- package/scripts/epic/epic-run.ts +6 -5
- package/scripts/epic/epic-sections.ts +2 -2
- package/scripts/epic/epic-shape.ts +3 -3
- package/scripts/epic/epic-solo-stale.ts +3 -2
- package/scripts/epic/epic-solo.ts +8 -8
- package/scripts/epic/epic-triage.ts +5 -4
- package/scripts/epic/epic-validate.ts +8 -7
- package/scripts/epic/epic.ts +5 -5
- package/scripts/exports/unused-members-cli.ts +1 -1
- package/scripts/followup/followup-issue-number.ts +1 -2
- package/scripts/followup/git-followup-cleanup.ts +6 -7
- package/scripts/followup/git-followup-finish.ts +11 -13
- package/scripts/followup/git-followup-flush.ts +11 -7
- package/scripts/followup/git-followup-issue-close.ts +16 -13
- package/scripts/followup/git-followup-label.ts +9 -6
- package/scripts/followup/git-followup-merged.ts +1 -1
- package/scripts/followup/git-followup-pending.ts +7 -9
- package/scripts/followup/git-followup-stages.ts +28 -17
- package/scripts/followup/git-followup-workflow.ts +19 -21
- package/scripts/followup/git-pr-followup-checks.ts +13 -20
- package/scripts/followup/git-pr-followup-wrapup.ts +7 -7
- package/scripts/followup/git-pr-followup.ts +18 -17
- package/scripts/gate/core-admission.ts +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 +20 -6
- package/scripts/josh/josh-commands-split.ts +1 -2
- package/scripts/josh/josh-commands-versioning.ts +5 -5
- package/scripts/josh/josh-commands-workflow.ts +30 -22
- package/scripts/josh/josh-environment-file.ts +1 -1
- package/scripts/josh/josh-in-process.ts +3 -3
- package/scripts/josh/josh-logic.ts +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/cspell-cached.ts +1 -1
- package/scripts/lint/cycle-recheck.ts +122 -0
- package/scripts/lint/format.ts +1 -2
- package/scripts/lint/lint-parallel.ts +34 -19
- package/scripts/lint/lint-related-scope.ts +25 -15
- package/scripts/lint/lint-related.ts +6 -7
- package/scripts/managed-marker/index.ts +1 -1
- package/scripts/managed-marker/managed-marker-logic.ts +1 -2
- package/scripts/notify/git-notify.ts +9 -7
- package/scripts/notify/telegram-notify.ts +53 -37
- package/scripts/notify/telegram-test-logic.ts +3 -3
- package/scripts/notify/telegram-test.ts +45 -30
- package/scripts/observations/observation-ledger-home.ts +14 -8
- package/scripts/observations/observation-ledger-line.ts +3 -2
- package/scripts/observations/observation-ledger-migrate.ts +3 -4
- package/scripts/observations/observation-ledger-prepare.ts +4 -4
- package/scripts/observations/observation-ledger.ts +14 -15
- package/scripts/observations/observation-record-cli.ts +83 -0
- package/scripts/observations/observation-record.ts +91 -0
- package/scripts/observations/observations-flush-cli.ts +1 -1
- package/scripts/observations/observations-flush-landing.ts +7 -6
- package/scripts/observations/observations-flush.ts +26 -27
- package/scripts/overrides/overrides-check.ts +18 -8
- package/scripts/package/package-scout-cli.ts +1 -1
- package/scripts/package/package-scout-format.ts +2 -2
- package/scripts/package/package-scout.ts +1 -1
- package/scripts/propagate/propagate-git-failure.ts +1 -1
- package/scripts/propagate/propagate-git.ts +7 -7
- package/scripts/propagate/propagate-plan.ts +2 -2
- package/scripts/propagate/propagate-publish.ts +2 -3
- package/scripts/propagate/propagate-run.ts +5 -7
- package/scripts/propagate/propagate-select.ts +1 -1
- package/scripts/propagate/propagate-steps.ts +19 -20
- package/scripts/propagate/propagate-targets.ts +6 -10
- package/scripts/propagate/propagate.ts +5 -5
- package/scripts/refactor/import-graph.ts +1 -1
- package/scripts/refactor/refactor-lint.ts +4 -10
- package/scripts/refactor/refactor-scan-cli.ts +1 -1
- package/scripts/refactor/refactor-scan.ts +2 -2
- package/scripts/refactor/refactor-targets.ts +1 -1
- package/scripts/release/github-release-cli.ts +25 -3
- package/scripts/release/github-release-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 +5 -6
- package/scripts/rules/decision-oracle-stage.ts +1 -1
- package/scripts/rules/decision-oracle-tokens.ts +1 -2
- package/scripts/rules/decision-oracle.ts +2 -2
- package/scripts/rules/delivered-rules.ts +61 -406
- package/scripts/rules/destructive-command.ts +2 -2
- package/scripts/rules/direct-filing.ts +4 -4
- package/scripts/rules/direct-pr-create.ts +2 -2
- package/scripts/rules/early-heartbeat.ts +15 -19
- package/scripts/rules/file-body.ts +5 -6
- package/scripts/rules/filing-cap.ts +6 -7
- package/scripts/rules/filing-offer.ts +1 -1
- package/scripts/rules/firing-point.ts +6 -6
- package/scripts/rules/gh-api.ts +2 -2
- package/scripts/rules/git-argv.ts +3 -3
- package/scripts/rules/git-force.ts +2 -2
- package/scripts/rules/hook-context-line.ts +31 -0
- package/scripts/rules/implementation-cut-verdict.ts +5 -8
- package/scripts/rules/implementation-cut.ts +35 -32
- package/scripts/rules/index-guard.ts +2 -2
- package/scripts/rules/issue-citation.ts +7 -7
- package/scripts/rules/issue-comments.ts +21 -13
- package/scripts/rules/josh-git-bare.ts +2 -2
- package/scripts/rules/lane-background.ts +14 -16
- package/scripts/rules/lane-carry-conflict.ts +41 -5
- package/scripts/rules/lane-interactive-ask.ts +6 -9
- package/scripts/rules/lane-park.ts +12 -16
- package/scripts/rules/lane-split-park.ts +1 -2
- package/scripts/rules/lane-switch-main.ts +10 -13
- package/scripts/rules/last-prompt.ts +1 -1
- package/scripts/rules/oracle-consulted.ts +5 -5
- package/scripts/rules/oracle-firing.ts +6 -9
- package/scripts/rules/oracle-list-cli.ts +2 -2
- package/scripts/rules/permission-guards.ts +2 -2
- package/scripts/rules/piped-verification.ts +79 -9
- package/scripts/rules/poll-loop.ts +9 -11
- package/scripts/rules/pre-gate-cut.ts +33 -30
- package/scripts/rules/prior-comment-read.ts +3 -3
- package/scripts/rules/protected-files.ts +25 -13
- package/scripts/rules/raw-field-body.ts +3 -4
- package/scripts/rules/reply-language.ts +1 -1
- package/scripts/rules/rule-body-guard.ts +10 -12
- package/scripts/rules/rule-guard.ts +1 -1
- package/scripts/rules/rule-list.ts +51 -0
- package/scripts/rules/rule-registry-rows.ts +282 -0
- package/scripts/rules/rule-registry.ts +109 -0
- package/scripts/rules/rule-value-cache.ts +2 -2
- package/scripts/rules/rule-value-cli.ts +6 -4
- package/scripts/rules/rule-value.ts +61 -22
- package/scripts/rules/run-tail-rule.ts +11 -15
- package/scripts/rules/shell-body-trigger.ts +7 -7
- package/scripts/rules/shell-segments.ts +2 -4
- package/scripts/rules/stop-rules.ts +54 -41
- package/scripts/rules/tail-commands.ts +1 -1
- package/scripts/rules/test-declared-commit.ts +2 -2
- package/scripts/rules/third-party-write.ts +3 -3
- package/scripts/rules/worktree-guard.ts +12 -5
- package/scripts/run/add/run-add-cli.ts +165 -0
- package/scripts/run/add/run-add.ts +124 -0
- package/scripts/run/board/run-board-cli.ts +207 -0
- package/scripts/run/board/run-board-closed.ts +95 -0
- package/scripts/run/board/run-board-every.ts +60 -0
- package/scripts/run/board/run-board-fetch.ts +38 -0
- package/scripts/run/board/run-board-fit.ts +219 -0
- package/scripts/run/board/run-board-github.ts +162 -0
- package/scripts/run/board/run-board-header.ts +275 -0
- package/scripts/run/board/run-board-kind.ts +35 -0
- package/scripts/run/board/run-board-labels.ts +299 -0
- package/scripts/run/board/run-board-layout.ts +222 -0
- package/scripts/run/board/run-board-link.ts +31 -0
- package/scripts/run/board/run-board-machine.ts +198 -0
- package/scripts/run/board/run-board-notes.ts +103 -0
- package/scripts/run/board/run-board-phase.ts +136 -0
- package/scripts/run/board/run-board-plan.ts +129 -0
- package/scripts/run/board/run-board-read.ts +62 -0
- package/scripts/run/board/run-board-render-legend.ts +82 -0
- package/scripts/run/board/run-board-render-notes.ts +77 -0
- package/scripts/run/board/run-board-render-slot.ts +50 -0
- package/scripts/run/board/run-board-render.ts +407 -0
- package/scripts/run/board/run-board-scope.ts +17 -0
- package/scripts/run/board/run-board-screen.ts +43 -0
- package/scripts/run/board/run-board-span.ts +66 -0
- package/scripts/run/board/run-board-spin.ts +115 -0
- package/scripts/run/board/run-board-state.ts +113 -0
- package/scripts/run/board/run-board-status.ts +279 -0
- package/scripts/run/board/run-board-tick.ts +210 -0
- package/scripts/run/board/run-board-track.ts +22 -0
- package/scripts/run/board/run-board-usage-read.ts +255 -0
- package/scripts/run/board/run-board-usage-rusage.ts +124 -0
- package/scripts/run/board/run-board-usage-text.ts +80 -0
- package/scripts/run/board/run-board-usage.ts +165 -0
- package/scripts/run/carry/run-carry-added.ts +62 -0
- package/scripts/run/carry/run-carry-args.ts +25 -22
- package/scripts/run/carry/run-carry-change.ts +1 -1
- package/scripts/run/carry/run-carry-cli.ts +71 -48
- package/scripts/run/carry/run-carry-conversation.ts +6 -7
- package/scripts/run/carry/run-carry-ended.ts +85 -0
- package/scripts/run/carry/run-carry-reclaim.ts +1 -1
- package/scripts/run/carry/run-carry-stash.ts +3 -2
- package/scripts/run/carry/run-carry-streak.ts +8 -10
- package/scripts/run/carry/run-carry.ts +85 -89
- package/scripts/run/cut/run-cut-args.ts +7 -7
- package/scripts/run/cut/run-cut-cli.ts +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 +25 -12
- package/scripts/run/run-invocation.ts +17 -22
- package/scripts/run/run-label.ts +7 -5
- package/scripts/run/run-liveness-cli.ts +19 -6
- package/scripts/run/run-liveness.ts +27 -38
- package/scripts/run/run-next-cli.ts +5 -9
- package/scripts/run/run-next.ts +4 -5
- package/scripts/run/run-parent-cut-hook.ts +10 -12
- package/scripts/run/run-preflight.ts +25 -29
- package/scripts/run/run-prep-cli.ts +17 -13
- package/scripts/run/run-prep-locate.ts +4 -5
- package/scripts/run/run-prep.ts +7 -10
- package/scripts/run/run-prrun-resume.ts +2 -2
- package/scripts/run/run-report-cli.ts +4 -4
- package/scripts/run/run-report.ts +9 -14
- package/scripts/run/run-retrospective.ts +3 -3
- package/scripts/run/run-section.ts +42 -0
- package/scripts/run/run-stage-read.ts +2 -2
- package/scripts/run/run-stage.ts +6 -4
- package/scripts/run/run-status-cli.ts +7 -5
- package/scripts/run/run-status.ts +6 -7
- package/scripts/run/run-step-cli.ts +13 -15
- package/scripts/run/run-step.ts +58 -47
- 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
|
@@ -2,27 +2,24 @@ import { josh_verdict } from '#scripts/josh/josh-verdict'
|
|
|
2
2
|
import { status_icons } from '#scripts/lib/status-icons'
|
|
3
3
|
import { z } from 'zod'
|
|
4
4
|
|
|
5
|
-
// Reading a josh check's failure out of what it printed, when the pipe threw its exit status away
|
|
6
|
-
// (joshuafolkken/kit#1361).
|
|
5
|
+
// Reading a josh check's failure out of what it printed, when the pipe threw its exit status away.
|
|
7
6
|
//
|
|
8
|
-
//
|
|
9
|
-
// the
|
|
10
|
-
//
|
|
11
|
-
//
|
|
12
|
-
//
|
|
13
|
-
// `is_error: true` on none of the 13. The rework figure #1309 exists to expose was therefore blind
|
|
14
|
-
// to exactly the re-runs that motivated it.
|
|
7
|
+
// A span's outcome is read from the harness's `is_error`, which reports the **tool call** rather than
|
|
8
|
+
// the command inside it. Agents call the verification gate through a pipe almost every time —
|
|
9
|
+
// `pnpm josh gate 2>&1 | tail -40` — and a pipeline exits with `tail`'s status, so a red gate is
|
|
10
|
+
// written back as a call that succeeded: measured, `is_error: true` on none of 13 failing gate calls.
|
|
11
|
+
// The rework figure would otherwise be blind to exactly the re-runs it exists to expose.
|
|
15
12
|
//
|
|
16
13
|
// **What is read is josh's own failure line, and only on a call that ran josh.** Every josh command
|
|
17
14
|
// that reports a per-item result opens the failing one with `status_icons.FAIL_ICON`, so a line
|
|
18
15
|
// beginning with that character in the output of a `pnpm josh <cmd>` call is that command saying it
|
|
19
16
|
// failed. The gate's is `✗ verification gate failed: lint (48.2s)`.
|
|
20
17
|
//
|
|
21
|
-
// **
|
|
18
|
+
// **A stated verdict comes first**: a command that forwards another tool's output states its own
|
|
22
19
|
// verdict, and that verdict is read first — the bare icon is only consulted where there is none. See
|
|
23
20
|
// `verdict_answer` below and `josh-verdict.ts`.
|
|
24
21
|
//
|
|
25
|
-
// **Bounded on the other side
|
|
22
|
+
// **Bounded on the other side**: that verdict silences the run it summarizes
|
|
26
23
|
// and not everything printed before it. The run begins at the gate's opening `plan:` line — printed
|
|
27
24
|
// once, before any check body exists — and never at a step header, which repeats per check. See
|
|
28
25
|
// `scan_line` here and `is_gate_opening` in `josh-verdict.ts`.
|
|
@@ -90,7 +87,7 @@ function is_failure_line(line: string): boolean {
|
|
|
90
87
|
return line.trimStart().startsWith(status_icons.FAIL_ICON)
|
|
91
88
|
}
|
|
92
89
|
|
|
93
|
-
// **A command's own verdict outranks the lines it forwarded
|
|
90
|
+
// **A command's own verdict outranks the lines it forwarded**. `josh gate`
|
|
94
91
|
// prints the body of a step that skipped or passed with warnings, and that body belongs to eslint,
|
|
95
92
|
// svelte-check, vitest or cspell — one of them opening a line with the failure icon would otherwise
|
|
96
93
|
// make a *green* gate a failed call, and charge the next gate run as rework. Where a verdict line is
|
|
@@ -105,8 +102,8 @@ function is_failure_line(line: string): boolean {
|
|
|
105
102
|
// exists to make going quiet without failing. A forwarded body is printed *before* the verdict that
|
|
106
103
|
// summarizes it, so what follows the last one belongs to whatever ran next and is still read.
|
|
107
104
|
//
|
|
108
|
-
// **And it speaks only for the run in front of it, not for everything printed earlier
|
|
109
|
-
//
|
|
105
|
+
// **And it speaks only for the run in front of it, not for everything printed earlier**.
|
|
106
|
+
// "Everything before the verdict" was one-sided: a call that runs a josh
|
|
110
107
|
// command stating no verdict and *then* a green gate — `pnpm josh propagate; pnpm josh gate` — is
|
|
111
108
|
// labelled by its first segment, and propagate's `✗ <repo>` rows were thrown away by a verdict printed
|
|
112
109
|
// by the command after them. The run a verdict summarizes begins at that gate's opening `plan:` line,
|
|
@@ -141,12 +138,11 @@ function new_scan(): FailureScan {
|
|
|
141
138
|
// **The reading between the two is the whole fix, and the guard on it is the whole of its safety.**
|
|
142
139
|
// A failure mark printed before the region opened is confirmed here, because the gate had not started
|
|
143
140
|
// yet and the gate's opening line is printed before any body it could forward. One printed inside the
|
|
144
|
-
// region is discarded
|
|
141
|
+
// region is discarded.
|
|
145
142
|
//
|
|
146
|
-
// **No opening line seen means no region, and then nothing is confirmed
|
|
147
|
-
//
|
|
148
|
-
//
|
|
149
|
-
// straight back. So the fix is bounded by what it can actually see, and where it cannot see, the
|
|
143
|
+
// **No opening line seen means no region, and then nothing is confirmed.** That is the case a
|
|
144
|
+
// `2>&1 | tail -40` produces when the head of the gate's output falls off the top of the window, and
|
|
145
|
+
// reading the surviving body lines there would count a forwarded failure mark as the gate's own. So the fix is bounded by what it can actually see, and where it cannot see, the
|
|
150
146
|
// figure stays the floor it already was.
|
|
151
147
|
function close_region(scan: FailureScan): void {
|
|
152
148
|
scan.did_find ||= scan.is_region_open && scan.has_failure_before_region
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { time_spans, type Span } from './time-spans'
|
|
2
2
|
|
|
3
|
-
// How many times a run stopped and waited for a tool result
|
|
3
|
+
// How many times a run stopped and waited for a tool result.
|
|
4
4
|
//
|
|
5
5
|
// The other `time-*` modules measure *duration*: where the wall clock went, and which command spent
|
|
6
6
|
// it. This measures the one thing duration cannot see. Measured on four runs, the tools themselves
|
|
@@ -13,7 +13,7 @@ import { time_spans, type Span } from './time-spans'
|
|
|
13
13
|
// spans.** Counting calls instead would report a turn that batched four reads as four round trips —
|
|
14
14
|
// which is the improvement, scored as the defect.
|
|
15
15
|
//
|
|
16
|
-
// **Adjacency was the original rule and it was wrong on real transcripts
|
|
16
|
+
// **Adjacency was the original rule and it was wrong on real transcripts**.
|
|
17
17
|
// It rested on "tool spans sit adjacent exactly when their calls were issued together in one turn",
|
|
18
18
|
// and Claude Code does not write a turn that way: each `tool_use` block is its own assistant line and
|
|
19
19
|
// the harness returns each result as soon as it has one, so a turn issuing three calls is written
|
|
@@ -43,10 +43,9 @@ import { time_spans, type Span } from './time-spans'
|
|
|
43
43
|
// the model share was right on run #1399 while the turn count was not.
|
|
44
44
|
|
|
45
45
|
// Below this, a run is issuing about one call per turn: nothing is being batched, and the turn count
|
|
46
|
-
// (which is what the wall clock is charged per) is as high as the call count. Set from
|
|
47
|
-
//
|
|
48
|
-
//
|
|
49
|
-
// turn. A run that batches even occasionally clears this, so it flags the absence of batching rather
|
|
46
|
+
// (which is what the wall clock is charged per) is as high as the call count. Set from four measured
|
|
47
|
+
// runs whose densities were 1.13, 1.04, 1.03 and 1.00: every one of them a run in which independent
|
|
48
|
+
// reads and edits went out one per turn. A run that batches even occasionally clears this, so it flags the absence of batching rather
|
|
50
49
|
// than grading its degree.
|
|
51
50
|
const CALLS_PER_ROUND_TRIP_FLOOR = 1.5
|
|
52
51
|
const DENSITY_DECIMALS = 2
|
|
@@ -95,7 +94,7 @@ function count_calls(spans: ReadonlyArray<Span>): number {
|
|
|
95
94
|
}
|
|
96
95
|
|
|
97
96
|
// The nearest span before this one that is not a model span, or `undefined` where none is.
|
|
98
|
-
// **The walk back crosses model spans and stops at everything else
|
|
97
|
+
// **The walk back crosses model spans and stops at everything else**: a
|
|
99
98
|
// turn's own calls are separated only by its own model spans, while a human wait means the next turn
|
|
100
99
|
// was composed after an interruption and a continuation means a delegated unit ran in between —
|
|
101
100
|
// neither of which any message could have issued its calls across. A human span that stops the walk
|
|
@@ -128,8 +127,8 @@ function continues_turn(spans: ReadonlyArray<Span>, index: number, message_id: s
|
|
|
128
127
|
// the density in *both* wrong directions at once, one call fewer over one trip more, which is how a
|
|
129
128
|
// turn that batched and delegated could print the warning meant for a turn that did neither.
|
|
130
129
|
//
|
|
131
|
-
// **Two rules, and the adjacency one is the fallback rather than the definition
|
|
132
|
-
//
|
|
130
|
+
// **Two rules, and the adjacency one is the fallback rather than the definition**.
|
|
131
|
+
// A call issued beside another in the array is the shape the transcript
|
|
133
132
|
// writes when the results arrive together, and it stays as it was — including for a span carrying no
|
|
134
133
|
// message id at all. Everything else asks the id, which is what catches the shape Claude Code
|
|
135
134
|
// actually writes: `use → result → use → result`, one turn, its calls separated by its own model
|
|
@@ -158,7 +157,7 @@ interface TripWalk {
|
|
|
158
157
|
open: Array<Span> | undefined
|
|
159
158
|
}
|
|
160
159
|
|
|
161
|
-
// **A model span no longer closes the open trip
|
|
160
|
+
// **A model span no longer closes the open trip**. It is what sits between
|
|
162
161
|
// two calls of one turn, so closing on it left the turn's second call with no trip to join and the
|
|
163
162
|
// per-tool counts reporting a batched turn as a run of solitary calls. What still closes one is a
|
|
164
163
|
// human wait: the turn after it was composed after an interruption, so its calls belong to a trip of
|
|
@@ -179,7 +178,7 @@ function step_trip(walk: TripWalk, span: Span, is_opener: boolean): void {
|
|
|
179
178
|
else if (!is_model(span)) walk.open = undefined
|
|
180
179
|
}
|
|
181
180
|
|
|
182
|
-
// **A round trip as the calls it carried, rather than as a count
|
|
181
|
+
// **A round trip as the calls it carried, rather than as a count**. The count
|
|
183
182
|
// is what this returns the length of, so the two cannot come to disagree about what a round trip is —
|
|
184
183
|
// which is the whole point of asking here rather than grouping the spans a second time next door.
|
|
185
184
|
//
|
|
@@ -210,8 +209,8 @@ function turn_key(span: Span, index: number): string {
|
|
|
210
209
|
return span.message_id === time_spans.NO_MESSAGE_ID ? `#${String(index)}` : span.message_id
|
|
211
210
|
}
|
|
212
211
|
|
|
213
|
-
// **How many assistant messages the run's model spans came from — the definition of a turn
|
|
214
|
-
//
|
|
212
|
+
// **How many assistant messages the run's model spans came from — the definition of a turn**.
|
|
213
|
+
// Not how many model spans there are: Claude Code writes one line per
|
|
215
214
|
// content block and repeats the message id on each, so a turn that thought and then issued two calls
|
|
216
215
|
// is three lines and three model spans. Counting the spans reported run #1399's 41 turns as 79, and
|
|
217
216
|
// with them halved every per-turn figure divided by this — `josh time --epic`'s `ms_per_turn` above
|
|
@@ -223,7 +222,7 @@ function count_turns(spans: ReadonlyArray<Span>): number {
|
|
|
223
222
|
}
|
|
224
223
|
|
|
225
224
|
// What one round trip cost, in whatever unit the numerator carries: calls, for the density the floor
|
|
226
|
-
// above is quoted in, and milliseconds for the price
|
|
225
|
+
// above is quoted in, and milliseconds for the price per round trip. **One divisor with
|
|
227
226
|
// one guard, rather than a second copy per unit** — the two are the same question about the same
|
|
228
227
|
// denominator, and a guard written into only one of them would print, in the unit that lacked it,
|
|
229
228
|
// exactly the measurement the other withholds.
|
|
@@ -252,23 +251,21 @@ const time_round_trips = {
|
|
|
252
251
|
CALLS_PER_ROUND_TRIP_FLOOR,
|
|
253
252
|
count_calls,
|
|
254
253
|
count_round_trips,
|
|
255
|
-
// Exported
|
|
256
|
-
//
|
|
254
|
+
// Exported so a turn is defined in the one module that already defines a round trip rather than
|
|
255
|
+
// as a span filter in the report next door.
|
|
257
256
|
count_turns,
|
|
258
257
|
format_density,
|
|
259
|
-
// Exported
|
|
260
|
-
//
|
|
258
|
+
// Exported so the per-tool counts are read off the very groups this module counts rather than off
|
|
259
|
+
// a second grouping beside them.
|
|
261
260
|
group_round_trips,
|
|
262
|
-
// Exported
|
|
261
|
+
// Exported so the failure aggregation orders a run's spans through
|
|
263
262
|
// the one function that already knows why they need it — a second `toSorted` beside it would be
|
|
264
263
|
// the clone `CLAUDE.md` prohibits, and the seam it guards (a delegated unit's spans appended
|
|
265
264
|
// after the parent's) is not one a second copy would keep remembering.
|
|
266
265
|
in_time_order,
|
|
267
266
|
is_below_floor,
|
|
268
|
-
//
|
|
269
|
-
//
|
|
270
|
-
// private copy there would be the clone `CLAUDE.md` prohibits, in the one place a drift would have
|
|
271
|
-
// the distribution and the count disagreeing about what a round trip is.
|
|
267
|
+
// Exported so callers price a round trip with the same divisor and guard rather than a private
|
|
268
|
+
// copy — the clone `CLAUDE.md` prohibits.
|
|
272
269
|
per_round_trip,
|
|
273
270
|
}
|
|
274
271
|
|
|
@@ -2,7 +2,7 @@ import { cost_blocks } from '#scripts/cost-runtime/cost-blocks'
|
|
|
2
2
|
import { canonical_command } from '#scripts/josh/josh-command-map'
|
|
3
3
|
import { json_value } from '#scripts/lib/json-value'
|
|
4
4
|
|
|
5
|
-
// Reading a shell command well enough to name what it ran
|
|
5
|
+
// Reading a shell command well enough to name what it ran.
|
|
6
6
|
//
|
|
7
7
|
// It was `time-spans.ts`'s, and it moved out when that file passed its length limit. The seam is the
|
|
8
8
|
// one `time-format.ts` was cut along: this holds no timing knowledge at all — no spans, no
|
|
@@ -46,7 +46,7 @@ const CHAIN_PATTERN = /&&|\|\||;/u
|
|
|
46
46
|
// nothing beyond the reading, while a fragment read as a command answers about work the shell never
|
|
47
47
|
// did, on the shape this repository writes constantly.
|
|
48
48
|
//
|
|
49
|
-
// **Escapes and heredoc bodies are text too
|
|
49
|
+
// **Escapes and heredoc bodies are text too**. A backslash outside single
|
|
50
50
|
// quotes makes the next character literal, so `it\'s` opens nothing and a `"` closes only at an
|
|
51
51
|
// unescaped `"`; inside `'…'` a backslash is an ordinary character, so `'C:\'` still closes. A heredoc
|
|
52
52
|
// body is not shell syntax at all — an `it's` there is prose — so it is removed before the quotes are
|
|
@@ -141,7 +141,7 @@ function leading_word(command: string): string {
|
|
|
141
141
|
}
|
|
142
142
|
|
|
143
143
|
// Every command a pipeline throws the exit status of away — one per `|`-separated segment except the
|
|
144
|
-
// last
|
|
144
|
+
// last. A shell reports a pipeline with its final command's status, so a
|
|
145
145
|
// check run anywhere earlier has its verdict discarded before anything reads it.
|
|
146
146
|
//
|
|
147
147
|
// **The command of a segment is at the end of its chain, not the start.** `|` binds tighter than `&&`
|
|
@@ -208,7 +208,7 @@ function bash_label(command: string): string {
|
|
|
208
208
|
return word === '' ? cost_blocks.BASH_TOOL : `${cost_blocks.BASH_TOOL}${BASH_SEPARATOR}${word}`
|
|
209
209
|
}
|
|
210
210
|
|
|
211
|
-
// **An alias is expanded here, so one command is one name
|
|
211
|
+
// **An alias is expanded here, so one command is one name**. Every reading
|
|
212
212
|
// built on this field keyed `pnpm josh ga` and `pnpm josh gate` as two different commands: the
|
|
213
213
|
// per-command table printed them as two rows, the per-invocation table dropped both for having one
|
|
214
214
|
// call each, and — the one with real cost — the failure chain did not see the second as answering the
|
|
@@ -229,7 +229,7 @@ function josh_command_of(command: string): string {
|
|
|
229
229
|
return josh_command_of_segment(command_segment(command))
|
|
230
230
|
}
|
|
231
231
|
|
|
232
|
-
// Every josh subcommand a chained call ran, not just the first
|
|
232
|
+
// Every josh subcommand a chained call ran, not just the first. The standard
|
|
233
233
|
// verification form `pnpm josh lint:related && pnpm josh test:related` is two commands in one call, and
|
|
234
234
|
// `josh_command_of` reads only the first segment's — so a table built on that field never counted
|
|
235
235
|
// `test:related`. This reads every segment instead.
|
|
@@ -245,8 +245,8 @@ function josh_commands_of(command: string): Array<string> {
|
|
|
245
245
|
.filter((name) => name !== '')
|
|
246
246
|
}
|
|
247
247
|
|
|
248
|
-
// A redirection is not an argument, and keeping one splits a single check into two signatures
|
|
249
|
-
//
|
|
248
|
+
// A redirection is not an argument, and keeping one splits a single check into two signatures.
|
|
249
|
+
// Measured on run #1379, every `pnpm josh <check>` call there was written
|
|
250
250
|
// `… 2>&1`, so an otherwise identical call written without one would have keyed differently and the
|
|
251
251
|
// repeat between them would have gone uncounted.
|
|
252
252
|
//
|
|
@@ -279,7 +279,7 @@ function drop_redirections(words: ReadonlyArray<string>): Array<string> {
|
|
|
279
279
|
return kept
|
|
280
280
|
}
|
|
281
281
|
|
|
282
|
-
// What a `pnpm josh <cmd>` call passes after its subcommand
|
|
282
|
+
// What a `pnpm josh <cmd>` call passes after its subcommand.
|
|
283
283
|
//
|
|
284
284
|
// **Read from the same segment `josh_command_of` reads the subcommand from**, and past the same
|
|
285
285
|
// match. Two calls of one check are told apart by their arguments, so a second reader here would be
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { time_shell } from './time-shell'
|
|
2
2
|
|
|
3
|
-
// Which calls are one verification check run on its own, and what makes two of them the same call
|
|
4
|
-
// (joshuafolkken/kit#1383).
|
|
3
|
+
// Which calls are one verification check run on its own, and what makes two of them the same call.
|
|
5
4
|
//
|
|
6
5
|
// Measured on run #1379, that run issued eight of these — 45.9 seconds of tool time, six of them in
|
|
7
6
|
// the fix phase, each its own round trip — and 18.1 seconds after the last one `josh gate` ran lint,
|
|
@@ -10,29 +10,26 @@ import { time_transcript_line, type Block, type TranscriptLine } from './time-tr
|
|
|
10
10
|
const { NO_MESSAGE_ID, parse_line } = time_transcript_line
|
|
11
11
|
const { NO_CALL, UNKNOWN_CALL, UNKNOWN_TOOL, to_tool_call } = time_tool_call
|
|
12
12
|
|
|
13
|
-
// Turning a session transcript into timed spans
|
|
13
|
+
// Turning a session transcript into timed spans.
|
|
14
14
|
//
|
|
15
15
|
// `cost-*` reads the same files for what a run was billed. This reads the other axis: where its wall
|
|
16
16
|
// clock went. Discovery and reading are `cost-transcript.ts`'s and are reused rather than copied;
|
|
17
17
|
// what is here is the arithmetic, which has no counterpart on the cost side.
|
|
18
18
|
//
|
|
19
|
-
// **Reading one line is `time-transcript-line.ts`'s**
|
|
20
|
-
//
|
|
21
|
-
//
|
|
22
|
-
// the move changed no call site. `cost_blocks`' three type constants are still imported rather than
|
|
23
|
-
// restated.
|
|
19
|
+
// **Reading one line is `time-transcript-line.ts`'s** — the schemas, the two records a line yields
|
|
20
|
+
// and the parse that produces them. `NO_MESSAGE_ID` and `parse_line` are re-exported below, and
|
|
21
|
+
// `cost_blocks`' three type constants are imported rather than restated.
|
|
24
22
|
//
|
|
25
|
-
// **Reading a `tool_use` block into a `ToolCall` is `time-tool-call.ts`'s
|
|
26
|
-
//
|
|
27
|
-
// `to_tool_call` are re-exported below, so that move changed no call site either.
|
|
23
|
+
// **Reading a `tool_use` block into a `ToolCall` is `time-tool-call.ts`'s**; `UNKNOWN_TOOL` and
|
|
24
|
+
// `to_tool_call` are re-exported below.
|
|
28
25
|
//
|
|
29
26
|
// **The partition is by gap, not by pair.** Every span is the interval between two consecutive
|
|
30
27
|
// events, classified by the *later* one: a span ending at an assistant line is model wait, one
|
|
31
28
|
// ending at a tool result is that tool's execution, one ending at a user prompt is human wait.
|
|
32
29
|
// Classifying by pairs instead would double-count parallel tool calls and leave the three shares
|
|
33
30
|
// summing to something other than the elapsed time — the property that makes two runs comparable.
|
|
34
|
-
// Measured against
|
|
35
|
-
//
|
|
31
|
+
// Measured against three sessions restored by hand: 49.6 / 73.3 / 54.6 minutes, every share within
|
|
32
|
+
// 0.4 points of the hand figure.
|
|
36
33
|
|
|
37
34
|
const ASSISTANT_TYPE = 'assistant'
|
|
38
35
|
const USER_TYPE = 'user'
|
|
@@ -43,7 +40,7 @@ const MODEL_CATEGORY: SpanCategory = 'model'
|
|
|
43
40
|
const TOOL_CATEGORY: SpanCategory = 'tool'
|
|
44
41
|
const HUMAN_CATEGORY: SpanCategory = 'human'
|
|
45
42
|
|
|
46
|
-
// How the call this span paid for came back
|
|
43
|
+
// How the call this span paid for came back.
|
|
47
44
|
//
|
|
48
45
|
// **Three answers rather than two.** `unknown` is not a polite `ok`: a fifth of the tool results in
|
|
49
46
|
// the transcripts measured carry no `is_error` at all — a file read, an answered question — and
|
|
@@ -67,17 +64,17 @@ const UNKNOWN_OUTCOME: SpanOutcome = 'unknown'
|
|
|
67
64
|
interface ResultFacts {
|
|
68
65
|
call_id: string
|
|
69
66
|
outcome: SpanOutcome
|
|
70
|
-
// Which guard refused the call this result closed, and `''` for every non-refusal
|
|
71
|
-
//
|
|
67
|
+
// Which guard refused the call this result closed, and `''` for every non-refusal.
|
|
68
|
+
// Carried here for the reason `outcome` is: the result block is gone by
|
|
72
69
|
// the time the per-guard refusal breakdown aggregates, and only what was read off it survives.
|
|
73
70
|
refusal_guard: string
|
|
74
71
|
// The id the harness assigned when it took this call's command into the background, and `''` for
|
|
75
|
-
// every other result
|
|
72
|
+
// every other result. Fourth field for the reason the others are here:
|
|
76
73
|
// the launch's body is the only place the id is written, and the body is gone by the time
|
|
77
74
|
// anything places the command on the timeline.
|
|
78
75
|
background_id: string
|
|
79
|
-
// The stage rows a `pnpm josh followup` call printed into its own output
|
|
80
|
-
//
|
|
76
|
+
// The stage rows a `pnpm josh followup` call printed into its own output.
|
|
77
|
+
// Third field for the reason the two above are here: the result block is
|
|
81
78
|
// gone by the time anything aggregates, so what a table wants from it has to be read off it now.
|
|
82
79
|
// Empty for every span that is not a measured `followup` invocation.
|
|
83
80
|
followup_stages: ReadonlyArray<FollowupStage>
|
|
@@ -93,8 +90,8 @@ const NO_RESULT: ResultFacts = {
|
|
|
93
90
|
|
|
94
91
|
// `ended_ms` is the absolute instant the span closed, so `[ended_ms - duration_ms, ended_ms]` is the
|
|
95
92
|
// interval it occupied. A duration alone cannot say *when*, and two things need that: the CI wait,
|
|
96
|
-
// which is the part of the PR-open→merge window no span covers
|
|
97
|
-
// phase breakdown that slices the same array by boundary
|
|
93
|
+
// which is the part of the PR-open→merge window no span covers, and the
|
|
94
|
+
// phase breakdown that slices the same array by boundary.
|
|
98
95
|
//
|
|
99
96
|
// `branch` rides along for the same reason `cost-usage.ts` carries it on a record: it is what
|
|
100
97
|
// `cost_attribute` reads to decide which issue the span belongs to.
|
|
@@ -103,17 +100,16 @@ const NO_RESULT: ResultFacts = {
|
|
|
103
100
|
interface Span extends ToolCall, ResultFacts {
|
|
104
101
|
category: SpanCategory
|
|
105
102
|
duration_ms: number
|
|
106
|
-
// What the call itself took, before any of its minutes were handed to a delegated unit
|
|
107
|
-
//
|
|
103
|
+
// What the call itself took, before any of its minutes were handed to a delegated unit.
|
|
104
|
+
// Carried beside `duration_ms` rather than derived from it, because
|
|
108
105
|
// nothing downstream could recover it: `time_overlap.trim` replaces `duration_ms` and keeps no
|
|
109
106
|
// record of what it replaced.
|
|
110
107
|
//
|
|
111
108
|
// **The two answer different questions, and a report needs both.** `duration_ms` is this span's
|
|
112
109
|
// share of the run's wall clock, so the subtraction shortens it wherever a unit covered the same
|
|
113
|
-
// minutes — without that the four category shares stop reconstructing
|
|
114
|
-
//
|
|
115
|
-
//
|
|
116
|
-
// subtraction had left of it.
|
|
110
|
+
// minutes — without that the four category shares double-count and stop reconstructing
|
|
111
|
+
// `elapsed_ms`. This one is what a per-invocation row is asked for: a `Skill` call that really ran
|
|
112
|
+
// for five minutes would otherwise print as the few milliseconds the subtraction left of it.
|
|
117
113
|
//
|
|
118
114
|
// It survives that subtraction because `trim` copies the span and overwrites only `duration_ms`
|
|
119
115
|
// and `ended_ms`, so every fragment of one call carries the same value — which is why the tables
|
|
@@ -122,19 +118,19 @@ interface Span extends ToolCall, ResultFacts {
|
|
|
122
118
|
ended_ms: number
|
|
123
119
|
branch: string
|
|
124
120
|
// Whether this span is the *remainder* of a call whose middle was given to a delegated unit, cut
|
|
125
|
-
// out by `time_overlap.trim
|
|
121
|
+
// out by `time_overlap.trim`. One call comes back as two spans there, so
|
|
126
122
|
// anything counting calls rather than intervals has to skip the second — the round-trip block and
|
|
127
123
|
// the per-tool table's `call_count` both do. Every span the transcript itself yields is `false`;
|
|
128
124
|
// only the subtraction sets it.
|
|
129
125
|
is_continuation: boolean
|
|
130
126
|
// The `pnpm josh <cmd>` this span ran *beside*, where it sits inside a backgrounded command's
|
|
131
|
-
// window, and `''` everywhere else
|
|
127
|
+
// window, and `''` everywhere else. It is resolved after the walk rather
|
|
132
128
|
// than read off a call, because the window is not known until the join that closes it has been
|
|
133
129
|
// seen — so it has `is_continuation`'s shape rather than `marker`'s: every span the walk yields is
|
|
134
130
|
// empty, and only `time_background.positioned` sets it.
|
|
135
131
|
background_command: string
|
|
136
132
|
// When the harness said the command this span launched had finished, and `NO_FINISH` where nothing
|
|
137
|
-
// said
|
|
133
|
+
// said. It is the notice's own instant rather than a reading's, so it is
|
|
138
134
|
// keyed to the launch by id at parse time — the notice sits on a line of its own, which is why no
|
|
139
135
|
// field read off this span's own result could carry it.
|
|
140
136
|
background_ended_ms: number
|
|
@@ -157,7 +153,7 @@ interface Timeline {
|
|
|
157
153
|
// the empty string, where the next result that carries no `tool_use_id` would match it and be
|
|
158
154
|
// labelled with an unrelated tool — a wrong name where `UNKNOWN_TOOL` is the honest one.
|
|
159
155
|
// A `tool_use` block with the assistant message it was written under, which is the turn that issued
|
|
160
|
-
// it
|
|
156
|
+
// it. The pair is kept rather than the block alone because the id lives on
|
|
161
157
|
// the *line* and the flatten below is where it would otherwise be lost.
|
|
162
158
|
interface IssuedCall {
|
|
163
159
|
block: Block
|
|
@@ -207,8 +203,8 @@ function event_of(
|
|
|
207
203
|
// outcome — a file read, an answered question — would otherwise be counted as calls that succeeded,
|
|
208
204
|
// and a run whose whole transcript was written by them would report a measured zero failures.
|
|
209
205
|
//
|
|
210
|
-
// **What the command said outranks what the harness recorded, in one direction only
|
|
211
|
-
//
|
|
206
|
+
// **What the command said outranks what the harness recorded, in one direction only**.
|
|
207
|
+
// A josh check run inside a pipeline exits with the pipe's status, so the
|
|
212
208
|
// harness writes `is_error: false` over a red gate; the failure line the command printed is the only
|
|
213
209
|
// surviving evidence, and it is read *before* the field. The reverse never happens — a call the
|
|
214
210
|
// harness marked failed is failed whatever it printed.
|
|
@@ -250,8 +246,7 @@ function to_event(
|
|
|
250
246
|
): TimelineEvent | undefined {
|
|
251
247
|
// **A model span carries the message its own line belongs to**, which is what makes a turn
|
|
252
248
|
// countable: Claude Code writes one line per content block and repeats the id on each, so the
|
|
253
|
-
// lines are what a naive count sees and the id is what says how many turns they were
|
|
254
|
-
// (joshuafolkken/kit#1406).
|
|
249
|
+
// lines are what a naive count sees and the id is what says how many turns they were.
|
|
255
250
|
if (line.type === ASSISTANT_TYPE) {
|
|
256
251
|
return event_of(line, MODEL_CATEGORY, { ...NO_CALL, message_id: line.message_id })
|
|
257
252
|
}
|
|
@@ -276,15 +271,15 @@ function to_events(
|
|
|
276
271
|
// interval paid for is the work the later line records, and taking the opening line's branch would
|
|
277
272
|
// attribute the first span after a `josh git` to whatever preceded the branch.
|
|
278
273
|
// The two durations of a span that nothing has taken a share of yet, which is every span a
|
|
279
|
-
// transcript itself yields and every span a test builds
|
|
274
|
+
// transcript itself yields and every span a test builds. Written once here
|
|
280
275
|
// so no builder can set one and forget the other — the drift would be silent, and would surface as a
|
|
281
276
|
// per-invocation row disagreeing with the transcript it was read from.
|
|
282
277
|
function equal_durations(duration_ms: number): Pick<Span, 'duration_ms' | 'own_duration_ms'> {
|
|
283
278
|
return { duration_ms, own_duration_ms: duration_ms }
|
|
284
279
|
}
|
|
285
280
|
|
|
286
|
-
// The four background fields of a span nothing backgrounded, which is every span a test builds
|
|
287
|
-
//
|
|
281
|
+
// The four background fields of a span nothing backgrounded, which is every span a test builds.
|
|
282
|
+
// Written once here for the reason `equal_durations` above is: three
|
|
288
283
|
// fixtures assemble a `Span` literal, and a field added to two of them is a drift that surfaces only
|
|
289
284
|
// as a table disagreeing with the transcript it was read from.
|
|
290
285
|
type BackgroundFields = Pick<
|
|
@@ -368,15 +363,15 @@ function parse_timeline(text: string): Timeline {
|
|
|
368
363
|
return {
|
|
369
364
|
started_ms: events[0]?.timestamp_ms ?? 0,
|
|
370
365
|
ended_ms: events.at(-1)?.timestamp_ms ?? 0,
|
|
371
|
-
// **The positioning happens here rather than in a caller
|
|
366
|
+
// **The positioning happens here rather than in a caller**: a launch and
|
|
372
367
|
// the call that reads its output are in one transcript, and by the time spans have been merged
|
|
373
368
|
// across sessions and trimmed they are fragments rather than calls.
|
|
374
369
|
spans: time_background.positioned(to_spans(events, time_background.finished_at(lines))),
|
|
375
370
|
}
|
|
376
371
|
}
|
|
377
372
|
|
|
378
|
-
// **"No span was read" is the one criterion every scope withholds a transcript figure on
|
|
379
|
-
//
|
|
373
|
+
// **"No span was read" is the one criterion every scope withholds a transcript figure on**.
|
|
374
|
+
// A run whose transcript could not be attributed, a child of an epic in
|
|
380
375
|
// that state, and a batch no child contributed to are the same fact asked at three scales, and each
|
|
381
376
|
// used to spell it out for itself — which is how the run scope came to print three `0.0 min` rows
|
|
382
377
|
// beside the epic scope's `not measured` for the very same child.
|
|
@@ -401,7 +396,7 @@ const time_spans = {
|
|
|
401
396
|
equal_durations,
|
|
402
397
|
no_background,
|
|
403
398
|
// Re-exported so the suites that measure how a command is read keep asking one namespace, and so
|
|
404
|
-
// `time-shell.ts` moving out of this file changed no call site
|
|
399
|
+
// `time-shell.ts` moving out of this file changed no call site.
|
|
405
400
|
bash_label: time_shell.bash_label,
|
|
406
401
|
josh_command_of: time_shell.josh_command_of,
|
|
407
402
|
josh_commands_of: time_shell.josh_commands_of,
|
|
@@ -8,7 +8,7 @@ import { time_transcript_line } from './time-transcript-line'
|
|
|
8
8
|
import { time_writes } from './time-writes'
|
|
9
9
|
|
|
10
10
|
// Reading a `tool_use` block into the label a span carries — split out of `time-spans.ts` when it
|
|
11
|
-
// reached its line limit
|
|
11
|
+
// reached its line limit. `time_spans` re-exports `UNKNOWN_TOOL` and
|
|
12
12
|
// `to_tool_call` under the names they always had, so the move changed no call site.
|
|
13
13
|
|
|
14
14
|
const { NO_MESSAGE_ID } = time_transcript_line
|
|
@@ -19,31 +19,31 @@ const UNKNOWN_TOOL = 'unknown'
|
|
|
19
19
|
// `pnpm josh <cmd>` invocation, and the report drops empty labels rather than printing a bucket.
|
|
20
20
|
//
|
|
21
21
|
// `marker` names the workflow boundary the call is, for the phase breakdown that slices the same
|
|
22
|
-
// spans by stage
|
|
22
|
+
// spans by stage. It is carried here rather than re-derived later because
|
|
23
23
|
// the tool's *input* is what decides it, and a span keeps no input — only the label read off it.
|
|
24
24
|
//
|
|
25
|
-
// `is_bundleable` and `targets` are carried for exactly that reason too
|
|
25
|
+
// `is_bundleable` and `targets` are carried for exactly that reason too.
|
|
26
26
|
// Whether a call could have gone out beside another, and what it names, are both read off the input —
|
|
27
27
|
// so a module asking about them after the fact would have nothing to read. `time-bundle-call.ts`
|
|
28
28
|
// decides both; the rule each one follows is stated there.
|
|
29
29
|
//
|
|
30
|
-
// `check_key` is the fourth, and the third time this reason has applied
|
|
30
|
+
// `check_key` is the fourth, and the third time this reason has applied. Two
|
|
31
31
|
// runs of one verification check are the same call only if they named the same files, and the files
|
|
32
32
|
// are in the input — so `josh_command` alone cannot say, and nothing downstream could recover it.
|
|
33
33
|
// `time-single-check.ts` decides it.
|
|
34
34
|
//
|
|
35
|
-
// `message_id` is the fifth, and it is the one that says which *turn* a call belongs to
|
|
36
|
-
//
|
|
35
|
+
// `message_id` is the fifth, and it is the one that says which *turn* a call belongs to.
|
|
36
|
+
// It is read off the line the `tool_use` block sat on rather than off the
|
|
37
37
|
// result that closes the span, because a `tool_result` line carries no message id at all — so a span
|
|
38
38
|
// that did not keep it here could never be attributed to the turn that issued it.
|
|
39
39
|
//
|
|
40
|
-
// `writes` is the sixth, and it is what `targets` could not say
|
|
40
|
+
// `writes` is the sixth, and it is what `targets` could not say. `targets`
|
|
41
41
|
// names what a call mentioned; `marker` says a call was *an* edit but not of what, and for a tool
|
|
42
42
|
// outside `BUNDLEABLE_TOOLS` it arrived with no target at all. So a consumer subtracting edits from
|
|
43
43
|
// reads — `investigation-reads.ts` — had nothing to subtract for `MultiEdit` / `NotebookEdit`, and
|
|
44
44
|
// nothing at all to tell an in-place `sed -i` from the `sed -n` it shares a label with.
|
|
45
45
|
// `time-writes.ts` decides it, from the input this span is about to discard.
|
|
46
|
-
// `issue` is the seventh, and it is the one `branch` could not carry
|
|
46
|
+
// `issue` is the seventh, and it is the one `branch` could not carry. Under
|
|
47
47
|
// lanes the session writing the transcript stays on the default branch while the work runs in a linked
|
|
48
48
|
// work tree, so `branch` names no issue on any line of the run; the `in-progress` label call does, and
|
|
49
49
|
// like every field above it that answer is read off the *input* a span is about to discard.
|
|
@@ -51,7 +51,7 @@ const UNKNOWN_TOOL = 'unknown'
|
|
|
51
51
|
interface ToolCall {
|
|
52
52
|
label: string
|
|
53
53
|
josh_command: string
|
|
54
|
-
// Every josh subcommand the call ran, where `josh_command` is only the first
|
|
54
|
+
// Every josh subcommand the call ran, where `josh_command` is only the first.
|
|
55
55
|
// A chained `pnpm josh lint:related && pnpm josh test:related` carries both; the count tables expand
|
|
56
56
|
// it so the ones `josh_command` drops are still counted.
|
|
57
57
|
josh_commands: ReadonlyArray<string>
|
|
@@ -60,21 +60,20 @@ interface ToolCall {
|
|
|
60
60
|
is_bundleable: boolean
|
|
61
61
|
targets: ReadonlyArray<string>
|
|
62
62
|
// Carried beside `targets` because sharing a target means something different depending on it: a
|
|
63
|
-
// second write to one file is independent work, a read of a file just written is not
|
|
64
|
-
// (joshuafolkken/kit#1509).
|
|
63
|
+
// second write to one file is independent work, a read of a file just written is not.
|
|
65
64
|
is_writing: boolean
|
|
66
65
|
// The conservative write answer `is_read_only_call` asks of a live call, carried so a reader of the
|
|
67
|
-
// transcript asks the same read-only question as the guard
|
|
66
|
+
// transcript asks the same read-only question as the guard.
|
|
68
67
|
may_write: boolean
|
|
69
|
-
// Whether this is a subagent launch whose prompt builds on an earlier launch's finding
|
|
70
|
-
//
|
|
68
|
+
// Whether this is a subagent launch whose prompt builds on an earlier launch's finding.
|
|
69
|
+
// Carried for the reason every field here is — the prompt it is read from
|
|
71
70
|
// is the input, and a span keeps none. `time-agent-bundles.ts` reads it.
|
|
72
71
|
has_prior_reference: boolean
|
|
73
72
|
writes: ReadonlyArray<string>
|
|
74
73
|
message_id: string
|
|
75
74
|
issue: number
|
|
76
|
-
// The background run this call reads the output of, and `''` for every other call
|
|
77
|
-
//
|
|
75
|
+
// The background run this call reads the output of, and `''` for every other call.
|
|
76
|
+
// It is the eighth field carried for the reason the seven above are:
|
|
78
77
|
// the id sits in the command string, which a span does not keep, and it is the only thing that
|
|
79
78
|
// says a `tail` two turns later is the join of a command started minutes ago.
|
|
80
79
|
reads_background: string
|