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,67 +1,23 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* project-meta-cache — on-disk cache
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
* performs each flip in a *separate cold CLI process* (init → executing,
|
|
9
|
-
* close → closing, confirm-merge → done, plus `resync-status-column`), so
|
|
10
|
-
* the in-process `_meta` cache is always empty and every flip re-pays
|
|
11
|
-
* `resolveProjectMeta` + an item-id lookup + the mutation (~3 GraphQL
|
|
12
|
-
* round-trips).
|
|
13
|
-
*
|
|
14
|
-
* The board metadata is **repo-invariant** — it changes only when the
|
|
15
|
-
* Status single-select field is reconfigured — so it is a prime candidate
|
|
16
|
-
* for an on-disk cache that survives across the cold processes. This module
|
|
17
|
-
* persists the resolved metadata to a small JSON file under the resolved
|
|
18
|
-
* `tempRoot`, keyed by `owner/projectNumber`, carrying a TTL. Correctness
|
|
19
|
-
* is bounded by "the mutation still validates against the live board": a
|
|
20
|
-
* stale entry at worst causes one failed mutation, which the caller treats
|
|
21
|
-
* as a signal to invalidate the entry and re-resolve — never a wrong write.
|
|
22
|
-
*
|
|
23
|
-
* Layout: `<tempRoot>/cache/project-meta.json`, a single JSON object keyed
|
|
24
|
-
* by `<owner>/<projectNumber>`:
|
|
25
|
-
*
|
|
26
|
-
* {
|
|
27
|
-
* "dsj1984/1": {
|
|
28
|
-
* "cachedAt": 1718000000000,
|
|
29
|
-
* "projectId": "PVT_…",
|
|
30
|
-
* "fieldId": "PVTSSF_…",
|
|
31
|
-
* "options": { "Todo": "abc", "In Progress": "def", "Done": "ghi" }
|
|
32
|
-
* }
|
|
33
|
-
* }
|
|
34
|
-
*
|
|
35
|
-
* The `options` map is serialised as a plain object and re-hydrated into a
|
|
36
|
-
* `Map<name, id>` on read so the ColumnSync call site is identical whether
|
|
37
|
-
* the metadata came from the disk cache or a live resolve.
|
|
38
|
-
*
|
|
39
|
-
* The cache file lives under `tempRoot`, which is gitignored
|
|
40
|
-
* (`temp/` in `.gitignore`), so it introduces no new tracked artifact.
|
|
2
|
+
* project-meta-cache — on-disk cache of repo-invariant Projects v2 board
|
|
3
|
+
* metadata (`{ projectId, fieldId, options }`), so each cold CLI process that
|
|
4
|
+
* flips a label skips re-resolving it. Stored at
|
|
5
|
+
* `<tempRoot>/cache/project-meta.json`, keyed `<owner>/<projectNumber>`, with
|
|
6
|
+
* a TTL. A stale entry at worst fails one mutation, which the caller answers
|
|
7
|
+
* by invalidating and re-resolving — never a wrong write.
|
|
41
8
|
*/
|
|
42
9
|
|
|
43
10
|
import fs from 'node:fs';
|
|
44
11
|
import path from 'node:path';
|
|
45
12
|
import { anchorTempRoot, tempRootFrom } from '../config/temp-paths.js';
|
|
46
13
|
|
|
47
|
-
/**
|
|
48
|
-
* Default time-to-live for a cached board-metadata entry, in milliseconds.
|
|
49
|
-
* Board metadata is repo-invariant (it only changes on a manual Status
|
|
50
|
-
* field reconfiguration), so a generous TTL is safe — and a stale entry is
|
|
51
|
-
* self-healing via invalidate-on-error regardless. One hour comfortably
|
|
52
|
-
* spans a single `/single-story-deliver` run's four cold flips while still
|
|
53
|
-
* forcing a periodic re-resolve.
|
|
54
|
-
*/
|
|
14
|
+
/** One hour spans a delivery run's cold flips yet forces periodic refresh. */
|
|
55
15
|
const DEFAULT_META_TTL_MS = 60 * 60 * 1000;
|
|
56
16
|
|
|
57
17
|
/**
|
|
58
|
-
*
|
|
59
|
-
* (anchored) resolved `tempRoot`. A relative `tempRoot` is anchored to the
|
|
60
|
-
* main checkout root so a worktree child and the main-checkout host
|
|
61
|
-
* converge on the same file (Story #3900 semantics, reused here).
|
|
18
|
+
* Anchored to the main checkout so worktree children and the host share it.
|
|
62
19
|
*
|
|
63
|
-
* @param {object} [config] Optional resolved config bag.
|
|
64
|
-
* default (`temp`).
|
|
20
|
+
* @param {object} [config] Optional resolved config bag.
|
|
65
21
|
* @returns {string}
|
|
66
22
|
*/
|
|
67
23
|
function projectMetaCachePath(config) {
|
|
@@ -73,12 +29,9 @@ function projectMetaCachePath(config) {
|
|
|
73
29
|
}
|
|
74
30
|
|
|
75
31
|
/**
|
|
76
|
-
* Build the per-board cache key from `(owner, projectNumber)`.
|
|
77
|
-
*
|
|
78
32
|
* @param {string|null|undefined} owner
|
|
79
33
|
* @param {number|string|null|undefined} projectNumber
|
|
80
|
-
* @returns {string|null}
|
|
81
|
-
* is missing (an un-keyable board — caller skips the cache).
|
|
34
|
+
* @returns {string|null} null when un-keyable (caller skips the cache).
|
|
82
35
|
*/
|
|
83
36
|
function projectMetaCacheKey(owner, projectNumber) {
|
|
84
37
|
if (!owner || projectNumber === null || projectNumber === undefined) {
|
|
@@ -88,9 +41,7 @@ function projectMetaCacheKey(owner, projectNumber) {
|
|
|
88
41
|
}
|
|
89
42
|
|
|
90
43
|
/**
|
|
91
|
-
*
|
|
92
|
-
* any read/parse failure (missing file, malformed JSON) so the caller treats
|
|
93
|
-
* a corrupt cache as a cold miss rather than throwing.
|
|
44
|
+
* A missing or corrupt file reads as `{}` — a cold miss.
|
|
94
45
|
*
|
|
95
46
|
* @param {string} filePath
|
|
96
47
|
* @returns {Record<string, object>}
|
|
@@ -106,11 +57,7 @@ function readCacheFile(filePath) {
|
|
|
106
57
|
}
|
|
107
58
|
|
|
108
59
|
/**
|
|
109
|
-
*
|
|
110
|
-
*
|
|
111
|
-
* Returns the re-hydrated `{ projectId, fieldId, options: Map }` descriptor
|
|
112
|
-
* when a fresh (within TTL) entry exists, or `null` on a miss / expired /
|
|
113
|
-
* malformed entry. Never throws — a read failure is a cache miss.
|
|
60
|
+
* A fresh entry with `options` re-hydrated to a Map, else `null`. Never throws.
|
|
114
61
|
*
|
|
115
62
|
* @param {{
|
|
116
63
|
* owner?: string|null,
|
|
@@ -142,7 +89,6 @@ export function readProjectMetaCache(opts = {}) {
|
|
|
142
89
|
) {
|
|
143
90
|
return null;
|
|
144
91
|
}
|
|
145
|
-
// TTL check — an expired entry is a miss so the caller re-resolves.
|
|
146
92
|
if (now - cachedAt > ttlMs) return null;
|
|
147
93
|
|
|
148
94
|
return {
|
|
@@ -153,13 +99,7 @@ export function readProjectMetaCache(opts = {}) {
|
|
|
153
99
|
}
|
|
154
100
|
|
|
155
101
|
/**
|
|
156
|
-
*
|
|
157
|
-
*
|
|
158
|
-
* The `options` value may be a `Map<name,id>` or a plain object; it is
|
|
159
|
-
* normalised to a plain object on disk. Best-effort: any write failure is
|
|
160
|
-
* swallowed (the cache is a pure optimisation — a failed write just means
|
|
161
|
-
* the next process re-resolves). Writes the rest of the store back intact so
|
|
162
|
-
* sibling board entries are preserved.
|
|
102
|
+
* Best-effort write preserving sibling board entries.
|
|
163
103
|
*
|
|
164
104
|
* @param {{
|
|
165
105
|
* owner?: string|null,
|
|
@@ -206,13 +146,8 @@ export function writeProjectMetaCache(opts = {}) {
|
|
|
206
146
|
}
|
|
207
147
|
|
|
208
148
|
/**
|
|
209
|
-
*
|
|
210
|
-
*
|
|
211
|
-
* Called when a GraphQL error fires against a board whose metadata came from
|
|
212
|
-
* the cache, so a mid-run board reconfiguration self-heals on the next flip
|
|
213
|
-
* (which re-resolves and re-writes). Best-effort and idempotent: a missing
|
|
214
|
-
* entry or unreadable file is a no-op. Returns true when an entry was
|
|
215
|
-
* actually removed.
|
|
149
|
+
* Drop an entry after a GraphQL error against cached metadata, so a board
|
|
150
|
+
* reconfiguration self-heals. Best-effort, idempotent.
|
|
216
151
|
*
|
|
217
152
|
* @param {{
|
|
218
153
|
* owner?: string|null,
|
|
@@ -1,40 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* project-meta-resolver —
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* Both `ColumnSync._loadMeta` (`lib/orchestration/column-sync.js`) and
|
|
7
|
-
* `resolveProjectIdByNumber` (`lib/bootstrap/workflow-audit.js`)
|
|
8
|
-
* needed to turn a `(owner, projectNumber)` pair into a Projects v2
|
|
9
|
-
* board node id. Each historically resolved only **user-owned** /
|
|
10
|
-
* `viewer`-owned boards: `viewer.projectV2(number:)` first, then
|
|
11
|
-
* `user(login:$owner).projectV2(number:)` (Story #3560). Neither had an
|
|
12
|
-
* `organization(login:$owner)` branch, so for an **org-owned** board
|
|
13
|
-
* every lookup failed with `NOT_FOUND` and the `agent::*` → board
|
|
14
|
-
* Status mirror silently no-oped (reproduced on `Beestera/swarm-os`).
|
|
15
|
-
*
|
|
16
|
-
* Fix:
|
|
17
|
-
* A single shared resolver that walks the owner-type ladder in order —
|
|
18
|
-
* `organization(login:$owner)` → `user(login:$owner)` → `viewer` —
|
|
19
|
-
* returning the first board it can resolve. Centralising the ladder in
|
|
20
|
-
* one place means the org path can never again drift between the two
|
|
21
|
-
* call sites.
|
|
22
|
-
*
|
|
23
|
-
* The resolver issues a sub-query for the project itself (`field(name:
|
|
24
|
-
* "Status") { … }` for the column-sync caller, or a bare `id` for the
|
|
25
|
-
* workflow-audit caller). Pass the desired projection in via
|
|
26
|
-
* `projectFields`; the resolver wraps it in the right owner scope and
|
|
27
|
-
* extracts the resolved `projectV2` node.
|
|
2
|
+
* project-meta-resolver — the one Projects v2 owner-resolution ladder
|
|
3
|
+
* (`organization` → `user` → `viewer`), shared so an org-owned board can
|
|
4
|
+
* never again silently fail to resolve at one call site. Callers pass the
|
|
5
|
+
* `projectV2 { … }` selection body as `projectFields`.
|
|
28
6
|
*/
|
|
29
7
|
|
|
30
8
|
/**
|
|
31
|
-
*
|
|
32
|
-
*
|
|
33
|
-
*
|
|
34
|
-
* `organization` and `user` are keyed by `login: $owner`; `viewer` is the
|
|
35
|
-
* authenticated identity and takes no owner argument. The viewer rung is
|
|
36
|
-
* the historical default and stays last so a configured owner is always
|
|
37
|
-
* preferred over the ambient identity.
|
|
9
|
+
* Priority order. `viewer` (the ambient identity) is last so a configured
|
|
10
|
+
* owner always wins.
|
|
38
11
|
*/
|
|
39
12
|
const OWNER_SCOPES = Object.freeze([
|
|
40
13
|
{ root: 'organization', needsOwner: true },
|
|
@@ -43,11 +16,8 @@ const OWNER_SCOPES = Object.freeze([
|
|
|
43
16
|
]);
|
|
44
17
|
|
|
45
18
|
/**
|
|
46
|
-
* Build the GraphQL document for a single owner scope.
|
|
47
|
-
*
|
|
48
19
|
* @param {{ root: string, needsOwner: boolean }} scope
|
|
49
|
-
* @param {string} projectFields — the
|
|
50
|
-
* selection body (everything between the braces).
|
|
20
|
+
* @param {string} projectFields — the selection body inside `projectV2 { … }`.
|
|
51
21
|
* @returns {string}
|
|
52
22
|
*/
|
|
53
23
|
function buildScopedQuery(scope, projectFields) {
|
|
@@ -72,17 +42,8 @@ function buildScopedQuery(scope, projectFields) {
|
|
|
72
42
|
}
|
|
73
43
|
|
|
74
44
|
/**
|
|
75
|
-
*
|
|
76
|
-
*
|
|
77
|
-
* Tries `organization(login:$owner)` → `user(login:$owner)` → `viewer` in
|
|
78
|
-
* order, returning the first non-null `projectV2` node. A scope that
|
|
79
|
-
* throws (e.g. GitHub returns `NOT_FOUND` for the wrong owner type) or
|
|
80
|
-
* resolves to `null` is treated as a miss and the ladder advances to the
|
|
81
|
-
* next rung. Returns `null` when every rung misses.
|
|
82
|
-
*
|
|
83
|
-
* When `owner` is falsy, only the `viewer` rung is attempted (there is no
|
|
84
|
-
* login to scope `organization`/`user` by) — this preserves the original
|
|
85
|
-
* viewer-only behaviour for callers that never configured a project owner.
|
|
45
|
+
* The first non-null `projectV2` node down the ladder; a throwing or null
|
|
46
|
+
* rung is a miss. With no `owner`, only `viewer` is tried.
|
|
86
47
|
*
|
|
87
48
|
* @param {{
|
|
88
49
|
* provider: { graphql: Function },
|
|
@@ -104,7 +65,6 @@ export async function resolveProjectMeta(args) {
|
|
|
104
65
|
}
|
|
105
66
|
|
|
106
67
|
for (const scope of OWNER_SCOPES) {
|
|
107
|
-
// Skip the owner-scoped rungs when no owner login is available.
|
|
108
68
|
if (scope.needsOwner && !owner) continue;
|
|
109
69
|
|
|
110
70
|
const query = buildScopedQuery(scope, projectFields);
|
|
@@ -116,8 +76,7 @@ export async function resolveProjectMeta(args) {
|
|
|
116
76
|
try {
|
|
117
77
|
data = await provider.graphql(query, vars);
|
|
118
78
|
} catch {
|
|
119
|
-
// Wrong owner type (NOT_FOUND)
|
|
120
|
-
// ladder rather than aborting the whole resolution.
|
|
79
|
+
// Wrong owner type (NOT_FOUND) etc. — advance the ladder.
|
|
121
80
|
continue;
|
|
122
81
|
}
|
|
123
82
|
|
|
@@ -1,56 +1,18 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* reassert-status-column — re-fire `ColumnSync`
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* Why a dedicated helper:
|
|
7
|
-
* `transitionTicketState` already calls `syncProjectStatusColumn` at
|
|
8
|
-
* label-flip time, but the GitHub built-in `Pull request merged` /
|
|
9
|
-
* `Pull request linked to issue` workflows fire ~minutes after the
|
|
10
|
-
* PR auto-merges and overwrite Status. The orchestrator's close path
|
|
11
|
-
* has long-since exited by then, so "the last write" is the bot's.
|
|
12
|
-
* This helper is invoked AFTER the merge confirmation step (via the
|
|
13
|
-
* `resync-status-column.js` CLI the `/single-story-deliver` workflow
|
|
14
|
-
* doc calls) to reassert authority and win the race deterministically.
|
|
15
|
-
*
|
|
16
|
-
* Operators who disable the conflicting bot workflows (via the
|
|
17
|
-
* `--reap-conflicting-workflows` bootstrap flag) get the same outcome
|
|
18
|
-
* without needing the re-sync. The helper is defense-in-depth and is
|
|
19
|
-
* cheap to fire — Story #2876 added a bounded poll-and-retry loop so
|
|
20
|
-
* the defense actually works against an asynchronous bot overwrite
|
|
21
|
-
* that lands after the initial mutation. Without the loop, a one-shot
|
|
22
|
-
* mutation routinely lost the race (reproduced on Story #2871 /
|
|
23
|
-
* PR #2872).
|
|
24
|
-
*
|
|
25
|
-
* Surface:
|
|
26
|
-
* - {@link reassertStatusColumn} — read the ticket's current labels,
|
|
27
|
-
* pick the canonical column via {@link columnForLabels}, push it
|
|
28
|
-
* via `ColumnSync.sync`, then poll the live Status for a bounded
|
|
29
|
-
* window and re-fire on drift. Returns the sync envelope augmented
|
|
30
|
-
* with `attempts`.
|
|
2
|
+
* reassert-status-column — re-fire `ColumnSync` from a ticket's current
|
|
3
|
+
* labels after merge confirmation. GitHub's built-in PR workflows overwrite
|
|
4
|
+
* Status minutes after auto-merge, so a bounded poll-and-refire is needed to
|
|
5
|
+
* win that race; a one-shot mutation routinely lost it.
|
|
31
6
|
*/
|
|
32
7
|
|
|
33
8
|
import { ColumnSync, columnForLabels } from './column-sync.js';
|
|
34
9
|
|
|
35
|
-
/**
|
|
36
|
-
* Default total mutation attempts (including the initial sync). At
|
|
37
|
-
* `pollDelayMs = 5000`, four attempts cover a ~15 s defense window —
|
|
38
|
-
* long enough to outlast the typical GitHub built-in workflow fire
|
|
39
|
-
* timing without ballooning the close-path wall clock.
|
|
40
|
-
*/
|
|
10
|
+
/** Four attempts at 5 s cover a ~15 s window past typical bot timing. */
|
|
41
11
|
const DEFAULT_POLL_ATTEMPTS = 4;
|
|
42
12
|
|
|
43
|
-
/**
|
|
44
|
-
* Default delay between drift checks (ms). Five seconds is a sweet
|
|
45
|
-
* spot: short enough that the operator doesn't perceive the close
|
|
46
|
-
* path as hung, long enough that one re-fire usually wins the race.
|
|
47
|
-
*/
|
|
48
13
|
const DEFAULT_POLL_DELAY_MS = 5000;
|
|
49
14
|
|
|
50
15
|
/**
|
|
51
|
-
* Production sleep function. Tests inject `sleepFn: () => Promise.resolve()`
|
|
52
|
-
* so the poll loop runs instantly.
|
|
53
|
-
*
|
|
54
16
|
* @param {number} ms
|
|
55
17
|
* @returns {Promise<void>}
|
|
56
18
|
*/
|
|
@@ -59,28 +21,11 @@ function defaultSleep(ms) {
|
|
|
59
21
|
}
|
|
60
22
|
|
|
61
23
|
/**
|
|
62
|
-
* Re-assert
|
|
63
|
-
*
|
|
64
|
-
*
|
|
65
|
-
*
|
|
66
|
-
*
|
|
67
|
-
* `attempts` (the number of mutations actually fired):
|
|
68
|
-
* - `{ status: 'synced', column, attempts }` — the mutation landed
|
|
69
|
-
* and the drift-check confirmed Status matches the target. If
|
|
70
|
-
* drift was detected and re-fired, `attempts` reflects the total
|
|
71
|
-
* mutation count.
|
|
72
|
-
* - `{ status: 'drifted', column, attempts }` — the helper exhausted
|
|
73
|
-
* `pollAttempts` and the live Status still didn't match the
|
|
74
|
-
* target. Returned, not thrown — the caller decides whether to
|
|
75
|
-
* escalate. `column` carries the target column the helper was
|
|
76
|
-
* trying to set.
|
|
77
|
-
* - `{ status: 'skipped', reason }` — no-op for an enumerated reason
|
|
78
|
-
* (`no-matching-label`, `no-project`, `no-meta`, `no-option-<col>`,
|
|
79
|
-
* `not-on-project`). Skip paths short-circuit before the poll loop.
|
|
80
|
-
*
|
|
81
|
-
* Throws when the provider is unusable. Other failures (GraphQL,
|
|
82
|
-
* network) propagate from `ColumnSync.sync` and `provider.getTicket` —
|
|
83
|
-
* callers wrap in try/catch if they want best-effort semantics.
|
|
24
|
+
* Re-assert one ticket's Status column. Returns `ColumnSync.sync`'s envelope
|
|
25
|
+
* plus `attempts`: `synced` (confirmed), `drifted` (budget exhausted, still
|
|
26
|
+
* wrong — returned, not thrown), or `skipped` with a reason (before any
|
|
27
|
+
* polling). Throws on an unusable provider; GraphQL/network errors from the
|
|
28
|
+
* first sync propagate.
|
|
84
29
|
*
|
|
85
30
|
* @param {{
|
|
86
31
|
* provider: { getTicket: Function, graphql: Function, owner: string, repo: string, projectNumber?: number|null },
|
|
@@ -132,9 +77,6 @@ export async function reassertStatusColumn(args) {
|
|
|
132
77
|
}
|
|
133
78
|
const sync = new ColumnSync({ provider, logger: logger ?? console, config });
|
|
134
79
|
|
|
135
|
-
// First attempt — always fires through ColumnSync.sync so the skip
|
|
136
|
-
// paths (no-project / no-meta / no-option-<col> / not-on-project)
|
|
137
|
-
// short-circuit before we enter the poll loop.
|
|
138
80
|
const initial = await sync.sync(ticketId, labels);
|
|
139
81
|
if (initial.status !== 'synced') {
|
|
140
82
|
return initial;
|
|
@@ -142,9 +84,7 @@ export async function reassertStatusColumn(args) {
|
|
|
142
84
|
let attempts = 1;
|
|
143
85
|
let lastEnvelope = { ...initial, attempts };
|
|
144
86
|
|
|
145
|
-
//
|
|
146
|
-
// target column. Bounded by pollAttempts so a hostile bot can't
|
|
147
|
-
// stall the close path indefinitely.
|
|
87
|
+
// Bounded so a hostile bot cannot stall the close path.
|
|
148
88
|
for (let i = 1; i < pollAttempts; i += 1) {
|
|
149
89
|
await sleepFn(pollDelayMs);
|
|
150
90
|
let current;
|
|
@@ -159,7 +99,6 @@ export async function reassertStatusColumn(args) {
|
|
|
159
99
|
continue;
|
|
160
100
|
}
|
|
161
101
|
if (current === targetColumn) {
|
|
162
|
-
// Sticky confirmation — return the existing envelope.
|
|
163
102
|
return lastEnvelope;
|
|
164
103
|
}
|
|
165
104
|
logger?.info?.(
|
|
@@ -170,8 +109,7 @@ export async function reassertStatusColumn(args) {
|
|
|
170
109
|
try {
|
|
171
110
|
const next = await sync.sync(ticketId, labels);
|
|
172
111
|
attempts += 1;
|
|
173
|
-
//
|
|
174
|
-
// already synced once; preserve their shape but stop retrying.
|
|
112
|
+
// A skip after a successful sync is unexpected: stop retrying.
|
|
175
113
|
if (next.status !== 'synced') {
|
|
176
114
|
return { ...next, attempts };
|
|
177
115
|
}
|
|
@@ -185,8 +123,6 @@ export async function reassertStatusColumn(args) {
|
|
|
185
123
|
}
|
|
186
124
|
}
|
|
187
125
|
|
|
188
|
-
// Exhausted the poll budget — final drift read to report the
|
|
189
|
-
// honest outcome to the caller.
|
|
190
126
|
let final;
|
|
191
127
|
try {
|
|
192
128
|
final = await sync.readCurrentColumn(ticketId);
|
|
@@ -1,36 +1,20 @@
|
|
|
1
1
|
// .agents/scripts/lib/orchestration/remote-verifier.js
|
|
2
2
|
/**
|
|
3
|
-
* remote-verifier.js —
|
|
4
|
-
*
|
|
3
|
+
* remote-verifier.js — verified "is there a live, pushable remote?" evidence
|
|
4
|
+
* for the delivery entry seams, so the workflow branches on
|
|
5
|
+
* `remoteVerified` (use the remote, or block quoting the probe) instead of an
|
|
6
|
+
* agent's perception — never a silent local build.
|
|
5
7
|
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
* remote. The judgment was vibes, not fact. This module gives the entry
|
|
10
|
-
* seams (`single-story-init.js` for v2 `/mandrel-deliver`) a verified
|
|
11
|
-
* probe result to record in their envelopes so the workflow can branch on
|
|
12
|
-
* `remoteVerified: true|false` deterministically: use the remote, or
|
|
13
|
-
* transition to `agent::blocked` quoting the probe output — never a
|
|
14
|
-
* silent local build.
|
|
15
|
-
*
|
|
16
|
-
* Two probes, both bounded (a hung git spawn must not park the entry
|
|
17
|
-
* seam — mirrors the `ghPrListHead` timeout contract in `finalizer.js`):
|
|
18
|
-
*
|
|
19
|
-
* 1. `git remote get-url origin` — is an `origin` remote configured?
|
|
20
|
-
* 2. `git ls-remote origin HEAD` — is it reachable with current auth?
|
|
21
|
-
*
|
|
22
|
-
* `remoteVerified` is true only when BOTH succeed. The CLI callers do
|
|
23
|
-
* NOT flip labels on a false result — the workflow owns the
|
|
24
|
-
* `agent::blocked` transition (same division of labour as the preflight
|
|
25
|
-
* breach handling).
|
|
8
|
+
* `remoteVerified` requires both `git remote get-url origin` and
|
|
9
|
+
* `git ls-remote origin HEAD` to succeed. Callers flip no labels; the
|
|
10
|
+
* workflow owns the `agent::blocked` transition.
|
|
26
11
|
*/
|
|
27
12
|
|
|
28
13
|
import { spawnSync } from 'node:child_process';
|
|
29
14
|
|
|
30
15
|
/**
|
|
31
|
-
*
|
|
32
|
-
*
|
|
33
|
-
* deterministic `remoteVerified: false` instead of a stuck entry seam.
|
|
16
|
+
* Per-probe bound, SIGKILLed, so a hanging remote degrades to
|
|
17
|
+
* `remoteVerified: false` instead of parking the entry seam.
|
|
34
18
|
*/
|
|
35
19
|
export const REMOTE_PROBE_TIMEOUT_MS = 30_000;
|
|
36
20
|
|
|
@@ -51,8 +35,6 @@ function runProbe({ args, cwd, spawnFn, timeoutMs }) {
|
|
|
51
35
|
}
|
|
52
36
|
|
|
53
37
|
/**
|
|
54
|
-
* Probe the `origin` remote for existence + reachability.
|
|
55
|
-
*
|
|
56
38
|
* @param {{
|
|
57
39
|
* cwd?: string,
|
|
58
40
|
* spawnFn?: typeof spawnSync,
|
|
@@ -113,15 +95,9 @@ export function verifyRemote({
|
|
|
113
95
|
}
|
|
114
96
|
|
|
115
97
|
/**
|
|
116
|
-
*
|
|
117
|
-
*
|
|
118
|
-
*
|
|
119
|
-
* than let the run declare success.
|
|
120
|
-
*
|
|
121
|
-
* Distinct from `git-branch-lifecycle.js#branchExistsRemotely` in two
|
|
122
|
-
* load-bearing ways: the spawn is bounded (timeout + SIGKILL, so a hung
|
|
123
|
-
* remote cannot park the finalize seam) and the result carries the probe
|
|
124
|
-
* detail for the blocker envelope instead of a bare boolean.
|
|
98
|
+
* Finalize backstop: a never-pushed delivery branch must fail with a blocker,
|
|
99
|
+
* not declare success. Unlike `branchExistsRemotely`, the spawn is bounded
|
|
100
|
+
* and the result carries probe detail for the blocker envelope.
|
|
125
101
|
*
|
|
126
102
|
* @param {{
|
|
127
103
|
* branch: string,
|