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
|
@@ -11,36 +11,17 @@ import {
|
|
|
11
11
|
} from './config/github.js';
|
|
12
12
|
import { PATHS_DEFAULTS } from './config/paths.js';
|
|
13
13
|
import { SHELL_INJECTION_PATTERN_STRING } from './config-schema-shared.js';
|
|
14
|
-
// `delivery.*` sub-schemas were extracted to a sibling module (refs #3457)
|
|
15
|
-
// to keep this aggregate module above the maintainability floor. The
|
|
16
|
-
// resolved AGENTRC_SCHEMA is unchanged.
|
|
17
14
|
import { DELIVERY_SCHEMA } from './config-settings-schema-delivery.js';
|
|
18
15
|
import compiledAgentrcValidator from './generated/agentrc-validator.js';
|
|
19
16
|
import { DEFAULT_FRAMEWORK_REPO } from './github/framework-repo.js';
|
|
20
17
|
import { SKILL_ID_RE } from './skills/walk-skill-files.js';
|
|
21
18
|
|
|
22
19
|
/**
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
* (`.agents/schemas/agentrc.schema.json`, which every consumer config
|
|
29
|
-
* points `$schema` at) and into the `configuration.md` key table.
|
|
30
|
-
* - `default` — the value that appears in the generated defaults
|
|
31
|
-
* inventory `.agents/docs/agentrc-reference.json` (the SSOT
|
|
32
|
-
* `lib/config/defaults.js` reads for `mandrel explain` and the
|
|
33
|
-
* sync-agentrc redundancy advisory). Import the matching runtime
|
|
34
|
-
* `*_DEFAULTS` constant rather than restating a literal wherever one
|
|
35
|
-
* exists, so the annotation and the resolver cannot drift.
|
|
36
|
-
*
|
|
37
|
-
* A key with a runtime default but no `default` annotation is deliberately
|
|
38
|
-
* out of the inventory — annotating it would change what `mandrel explain`
|
|
39
|
-
* reports and what sync-agentrc flags redundant, which is a behaviour
|
|
40
|
-
* change, not a representation one.
|
|
41
|
-
*
|
|
42
|
-
* Nothing here is hand-mirrored any more: run `npm run docs:gen` after
|
|
43
|
-
* editing, and `npm run docs:check` fails closed on drift.
|
|
20
|
+
* The single annotated source for `.agentrc.json`: `description` feeds the
|
|
21
|
+
* generated JSON-Schema mirror and configuration.md; `default` feeds the
|
|
22
|
+
* defaults inventory (import the runtime `*_DEFAULTS` constant, never restate
|
|
23
|
+
* a literal). A runtime default left unannotated is deliberately out of the
|
|
24
|
+
* inventory. Run `npm run docs:gen` after editing.
|
|
44
25
|
*/
|
|
45
26
|
|
|
46
27
|
const SAFE_STRING = {
|
|
@@ -53,35 +34,18 @@ const _NULLABLE_SAFE_STRING = {
|
|
|
53
34
|
not: { type: 'string', pattern: SHELL_INJECTION_PATTERN_STRING },
|
|
54
35
|
};
|
|
55
36
|
|
|
56
|
-
/**
|
|
57
|
-
* Optional commands that may be `null` to mean "disabled" but, when set as a
|
|
58
|
-
* string, must be non-empty. `minLength` is a string-only keyword so it is a
|
|
59
|
-
* no-op for `null`; the empty string is explicitly rejected.
|
|
60
|
-
*/
|
|
37
|
+
/** `null` allowed; a string must be non-empty (`minLength` ignores `null`). */
|
|
61
38
|
const NULLABLE_NONEMPTY_SAFE_STRING = {
|
|
62
39
|
type: ['string', 'null'],
|
|
63
40
|
minLength: 1,
|
|
64
41
|
not: { type: 'string', pattern: SHELL_INJECTION_PATTERN_STRING },
|
|
65
42
|
};
|
|
66
43
|
|
|
67
|
-
/**
|
|
68
|
-
* Backwards-compatible export used by a handful of call sites that historically
|
|
69
|
-
* scanned the schema for string-shaped fields. Post-reshape, the only
|
|
70
|
-
* top-level flat string field of the legacy agentSettings bag is gone; the
|
|
71
|
-
* export is kept (empty) so old imports don't fail.
|
|
72
|
-
*/
|
|
44
|
+
/** Kept empty so existing imports still resolve. */
|
|
73
45
|
export const AGENT_SETTINGS_STRING_FIELDS = Object.freeze([]);
|
|
74
46
|
|
|
75
|
-
//
|
|
76
|
-
// project.* — identity, conventions, commands
|
|
77
|
-
// ---------------------------------------------------------------------------
|
|
47
|
+
// project.*
|
|
78
48
|
|
|
79
|
-
/**
|
|
80
|
-
* `project.paths` carries the three required filesystem roots. The seven
|
|
81
|
-
* legacy `*Root` subdirectory keys and the legacy `auditOutputDir` were
|
|
82
|
-
* dropped — every `${dir}Root` is derived at runtime as `${agentRoot}/<dir>`
|
|
83
|
-
* and `auditOutputDir` is derived as `${tempRoot}/audits`.
|
|
84
|
-
*/
|
|
85
49
|
const PATHS_SCHEMA = {
|
|
86
50
|
type: 'object',
|
|
87
51
|
description:
|
|
@@ -113,12 +77,6 @@ const PATHS_SCHEMA = {
|
|
|
113
77
|
additionalProperties: false,
|
|
114
78
|
};
|
|
115
79
|
|
|
116
|
-
/**
|
|
117
|
-
* `project.commands` — names of the test/typecheck/lint/format commands the
|
|
118
|
-
* close-validation chain spawns. `typecheck` accepts `null` to mean
|
|
119
|
-
* "disabled"; `lint` accepts `null` to mean "use the framework default",
|
|
120
|
-
* because that gate is mandatory and cannot be switched off. `validate` and `build` were dropped (no production consumers).
|
|
121
|
-
*/
|
|
122
80
|
const COMMANDS_SCHEMA = {
|
|
123
81
|
type: 'object',
|
|
124
82
|
description:
|
|
@@ -190,35 +148,11 @@ const PROJECT_SCHEMA = {
|
|
|
190
148
|
additionalProperties: false,
|
|
191
149
|
};
|
|
192
150
|
|
|
193
|
-
//
|
|
194
|
-
// github.* — provider identity, bootstrap, notifications
|
|
195
|
-
// ---------------------------------------------------------------------------
|
|
151
|
+
// github.*
|
|
196
152
|
|
|
197
153
|
/**
|
|
198
|
-
*
|
|
199
|
-
*
|
|
200
|
-
* v2 runtime actually emits through `notify()` (Story transitions and merge
|
|
201
|
-
* outcomes).
|
|
202
|
-
*
|
|
203
|
-
* `loop.tick` was retired here on the same rule (Story #5024). Its only
|
|
204
|
-
* producer was `emit-loop-tick.js`, which published to the lifecycle bus and
|
|
205
|
-
* never called `notify()` at all — and the bus had no production caller, so
|
|
206
|
-
* the event could not reach a webhook by any path. The notify CLI cannot
|
|
207
|
-
* substitute: it hardcodes `event: 'operator-message'` and exposes no
|
|
208
|
-
* `--event` flag, so a consumer could not dispatch it either. It shipped in
|
|
209
|
-
* `NOTIFICATIONS_DEFAULTS`, which meant every consumer was subscribed by
|
|
210
|
-
* default to something that could never fire.
|
|
211
|
-
*
|
|
212
|
-
* `story.heartbeat` was retired here first (A22): the vocabulary's contract is
|
|
213
|
-
* "events the runtime actually emits", and nothing could emit this one. Its
|
|
214
|
-
* emitter (`emit-story-heartbeat.js`) demanded an `epicId >= 1` while the
|
|
215
|
-
* sole call path (`single-story-init.js` → `setActiveStoryEnv`) passed
|
|
216
|
-
* `epicId: null`, so `CC_EPIC_ID` was never set and the hook that would have
|
|
217
|
-
* fired the beat always short-circuited. Emitter, hook, and schema are all
|
|
218
|
-
* deleted; keeping the name allowlistable would let an operator subscribe to
|
|
219
|
-
* a channel that can never deliver. Removing it from the enum makes a
|
|
220
|
-
* resurrection fail loudly at config-validation time rather than silently
|
|
221
|
-
* never firing.
|
|
154
|
+
* Webhook allowlist vocabulary: only events the runtime can actually emit, so
|
|
155
|
+
* an operator can never subscribe to a channel that cannot deliver.
|
|
222
156
|
*/
|
|
223
157
|
export const WEBHOOK_EVENT_NAMES = Object.freeze([
|
|
224
158
|
'state-transition',
|
|
@@ -230,32 +164,11 @@ export const WEBHOOK_EVENT_NAMES = Object.freeze([
|
|
|
230
164
|
]);
|
|
231
165
|
|
|
232
166
|
/**
|
|
233
|
-
*
|
|
234
|
-
*
|
|
235
|
-
*
|
|
236
|
-
*
|
|
237
|
-
* is
|
|
238
|
-
* issue*, so only events that are about one Story, and whose message reads
|
|
239
|
-
* as narrative an operator wants durably on the ticket, belong here. The
|
|
240
|
-
* webhook-only remainder — `merge.unlanded` and `merge.flip-failed` — are
|
|
241
|
-
* run-scoped beats; mirroring them onto the ticket would bury the narrative
|
|
242
|
-
* under machine chatter, and `notify()` drops a comment for any dispatch
|
|
243
|
-
* without a resolvable ticket id regardless.
|
|
244
|
-
*
|
|
245
|
-
* Note both webhook-only names are allowlistable but have no `notify()`
|
|
246
|
-
* dispatcher today — they reach the run ledger via `appendLedgerEvent`, not
|
|
247
|
-
* the notify path. That is a wiring gap, deliberately left alone by Story
|
|
248
|
-
* #5024 (which only removed `loop.tick`, whose producer went with the bus):
|
|
249
|
-
* unlike `loop.tick` these two have a live producer, so whether to wire the
|
|
250
|
-
* dispatch or drop the allowlist entries is an open decision, not dead code.
|
|
251
|
-
*
|
|
252
|
-
* `story-closing` IS in scope by that rule (Story-scoped, `level: 'story'`,
|
|
253
|
-
* human-readable — the same shape as `story-merged`) and its earlier
|
|
254
|
-
* absence was an oversight: the event was emittable to webhooks but could
|
|
255
|
-
* not be allowlisted for comments at all. It is in the vocabulary but NOT
|
|
256
|
-
* in the shipped default (`config/github.js` `NOTIFICATIONS_DEFAULTS`) —
|
|
257
|
-
* opting in is an operator choice, not a behaviour change forced on every
|
|
258
|
-
* consumer.
|
|
167
|
+
* Comment allowlist vocabulary, deliberately narrower than
|
|
168
|
+
* {@link WEBHOOK_EVENT_NAMES}: only Story-scoped narrative events belong on a
|
|
169
|
+
* ticket. The run-scoped `merge.*` beats stay webhook-only (they reach the
|
|
170
|
+
* run ledger, not `notify()`; wiring them is an open decision, not dead code).
|
|
171
|
+
* `story-closing` is allowlistable but not in the shipped default.
|
|
259
172
|
*/
|
|
260
173
|
export const COMMENT_EVENT_NAMES = Object.freeze([
|
|
261
174
|
'state-transition',
|
|
@@ -372,12 +285,8 @@ const MERGE_METHODS_SCHEMA = {
|
|
|
372
285
|
};
|
|
373
286
|
|
|
374
287
|
/**
|
|
375
|
-
*
|
|
376
|
-
*
|
|
377
|
-
* `github.owner`/`github.repo` already carry the consumer bucket, so only the
|
|
378
|
-
* other two are configured here. Routing itself lives in
|
|
379
|
-
* `lib/github/framework-repo.js`; an unset bucket is reported as unroutable
|
|
380
|
-
* rather than silently re-pointed at the consumer's own tracker.
|
|
288
|
+
* The non-consumer follow-up buckets (`github.owner/repo` is the consumer
|
|
289
|
+
* one). An unset bucket is reported unroutable, never re-pointed locally.
|
|
381
290
|
*/
|
|
382
291
|
const FOLLOW_UP_REPOS_SCHEMA = {
|
|
383
292
|
type: 'object',
|
|
@@ -441,13 +350,6 @@ const GITHUB_SCHEMA = {
|
|
|
441
350
|
'The human the framework escalates to, `@`-prefixed. Used for HITL @-mentions on `agent::blocked`.',
|
|
442
351
|
default: '@[USERNAME]',
|
|
443
352
|
},
|
|
444
|
-
defaultTimeoutMs: {
|
|
445
|
-
type: 'integer',
|
|
446
|
-
minimum: 1000,
|
|
447
|
-
description:
|
|
448
|
-
'Default `timeoutMs` applied to every `gh` subprocess the provider facade spawns, so a stalled socket or long-poll cannot hang an orchestration indefinitely. A `GhExecTimeoutError` from a hit ceiling is classified `transient` and retried by `withTransientRetry`. Story #2860.',
|
|
449
|
-
default: 60000,
|
|
450
|
-
},
|
|
451
353
|
followUpRepos: FOLLOW_UP_REPOS_SCHEMA,
|
|
452
354
|
branchProtection: BRANCH_PROTECTION_SCHEMA,
|
|
453
355
|
mergeMethods: MERGE_METHODS_SCHEMA,
|
|
@@ -456,63 +358,13 @@ const GITHUB_SCHEMA = {
|
|
|
456
358
|
additionalProperties: false,
|
|
457
359
|
};
|
|
458
360
|
|
|
459
|
-
//
|
|
460
|
-
// planning.* — inputs to /mandrel-plan
|
|
461
|
-
// ---------------------------------------------------------------------------
|
|
462
|
-
|
|
463
|
-
// Story #4541: `planning.context.{maxBytes, summaryMode}` was retired. The
|
|
464
|
-
// `applyBudget` pass it fed lost its last caller in the v2 cutover, and it
|
|
465
|
-
// bounded a field the envelope builders discarded before shipping the raw seed
|
|
466
|
-
// anyway — so the key resolved but capped nothing. The live bound on
|
|
467
|
-
// planner-context size is the fixed `PLAN_CONTEXT_ENVELOPE_BYTE_CEILING` in
|
|
468
|
-
// `lib/orchestration/plan-context.js`. Setting `planning.context` is now
|
|
469
|
-
// rejected as an additional property, so a resurrected key fails loudly rather
|
|
470
|
-
// than silently doing nothing.
|
|
471
|
-
|
|
472
|
-
// Story #4811: the `planning` block's structural-snapshot key was retired
|
|
473
|
-
// along with the snapshot itself. The pre-computed view it configured grounded
|
|
474
|
-
// nothing — its default include globs missed the standard monorepo layout, and
|
|
475
|
-
// its knobs only re-filtered the same matched set. Spec authoring is grounded
|
|
476
|
-
// by the author's own targeted repo retrieval plus the Phase 8
|
|
477
|
-
// `validateStoryFileAssumptions` gate, neither of which is configurable here.
|
|
478
|
-
// `planning` carries `additionalProperties: false`, so a resurrected key fails
|
|
479
|
-
// loudly; the 2.20.0 retirement migration strips it on upgrade.
|
|
480
|
-
|
|
481
|
-
// Story #5312 — the planning diet. `riskHeuristics`, `complexityGate`,
|
|
482
|
-
// `memoryPool.{staleAfterDays, growthDelta}`, `failOnSharedEditors`,
|
|
483
|
-
// `requireExplicitCrossStoryDeps`, `failOnRegistryConflicts`,
|
|
484
|
-
// `failOnLargeFanOut`, `largeFanOutThreshold` and `crossCuttingRegistries`
|
|
485
|
-
// were retired together: every one either never fired on real work, duplicated
|
|
486
|
-
// a judgment the authoring model already makes, or guarded a consumer that no
|
|
487
|
-
// longer exists. The block stays `additionalProperties: false`, so a config
|
|
488
|
-
// still carrying one fails loudly; the 2.57.0 retirement migration strips them
|
|
489
|
-
// on upgrade.
|
|
361
|
+
// planning.* — `additionalProperties: false`, so a retired key fails loudly.
|
|
490
362
|
|
|
491
363
|
const PLANNING_SCHEMA = {
|
|
492
364
|
type: 'object',
|
|
493
365
|
description:
|
|
494
|
-
'Inputs to `/mandrel-plan`: the
|
|
366
|
+
'Inputs to `/mandrel-plan`: the opt-in navigability reachability gate.',
|
|
495
367
|
properties: {
|
|
496
|
-
// The `/mandrel-plan` Phase 0 memory-hygiene advisory's one surviving
|
|
497
|
-
// arm (Story #5285; the age and growth arms went with Story #5312).
|
|
498
|
-
memoryPool: {
|
|
499
|
-
type: 'object',
|
|
500
|
-
description:
|
|
501
|
-
'Threshold for the memory-hygiene advisory `/mandrel-plan` surfaces at Gate #1. Advisory only: it recommends `/memory-consolidate` and never gates, reroutes, or mutates the memory pool.',
|
|
502
|
-
properties: {
|
|
503
|
-
indexByteCeiling: {
|
|
504
|
-
type: 'integer',
|
|
505
|
-
minimum: 1,
|
|
506
|
-
description:
|
|
507
|
-
"Recommend a consolidation pass once the pool's `MEMORY.md` index exceeds this many bytes. The harness truncates the index it loads into each session at its own byte cap, so an oversized index is a loss already happening — every entry listed after the cut is invisible — rather than a hygiene forecast. Default 24576, the harness cap itself.",
|
|
508
|
-
default: 24576,
|
|
509
|
-
},
|
|
510
|
-
},
|
|
511
|
-
additionalProperties: false,
|
|
512
|
-
},
|
|
513
|
-
// Navigability-reachability config consumed by the plan-persist draft
|
|
514
|
-
// reachability gate (Epic #4131 F7; demoted into persist by #4474 PR6).
|
|
515
|
-
// Opt-in: absent or empty routeGlobs degrades to a silent no-op.
|
|
516
368
|
navigation: {
|
|
517
369
|
type: 'object',
|
|
518
370
|
description:
|
|
@@ -539,49 +391,10 @@ const PLANNING_SCHEMA = {
|
|
|
539
391
|
additionalProperties: false,
|
|
540
392
|
};
|
|
541
393
|
|
|
542
|
-
//
|
|
543
|
-
// delivery.* — /mandrel-deliver + story-deliver consume. The full block of
|
|
544
|
-
// per-key sub-schemas lives in `config-settings-schema-delivery.js` (refs
|
|
545
|
-
// #3457); DELIVERY_SCHEMA is imported above and referenced unchanged below.
|
|
546
|
-
// ---------------------------------------------------------------------------
|
|
547
|
-
// Top-level: { project, github, planning, delivery }
|
|
548
|
-
// ---------------------------------------------------------------------------
|
|
394
|
+
// qa.* — agent-driven QA harness contract.
|
|
549
395
|
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
*
|
|
553
|
-
* The four blocks mirror SDLC phases:
|
|
554
|
-
* - `project` — identity, paths, commands, docs context.
|
|
555
|
-
* - `github` — provider identity, branch protection, merge methods,
|
|
556
|
-
* notifications.
|
|
557
|
-
* - `planning` — the memory-hygiene advisory ceiling, navigability gate.
|
|
558
|
-
* - `delivery` — execution timeouts, worktree isolation, deliver-runner
|
|
559
|
-
* concurrency, docs-freshness, signals, quality.
|
|
560
|
-
*
|
|
561
|
-
* Hard cutover (Epic #2646, Story #2687; finalized by Epic #2880, Story
|
|
562
|
-
* #2935): the legacy `agentSettings.*` / `orchestration.*` input shape is
|
|
563
|
-
* rejected entirely by this schema (top-level `additionalProperties: false`
|
|
564
|
-
* fails any document carrying those keys), the corresponding resolver-side
|
|
565
|
-
* compat branches were swept across the seven `lib/config/*.js` accessors,
|
|
566
|
-
* and the output-side shim on `resolveConfig` was deleted — every consumer
|
|
567
|
-
* now reads the canonical `project` / `github` / `planning` / `delivery`
|
|
568
|
-
* blocks directly.
|
|
569
|
-
*/
|
|
570
|
-
// ---------------------------------------------------------------------------
|
|
571
|
-
// qa.* — Agent-driven QA harness contract (Epic #3214)
|
|
572
|
-
// ---------------------------------------------------------------------------
|
|
573
|
-
|
|
574
|
-
// The per-environment sign-in seam. `{ urlTemplate }` is a dev
|
|
575
|
-
// impersonation route; `{ skill }` names a skill by its tier-relative id
|
|
576
|
-
// (e.g. `stack/qa/acme-sso`), resolved against the payload skills root and
|
|
577
|
-
// then the consumer-writable `.agents/local/skills/` zone (Story #5135).
|
|
578
|
-
//
|
|
579
|
-
// No default anywhere in this file may name a skill id: the framework ships
|
|
580
|
-
// no sign-in skill, so any id baked into an inventory value would be a
|
|
581
|
-
// dangling pointer a consumer copies verbatim — the exact defect #5134
|
|
582
|
-
// reported. The `{ skill }` arm is taught in prose (`.agents/README.md`
|
|
583
|
-
// § "Expose a `signInSeam`"), and `resolveQaEnvironment` fails loudly on an
|
|
584
|
-
// id that resolves under neither root.
|
|
396
|
+
// No default in this file may name a skill id: the framework ships no sign-in
|
|
397
|
+
// skill, so any baked-in id is a dangling pointer consumers copy verbatim.
|
|
585
398
|
const QA_SIGN_IN_SEAM_SCHEMA = {
|
|
586
399
|
oneOf: [
|
|
587
400
|
{
|
|
@@ -595,10 +408,8 @@ const QA_SIGN_IN_SEAM_SCHEMA = {
|
|
|
595
408
|
{
|
|
596
409
|
type: 'object',
|
|
597
410
|
properties: {
|
|
598
|
-
// The id is joined onto a skills root
|
|
599
|
-
//
|
|
600
|
-
// `SKILL_ID_RE` is imported, never restated: one regex, two
|
|
601
|
-
// enforcement points — this schema and `resolveSkillFile`.
|
|
411
|
+
// The id is joined onto a skills root, so its shape is validated here;
|
|
412
|
+
// `SKILL_ID_RE` is shared with `resolveSkillFile`, never restated.
|
|
602
413
|
skill: {
|
|
603
414
|
...SAFE_STRING,
|
|
604
415
|
minLength: 1,
|
|
@@ -613,21 +424,11 @@ const QA_SIGN_IN_SEAM_SCHEMA = {
|
|
|
613
424
|
],
|
|
614
425
|
};
|
|
615
426
|
|
|
616
|
-
//
|
|
617
|
-
// persona names is the honest shape for a `urlTemplate` dev-impersonation
|
|
618
|
-
// seam, where the workflow substitutes only the persona name into the URL
|
|
619
|
-
// and never reads per-persona auth material. The object-map form (keyed by
|
|
620
|
-
// persona name, each entry carrying `credentialRef` or `signInSkill`) is
|
|
621
|
-
// for `skill`/credential seams where per-persona material is genuinely
|
|
622
|
-
// consulted. The resolver normalizes both to one canonical internal form.
|
|
427
|
+
// The resolver normalizes both shapes to one canonical internal form.
|
|
623
428
|
const QA_PERSONAS_SCHEMA = {
|
|
624
429
|
description:
|
|
625
430
|
'Personas the QA-harness sign-in seam accepts. Two accepted shapes: (1) a plain array of persona names — the honest shape for a `urlTemplate` dev-impersonation seam, where the persona name is the sole input the workflow consumes; (2) the object-map form keyed by persona name, where each entry carries per-persona auth material (`credentialRef` or `signInSkill`) consulted only under a skill-based or credential-based seam.',
|
|
626
|
-
//
|
|
627
|
-
// Inventory value: illustrative credential references, not resolvable
|
|
628
|
-
// ones. It deliberately does NOT illustrate the `signInSkill` arm — a
|
|
629
|
-
// skill id in a shipped default is a dangling pointer (see
|
|
630
|
-
// QA_SIGN_IN_SEAM_SCHEMA above); that arm is taught in prose instead.
|
|
431
|
+
// Illustrative only; omits the `signInSkill` arm (no skill ids in defaults).
|
|
631
432
|
default: {
|
|
632
433
|
admin: { credentialRef: 'QA_ADMIN_CREDENTIAL' },
|
|
633
434
|
member: { credentialRef: 'QA_MEMBER_CREDENTIAL' },
|
|
@@ -665,23 +466,11 @@ const QA_PERSONAS_SCHEMA = {
|
|
|
665
466
|
],
|
|
666
467
|
};
|
|
667
468
|
|
|
668
|
-
// `environments` is the environment-keyed contract (Epic #4326, Story #4327).
|
|
669
|
-
// It replaces the retired top-level single `signInSeam` shape: each named
|
|
670
|
-
// environment carries its own `baseUrl`, its own per-environment `signInSeam`
|
|
671
|
-
// (reusing the same url-template/skill union), and an optional `allowWrites`
|
|
672
|
-
// gate. Downstream, `resolveQaEnvironment` selects one environment per
|
|
673
|
-
// invocation by name or by raw-URL origin match against `baseUrl`. The map
|
|
674
|
-
// must carry at least one environment. This is a hard cutover — there is no
|
|
675
|
-
// top-level `signInSeam` acceptance branch (see
|
|
676
|
-
// `.agents/rules/git-conventions.md` § Contract Cutovers).
|
|
677
469
|
const QA_ENVIRONMENTS_SCHEMA = {
|
|
678
470
|
type: 'object',
|
|
679
471
|
description:
|
|
680
472
|
'Deployment targets the QA harness can run against (Epic #4326). A map keyed by environment name (e.g. `local`, `staging`), each carrying its own `baseUrl`, an optional per-environment sign-in seam, and an optional `allowWrites` gate. `signInSeam` is the union `{ urlTemplate }` (a dev impersonation route) or `{ skill }` (a skill id such as `stack/qa/acme-sso`, resolved against `.agents/skills/` then the consumer-writable `.agents/local/skills/` zone, and rejected loudly by resolveQaEnvironment when it resolves under neither); omit it entirely for a target with no sign-in seam. resolveQaEnvironment selects one environment per invocation by name or by raw-URL origin match against `baseUrl`; `allowWrites` defaults to true only for the `local` environment. Replaces the retired top-level single `signInSeam`.',
|
|
681
|
-
//
|
|
682
|
-
// default. `staging` deliberately carries NO `signInSeam` — that is the
|
|
683
|
-
// honest shape for a deployed target with no dev sign-in seam, and it
|
|
684
|
-
// shows the field is optional (Story #5135).
|
|
473
|
+
// Illustrative; `staging` omits `signInSeam` to show it is optional.
|
|
685
474
|
default: {
|
|
686
475
|
local: {
|
|
687
476
|
baseUrl: 'http://localhost:3000',
|
|
@@ -700,29 +489,19 @@ const QA_ENVIRONMENTS_SCHEMA = {
|
|
|
700
489
|
signInSeam: QA_SIGN_IN_SEAM_SCHEMA,
|
|
701
490
|
allowWrites: { type: 'boolean' },
|
|
702
491
|
},
|
|
703
|
-
//
|
|
704
|
-
// seam is a state the QA workflows already branch on — they drive the
|
|
705
|
-
// unauthenticated surface and record the gap — so requiring it made an
|
|
706
|
-
// honestly seamless remote target undeclarable.
|
|
492
|
+
// No seam is a state QA workflows handle (unauthenticated drive).
|
|
707
493
|
required: ['baseUrl'],
|
|
708
494
|
additionalProperties: false,
|
|
709
495
|
},
|
|
710
496
|
};
|
|
711
497
|
|
|
712
|
-
//
|
|
713
|
-
//
|
|
714
|
-
// gate is opt-in as a whole, so presence of the block IS the opt-in signal,
|
|
715
|
-
// and `check-gherkin-corpus.js` needs exactly one thing to test for. `scopes`
|
|
716
|
-
// is a map rather than an array because a scope's name appears verbatim in
|
|
717
|
-
// every finding, and a map makes naming it mandatory. Defaults for the two
|
|
718
|
-
// escape hatches live in `lib/config/qa.js` (GHERKIN_LINT_DEFAULTS).
|
|
498
|
+
// Presence of the block is the opt-in signal. `scopes` is a map so every
|
|
499
|
+
// scope is named (the name appears in each finding).
|
|
719
500
|
const QA_GHERKIN_LINT_SCHEMA = {
|
|
720
501
|
type: 'object',
|
|
721
502
|
description:
|
|
722
503
|
'Static Gherkin corpus gate (Story #5013). Optional; the gate runs only when this block is present, so an upgrade never reddens the lint of a consumer that never asked the framework to police its `.feature` files. Inside the opt-in it fails closed: an unresolvable `@cucumber/gherkin` parser, or a scope resolving zero step definitions, exits 1 rather than reporting a clean run.',
|
|
723
|
-
//
|
|
724
|
-
// default. Every path here is project-specific; the entry exists so
|
|
725
|
-
// `mandrel explain` can show the expected shape.
|
|
504
|
+
// Illustrative shape for `mandrel explain`, not a resolvable default.
|
|
726
505
|
default: {
|
|
727
506
|
scopes: {
|
|
728
507
|
web: {
|
|
@@ -841,13 +620,7 @@ export const AGENTRC_SCHEMA = {
|
|
|
841
620
|
let _agentrcValidator = null;
|
|
842
621
|
|
|
843
622
|
/**
|
|
844
|
-
*
|
|
845
|
-
*
|
|
846
|
-
* `ajv` is pulled in through `createRequire` rather than a top-level
|
|
847
|
-
* `import` so the module never enters the graph on the fast path
|
|
848
|
-
* (Story #5109). Loading AJV was itself a measurable share of the ~35 ms
|
|
849
|
-
* this function used to cost in each of the 36 config-touching entry
|
|
850
|
-
* scripts, and the precompiled validator needs none of it.
|
|
623
|
+
* `ajv` loads via `createRequire` so it stays off the fast path entirely.
|
|
851
624
|
*
|
|
852
625
|
* @returns {import('ajv').ValidateFunction}
|
|
853
626
|
*/
|
|
@@ -860,20 +633,10 @@ function compileAgentrcValidatorDynamically() {
|
|
|
860
633
|
}
|
|
861
634
|
|
|
862
635
|
/**
|
|
863
|
-
*
|
|
864
|
-
*
|
|
865
|
-
*
|
|
866
|
-
*
|
|
867
|
-
* `AGENTRC_SCHEMA` literal above, kept in step by
|
|
868
|
-
* `check-generated-validator.js --check` inside `npm run lint`. The verdicts
|
|
869
|
-
* are AJV's own, produced by AJV's own generated code with the same
|
|
870
|
-
* `allErrors: true` option the dynamic path uses, so nothing about what a
|
|
871
|
-
* config is allowed to contain changes — only when the codegen runs.
|
|
872
|
-
*
|
|
873
|
-
* Set `MANDREL_AGENTRC_VALIDATOR=dynamic` to compile at runtime instead. That
|
|
874
|
-
* escape hatch exists so a consumer who has hand-edited the schema (or hit a
|
|
875
|
-
* platform where the generated module will not load) is never stuck with a
|
|
876
|
-
* validator they cannot regenerate; it costs the ~35 ms the artifact removes.
|
|
636
|
+
* Returns the precompiled AJV standalone validator (kept in step with
|
|
637
|
+
* `AGENTRC_SCHEMA` by `check-generated-validator.js`).
|
|
638
|
+
* `MANDREL_AGENTRC_VALIDATOR=dynamic` compiles at runtime instead, for a
|
|
639
|
+
* hand-edited schema or a platform where the generated module won't load.
|
|
877
640
|
*
|
|
878
641
|
* @returns {import('ajv').ValidateFunction}
|
|
879
642
|
*/
|