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,86 +1,47 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* plan-critic-conditions.js — the pre-mortem critic's dispatch
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
* unconditional critic pays a full sub-agent spawn even when it provably has
|
|
9
|
-
* nothing to find. This module computes the decision deterministically so
|
|
10
|
-
* the workflow never judges its own dispatch condition.
|
|
11
|
-
*
|
|
12
|
-
* One trigger survives: the **external-dependency probe** (Story #4700),
|
|
13
|
-
* which finds an out-of-repo marker in the plan text — a scoped package the
|
|
14
|
-
* plan names that no manifest declares, a cross-repo reference, an external
|
|
15
|
-
* service prerequisite — so a plan-time discoverable blocker does not reach
|
|
16
|
-
* delivery unquestioned (the swarm-os #757 shape). The probe is deliberately
|
|
17
|
-
* **conservative**: it matches only explicit markers (npm scoped-package
|
|
18
|
-
* specs, `github.com/<owner>/<repo>` URLs, prerequisite-keyword-anchored
|
|
19
|
-
* endpoints), never NLP guesswork.
|
|
20
|
-
*
|
|
21
|
-
* Story #5312 deleted the two triggers that sat beside it — the ticket count
|
|
22
|
-
* reaching half a `maxTickets` budget, and a `planning.riskHeuristics` phrase
|
|
23
|
-
* matching the plan text — with the constants they read. The count trigger
|
|
24
|
-
* was unreachable at the default N=1; the phrase list was empty in every
|
|
25
|
-
* consumer that resolved it. The consolidation critic went with them: its
|
|
26
|
-
* one deterministic input was a `## Delivery Slicing` table no Story carries.
|
|
27
|
-
*
|
|
28
|
-
* Under-firing risk (design PR6 note): the persist validators are unchanged
|
|
29
|
-
* hard gates; every skip decision this module produces is logged to the
|
|
30
|
-
* plan-metrics ledger (`appendCriticSkip`) by the caller so under-firing is
|
|
31
|
-
* auditable.
|
|
32
|
-
*
|
|
33
|
-
* Pure, synchronous, no I/O. The single caller is `plan-critics-evaluate.js`,
|
|
34
|
-
* driven by the `plan-critics.js` CLI the operator runs between Author and
|
|
35
|
-
* Persist when they want the critic; the CLI owns reading the authored
|
|
36
|
-
* artifacts and the resolved config.
|
|
2
|
+
* plan-critic-conditions.js — the pre-mortem critic's deterministic dispatch
|
|
3
|
+
* decision. A spawn is costly, so the critic fires only when the
|
|
4
|
+
* external-dependency probe finds an out-of-repo marker a plan-time review
|
|
5
|
+
* could catch. The probe is conservative: explicit markers only, never NLP.
|
|
6
|
+
* Skips are logged by the caller (`appendCriticSkip`) so under-firing is
|
|
7
|
+
* auditable. Pure, synchronous, no I/O.
|
|
37
8
|
*/
|
|
38
9
|
|
|
39
10
|
/**
|
|
40
11
|
* @typedef {Object} CriticDispatchDecision
|
|
41
12
|
* @property {'pre-mortem'} critic
|
|
42
13
|
* @property {boolean} dispatch
|
|
43
|
-
* @property {string[]} reasons
|
|
44
|
-
*
|
|
45
|
-
* plan-metrics ledger records.
|
|
14
|
+
* @property {string[]} reasons Never empty — a skip's reasons are its audit
|
|
15
|
+
* trail.
|
|
46
16
|
*/
|
|
47
17
|
|
|
48
18
|
/**
|
|
49
|
-
*
|
|
50
|
-
*
|
|
51
|
-
* `@[USERNAME]` operator-handle placeholder never match.
|
|
19
|
+
* `@scope/name`: the interior `/` keeps bare handles and the `@[USERNAME]`
|
|
20
|
+
* placeholder from matching.
|
|
52
21
|
*/
|
|
53
22
|
const SCOPED_PACKAGE_MARKER = /@[a-z0-9][a-z0-9._-]*\/[a-z0-9][a-z0-9._-]*/gi;
|
|
54
23
|
|
|
55
|
-
/** Explicit cross-repo marker: a `github.com/<owner>/<repo>` URL. */
|
|
56
24
|
const GITHUB_REPO_MARKER =
|
|
57
25
|
/github\.com\/([a-z0-9][a-z0-9._-]*)\/([a-z0-9][a-z0-9._-]*)/gi;
|
|
58
26
|
|
|
59
27
|
/**
|
|
60
|
-
*
|
|
61
|
-
*
|
|
62
|
-
* is what keeps casual documentation links from matching — only an endpoint
|
|
63
|
-
* named as a precondition counts.
|
|
28
|
+
* A prerequisite keyword then an http(s) endpoint in the same clause; the
|
|
29
|
+
* keyword gate keeps casual doc links from matching.
|
|
64
30
|
*/
|
|
65
31
|
const SERVICE_PREREQ_MARKER =
|
|
66
32
|
/\b(?:requires?|required|prerequisite|provision(?:ed|ing)?|depends?\s+on|credentials?\s+for)\b[^.\n]*?\bhttps?:\/\/([a-z0-9][a-z0-9.-]*)/gi;
|
|
67
33
|
|
|
68
|
-
/** Order-preserving de-duplication. */
|
|
69
34
|
function uniquePreserveOrder(values) {
|
|
70
35
|
return [...new Set(values)];
|
|
71
36
|
}
|
|
72
37
|
|
|
73
|
-
/** Quote each item for an evidence reason string. */
|
|
74
38
|
function quoteList(values) {
|
|
75
39
|
return values.map((v) => `"${v}"`).join(', ');
|
|
76
40
|
}
|
|
77
41
|
|
|
78
42
|
/**
|
|
79
|
-
* Scoped packages named in the plan that no repo manifest declares.
|
|
80
|
-
*
|
|
81
43
|
* @param {string} planText
|
|
82
|
-
* @param {string[]} knownPackages -
|
|
83
|
-
* manifests declare (own name + dependency maps + workspace package names).
|
|
44
|
+
* @param {string[]} knownPackages - Specifiers the repo's own manifests declare.
|
|
84
45
|
* @returns {string[]}
|
|
85
46
|
*/
|
|
86
47
|
function matchExternalScopedPackages(planText, knownPackages) {
|
|
@@ -97,9 +58,8 @@ function matchExternalScopedPackages(planText, knownPackages) {
|
|
|
97
58
|
}
|
|
98
59
|
|
|
99
60
|
/**
|
|
100
|
-
*
|
|
101
|
-
*
|
|
102
|
-
* than flag every URL as foreign.
|
|
61
|
+
* References outside the configured repo; silent when no owner is configured
|
|
62
|
+
* rather than flag every URL as foreign.
|
|
103
63
|
*
|
|
104
64
|
* @param {string} planText
|
|
105
65
|
* @param {{ owner?: string|null, repo?: string|null }|null} ownerRepo
|
|
@@ -125,8 +85,6 @@ function matchCrossRepoRefs(planText, ownerRepo) {
|
|
|
125
85
|
}
|
|
126
86
|
|
|
127
87
|
/**
|
|
128
|
-
* Endpoints named as prerequisites in the plan text.
|
|
129
|
-
*
|
|
130
88
|
* @param {string} planText
|
|
131
89
|
* @returns {string[]}
|
|
132
90
|
*/
|
|
@@ -139,19 +97,12 @@ function matchExternalServicePrereqs(planText) {
|
|
|
139
97
|
}
|
|
140
98
|
|
|
141
99
|
/**
|
|
142
|
-
*
|
|
143
|
-
* scan of the draft plan text for artifacts outside the current repo that the
|
|
144
|
-
* plan depends on. A match is the pre-mortem's dispatch condition; a no-match
|
|
145
|
-
* plan skips the critic.
|
|
100
|
+
* Marker-only scan of the plan text for out-of-repo dependencies.
|
|
146
101
|
*
|
|
147
102
|
* @param {object} input
|
|
148
|
-
* @param {string} [input.planText] -
|
|
149
|
-
*
|
|
150
|
-
* @param {string
|
|
151
|
-
* manifests declare, used to tell an external scoped package from a local one.
|
|
152
|
-
* @param {{ owner?: string|null, repo?: string|null }|null} [input.ownerRepo] -
|
|
153
|
-
* The configured `github.owner`/`github.repo` a cross-repo reference is
|
|
154
|
-
* measured against.
|
|
103
|
+
* @param {string} [input.planText] - Tech spec + serialized tickets.
|
|
104
|
+
* @param {string[]} [input.knownPackages]
|
|
105
|
+
* @param {{ owner?: string|null, repo?: string|null }|null} [input.ownerRepo]
|
|
155
106
|
* @returns {{ matched: boolean, reasons: string[] }}
|
|
156
107
|
*/
|
|
157
108
|
export function evaluateExternalDependencyProbe({
|
|
@@ -188,18 +139,10 @@ export function evaluateExternalDependencyProbe({
|
|
|
188
139
|
}
|
|
189
140
|
|
|
190
141
|
/**
|
|
191
|
-
* Decide the pre-mortem dispatch: an external-dependency probe match
|
|
192
|
-
* (Story #4700) — the one deterministic trigger left after Story #5312.
|
|
193
|
-
*
|
|
194
142
|
* @param {object} input
|
|
195
|
-
* @param {string} [input.planText]
|
|
196
|
-
*
|
|
197
|
-
* @param {string
|
|
198
|
-
* manifests declare (own name + dependency maps + workspace package names),
|
|
199
|
-
* passed to the external-dependency probe.
|
|
200
|
-
* @param {{ owner?: string|null, repo?: string|null }|null} [input.ownerRepo] -
|
|
201
|
-
* The configured `github.owner`/`github.repo`, passed to the
|
|
202
|
-
* external-dependency probe's cross-repo arm.
|
|
143
|
+
* @param {string} [input.planText]
|
|
144
|
+
* @param {string[]} [input.knownPackages]
|
|
145
|
+
* @param {{ owner?: string|null, repo?: string|null }|null} [input.ownerRepo]
|
|
203
146
|
* @returns {CriticDispatchDecision}
|
|
204
147
|
*/
|
|
205
148
|
export function evaluatePremortemDispatch({
|
|
@@ -1,21 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* plan-critics-evaluate.js —
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* One consumer: the `plan-critics.js` CLI, which the operator runs between
|
|
6
|
-
* Author and Persist when they want the pre-mortem. The CLI loads the draft
|
|
7
|
-
* artifacts, calls this module, prints the verdict as JSON, and records a
|
|
8
|
-
* skip on the plan-metrics ledger; the workflow dispatches a fresh-context
|
|
9
|
-
* critic sub-agent on a `dispatch: true` verdict and folds the findings into
|
|
10
|
-
* a re-author round before persist.
|
|
11
|
-
*
|
|
12
|
-
* Story #4592 moved that evaluation here from `run-plan-persist.js`, which
|
|
13
|
-
* ran it after authoring was finished and immediately before
|
|
14
|
-
* `createStoryIssues` — the one point where a `dispatch: true` verdict has
|
|
15
|
-
* no re-author loop to route to. Persist no longer evaluates critics; this
|
|
16
|
-
* module has exactly one evaluation point.
|
|
17
|
-
*
|
|
18
|
-
* Pure evaluation: no file I/O, no GitHub calls, no ledger writes — the
|
|
2
|
+
* plan-critics-evaluate.js — the pre-mortem dispatch evaluation for the
|
|
3
|
+
* `plan-critics.js` CLI, run between Author and Persist so a
|
|
4
|
+
* `dispatch: true` verdict still has a re-author loop to route to. Pure: the
|
|
19
5
|
* caller owns artifact loading and skip recording.
|
|
20
6
|
*
|
|
21
7
|
* @module lib/orchestration/plan-critics-evaluate
|
|
@@ -24,9 +10,6 @@
|
|
|
24
10
|
import { evaluatePremortemDispatch } from './plan-critic-conditions.js';
|
|
25
11
|
|
|
26
12
|
/**
|
|
27
|
-
* Resolve the `{ owner, repo }` the external-dependency probe's cross-repo arm
|
|
28
|
-
* (Story #4700) measures references against, from the canonical `github` block.
|
|
29
|
-
*
|
|
30
13
|
* @param {object} config
|
|
31
14
|
* @returns {{ owner: string|null, repo: string|null }}
|
|
32
15
|
*/
|
|
@@ -38,23 +21,14 @@ function resolveOwnerRepo(config = {}) {
|
|
|
38
21
|
}
|
|
39
22
|
|
|
40
23
|
/**
|
|
41
|
-
* Evaluate the pre-mortem critic's dispatch condition over the authored
|
|
42
|
-
* planning artifacts: the external-dependency probe (Story #4700) matching an
|
|
43
|
-
* out-of-repo marker — a scoped package absent from `knownPackages`, a
|
|
44
|
-
* cross-repo `github.com/<owner>/<repo>` reference, or a named external
|
|
45
|
-
* service prerequisite.
|
|
46
|
-
*
|
|
47
24
|
* @param {{
|
|
48
25
|
* techSpecContent: string,
|
|
49
26
|
* tickets?: Array<object>|null,
|
|
50
27
|
* config?: object,
|
|
51
28
|
* knownPackages?: string[],
|
|
52
29
|
* }} args
|
|
53
|
-
* @param {string[]} [args.knownPackages] -
|
|
54
|
-
*
|
|
55
|
-
* (Story #4700). The caller (the `plan-critics.js` CLI) owns the file I/O
|
|
56
|
-
* that gathers them; this module stays pure. Empty when unresolved, which
|
|
57
|
-
* only widens what the probe treats as external.
|
|
30
|
+
* @param {string[]} [args.knownPackages] - Specifiers the repo's manifests
|
|
31
|
+
* declare; empty only widens what counts as external.
|
|
58
32
|
* @returns {{
|
|
59
33
|
* premortem: { critic: string, dispatch: boolean, reasons: string[] },
|
|
60
34
|
* }}
|
|
@@ -1,57 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* plan-metrics.js — append-only
|
|
2
|
+
* plan-metrics.js — append-only NDJSON ledger of plan CLI invocations
|
|
3
|
+
* (`{ v, cli, mode, epicId, startedAt, endedAt, durationMs, ok }`) plus
|
|
4
|
+
* `kind: 'critic-skip'` records. Readers key on `kind`, never on absent
|
|
5
|
+
* fields. Counts CLI invocations from the parent session, not turns.
|
|
3
6
|
*
|
|
4
|
-
*
|
|
5
|
-
* phase
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
* `temp/run-<id>/plan-metrics.json` (per-Epic plan CLIs) or
|
|
9
|
-
* `temp/standalone/plan-metrics.json` (Epic-less plan and healthcheck runs —
|
|
10
|
-
* same standalone routing the friction ledger uses).
|
|
11
|
-
*
|
|
12
|
-
* Record shape (v1):
|
|
13
|
-
*
|
|
14
|
-
* ```json
|
|
15
|
-
* { "v": 1, "cli": "plan-context", "mode": "emit",
|
|
16
|
-
* "epicId": 4474, "startedAt": "...", "endedAt": "...",
|
|
17
|
-
* "durationMs": 1234, "ok": true }
|
|
18
|
-
* ```
|
|
19
|
-
*
|
|
20
|
-
* Critic-skip records (Epic #4474 PR6 — additive `kind` extension): the
|
|
21
|
-
* conditional-critic layer logs every skip decision so under-firing is
|
|
22
|
-
* auditable from the same stream:
|
|
23
|
-
*
|
|
24
|
-
* ```json
|
|
25
|
-
* { "v": 1, "kind": "critic-skip", "cli": "plan-critics",
|
|
26
|
-
* "critic": "pre-mortem", "reasons": ["..."], "epicId": 4474,
|
|
27
|
-
* "at": "..." }
|
|
28
|
-
* ```
|
|
29
|
-
*
|
|
30
|
-
* Records without a `kind` field are invocation records (the PR1 shape);
|
|
31
|
-
* readers key on `kind`, never on the absence of other fields.
|
|
32
|
-
*
|
|
33
|
-
* Attribution note (#4474 PR1 risk register): these records count **CLI
|
|
34
|
-
* invocations from the parent session's perspective**. Sub-agent sessions
|
|
35
|
-
* spawned by the workflow do not write here; they are attributed separately
|
|
36
|
-
* by the host's session accounting. Do not read `invocations` as "turns".
|
|
37
|
-
*
|
|
38
|
-
* Robustness contract (mirrors `lib/observability/signals-writer.js`):
|
|
39
|
-
* - **Best-effort writes.** A failed append is a missing metric, not a
|
|
40
|
-
* failed plan phase — fs errors are swallowed after a `Logger.warn`.
|
|
41
|
-
* - **No buffering / rotation.** The append tail (open → append one line →
|
|
42
|
-
* rotate at the byte cap → close) is owned by the shared
|
|
43
|
-
* `lib/observability/metrics-ledger.js` module (Story #4712); every
|
|
44
|
-
* appender here routes through it. The close-domain findings-yield
|
|
45
|
-
* entry point (Story #4699) lives there too, so the story-close review
|
|
46
|
-
* spine never imports this plan-domain module.
|
|
47
|
-
* - **Malformed-line tolerance on read.** The reader skips unparseable
|
|
48
|
-
* lines (counting them) instead of throwing, so a torn write can never
|
|
49
|
-
* wedge the analyzer.
|
|
50
|
-
*
|
|
51
|
-
* `plan-metrics.json` is intentionally NOT in
|
|
52
|
-
* `lib/plan-phase-cleanup.js#PHASE_TEMP_BASENAMES`: the ledger must survive
|
|
53
|
-
* phase cleanup so the whole plan run (spec → decompose → healthcheck) is
|
|
54
|
-
* visible in one stream.
|
|
7
|
+
* Writes are best-effort (a failed append is a missing metric, never a failed
|
|
8
|
+
* phase) via the shared `metrics-ledger.js` tail; reads skip and count
|
|
9
|
+
* malformed lines. The file deliberately survives phase cleanup so a whole
|
|
10
|
+
* plan run is one stream.
|
|
55
11
|
*/
|
|
56
12
|
|
|
57
13
|
import fs from 'node:fs/promises';
|
|
@@ -63,13 +19,10 @@ import {
|
|
|
63
19
|
planMetricsPath,
|
|
64
20
|
} from '../observability/metrics-ledger.js';
|
|
65
21
|
|
|
66
|
-
/** Record kind for a logged critic skip decision (Epic #4474 PR6). */
|
|
67
22
|
export const PLAN_METRICS_KIND_CRITIC_SKIP = 'critic-skip';
|
|
68
23
|
|
|
69
24
|
/**
|
|
70
|
-
* Append one invocation record
|
|
71
|
-
* (after a `Logger.warn`) instead of throwing on any fs failure, so metric
|
|
72
|
-
* capture can never fail a plan phase.
|
|
25
|
+
* Append one invocation record. Best-effort: warns and returns `false`.
|
|
73
26
|
*
|
|
74
27
|
* @param {{
|
|
75
28
|
* cli: string,
|
|
@@ -126,12 +79,8 @@ export async function appendPlanMetric(entry, config, opts = {}) {
|
|
|
126
79
|
}
|
|
127
80
|
|
|
128
81
|
/**
|
|
129
|
-
* Append
|
|
130
|
-
*
|
|
131
|
-
* deterministic reasons — so an under-firing critic layer (a distorted
|
|
132
|
-
* plan sailing through) is auditable after the fact. Best-effort with the
|
|
133
|
-
* same contract as `appendPlanMetric`: a failed append can never fail the
|
|
134
|
-
* plan step.
|
|
82
|
+
* Append a critic-skip record with its reasons, so an under-firing critic
|
|
83
|
+
* layer is auditable. Best-effort like `appendPlanMetric`.
|
|
135
84
|
*
|
|
136
85
|
* @param {{
|
|
137
86
|
* critic: string,
|
|
@@ -181,10 +130,8 @@ export async function appendCriticSkip(entry, config, opts = {}) {
|
|
|
181
130
|
}
|
|
182
131
|
|
|
183
132
|
/**
|
|
184
|
-
*
|
|
185
|
-
*
|
|
186
|
-
* failure. The metric write itself is best-effort and can never mask or
|
|
187
|
-
* replace the wrapped function's outcome.
|
|
133
|
+
* Run `fn` and record the invocation; the metric write never masks `fn`'s
|
|
134
|
+
* outcome.
|
|
188
135
|
*
|
|
189
136
|
* @template T
|
|
190
137
|
* @param {{ cli: string, mode: string, epicId?: number|null, config?: object }} meta
|
|
@@ -216,9 +163,7 @@ export async function recordPlanInvocation(meta, fn) {
|
|
|
216
163
|
}
|
|
217
164
|
|
|
218
165
|
/**
|
|
219
|
-
* Read the active ledger generation
|
|
220
|
-
* malformedLines: 0, missing: true }`. Malformed lines are skipped and
|
|
221
|
-
* counted, never thrown.
|
|
166
|
+
* Read the active ledger generation; malformed lines are counted, not thrown.
|
|
222
167
|
*
|
|
223
168
|
* @param {number|null} epicId
|
|
224
169
|
* @param {object} [config]
|
|
@@ -256,22 +201,18 @@ export async function readPlanMetrics(epicId, config) {
|
|
|
256
201
|
}
|
|
257
202
|
|
|
258
203
|
/**
|
|
259
|
-
*
|
|
260
|
-
*
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
*
|
|
269
|
-
*
|
|
270
|
-
* run
|
|
271
|
-
* every plan the repo has ever run, so an unfiltered summary reported
|
|
272
|
-
* lifetime totals under a line the reader takes to describe the invocation
|
|
273
|
-
* in front of them. Records are timestamped `startedAt` (invocations) or
|
|
274
|
-
* `at` (critic skips); either at-or-after `since` is in scope.
|
|
204
|
+
* @param {object} entry
|
|
205
|
+
* @returns {string|null}
|
|
206
|
+
*/
|
|
207
|
+
function recordTimestamp(entry) {
|
|
208
|
+
const stamp = typeof entry?.kind === 'string' ? entry.at : entry?.startedAt;
|
|
209
|
+
return typeof stamp === 'string' ? stamp : null;
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
/**
|
|
213
|
+
* Roll a ledger up for the persist summary; `null` when empty. Critic skips
|
|
214
|
+
* are tallied apart from invocations. `opts.since` (ISO-8601) scopes to one
|
|
215
|
+
* run — the standalone ledger is shared by every plan ever run.
|
|
275
216
|
*
|
|
276
217
|
* @param {{ entries: object[], malformedLines?: number }} ledger
|
|
277
218
|
* @param {{ since?: string|null }} [opts]
|
|
@@ -289,23 +230,10 @@ export async function readPlanMetrics(epicId, config) {
|
|
|
289
230
|
* malformedLines: number,
|
|
290
231
|
* }|null}
|
|
291
232
|
*/
|
|
292
|
-
/**
|
|
293
|
-
* Timestamp a ledger record is ordered by: `startedAt` for invocation
|
|
294
|
-
* records, `at` for kinded records (critic-skip, findings-yield).
|
|
295
|
-
*
|
|
296
|
-
* @param {object} entry
|
|
297
|
-
* @returns {string|null}
|
|
298
|
-
*/
|
|
299
|
-
function recordTimestamp(entry) {
|
|
300
|
-
const stamp = typeof entry?.kind === 'string' ? entry.at : entry?.startedAt;
|
|
301
|
-
return typeof stamp === 'string' ? stamp : null;
|
|
302
|
-
}
|
|
303
|
-
|
|
304
233
|
export function summarizePlanMetrics(ledger, opts = {}) {
|
|
305
234
|
const all = ledger?.entries ?? [];
|
|
306
235
|
const since = typeof opts.since === 'string' ? opts.since : null;
|
|
307
|
-
// ISO-8601 UTC strings
|
|
308
|
-
// compare is a correct (and allocation-free) instant compare here.
|
|
236
|
+
// ISO-8601 UTC strings compare correctly as strings.
|
|
309
237
|
const entries =
|
|
310
238
|
since === null
|
|
311
239
|
? all
|
|
@@ -333,9 +261,7 @@ export function summarizePlanMetrics(ledger, opts = {}) {
|
|
|
333
261
|
continue;
|
|
334
262
|
}
|
|
335
263
|
if (typeof e.kind === 'string') {
|
|
336
|
-
//
|
|
337
|
-
// an invocation — readers key on `kind`, never on absent fields, so it
|
|
338
|
-
// must not inflate the invocation/failure tallies.
|
|
264
|
+
// Other kinded records (e.g. `findings-yield`) are not invocations.
|
|
339
265
|
continue;
|
|
340
266
|
}
|
|
341
267
|
invocationEntries.push(e);
|
|
@@ -375,11 +301,6 @@ export function summarizePlanMetrics(ledger, opts = {}) {
|
|
|
375
301
|
}
|
|
376
302
|
|
|
377
303
|
/**
|
|
378
|
-
* Render the one-line human summary (snapshot-tested). Example:
|
|
379
|
-
*
|
|
380
|
-
* `plan-metrics: 3 invocation(s) (1 failed) across plan-context ×1,
|
|
381
|
-
* plan-critics ×1, plan-persist ×1 — span 12m 3s`
|
|
382
|
-
*
|
|
383
304
|
* @param {ReturnType<typeof summarizePlanMetrics>} summary
|
|
384
305
|
* @returns {string}
|
|
385
306
|
*/
|
|
@@ -409,7 +330,7 @@ export function renderPlanMetricsSummaryLine(summary) {
|
|
|
409
330
|
}
|
|
410
331
|
|
|
411
332
|
/**
|
|
412
|
-
*
|
|
333
|
+
* `45s`, `12m 3s`, `2h 5m`.
|
|
413
334
|
*
|
|
414
335
|
* @param {number} ms
|
|
415
336
|
* @returns {string}
|
|
@@ -1,19 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* plan-navigation.js —
|
|
3
|
-
* draft reachability check (`plan-reachability.js`).
|
|
4
|
-
*
|
|
5
|
-
* Extracted from the retired `epic-plan-healthcheck.js` so the live
|
|
6
|
-
* draft-ticket scan owns its own mechanics without pulling in the
|
|
7
|
-
* deleted post-plan healthcheck CLI.
|
|
2
|
+
* plan-navigation.js — navigability helpers for `plan-reachability.js`.
|
|
8
3
|
*/
|
|
9
4
|
|
|
10
5
|
/**
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
* The check is opt-in: a consumer that has not configured
|
|
14
|
-
* `planning.navigation.routeGlobs` gets a silent no-op. The nav-registry
|
|
15
|
-
* token list is what a route-adding Story is expected to reference
|
|
16
|
-
* somewhere in its body or `## Acceptance` section.
|
|
6
|
+
* Opt-in: no `planning.navigation.routeGlobs` means a silent no-op.
|
|
17
7
|
*
|
|
18
8
|
* @param {object} config Resolved `.agentrc.json`.
|
|
19
9
|
* @returns {{ routeGlobs: string[], navRegistry: string[] }}
|
|
@@ -31,20 +21,15 @@ export function resolveNavConfig(config) {
|
|
|
31
21
|
}
|
|
32
22
|
|
|
33
23
|
/**
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
* run of non-separator chars), and `?` (single non-separator char). All other
|
|
37
|
-
* characters are matched literally.
|
|
24
|
+
* `**` any depth, `*` any non-separator run, `?` one non-separator char;
|
|
25
|
+
* everything else literal.
|
|
38
26
|
*
|
|
39
27
|
* @param {string} glob
|
|
40
28
|
* @returns {RegExp}
|
|
41
29
|
*/
|
|
42
30
|
export function globToRegExp(glob) {
|
|
43
|
-
// Collapse
|
|
44
|
-
//
|
|
45
|
-
// (`.*/.*` / `.*.*`) that backtrack catastrophically on a long non-matching
|
|
46
|
-
// path. Collapsing to a single `**` preserves semantics and keeps the
|
|
47
|
-
// matcher linear (ReDoS hardening).
|
|
31
|
+
// Collapse `**/**` and `***` to `**`: adjacent `.*` runs backtrack
|
|
32
|
+
// catastrophically on long non-matching paths (ReDoS).
|
|
48
33
|
const normalized = glob
|
|
49
34
|
.replace(/\*\*(?:\/\*\*)+/g, '**')
|
|
50
35
|
.replace(/\*{3,}/g, '**');
|
|
@@ -68,10 +53,8 @@ export function globToRegExp(glob) {
|
|
|
68
53
|
}
|
|
69
54
|
|
|
70
55
|
/**
|
|
71
|
-
*
|
|
72
|
-
*
|
|
73
|
-
* object per bullet) and falls back to any bare `` `path/like/this` ``
|
|
74
|
-
* inline-code spans in the body.
|
|
56
|
+
* Paths a Story declares: `"path": "…"` change descriptors plus path-like
|
|
57
|
+
* inline code spans.
|
|
75
58
|
*
|
|
76
59
|
* @param {string} body
|
|
77
60
|
* @returns {string[]}
|
|
@@ -79,11 +62,9 @@ export function globToRegExp(glob) {
|
|
|
79
62
|
export function extractStoryPaths(body) {
|
|
80
63
|
if (typeof body !== 'string' || body.length === 0) return [];
|
|
81
64
|
const paths = new Set();
|
|
82
|
-
// `{"path":"pages/foo.tsx", ...}` change descriptors.
|
|
83
65
|
for (const m of body.matchAll(/"path"\s*:\s*"([^"]+)"/g)) {
|
|
84
66
|
paths.add(m[1]);
|
|
85
67
|
}
|
|
86
|
-
// Inline-code spans that look like a path (contain a slash or a dotted ext).
|
|
87
68
|
for (const m of body.matchAll(/`([^`]+)`/g)) {
|
|
88
69
|
const token = m[1].trim();
|
|
89
70
|
if (/[/.]/.test(token) && !token.includes(' ')) paths.add(token);
|
|
@@ -1,24 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* The handle belongs to the body renderer, which numbers each checkbox from
|
|
6
|
-
* its position in `acceptance[]` (`story-body.js`). An author planning from
|
|
7
|
-
* an existing ticket reads that rendered body as a template and carries the
|
|
8
|
-
* handle forward, so the persisted checkbox reads `- [ ] AC-1: AC-1: …`; a
|
|
9
|
-
* lettered handle copied out of a hand-edited source (`AC-14a:`) misnumbers
|
|
10
|
-
* the rest of the list against its own text.
|
|
11
|
-
*
|
|
12
|
-
* The correction is mechanical and total — strip the handle the renderer
|
|
13
|
-
* will re-apply — so this module applies it and **reports** it, exactly as
|
|
14
|
-
* `changes-repair.js` does for the `{ path, assumption }` formality. Charging
|
|
15
|
-
* the author a re-draft round to paste back text the strip already produced
|
|
16
|
-
* buys nothing.
|
|
17
|
-
*
|
|
18
|
-
* It lives beside the validator rather than inside it for the same reason
|
|
19
|
-
* `changes-repair.js` does: the validator's job is to judge, and mixing a
|
|
20
|
-
* mutating repair pass into a module of pure collectors muddies both.
|
|
21
|
-
* `persist-helpers.js#validateTickets` calls this first, then the validators.
|
|
2
|
+
* Strip an authored `AC-<n>:` handle from acceptance items (the body renderer
|
|
3
|
+
* numbers checkboxes itself, so a carried handle doubles or misnumbers) and
|
|
4
|
+
* report each strip rather than refusing.
|
|
22
5
|
*
|
|
23
6
|
* @module lib/orchestration/plan-persist/acceptance-handle-repair
|
|
24
7
|
*/
|
|
@@ -27,13 +10,10 @@ import { stripAcceptanceHandle } from '../../story-body/story-body.js';
|
|
|
27
10
|
import { renderChangeRepair } from './changes-repair.js';
|
|
28
11
|
|
|
29
12
|
/**
|
|
30
|
-
*
|
|
31
|
-
* strip on `repairs`.
|
|
32
|
-
*
|
|
33
|
-
* @param {object} surface An object that may carry an `acceptance` array.
|
|
13
|
+
* @param {object} surface
|
|
34
14
|
* @param {string} slug
|
|
35
|
-
* @param {Set<string>} reported
|
|
36
|
-
* @param {object[]} repairs
|
|
15
|
+
* @param {Set<string>} reported
|
|
16
|
+
* @param {object[]} repairs Mutated.
|
|
37
17
|
* @returns {void}
|
|
38
18
|
*/
|
|
39
19
|
function repairSurface(surface, slug, reported, repairs) {
|
|
@@ -51,18 +31,9 @@ function repairSurface(surface, slug, reported, repairs) {
|
|
|
51
31
|
}
|
|
52
32
|
|
|
53
33
|
/**
|
|
54
|
-
*
|
|
55
|
-
*
|
|
56
|
-
*
|
|
57
|
-
*
|
|
58
|
-
* A serialized **string** body needs no pass of its own — `parse()` strips
|
|
59
|
-
* the handle with the same grammar this does, so the two surfaces converge
|
|
60
|
-
* on one list whichever carried the handle, and the contract sync (which
|
|
61
|
-
* fails closed on a disagreement) sees them agree.
|
|
62
|
-
*
|
|
63
|
-
* Mutates `tickets` in place — the persist pipeline threads this same array
|
|
64
|
-
* on to assembly. Total: a non-array argument and non-Story tickets are
|
|
65
|
-
* no-ops.
|
|
34
|
+
* Covers the top-level array and a structured body; a string body needs no
|
|
35
|
+
* pass since `parse()` strips with the same grammar, so the fail-closed
|
|
36
|
+
* contract sync sees both agree. Mutates `tickets` in place.
|
|
66
37
|
*
|
|
67
38
|
* @param {object[]} tickets
|
|
68
39
|
* @returns {Array<{ kind: 'acceptance-handle', slug: string, from: string, to: string }>}
|
|
@@ -74,8 +45,7 @@ export function normalizeAcceptanceHandles(tickets) {
|
|
|
74
45
|
continue;
|
|
75
46
|
}
|
|
76
47
|
const slug = ticket.slug ?? ticket.title ?? '<unknown>';
|
|
77
|
-
//
|
|
78
|
-
// each distinct item once — the operator reads one correction, not two.
|
|
48
|
+
// Both surfaces usually carry the same list; report each item once.
|
|
79
49
|
const reported = new Set();
|
|
80
50
|
repairSurface(ticket, slug, reported, repairs);
|
|
81
51
|
const body = ticket.body;
|
|
@@ -87,15 +57,8 @@ export function normalizeAcceptanceHandles(tickets) {
|
|
|
87
57
|
}
|
|
88
58
|
|
|
89
59
|
/**
|
|
90
|
-
* Render one entry of the
|
|
91
|
-
*
|
|
92
|
-
* The list carries two kinds — a `changes[]` entry repaired by probing base,
|
|
93
|
-
* and an `acceptance[]` item whose handle was normalised off — and both are
|
|
94
|
-
* mechanical corrections the run applied on the author's behalf, so both
|
|
95
|
-
* belong on the one list the operator reads. This module owns the dispatch
|
|
96
|
-
* because it owns the newer kind: it renders its own line and delegates
|
|
97
|
-
* every other kind to `changes-repair.js`, so neither producer has to know
|
|
98
|
-
* the other's shape.
|
|
60
|
+
* Render one entry of the mixed repair list; non-handle kinds delegate to
|
|
61
|
+
* `changes-repair.js`.
|
|
99
62
|
*
|
|
100
63
|
* @param {{ kind?: string, slug: string, from: string, to?: string }} repair
|
|
101
64
|
* @returns {string}
|