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,42 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* lib/orchestration/code-review.js —
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* `
|
|
6
|
-
* `/mandrel-deliver` runner can run Phase D without spawning a child
|
|
7
|
-
* process or routing through an LLM-driven helper.
|
|
8
|
-
*
|
|
9
|
-
* Story #2831 (Epic #2815, Pluggable Code Review) — refactored to load
|
|
10
|
-
* the review provider through `review-provider-factory`, call the
|
|
11
|
-
* adapter's `runReview()` to collect a `Finding[]`, render the
|
|
12
|
-
* structured-comment body via `findings-renderer`, and post the
|
|
13
|
-
* comment through the GitHub provider here (the adapter is post-free
|
|
14
|
-
* by design).
|
|
15
|
-
*
|
|
16
|
-
* v2.0.0 removed the Epic tier. The Epic-scope envelope and the
|
|
17
|
-
* Epic-scoped `code-review.start` / `.end` lifecycle emits (whose schema
|
|
18
|
-
* requires `epicId`) went with it; Story scope is the only scope. Story #5024
|
|
19
|
-
* deleted those schemas along with the bus that was their only publish path.
|
|
20
|
-
*
|
|
21
|
-
* Public API:
|
|
22
|
-
* - `runCodeReview({ ticketId, headRef, provider, logger, ... })` →
|
|
23
|
-
* `{ status, severity, posted, report, halted, blockerReason }`.
|
|
24
|
-
*
|
|
25
|
-
* Behaviour:
|
|
26
|
-
* - Loads the configured review adapter via the factory; defaults to
|
|
27
|
-
* a single `native` chain entry when `delivery.codeReview.providers`
|
|
28
|
-
* is unset or empty.
|
|
29
|
-
* - Always posts the unified `verification-results` structured comment on
|
|
30
|
-
* the target issue/PR (the adapter never posts; the orchestrator owns
|
|
31
|
-
* persistence). Story #4411 (Epic #4405) unified the former
|
|
32
|
-
* `code-review` and `audit-results` findings contracts into this one
|
|
33
|
-
* `verification-results` marker.
|
|
34
|
-
* - Treats severity.critical > 0 as a halting blocker — the merged
|
|
35
|
-
* `/mandrel-deliver` runner consults `halted` and refuses to advance
|
|
36
|
-
* to Phase E (retro) when set.
|
|
37
|
-
*
|
|
38
|
-
* Halting on critical findings is the in-process replacement for the
|
|
39
|
-
* helper's "operator must remediate before /mandrel-deliver" gate.
|
|
2
|
+
* lib/orchestration/code-review.js — in-process Story-scope code review:
|
|
3
|
+
* load the configured review adapter (default `native`), collect its
|
|
4
|
+
* `Finding[]`, render and post the `verification-results` comment (adapters
|
|
5
|
+
* never post), and report `halted` on any surviving critical finding.
|
|
40
6
|
*/
|
|
41
7
|
|
|
42
8
|
import { hasSurvivingCritical } from '../audit-suite/findings.js';
|
|
@@ -56,26 +22,16 @@ import { createReviewProvider } from './review-providers/review-provider-factory
|
|
|
56
22
|
import { upsertStructuredComment } from './ticketing.js';
|
|
57
23
|
|
|
58
24
|
/**
|
|
59
|
-
* Review depth
|
|
60
|
-
*
|
|
61
|
-
* the
|
|
62
|
-
* sensitive path ({@link deriveChangeLevel}) and their mechanical count — then
|
|
63
|
-
* threaded into the review provider's `runReview` input so a sensitive *or*
|
|
64
|
-
* wide-footprint change gets a deeper pass than a small, unremarkable one.
|
|
65
|
-
* Depth is an **input** signal only — it never changes the
|
|
66
|
-
* `{ status, severity, posted, report, halted, blockerReason }` output
|
|
67
|
-
* envelope nor the `verification-results` structured-comment body (Story #3876,
|
|
68
|
-
* extended by Story #3938; re-based off the diff by Story #4542).
|
|
25
|
+
* Review depth (light → standard → deep), from the diff's sensitivity and
|
|
26
|
+
* width. An input to `runReview` only; never changes the output envelope or
|
|
27
|
+
* the posted comment.
|
|
69
28
|
*
|
|
70
29
|
* @typedef {import('./review-depth.js').ReviewDepth} ReviewDepth
|
|
71
30
|
*/
|
|
72
31
|
|
|
73
32
|
/**
|
|
74
|
-
*
|
|
75
|
-
*
|
|
76
|
-
* silently inherit the local ref's drift (Story #5325). An unfetched remote
|
|
77
|
-
* then yields an unenumerable diff, which every downstream consumer already
|
|
78
|
-
* fails safe on, instead of a confidently-wrong wide one.
|
|
33
|
+
* Default base is remote-qualified so it cannot inherit local-ref drift; an
|
|
34
|
+
* unfetched remote yields an unenumerable diff, which consumers fail safe on.
|
|
79
35
|
*/
|
|
80
36
|
function resolveConfigBase(config) {
|
|
81
37
|
return remoteBaseRef(config?.project?.baseBranch ?? 'main');
|
|
@@ -89,9 +45,6 @@ function resolveCommentTargetId(commentTargetId, fallback) {
|
|
|
89
45
|
}
|
|
90
46
|
|
|
91
47
|
/**
|
|
92
|
-
* Resolve the Story-scope envelope from the parameterized
|
|
93
|
-
* `{ scope: 'story', ticketId, baseRef, headRef, commentTargetId }` shape.
|
|
94
|
-
*
|
|
95
48
|
* @returns {{
|
|
96
49
|
* scope: 'story',
|
|
97
50
|
* ticketId: number,
|
|
@@ -123,40 +76,15 @@ function resolveStoryScope(opts, config) {
|
|
|
123
76
|
};
|
|
124
77
|
}
|
|
125
78
|
|
|
126
|
-
/**
|
|
127
|
-
* Resolve the scope envelope
|
|
128
|
-
* (`{ scope, ticketId, baseRef, headRef, commentTargetId }`). v2.0.0
|
|
129
|
-
* removed the Epic tier, so `'story'` is the only scope.
|
|
130
|
-
*/
|
|
79
|
+
/** `'story'` is the only scope. */
|
|
131
80
|
function resolveScopeEnvelope(opts, config) {
|
|
132
81
|
return resolveStoryScope(opts, config);
|
|
133
82
|
}
|
|
134
83
|
|
|
135
84
|
/**
|
|
136
|
-
*
|
|
137
|
-
*
|
|
138
|
-
*
|
|
139
|
-
* Story #2252 — emits `code-review.start` immediately on entry and
|
|
140
|
-
* `code-review.end` immediately before returning the envelope (success
|
|
141
|
-
* or halt). On runner throw, emits `code-review.end` with the canonical
|
|
142
|
-
* structure (`status: 'invalid'`) before re-throwing so the ledger
|
|
143
|
-
* always carries the closing boundary.
|
|
144
|
-
*
|
|
145
|
-
* Story #2831 — the runner loads its adapter through the factory; the
|
|
146
|
-
* `reviewProvider` opt overrides the factory for tests. Severity is
|
|
147
|
-
* derived from the `Finding[]` returned by the adapter (no separate
|
|
148
|
-
* severity field on the runner result).
|
|
149
|
-
*
|
|
150
|
-
* Story #2839 (Epic #2815) — the Story closer requests a Story-scope
|
|
151
|
-
* review against `main`, posts the structured findings comment to the PR
|
|
152
|
-
* (via `commentTargetId`), and surfaces critical findings to the caller
|
|
153
|
-
* as `halted: true`.
|
|
154
|
-
*
|
|
155
|
-
* Argument shape:
|
|
156
|
-
* `{ ticketId, baseRef, headRef, [commentTargetId], provider }`
|
|
157
|
-
* `baseRef` defaults to the project base branch; `headRef` is required.
|
|
158
|
-
* `commentTargetId` overrides the post target (e.g. PR number) while
|
|
159
|
-
* `ticketId` continues to label the rendered header ("Story #N").
|
|
85
|
+
* Run a Story-scope review. `headRef` is required; `baseRef` defaults to
|
|
86
|
+
* the remote base branch; `commentTargetId` (e.g. a PR number) overrides
|
|
87
|
+
* the post target while `ticketId` still labels the header.
|
|
160
88
|
*
|
|
161
89
|
* @param {{
|
|
162
90
|
* scope?: 'story',
|
|
@@ -188,12 +116,7 @@ function resolveScopeEnvelope(opts, config) {
|
|
|
188
116
|
* blockerReason: string|null,
|
|
189
117
|
* }>}
|
|
190
118
|
*/
|
|
191
|
-
/**
|
|
192
|
-
* Resolve the human-facing provider name from the resolved code-review
|
|
193
|
-
* config. Multi-entry chains render as `chain[a,b,...]`; a single-entry
|
|
194
|
-
* chain (including the unset/empty default) renders that entry's name;
|
|
195
|
-
* everything else falls back to `'native'`.
|
|
196
|
-
*/
|
|
119
|
+
/** Display name: the single entry's name, `chain[a,b]`, or `'native'`. */
|
|
197
120
|
function resolveProviderName(codeReviewConfig) {
|
|
198
121
|
const providers =
|
|
199
122
|
codeReviewConfig && Array.isArray(codeReviewConfig.providers)
|
|
@@ -209,17 +132,10 @@ function resolveProviderName(codeReviewConfig) {
|
|
|
209
132
|
}
|
|
210
133
|
|
|
211
134
|
/**
|
|
212
|
-
*
|
|
213
|
-
*
|
|
214
|
-
*
|
|
215
|
-
* and
|
|
216
|
-
* verbatim; an explicit **null** is a caller (`runStoryReviewCore`) reporting
|
|
217
|
-
* that it already tried and the diff is unenumerable — re-running git here would
|
|
218
|
-
* only fail again, so it degrades straight to the fail-safe tier; **absent**
|
|
219
|
-
* means no caller enumerated at all, so the shared {@link computeChangeSet}
|
|
220
|
-
* enumerator runs as the fallback (standalone CLI use). On the close path the
|
|
221
|
-
* spine always injects, so the diff is enumerated exactly once per delivery and
|
|
222
|
-
* this pillar can never disagree with the lens pass about what changed.
|
|
135
|
+
* `opts.changedFiles` has three states: an array is used verbatim; `null`
|
|
136
|
+
* means the caller already found the diff unenumerable (fail-safe tier, no
|
|
137
|
+
* retry); absent means enumerate here. The close path always injects, so
|
|
138
|
+
* review and lens pass agree on what changed.
|
|
223
139
|
*/
|
|
224
140
|
function resolveInjectedChangedFiles({ opts, baseRef, headRef }) {
|
|
225
141
|
if (opts.changedFiles === undefined) {
|
|
@@ -230,12 +146,8 @@ function resolveInjectedChangedFiles({ opts, baseRef, headRef }) {
|
|
|
230
146
|
}
|
|
231
147
|
|
|
232
148
|
/**
|
|
233
|
-
* Build the
|
|
234
|
-
*
|
|
235
|
-
* touched or not — Story #4542) and their count supplies the width. The depth
|
|
236
|
-
* is an input-only signal (light → standard → deep) and never touches the
|
|
237
|
-
* output envelope or the posted comment. An unenumerable diff → `standard`.
|
|
238
|
-
* Story #4075 — extracted from `runCodeReview`.
|
|
149
|
+
* Build the `runReview` input with its depth; an unenumerable diff yields
|
|
150
|
+
* `standard`.
|
|
239
151
|
*/
|
|
240
152
|
function buildReviewInput({ opts, scope, ticketId, baseRef, headRef }) {
|
|
241
153
|
const changedFiles = resolveInjectedChangedFiles({ opts, baseRef, headRef });
|
|
@@ -243,9 +155,7 @@ function buildReviewInput({ opts, scope, ticketId, baseRef, headRef }) {
|
|
|
243
155
|
typeof opts.changedFileCount === 'number'
|
|
244
156
|
? opts.changedFileCount
|
|
245
157
|
: (changedFiles?.length ?? null);
|
|
246
|
-
//
|
|
247
|
-
// of the diff under review). It is deliberately decoupled from the
|
|
248
|
-
// planning model-capacity advisory (`DEFAULT_MODEL_CAPACITY`).
|
|
158
|
+
// Width is the diff's file count, decoupled from planning model capacity.
|
|
249
159
|
const { level } = deriveChangeLevel({ changedFiles });
|
|
250
160
|
const depth = resolveDepth({
|
|
251
161
|
derivedLevel: level,
|
|
@@ -262,10 +172,7 @@ function buildReviewInput({ opts, scope, ticketId, baseRef, headRef }) {
|
|
|
262
172
|
}
|
|
263
173
|
|
|
264
174
|
/**
|
|
265
|
-
*
|
|
266
|
-
* single-adapter providers don't carry `getPromptMessages`, so the
|
|
267
|
-
* empty-array fallback keeps the old snapshot byte-stable; a throw is
|
|
268
|
-
* logged and degraded to empty.
|
|
175
|
+
* Optional `getPromptMessages`; absent or throwing yields `[]`.
|
|
269
176
|
*/
|
|
270
177
|
async function resolvePromptMessages(reviewProvider, reviewInput, logger) {
|
|
271
178
|
if (typeof reviewProvider.getPromptMessages !== 'function') return [];
|
|
@@ -283,9 +190,7 @@ async function resolvePromptMessages(reviewProvider, reviewInput, logger) {
|
|
|
283
190
|
}
|
|
284
191
|
|
|
285
192
|
/**
|
|
286
|
-
*
|
|
287
|
-
* non-fatal: it is logged and surfaced via `posted: false`. Story #4075 —
|
|
288
|
-
* extracted from `runCodeReview`.
|
|
193
|
+
* Posting failure is non-fatal and surfaces as `posted: false`.
|
|
289
194
|
*/
|
|
290
195
|
async function postReviewComment({
|
|
291
196
|
upsertCommentFn,
|
|
@@ -319,12 +224,6 @@ async function postReviewComment({
|
|
|
319
224
|
}
|
|
320
225
|
}
|
|
321
226
|
|
|
322
|
-
/**
|
|
323
|
-
* Run the review pipeline (resolve provider → runReview → prompt messages →
|
|
324
|
-
* render → post comment) and shape the `status: 'ok'` result. Pure of the
|
|
325
|
-
* lifecycle-boundary concern — `runCodeReview` owns the start/end emit pair.
|
|
326
|
-
* Story #4075 — extracted to keep both bodies below the CC must-fix band.
|
|
327
|
-
*/
|
|
328
227
|
async function executeReviewPipeline({ opts, config, envelope }) {
|
|
329
228
|
const {
|
|
330
229
|
provider,
|
|
@@ -366,7 +265,7 @@ async function executeReviewPipeline({ opts, config, envelope }) {
|
|
|
366
265
|
logger,
|
|
367
266
|
);
|
|
368
267
|
|
|
369
|
-
//
|
|
268
|
+
// Degraded gates ride beside the findings, never inside them.
|
|
370
269
|
const degradations = await collectProviderDegradations(
|
|
371
270
|
reviewProvider,
|
|
372
271
|
logger,
|
|
@@ -413,8 +312,5 @@ export async function runCodeReview(opts = {}) {
|
|
|
413
312
|
const config = resolveConfigFn();
|
|
414
313
|
const envelope = resolveScopeEnvelope(opts, config);
|
|
415
314
|
|
|
416
|
-
// No lifecycle-bus emit: the `code-review.start` / `.end` ledger pair was
|
|
417
|
-
// Epic-scoped (its schema requires `epicId`), and v2.0.0 removed the Epic
|
|
418
|
-
// tier. Story-scope review sits outside the lifecycle ledger entirely.
|
|
419
315
|
return executeReviewPipeline({ opts, config, envelope });
|
|
420
316
|
}
|
|
@@ -1,37 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* ColumnSync —
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* (`Todo` / `In Progress` / `Done`) — granular lifecycle state lives in the
|
|
7
|
-
* `agent::*` labels themselves. This mapping collapses each lifecycle label
|
|
8
|
-
* onto one of those three buckets:
|
|
9
|
-
*
|
|
10
|
-
* agent::review-spec → Todo
|
|
11
|
-
* agent::ready → Todo
|
|
12
|
-
* agent::executing → In Progress
|
|
13
|
-
* agent::closing → In Progress
|
|
14
|
-
* agent::blocked → In Progress (the `agent::blocked` label is the
|
|
15
|
-
* granular signal; the board column just shows the
|
|
16
|
-
* work is still in flight)
|
|
17
|
-
* agent::done → Done
|
|
18
|
-
*
|
|
19
|
-
* No-op (soft fail) when:
|
|
20
|
-
* - `projectNumber` is not configured
|
|
21
|
-
* - The Status field or the required option is not present on the project
|
|
22
|
-
* - The issue is not a project item (e.g. orchestrator running on a fork)
|
|
23
|
-
*
|
|
24
|
-
* The sync is implemented as pure functions plus a thin class wrapper so
|
|
25
|
-
* tests can pump a fake provider's `graphql` calls without touching live
|
|
26
|
-
* GitHub.
|
|
27
|
-
*
|
|
28
|
-
* Located at `lib/orchestration/column-sync.js` (Story #2548) so the
|
|
29
|
-
* canonical state mutator `transitionTicketState`
|
|
30
|
-
* (`lib/orchestration/ticketing/state.js`) can invoke it without an
|
|
31
|
-
* upward dependency into the deleted `epic-runner/` tree. Prior to #2548 this module
|
|
32
|
-
* lived under `epic-runner/` and was only wired against the Epic
|
|
33
|
-
* ticket — Stories and Tasks never updated their Projects v2 Status
|
|
34
|
-
* column on label flips.
|
|
2
|
+
* ColumnSync — collapse an issue's `agent::*` labels onto the stock Projects
|
|
3
|
+
* v2 Status options (`Todo` / `In Progress` / `Done`) and push it via
|
|
4
|
+
* GraphQL. Soft no-op when no project is configured, the Status field or
|
|
5
|
+
* option is missing, or the issue is not on the board.
|
|
35
6
|
*/
|
|
36
7
|
|
|
37
8
|
import { AGENT_LABELS } from '../label-constants.js';
|
|
@@ -52,11 +23,8 @@ export const LABEL_TO_COLUMN = Object.freeze({
|
|
|
52
23
|
});
|
|
53
24
|
|
|
54
25
|
/**
|
|
55
|
-
*
|
|
56
|
-
*
|
|
57
|
-
* blocked) collapses to `In Progress`, and parking labels (review-spec /
|
|
58
|
-
* ready) collapse to `Todo`. Returns null when no `agent::*` label is
|
|
59
|
-
* present so the caller can skip the sync.
|
|
26
|
+
* `done` wins, then any in-flight label, then parking labels; `null` when no
|
|
27
|
+
* `agent::*` label is present.
|
|
60
28
|
*/
|
|
61
29
|
export function columnForLabels(labels) {
|
|
62
30
|
const set = new Set(labels);
|
|
@@ -95,23 +63,14 @@ export class ColumnSync {
|
|
|
95
63
|
null;
|
|
96
64
|
this.projectOwner = opts.projectOwner ?? provider.projectOwner ?? null;
|
|
97
65
|
this.logger = opts.logger ?? ctx?.logger ?? console;
|
|
98
|
-
//
|
|
99
|
-
// Optional — when omitted, the cache resolves the framework-default
|
|
100
|
-
// `temp` root (Story #4252).
|
|
66
|
+
// Locates the meta cache's tempRoot; absent means the default `temp`.
|
|
101
67
|
this.config = opts.config ?? ctx?.config ?? undefined;
|
|
102
68
|
this._meta = null; // lazy-cached { projectId, fieldId, options: Map<name, id> }
|
|
103
|
-
//
|
|
104
|
-
// cache, so a GraphQL error against possibly-stale cached metadata can
|
|
105
|
-
// invalidate the disk entry and force a fresh resolve on the next flip
|
|
106
|
-
// (Story #4252).
|
|
69
|
+
// Disk-hydrated meta may be stale; a failed mutation then invalidates it.
|
|
107
70
|
this._metaFromDiskCache = false;
|
|
108
71
|
}
|
|
109
72
|
|
|
110
73
|
/**
|
|
111
|
-
* Sync a single issue to the column its `agent::*` labels imply. Returns a
|
|
112
|
-
* result descriptor (`synced | skipped | failed`) so callers can log
|
|
113
|
-
* without parsing errors.
|
|
114
|
-
*
|
|
115
74
|
* @param {number} issueId
|
|
116
75
|
* @param {string[]} labels
|
|
117
76
|
*/
|
|
@@ -122,19 +81,8 @@ export class ColumnSync {
|
|
|
122
81
|
}
|
|
123
82
|
|
|
124
83
|
/**
|
|
125
|
-
*
|
|
126
|
-
*
|
|
127
|
-
*
|
|
128
|
-
* Split out for the one caller whose target column cannot come from labels:
|
|
129
|
-
* a container Epic carries no `agent::*` label by construction, so
|
|
130
|
-
* {@link columnForLabels} returns `null` for it and `sync` can never move
|
|
131
|
-
* it. The Epic's column is derived from its children instead
|
|
132
|
-
* (`epic-rollup.js`) and handed here — which keeps that derivation from
|
|
133
|
-
* having to fabricate a label on the container just to reach the board, the
|
|
134
|
-
* one thing the container invariant forbids.
|
|
135
|
-
*
|
|
136
|
-
* Every skip path, the metadata cache and the stale-cache self-heal are
|
|
137
|
-
* shared with `sync` because they live here rather than in it.
|
|
84
|
+
* Set a column directly, without label derivation — for container Epics,
|
|
85
|
+
* which carry no `agent::*` label by invariant.
|
|
138
86
|
*
|
|
139
87
|
* @param {number} issueId
|
|
140
88
|
* @param {string} column Board column name (`Todo` | `In Progress` | `Done`).
|
|
@@ -177,12 +125,8 @@ export class ColumnSync {
|
|
|
177
125
|
},
|
|
178
126
|
);
|
|
179
127
|
} catch (err) {
|
|
180
|
-
//
|
|
181
|
-
//
|
|
182
|
-
// written (a stale projectId / fieldId / optionId). Invalidate the
|
|
183
|
-
// disk entry so the next flip re-resolves against the live board and
|
|
184
|
-
// self-heals (Story #4252). Re-throw so the caller's existing error
|
|
185
|
-
// handling (e.g. `syncProjectStatusColumn`'s warn) is preserved.
|
|
128
|
+
// Likely a reconfigured board: drop cached meta so the next flip
|
|
129
|
+
// self-heals, and re-throw for the caller's handling.
|
|
186
130
|
this.#invalidateMetaCache();
|
|
187
131
|
throw err;
|
|
188
132
|
}
|
|
@@ -190,9 +134,7 @@ export class ColumnSync {
|
|
|
190
134
|
}
|
|
191
135
|
|
|
192
136
|
/**
|
|
193
|
-
*
|
|
194
|
-
* the owner that `#loadMeta` resolves the board against so a cache hit and
|
|
195
|
-
* a live resolve agree on the same board identity.
|
|
137
|
+
* Cache key; same owner `#loadMeta` resolves against.
|
|
196
138
|
*
|
|
197
139
|
* @returns {{ owner: string|null, projectNumber: number|null }}
|
|
198
140
|
*/
|
|
@@ -204,11 +146,8 @@ export class ColumnSync {
|
|
|
204
146
|
}
|
|
205
147
|
|
|
206
148
|
/**
|
|
207
|
-
*
|
|
208
|
-
*
|
|
209
|
-
* board. Only fires when the current `_meta` came from the disk cache —
|
|
210
|
-
* a freshly-resolved entry that fails the mutation is a transient/live
|
|
211
|
-
* problem, not a stale-cache problem.
|
|
149
|
+
* Only disk-hydrated meta is invalidated; a fresh resolve that fails is a
|
|
150
|
+
* live problem, not a stale cache.
|
|
212
151
|
*/
|
|
213
152
|
#invalidateMetaCache() {
|
|
214
153
|
if (!this._metaFromDiskCache) return;
|
|
@@ -220,9 +159,8 @@ export class ColumnSync {
|
|
|
220
159
|
|
|
221
160
|
async #loadMeta() {
|
|
222
161
|
if (this._meta !== null) return this._meta || null;
|
|
223
|
-
//
|
|
224
|
-
//
|
|
225
|
-
// the cold CLI processes of a single-story delivery (Story #4252).
|
|
162
|
+
// Board meta is repo-invariant; the disk cache spares each cold CLI
|
|
163
|
+
// process the resolve round-trips.
|
|
226
164
|
const cachedBoard = this.#cacheBoard;
|
|
227
165
|
const cached = readProjectMetaCache({
|
|
228
166
|
owner: cachedBoard.owner,
|
|
@@ -235,18 +173,9 @@ export class ColumnSync {
|
|
|
235
173
|
return this._meta;
|
|
236
174
|
}
|
|
237
175
|
try {
|
|
238
|
-
//
|
|
239
|
-
// (organization → user → viewer) via the shared resolver so the
|
|
240
|
-
// org-owned path can't drift from `workflow-audit.js`. The Status
|
|
241
|
-
// single-select field is projected alongside the board id in one
|
|
242
|
-
// round-trip. (Story #4237; org-owner support extends the
|
|
243
|
-
// user/viewer ladder added in #3560.)
|
|
176
|
+
// Shared org → user → viewer resolver; Status field in one round-trip.
|
|
244
177
|
const project = await resolveProjectMeta({
|
|
245
178
|
provider: this.provider,
|
|
246
|
-
// Prefer the explicit `github.projectOwner`; fall back to the repo
|
|
247
|
-
// owner so an org-owned board still gets a login to scope
|
|
248
|
-
// `organization(login:)` / `user(login:)` by even when no separate
|
|
249
|
-
// projectOwner is configured. `viewer` is always the final rung.
|
|
250
179
|
owner: this.projectOwner ?? this.provider.owner ?? null,
|
|
251
180
|
projectNumber: this.projectNumber,
|
|
252
181
|
projectFields: `
|
|
@@ -269,9 +198,7 @@ export class ColumnSync {
|
|
|
269
198
|
fieldId: field.id,
|
|
270
199
|
options,
|
|
271
200
|
};
|
|
272
|
-
//
|
|
273
|
-
// cold flip reads it from disk instead of re-paying the resolve
|
|
274
|
-
// (Story #4252). Best-effort: a write failure never blocks the sync.
|
|
201
|
+
// Best-effort; a write failure never blocks the sync.
|
|
275
202
|
writeProjectMetaCache({
|
|
276
203
|
owner: cachedBoard.owner,
|
|
277
204
|
projectNumber: cachedBoard.projectNumber,
|
|
@@ -290,17 +217,8 @@ export class ColumnSync {
|
|
|
290
217
|
}
|
|
291
218
|
|
|
292
219
|
/**
|
|
293
|
-
*
|
|
294
|
-
*
|
|
295
|
-
* or `null` when the issue is not on the configured project, the
|
|
296
|
-
* Status field has no current value, or the metadata cannot be
|
|
297
|
-
* resolved.
|
|
298
|
-
*
|
|
299
|
-
* Story #2876 — used by `reassertStatusColumn` to detect drift
|
|
300
|
-
* between the orchestrator's intended column and the bot-rewritten
|
|
301
|
-
* column. The labels alone don't move when the bot overwrites
|
|
302
|
-
* Status — that's the bug class we defend against — so the
|
|
303
|
-
* drift-check MUST read the live Status, not the issue labels.
|
|
220
|
+
* Live Status column, or `null`. Drift checks must read this, not labels:
|
|
221
|
+
* the Projects bot rewrites Status without touching labels.
|
|
304
222
|
*
|
|
305
223
|
* @param {number} issueId
|
|
306
224
|
* @returns {Promise<string|null>}
|
|
@@ -336,14 +254,8 @@ export class ColumnSync {
|
|
|
336
254
|
}
|
|
337
255
|
|
|
338
256
|
async #getProjectItemId(issueId, projectId) {
|
|
339
|
-
// Walk
|
|
340
|
-
//
|
|
341
|
-
// paginated `node(projectId).items(first: 100)` and scanned for the
|
|
342
|
-
// issue number, which silently returned null on any board with >100
|
|
343
|
-
// items — the Mandrel board crossed that cliff at ~2,300 items, so
|
|
344
|
-
// every recent ticket's Status flip became a no-op. The by-issue path
|
|
345
|
-
// is O(1) per sync and has no pagination cliff (an issue is
|
|
346
|
-
// realistically never on more than a handful of boards at once).
|
|
257
|
+
// Walk issue → projectItems, not board → items: scanning board items
|
|
258
|
+
// hits a pagination cliff on large boards; an issue is on few boards.
|
|
347
259
|
const owner = this.provider.owner;
|
|
348
260
|
const repo = this.provider.repo;
|
|
349
261
|
if (!owner || !repo) return null;
|