mandrel 2.59.0 → 2.61.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/.agents/README.md +21 -19
- package/.agents/agents/acceptance-critic.md +24 -43
- package/.agents/agents/story-worker.md +20 -21
- package/.agents/docs/agentrc-reference.json +5 -84
- package/.agents/docs/configuration.md +48 -132
- package/.agents/docs/workflows.md +2 -2
- package/.agents/instructions.md +5 -8
- package/.agents/rules/ci-remediation.md +41 -8
- package/.agents/rules/gherkin-standards.md +4 -0
- package/.agents/schemas/acceptance-eval-verdict.schema.json +1 -1
- package/.agents/schemas/agentrc.schema.json +16 -496
- package/.agents/schemas/story-deliver-terminal.schema.json +13 -3
- package/.agents/schemas/validation-evidence.schema.json +2 -1
- package/.agents/scripts/README.md +23 -13
- package/.agents/scripts/acceptance-eval.js +35 -169
- package/.agents/scripts/agents-bootstrap-github.js +27 -129
- package/.agents/scripts/apply-quality-bootstrap.js +4 -40
- package/.agents/scripts/audit-baselines.js +6 -27
- package/.agents/scripts/audit-labels-bootstrap.js +5 -29
- package/.agents/scripts/audit-to-stories.js +91 -361
- package/.agents/scripts/boot-sweep.js +19 -72
- package/.agents/scripts/bootstrap.js +74 -395
- package/.agents/scripts/ceremony-derive.js +10 -41
- package/.agents/scripts/check-arch-cycles.js +14 -64
- package/.agents/scripts/check-baselines.js +8 -48
- package/.agents/scripts/check-context-budget.js +105 -311
- package/.agents/scripts/check-cyclomatic.js +12 -44
- package/.agents/scripts/check-dead-exports.js +13 -64
- package/.agents/scripts/check-doc-links.js +38 -186
- package/.agents/scripts/check-gherkin-corpus.js +24 -127
- package/.agents/scripts/check-test-temp-hygiene.js +28 -169
- package/.agents/scripts/coverage-capture.js +34 -98
- package/.agents/scripts/deliver-light.js +25 -171
- package/.agents/scripts/deliver-recover.js +6 -42
- package/.agents/scripts/deliver-run.js +534 -0
- package/.agents/scripts/diagnose-friction.js +24 -116
- package/.agents/scripts/drain-pending-cleanup.js +1 -1
- package/.agents/scripts/evidence-gate.js +23 -85
- package/.agents/scripts/file-ci-gap.js +57 -49
- package/.agents/scripts/generate-config-docs.js +30 -170
- package/.agents/scripts/generate-lens-checklists.js +8 -52
- package/.agents/scripts/generate-skills-index.js +14 -112
- package/.agents/scripts/generate-workflows-doc.js +10 -70
- package/.agents/scripts/git-cleanup.js +2 -34
- package/.agents/scripts/lib/Graph.js +24 -81
- package/.agents/scripts/lib/ITicketingProvider.js +47 -143
- package/.agents/scripts/lib/Logger.js +14 -76
- package/.agents/scripts/lib/audit-baselines/engine.js +11 -31
- package/.agents/scripts/lib/audit-baselines/gate-surface.js +3 -17
- package/.agents/scripts/lib/audit-baselines/headroom.js +4 -20
- package/.agents/scripts/lib/audit-baselines/hotspots.js +3 -15
- package/.agents/scripts/lib/audit-baselines/kinds.js +23 -89
- package/.agents/scripts/lib/audit-baselines/outliers.js +6 -23
- package/.agents/scripts/lib/audit-baselines/read.js +3 -16
- package/.agents/scripts/lib/audit-baselines/staleness.js +7 -26
- package/.agents/scripts/lib/audit-baselines/surface-entry.js +7 -28
- package/.agents/scripts/lib/audit-baselines/trend.js +7 -20
- package/.agents/scripts/lib/audit-baselines/weights.js +9 -37
- package/.agents/scripts/lib/audit-suite/audit-rules-reader.js +3 -18
- package/.agents/scripts/lib/audit-suite/checklist-threading.js +26 -124
- package/.agents/scripts/lib/audit-suite/dispatch-checklist.js +14 -45
- package/.agents/scripts/lib/audit-suite/findings.js +12 -52
- package/.agents/scripts/lib/audit-suite/frontmatter.js +5 -29
- package/.agents/scripts/lib/audit-suite/index.js +1 -15
- package/.agents/scripts/lib/audit-suite/lens-checklist.js +10 -45
- package/.agents/scripts/lib/audit-suite/lens-diff-floor.js +11 -76
- package/.agents/scripts/lib/audit-suite/runner.js +13 -43
- package/.agents/scripts/lib/audit-suite/selector.js +49 -349
- package/.agents/scripts/lib/audit-suite/substitutions.js +12 -40
- package/.agents/scripts/lib/audit-suite/workflow-loader.js +3 -15
- package/.agents/scripts/lib/audit-to-stories/audit-label-taxonomy.js +11 -73
- package/.agents/scripts/lib/audit-to-stories/audit-lenses.js +8 -37
- package/.agents/scripts/lib/audit-to-stories/build-story-body.js +25 -143
- package/.agents/scripts/lib/audit-to-stories/dedupe-against-github.js +14 -80
- package/.agents/scripts/lib/audit-to-stories/epic-grouping-directive.js +4 -18
- package/.agents/scripts/lib/audit-to-stories/finding-adapter.js +7 -40
- package/.agents/scripts/lib/audit-to-stories/group-findings.js +9 -39
- package/.agents/scripts/lib/audit-to-stories/issue-corpus.js +10 -66
- package/.agents/scripts/lib/audit-to-stories/issue-index.js +6 -30
- package/.agents/scripts/lib/audit-to-stories/issues-file.js +6 -36
- package/.agents/scripts/lib/audit-to-stories/ledger-commit.js +17 -69
- package/.agents/scripts/lib/audit-to-stories/ledger-pr.js +17 -85
- package/.agents/scripts/lib/audit-to-stories/ledger-record.js +10 -48
- package/.agents/scripts/lib/audit-to-stories/parse-audit-md.js +38 -146
- package/.agents/scripts/lib/audit-to-stories/seed-from-findings.js +7 -42
- package/.agents/scripts/lib/audit-to-stories/wire-dependencies.js +10 -57
- package/.agents/scripts/lib/baseline-loader.js +12 -51
- package/.agents/scripts/lib/baseline-schema-registry.js +5 -22
- package/.agents/scripts/lib/baselines/component-matcher.js +3 -12
- package/.agents/scripts/lib/baselines/components.js +10 -61
- package/.agents/scripts/lib/baselines/coverage-updater-cli.js +7 -36
- package/.agents/scripts/lib/baselines/crap-preview-incremental.js +7 -19
- package/.agents/scripts/lib/baselines/crap-preview-scan.js +19 -45
- package/.agents/scripts/lib/baselines/crap-updater-cli.js +16 -65
- package/.agents/scripts/lib/baselines/diff-scope-cli.js +5 -33
- package/.agents/scripts/lib/baselines/duplication-scanner.js +11 -60
- package/.agents/scripts/lib/baselines/env-overrides.js +12 -67
- package/.agents/scripts/lib/baselines/envelope.js +13 -129
- package/.agents/scripts/lib/baselines/exit-codes.js +6 -49
- package/.agents/scripts/lib/baselines/git-base.js +23 -142
- package/.agents/scripts/lib/baselines/kernel.js +11 -111
- package/.agents/scripts/lib/baselines/kinds/_crap-new-method-gate.js +9 -47
- package/.agents/scripts/lib/baselines/kinds/_crap-read.js +8 -51
- package/.agents/scripts/lib/baselines/kinds/_shared-metric.js +7 -62
- package/.agents/scripts/lib/baselines/kinds/bundle-size.js +8 -29
- package/.agents/scripts/lib/baselines/kinds/coverage.js +3 -15
- package/.agents/scripts/lib/baselines/kinds/crap.js +94 -415
- package/.agents/scripts/lib/baselines/kinds/duplication.js +4 -30
- package/.agents/scripts/lib/baselines/kinds/kind-factory.js +7 -53
- package/.agents/scripts/lib/baselines/kinds/maintainability.js +15 -80
- package/.agents/scripts/lib/baselines/kinds/mutation.js +12 -72
- package/.agents/scripts/lib/baselines/maintainability-baseline-io.js +4 -11
- package/.agents/scripts/lib/baselines/merge-envelopes.js +30 -146
- package/.agents/scripts/lib/baselines/path-canon.js +19 -128
- package/.agents/scripts/lib/baselines/preview-gates.js +8 -37
- package/.agents/scripts/lib/baselines/reader.js +14 -107
- package/.agents/scripts/lib/baselines/refresh-service.js +35 -252
- package/.agents/scripts/lib/baselines/scope.js +11 -135
- package/.agents/scripts/lib/baselines/writer.js +16 -149
- package/.agents/scripts/lib/bdd-runner-detect.js +18 -113
- package/.agents/scripts/lib/bdd-scenario-budget.js +9 -36
- package/.agents/scripts/lib/bdd-scenario-scanner.js +11 -73
- package/.agents/scripts/lib/bdd-step-index.js +26 -100
- package/.agents/scripts/lib/bootstrap/baseline-merge-driver.js +23 -103
- package/.agents/scripts/lib/bootstrap/branch-protection.js +2 -5
- package/.agents/scripts/lib/bootstrap/commit-push.js +12 -50
- package/.agents/scripts/lib/bootstrap/gh-preflight.js +14 -101
- package/.agents/scripts/lib/bootstrap/hitl-confirm.js +5 -30
- package/.agents/scripts/lib/bootstrap/install-ledger.js +17 -73
- package/.agents/scripts/lib/bootstrap/issue-forms-template.js +17 -121
- package/.agents/scripts/lib/bootstrap/manifest.js +15 -86
- package/.agents/scripts/lib/bootstrap/merge-methods.js +4 -33
- package/.agents/scripts/lib/bootstrap/preflight.js +12 -61
- package/.agents/scripts/lib/bootstrap/project-bootstrap.js +34 -235
- package/.agents/scripts/lib/bootstrap/prompt.js +21 -129
- package/.agents/scripts/lib/bootstrap/quality-bootstrap.js +27 -141
- package/.agents/scripts/lib/bootstrap/summary.js +1 -8
- package/.agents/scripts/lib/bootstrap/workflow-audit.js +11 -84
- package/.agents/scripts/lib/branch-name-guard.js +4 -23
- package/.agents/scripts/lib/changed-files.js +39 -121
- package/.agents/scripts/lib/checks/core-bare-clean.js +4 -24
- package/.agents/scripts/lib/checks/index.js +18 -101
- package/.agents/scripts/lib/checks/loop-health.js +11 -53
- package/.agents/scripts/lib/checks/state.js +16 -91
- package/.agents/scripts/lib/checks/story-init-not-backgrounded.js +10 -61
- package/.agents/scripts/lib/checks/subagent-agent-tool-required.js +14 -83
- package/.agents/scripts/lib/child-exec.js +39 -108
- package/.agents/scripts/lib/cli/standard-args.js +9 -116
- package/.agents/scripts/lib/cli-args.js +31 -146
- package/.agents/scripts/lib/cli-usage.js +5 -27
- package/.agents/scripts/lib/cli-utils.js +2 -12
- package/.agents/scripts/lib/close-validation/commands.js +13 -76
- package/.agents/scripts/lib/close-validation/gates.js +92 -331
- package/.agents/scripts/lib/close-validation/process.js +121 -151
- package/.agents/scripts/lib/close-validation/projections/advisories.js +5 -31
- package/.agents/scripts/lib/close-validation/projections/crap.js +19 -67
- package/.agents/scripts/lib/close-validation/projections/head-sha.js +1 -17
- package/.agents/scripts/lib/close-validation/projections/inputs.js +4 -34
- package/.agents/scripts/lib/close-validation/projections/maintainability.js +11 -58
- package/.agents/scripts/lib/close-validation/runner.js +53 -110
- package/.agents/scripts/lib/command-header.js +6 -28
- package/.agents/scripts/lib/config/acceptance-eval.js +4 -30
- package/.agents/scripts/lib/config/baselines.js +3 -14
- package/.agents/scripts/lib/config/ci.js +8 -38
- package/.agents/scripts/lib/config/commands.js +1 -15
- package/.agents/scripts/lib/config/defaults.js +4 -33
- package/.agents/scripts/lib/config/delivery-routing.js +6 -34
- package/.agents/scripts/lib/config/explain.js +10 -83
- package/.agents/scripts/lib/config/gates/coverage.schema.js +0 -12
- package/.agents/scripts/lib/config/gates/crap-incremental-coverage.schema.js +3 -31
- package/.agents/scripts/lib/config/gates/crap.schema.js +1 -34
- package/.agents/scripts/lib/config/gates/duplication.schema.js +1 -8
- package/.agents/scripts/lib/config/gates/index.js +2 -17
- package/.agents/scripts/lib/config/gates/maintainability.schema.js +1 -20
- package/.agents/scripts/lib/config/gates/mutation.schema.js +1 -7
- package/.agents/scripts/lib/config/gates/shared.js +4 -64
- package/.agents/scripts/lib/config/github.js +4 -22
- package/.agents/scripts/lib/config/limits.js +4 -57
- package/.agents/scripts/lib/config/paths.js +2 -21
- package/.agents/scripts/lib/config/qa.js +4 -38
- package/.agents/scripts/lib/config/quality.js +76 -432
- package/.agents/scripts/lib/config/runners.js +12 -56
- package/.agents/scripts/lib/config/runtime.js +13 -57
- package/.agents/scripts/lib/config/shared.js +2 -16
- package/.agents/scripts/lib/config/sync-agentrc.js +9 -50
- package/.agents/scripts/lib/config/temp-paths.js +40 -280
- package/.agents/scripts/lib/config/validate-orchestration.js +5 -17
- package/.agents/scripts/lib/config/worktree-isolation.js +9 -28
- package/.agents/scripts/lib/config-resolver.js +11 -52
- package/.agents/scripts/lib/config-schema-shared.js +1 -4
- package/.agents/scripts/lib/config-settings-schema-delivery.js +16 -291
- package/.agents/scripts/lib/config-settings-schema-quality.js +7 -219
- package/.agents/scripts/lib/config-settings-schema.js +37 -274
- package/.agents/scripts/lib/coverage-baseline.js +20 -110
- package/.agents/scripts/lib/coverage-capture-fullscope.js +18 -35
- package/.agents/scripts/lib/coverage-capture-incremental.js +15 -45
- package/.agents/scripts/lib/coverage-capture-usage.js +8 -25
- package/.agents/scripts/lib/coverage-capture.js +99 -224
- package/.agents/scripts/lib/coverage-utils.js +14 -79
- package/.agents/scripts/lib/cpu-pool.js +17 -123
- package/.agents/scripts/lib/crap-baseline-join.js +16 -88
- package/.agents/scripts/lib/crap-coordinates.js +6 -25
- package/.agents/scripts/lib/crap-engine.js +40 -153
- package/.agents/scripts/lib/crap-method-identity.js +16 -78
- package/.agents/scripts/lib/crap-utils.js +31 -155
- package/.agents/scripts/lib/cyclomatic-ceiling.js +14 -87
- package/.agents/scripts/lib/cyclomatic-scope.js +10 -50
- package/.agents/scripts/lib/dead-exports-knip.js +18 -56
- package/.agents/scripts/lib/dead-exports-mode.js +5 -24
- package/.agents/scripts/lib/degraded-mode.js +3 -26
- package/.agents/scripts/lib/dependency-parser.js +8 -40
- package/.agents/scripts/lib/dependency-version.js +13 -35
- package/.agents/scripts/lib/detect-package-manager.js +6 -36
- package/.agents/scripts/lib/doc-tiers.js +22 -124
- package/.agents/scripts/lib/duplicate-search.js +8 -72
- package/.agents/scripts/lib/env-loader.js +5 -27
- package/.agents/scripts/lib/error-redactor.js +6 -31
- package/.agents/scripts/lib/errors/index.js +2 -22
- package/.agents/scripts/lib/escomplex-ast-compat.js +22 -163
- package/.agents/scripts/lib/escomplex-kernel.js +21 -123
- package/.agents/scripts/lib/feedback-loop/graduator-core.js +94 -419
- package/.agents/scripts/lib/feedback-loop/prior-feedback-fetcher.js +20 -98
- package/.agents/scripts/lib/feedback-loop/retro-proposals-graduator.js +27 -149
- package/.agents/scripts/lib/findings/audit-ledger.js +23 -97
- package/.agents/scripts/lib/findings/classify-finding.js +14 -69
- package/.agents/scripts/lib/findings/promote-finding.js +14 -112
- package/.agents/scripts/lib/findings/provenance-field.js +11 -52
- package/.agents/scripts/lib/findings/route-finding.js +37 -255
- package/.agents/scripts/lib/findings/semantic-issue-search.js +14 -59
- package/.agents/scripts/lib/findings/severity.js +18 -104
- package/.agents/scripts/lib/format-generated-json.js +12 -44
- package/.agents/scripts/lib/full-suite-lock.js +160 -429
- package/.agents/scripts/lib/full-suite-queue.js +213 -0
- package/.agents/scripts/lib/gates/baseline-store.js +5 -9
- package/.agents/scripts/lib/gates/friction.js +1 -3
- package/.agents/scripts/lib/generated/agentrc-validator.js +2 -2
- package/.agents/scripts/lib/gh-exec.js +123 -191
- package/.agents/scripts/lib/git/cached-fetch.js +9 -52
- package/.agents/scripts/lib/git/sync-from-base.js +15 -107
- package/.agents/scripts/lib/git-branch-cleanup.js +14 -61
- package/.agents/scripts/lib/git-branch-lifecycle.js +16 -87
- package/.agents/scripts/lib/git-utils.js +37 -161
- package/.agents/scripts/lib/github/framework-repo.js +8 -71
- package/.agents/scripts/lib/github-url.js +2 -17
- package/.agents/scripts/lib/import-graph.js +11 -38
- package/.agents/scripts/lib/install-cmd-parser.js +4 -13
- package/.agents/scripts/lib/json-utils.js +3 -18
- package/.agents/scripts/lib/label-constants.js +16 -111
- package/.agents/scripts/lib/label-taxonomy.js +4 -30
- package/.agents/scripts/lib/maintainability-engine.js +12 -80
- package/.agents/scripts/lib/maintainability-unscorable.js +5 -25
- package/.agents/scripts/lib/maintainability-utils.js +16 -92
- package/.agents/scripts/lib/mandrel-catalog.js +12 -70
- package/.agents/scripts/lib/notifications/notifier.js +13 -38
- package/.agents/scripts/lib/npm-scripts.js +4 -23
- package/.agents/scripts/lib/observability/metrics-ledger.js +16 -76
- package/.agents/scripts/lib/observability/runtime-friction.js +44 -286
- package/.agents/scripts/lib/observability/signal-validator.js +5 -37
- package/.agents/scripts/lib/observability/signals-writer.js +11 -121
- package/.agents/scripts/lib/observability/source-classifier.js +22 -203
- package/.agents/scripts/lib/observability/terse-result.js +14 -47
- package/.agents/scripts/lib/onboard/init-tail.js +13 -74
- package/.agents/scripts/lib/onboard/scaffold-docs.js +11 -34
- package/.agents/scripts/lib/orchestration/acceptance-eval-decision.js +25 -139
- package/.agents/scripts/lib/orchestration/auto-merge-cwd.js +11 -66
- package/.agents/scripts/lib/orchestration/behind-recovery.js +10 -55
- package/.agents/scripts/lib/orchestration/ceremony-routing.js +28 -156
- package/.agents/scripts/lib/orchestration/change-set.js +7 -36
- package/.agents/scripts/lib/orchestration/check-baselines/phases/compare.js +9 -46
- package/.agents/scripts/lib/orchestration/check-baselines/phases/evaluate.js +11 -44
- package/.agents/scripts/lib/orchestration/check-baselines/phases/floors.js +5 -24
- package/.agents/scripts/lib/orchestration/check-baselines/phases/friction.js +3 -12
- package/.agents/scripts/lib/orchestration/check-baselines/phases/parse-args.js +5 -38
- package/.agents/scripts/lib/orchestration/check-baselines/phases/pipeline.js +3 -8
- package/.agents/scripts/lib/orchestration/check-baselines/phases/refresh-ack.js +28 -136
- package/.agents/scripts/lib/orchestration/check-baselines/phases/report.js +3 -13
- package/.agents/scripts/lib/orchestration/check-state.js +92 -0
- package/.agents/scripts/lib/orchestration/ci-gap-intake.js +37 -144
- package/.agents/scripts/lib/orchestration/ci-rerun-guard.js +121 -157
- package/.agents/scripts/lib/orchestration/code-review.js +24 -128
- package/.agents/scripts/lib/orchestration/column-sync.js +23 -111
- package/.agents/scripts/lib/orchestration/complexity-gate.js +118 -462
- package/.agents/scripts/lib/orchestration/deliver-recover.js +36 -168
- package/.agents/scripts/lib/orchestration/dependency-analyzer.js +4 -35
- package/.agents/scripts/lib/orchestration/dependency-candidates.js +9 -41
- package/.agents/scripts/lib/orchestration/diff-magnitude.js +25 -115
- package/.agents/scripts/lib/orchestration/doc-reader.js +2 -6
- package/.agents/scripts/lib/orchestration/docs-digest.js +13 -51
- package/.agents/scripts/lib/orchestration/epic-candidates.js +13 -53
- package/.agents/scripts/lib/orchestration/epic-checklist.js +9 -33
- package/.agents/scripts/lib/orchestration/epic-container.js +41 -167
- package/.agents/scripts/lib/orchestration/epic-expansion.js +10 -40
- package/.agents/scripts/lib/orchestration/epic-rollup.js +55 -207
- package/.agents/scripts/lib/orchestration/file-assumption-enum.js +2 -22
- package/.agents/scripts/lib/orchestration/file-assumptions.js +45 -253
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/branches-detect.js +9 -46
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/branches-reap.js +7 -57
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/branches.js +21 -126
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/cli.js +2 -6
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/fast-forward.js +1 -4
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/filters.js +1 -5
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/git-probes-ff.js +9 -34
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/git-probes.js +41 -190
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/merged-tip.js +9 -45
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/parse-args.js +1 -4
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/phase-drivers.js +19 -85
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/prompts.js +3 -17
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/prune.js +1 -5
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/render.js +16 -100
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/stashes.js +1 -4
- package/.agents/scripts/lib/orchestration/lease-guard-shared.js +16 -67
- package/.agents/scripts/lib/orchestration/lifecycle/emit-ledger-event.js +9 -33
- package/.agents/scripts/lib/orchestration/lifecycle/emit-merge-flip-failed.js +8 -29
- package/.agents/scripts/lib/orchestration/lifecycle/emit-merge-unlanded.js +15 -68
- package/.agents/scripts/lib/orchestration/light-backstop.js +11 -49
- package/.agents/scripts/lib/orchestration/light-escalation.js +21 -89
- package/.agents/scripts/lib/orchestration/light-suitability.js +37 -307
- package/.agents/scripts/lib/orchestration/merge-block-class.js +39 -216
- package/.agents/scripts/lib/orchestration/merge-poll.js +104 -377
- package/.agents/scripts/lib/orchestration/pinned-identifier-lint.js +17 -57
- package/.agents/scripts/lib/orchestration/plan-context.js +55 -318
- package/.agents/scripts/lib/orchestration/plan-critic-conditions.js +22 -79
- package/.agents/scripts/lib/orchestration/plan-critics-evaluate.js +5 -31
- package/.agents/scripts/lib/orchestration/plan-metrics.js +29 -108
- package/.agents/scripts/lib/orchestration/plan-navigation.js +8 -27
- package/.agents/scripts/lib/orchestration/plan-persist/acceptance-handle-repair.js +12 -49
- package/.agents/scripts/lib/orchestration/plan-persist/audit-provenance.js +18 -73
- package/.agents/scripts/lib/orchestration/plan-persist/changes-repair.js +16 -78
- package/.agents/scripts/lib/orchestration/plan-persist/cross-plan-links.js +6 -30
- package/.agents/scripts/lib/orchestration/plan-persist/epic-adoption.js +14 -65
- package/.agents/scripts/lib/orchestration/plan-persist/epic-ops.js +21 -76
- package/.agents/scripts/lib/orchestration/plan-persist/external-deps.js +6 -43
- package/.agents/scripts/lib/orchestration/plan-persist/persist-helpers.js +14 -68
- package/.agents/scripts/lib/orchestration/plan-persist/plan-context-source.js +9 -41
- package/.agents/scripts/lib/orchestration/plan-persist/run-plan-persist.js +71 -289
- package/.agents/scripts/lib/orchestration/plan-persist/soft-findings.js +2 -12
- package/.agents/scripts/lib/orchestration/plan-persist/story-ops.js +96 -362
- package/.agents/scripts/lib/orchestration/plan-persist/summary.js +9 -39
- package/.agents/scripts/lib/orchestration/plan-persist/supersede-ops.js +60 -186
- package/.agents/scripts/lib/orchestration/plan-persist/wave-collision-gate.js +9 -49
- package/.agents/scripts/lib/orchestration/plan-persist/wave-serialisation.js +7 -28
- package/.agents/scripts/lib/orchestration/plan-reachability.js +13 -42
- package/.agents/scripts/lib/orchestration/plan-run-labels/reap.js +16 -91
- package/.agents/scripts/lib/orchestration/plan-runner/worktree-sweep.js +16 -54
- package/.agents/scripts/lib/orchestration/plan-text-hygiene.js +10 -52
- package/.agents/scripts/lib/orchestration/planning/authoring-context.js +14 -109
- package/.agents/scripts/lib/orchestration/planning/memory-pool-advisory.js +11 -83
- package/.agents/scripts/lib/orchestration/pr-watch.js +48 -306
- package/.agents/scripts/lib/orchestration/project-meta-cache.js +15 -80
- package/.agents/scripts/lib/orchestration/project-meta-resolver.js +10 -51
- package/.agents/scripts/lib/orchestration/reassert-status-column.js +12 -76
- package/.agents/scripts/lib/orchestration/remote-verifier.js +12 -36
- package/.agents/scripts/lib/orchestration/resolve-stories.js +33 -164
- package/.agents/scripts/lib/orchestration/retro-proposals.js +66 -361
- package/.agents/scripts/lib/orchestration/review-base-ref.js +9 -43
- package/.agents/scripts/lib/orchestration/review-depth.js +12 -91
- package/.agents/scripts/lib/orchestration/review-providers/codex.js +10 -111
- package/.agents/scripts/lib/orchestration/review-providers/degraded-gates.js +13 -71
- package/.agents/scripts/lib/orchestration/review-providers/findings-renderer.js +7 -51
- package/.agents/scripts/lib/orchestration/review-providers/mi-exemptions.js +8 -53
- package/.agents/scripts/lib/orchestration/review-providers/native.js +30 -214
- package/.agents/scripts/lib/orchestration/review-providers/parse-findings.js +7 -52
- package/.agents/scripts/lib/orchestration/review-providers/review-depth.js +4 -33
- package/.agents/scripts/lib/orchestration/review-providers/review-provider-factory.js +11 -71
- package/.agents/scripts/lib/orchestration/review-providers/scoped-lint.js +19 -131
- package/.agents/scripts/lib/orchestration/review-providers/security-review.js +6 -89
- package/.agents/scripts/lib/orchestration/review-providers/types.js +26 -56
- package/.agents/scripts/lib/orchestration/review-providers/ultrareview.js +3 -46
- package/.agents/scripts/lib/orchestration/run-epilogue.js +245 -326
- package/.agents/scripts/lib/orchestration/run-scoped-config.js +55 -159
- package/.agents/scripts/lib/orchestration/single-story-close/close-note.js +7 -34
- package/.agents/scripts/lib/orchestration/single-story-close/failed-terminal.js +16 -89
- package/.agents/scripts/lib/orchestration/single-story-close/gate-log.js +18 -109
- package/.agents/scripts/lib/orchestration/single-story-close/phases/auto-merge.js +83 -239
- package/.agents/scripts/lib/orchestration/single-story-close/phases/base-sync.js +20 -82
- package/.agents/scripts/lib/orchestration/single-story-close/phases/close-validation.js +103 -97
- package/.agents/scripts/lib/orchestration/single-story-close/phases/code-review.js +8 -64
- package/.agents/scripts/lib/orchestration/single-story-close/phases/confirm-merge.js +136 -486
- package/.agents/scripts/lib/orchestration/single-story-close/phases/conventional-subject.js +30 -134
- package/.agents/scripts/lib/orchestration/single-story-close/phases/graphql-preflight.js +96 -0
- package/.agents/scripts/lib/orchestration/single-story-close/phases/lock-wait-pending.js +49 -0
- package/.agents/scripts/lib/orchestration/single-story-close/phases/normalize-pr-title.js +13 -86
- package/.agents/scripts/lib/orchestration/single-story-close/phases/options.js +20 -95
- package/.agents/scripts/lib/orchestration/single-story-close/phases/post-land.js +46 -203
- package/.agents/scripts/lib/orchestration/single-story-close/phases/pre-gate-steps.js +8 -50
- package/.agents/scripts/lib/orchestration/single-story-close/phases/pull-request.js +12 -83
- package/.agents/scripts/lib/orchestration/single-story-close/phases/push.js +6 -39
- package/.agents/scripts/lib/orchestration/single-story-close/phases/review-block.js +1 -6
- package/.agents/scripts/lib/orchestration/single-story-close/phases/review-outcome.js +4 -28
- package/.agents/scripts/lib/orchestration/single-story-close/phases/review-override.js +6 -51
- package/.agents/scripts/lib/orchestration/single-story-close/phases/worktree-reap.js +6 -34
- package/.agents/scripts/lib/orchestration/single-story-close/phases/wrong-tree-guard.js +23 -121
- package/.agents/scripts/lib/orchestration/single-story-close/runner.js +180 -273
- package/.agents/scripts/lib/orchestration/single-story-lease-guard.js +15 -69
- package/.agents/scripts/lib/orchestration/story-body-gate.js +4 -23
- package/.agents/scripts/lib/orchestration/story-close/baseline-upward-writeback.js +50 -179
- package/.agents/scripts/lib/orchestration/story-close/context-budget-writeback.js +11 -41
- package/.agents/scripts/lib/orchestration/story-close/format-autofix.js +23 -311
- package/.agents/scripts/lib/orchestration/story-close/phases/local-lens-review.js +22 -147
- package/.agents/scripts/lib/orchestration/story-close/phases/review-core.js +16 -67
- package/.agents/scripts/lib/orchestration/story-deliver-terminal-schema.js +12 -68
- package/.agents/scripts/lib/orchestration/story-deliver-terminal.js +42 -200
- package/.agents/scripts/lib/orchestration/story-follow-ups.js +167 -252
- package/.agents/scripts/lib/orchestration/story-init-envelope.js +52 -0
- package/.agents/scripts/lib/orchestration/story-init-remote.js +2 -6
- package/.agents/scripts/lib/orchestration/story-reachability.js +3 -23
- package/.agents/scripts/lib/orchestration/task-body-validator.js +12 -135
- package/.agents/scripts/lib/orchestration/ticket-lease.js +28 -131
- package/.agents/scripts/lib/orchestration/ticket-validator-conflicts.js +15 -149
- package/.agents/scripts/lib/orchestration/ticket-validator-sizing.js +5 -33
- package/.agents/scripts/lib/orchestration/ticket-validator.js +63 -344
- package/.agents/scripts/lib/orchestration/ticketing/bulk.js +51 -244
- package/.agents/scripts/lib/orchestration/ticketing/reads.js +39 -261
- package/.agents/scripts/lib/orchestration/ticketing/state.js +14 -68
- package/.agents/scripts/lib/orchestration/ticketing/transition.js +46 -263
- package/.agents/scripts/lib/orchestration/ticketing.js +2 -26
- package/.agents/scripts/lib/orchestration/verify-credit.js +18 -79
- package/.agents/scripts/lib/orchestration/worktree-dirty.js +5 -30
- package/.agents/scripts/lib/path-security.js +3 -6
- package/.agents/scripts/lib/plan-phase-cleanup.js +9 -49
- package/.agents/scripts/lib/preflight-runner.js +13 -69
- package/.agents/scripts/lib/process-group.js +143 -0
- package/.agents/scripts/lib/project-root.js +2 -8
- package/.agents/scripts/lib/provider-factory.js +2 -25
- package/.agents/scripts/lib/qa/console-allowlist.js +10 -59
- package/.agents/scripts/lib/qa/qa-session.js +15 -69
- package/.agents/scripts/lib/qa/redact-evidence.js +18 -129
- package/.agents/scripts/lib/qa/resolve-qa-contract.js +26 -135
- package/.agents/scripts/lib/qa/resolve-selection.js +16 -84
- package/.agents/scripts/lib/reserved-test-ids.js +9 -47
- package/.agents/scripts/lib/runtime-deps/dep-resolution.js +13 -53
- package/.agents/scripts/lib/runtime-deps/ensure-installed.js +10 -44
- package/.agents/scripts/lib/runtime-deps/manifest.js +10 -30
- package/.agents/scripts/lib/runtime-deps/parser-major.js +15 -51
- package/.agents/scripts/lib/runtime-deps/preflight.js +4 -22
- package/.agents/scripts/lib/runtime-deps/scan-imports.js +11 -55
- package/.agents/scripts/lib/signals/detectors/common.js +12 -38
- package/.agents/scripts/lib/signals/index.js +2 -19
- package/.agents/scripts/lib/signals/schema.js +14 -109
- package/.agents/scripts/lib/signals/write.js +2 -11
- package/.agents/scripts/lib/single-story/confirm-merge.js +31 -72
- package/.agents/scripts/lib/single-story/story-merged-notify.js +8 -49
- package/.agents/scripts/lib/single-story-sweep/protection-ctx.js +4 -26
- package/.agents/scripts/lib/single-story-sweep/protection.js +13 -100
- package/.agents/scripts/lib/single-story-sweep/sweep-lock.js +60 -258
- package/.agents/scripts/lib/single-story-sweep.js +14 -97
- package/.agents/scripts/lib/skills/parse-skill.js +13 -59
- package/.agents/scripts/lib/skills/skills-index.js +8 -29
- package/.agents/scripts/lib/skills/walk-skill-files.js +17 -78
- package/.agents/scripts/lib/source-extensions.js +11 -42
- package/.agents/scripts/lib/source-text/strip-js-comments.js +8 -41
- package/.agents/scripts/lib/stdio-flush.js +9 -36
- package/.agents/scripts/lib/story-adjacency.js +8 -40
- package/.agents/scripts/lib/story-body/body-format-lints.js +51 -66
- package/.agents/scripts/lib/story-body/footer-block.js +11 -44
- package/.agents/scripts/lib/story-body/story-body.js +123 -344
- package/.agents/scripts/lib/temp-retention.js +42 -143
- package/.agents/scripts/lib/templates/decomposer-prompts.js +18 -80
- package/.agents/scripts/lib/test-env.js +12 -65
- package/.agents/scripts/lib/test-run-credit.js +10 -65
- package/.agents/scripts/lib/test-runner-contract.js +19 -74
- package/.agents/scripts/lib/test-temp.js +38 -184
- package/.agents/scripts/lib/test-tiers.js +12 -96
- package/.agents/scripts/lib/ticket-body-sections.js +21 -96
- package/.agents/scripts/lib/transpile.js +15 -74
- package/.agents/scripts/lib/util/concurrent-map.js +6 -25
- package/.agents/scripts/lib/util/parse-id-list.js +8 -34
- package/.agents/scripts/lib/util/poll-loop.js +8 -28
- package/.agents/scripts/lib/util/with-timeout.js +2 -11
- package/.agents/scripts/lib/validation-evidence.js +21 -96
- package/.agents/scripts/lib/wave-runner/footprint.js +17 -70
- package/.agents/scripts/lib/wave-runner/live-probe.js +67 -209
- package/.agents/scripts/lib/wave-runner/ready-set.js +72 -301
- package/.agents/scripts/lib/workers/crap-worker.js +11 -64
- package/.agents/scripts/lib/workers/maintainability-report-worker.js +8 -45
- package/.agents/scripts/lib/workers/maintainability-worker.js +5 -21
- package/.agents/scripts/lib/workers/serve-worker-messages.js +2 -18
- package/.agents/scripts/lib/workflow-closure.js +22 -105
- package/.agents/scripts/lib/workspace-provisioner.js +16 -54
- package/.agents/scripts/lib/worktree/git-hooks.js +15 -60
- package/.agents/scripts/lib/worktree/lifecycle/force-drain.js +20 -60
- package/.agents/scripts/lib/worktree/lifecycle/merge-reachability.js +10 -62
- package/.agents/scripts/lib/worktree/lifecycle/pending-cleanup.js +22 -86
- package/.agents/scripts/lib/worktree/lifecycle/reap.js +24 -126
- package/.agents/scripts/lib/worktree/lifecycle-manager.js +2 -20
- package/.agents/scripts/lib/worktree/node-modules-strategy.js +46 -180
- package/.agents/scripts/lib/worktree-manager.js +15 -40
- package/.agents/scripts/lint-issue-body.js +12 -68
- package/.agents/scripts/mandrel-update-preflight.js +10 -70
- package/.agents/scripts/merge-baseline.js +30 -105
- package/.agents/scripts/nav-registry-diff.js +22 -108
- package/.agents/scripts/notify.js +12 -69
- package/.agents/scripts/plan-context.js +97 -92
- package/.agents/scripts/plan-critics.js +12 -66
- package/.agents/scripts/plan-persist.js +71 -137
- package/.agents/scripts/plan-run-epilogue.js +20 -43
- package/.agents/scripts/pr-watch-with-update.js +79 -263
- package/.agents/scripts/providers/github/auth.js +3 -8
- package/.agents/scripts/providers/github/blocked-by-add.js +14 -61
- package/.agents/scripts/providers/github/board-add.js +5 -21
- package/.agents/scripts/providers/github/branch-protection.js +11 -43
- package/.agents/scripts/providers/github/cache.js +2 -14
- package/.agents/scripts/providers/github/comments.js +7 -40
- package/.agents/scripts/providers/github/compose.js +3 -19
- package/.agents/scripts/providers/github/errors.js +22 -125
- package/.agents/scripts/providers/github/issues.js +31 -123
- package/.agents/scripts/providers/github/labels.js +24 -124
- package/.agents/scripts/providers/github/mappers.js +5 -27
- package/.agents/scripts/providers/github/merge-methods.js +3 -22
- package/.agents/scripts/providers/github/project-board.js +2 -17
- package/.agents/scripts/providers/github/projects-v2-graphql.js +3 -6
- package/.agents/scripts/providers/github/request-helpers.js +5 -32
- package/.agents/scripts/providers/github/search-budget.js +9 -39
- package/.agents/scripts/providers/github/search-query.js +5 -26
- package/.agents/scripts/providers/github/sub-issue-add.js +15 -65
- package/.agents/scripts/providers/github/sub-issues.js +7 -36
- package/.agents/scripts/providers/github/tickets.js +32 -134
- package/.agents/scripts/providers/github.js +18 -59
- package/.agents/scripts/prune-plan-run-labels.js +12 -46
- package/.agents/scripts/quality-preview.js +35 -220
- package/.agents/scripts/resolve-doc-tiers.js +3 -26
- package/.agents/scripts/resolve-stories.js +16 -67
- package/.agents/scripts/resync-status-column.js +6 -25
- package/.agents/scripts/run-tests.js +29 -104
- package/.agents/scripts/single-story-close.js +23 -135
- package/.agents/scripts/single-story-confirm-merge.js +32 -139
- package/.agents/scripts/single-story-init.js +47 -259
- package/.agents/scripts/stories-wave-tick.js +179 -415
- package/.agents/scripts/sync-agentrc.js +3 -21
- package/.agents/scripts/sync-claude-agents.js +9 -55
- package/.agents/scripts/sync-claude-commands.js +20 -110
- package/.agents/scripts/test-wrapper.js +6 -43
- package/.agents/scripts/update-coverage-baseline.js +5 -22
- package/.agents/scripts/update-crap-baseline.js +7 -30
- package/.agents/scripts/update-duplication-baseline.js +16 -92
- package/.agents/scripts/update-maintainability-baseline.js +8 -62
- package/.agents/scripts/update-ticket-state.js +1 -7
- package/.agents/scripts/validate-skills.js +6 -26
- package/.agents/skills/core/gates-and-baselines/reference.md +0 -1
- package/.agents/skills/skills.index.json +2 -2
- package/.agents/skills/stack/qa/playwright/SKILL.md +26 -0
- package/.agents/templates/agent-protocol.md +2 -2
- package/.agents/templates/docs/audit-sweep-runbook.md +3 -4
- package/.agents/workflows/audit-accessibility.md +4 -7
- package/.agents/workflows/audit-adrs.md +3 -6
- package/.agents/workflows/audit-architecture.md +3 -11
- package/.agents/workflows/audit-baselines.md +6 -9
- package/.agents/workflows/audit-clean-code.md +8 -12
- package/.agents/workflows/audit-data-model.md +3 -7
- package/.agents/workflows/audit-dependencies.md +4 -7
- package/.agents/workflows/audit-devops.md +4 -8
- package/.agents/workflows/audit-documentation.md +1 -4
- package/.agents/workflows/audit-mobile.md +4 -7
- package/.agents/workflows/audit-navigability.md +3 -6
- package/.agents/workflows/audit-performance.md +2 -4
- package/.agents/workflows/audit-privacy.md +4 -7
- package/.agents/workflows/audit-quality.md +4 -7
- package/.agents/workflows/audit-security.md +4 -7
- package/.agents/workflows/audit-seo.md +4 -7
- package/.agents/workflows/audit-sre.md +4 -7
- package/.agents/workflows/audit-to-stories.md +17 -30
- package/.agents/workflows/audit-ux-ui.md +4 -7
- package/.agents/workflows/helpers/acceptance-self-eval.md +84 -157
- package/.agents/workflows/helpers/audit-lens-core.md +1 -1
- package/.agents/workflows/helpers/code-quality-guardrails.md +12 -15
- package/.agents/workflows/helpers/code-review.md +4 -2
- package/.agents/workflows/helpers/deliver-digest.md +37 -28
- package/.agents/workflows/helpers/deliver-light.md +92 -101
- package/.agents/workflows/helpers/deliver-reference.md +162 -220
- package/.agents/workflows/helpers/deliver-story-reference.md +197 -607
- package/.agents/workflows/helpers/deliver-story.md +17 -18
- package/.agents/workflows/helpers/plan-reference.md +125 -167
- package/.agents/workflows/helpers/qa-core.md +12 -0
- package/.agents/workflows/mandrel-deliver.md +47 -31
- package/.agents/workflows/mandrel-plan.md +22 -21
- package/.agents/workflows/mandrel-update.md +36 -21
- package/.agents/workflows/memory-consolidate.md +1 -1
- package/.agents/workflows/qa-assist.md +27 -71
- package/.agents/workflows/qa-explore.md +19 -59
- package/.agents/workflows/qa-run.md +11 -33
- package/README.md +1 -1
- package/bin/mandrel.js +5 -46
- package/bin/postinstall.js +18 -107
- package/docs/CHANGELOG.md +60 -0
- package/lib/cli/doctor.js +11 -71
- package/lib/cli/init.js +26 -165
- package/lib/cli/migrate.js +5 -64
- package/lib/cli/registry.js +84 -467
- package/lib/cli/sync-agents.js +4 -64
- package/lib/cli/sync-commands.js +11 -64
- package/lib/cli/sync.js +34 -213
- package/lib/cli/uninstall.js +40 -219
- package/lib/cli/update.js +326 -523
- package/lib/cli/version-check.js +8 -72
- package/lib/cli/version-helpers.js +14 -87
- package/lib/migrations/helpers/retire-agentrc-key.js +11 -52
- package/lib/migrations/index.js +17 -92
- package/lib/migrations/steps/2.1.0-retire-mi-drop-knobs.js +2 -15
- package/lib/migrations/steps/2.1.0-retire-verify-concurrency-cap.js +1 -13
- package/lib/migrations/steps/2.11.0-retire-max-seed-words.js +2 -15
- package/lib/migrations/steps/2.2.0-retire-epic-ac-tags.js +9 -38
- package/lib/migrations/steps/2.20.0-retire-codebase-snapshot.js +1 -13
- package/lib/migrations/steps/2.32.0-retire-lint-baseline-command.js +2 -27
- package/lib/migrations/steps/2.57.0-retire-delivery-limit-knobs.js +2 -23
- package/lib/migrations/steps/2.57.0-retire-planning-limit-knobs.js +2 -27
- package/lib/migrations/steps/2.60.0-retire-audit-results-autofile.js +21 -0
- package/lib/migrations/steps/strip-removed-agentrc-keys.js +333 -0
- package/package.json +17 -14
- package/.agents/docs/SDLC.md +0 -590
- package/.agents/docs/quality-gates.md +0 -1179
- package/.agents/rules/known-tooling-behavior.md +0 -150
- package/.agents/rules/orchestration-error-handling.md +0 -61
- package/.agents/rules/test-seams.md +0 -59
- package/.agents/schemas/baselines/lighthouse.schema.json +0 -59
- package/.agents/schemas/baselines/lint.schema.json +0 -47
- package/.agents/schemas/model-attribution.schema.json +0 -53
- package/.agents/scripts/check-action-pinning.js +0 -260
- package/.agents/scripts/check-audit-attribution.js +0 -302
- package/.agents/scripts/check-baseline-drift.js +0 -211
- package/.agents/scripts/check-baseline-scope.js +0 -362
- package/.agents/scripts/check-generated-validator.js +0 -202
- package/.agents/scripts/check-knip-entries.js +0 -159
- package/.agents/scripts/check-lifecycle-lint.js +0 -294
- package/.agents/scripts/check-pinned-override-notes.js +0 -102
- package/.agents/scripts/check-schema-references.js +0 -366
- package/.agents/scripts/check-test-portability.js +0 -512
- package/.agents/scripts/check-workflow-citations.js +0 -332
- package/.agents/scripts/check-workflow-cli-lint.js +0 -299
- package/.agents/scripts/check-workflow-timeouts.js +0 -291
- package/.agents/scripts/install-matrix-assert.js +0 -326
- package/.agents/scripts/lib/audit-advisories.js +0 -195
- package/.agents/scripts/lib/audit-attribution.js +0 -134
- package/.agents/scripts/lib/baselines/drift-detector.js +0 -351
- package/.agents/scripts/lib/baselines/kinds/lighthouse.js +0 -87
- package/.agents/scripts/lib/baselines/kinds/lint.js +0 -184
- package/.agents/scripts/lib/baselines/orphan-pruner.js +0 -233
- package/.agents/scripts/lib/baselines/scope-assert.js +0 -223
- package/.agents/scripts/lib/baselines/scope-inventory.js +0 -314
- package/.agents/scripts/lib/c8-cli-path.js +0 -21
- package/.agents/scripts/lib/config/gates/lighthouse.schema.js +0 -51
- package/.agents/scripts/lib/config/gates/lint.schema.js +0 -18
- package/.agents/scripts/lib/dynamic-workflow/architecture-report-contract.js +0 -70
- package/.agents/scripts/lib/dynamic-workflow/audit-orchestrator.js +0 -284
- package/.agents/scripts/lib/dynamic-workflow/clean-code-report-contract.js +0 -80
- package/.agents/scripts/lib/dynamic-workflow/degraded-coverage.js +0 -81
- package/.agents/scripts/lib/dynamic-workflow/documentation-report-contract.js +0 -87
- package/.agents/scripts/lib/dynamic-workflow/performance-report-contract.js +0 -74
- package/.agents/scripts/lib/dynamic-workflow/quality-report-contract.js +0 -90
- package/.agents/scripts/lib/dynamic-workflow/report-contract-core.js +0 -43
- package/.agents/scripts/lib/dynamic-workflow/security-report-contract.js +0 -83
- package/.agents/scripts/lib/fs-walk.js +0 -52
- package/.agents/scripts/lib/knip-config-resolver.js +0 -181
- package/.agents/scripts/lib/knip-entry-sync.js +0 -452
- package/.agents/scripts/lib/orchestration/model-attribution.js +0 -418
- package/.agents/scripts/lib/orchestration/story-plan-state.js +0 -33
- package/.agents/scripts/lib/orchestration/structured-comment-parser.js +0 -67
- package/.agents/scripts/lib/pinned-override-notes.js +0 -88
- package/.agents/scripts/lib/pinned-override-resolve.js +0 -212
- package/.agents/scripts/lib/test-isolate/cli-options.js +0 -93
- package/.agents/scripts/lib/test-isolate/env-snapshot-loader.js +0 -52
- package/.agents/scripts/lib/test-isolate/list-files.js +0 -90
- package/.agents/scripts/lib/test-isolate/parse-tap.js +0 -75
- package/.agents/scripts/lib/test-isolate/progress-log.js +0 -45
- package/.agents/scripts/lib/test-isolate/render-report.js +0 -97
- package/.agents/scripts/lib/test-isolate/run-isolate.js +0 -87
- package/.agents/scripts/lib/test-isolate/runner.js +0 -483
- package/.agents/scripts/lib/test-profile/parse-tap.js +0 -136
- package/.agents/scripts/lib/test-profile/render-report.js +0 -45
- package/.agents/scripts/lint-label-vocabulary.js +0 -214
- package/.agents/scripts/post-structured-comment.js +0 -127
- package/.agents/scripts/provision-git-hooks.js +0 -85
- package/.agents/scripts/prune-baseline-orphans.js +0 -181
- package/.agents/scripts/run-coverage.js +0 -197
- package/.agents/scripts/run-lint.js +0 -133
- package/.agents/scripts/run-test-profile.js +0 -129
- package/.agents/scripts/run-verify.js +0 -118
- package/.agents/scripts/test-isolate.js +0 -55
- package/.agents/scripts/update-dead-exports-baseline.js +0 -321
|
@@ -1,35 +1,16 @@
|
|
|
1
1
|
// .agents/scripts/lib/orchestration/ci-rerun-guard.js
|
|
2
2
|
/**
|
|
3
|
-
* ci-rerun-guard.js —
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* head-SHA discriminator, the auto-merge disarm, and the blocked-delivery
|
|
7
|
-
* escalation. `pr-watch-with-update.js` is the enforcement point; this
|
|
8
|
-
* module is the mechanism it drives.
|
|
3
|
+
* ci-rerun-guard.js — mechanism behind the no-rerun MUST in
|
|
4
|
+
* `rules/ci-remediation.md` § Verifier, driven by `pr-watch-with-update.js`:
|
|
5
|
+
* the CI failure digest, the head-SHA discriminator, and the block.
|
|
9
6
|
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
* watcher disarms on red and records the PR head SHA; the head SHA is then
|
|
18
|
-
* read at **re-arm** time, not at merge time.
|
|
19
|
-
*
|
|
20
|
-
* **Head SHA is the discriminator.** A green on a *different* head SHA is a
|
|
21
|
-
* fix at source — legal, and it retires the digest. A green on the *same*
|
|
22
|
-
* head SHA is a re-run of a failed job, which the rule forbids: the
|
|
23
|
-
* delivery hard-stops at `agent::blocked` and a CI-gap intake filing
|
|
24
|
-
* (`file-ci-gap.js`, carrying the run link and failure signature the digest
|
|
25
|
-
* already holds) is required before it can proceed.
|
|
26
|
-
*
|
|
27
|
-
* **Fail closed on an unverifiable green.** A digest whose head SHA is
|
|
28
|
-
* missing, or a current head SHA that `gh` could not resolve, leaves no
|
|
29
|
-
* evidence that the red was fixed at source. An unresolved red plus no
|
|
30
|
-
* evidence of a new commit is treated as a violation rather than waved
|
|
31
|
-
* through — the same unknown-is-blocking posture the arming probe takes on
|
|
32
|
-
* an unrecognized check state.
|
|
7
|
+
* Enforcement happens at the first red, not the rerun-green: native
|
|
8
|
+
* auto-merge fires server-side and races the watcher, so only the red is a
|
|
9
|
+
* race-free observation point. The watcher disarms on red and records the
|
|
10
|
+
* head SHA. A later green on a different SHA is a fix at source; on the
|
|
11
|
+
* same SHA it is a forbidden rerun, unless `file-ci-gap.js` recorded a
|
|
12
|
+
* `capacity`/`unreproducible-tier` allowance for that SHA (one rerun; it
|
|
13
|
+
* dies with the digest). A missing SHA on either side fails closed.
|
|
33
14
|
*/
|
|
34
15
|
|
|
35
16
|
import {
|
|
@@ -44,6 +25,7 @@ import { spawnChild } from '../child-exec.js';
|
|
|
44
25
|
import { resolveConfig } from '../config-resolver.js';
|
|
45
26
|
import { Logger } from '../Logger.js';
|
|
46
27
|
import { createProvider } from '../provider-factory.js';
|
|
28
|
+
import { isRerunPermitted } from './check-state.js';
|
|
47
29
|
import {
|
|
48
30
|
STATE_LABELS,
|
|
49
31
|
transitionTicketState,
|
|
@@ -54,13 +36,17 @@ import {
|
|
|
54
36
|
const MAX_PRIOR_REDS = 10;
|
|
55
37
|
|
|
56
38
|
/**
|
|
57
|
-
*
|
|
58
|
-
*
|
|
59
|
-
* on the v2 Story path (which has no Epic and invokes the watch with `--pr`
|
|
60
|
-
* alone) a red check wrote no digest at all, despite the module header
|
|
61
|
-
* advertising one. v2.0.0 removed the Epic tier; Story scope is the only
|
|
62
|
-
* scope.
|
|
39
|
+
* Verdicts earning the one same-SHA rerun: proven environment faults no
|
|
40
|
+
* commit can fix. `pre-existing` is excluded — a real defect on `main`.
|
|
63
41
|
*
|
|
42
|
+
* @type {readonly ['capacity', 'unreproducible-tier']}
|
|
43
|
+
*/
|
|
44
|
+
export const RERUN_ALLOWANCE_VERDICTS = Object.freeze([
|
|
45
|
+
'capacity',
|
|
46
|
+
'unreproducible-tier',
|
|
47
|
+
]);
|
|
48
|
+
|
|
49
|
+
/**
|
|
64
50
|
* @param {{ storyId?: number|string|null }} opts
|
|
65
51
|
* @returns {{ kind: 'story', id: number } | null}
|
|
66
52
|
*/
|
|
@@ -73,9 +59,8 @@ export function resolveDigestScope({ storyId = null } = {}) {
|
|
|
73
59
|
}
|
|
74
60
|
|
|
75
61
|
/**
|
|
76
|
-
* Coarse
|
|
77
|
-
*
|
|
78
|
-
* next move (which `/loop` unit to reach for), not a root-cause verdict.
|
|
62
|
+
* Coarse classification from a check name; steers the next move, not a
|
|
63
|
+
* root-cause verdict.
|
|
79
64
|
*
|
|
80
65
|
* @param {string} name failing required-check name.
|
|
81
66
|
* @returns {'test'|'lint'|'baseline'|'build'|'unknown'}
|
|
@@ -90,13 +75,7 @@ export function classifyFailure(name) {
|
|
|
90
75
|
}
|
|
91
76
|
|
|
92
77
|
/**
|
|
93
|
-
*
|
|
94
|
-
* no scope can be keyed (the digest is scoped by filename and has nothing
|
|
95
|
-
* to key on).
|
|
96
|
-
*
|
|
97
|
-
* Module-private: `writeCiDigest` / `readCiDigest` / `retireCiDigest` are the
|
|
98
|
-
* only callers and are the surface worth pinning, so the keying is asserted
|
|
99
|
-
* through them rather than through an export nothing in production reaches.
|
|
78
|
+
* Digest paths for a scope; `null` without a Story id to key on.
|
|
100
79
|
*
|
|
101
80
|
* @param {{ storyId?: number|string|null, tempRoot: string, cwd: string }} opts
|
|
102
81
|
* @returns {{ scope: { kind: 'story', id: number }, jsonPath: string, mdPath: string } | null}
|
|
@@ -114,10 +93,7 @@ function ciDigestPaths({ storyId = null, tempRoot, cwd }) {
|
|
|
114
93
|
}
|
|
115
94
|
|
|
116
95
|
/**
|
|
117
|
-
*
|
|
118
|
-
* job log so the digest carries an actionable excerpt. Best-effort:
|
|
119
|
-
* returns an empty tail when the run id is unknown or `gh` errors.
|
|
120
|
-
* Injected into `writeCiDigest` so tests never shell out.
|
|
96
|
+
* Tail of the failed job log; best-effort, empty on any failure.
|
|
121
97
|
*/
|
|
122
98
|
function ghRunLogTail({ runId, cwd, spawnFn, maxLines = 40 }) {
|
|
123
99
|
if (!runId) return '';
|
|
@@ -133,11 +109,8 @@ function ghRunLogTail({ runId, cwd, spawnFn, maxLines = 40 }) {
|
|
|
133
109
|
}
|
|
134
110
|
|
|
135
111
|
/**
|
|
136
|
-
*
|
|
137
|
-
*
|
|
138
|
-
* field carries the run URL whose trailing path segment is the run id. The
|
|
139
|
-
* URL matters as much as the id, because the intake issue a
|
|
140
|
-
* rerun violation demands must carry a run **link**.
|
|
112
|
+
* The failing check's run id and URL (the intake filing needs the link).
|
|
113
|
+
* Best-effort.
|
|
141
114
|
*
|
|
142
115
|
* @returns {{ runId: string|null, url: string|null }}
|
|
143
116
|
*/
|
|
@@ -161,10 +134,8 @@ function resolveFailingCheckRun({ prRef, checkName, cwd, spawnFn }) {
|
|
|
161
134
|
}
|
|
162
135
|
|
|
163
136
|
/**
|
|
164
|
-
*
|
|
165
|
-
*
|
|
166
|
-
* `null` when `gh` fails or the payload is unparseable; callers treat an
|
|
167
|
-
* unresolvable head as unverifiable, never as "changed".
|
|
137
|
+
* The PR's head SHA; `null` on failure, which callers treat as
|
|
138
|
+
* unverifiable, never as "changed".
|
|
168
139
|
*
|
|
169
140
|
* @param {{ prRef: string, cwd: string, spawnFn?: Function }} opts
|
|
170
141
|
* @returns {string|null}
|
|
@@ -189,60 +160,8 @@ export function resolvePrHeadSha({ prRef, cwd, spawnFn }) {
|
|
|
189
160
|
}
|
|
190
161
|
|
|
191
162
|
/**
|
|
192
|
-
*
|
|
193
|
-
*
|
|
194
|
-
* the guard wants. Distinguishing this from a genuine disarm failure is
|
|
195
|
-
* load-bearing: an armed PR that could not be disarmed is a blocker, while
|
|
196
|
-
* a never-armed PR is the desired end state.
|
|
197
|
-
*/
|
|
198
|
-
const NOT_ARMED = /not enabled|isn't enabled|is not set|no auto-?merge/i;
|
|
199
|
-
|
|
200
|
-
/**
|
|
201
|
-
* Disarm GitHub native auto-merge for the PR — the race-free response to the
|
|
202
|
-
* first red. Never throws.
|
|
203
|
-
*
|
|
204
|
-
* @param {{ prRef: string, cwd: string, spawnFn?: Function }} opts
|
|
205
|
-
* @returns {{ disarmed: boolean, alreadyUnarmed: boolean, detail: string }}
|
|
206
|
-
* `disarmed` is true when the PR is (now) un-armed; `alreadyUnarmed`
|
|
207
|
-
* distinguishes "there was nothing armed" from an executed disarm.
|
|
208
|
-
*/
|
|
209
|
-
export function disarmAutoMerge({ prRef, cwd, spawnFn }) {
|
|
210
|
-
let result;
|
|
211
|
-
try {
|
|
212
|
-
result = spawnChild('gh', ['pr', 'merge', prRef, '--disable-auto'], {
|
|
213
|
-
run: spawnFn,
|
|
214
|
-
cwd,
|
|
215
|
-
});
|
|
216
|
-
} catch (err) {
|
|
217
|
-
return {
|
|
218
|
-
disarmed: false,
|
|
219
|
-
alreadyUnarmed: false,
|
|
220
|
-
detail: `gh-spawn-error: ${err?.message ?? err}`,
|
|
221
|
-
};
|
|
222
|
-
}
|
|
223
|
-
const status = result?.status ?? 1;
|
|
224
|
-
const stderr = String(result?.stderr ?? '').trim();
|
|
225
|
-
if (status === 0) {
|
|
226
|
-
return { disarmed: true, alreadyUnarmed: false, detail: 'disarmed' };
|
|
227
|
-
}
|
|
228
|
-
if (NOT_ARMED.test(stderr)) {
|
|
229
|
-
return {
|
|
230
|
-
disarmed: true,
|
|
231
|
-
alreadyUnarmed: true,
|
|
232
|
-
detail: `auto-merge was not armed: ${stderr.slice(0, 160)}`,
|
|
233
|
-
};
|
|
234
|
-
}
|
|
235
|
-
return {
|
|
236
|
-
disarmed: false,
|
|
237
|
-
alreadyUnarmed: false,
|
|
238
|
-
detail: `gh-exit-${status}: ${stderr.slice(0, 200)}`,
|
|
239
|
-
};
|
|
240
|
-
}
|
|
241
|
-
|
|
242
|
-
/**
|
|
243
|
-
* Read the CI failure digest for a scope, or `null` when none exists (or it
|
|
244
|
-
* is unreadable / malformed — an unparseable digest carries no enforceable
|
|
245
|
-
* evidence, so it is treated as absent).
|
|
163
|
+
* The digest, or `null`; a malformed one carries no evidence and counts as
|
|
164
|
+
* absent.
|
|
246
165
|
*
|
|
247
166
|
* @param {{ storyId?: number|string|null, tempRoot: string, cwd: string }} opts
|
|
248
167
|
* @returns {object|null}
|
|
@@ -259,8 +178,7 @@ export function readCiDigest({ storyId = null, tempRoot, cwd }) {
|
|
|
259
178
|
}
|
|
260
179
|
|
|
261
180
|
/**
|
|
262
|
-
* Retire the digest
|
|
263
|
-
* source. Best-effort; returns the paths removed (or `null`).
|
|
181
|
+
* Retire the digest once its red is resolved.
|
|
264
182
|
*
|
|
265
183
|
* @param {{ storyId?: number|string|null, tempRoot: string, cwd: string }} opts
|
|
266
184
|
* @returns {{ jsonPath: string, mdPath: string } | null}
|
|
@@ -274,9 +192,7 @@ export function retireCiDigest({ storyId = null, tempRoot, cwd }) {
|
|
|
274
192
|
}
|
|
275
193
|
|
|
276
194
|
/**
|
|
277
|
-
*
|
|
278
|
-
* `priorReds`, so a second red on a new head never silently erases the
|
|
279
|
-
* evidence of an unresolved earlier one.
|
|
195
|
+
* Summary kept in `priorReds` so a new red never erases an unresolved one.
|
|
280
196
|
*/
|
|
281
197
|
function summarizeRed(digest) {
|
|
282
198
|
return {
|
|
@@ -289,9 +205,7 @@ function summarizeRed(digest) {
|
|
|
289
205
|
}
|
|
290
206
|
|
|
291
207
|
/**
|
|
292
|
-
*
|
|
293
|
-
* re-red on the SAME head is the same unresolved red observed again, so it
|
|
294
|
-
* is not duplicated into the history.
|
|
208
|
+
* A re-red on the same head is not duplicated into history.
|
|
295
209
|
*/
|
|
296
210
|
function carryPriorReds(previous, headSha) {
|
|
297
211
|
if (!previous) return [];
|
|
@@ -303,10 +217,6 @@ function carryPriorReds(previous, headSha) {
|
|
|
303
217
|
return history.slice(-MAX_PRIOR_REDS);
|
|
304
218
|
}
|
|
305
219
|
|
|
306
|
-
/**
|
|
307
|
-
* Render the human-readable digest. Names the head SHA, because that is the
|
|
308
|
-
* field the green path adjudicates on.
|
|
309
|
-
*/
|
|
310
220
|
function renderDigestMarkdown(digest, failures) {
|
|
311
221
|
return [
|
|
312
222
|
`# CI failure digest — Story #${digest.storyId} (PR #${digest.prNumber})`,
|
|
@@ -332,7 +242,9 @@ function renderDigestMarkdown(digest, failures) {
|
|
|
332
242
|
'',
|
|
333
243
|
'A green on THIS head SHA is a re-run of a failed job and is forbidden',
|
|
334
244
|
'(`.agents/rules/ci-remediation.md` § Verifier). Fix at source and push a',
|
|
335
|
-
'new commit — the head SHA moving is what clears this digest.',
|
|
245
|
+
'new commit — the head SHA moving is what clears this digest. The one',
|
|
246
|
+
'exception: `file-ci-gap.js --verdict capacity|unreproducible-tier` records',
|
|
247
|
+
'an allowance for this head SHA, and exactly one rerun is then admitted.',
|
|
336
248
|
'',
|
|
337
249
|
'## `gh run view --log-failed` tail',
|
|
338
250
|
'',
|
|
@@ -344,9 +256,7 @@ function renderDigestMarkdown(digest, failures) {
|
|
|
344
256
|
}
|
|
345
257
|
|
|
346
258
|
/**
|
|
347
|
-
* Write the
|
|
348
|
-
* the two paths written, or `null` when no story id was supplied (the
|
|
349
|
-
* digest is scoped by filename and has nothing to key on).
|
|
259
|
+
* Write the digest (`.json` + `.md`); `null` without a Story id.
|
|
350
260
|
*
|
|
351
261
|
* @param {object} opts
|
|
352
262
|
* @param {number|string|null} [opts.storyId] The v2 delivery scope.
|
|
@@ -358,9 +268,7 @@ function renderDigestMarkdown(digest, failures) {
|
|
|
358
268
|
* @param {string} opts.prRef
|
|
359
269
|
* @param {Function} [opts.checkRunFn]
|
|
360
270
|
* @param {Function} [opts.logTailFn]
|
|
361
|
-
* @param {Function} [opts.spawnFn] Child runner
|
|
362
|
-
* `gh` probes, so their real bodies can be exercised without shelling out.
|
|
363
|
-
* Ignored when `checkRunFn` / `logTailFn` are replaced outright.
|
|
271
|
+
* @param {Function} [opts.spawnFn] Child runner for the default `gh` probes.
|
|
364
272
|
* @returns {{ jsonPath: string, mdPath: string } | null}
|
|
365
273
|
*/
|
|
366
274
|
export function writeCiDigest({
|
|
@@ -409,15 +317,67 @@ export function writeCiDigest({
|
|
|
409
317
|
}
|
|
410
318
|
|
|
411
319
|
/**
|
|
412
|
-
*
|
|
320
|
+
* Stamp the one-rerun allowance, called by `file-ci-gap.js` after filing.
|
|
321
|
+
* Keyed on the digest's own head SHA so it cannot apply to a later head.
|
|
322
|
+
* Non-throwing; `null` when nothing was written (the guard keeps blocking).
|
|
323
|
+
*
|
|
324
|
+
* @param {{
|
|
325
|
+
* storyId?: number|string|null,
|
|
326
|
+
* verdict: string,
|
|
327
|
+
* tempRoot: string,
|
|
328
|
+
* cwd: string,
|
|
329
|
+
* now?: () => Date,
|
|
330
|
+
* }} opts
|
|
331
|
+
* @returns {{ verdict: string, headSha: string, recordedAt: string } | null}
|
|
332
|
+
*/
|
|
333
|
+
export function recordRerunAllowance({
|
|
334
|
+
storyId = null,
|
|
335
|
+
verdict,
|
|
336
|
+
tempRoot,
|
|
337
|
+
cwd,
|
|
338
|
+
now = () => new Date(),
|
|
339
|
+
}) {
|
|
340
|
+
if (!RERUN_ALLOWANCE_VERDICTS.includes(verdict)) return null;
|
|
341
|
+
const paths = ciDigestPaths({ storyId, tempRoot, cwd });
|
|
342
|
+
const digest = readCiDigest({ storyId, tempRoot, cwd });
|
|
343
|
+
if (!paths || !digest?.headSha) return null;
|
|
344
|
+
const allowance = {
|
|
345
|
+
verdict,
|
|
346
|
+
headSha: digest.headSha,
|
|
347
|
+
recordedAt: now().toISOString(),
|
|
348
|
+
};
|
|
349
|
+
try {
|
|
350
|
+
writeFileSync(
|
|
351
|
+
paths.jsonPath,
|
|
352
|
+
`${JSON.stringify({ ...digest, rerunAllowance: allowance }, null, 2)}\n`,
|
|
353
|
+
);
|
|
354
|
+
} catch {
|
|
355
|
+
return null;
|
|
356
|
+
}
|
|
357
|
+
return allowance;
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
/**
|
|
361
|
+
* @param {object|null} digest
|
|
362
|
+
* @param {string|null} headSha
|
|
363
|
+
* @returns {{ verdict: string, headSha: string } | null}
|
|
364
|
+
*/
|
|
365
|
+
function allowanceFor(digest, headSha) {
|
|
366
|
+
const allowance = digest?.rerunAllowance;
|
|
367
|
+
return allowance &&
|
|
368
|
+
typeof allowance === 'object' &&
|
|
369
|
+
headSha &&
|
|
370
|
+
allowance.headSha === headSha &&
|
|
371
|
+
RERUN_ALLOWANCE_VERDICTS.includes(allowance.verdict)
|
|
372
|
+
? allowance
|
|
373
|
+
: null;
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
/**
|
|
377
|
+
* Adjudicate an all-green watch against the scope's digest (see header).
|
|
413
378
|
*
|
|
414
379
|
* @param {{ digest: object|null, headSha: string|null }} opts
|
|
415
|
-
* @returns {{ verdict: 'clean'|'fix-at-source'|'rerun'|'unverifiable', reason: string }}
|
|
416
|
-
* - `clean` — no digest: this delivery never went red.
|
|
417
|
-
* - `fix-at-source` — the head SHA moved since the red; legal.
|
|
418
|
-
* - `rerun` — green on the SAME head SHA; forbidden.
|
|
419
|
-
* - `unverifiable` — an unresolved red with no head-SHA evidence either
|
|
420
|
-
* side; fail closed and treat it as a rerun.
|
|
380
|
+
* @returns {{ verdict: 'clean'|'fix-at-source'|'rerun-permitted'|'rerun'|'unverifiable', reason: string }}
|
|
421
381
|
*/
|
|
422
382
|
export function classifyGreenVerdict({ digest, headSha }) {
|
|
423
383
|
if (!digest) return { verdict: 'clean', reason: 'no digest for this scope' };
|
|
@@ -429,10 +389,20 @@ export function classifyGreenVerdict({ digest, headSha }) {
|
|
|
429
389
|
};
|
|
430
390
|
}
|
|
431
391
|
if (recorded === headSha) {
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
392
|
+
// Digests only record required checks.
|
|
393
|
+
const allowance = allowanceFor(digest, headSha);
|
|
394
|
+
return isRerunPermitted({
|
|
395
|
+
required: true,
|
|
396
|
+
allowanceRecorded: allowance !== null,
|
|
397
|
+
})
|
|
398
|
+
? {
|
|
399
|
+
verdict: 'rerun-permitted',
|
|
400
|
+
reason: `one rerun admitted: \`${allowance.verdict}\` verdict recorded for this head SHA (${headSha})`,
|
|
401
|
+
}
|
|
402
|
+
: {
|
|
403
|
+
verdict: 'rerun',
|
|
404
|
+
reason: `green on the SAME head SHA the red was recorded against (${headSha})`,
|
|
405
|
+
};
|
|
436
406
|
}
|
|
437
407
|
return {
|
|
438
408
|
verdict: 'fix-at-source',
|
|
@@ -440,11 +410,7 @@ export function classifyGreenVerdict({ digest, headSha }) {
|
|
|
440
410
|
};
|
|
441
411
|
}
|
|
442
412
|
|
|
443
|
-
/**
|
|
444
|
-
* The failure signature an intake filing must carry (see `file-ci-gap.js`):
|
|
445
|
-
* the first
|
|
446
|
-
* distinctive line of the captured failed-job log.
|
|
447
|
-
*/
|
|
413
|
+
/** First non-blank failed-log line: the signature an intake filing carries. */
|
|
448
414
|
function failureSignature(digest) {
|
|
449
415
|
const tail = String(digest?.logTail ?? '');
|
|
450
416
|
const line = tail
|
|
@@ -455,8 +421,7 @@ function failureSignature(digest) {
|
|
|
455
421
|
}
|
|
456
422
|
|
|
457
423
|
/**
|
|
458
|
-
*
|
|
459
|
-
* body and, line by line, as the watcher's stderr report.
|
|
424
|
+
* The friction comment body, also the watcher's stderr report.
|
|
460
425
|
*
|
|
461
426
|
* @param {{ digest: object, headSha: string|null, prNumber: number, reason: string }} opts
|
|
462
427
|
* @returns {string}
|
|
@@ -487,18 +452,17 @@ export function formatRerunViolation({ digest, headSha, prNumber, reason }) {
|
|
|
487
452
|
' <consumer|framework|platform> --evidence "<proof reading>"` — then',
|
|
488
453
|
' resume. It carries the run link and signature above, routes the filing',
|
|
489
454
|
' to whoever owns the fault, and updates the existing ticket when this',
|
|
490
|
-
' signature has been seen before.',
|
|
455
|
+
' signature has been seen before. A `capacity` or `unreproducible-tier`',
|
|
456
|
+
' verdict also records the one-rerun allowance for this head SHA, so a',
|
|
457
|
+
' single rerun of the failed job is then admitted; `pre-existing` does',
|
|
458
|
+
' not, because it names a real defect a rerun cannot remove.',
|
|
491
459
|
].join('\n');
|
|
492
460
|
}
|
|
493
461
|
|
|
494
462
|
/**
|
|
495
|
-
*
|
|
496
|
-
* `
|
|
497
|
-
*
|
|
498
|
-
* what actually stops the delivery.
|
|
499
|
-
*
|
|
500
|
-
* Routed through `transitionTicketState` rather than a bare label write so
|
|
501
|
-
* the Projects v2 column sync runs (Story #2548 / #4539).
|
|
463
|
+
* Post the `friction` comment and flip to `agent::blocked` (via
|
|
464
|
+
* `transitionTicketState` so the board column syncs). Best-effort: the
|
|
465
|
+
* watcher's non-zero exit is what actually stops delivery.
|
|
502
466
|
*
|
|
503
467
|
* @param {{
|
|
504
468
|
* storyId: number|string,
|