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
|
@@ -1,37 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* transpile shim.
|
|
8
|
-
*
|
|
9
|
-
* This is the report-shaped sibling of `maintainability-worker.js`, which
|
|
10
|
-
* returns only the scalar MI score for the baseline gate. The native review
|
|
11
|
-
* needs the richer report (per-method scores feed the critical/warning
|
|
12
|
-
* tiering in `classifyReport`), so this worker calls
|
|
13
|
-
* `calculateReportForFile` instead of `calculateForFile`.
|
|
14
|
-
*
|
|
15
|
-
* Message contract — see lib/cpu-pool.js:
|
|
16
|
-
* IN : { item: string } — absolute file path to score
|
|
17
|
-
* (reads head content from disk)
|
|
18
|
-
* { item: { source, label } } — pre-sourced content to score
|
|
19
|
-
* (Story #3696: the native review
|
|
20
|
-
* sources head content via
|
|
21
|
-
* `git show <headRef>:<path>` and
|
|
22
|
-
* passes the string here so the
|
|
23
|
-
* worker scores the head version,
|
|
24
|
-
* not the on-disk base copy)
|
|
25
|
-
* { exit: true } — drain & terminate
|
|
26
|
-
* OUT : { ok: true, result: { filePath, report: object | null } }
|
|
27
|
-
*
|
|
28
|
-
* `report` is `null` only when the file genuinely cannot be read (ENOENT
|
|
29
|
-
* or other I/O error) — the native classifier treats a null report the
|
|
30
|
-
* same way the serial path treats a thrown `reportFn` (drop the file).
|
|
31
|
-
* Parse failures inside escomplex still resolve to a `{ parseError: true }`
|
|
32
|
-
* report to preserve parity with the in-process serial path
|
|
33
|
-
* (`calculateReportForFile` returns a parse-error report rather than
|
|
34
|
-
* throwing).
|
|
2
|
+
* CPU-pool worker for the native review: one file (a path, or
|
|
3
|
+
* `{ source, label }` holding head content from `git show`) in, its full
|
|
4
|
+
* maintainability report out. `report` is `null` only on an I/O error (the
|
|
5
|
+
* file is dropped); a parse failure yields a `parseError` report, matching
|
|
6
|
+
* the serial path.
|
|
35
7
|
*/
|
|
36
8
|
|
|
37
9
|
import { parentPort } from 'node:worker_threads';
|
|
@@ -43,10 +15,7 @@ import { transpileIfNeeded } from '../transpile.js';
|
|
|
43
15
|
import { serveWorkerMessages } from './serve-worker-messages.js';
|
|
44
16
|
|
|
45
17
|
/**
|
|
46
|
-
*
|
|
47
|
-
* `native.js#scoreSourceReport`: transpile the source by its `label`
|
|
48
|
-
* extension, then report. A null transpile (unsupported / failed) resolves
|
|
49
|
-
* to a parse-error report rather than throwing, matching the disk path.
|
|
18
|
+
* Report for pre-sourced content; a failed transpile is a parse-error report.
|
|
50
19
|
*
|
|
51
20
|
* @param {string} source
|
|
52
21
|
* @param {string} label Path used only to pick the transpile mode.
|
|
@@ -67,9 +36,7 @@ function reportFromSource(source, label) {
|
|
|
67
36
|
}
|
|
68
37
|
|
|
69
38
|
/**
|
|
70
|
-
* Pure handler for
|
|
71
|
-
* tests can drive each branch (exit, malformed item, success, error)
|
|
72
|
-
* without spawning a real `Worker` thread.
|
|
39
|
+
* Pure handler for one worker message (testable without a `Worker`).
|
|
73
40
|
*
|
|
74
41
|
* @param {unknown} msg
|
|
75
42
|
* @param {{ report?: (filePath: string) => object }} [deps]
|
|
@@ -106,11 +73,7 @@ export function handleMaintainabilityReportWorkerMessage(msg, deps = {}) {
|
|
|
106
73
|
message: { ok: true, result: { filePath, report } },
|
|
107
74
|
};
|
|
108
75
|
} catch (err) {
|
|
109
|
-
//
|
|
110
|
-
// scoring) — surface as a per-item null report so the run keeps
|
|
111
|
-
// going. The native classifier maps a null report to a dropped file,
|
|
112
|
-
// matching the serial path's `classifyChangedFile` try/catch that
|
|
113
|
-
// returns `{ row: null }` on a thrown reportFn.
|
|
76
|
+
// A null report drops the file and keeps the run going.
|
|
114
77
|
return {
|
|
115
78
|
kind: 'reply',
|
|
116
79
|
message: {
|
|
@@ -1,22 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
* `
|
|
4
|
-
*
|
|
5
|
-
* the
|
|
6
|
-
*
|
|
7
|
-
* Message contract — see lib/cpu-pool.js:
|
|
8
|
-
* IN : { item: string } — absolute file path to score
|
|
9
|
-
* { exit: true } — drain & terminate
|
|
10
|
-
* OUT : { ok: true, result: { filePath, score, unscorable?, reason? } }
|
|
11
|
-
*
|
|
12
|
-
* `score` is `null` only when the file genuinely cannot be read (ENOENT
|
|
13
|
-
* or other I/O error).
|
|
14
|
-
*
|
|
15
|
-
* A file the kernel cannot analyse comes back as `unscorable: true` with the
|
|
16
|
-
* kernel's own `reason`, rather than as a bare `0`. The `0` is still carried in
|
|
17
|
-
* `score` for wire compatibility, but it is no longer the only signal — the
|
|
18
|
-
* point of the flag is that the caller can *report* the file instead of
|
|
19
|
-
* silently dropping it (see `maintainability-engine.js`'s `UNSCORABLE`).
|
|
2
|
+
* CPU-pool worker for `calculateAll`: one file path in, one MI score out.
|
|
3
|
+
* `score` is `null` only on an I/O error. An unanalysable file carries
|
|
4
|
+
* `unscorable: true` and the kernel's `reason` (with `score: 0` for wire
|
|
5
|
+
* compatibility) so the caller reports it instead of silently dropping it.
|
|
20
6
|
*/
|
|
21
7
|
|
|
22
8
|
import { parentPort } from 'node:worker_threads';
|
|
@@ -24,9 +10,7 @@ import { scoreFile } from '../maintainability-engine.js';
|
|
|
24
10
|
import { serveWorkerMessages } from './serve-worker-messages.js';
|
|
25
11
|
|
|
26
12
|
/**
|
|
27
|
-
* Pure handler for
|
|
28
|
-
* tests can drive each branch (exit, malformed item, success, error)
|
|
29
|
-
* without spawning a real `Worker` thread.
|
|
13
|
+
* Pure handler for one worker message (testable without a `Worker`).
|
|
30
14
|
*
|
|
31
15
|
* @param {unknown} msg
|
|
32
16
|
* @param {{ score?: (filePath: string) => { score: number, unscorable: boolean, reason: string|null } }} [deps]
|
|
@@ -1,22 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
* Every worker under `lib/workers/` is a pure message handler plus the same
|
|
5
|
-
* eight-line `parentPort` wiring: subscribe, run the handler, close on an
|
|
6
|
-
* `exit` verdict, post the reply otherwise. That wiring was copied into all
|
|
7
|
-
* four workers; it lives here once instead (Story #4926).
|
|
8
|
-
*
|
|
9
|
-
* The handler contract is unchanged — see `lib/cpu-pool.js`:
|
|
10
|
-
* IN : `{ item: … }` — one unit of work
|
|
11
|
-
* `{ exit: true }` — drain & terminate
|
|
12
|
-
* OUT : `{ kind: 'exit' }` | `{ kind: 'reply', message: object }`
|
|
13
|
-
*/
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
* Wire a pure worker message handler onto a `worker_threads` port.
|
|
17
|
-
*
|
|
18
|
-
* A falsy `port` is a no-op, so a worker module imported directly by a unit
|
|
19
|
-
* test (where `parentPort` is `null`) installs no listener and stays pure.
|
|
2
|
+
* Wire a pure worker message handler onto a `worker_threads` port. A falsy
|
|
3
|
+
* port (module imported by a test) is a no-op.
|
|
20
4
|
*
|
|
21
5
|
* @param {import('node:worker_threads').MessagePort|null|undefined} port
|
|
22
6
|
* @param {(msg: unknown) => {kind: 'exit'} | {kind: 'reply', message: object}} handle
|
|
@@ -1,61 +1,17 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Workflow read-tier
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
* into two numbers:
|
|
10
|
-
*
|
|
11
|
-
* - **mandatory closure** — the entry point plus the transitive closure of
|
|
12
|
-
* its `mandatoryReads:` frontmatter edges. This is what a session is
|
|
13
|
-
* *forced* to read, and it is what `check-context-budget.js` ratchets.
|
|
14
|
-
* - **reachable closure** — the entry point plus every workflow markdown file
|
|
15
|
-
* transitively linked from it. Recorded as a drift signal, never gated.
|
|
16
|
-
*
|
|
17
|
-
* **The marker is source-side and per-edge.** A workflow declares the reads it
|
|
18
|
-
* requires in its own frontmatter (`mandatoryReads: [path, …]`, flow or block
|
|
19
|
-
* style, resolved relative to the declaring file). Tier is not intrinsic to a
|
|
20
|
-
* helper — the same file is mandatory from one workflow and on-demand from
|
|
21
|
-
* another — so it cannot live in the target. The key is optional: an absent
|
|
22
|
-
* key means zero mandatory edges and is never an error. Every reachable link
|
|
23
|
-
* not named in `mandatoryReads` is classified on-demand.
|
|
24
|
-
*
|
|
25
|
-
* **Entry points** are the workflows a session can be invoked on: every
|
|
26
|
-
* top-level `.agents/workflows/*.md`, plus any `helpers/*.md` whose H1 declares
|
|
27
|
-
* a slash command named after the file itself (`helpers/deliver-story.md` →
|
|
28
|
-
* `# /deliver-story …`) — a command-shaped helper is invoked directly, so it
|
|
29
|
-
* owns a closure of its own. Plain helpers and appendices are reachable, never
|
|
30
|
-
* entry points; counting every file as an entry point would collapse the
|
|
31
|
-
* mandatory/on-demand distinction into "all workflow bytes".
|
|
32
|
-
*
|
|
33
|
-
* **Failure modes are loud** — a ratchet that silently shrinks its own closure
|
|
34
|
-
* is worse than none:
|
|
35
|
-
* - a `mandatoryReads` entry that does not resolve to a workflow markdown
|
|
36
|
-
* file throws, naming the declaring workflow and the offending path;
|
|
37
|
-
* - a cycle among `mandatoryReads` edges throws, naming the cycle.
|
|
38
|
-
* The **reachable** walk is deliberately cycle-*tolerant* rather than fatal:
|
|
39
|
-
* bidirectional prose cross-references are normal and correct authoring (a
|
|
40
|
-
* spine points at its digest, the digest points back at the spine), so that
|
|
41
|
-
* walk terminates via a visited set and counts each file exactly once — it
|
|
42
|
-
* neither loops nor truncates. Only the gated mandatory graph, where a loop is
|
|
43
|
-
* a genuine authoring error, fails closed.
|
|
44
|
-
*
|
|
45
|
-
* The walk is confined to `.agents/workflows/**`: links out to
|
|
46
|
-
* `.agents/rules/**` or `.agents/skills/**` are neither followed nor recorded,
|
|
47
|
-
* because those are already tiered as flat sets by `doc-tiers.js` and
|
|
48
|
-
* following them would double-count them.
|
|
49
|
-
*
|
|
50
|
-
* Security (security-baseline § Data Leakage & Logging): every value returned
|
|
51
|
-
* or thrown is a repo-relative path or a byte count — never file contents.
|
|
2
|
+
* Workflow read-tier closures per entry point: **mandatory** (transitive
|
|
3
|
+
* `mandatoryReads:` frontmatter edges — ratcheted by `check-context-budget.js`)
|
|
4
|
+
* and **reachable** (transitive links — recorded, never gated). Tier is
|
|
5
|
+
* per-edge, so it lives in the declaring file. An unresolvable or cyclic
|
|
6
|
+
* mandatory edge throws: a ratchet that silently shrinks is worse than none.
|
|
7
|
+
* Confined to `.agents/workflows/**` (`doc-tiers.js` tiers the rest). Outputs
|
|
8
|
+
* are paths and byte counts, never contents.
|
|
52
9
|
*/
|
|
53
10
|
|
|
54
11
|
import nodeFs from 'node:fs';
|
|
55
12
|
import path from 'node:path';
|
|
56
13
|
|
|
57
14
|
/**
|
|
58
|
-
* Repo-relative root of the workflow tree. The closure never escapes it.
|
|
59
15
|
* @type {string}
|
|
60
16
|
*/
|
|
61
17
|
const WORKFLOWS_ROOT = '.agents/workflows';
|
|
@@ -63,10 +19,8 @@ const WORKFLOWS_ROOT = '.agents/workflows';
|
|
|
63
19
|
/** Path-segment count of a top-level workflow (`.agents/workflows/x.md`). */
|
|
64
20
|
const TOP_LEVEL_DEPTH = 3;
|
|
65
21
|
|
|
66
|
-
//
|
|
67
|
-
//
|
|
68
|
-
// score this file — it crashes on `RegExpLiteral` nodes. Same workaround as
|
|
69
|
-
// lib/audit-suite/frontmatter.js.
|
|
22
|
+
// RegExp constructors, not literals: typhonjs-escomplex (the MI engine)
|
|
23
|
+
// crashes on `RegExpLiteral` nodes.
|
|
70
24
|
// biome-ignore-start lint/complexity/useRegexLiterals: typhonjs-escomplex MI workaround
|
|
71
25
|
const FRONTMATTER_RE = new RegExp(String.raw`^---\r?\n([\s\S]*?)\r?\n---`);
|
|
72
26
|
const NEWLINE_RE = new RegExp(String.raw`\r?\n`);
|
|
@@ -77,7 +31,6 @@ const COMMAND_H1_RE = new RegExp(String.raw`^#\s+/([A-Za-z0-9._-]+)`, 'm');
|
|
|
77
31
|
// biome-ignore-end lint/complexity/useRegexLiterals: typhonjs-escomplex MI workaround
|
|
78
32
|
|
|
79
33
|
/**
|
|
80
|
-
* Default fs surface — the same injectable subset `doc-tiers.js` uses.
|
|
81
34
|
* @typedef {{
|
|
82
35
|
* readdirSync: (p: string, o?: object) => any[],
|
|
83
36
|
* readFileSync: (p: string, enc: string) => string,
|
|
@@ -86,13 +39,10 @@ const COMMAND_H1_RE = new RegExp(String.raw`^#\s+/([A-Za-z0-9._-]+)`, 'm');
|
|
|
86
39
|
*/
|
|
87
40
|
|
|
88
41
|
/**
|
|
89
|
-
* A loaded workflow document.
|
|
90
42
|
* @typedef {{ rel: string, bytes: number, source: string }} WorkflowDoc
|
|
91
43
|
*/
|
|
92
44
|
|
|
93
45
|
/**
|
|
94
|
-
* Strip surrounding quotes and whitespace from a scalar YAML value.
|
|
95
|
-
*
|
|
96
46
|
* @param {string} value
|
|
97
47
|
* @returns {string}
|
|
98
48
|
*/
|
|
@@ -106,8 +56,6 @@ function unquote(value) {
|
|
|
106
56
|
}
|
|
107
57
|
|
|
108
58
|
/**
|
|
109
|
-
* Convert a path to posix separators.
|
|
110
|
-
*
|
|
111
59
|
* @param {string} p
|
|
112
60
|
* @returns {string}
|
|
113
61
|
*/
|
|
@@ -116,8 +64,6 @@ function toPosix(p) {
|
|
|
116
64
|
}
|
|
117
65
|
|
|
118
66
|
/**
|
|
119
|
-
* Return the raw frontmatter block of a markdown source (`''` when absent).
|
|
120
|
-
*
|
|
121
67
|
* @param {string} source
|
|
122
68
|
* @returns {string}
|
|
123
69
|
*/
|
|
@@ -127,8 +73,7 @@ function frontmatterBlock(source) {
|
|
|
127
73
|
}
|
|
128
74
|
|
|
129
75
|
/**
|
|
130
|
-
*
|
|
131
|
-
* skipped; the first non-item, non-blank line ends the sequence.
|
|
76
|
+
* YAML block sequence from `start`; blank lines skipped, first other line ends it.
|
|
132
77
|
*
|
|
133
78
|
* @param {string[]} lines
|
|
134
79
|
* @param {number} start
|
|
@@ -149,8 +94,6 @@ function blockSequence(lines, start) {
|
|
|
149
94
|
}
|
|
150
95
|
|
|
151
96
|
/**
|
|
152
|
-
* Split a YAML flow sequence (`[a.md, b.md]`) into its scalar items.
|
|
153
|
-
*
|
|
154
97
|
* @param {string} inline
|
|
155
98
|
* @returns {string[]}
|
|
156
99
|
*/
|
|
@@ -163,9 +106,7 @@ function flowSequence(inline) {
|
|
|
163
106
|
}
|
|
164
107
|
|
|
165
108
|
/**
|
|
166
|
-
*
|
|
167
|
-
* Supports the flow (`[a.md, b.md]`), block (`- a.md` lines), and single-scalar
|
|
168
|
-
* forms. An absent key resolves to `[]` — zero mandatory edges, never an error.
|
|
109
|
+
* `mandatoryReads:` in flow, block, or scalar form; absent key → `[]`.
|
|
169
110
|
*
|
|
170
111
|
* @param {string} source
|
|
171
112
|
* @returns {string[]} raw specifiers, relative to the declaring file
|
|
@@ -181,7 +122,7 @@ function parseMandatoryReads(source) {
|
|
|
181
122
|
}
|
|
182
123
|
|
|
183
124
|
/**
|
|
184
|
-
*
|
|
125
|
+
* Markdown link targets, anchors stripped.
|
|
185
126
|
*
|
|
186
127
|
* @param {string} source
|
|
187
128
|
* @returns {string[]}
|
|
@@ -196,9 +137,8 @@ function parseLinkTargets(source) {
|
|
|
196
137
|
}
|
|
197
138
|
|
|
198
139
|
/**
|
|
199
|
-
* Resolve a
|
|
200
|
-
*
|
|
201
|
-
* workflow tree.
|
|
140
|
+
* Resolve a specifier to a known workflow doc, or `null` when external,
|
|
141
|
+
* non-markdown, or outside the workflow tree.
|
|
202
142
|
*
|
|
203
143
|
* @param {string} fromRel repo-relative posix path of the declaring file
|
|
204
144
|
* @param {string} spec
|
|
@@ -213,11 +153,6 @@ function resolveSpec(fromRel, spec, docs) {
|
|
|
213
153
|
}
|
|
214
154
|
|
|
215
155
|
/**
|
|
216
|
-
* Resolve a workflow's declared mandatory edges. Throws when an entry does not
|
|
217
|
-
* resolve to a workflow markdown file — a mandatory read pointing at nothing is
|
|
218
|
-
* a silent hole in the ratchet, so it fails loudly, naming both the declaring
|
|
219
|
-
* workflow and the offending path.
|
|
220
|
-
*
|
|
221
156
|
* @param {WorkflowDoc} doc
|
|
222
157
|
* @param {Map<string, WorkflowDoc>} docs
|
|
223
158
|
* @returns {string[]}
|
|
@@ -237,9 +172,7 @@ function mandatoryEdges(doc, docs) {
|
|
|
237
172
|
}
|
|
238
173
|
|
|
239
174
|
/**
|
|
240
|
-
*
|
|
241
|
-
* loop is an authoring error, so it throws naming the cycle rather than looping
|
|
242
|
-
* or silently truncating the closure.
|
|
175
|
+
* Cycle-fatal DFS of the mandatory-edge graph.
|
|
243
176
|
*
|
|
244
177
|
* @param {string} rel
|
|
245
178
|
* @param {Map<string, WorkflowDoc>} docs
|
|
@@ -264,10 +197,7 @@ function walkMandatory(rel, docs, stack, seen) {
|
|
|
264
197
|
}
|
|
265
198
|
|
|
266
199
|
/**
|
|
267
|
-
*
|
|
268
|
-
* bidirectional cross-references between a spine and its helper are correct
|
|
269
|
-
* authoring, so the visited set makes the walk terminate with each file counted
|
|
270
|
-
* exactly once.
|
|
200
|
+
* Cycle-tolerant BFS of the link graph; each file counted once.
|
|
271
201
|
*
|
|
272
202
|
* @param {string} rel
|
|
273
203
|
* @param {Map<string, WorkflowDoc>} docs
|
|
@@ -289,8 +219,7 @@ function walkReachable(rel, docs) {
|
|
|
289
219
|
}
|
|
290
220
|
|
|
291
221
|
/**
|
|
292
|
-
*
|
|
293
|
-
* absolute directory. An unreadable directory yields nothing (silent skip).
|
|
222
|
+
* Recursive `.md` listing; an unreadable directory yields nothing.
|
|
294
223
|
*
|
|
295
224
|
* @param {FsLike} fs
|
|
296
225
|
* @param {string} dirAbs
|
|
@@ -315,8 +244,6 @@ function listMarkdown(fs, dirAbs, root, out) {
|
|
|
315
244
|
}
|
|
316
245
|
|
|
317
246
|
/**
|
|
318
|
-
* Load every workflow markdown file into a `rel -> { rel, bytes, source }` map.
|
|
319
|
-
*
|
|
320
247
|
* @param {string} root absolute repo root
|
|
321
248
|
* @param {FsLike} fs
|
|
322
249
|
* @returns {Map<string, WorkflowDoc>}
|
|
@@ -333,19 +260,15 @@ function loadDocs(root, fs) {
|
|
|
333
260
|
source: fs.readFileSync(abs, 'utf8'),
|
|
334
261
|
});
|
|
335
262
|
} catch {
|
|
336
|
-
// Unreadable file — skipped
|
|
263
|
+
// Unreadable file — skipped.
|
|
337
264
|
}
|
|
338
265
|
}
|
|
339
266
|
return docs;
|
|
340
267
|
}
|
|
341
268
|
|
|
342
269
|
/**
|
|
343
|
-
*
|
|
344
|
-
*
|
|
345
|
-
* (`helpers/deliver-story.md` → `# /deliver-story …`). The self-naming test is
|
|
346
|
-
* what separates an invocable helper from an appendix that merely titles itself
|
|
347
|
-
* after the command it documents (`helpers/deliver-reference.md` →
|
|
348
|
-
* `# /mandrel-deliver — reference appendix`), which is read on demand, never invoked.
|
|
270
|
+
* Top-level workflow, or a helper whose H1 slash command matches its own
|
|
271
|
+
* filename — an appendix titled after the command it documents is not.
|
|
349
272
|
*
|
|
350
273
|
* @param {WorkflowDoc} doc
|
|
351
274
|
* @returns {boolean}
|
|
@@ -357,8 +280,6 @@ function isEntryPoint(doc) {
|
|
|
357
280
|
}
|
|
358
281
|
|
|
359
282
|
/**
|
|
360
|
-
* Materialize a path set as sorted `{ path, bytes }` entries.
|
|
361
|
-
*
|
|
362
283
|
* @param {Iterable<string>} rels
|
|
363
284
|
* @param {Map<string, WorkflowDoc>} docs
|
|
364
285
|
* @returns {Array<{ path: string, bytes: number }>}
|
|
@@ -370,8 +291,6 @@ function toEntries(rels, docs) {
|
|
|
370
291
|
}
|
|
371
292
|
|
|
372
293
|
/**
|
|
373
|
-
* Sum the on-disk bytes of a path set.
|
|
374
|
-
*
|
|
375
294
|
* @param {Iterable<string>} rels
|
|
376
295
|
* @param {Map<string, WorkflowDoc>} docs
|
|
377
296
|
* @returns {number}
|
|
@@ -383,10 +302,8 @@ function sumBytes(rels, docs) {
|
|
|
383
302
|
}
|
|
384
303
|
|
|
385
304
|
/**
|
|
386
|
-
* Resolve
|
|
387
|
-
*
|
|
388
|
-
* remainder. Returns empty collections when `.agents/workflows` is absent — an
|
|
389
|
-
* entry point resolving empty is skipped silently.
|
|
305
|
+
* Resolve every entry point's closures, partitioned into mandatory and
|
|
306
|
+
* on-demand; empty collections when `.agents/workflows` is absent.
|
|
390
307
|
*
|
|
391
308
|
* @param {string} root absolute repo root
|
|
392
309
|
* @param {{ fs?: FsLike }} [opts]
|
|
@@ -1,40 +1,16 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* workspace
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* operator's local-override files (`.agentrc.local.json`,
|
|
7
|
-
* `.agents/instructions.local.md`) — plus any other files declared in
|
|
8
|
-
* `.agentrc.json orchestration.workspaceFiles`. The local-override files are
|
|
9
|
-
* provisioned so a worktree-isolated agent honors the §1.E local-override
|
|
10
|
-
* contract (e.g. `github.operatorHandle`) rather than silently falling back to
|
|
11
|
-
* the committed `.agentrc.json` placeholders. Every caller that needs these
|
|
12
|
-
* files in a non-main checkout should go through this module; ad-hoc copy
|
|
13
|
-
* logic elsewhere in the codebase is a bug.
|
|
14
|
-
*
|
|
15
|
-
* Public API:
|
|
16
|
-
* - `provision({ sourceRoot, targetWorktree, files?, logger? })` — copies
|
|
17
|
-
* each listed file from source to target, skipping any that already exist
|
|
18
|
-
* at the target. Returns `{ copied, skipped, missing }`.
|
|
19
|
-
* - `verify({ worktree, files?, sourceRoot? })` — throws when a required
|
|
20
|
-
* file is missing. When `sourceRoot` is passed, the error carries a
|
|
21
|
-
* copy-ready remediation command the operator can run verbatim.
|
|
22
|
-
* - `resolveWorkspaceFiles(orchestrationConfig)` — resolves the list honoring
|
|
23
|
-
* the new `orchestration.workspaceFiles` key, the legacy
|
|
24
|
-
* `orchestration.worktreeIsolation.bootstrapFiles`, and the default.
|
|
25
|
-
* - `DEFAULT_WORKSPACE_FILES` — `['.env', '.mcp.json', '.agentrc.local.json',
|
|
26
|
-
* '.agents/instructions.local.md']`.
|
|
2
|
+
* The single authority for copying gitignored workspace files (`.env`,
|
|
3
|
+
* `.mcp.json`, local overrides) into a non-main checkout, so a worktree agent
|
|
4
|
+
* honours local overrides instead of committed placeholders. Ad-hoc copy
|
|
5
|
+
* logic elsewhere is a bug.
|
|
27
6
|
*/
|
|
28
7
|
|
|
29
8
|
import fs from 'node:fs';
|
|
30
9
|
import path from 'node:path';
|
|
31
10
|
import { NOOP_LOGGER } from './Logger.js';
|
|
32
11
|
|
|
33
|
-
// Keep in sync with `WORKTREE_ISOLATION_DEFAULTS.bootstrapFiles
|
|
34
|
-
//
|
|
35
|
-
// though they are frequently absent — `provision()` skips missing sources and
|
|
36
|
-
// `verify()` callers filter to files present at the source first, so a missing
|
|
37
|
-
// override never fails a worktree create.
|
|
12
|
+
// Keep in sync with `WORKTREE_ISOLATION_DEFAULTS.bootstrapFiles`. Often-absent
|
|
13
|
+
// overrides are safe: missing sources are skipped, never fatal.
|
|
38
14
|
export const DEFAULT_WORKSPACE_FILES = [
|
|
39
15
|
'.env',
|
|
40
16
|
'.mcp.json',
|
|
@@ -43,10 +19,8 @@ export const DEFAULT_WORKSPACE_FILES = [
|
|
|
43
19
|
];
|
|
44
20
|
|
|
45
21
|
/**
|
|
46
|
-
*
|
|
47
|
-
*
|
|
48
|
-
* Precedence: explicit `orchestration.workspaceFiles` → legacy
|
|
49
|
-
* `orchestration.worktreeIsolation.bootstrapFiles` → `DEFAULT_WORKSPACE_FILES`.
|
|
22
|
+
* `workspaceFiles` → legacy `worktreeIsolation.bootstrapFiles` (still
|
|
23
|
+
* schema-accepted) → defaults.
|
|
50
24
|
*
|
|
51
25
|
* @param {object} [orchestrationConfig]
|
|
52
26
|
* @returns {string[]}
|
|
@@ -54,18 +28,12 @@ export const DEFAULT_WORKSPACE_FILES = [
|
|
|
54
28
|
export function resolveWorkspaceFiles(orchestrationConfig) {
|
|
55
29
|
const cfg = orchestrationConfig ?? {};
|
|
56
30
|
if (Array.isArray(cfg.workspaceFiles)) return cfg.workspaceFiles.slice();
|
|
57
|
-
// Legacy `worktreeIsolation.bootstrapFiles` fallback — surviving callers:
|
|
58
|
-
// tests/lib/workspace-provisioner.test.js, tests/lib/worktree/bootstrapper.test.js,
|
|
59
|
-
// and consumer projects' `.agentrc.json` (config-schema still accepts it).
|
|
60
31
|
const legacy = cfg.worktreeIsolation?.bootstrapFiles;
|
|
61
32
|
if (Array.isArray(legacy)) return legacy.slice();
|
|
62
33
|
return DEFAULT_WORKSPACE_FILES.slice();
|
|
63
34
|
}
|
|
64
35
|
|
|
65
36
|
/**
|
|
66
|
-
* Validate a workspace-file name — must be relative, no `..`, no NULs, no
|
|
67
|
-
* absolute paths.
|
|
68
|
-
*
|
|
69
37
|
* @param {string} name
|
|
70
38
|
* @returns {string|null} null on success, reason string on failure.
|
|
71
39
|
*/
|
|
@@ -79,15 +47,13 @@ function invalidNameReason(name) {
|
|
|
79
47
|
}
|
|
80
48
|
|
|
81
49
|
/**
|
|
82
|
-
*
|
|
83
|
-
* Existing target files are preserved (never overwritten). Missing sources are
|
|
84
|
-
* silently skipped and reported in the `missing` array.
|
|
50
|
+
* Never overwrites a target file; missing sources are reported, not fatal.
|
|
85
51
|
*
|
|
86
52
|
* @param {object} opts
|
|
87
|
-
* @param {string} opts.sourceRoot
|
|
88
|
-
* @param {string} opts.targetWorktree
|
|
89
|
-
* @param {string[]} [opts.files]
|
|
90
|
-
* @param {object} [opts.logger]
|
|
53
|
+
* @param {string} opts.sourceRoot
|
|
54
|
+
* @param {string} opts.targetWorktree
|
|
55
|
+
* @param {string[]} [opts.files]
|
|
56
|
+
* @param {object} [opts.logger]
|
|
91
57
|
* @returns {{ copied: string[], skipped: string[], missing: string[] }}
|
|
92
58
|
*/
|
|
93
59
|
export function provision({
|
|
@@ -143,17 +109,13 @@ export function provision({
|
|
|
143
109
|
}
|
|
144
110
|
|
|
145
111
|
/**
|
|
146
|
-
* Throw if
|
|
147
|
-
*
|
|
148
|
-
* `single-story-init.js`) and as a test oracle.
|
|
149
|
-
*
|
|
150
|
-
* When `sourceRoot` is supplied, the thrown error carries the missing target
|
|
151
|
-
* path and an exact `cp`/`copy` command the operator can paste to remediate.
|
|
112
|
+
* Throw if a required file is missing; with `sourceRoot`, the error carries a
|
|
113
|
+
* paste-ready copy command.
|
|
152
114
|
*
|
|
153
115
|
* @param {object} opts
|
|
154
116
|
* @param {string} opts.worktree
|
|
155
117
|
* @param {string[]} [opts.files]
|
|
156
|
-
* @param {string} [opts.sourceRoot]
|
|
118
|
+
* @param {string} [opts.sourceRoot]
|
|
157
119
|
*/
|
|
158
120
|
export function verify({
|
|
159
121
|
worktree,
|