mandrel 2.60.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 +10 -10
- package/.agents/agents/story-worker.md +1 -1
- package/.agents/docs/agentrc-reference.json +4 -82
- package/.agents/docs/configuration.md +20 -87
- package/.agents/docs/workflows.md +1 -1
- package/.agents/instructions.md +1 -3
- package/.agents/rules/gherkin-standards.md +4 -0
- package/.agents/schemas/agentrc.schema.json +11 -486
- package/.agents/schemas/story-deliver-terminal.schema.json +10 -0
- package/.agents/schemas/validation-evidence.schema.json +2 -1
- package/.agents/scripts/README.md +14 -14
- package/.agents/scripts/acceptance-eval.js +32 -164
- 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 +9 -45
- package/.agents/scripts/check-arch-cycles.js +14 -64
- package/.agents/scripts/check-baselines.js +8 -48
- package/.agents/scripts/check-context-budget.js +46 -172
- 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 +32 -99
- package/.agents/scripts/deliver-light.js +14 -101
- package/.agents/scripts/deliver-recover.js +6 -42
- package/.agents/scripts/deliver-run.js +36 -133
- 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 +10 -50
- 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 +5 -21
- 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 +31 -143
- 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 -35
- package/.agents/scripts/lib/config/explain.js +9 -80
- package/.agents/scripts/lib/config/gates/coverage.schema.js +0 -12
- package/.agents/scripts/lib/config/gates/crap-incremental-coverage.schema.js +2 -30
- 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 +10 -52
- package/.agents/scripts/lib/config-schema-shared.js +1 -4
- package/.agents/scripts/lib/config-settings-schema-delivery.js +12 -294
- 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 +12 -37
- package/.agents/scripts/lib/coverage-capture-incremental.js +12 -43
- package/.agents/scripts/lib/coverage-capture-usage.js +4 -24
- 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 -126
- 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 +93 -419
- package/.agents/scripts/lib/feedback-loop/prior-feedback-fetcher.js +20 -98
- package/.agents/scripts/lib/feedback-loop/retro-proposals-graduator.js +27 -151
- 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 +31 -259
- 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 +21 -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 +5 -75
- 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 +42 -189
- 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 +42 -214
- 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 +26 -231
- 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 +52 -303
- 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 +14 -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 +49 -248
- package/.agents/scripts/lib/orchestration/plan-persist/soft-findings.js +2 -12
- package/.agents/scripts/lib/orchestration/plan-persist/story-ops.js +85 -368
- package/.agents/scripts/lib/orchestration/plan-persist/summary.js +8 -38
- package/.agents/scripts/lib/orchestration/plan-persist/supersede-ops.js +30 -190
- 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 -94
- 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 +40 -199
- package/.agents/scripts/lib/orchestration/run-scoped-config.js +13 -81
- 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 +18 -80
- 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 +9 -50
- 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 +110 -290
- 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 -201
- package/.agents/scripts/lib/orchestration/story-follow-ups.js +43 -245
- package/.agents/scripts/lib/orchestration/story-init-envelope.js +4 -23
- 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 -126
- 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 +39 -181
- package/.agents/scripts/lib/orchestration/ticketing/bulk.js +51 -244
- package/.agents/scripts/lib/orchestration/ticketing/reads.js +39 -250
- 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 +22 -83
- package/.agents/scripts/lib/story-body/footer-block.js +11 -44
- package/.agents/scripts/lib/story-body/story-body.js +83 -358
- package/.agents/scripts/lib/temp-retention.js +42 -143
- package/.agents/scripts/lib/templates/decomposer-prompts.js +11 -65
- 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 +53 -221
- 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 -104
- package/.agents/scripts/nav-registry-diff.js +22 -108
- package/.agents/scripts/notify.js +12 -69
- package/.agents/scripts/plan-context.js +27 -111
- package/.agents/scripts/plan-critics.js +12 -66
- package/.agents/scripts/plan-persist.js +31 -148
- package/.agents/scripts/plan-run-epilogue.js +11 -37
- package/.agents/scripts/pr-watch-with-update.js +76 -267
- 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 -209
- package/.agents/scripts/stories-wave-tick.js +102 -472
- 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/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/audit-lens-core.md +1 -1
- package/.agents/workflows/helpers/code-quality-guardrails.md +12 -15
- package/.agents/workflows/helpers/deliver-digest.md +6 -4
- package/.agents/workflows/helpers/deliver-reference.md +114 -188
- package/.agents/workflows/helpers/deliver-story-reference.md +189 -533
- package/.agents/workflows/helpers/plan-reference.md +86 -139
- package/.agents/workflows/helpers/qa-core.md +12 -0
- 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 +25 -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 +105 -661
- 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 +15 -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 +2 -21
- package/lib/migrations/steps/strip-removed-agentrc-keys.js +333 -0
- package/package.json +16 -14
- package/.agents/docs/SDLC.md +0 -590
- package/.agents/docs/quality-gates.md +0 -1183
- package/.agents/rules/known-tooling-behavior.md +0 -200
- 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/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 -368
- package/.agents/scripts/check-test-portability.js +0 -512
- package/.agents/scripts/check-workflow-citations.js +0 -218
- 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/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 -125
- package/.agents/scripts/test-isolate.js +0 -55
- package/.agents/scripts/update-dead-exports-baseline.js +0 -321
|
@@ -53,10 +53,7 @@ the first `createIssue`, and refuses any pair of same-wave siblings that both
|
|
|
53
53
|
declare a path (or one of which declares a covering glob) — naming the pair,
|
|
54
54
|
the paths and the two remedies (merge them, or order them with `depends_on`).
|
|
55
55
|
Such a pair cannot be co-dispatched, so the split buys no parallelism and
|
|
56
|
-
costs a delivery session per Story.
|
|
57
|
-
which refused only byte-identical acceptance text across siblings — a shape
|
|
58
|
-
model output does not produce — so it never fired on the fragmentation it was
|
|
59
|
-
meant to catch. **N=1 can never trip the refusal.**
|
|
56
|
+
costs a delivery session per Story. **N=1 can never trip the refusal.**
|
|
60
57
|
|
|
61
58
|
A draft of more than one Story also stops at **Gate #2** for operator
|
|
62
59
|
approval, `--force-review` or not: a split always earns eyes. `--yes`
|
|
@@ -65,8 +62,7 @@ auto-proceeds, as at every other gate.
|
|
|
65
62
|
## Unknown triage — AFK vs HITL
|
|
66
63
|
|
|
67
64
|
Every open question interrogation surfaces is triaged by **who can resolve
|
|
68
|
-
it**, not parked in one bucket
|
|
69
|
-
HITL/AFK ticket typing):
|
|
65
|
+
it**, not parked in one bucket:
|
|
70
66
|
|
|
71
67
|
- **AFK** (away from keyboard — the agent resolves it alone): the answer is a
|
|
72
68
|
fact something already records — third-party docs, a dependency's API
|
|
@@ -106,7 +102,7 @@ not re-deriving which assumptions were really the agent's to make.
|
|
|
106
102
|
|
|
107
103
|
Gate #1 stops for exactly two things — the sharpened plan intent and any HITL
|
|
108
104
|
unknown — and everything else the envelope surfaced collapses to **one
|
|
109
|
-
advisory line** beneath it
|
|
105
|
+
advisory line** beneath it. Nothing on that line stops the run,
|
|
110
106
|
reroutes it, or is invoked by `/mandrel-plan`; each item names something the
|
|
111
107
|
operator may prefer to do instead, and the run proceeds either way. Under
|
|
112
108
|
`--yes` the line is recorded and planning continues — an unattended run has
|
|
@@ -128,8 +124,7 @@ The line names, in order, whichever of these the envelope carries:
|
|
|
128
124
|
the same shape with a different owner.
|
|
129
125
|
- **`memoryPoolAdvisory.recommend`** — name
|
|
130
126
|
[`/memory-consolidate`](../memory-consolidate.md), quoting its
|
|
131
|
-
`reasons[]`.
|
|
132
|
-
harness's byte cap; a stale pool degrades recall, it does not make the plan
|
|
127
|
+
`reasons[]`. A stale pool degrades recall, it does not make the plan
|
|
133
128
|
wrong.
|
|
134
129
|
- **`complexitySignals.uiSurface`** — name [`/prototype`](../prototype.md)
|
|
135
130
|
and stop there. The signal carries **no routing authority and adds no
|
|
@@ -138,8 +133,8 @@ The line names, in order, whichever of these the envelope carries:
|
|
|
138
133
|
lenses gate on, and whether any predicted path matches a web lens
|
|
139
134
|
`filePattern` in `audit-rules.json`; a project with no rendered frontend
|
|
140
135
|
resolves falsey and the offer never fires. `/mandrel-plan` must never invoke
|
|
141
|
-
it —
|
|
142
|
-
|
|
136
|
+
it — the value is a human looking at a layout before its UI acceptance
|
|
137
|
+
criteria are frozen. Under
|
|
143
138
|
`--yes` the offer is recorded and planning proceeds — no reroute, no
|
|
144
139
|
prototype written, no gate raised.
|
|
145
140
|
|
|
@@ -149,12 +144,10 @@ The envelope's `complexitySignals` field carries the paths the seed predicts,
|
|
|
149
144
|
their repo state (existing paths predict refactors; missing predict creates)
|
|
150
145
|
and the `audit-rules.json` sensitive-path classes the footprint intersects —
|
|
151
146
|
`routingAuthority: false`, no `route` field. They ground the authoring
|
|
152
|
-
template's pre-resolved `changes[]` and the `/prototype` offer, nothing else
|
|
153
|
-
Story
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
and the acceptance verdict owner follows the operator's ceremony profile —
|
|
157
|
-
never anything a plan authored.
|
|
147
|
+
template's pre-resolved `changes[]` and the `/prototype` offer, nothing else:
|
|
148
|
+
every Story lands through the same engine and the same close gates, and the
|
|
149
|
+
acceptance verdict owner follows the operator's ceremony profile — never
|
|
150
|
+
anything a plan authored.
|
|
158
151
|
|
|
159
152
|
## Correct-by-construction authoring template
|
|
160
153
|
|
|
@@ -163,7 +156,7 @@ never anything a plan authored.
|
|
|
163
156
|
`complexitySignals` ran:
|
|
164
157
|
|
|
165
158
|
- **`verify[]` entries are commands.** There is no tier suffix and no
|
|
166
|
-
`manual:<reason>` escape
|
|
159
|
+
`manual:<reason>` escape: write the exact command or test
|
|
167
160
|
path the deliverer runs and the acceptance critic reads as evidence.
|
|
168
161
|
- **`changes[]` names what the deliverer authors.** Generated artifacts —
|
|
169
162
|
quality baselines, generated test indexes, migration journals, lockfiles —
|
|
@@ -201,12 +194,10 @@ numbers each checkbox from its array position, so a carried handle renders
|
|
|
201
194
|
doubled. Persist normalises one off rather than refusing, and names the strip
|
|
202
195
|
on the dry-run's repair list.
|
|
203
196
|
|
|
204
|
-
Nothing in that shape inventories the repo for the author
|
|
205
|
-
|
|
206
|
-
`validateStoryFileAssumptions
|
|
207
|
-
at persist
|
|
208
|
-
that gate. There is no pre-computed codebase snapshot to fall back on, and no
|
|
209
|
-
manifest-derived replacement to build.
|
|
197
|
+
Nothing in that shape inventories the repo for the author: the grounding
|
|
198
|
+
contract is the author's own targeted reads plus Phase 8's
|
|
199
|
+
`validateStoryFileAssumptions`, which re-probes every resolved
|
|
200
|
+
`{path, assumption}` at persist.
|
|
210
201
|
|
|
211
202
|
### Per-Story audit provenance (`provenance`)
|
|
212
203
|
|
|
@@ -234,20 +225,16 @@ work this plan already tracked.
|
|
|
234
225
|
| Present but empty (`{}`) | Nothing. "Owns no findings" is a real answer. |
|
|
235
226
|
| **Absent** | The **whole seed's** footers (the union) — the recall-safe default. |
|
|
236
227
|
|
|
237
|
-
**The union fallback is load-bearing, not legacy
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
key whose owning Story had since **closed** was masked by any open neighbour —
|
|
248
|
-
a genuine regression filed as a routine update. With ownership stamped, the
|
|
249
|
-
issue carrying a finding's own fingerprint decides both the match and its
|
|
250
|
-
state (`lib/findings/route-finding.js`).
|
|
228
|
+
**The union fallback is load-bearing, not legacy** — hand-carrying provenance
|
|
229
|
+
out of the seed's HTML comments is a step an author forgets. Attribution is
|
|
230
|
+
additive: it sharpens a plan that opts in and changes nothing for one that
|
|
231
|
+
does not. Never remove the fallback to "finish the migration".
|
|
232
|
+
|
|
233
|
+
Attribution makes the next sweep's dedup answerable: under the union a finding
|
|
234
|
+
confirming against several open Stories can only pick one, and a key whose
|
|
235
|
+
owning Story has **closed** is masked by an open neighbour. With ownership
|
|
236
|
+
stamped, the issue carrying a finding's own fingerprint decides both the match
|
|
237
|
+
and its state (`lib/findings/route-finding.js`).
|
|
251
238
|
|
|
252
239
|
The audit path authors this mechanically from the per-group footers the seed
|
|
253
240
|
already carries — see [`audit-to-stories`](../audit-to-stories.md). A `--seed`
|
|
@@ -257,24 +244,17 @@ or `--tickets` plan has nothing to attribute and omits the field.
|
|
|
257
244
|
|
|
258
245
|
The conflict passes run **twice**: once over the raw `stories.json` payload
|
|
259
246
|
(alongside the freshness, file-assumption and sizing gates), and again over the
|
|
260
|
-
**assembled, footer-stamped bodies** — the artifact persist actually posts
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
saw two empty arrays on the real payload and emitted nothing; the two
|
|
265
|
-
substring-match advisories that depended on it are retired, leaving
|
|
266
|
-
`shared-editor` as the one conflict kind. Both passes complete before the first
|
|
267
|
-
`createIssue`, so a refusal still costs no writes.
|
|
247
|
+
**assembled, footer-stamped bodies** — the artifact persist actually posts,
|
|
248
|
+
where top-level `acceptance[]` / `verify[]` have been folded in. `shared-editor`
|
|
249
|
+
is the one conflict kind. Both passes complete before the first `createIssue`,
|
|
250
|
+
so a refusal still costs no writes.
|
|
268
251
|
|
|
269
252
|
`shared-editor` findings are rendered into the plan-summary section of every
|
|
270
|
-
Story's posted `story-plan-state` comment, directly beneath the wave table: the
|
|
271
|
-
together, and a path two same-wave Stories
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
Every conflict class is advisory (Story #5312 retired the
|
|
276
|
-
`planning.failOn*` / `requireExplicitCrossStoryDeps` upgrade knobs with the
|
|
277
|
-
registry and fan-out findings): co-editing one file is routine and often
|
|
253
|
+
Story's posted `story-plan-state` comment, directly beneath the wave table: the
|
|
254
|
+
table promises which Stories can run together, and a path two same-wave Stories
|
|
255
|
+
both write is exactly where that promise breaks.
|
|
256
|
+
|
|
257
|
+
Every conflict class is advisory: co-editing one file is routine and often
|
|
278
258
|
correct — the delivery scheduler already serializes file-overlapping Stories —
|
|
279
259
|
and a path reference matched by substring can read as a dependency a prose
|
|
280
260
|
mention never meant. A finding names the Stories and the fix (a `depends_on`
|
|
@@ -284,10 +264,10 @@ edge, or folding the shared edit into one Story) for the operator to weigh.
|
|
|
284
264
|
|
|
285
265
|
A `--tickets` envelope carries a third author prompt beside
|
|
286
266
|
`systemPrompts.story` and `systemPrompts.storySplitRules`:
|
|
287
|
-
**`systemPrompts.storyTicketsRules`**.
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
267
|
+
**`systemPrompts.storyTicketsRules`**. A source ticket arrives already in
|
|
268
|
+
Story shape — rendered `AC-<n>:` checkboxes, a `## Verify` list, a
|
|
269
|
+
`## Changes` footprint — and an author reading it as a template carries that
|
|
270
|
+
shape forward instead of re-deriving it. The addendum
|
|
291
271
|
binds the author to re-derive `acceptance[]` from the goal, to express
|
|
292
272
|
mechanical checks (a refreshed baseline, a lint exiting 0, a regenerated
|
|
293
273
|
index) as `verify[]` commands rather than acceptance items, and to take the
|
|
@@ -332,9 +312,7 @@ the default is not what you mean.
|
|
|
332
312
|
|
|
333
313
|
## The pre-mortem critic — operator-invoked
|
|
334
314
|
|
|
335
|
-
The maker-blind **pre-mortem** critic is not a step of the spine
|
|
336
|
-
retired step 2.5 with the consolidation critic, whose one deterministic input
|
|
337
|
-
was a `## Delivery Slicing` table no Story carries). Run it when the operator
|
|
315
|
+
The maker-blind **pre-mortem** critic is not a step of the spine. Run it when the operator
|
|
338
316
|
asks for it, after Author and before Persist — the last point a finding folds
|
|
339
317
|
into a re-author:
|
|
340
318
|
|
|
@@ -374,18 +352,17 @@ a re-author round.
|
|
|
374
352
|
## What `--dry-run` actually gates
|
|
375
353
|
|
|
376
354
|
A bare `plan-persist.js` runs the whole gate list write-free and then, on a
|
|
377
|
-
clean list, persists in the same invocation
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
355
|
+
clean list, persists in the same invocation; `--dry-run` is that same first
|
|
356
|
+
half with the second suppressed. Either way every gate runs before the first
|
|
357
|
+
`createIssue` would fire. The gates split two ways, and the dry-run output is
|
|
358
|
+
where the second half is read:
|
|
381
359
|
|
|
382
360
|
**Hard — the run refuses:** a body that does not parse, a ticket that is not
|
|
383
361
|
a Story, an empty `acceptance[]`, an unknown or cyclic `depends_on`, the
|
|
384
362
|
same-wave collision refusal at N>1, a supersede claim on a non-source id or
|
|
385
363
|
one claimed twice, and a `deletes` entry naming a path absent at base.
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
empty `verify[]` is now a warning.
|
|
364
|
+
Commit subjects are not scanned — the `commit-msg` hook and
|
|
365
|
+
`normalize-pr-title.js` enforce them.
|
|
389
366
|
|
|
390
367
|
**Warnings — listed, then the persist proceeds:** a `creates` on a path that
|
|
391
368
|
exists at base or a `refactors-existing` on one that does not (including a
|
|
@@ -399,15 +376,11 @@ advisory `changes[]` is free to reshape out from under the criterion. The
|
|
|
399
376
|
list also names every **repair** the run applied — a plain-string bullet or a
|
|
400
377
|
trailing parenthetical rewritten into `{ path, assumption }` by probing base,
|
|
401
378
|
and an `AC-<n>:` handle normalised off an acceptance item. The same list rides
|
|
402
|
-
the result envelope as `warnings[]` and `repairs[]
|
|
403
|
-
|
|
404
|
-
`repairs[]` and `warnings[]` onto the envelope it returns, so the evidence
|
|
405
|
-
survives the hand-off rather than being re-derived from an already-repaired
|
|
406
|
-
draft.
|
|
379
|
+
the result envelope as `warnings[]` and `repairs[]`, carried from the
|
|
380
|
+
write-free pass onto the chained run's envelope.
|
|
407
381
|
|
|
408
382
|
A dry run that comes back clean has paid for every deterministic refusal, so
|
|
409
|
-
the real persist has nothing left to discover except network failure
|
|
410
|
-
is why the clean case no longer waits for a second operator invocation.
|
|
383
|
+
the real persist has nothing left to discover except network failure.
|
|
411
384
|
|
|
412
385
|
## The container Epic (Gate #3)
|
|
413
386
|
|
|
@@ -429,23 +402,17 @@ leave the common follow-up plan with nowhere to file itself. The three-Story
|
|
|
429
402
|
threshold governs **creation** only, where it still holds: at two Stories a
|
|
430
403
|
pair of ids is as easy to carry as one container id.
|
|
431
404
|
|
|
432
|
-
On a yes, pass `--epic <id>`. Persist
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
nothing;
|
|
437
|
-
2. after the Stories exist, appends one `- [ ] #N` row per new Story to the
|
|
438
|
-
Epic's checklist via `appendEpicChildIds`, which is idempotent and preserves
|
|
439
|
-
existing rows' **checked state**, their order, and the fingerprint marker;
|
|
440
|
-
3. mirrors a native sub-issue edge per child.
|
|
405
|
+
On a yes, pass `--epic <id>`. Persist resolves it **before the first create**
|
|
406
|
+
(dry run included) — it must be **open** and carry `type::epic`, or the run
|
|
407
|
+
hard-errors having written nothing — then appends a `- [ ] #N` checklist row
|
|
408
|
+
and a native sub-issue edge per new Story.
|
|
441
409
|
|
|
442
410
|
The refusal posture is the **opposite** of creation's, deliberately. Creation
|
|
443
411
|
degrades (an unensurable label just skips the container) because the operator
|
|
444
|
-
never named one
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
checklist write or sub-issue edge only warns.
|
|
412
|
+
never named one; adoption names a specific id, so silently not adopting it
|
|
413
|
+
would misfile the Stories. Hence a hard error, raised while nothing has been
|
|
414
|
+
written. Once the Stories are live the posture flips back — a failed checklist
|
|
415
|
+
write or sub-issue edge only warns.
|
|
449
416
|
|
|
450
417
|
**Only open Epics are adoptable.** A closed Epic is a finished body of work;
|
|
451
418
|
joining one would reopen a container the epilogue deliberately closed and
|
|
@@ -458,11 +425,9 @@ raised before any I/O.
|
|
|
458
425
|
### Creating a new container (N>2)
|
|
459
426
|
|
|
460
427
|
Above two Stories, `/mandrel-plan` offers to group them under one `type::epic`
|
|
461
|
-
container. Confirmed, persist opens it **after** the Stories
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
native GitHub sub-issue edge. Both are written because each survives what the
|
|
465
|
-
other does not; the delivery-side reader unions them.
|
|
428
|
+
container. Confirmed, persist opens it **after** the Stories and links every
|
|
429
|
+
created Story both ways: a `- [ ] #N` body checklist and a native GitHub
|
|
430
|
+
sub-issue edge, which the delivery-side reader unions.
|
|
466
431
|
|
|
467
432
|
What the Epic must never carry: an `agent::*` label (that absence keeps it out
|
|
468
433
|
of the bare `/mandrel-deliver` ready list and outside the `type::story`-scoped
|
|
@@ -474,12 +439,9 @@ Linkage runs parent→child only, which is why each Story stays independently
|
|
|
474
439
|
deliverable (ADR `20260905-5139`).
|
|
475
440
|
|
|
476
441
|
Degradation is deliberate: an unensurable `type::epic` label skips the Epic
|
|
477
|
-
entirely
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
existing Epic carrying the same fingerprint, which is keyed on the title **and
|
|
481
|
-
the exact child set**, so a run grouping different Stories never adopts the
|
|
482
|
-
wrong container.
|
|
442
|
+
entirely, while a failed sub-issue edge only warns. Either way the Stories are
|
|
443
|
+
untouched and deliver by id. A resumed persist adopts an existing Epic whose
|
|
444
|
+
fingerprint matches the title **and the exact child set**.
|
|
483
445
|
|
|
484
446
|
## Cross-plan `depends_on` (`#<id>`)
|
|
485
447
|
|
|
@@ -493,9 +455,8 @@ opened and never had to name.
|
|
|
493
455
|
`complexitySignals.predictedPaths`, each carrying the `overlappingPaths[]` that
|
|
494
456
|
matched. Overlap is computed on **declared footprints** and not on prose, using
|
|
495
457
|
the same `storyFootprint` the wave runner uses to withhold colliding Stories at
|
|
496
|
-
dispatch —
|
|
497
|
-
|
|
498
|
-
paths short-circuits to `[]` with no provider call at all.
|
|
458
|
+
dispatch — the collision the runtime would later enforce, seen while it is
|
|
459
|
+
still cheap to order around. A seed naming no paths short-circuits to `[]`.
|
|
499
460
|
|
|
500
461
|
It stays advisory: two Stories can touch a shared barrel file with no real
|
|
501
462
|
ordering between them, and only the operator knows.
|
|
@@ -505,9 +466,9 @@ a Story already open is not scheduled by this run, so it has no position in the
|
|
|
505
466
|
topological sort and cannot close a cycle back into a Story that does not exist
|
|
506
467
|
yet. They are validated **before any create** (dry run included): each must
|
|
507
468
|
resolve to an **open `type::story`**, and a closed issue, a container Epic, a
|
|
508
|
-
missing id or a non-Story hard-errors with every bad ref named in one pass
|
|
509
|
-
|
|
510
|
-
|
|
469
|
+
missing id or a non-Story hard-errors with every bad ref named in one pass — a
|
|
470
|
+
blocker that can never be satisfied would read to the delivery engine as a
|
|
471
|
+
permanent wedge.
|
|
511
472
|
|
|
512
473
|
Persist renders the entry unchanged as a `blocked by #<id>` footer line and
|
|
513
474
|
mirrors the native `blocked_by` edge, which is the same pair of surfaces a
|
|
@@ -518,10 +479,9 @@ state.
|
|
|
518
479
|
## Ready means fully persisted
|
|
519
480
|
|
|
520
481
|
`agent::ready` is the **terminal** step, not part of the creating POST.
|
|
521
|
-
The order is: create unlabelled → upsert `story-plan-state` on every Story
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
checkpoint no reader consumed — → flip every Story to `agent::ready`.
|
|
482
|
+
The order is: create unlabelled → upsert `story-plan-state` on every Story (one
|
|
483
|
+
comment carrying the plan summary: story set, delivery order, deliver command)
|
|
484
|
+
→ flip every Story to `agent::ready`.
|
|
525
485
|
|
|
526
486
|
This is what lets `/mandrel-deliver` trust the label: a Story carrying
|
|
527
487
|
`agent::ready` always has the operator's delivery instructions on the ticket,
|
|
@@ -561,43 +521,30 @@ them **envelope-first**:
|
|
|
561
521
|
| `--source-tickets <ids>` | Explicit **override** for hand-driven runs (no captured envelope, or deliberately narrowing the set). Wins over the envelope; a disagreement is warned about, not silently reconciled. |
|
|
562
522
|
|
|
563
523
|
The result envelope's `supersede.sourceTicketOrigin` reports which channel was
|
|
564
|
-
used (`envelope` \| `flag` \| `none`).
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
`--
|
|
568
|
-
says so rather than deciding silently:
|
|
569
|
-
|
|
570
|
-
| Situation | Behaviour |
|
|
571
|
-
| --- | --- |
|
|
572
|
-
| Neither `--plan-dir` nor `--plan-context` | **Warn** — nothing was read; only `--source-tickets` can supply ids. |
|
|
573
|
-
| Auto-discovered `<plan-dir>/plan-context.json` absent | **Warn** — degrade to `--source-tickets`; a `--seed` run legitimately has none. |
|
|
574
|
-
| Explicit `--plan-context` missing | **Fatal** — the operator named a file and meant it. |
|
|
575
|
-
| Envelope present but unparseable | **Fatal** — a corrupt envelope is not "no source tickets"; treating it as such is how a `--tickets` run used to report success having superseded nothing. |
|
|
524
|
+
used (`envelope` \| `flag` \| `none`). Every path with no envelope is
|
|
525
|
+
**audible**: an absent envelope warns and degrades to `--source-tickets` (a
|
|
526
|
+
`--seed` run legitimately has none), while an explicitly named but missing
|
|
527
|
+
`--plan-context`, or an unparseable envelope, is **fatal**.
|
|
576
528
|
|
|
577
529
|
Whichever channel supplies them, the supersede-map partition above still
|
|
578
|
-
fail-closes: a `--tickets` run whose Stories forgot `supersedes[]` is
|
|
579
|
-
**caught** (`source ticket #N is not claimed by any Story`)
|
|
580
|
-
partitioning an empty set and passing vacuously.
|
|
530
|
+
fail-closes: a `--tickets` run whose Stories forgot `supersedes[]` is
|
|
531
|
+
**caught** (`source ticket #N is not claimed by any Story`).
|
|
581
532
|
|
|
582
533
|
## Closing superseded source tickets
|
|
583
534
|
|
|
584
535
|
**Default on.** After the Stories exist, persist comments on each source
|
|
585
536
|
issue naming the specific Story that claims it — plus that Story's optional
|
|
586
537
|
per-supersede `note` — and closes it with reason **`not_planned`**
|
|
587
|
-
(`state_reason`)
|
|
588
|
-
be
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
| `--dry-run` | Posts no comment and closes nothing; reports what it would have done. |
|
|
598
|
-
| Re-run | Idempotent — the comment is keyed off a `superseded-by` structured-comment marker, and an already-closed source is skipped. |
|
|
599
|
-
| Already closed / deleted / inaccessible | Skipped and reported. Never throws. |
|
|
600
|
-
| Close-phase failure | **Never fails the run.** Stories stay created; the result envelope's `supersede` report names which tickets were and were not closed so the operator can finish by hand. |
|
|
538
|
+
(`state_reason`) — nothing has shipped at persist time, so `completed` would
|
|
539
|
+
be a lie.
|
|
540
|
+
|
|
541
|
+
The default also **clears the source's `agent::*` label** in the same write — a
|
|
542
|
+
retired ticket has no agent state. Pass **`--no-close-superseded`** for a
|
|
543
|
+
genuinely partial supersede — when the plan folded in only *part* of an issue
|
|
544
|
+
and the remainder must stay open. The phase is idempotent (keyed off a
|
|
545
|
+
`superseded-by` marker), skips already-closed or inaccessible sources, and
|
|
546
|
+
**never fails the run**: its `supersede` report names which tickets were and
|
|
547
|
+
were not closed so the operator can finish by hand.
|
|
601
548
|
|
|
602
549
|
`--seed` / `--seed-file` modes have no source tickets, so no close phase
|
|
603
550
|
runs at all.
|
|
@@ -110,6 +110,18 @@ ledger, conforming to [`qa-ledger.schema.json`](../../schemas/qa-ledger.schema.j
|
|
|
110
110
|
session. This is the single findings channel across all three workflows — there
|
|
111
111
|
is no per-workflow finding schema.
|
|
112
112
|
|
|
113
|
+
## Coverage tiers and the missing test
|
|
114
|
+
|
|
115
|
+
For the surface an item points at, gather the tests that exercise it and
|
|
116
|
+
classify each by path per
|
|
117
|
+
[`testing-standards.md` § The Three Tiers](../../rules/testing-standards.md#the-three-tiers)
|
|
118
|
+
— a `.feature` file is **acceptance**, a path containing `/contract/` or
|
|
119
|
+
`.contract.test.` is **contract**, and a path containing `.test.` or
|
|
120
|
+
`__tests__/` is **unit**; a skipped test leaves its tier uncovered. Then take
|
|
121
|
+
the lowest tier with no live test (unit → contract → acceptance) and write one
|
|
122
|
+
concrete sentence describing the test that would close it — the item's
|
|
123
|
+
`missingTest` (`null` when every tier is covered).
|
|
124
|
+
|
|
113
125
|
## Triage — classify → route → disposition → promote
|
|
114
126
|
|
|
115
127
|
Route the ledger through the shared classify/route/dedup/promote core. The
|
|
@@ -101,7 +101,7 @@ count the directory, never the plan. The stamp is the operator's record of
|
|
|
101
101
|
the pass; nothing in the framework reads it back.
|
|
102
102
|
|
|
103
103
|
The `/mandrel-plan` Phase 0 advisory re-arms on exactly one condition:
|
|
104
|
-
`MEMORY.md` exceeding
|
|
104
|
+
`MEMORY.md` exceeding the fixed 24576-byte index ceiling —
|
|
105
105
|
the harness cap past which the index it loads is truncated. Pool size and
|
|
106
106
|
stamp age never trigger it (Story #5312 retired those arms): a pass that
|
|
107
107
|
rewrites long index lines short quiets it without pruning an entry.
|
|
@@ -6,36 +6,21 @@ description: Human-led QA assist loop — set up, then ride a rolling multi-obse
|
|
|
6
6
|
|
|
7
7
|
Drive a **human-led, rolling QA-assist session**. The operator tests; the agent
|
|
8
8
|
rides alongside as the QA engineer and captures what they see into a
|
|
9
|
-
high-quality, triage-ready ledger
|
|
10
|
-
|
|
11
|
-
1
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
intake.**
|
|
20
|
-
3. **Done** — when the operator says they have finished testing, the agent does
|
|
21
|
-
a final review of the **entire** ledger and asks any last clarifying
|
|
22
|
-
questions.
|
|
23
|
-
4. **Triage & Plan** (Phase 4) — only then does it route the full ledger through
|
|
24
|
-
[`/mandrel-plan`](mandrel-plan.md) to generate Stories.
|
|
25
|
-
|
|
26
|
-
Unlike [`/qa-explore`](qa-explore.md) (where the *agent* drives open-ended
|
|
27
|
-
exploration of a named surface), `/qa-assist` is **human-led**: the human owns
|
|
28
|
-
the signal, the agent owns the enrichment. It is the front door for "I'm
|
|
29
|
-
testing — ride along and capture everything well." Each observation is a
|
|
30
|
-
`QaLedgerItem` on the same ledger `/qa-explore` produces, so a `/qa-assist` item
|
|
31
|
-
flows through the identical dedup, classification, and promotion machinery in
|
|
32
|
-
Phase 4.
|
|
9
|
+
high-quality, triage-ready ledger: Setup (Phase 0), a rolling
|
|
10
|
+
**Intake → Enrich → Record** loop over observations reported in any order and
|
|
11
|
+
quantity (Phases 1–3 — record only, never plan), then Triage & Plan (Phase 4)
|
|
12
|
+
once the operator says they are done.
|
|
13
|
+
|
|
14
|
+
Unlike [`/qa-explore`](qa-explore.md) (where the *agent* drives exploration of
|
|
15
|
+
a named surface), `/qa-assist` is **human-led**: the human owns the signal, the
|
|
16
|
+
agent owns the enrichment. Each observation is a `QaLedgerItem` on the same
|
|
17
|
+
ledger `/qa-explore` produces, so it flows through the identical dedup,
|
|
18
|
+
classification, and promotion machinery in Phase 4.
|
|
33
19
|
|
|
34
20
|
The shared machinery — contract resolution + loud failure, the session & ledger
|
|
35
21
|
contract, redact-first, the `QaLedgerItem` shape, the triage procedure, and the
|
|
36
22
|
HITL write gate — lives once in [`helpers/qa-core.md`](helpers/qa-core.md); this
|
|
37
|
-
workflow states only the `/qa-assist`-specific phases
|
|
38
|
-
Constraints delta.
|
|
23
|
+
workflow states only the `/qa-assist`-specific phases.
|
|
39
24
|
|
|
40
25
|
> **When to run**: a developer or operator is about to test (or is mid-test) and
|
|
41
26
|
> wants every bug and enhancement idea captured as a high-quality,
|
|
@@ -97,9 +82,8 @@ rolling loop stays fluid:
|
|
|
97
82
|
done. Second, **every write that leaves the local ledger** — filing a ticket,
|
|
98
83
|
invoking `/mandrel-plan`, or mutating a label. Present the artifact, ask, and wait.
|
|
99
84
|
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
ledger is hard-gated.**
|
|
85
|
+
Appending to the rolling ledger needs no gate beyond the echo-back; **planning
|
|
86
|
+
and anything that leaves the ledger is hard-gated.**
|
|
103
87
|
|
|
104
88
|
---
|
|
105
89
|
|
|
@@ -160,8 +144,10 @@ first, then run Intake for **each** before returning for the next message.
|
|
|
160
144
|
|
|
161
145
|
## Phase 2 — Enrich (per observation)
|
|
162
146
|
|
|
163
|
-
Goal: turn the observation into a high-quality, triage-ready finding.
|
|
164
|
-
|
|
147
|
+
Goal: turn the observation into a high-quality, triage-ready finding. The
|
|
148
|
+
classification comes from its deterministic helper and tier placement from the
|
|
149
|
+
three path rules; context lookup and the missing-test sentence are your own
|
|
150
|
+
judgment.
|
|
165
151
|
|
|
166
152
|
1. **Redact first** (per [`helpers/qa-core.md`](helpers/qa-core.md)) — scrub the
|
|
167
153
|
evidence string through `redactEvidence` before it touches disk or GitHub.
|
|
@@ -178,17 +164,10 @@ every decision to the shared helpers; never re-derive them in prose.
|
|
|
178
164
|
`gh issue view <ticketNumber> --json title,body,labels`, and verify each
|
|
179
165
|
surface-map path resolves with `git cat-file -e HEAD:<path>` — flag every
|
|
180
166
|
miss rather than citing a path that does not exist.
|
|
181
|
-
4. **Read the coverage tiers
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
`.contract.test.` is **contract**, and a path containing `.test.` or
|
|
186
|
-
`__tests__/` is **unit**. A skipped test leaves its tier uncovered.
|
|
187
|
-
5. **Name the missing test** (if any): take the lowest tier with no live test
|
|
188
|
-
(unit → contract → acceptance) and write one concrete sentence describing
|
|
189
|
-
the test that would close it. Every tier covered means no missing test.
|
|
190
|
-
Record that sentence as the ledger item's `missingTest`.
|
|
191
|
-
6. **Classify** the finding via
|
|
167
|
+
4. **Read the coverage tiers and name the missing test** per
|
|
168
|
+
[`helpers/qa-core.md`](helpers/qa-core.md) § Coverage tiers, recording the
|
|
169
|
+
sentence as the ledger item's `missingTest`.
|
|
170
|
+
5. **Classify** the finding via
|
|
192
171
|
[`classify-finding.js`](../scripts/lib/findings/classify-finding.js) so the
|
|
193
172
|
tentative `class` resolves to the correct focus/meta label set. The helper
|
|
194
173
|
**throws** on an absent/unknown class — fix the finding's class rather than
|
|
@@ -236,10 +215,9 @@ its transition is **explicitly operator-gated**.
|
|
|
236
215
|
`file`-dispositioned findings through `promoteFindings` → `/mandrel-plan` (never a raw
|
|
237
216
|
Issue), stamping each cluster's `fingerprintFooter(sha)` into the seed.
|
|
238
217
|
`defer` carries an item forward as backlog; `dismiss` marks it non-actionable.
|
|
239
|
-
3. **Gate:**
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
already run, so nothing unredacted reaches disk or GitHub.
|
|
218
|
+
3. **Gate:** every write inside this phase (seed write, `/mandrel-plan`
|
|
219
|
+
invocation, ticket-filing, label mutation) is **operator-gated** — confirm
|
|
220
|
+
each one. The plan→deliver hard stop is preserved.
|
|
243
221
|
|
|
244
222
|
After planning, summarize: the findings recorded, the route/promotion decisions
|
|
245
223
|
(`new`/`update-existing`/`duplicate`/`regression-of-closed`), whether each
|
|
@@ -250,31 +228,9 @@ resumed session will pick up.
|
|
|
250
228
|
|
|
251
229
|
## Constraints
|
|
252
230
|
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
- **Human-led, rolling, multi-observation.** The operator owns the signal and
|
|
258
|
-
reports in any order and quantity — one at a time or a brain dump. The agent
|
|
259
|
-
splits a brain dump (echoing the split for correction), then enriches and
|
|
260
|
-
records each. **Never invent an observation**; ask clarifying questions only
|
|
261
|
-
when one is ambiguous, batched across the dump.
|
|
262
|
-
- **Record during intake; plan only on "done".** Phases 1–3 enrich, append, and
|
|
263
|
-
loop — never triage, route, file, or invoke `/mandrel-plan`. All of that is Phase 4,
|
|
264
|
-
entered only on explicit operator confirmation that testing is done.
|
|
265
|
-
- **Light intake gate, firm boundary gate.** Intake → Enrich → Record is fluid
|
|
266
|
-
(echo-back, no ceremony); the move into Phase 4 and every write that leaves the
|
|
267
|
-
ledger are hard-gated.
|
|
268
|
-
- **Persistent, resumable rolling session** — `/qa-assist` defaults to resuming
|
|
269
|
-
the same session and appending; a reused session carries the untriaged backlog
|
|
270
|
-
forward and never overwrites a prior ledger.
|
|
271
|
-
- **Enrichment delegates where a helper exists** — the finding classification
|
|
272
|
-
comes from its deterministic helper, never from prose; tier placement comes
|
|
273
|
-
from the three path rules in
|
|
274
|
-
[`testing-standards.md`](../rules/testing-standards.md#the-three-tiers).
|
|
275
|
-
Context lookup and the missing-test sentence are the model's own work: they
|
|
276
|
-
are judgments, not computations, and routing them through a module only
|
|
277
|
-
bought a round-trip.
|
|
231
|
+
The shared core in [`helpers/qa-core.md`](helpers/qa-core.md) binds this
|
|
232
|
+
workflow. The `/qa-assist` deltas are stated once, above: never invent an
|
|
233
|
+
observation, record during intake, and plan only on "done" (§ Phase gates).
|
|
278
234
|
|
|
279
235
|
## See also
|
|
280
236
|
|