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
|
@@ -33,7 +33,7 @@ you read:
|
|
|
33
33
|
| --- | --- | --- |
|
|
34
34
|
| `/mandrel-deliver` | bare | List the open `agent::ready` Stories and ask which to deliver. Deliver nothing until answered. |
|
|
35
35
|
| `/mandrel-deliver 4712` | ids | One Story via `helpers/deliver-story.md`, **inline in this session** — no `story-worker` spawn. |
|
|
36
|
-
| `/mandrel-deliver 4712 4713 …` | ids | Resolve the set,
|
|
36
|
+
| `/mandrel-deliver 4712 4713 …` | ids | Resolve the set, then beat `deliver-run.js` — it sequences by the discovered graph and hands back the spawns and closes. |
|
|
37
37
|
| `/mandrel-deliver 4712 - 4716` | ids | A **range** — every id in the inclusive span. |
|
|
38
38
|
| `/mandrel-deliver 4700` (a `type::epic`) | ids | The Epic's **open** child Stories. Mixes with Story ids. |
|
|
39
39
|
| `/mandrel-deliver add a --json flag to doctor` | prompt | Unplanned work: gate, author a receipt Story, land it — [`helpers/deliver-light.md`](helpers/deliver-light.md). |
|
|
@@ -42,10 +42,10 @@ you read:
|
|
|
42
42
|
id, and `^#?\d+\s*[-–—]\s*#?\d+$` an inclusive **range** — pass one on as a
|
|
43
43
|
single unspaced token, never hand-expanded (reference). Either shape
|
|
44
44
|
means ids; anything else means a prompt. A **mixed** invocation (ids *and*
|
|
45
|
-
prose) is
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
45
|
+
prose) is **ambiguous, not fatal** — disambiguate it rather than refusing:
|
|
46
|
+
ask which was meant, or, when the reading is obvious, name the one you
|
|
47
|
+
inferred before acting on it. A ticket that is neither `type::story` nor
|
|
48
|
+
`type::epic` is a **hard error**.
|
|
49
49
|
|
|
50
50
|
## Saying what you want
|
|
51
51
|
|
|
@@ -67,41 +67,51 @@ to an attended run.
|
|
|
67
67
|
1. **Resolve the set.** One command, one Story or many:
|
|
68
68
|
`node .agents/scripts/resolve-stories.js --ids <id,id,...>`. It validates the
|
|
69
69
|
set and shows what will run: read `stories[]`, `dag[]` and `done[]` to
|
|
70
|
-
present the order in step 2, but do **not** thread them into step 3 —
|
|
71
|
-
|
|
70
|
+
present the order in step 2, but do **not** thread them into step 3 — every
|
|
71
|
+
beat re-resolves the graph. A one-id run comes back `dispatchMode: "inline"`
|
|
72
|
+
and runs [`helpers/deliver-story.md`](helpers/deliver-story.md) in this
|
|
73
|
+
session; step 3 is the multi-Story path. An Epic id expands to its open child
|
|
72
74
|
Stories first — **announce it**. It hard-errors (exit 1) on an id that is
|
|
73
|
-
neither a Story nor an Epic, on an
|
|
74
|
-
|
|
75
|
-
|
|
75
|
+
neither a Story nor an Epic, on an Epic with no open children, or on edges
|
|
76
|
+
it cannot read — a missing gate would co-dispatch against an unlanded
|
|
77
|
+
blocker.
|
|
76
78
|
|
|
77
79
|
2. **Confirm (N>1).** Present the order; wait unless `--yes`.
|
|
78
80
|
|
|
79
|
-
3. **
|
|
81
|
+
3. **Run the beat.** One command per beat, repeated until the envelope reports
|
|
82
|
+
the run `done`:
|
|
80
83
|
|
|
81
84
|
```bash
|
|
82
|
-
node .agents/scripts/
|
|
83
|
-
--stories <id,id,...> --
|
|
84
|
-
--dispatched <every id you have dispatched so far>
|
|
85
|
+
node .agents/scripts/deliver-run.js \
|
|
86
|
+
--stories <id,id,...> [--handoff <id>]...
|
|
85
87
|
```
|
|
86
88
|
|
|
87
89
|
**Do not add `--concurrency` unless the operator explicitly asked for a
|
|
88
90
|
per-run cap** — an explicit value wins over config, so a literal defeats a
|
|
89
91
|
`.agentrc.local.json` override.
|
|
90
92
|
|
|
91
|
-
Each beat re-probes live state
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
- **0** —
|
|
96
|
-
|
|
97
|
-
|
|
93
|
+
Each beat re-probes live state and keeps its own accounting: the run ledger
|
|
94
|
+
under `<tempRoot>/run-<id>/` records every id it hands out, so **nothing is
|
|
95
|
+
maintained across beats by you**. Cross-run de-confliction via the assignee
|
|
96
|
+
lease is automatic. Branch on the exit code:
|
|
97
|
+
- **0** — spawn one `story-worker` per `ready[]` entry, **all in one turn**,
|
|
98
|
+
each with that entry's `promptPath` file as its prompt; run each `close[]`
|
|
99
|
+
entry's command foreground and serialized as hand-offs arrive. An empty
|
|
100
|
+
`ready` with work in flight means "waiting", so beat again — **unless
|
|
101
|
+
`stalledDispatch[]` is non-empty**: those ids were dispatched but still
|
|
102
|
+
read `agent::ready`, which is a live init window the first beats or two
|
|
103
|
+
and a spawn that never started one after that. Beating again cannot
|
|
104
|
+
clear it. Relay `stalledDispatchReason` — it carries the recovery — and
|
|
105
|
+
let the operator decide; never edit the ledger for them.
|
|
106
|
+
`done: true` means every Story is landed — step 4.
|
|
98
107
|
- **2 / 3 / 4** — `cycleError` / `wedged` / `blocked`: stop the loop and
|
|
99
108
|
route per reference. **4** is the protocol's HITL pause
|
|
100
109
|
([`instructions.md` § 1.J](../instructions.md)) — surface it and wait for
|
|
101
110
|
the operator; never poll.
|
|
102
111
|
|
|
103
|
-
4. **
|
|
104
|
-
every Story landed, run the
|
|
112
|
+
4. **Land what the workers hand back** (§ Closing what the workers hand back —
|
|
113
|
+
the beat renders each command), then, with every Story landed, run the
|
|
114
|
+
**per-run epilogue (N>1)**:
|
|
105
115
|
`node .agents/scripts/plan-run-epilogue.js --stories 101,102`; N=1 has none
|
|
106
116
|
([reference](helpers/deliver-reference.md)). Every close rolls its container
|
|
107
117
|
Epic up from its children.
|
|
@@ -117,7 +127,10 @@ to an attended run.
|
|
|
117
127
|
**The tail is the orchestrator's, not the worker's.** A dispatched
|
|
118
128
|
`story-worker` stops at a pushed branch and returns a hand-off; **you** run
|
|
119
129
|
[`helpers/deliver-story.md`](helpers/deliver-story.md) Step 3
|
|
120
|
-
(`single-story-close.js`) for it, foreground, and relay its envelope.
|
|
130
|
+
(`single-story-close.js`) for it, foreground, and relay its envelope. Pass the
|
|
131
|
+
id as `--handoff` on the next beat and run the `close[]` command it prints
|
|
132
|
+
verbatim — the beat knows the run topology, so it decides
|
|
133
|
+
`--merge-watch-mode async` for you.
|
|
121
134
|
|
|
122
135
|
**Serialize the tail.** Implementation runs in parallel; closing does not.
|
|
123
136
|
Close one Story at a time — closes contend on the base branch, the merge queue
|
|
@@ -133,9 +146,11 @@ envelope — `landed` | `pending` | `blocked` | `failed`; statuses, exits and
|
|
|
133
146
|
fields are digest § 5. `pending` is **not** a failure — run its `nextCommand`.
|
|
134
147
|
|
|
135
148
|
**Branch model (authoritative).** `story-<id>` → PR → `main` (squash +
|
|
136
|
-
required checks), per digest § 2; dependent Stories land sequentially.
|
|
137
|
-
|
|
138
|
-
|
|
149
|
+
required checks), per digest § 2; dependent Stories land sequentially. The
|
|
150
|
+
acceptance verdict owner follows the ceremony profile alone
|
|
151
|
+
(`ceremony-routing.js`); the **derived level** feeds review depth instead
|
|
152
|
+
(`review-depth.js`). The rule and its one home are digest § 3; the profile
|
|
153
|
+
table is reference § Ceremony.
|
|
139
154
|
|
|
140
155
|
## Constraints
|
|
141
156
|
|
|
@@ -143,10 +158,11 @@ depth reads): reference § Ceremony.
|
|
|
143
158
|
default to close-and-land (`delivery.routing.closeAndLand: true`); rest at
|
|
144
159
|
`agent::closing` only when a human owns the merge.
|
|
145
160
|
- **`/mandrel-deliver` never plans.** Planned tickets come from
|
|
146
|
-
[`/mandrel-plan`](mandrel-plan.md), and
|
|
147
|
-
ends
|
|
148
|
-
|
|
149
|
-
|
|
161
|
+
[`/mandrel-plan`](mandrel-plan.md), and a refused prompt **escalates**: the
|
|
162
|
+
light path ends, and the escalation's `nextCommand` is what owns the work —
|
|
163
|
+
seeded with `escalation.reasons`, in this session or a fresh one
|
|
164
|
+
([`helpers/deliver-light.md`](helpers/deliver-light.md) § Continuing into
|
|
165
|
+
`/mandrel-plan`).
|
|
150
166
|
|
|
151
167
|
## See also
|
|
152
168
|
|
|
@@ -47,14 +47,14 @@ checkpoints, not sibling tickets ([ref](helpers/plan-reference.md)).
|
|
|
47
47
|
### 1. Interrogate
|
|
48
48
|
|
|
49
49
|
```bash
|
|
50
|
-
node .agents/scripts/plan-context.js --seed "<seed>"
|
|
51
|
-
--out temp/plan-<slug>/plan-context.json
|
|
50
|
+
node .agents/scripts/plan-context.js --seed "<seed>"
|
|
52
51
|
# or: --seed-file <path> | --tickets 123,456 | --amends #<id>
|
|
53
52
|
```
|
|
54
53
|
|
|
55
|
-
|
|
56
|
-
and
|
|
57
|
-
|
|
54
|
+
It writes the envelope and **`stories.template.json`** (step 2's skeleton) to
|
|
55
|
+
`<tempRoot>/plan-<slug>/` and prints a digest naming both; `--out` overrides
|
|
56
|
+
the path. Persist auto-discovers the envelope from `--plan-dir` and derives
|
|
57
|
+
source ids from its `sourceTickets[]`.
|
|
58
58
|
|
|
59
59
|
The envelope carries docs context, the story-author prompt (`systemPrompts.story`,
|
|
60
60
|
plus `systemPrompts.storySplitRules` for an N>1 draft and
|
|
@@ -87,10 +87,11 @@ persist parses either, serializes canonical markdown and syncs top-level
|
|
|
87
87
|
`acceptance[]` / `verify[]` in — never dual-author them.
|
|
88
88
|
|
|
89
89
|
**Grounding = your reads + Phase 8.** Nothing inventories the repo: read each
|
|
90
|
-
file you cite
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
90
|
+
file you cite. A `changes[]` entry is a **bare path** by default — persist
|
|
91
|
+
derives its assumption by probing the base branch and reports the derivation;
|
|
92
|
+
pin `{path, assumption}` only when the probe would get it wrong, and always
|
|
93
|
+
for a `deletes`, which is the one shape still refused on an absent path.
|
|
94
|
+
Fields: [ref](helpers/plan-reference.md).
|
|
94
95
|
|
|
95
96
|
Artifacts under `temp/plan-<slug>/`: `stories.json` (**length 1 by default**;
|
|
96
97
|
a Spec is as long as the work needs, inline, never under `docs/`) and optional
|
|
@@ -120,15 +121,11 @@ Under `--yes`, auto-proceed.
|
|
|
120
121
|
**any N** (`--epic <id>`); else, at **N>2**, a new container (`--epic-title` /
|
|
121
122
|
`--epic-goal`). Never unasked ([ref](helpers/plan-reference.md)).
|
|
122
123
|
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
(a `creates` / `refactors-existing` the base branch disagrees with, a goal or
|
|
129
|
-
acceptance path absent at base, an open question in a body) and the
|
|
130
|
-
`changes[]` repairs it applied ([list](helpers/plan-reference.md)). Read
|
|
131
|
-
them; they never stop the persist:
|
|
124
|
+
**One command.** Persist runs every gate write-free first — including the
|
|
125
|
+
**same-wave collision refusal**, which rejects an N>1 draft whose siblings
|
|
126
|
+
declare a common path (merge them, or order them with `depends_on`) — and,
|
|
127
|
+
when the gate list comes back clean, creates the issues in the same
|
|
128
|
+
invocation:
|
|
132
129
|
|
|
133
130
|
```bash
|
|
134
131
|
node .agents/scripts/plan-persist.js \
|
|
@@ -139,8 +136,12 @@ node .agents/scripts/plan-persist.js \
|
|
|
139
136
|
[--epic <id> | --epic-title "<name>" --epic-goal "<one paragraph>"]
|
|
140
137
|
```
|
|
141
138
|
|
|
142
|
-
|
|
143
|
-
|
|
139
|
+
The run **lists its warnings** (a `creates` / `refactors-existing` the base
|
|
140
|
+
branch disagrees with, a goal or acceptance path absent at base, an empty
|
|
141
|
+
`verify[]`, a source id assigned to the primary Story by default, an open
|
|
142
|
+
question in a body) and the `changes[]` repairs it applied
|
|
143
|
+
([list](helpers/plan-reference.md)). Read them; they never stop the persist.
|
|
144
|
+
Add `--dry-run` to validate without creating anything.
|
|
144
145
|
|
|
145
146
|
Persist creates `type::story` issue(s), a **metadata-only** `plan-run::<id>`
|
|
146
147
|
label, `blocked by #<id>` footers for every `depends_on` edge, and on a Gate #3
|
|
@@ -155,7 +156,7 @@ also comments on and closes each source id ([ref](helpers/plan-reference.md)).
|
|
|
155
156
|
- Duplicate search targets open Stories (`type::story`), not Epics; and
|
|
156
157
|
deterministic gates still fail closed under `--yes`.
|
|
157
158
|
- A container Epic is never a work item and only an **open** one is adoptable;
|
|
158
|
-
|
|
159
|
+
linkage is parent→child only.
|
|
159
160
|
- `depends_on` takes a sibling slug or `#<id>` (open Story).
|
|
160
161
|
|
|
161
162
|
## See also
|
|
@@ -7,7 +7,7 @@ description: >-
|
|
|
7
7
|
leaves unowned: reconcile `.agentrc.json`, install the stabilized
|
|
8
8
|
quality-gate surface, refresh the harness permission allowlist, reconcile
|
|
9
9
|
the consumer's `AGENTS.md` / runbooks against the surfaced changelog, and
|
|
10
|
-
stage + commit the
|
|
10
|
+
stage + commit the dependency bump the CLI's closing report describes.
|
|
11
11
|
---
|
|
12
12
|
|
|
13
13
|
# /mandrel-update
|
|
@@ -19,14 +19,15 @@ description: >-
|
|
|
19
19
|
> **distribution-agnostic judgment steps** the CLI deliberately does **not**
|
|
20
20
|
> perform — config reconciliation, the quality-gate installs, the
|
|
21
21
|
> permission-allowlist refresh, the consumer-side changelog reconciliation,
|
|
22
|
-
> and the stage-and-commit of the
|
|
22
|
+
> and the stage-and-commit of the dependency bump.
|
|
23
23
|
|
|
24
24
|
The upgrade contract, in brief: the version only moves on explicit
|
|
25
25
|
invocation (no `postinstall` drift — teammates track the committed
|
|
26
26
|
lockfile pin, and CI's `npm ci` honours it); majors apply like any other
|
|
27
27
|
bump (Mandrel ships hard cutovers — the surfaced changelog is the
|
|
28
|
-
migration guide); the CLI **never
|
|
29
|
-
|
|
28
|
+
migration guide); the CLI **never mutates git** — it reads the index and
|
|
29
|
+
**reports** whether the bump is staged, so the operator follows that
|
|
30
|
+
report rather than an assumption; and the only authoritative writer of the
|
|
30
31
|
generated `.claude/commands/` tree is
|
|
31
32
|
[`sync-claude-commands.js`](../scripts/sync-claude-commands.js), invoked by
|
|
32
33
|
the CLI's sync step.
|
|
@@ -80,22 +81,32 @@ npx mandrel update
|
|
|
80
81
|
The dry run resolves the newest published version and prints the ordered
|
|
81
82
|
step plan (`npm-update → runSync → runMigrations → doctor → surface
|
|
82
83
|
changelog`) without touching anything — read the planned target version
|
|
83
|
-
before applying. The live run drives those phases in order,
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
84
|
+
before applying. The live run drives those phases in order, never commits,
|
|
85
|
+
and finishes by printing the `docs/CHANGELOG.md` sections covering the
|
|
86
|
+
applied range `(current, target]`. **Capture that changelog output** —
|
|
87
|
+
Step 4 reconciles the consumer's own instructions against it.
|
|
88
|
+
Already-newest is a clean no-op (`Already up to date`, exit 0).
|
|
89
|
+
|
|
90
|
+
**Read the closing line — it reports the real index state.** Staging is
|
|
91
|
+
package-manager-specific (`npm install` may stage; `pnpm add` / `yarn add`
|
|
92
|
+
stage nothing), so the CLI probes git read-only and tells you which of three
|
|
93
|
+
states you are in rather than asserting one:
|
|
94
|
+
|
|
95
|
+
| Closing line | What it means | What you do |
|
|
96
|
+
| --- | --- | --- |
|
|
97
|
+
| `The dependency bump is staged for review (package.json, <lockfile>).` | The index already carries both. | Go to Step 2. |
|
|
98
|
+
| `The dependency bump is NOT staged. … Review and stage it: git add …` | Nothing (or only half) is staged. | Run the exact `git add` the line prints — it names `.agents/` too when this consumer tracks the materialized tree. |
|
|
99
|
+
| `Review the working tree and commit the bump (git not available to report staging state).` | The probe could not read git; the update still succeeded (exit 0). | Inspect `git status` yourself before Step 5. |
|
|
89
100
|
|
|
90
101
|
## Step 2.5 — Partial-upgrade recovery (**blocker — resolve before Step 5**)
|
|
91
102
|
|
|
92
|
-
The install phase
|
|
103
|
+
The install phase writes the dependency bump *before* the later phases run,
|
|
93
104
|
and by deliberate design the CLI **never rolls back the install on
|
|
94
105
|
failure**. So when a post-install phase (`sync` / `sync-commands` /
|
|
95
106
|
`migrate` / `doctor`) exits non-zero you land in a **partially-upgraded
|
|
96
|
-
state**: the bump is already
|
|
97
|
-
half-materialized, the command tree out of sync, or a
|
|
98
|
-
applied — and the operator is one `git commit` away from recording a broken
|
|
107
|
+
state**: the bump is already on disk (and possibly in the index) while
|
|
108
|
+
`.agents/` may be half-materialized, the command tree out of sync, or a
|
|
109
|
+
migration partially applied — and the operator is one `git commit` away from recording a broken
|
|
99
110
|
half-upgrade as "done". **Treat any post-install phase failure as an
|
|
100
111
|
explicit blocker: do not proceed to Step 5 until the failed phase is
|
|
101
112
|
recovered and a clean re-run reports success.**
|
|
@@ -203,22 +214,25 @@ between the installed and target versions:
|
|
|
203
214
|
workflows for renamed flags / changed exit codes / removed scripts.
|
|
204
215
|
|
|
205
216
|
Do not invent updates — silence is a valid review outcome. Stage every
|
|
206
|
-
consumer-side edit alongside the
|
|
207
|
-
|
|
217
|
+
consumer-side edit alongside the dependency bump so the upgrade and the
|
|
218
|
+
reconciliation land in one reviewable commit.
|
|
208
219
|
|
|
209
220
|
## Step 5 — Commit the bump
|
|
210
221
|
|
|
211
|
-
> **Blocker check before you commit.** The
|
|
222
|
+
> **Blocker check before you commit.** The dependency bump is only safe
|
|
212
223
|
> to commit once every post-install phase has gone green. If `npx mandrel
|
|
213
224
|
> update` exited non-zero, resolve it via
|
|
214
225
|
> [Step 2.5 — Partial-upgrade recovery](#step-25--partial-upgrade-recovery-blocker--resolve-before-step-5)
|
|
215
226
|
> **before** the `git commit` below. Committing over a half-upgrade records
|
|
216
227
|
> a broken state as "done".
|
|
217
228
|
|
|
218
|
-
Stage and commit the bump plus everything the wraparound touched
|
|
229
|
+
Stage and commit the bump plus everything the wraparound touched. Start from
|
|
230
|
+
the `git add` the CLI's closing report printed (it names the detected
|
|
231
|
+
lockfile, and `.agents/` when this consumer tracks it), then add the
|
|
232
|
+
wraparound paths:
|
|
219
233
|
|
|
220
234
|
```bash
|
|
221
|
-
git add package.json package-lock.json .agentrc.json .claude/settings.json AGENTS.md # plus any runbook files touched in Step 4
|
|
235
|
+
git add package.json package-lock.json .agentrc.json .claude/settings.json AGENTS.md # lockfile per the CLI report; plus any runbook files touched in Step 4
|
|
222
236
|
git commit -m "chore: update mandrel to v<NEW_VERSION>
|
|
223
237
|
|
|
224
238
|
Upgraded v<OLD_VERSION> → v<NEW_VERSION> via mandrel update.
|
|
@@ -239,8 +253,9 @@ materialized tree.
|
|
|
239
253
|
|
|
240
254
|
- **Idempotent.** A second `mandrel update` after a successful run hits the
|
|
241
255
|
no-op short-circuit — exit 0, nothing bumped.
|
|
242
|
-
- **No auto-commit.** The CLI
|
|
243
|
-
|
|
256
|
+
- **No auto-commit.** The CLI never stages and never commits — it reads git
|
|
257
|
+
only to report whether the bump is staged; the operator writes the commit
|
|
258
|
+
(Step 5).
|
|
244
259
|
- **No framework-side version bump.** This workflow advances the
|
|
245
260
|
*consumer's* pinned version; framework releases remain the maintainer's
|
|
246
261
|
call via release-please.
|
|
@@ -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
|
|
|
@@ -6,29 +6,18 @@ description: Agent-led exploratory-QA loop — the agent Plans a surface with an
|
|
|
6
6
|
|
|
7
7
|
Drive a **bounded, agent-led exploratory-QA session** as a human-in-the-loop
|
|
8
8
|
(HITL) loop: **Plan → Capture → Triage**. The operator names a single surface;
|
|
9
|
-
the agent
|
|
10
|
-
**
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
This is the **agent-led** front-end of exploratory QA: **the agent drives, the
|
|
17
|
-
operator watches and gates.** Its human-led sibling is
|
|
18
|
-
[`/qa-assist`](qa-assist.md) — there the *human* drives a single observation and
|
|
19
|
-
the agent scribes/enriches. No human-driven flow lives in `/qa-explore`.
|
|
20
|
-
|
|
21
|
-
Unlike [`/qa-run`](qa-run.md) (which steps a known set of Gherkin `.feature`
|
|
22
|
-
scenarios through a browser), `/qa-explore` is **open-ended exploration**: the
|
|
23
|
-
agent probes the surface for product bugs, environment-setup friction,
|
|
24
|
-
tooling/DX gaps, missing tests, and enhancement ideas — each captured as a
|
|
25
|
-
`QaLedgerItem`.
|
|
9
|
+
the agent drives it itself — **the agent drives, the operator watches and
|
|
10
|
+
gates** — and records each observation as a `QaLedgerItem` under a strictly
|
|
11
|
+
read-only capture invariant. Its human-led sibling is
|
|
12
|
+
[`/qa-assist`](qa-assist.md); no human-driven flow lives in `/qa-explore`.
|
|
13
|
+
Unlike [`/qa-run`](qa-run.md) (a known set of Gherkin `.feature` scenarios),
|
|
14
|
+
this is **open-ended exploration** for product bugs, environment-setup
|
|
15
|
+
friction, tooling/DX gaps, missing tests, and enhancement ideas.
|
|
26
16
|
|
|
27
17
|
The shared machinery — contract resolution + loud failure, the session & ledger
|
|
28
18
|
contract, redact-first, the `QaLedgerItem` shape, the triage procedure, and the
|
|
29
19
|
HITL write gate — lives once in [`helpers/qa-core.md`](helpers/qa-core.md); this
|
|
30
|
-
workflow states only the `/qa-explore`-specific phases (Plan / Capture)
|
|
31
|
-
Constraints delta.
|
|
20
|
+
workflow states only the `/qa-explore`-specific phases (Plan / Capture).
|
|
32
21
|
|
|
33
22
|
> **When to run**: ad-hoc agent-driven exploration of a freshly delivered Story
|
|
34
23
|
> or Feature, a regression sweep over a risky surface before `/mandrel-deliver`, or a
|
|
@@ -69,9 +58,7 @@ the skill owns them.
|
|
|
69
58
|
| `surface` | yes | `feature:login`, `area:onboarding` | A human label for the single surface to explore. Recorded as each ledger item's `coverage`. |
|
|
70
59
|
|
|
71
60
|
If no `surface` is supplied, **stop and ask** the operator to name one — do not
|
|
72
|
-
invent scope.
|
|
73
|
-
exactly the named surface, do not wander into adjacent surfaces, and start a
|
|
74
|
-
fresh session for a different surface.
|
|
61
|
+
invent scope.
|
|
75
62
|
|
|
76
63
|
## Contract & session
|
|
77
64
|
|
|
@@ -171,23 +158,16 @@ For each observation the agent makes while driving:
|
|
|
171
158
|
|
|
172
159
|
1. **Redact first** (per [`helpers/qa-core.md`](helpers/qa-core.md)) — scrub the
|
|
173
160
|
evidence string through `redactEvidence` before it touches disk.
|
|
174
|
-
2. **Read the coverage tiers
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
`.contract.test.` is **contract**, and a path containing `.test.` or
|
|
179
|
-
`__tests__/` is **unit**. A skipped test leaves its tier uncovered.
|
|
180
|
-
3. **Name the missing test** (if any): take the lowest tier with no live test
|
|
181
|
-
(unit → contract → acceptance) and write one concrete sentence describing
|
|
182
|
-
the test that would close it. Every tier covered means no missing test.
|
|
183
|
-
Record that sentence as the ledger item's `missingTest` (or `null`).
|
|
184
|
-
4. **Append a `QaLedgerItem`** to the ledger (shape per
|
|
161
|
+
2. **Read the coverage tiers and name the missing test** per
|
|
162
|
+
[`helpers/qa-core.md`](helpers/qa-core.md) § Coverage tiers, recording the
|
|
163
|
+
sentence as the ledger item's `missingTest` (or `null`).
|
|
164
|
+
3. **Append a `QaLedgerItem`** to the ledger (shape per
|
|
185
165
|
[`helpers/qa-core.md`](helpers/qa-core.md)): a stable `id`, the redacted
|
|
186
166
|
`evidence`, the `coverage` label (the `surface`, or `unknown`), a tentative
|
|
187
167
|
`class` and `severity`, the `missingTest`, and `disposition` left untriaged.
|
|
188
|
-
|
|
168
|
+
4. Continue driving until the agent believes the surface is covered, then
|
|
189
169
|
propose that exploration is complete.
|
|
190
|
-
|
|
170
|
+
5. **Gate:** present the captured ledger (item count, classes, the driving
|
|
191
171
|
method used, the rolling backlog) and ask the operator to confirm moving to
|
|
192
172
|
Triage. Do **not** triage until they confirm.
|
|
193
173
|
|
|
@@ -212,30 +192,10 @@ resumed session will pick up.
|
|
|
212
192
|
|
|
213
193
|
## Constraints
|
|
214
194
|
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
the `/qa-explore`-specific deltas are:
|
|
220
|
-
|
|
221
|
-
- **Agent-led, bounded per surface.** The agent drives one named surface per
|
|
222
|
-
session and proposes when it is covered; the operator gates the boundary. No
|
|
223
|
-
human-driven flow lives here — that is [`/qa-assist`](qa-assist.md).
|
|
224
|
-
- **Pick the driving method at Plan time** (drive default; static the documented
|
|
225
|
-
interim, chosen with a recorded reason, never a silent fallback); do not
|
|
226
|
-
switch mid-surface without a new Plan note.
|
|
227
|
-
- **Capture is read-only.** The only Capture write is appending ledger lines
|
|
228
|
-
under `temp/qa/`. No source edits, ticket mutations, product writes, or
|
|
229
|
-
destructive form submissions. Reach an authenticated surface only through the
|
|
230
|
-
resolved environment's `signInSeam`; where no seam resolves, record the gap
|
|
231
|
-
and fall back to static.
|
|
232
|
-
- **Broken navigation is a finding, not a workaround** — never URL-jump around a
|
|
233
|
-
missing affordance, a nav 404, or a guard redirect loop.
|
|
234
|
-
- **Read tier placement from the rule, not from prose you invent.** The three
|
|
235
|
-
path rules in
|
|
236
|
-
[`testing-standards.md` § The Three Tiers](../rules/testing-standards.md#the-three-tiers)
|
|
237
|
-
decide which tier a test occupies; the missing-test sentence is yours to write
|
|
238
|
-
from the lowest uncovered tier.
|
|
195
|
+
The shared core in [`helpers/qa-core.md`](helpers/qa-core.md) and the driving
|
|
196
|
+
conventions in [`stack/qa/qa-harness`](../skills/stack/qa/qa-harness/SKILL.md)
|
|
197
|
+
bind this workflow. The `/qa-explore` deltas are stated once, above: one
|
|
198
|
+
surface per session, the method chosen at Plan time, and a read-only Capture.
|
|
239
199
|
|
|
240
200
|
## See also
|
|
241
201
|
|