mandrel 1.93.0 → 2.0.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 +59 -73
- package/.agents/agents/acceptance-critic.md +129 -0
- package/.agents/agents/story-worker.md +161 -0
- package/.agents/docs/SDLC.md +489 -1285
- package/.agents/docs/agentrc-reference.json +177 -67
- package/.agents/docs/configuration.md +108 -136
- package/.agents/docs/execution-reference.md +44 -22
- package/.agents/docs/quality-gates.md +13 -19
- package/.agents/docs/workflows.md +3 -3
- package/.agents/instructions.md +107 -108
- package/.agents/rules/ci-remediation.md +8 -12
- package/.agents/rules/git-conventions-reference.md +224 -0
- package/.agents/rules/git-conventions.md +42 -223
- package/.agents/rules/security-baseline.md +5 -0
- package/.agents/rules/testing-standards.md +106 -13
- package/.agents/schemas/acceptance-eval-verdict.schema.json +1 -1
- package/.agents/schemas/agentrc.schema.json +71 -201
- package/.agents/schemas/lifecycle/ledger-record.schema.json +1 -1
- package/.agents/schemas/lifecycle/retro.end.schema.json +1 -1
- package/.agents/schemas/risk-verdict.schema.json +0 -13
- package/.agents/scripts/acceptance-eval.js +62 -18
- package/.agents/scripts/agents-bootstrap-github.js +1 -1
- package/.agents/scripts/analyze-execution.js +1 -1
- package/.agents/scripts/audit-to-stories.js +7 -7
- package/.agents/scripts/boot-sweep.js +1 -1
- package/.agents/scripts/check-context-budget.js +62 -5
- package/.agents/scripts/check-lifecycle-lint.js +6 -9
- package/.agents/scripts/check-prepush-recovery.js +1 -1
- package/.agents/scripts/cleanup-repo-test-temp.js +6 -1
- package/.agents/scripts/diagnose-friction.js +0 -6
- package/.agents/scripts/lib/Logger.js +6 -10
- package/.agents/scripts/lib/audit-suite/runner.js +2 -2
- package/.agents/scripts/lib/audit-suite/selector.js +5 -5
- package/.agents/scripts/lib/audit-to-stories/{seed-epic-from-findings.js → seed-from-findings.js} +9 -9
- package/.agents/scripts/lib/baselines/kernel.js +206 -18
- package/.agents/scripts/lib/baselines/kinds/maintainability.js +0 -4
- package/.agents/scripts/lib/baselines/reader.js +1 -6
- package/.agents/scripts/lib/bdd-runner-detect.js +5 -9
- package/.agents/scripts/lib/bootstrap/issue-forms-template.js +32 -33
- package/.agents/scripts/lib/bootstrap/project-bootstrap.js +56 -18
- package/.agents/scripts/lib/checks/core-bare-clean.js +2 -2
- package/.agents/scripts/lib/checks/index.js +2 -1
- package/.agents/scripts/lib/checks/story-init-not-backgrounded.js +23 -21
- package/.agents/scripts/lib/cli/standard-args.js +13 -22
- package/.agents/scripts/lib/cli-args.js +16 -7
- package/.agents/scripts/lib/close-validation/gates.js +160 -22
- package/.agents/scripts/lib/config/acceptance-eval.js +52 -5
- package/.agents/scripts/lib/config/ci.js +6 -31
- package/.agents/scripts/lib/config/delivery-routing.js +103 -0
- package/.agents/scripts/lib/config/explain.js +57 -36
- package/.agents/scripts/lib/config/limits.js +17 -58
- package/.agents/scripts/lib/config/paths.js +0 -2
- package/.agents/scripts/lib/config/quality.js +1 -1
- package/.agents/scripts/lib/config/runners.js +17 -50
- package/.agents/scripts/lib/config/temp-paths.js +19 -14
- package/.agents/scripts/lib/config/worktree-isolation.js +0 -5
- package/.agents/scripts/lib/config-resolver.js +3 -8
- package/.agents/scripts/lib/config-settings-schema-delivery.js +46 -136
- package/.agents/scripts/lib/config-settings-schema-quality.js +17 -14
- package/.agents/scripts/lib/config-settings-schema.js +52 -38
- package/.agents/scripts/lib/dependency-parser.js +3 -2
- package/.agents/scripts/lib/doc-tiers.js +39 -4
- package/.agents/scripts/lib/duplicate-search.js +211 -41
- package/.agents/scripts/lib/feedback-loop/retro-proposals-graduator.js +1 -1
- package/.agents/scripts/lib/findings/promote-finding.js +5 -5
- package/.agents/scripts/lib/framework-version.js +2 -3
- package/.agents/scripts/lib/git-branch-cleanup.js +1 -10
- package/.agents/scripts/lib/git-branch-lifecycle.js +17 -22
- package/.agents/scripts/lib/git-utils.js +32 -6
- package/.agents/scripts/lib/github/framework-repo.js +6 -0
- package/.agents/scripts/lib/label-constants.js +10 -23
- package/.agents/scripts/lib/label-taxonomy.js +9 -43
- package/.agents/scripts/lib/observability/active-story-env.js +112 -3
- package/.agents/scripts/lib/observability/hook-heartbeat.js +187 -0
- package/.agents/scripts/lib/observability/source-classifier.js +3 -3
- package/.agents/scripts/lib/observability/tool-trace-hook.js +15 -4
- package/.agents/scripts/lib/onboard/init-tail.js +1 -3
- package/.agents/scripts/lib/orchestration/acceptance-clusters.js +111 -0
- package/.agents/scripts/lib/orchestration/acceptance-eval-decision.js +32 -4
- package/.agents/scripts/lib/orchestration/audit-lens-routing.js +128 -0
- package/.agents/scripts/lib/orchestration/bookkeeping-outbox.js +273 -0
- package/.agents/scripts/lib/orchestration/ceremony-routing.js +204 -0
- package/.agents/scripts/lib/orchestration/code-review.js +20 -268
- package/.agents/scripts/lib/orchestration/column-sync.js +1 -1
- package/.agents/scripts/lib/orchestration/consolidation-precondition.js +1 -1
- package/.agents/scripts/lib/orchestration/context-envelope.js +2 -5
- package/.agents/scripts/lib/orchestration/docs-digest.js +8 -8
- package/.agents/scripts/lib/orchestration/file-assumptions.js +7 -13
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/cli.js +1 -1
- package/.agents/scripts/lib/orchestration/lifecycle/emit-loop-tick.js +8 -8
- package/.agents/scripts/lib/orchestration/lifecycle/emit-story-heartbeat.js +2 -2
- package/.agents/scripts/lib/orchestration/lifecycle/ledger-writer.js +6 -3
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/README.md +17 -43
- package/.agents/scripts/lib/orchestration/lint-baseline-service.js +4 -4
- package/.agents/scripts/lib/orchestration/merge-block-class.js +1 -1
- package/.agents/scripts/lib/orchestration/phase-runner.js +3 -2
- package/.agents/scripts/lib/orchestration/plan-context.js +248 -266
- package/.agents/scripts/lib/orchestration/plan-critic-conditions.js +3 -2
- package/.agents/scripts/lib/orchestration/plan-critics-evaluate.js +1 -1
- package/.agents/scripts/lib/orchestration/plan-navigation.js +92 -0
- package/.agents/scripts/lib/orchestration/plan-persist/fan-out-gate.js +61 -0
- package/.agents/scripts/lib/orchestration/plan-persist/persist-helpers.js +97 -0
- package/.agents/scripts/lib/orchestration/plan-persist/run-plan-persist.js +223 -854
- package/.agents/scripts/lib/orchestration/plan-persist/story-ops.js +361 -0
- package/.agents/scripts/lib/orchestration/plan-persist/summary.js +35 -108
- package/.agents/scripts/lib/orchestration/plan-reachability.js +9 -14
- package/.agents/scripts/lib/orchestration/plan-runner/worktree-sweep.js +1 -1
- package/.agents/scripts/lib/orchestration/{epic-plan-spec/phases → planning}/authoring-context.js +14 -14
- package/.agents/scripts/lib/orchestration/planning/decomposer-context.js +27 -0
- package/.agents/scripts/lib/orchestration/{epic-plan-spec/phases → planning}/risk-verdict.js +3 -4
- package/.agents/scripts/lib/orchestration/post-merge/phases/branch-cleanup.js +2 -2
- package/.agents/scripts/lib/orchestration/post-merge/phases/dashboard-refresh.js +8 -20
- package/.agents/scripts/lib/orchestration/post-merge/phases/worktree-reap.js +3 -2
- package/.agents/scripts/lib/orchestration/pr-base-guard.js +18 -28
- package/.agents/scripts/lib/orchestration/preflight-cache.js +5 -5
- package/.agents/scripts/lib/orchestration/remote-verifier.js +1 -1
- package/.agents/scripts/lib/orchestration/resolve-plan-run.js +155 -0
- package/.agents/scripts/lib/orchestration/resolves-token.js +1 -1
- package/.agents/scripts/lib/orchestration/retro-perf-heuristics.js +8 -8
- package/.agents/scripts/lib/orchestration/retro-proposals.js +140 -79
- package/.agents/scripts/lib/orchestration/review-depth.js +26 -12
- package/.agents/scripts/lib/orchestration/review-providers/codex.js +2 -2
- package/.agents/scripts/lib/orchestration/review-providers/review-provider-factory.js +21 -56
- package/.agents/scripts/lib/orchestration/run-epilogue.js +426 -0
- package/.agents/scripts/lib/orchestration/single-story-close/phases/auto-merge.js +1 -1
- package/.agents/scripts/lib/orchestration/single-story-close/phases/close-validation.js +1 -0
- package/.agents/scripts/lib/orchestration/single-story-close/phases/code-review.js +95 -41
- package/.agents/scripts/lib/orchestration/single-story-close/phases/options.js +16 -13
- package/.agents/scripts/lib/orchestration/single-story-close/phases/review-block.js +40 -0
- package/.agents/scripts/lib/orchestration/single-story-close/runner.js +11 -3
- package/.agents/scripts/lib/orchestration/spec-freshness.js +14 -205
- package/.agents/scripts/lib/orchestration/spec-section-validator.js +4 -5
- package/.agents/scripts/lib/orchestration/spec-spill.js +60 -0
- package/.agents/scripts/lib/orchestration/split-policy-validator.js +188 -0
- package/.agents/scripts/lib/orchestration/story-close/emit-blocked.js +49 -0
- package/.agents/scripts/lib/orchestration/story-close/phases/code-review.js +15 -12
- package/.agents/scripts/lib/orchestration/story-follow-ups.js +237 -0
- package/.agents/scripts/lib/orchestration/story-init-remote.js +47 -0
- package/.agents/scripts/lib/orchestration/story-plan-state.js +48 -0
- package/.agents/scripts/lib/orchestration/{epic-runner → story-progress}/story-run-progress-writer.js +3 -3
- package/.agents/scripts/lib/orchestration/structured-comment-parser.js +1 -1
- package/.agents/scripts/lib/orchestration/task-body-validator.js +8 -18
- package/.agents/scripts/lib/orchestration/ticket-validator-conflicts.js +11 -61
- package/.agents/scripts/lib/orchestration/ticket-validator-sizing.js +189 -373
- package/.agents/scripts/lib/orchestration/ticket-validator.js +3 -8
- package/.agents/scripts/lib/orchestration/ticketing/bulk.js +0 -25
- package/.agents/scripts/lib/orchestration/ticketing/reads.js +29 -26
- package/.agents/scripts/lib/orchestration/ticketing/transition.js +5 -5
- package/.agents/scripts/lib/planning-corpus.js +16 -11
- package/.agents/scripts/lib/preflight-runner.js +2 -2
- package/.agents/scripts/lib/provider-factory.js +1 -1
- package/.agents/scripts/lib/qa/coverage-verdict.js +5 -5
- package/.agents/scripts/lib/single-story/confirm-merge-follow-ups.js +36 -0
- package/.agents/scripts/lib/single-story-sweep/protection-ctx.js +1 -1
- package/.agents/scripts/lib/story-adjacency.js +11 -14
- package/.agents/scripts/lib/story-body/story-body.js +124 -70
- package/.agents/scripts/lib/story-plan.js +2 -4
- package/.agents/scripts/lib/templates/decomposer-prompts.js +46 -45
- package/.agents/scripts/lib/templates/spec-author-prompts.js +47 -45
- package/.agents/scripts/lib/{epic-body-sections.js → ticket-body-sections.js} +26 -26
- package/.agents/scripts/lib/validation-evidence.js +1 -1
- package/.agents/scripts/lib/wave-runner/ready-set.js +6 -6
- package/.agents/scripts/lib/workspace-provisioner.js +1 -1
- package/.agents/scripts/lib/worktree/lifecycle/reap.js +5 -7
- package/.agents/scripts/lint-issue-body.js +71 -40
- package/.agents/scripts/mandrel-update-preflight.js +1 -1
- package/.agents/scripts/notify.js +4 -3
- package/.agents/scripts/plan-context.js +64 -74
- package/.agents/scripts/plan-persist.js +121 -280
- package/.agents/scripts/plan-run-epilogue.js +97 -0
- package/.agents/scripts/post-structured-comment.js +38 -0
- package/.agents/scripts/providers/github/issues.js +17 -33
- package/.agents/scripts/providers/github/mappers.js +0 -12
- package/.agents/scripts/providers/github/tickets.js +2 -5
- package/.agents/scripts/resolve-plan-run.js +117 -0
- package/.agents/scripts/signals-view.js +24 -19
- package/.agents/scripts/single-story-close.js +11 -14
- package/.agents/scripts/single-story-confirm-merge.js +39 -23
- package/.agents/scripts/single-story-init.js +29 -20
- package/.agents/scripts/stories-wave-tick.js +6 -6
- package/.agents/scripts/story-plan.js +26 -47
- package/.agents/scripts/sync-claude-agents.js +165 -0
- package/.agents/scripts/update-ticket-state.js +37 -15
- package/.agents/skills/core/analyze-execution/SKILL.md +21 -18
- package/.agents/skills/core/api-and-interface-design/SKILL.md +5 -3
- package/.agents/skills/core/code-review-and-quality/SKILL.md +63 -7
- package/.agents/skills/core/debugging-and-error-recovery/SKILL.md +1 -1
- package/.agents/skills/core/gates-and-baselines/SKILL.md +149 -0
- package/.agents/skills/core/idea-refinement/SKILL.md +8 -14
- package/.agents/skills/core/qa-coverage-mapping/SKILL.md +7 -7
- package/.agents/skills/core/scope-triage/SKILL.md +28 -172
- package/.agents/skills/skills.index.json +8 -418
- package/.agents/starter-agentrc.json +0 -5
- package/.agents/templates/agent-protocol.md +9 -10
- package/.agents/workflows/audit-architecture.md +3 -3
- package/.agents/workflows/audit-clean-code.md +3 -3
- package/.agents/workflows/audit-dependencies.md +3 -3
- package/.agents/workflows/audit-devops.md +3 -3
- package/.agents/workflows/audit-documentation.md +5 -5
- package/.agents/workflows/audit-lighthouse.md +3 -3
- package/.agents/workflows/audit-navigability.md +3 -2
- package/.agents/workflows/audit-performance.md +3 -3
- package/.agents/workflows/audit-privacy.md +3 -3
- package/.agents/workflows/audit-quality.md +3 -3
- package/.agents/workflows/audit-security.md +3 -3
- package/.agents/workflows/audit-seo.md +3 -3
- package/.agents/workflows/audit-sre.md +3 -3
- package/.agents/workflows/audit-to-stories.md +20 -20
- package/.agents/workflows/audit-ux-ui.md +3 -3
- package/.agents/workflows/deliver.md +122 -131
- package/.agents/workflows/git-cleanup.md +3 -4
- package/.agents/workflows/helpers/_merge-conflict-template.md +1 -1
- package/.agents/workflows/helpers/acceptance-self-eval.md +52 -40
- package/.agents/workflows/helpers/code-review.md +70 -193
- package/.agents/workflows/helpers/{single-story-deliver-reference.md → deliver-story-reference.md} +12 -14
- package/.agents/workflows/helpers/{single-story-deliver.md → deliver-story.md} +113 -139
- package/.agents/workflows/helpers/diagnose.md +10 -10
- package/.agents/workflows/helpers/mandrel-sync-config.md +1 -1
- package/.agents/workflows/helpers/parallel-tooling.md +1 -1
- package/.agents/workflows/helpers/signals.md +16 -16
- package/.agents/workflows/helpers/worktree-lifecycle.md +48 -64
- package/.agents/workflows/mandrel-update.md +3 -2
- package/.agents/workflows/plan.md +112 -145
- package/.agents/workflows/qa-assist.md +24 -30
- package/.agents/workflows/qa-explore.md +29 -38
- package/.agents/workflows/qa-run.md +2 -2
- package/README.md +9 -8
- package/docs/CHANGELOG.md +46 -0
- package/lib/cli/registry.js +95 -0
- package/lib/migrations/index.js +6 -5
- package/package.json +5 -3
- package/.agents/personas/architect.md +0 -113
- package/.agents/personas/devops-engineer.md +0 -38
- package/.agents/personas/engineer-mobile.md +0 -120
- package/.agents/personas/engineer-web.md +0 -111
- package/.agents/personas/engineer.md +0 -119
- package/.agents/personas/product.md +0 -94
- package/.agents/personas/project-manager.md +0 -114
- package/.agents/personas/qa-engineer.md +0 -95
- package/.agents/personas/refactorer.md +0 -113
- package/.agents/personas/security-engineer.md +0 -112
- package/.agents/personas/sre.md +0 -86
- package/.agents/personas/technical-writer.md +0 -101
- package/.agents/personas/ux-designer.md +0 -95
- package/.agents/schemas/dispatch-manifest.json +0 -232
- package/.agents/schemas/epic-spec.schema.json +0 -153
- package/.agents/scripts/acceptance-spec-reconciler.js +0 -642
- package/.agents/scripts/dispatcher.js +0 -295
- package/.agents/scripts/epic-audit-prepare.js +0 -497
- package/.agents/scripts/epic-audit-recheck.js +0 -274
- package/.agents/scripts/epic-deliver-note-intervention.js +0 -192
- package/.agents/scripts/epic-deliver-preflight.js +0 -462
- package/.agents/scripts/epic-deliver-prepare.js +0 -590
- package/.agents/scripts/epic-execute-record-wave.js +0 -449
- package/.agents/scripts/epic-plan-clarity.js +0 -211
- package/.agents/scripts/epic-plan-decompose.js +0 -54
- package/.agents/scripts/epic-plan-healthcheck.js +0 -581
- package/.agents/scripts/epic-plan-spec.js +0 -64
- package/.agents/scripts/epic-reconcile.js +0 -625
- package/.agents/scripts/lib/baseline-snapshot.js +0 -979
- package/.agents/scripts/lib/checks/epic-merge-lock-stale.js +0 -54
- package/.agents/scripts/lib/checks/stale-origin-epic.js +0 -49
- package/.agents/scripts/lib/config/lifecycle.js +0 -40
- package/.agents/scripts/lib/config/preflight.js +0 -58
- package/.agents/scripts/lib/config/retro.js +0 -77
- package/.agents/scripts/lib/epic-merge-lock.js +0 -322
- package/.agents/scripts/lib/epic-plan-clarity.js +0 -181
- package/.agents/scripts/lib/epic-plan-ideation.js +0 -261
- package/.agents/scripts/lib/orchestration/context-hydration-engine.js +0 -660
- package/.agents/scripts/lib/orchestration/dispatch-engine.js +0 -134
- package/.agents/scripts/lib/orchestration/dispatch-pipeline.js +0 -183
- package/.agents/scripts/lib/orchestration/epic-cleanup.js +0 -801
- package/.agents/scripts/lib/orchestration/epic-deliver-lease-guard.js +0 -310
- package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/context.js +0 -163
- package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/creation.js +0 -140
- package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/dag.js +0 -64
- package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/diagnostics.js +0 -72
- package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/persist-helpers.js +0 -156
- package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/persist.js +0 -345
- package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/planning-artifacts.js +0 -41
- package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/reconcile-spawn.js +0 -86
- package/.agents/scripts/lib/orchestration/epic-plan-lease-guard.js +0 -391
- package/.agents/scripts/lib/orchestration/epic-plan-spec/phases/drain.js +0 -94
- package/.agents/scripts/lib/orchestration/epic-plan-spec/phases/plan-epic.js +0 -236
- package/.agents/scripts/lib/orchestration/epic-plan-spec/phases/run-spec-phase.js +0 -307
- package/.agents/scripts/lib/orchestration/epic-plan-spec/phases/spec-freshness.js +0 -117
- package/.agents/scripts/lib/orchestration/epic-plan-state-store.js +0 -117
- package/.agents/scripts/lib/orchestration/epic-run-state-store.js +0 -388
- package/.agents/scripts/lib/orchestration/epic-runner/concurrency-gate.js +0 -186
- package/.agents/scripts/lib/orchestration/epic-runner/deliver-phases.js +0 -50
- package/.agents/scripts/lib/orchestration/epic-runner/phases/build-wave-dag.js +0 -129
- package/.agents/scripts/lib/orchestration/epic-runner/phases/snapshot.js +0 -103
- package/.agents/scripts/lib/orchestration/epic-runner/progress-reporter/composition.js +0 -267
- package/.agents/scripts/lib/orchestration/epic-runner/progress-reporter/signals.js +0 -210
- package/.agents/scripts/lib/orchestration/epic-runner/progress-reporter/transport.js +0 -238
- package/.agents/scripts/lib/orchestration/epic-runner/progress-signals/_bullet-format.js +0 -32
- package/.agents/scripts/lib/orchestration/epic-runner/progress-signals/component-drift.js +0 -203
- package/.agents/scripts/lib/orchestration/epic-runner/progress-signals/crap-drift.js +0 -227
- package/.agents/scripts/lib/orchestration/epic-runner/progress-signals/maintainability-drift.js +0 -117
- package/.agents/scripts/lib/orchestration/epic-runner/progress-signals/stalled-worktree.js +0 -37
- package/.agents/scripts/lib/orchestration/epic-runner/story-launcher.js +0 -127
- package/.agents/scripts/lib/orchestration/epic-runner/sub-agent-return.js +0 -276
- package/.agents/scripts/lib/orchestration/epic-runner/wave-scheduler.js +0 -66
- package/.agents/scripts/lib/orchestration/epic-spec-reconciler-apply.js +0 -789
- package/.agents/scripts/lib/orchestration/epic-spec-reconciler-diff.js +0 -676
- package/.agents/scripts/lib/orchestration/epic-spec-reconciler-discriminator.js +0 -389
- package/.agents/scripts/lib/orchestration/epic-spec-reconciler-format.js +0 -230
- package/.agents/scripts/lib/orchestration/epic-spec-reconciler-ops.js +0 -361
- package/.agents/scripts/lib/orchestration/finalize/open-or-locate-pr.js +0 -306
- package/.agents/scripts/lib/orchestration/finalize/post-handoff-comment.js +0 -489
- package/.agents/scripts/lib/orchestration/finalize/sanitize-skip-ci.js +0 -88
- package/.agents/scripts/lib/orchestration/lifecycle/emit-story-dispatch-end.js +0 -147
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/acceptance-reconciler.js +0 -384
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/automerge-armer.js +0 -501
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/automerge-predicate.js +0 -984
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/branch-cleaner.js +0 -264
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/checkpoint-pointer-writer.js +0 -278
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/cleaner.js +0 -355
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/finalizer.js +0 -673
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/index.js +0 -378
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/intervention-recorder.js +0 -140
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/label-transitioner.js +0 -144
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/notify-dispatcher.js +0 -174
- package/.agents/scripts/lib/orchestration/manifest-builder.js +0 -222
- package/.agents/scripts/lib/orchestration/plan-persist/amend.js +0 -359
- package/.agents/scripts/lib/orchestration/plan-persist/delivery-mode.js +0 -127
- package/.agents/scripts/lib/orchestration/post-merge-pipeline.js +0 -205
- package/.agents/scripts/lib/orchestration/recurring-failure-detector.js +0 -152
- package/.agents/scripts/lib/orchestration/retro/phases/checks.js +0 -94
- package/.agents/scripts/lib/orchestration/retro/phases/compose-body.js +0 -571
- package/.agents/scripts/lib/orchestration/retro/phases/gather-signals.js +0 -450
- package/.agents/scripts/lib/orchestration/retro/phases/post-and-mirror.js +0 -191
- package/.agents/scripts/lib/orchestration/retro-heuristics.js +0 -57
- package/.agents/scripts/lib/orchestration/retro-runner.js +0 -197
- package/.agents/scripts/lib/orchestration/skill-capsule-loader.js +0 -109
- package/.agents/scripts/lib/orchestration/spec-renderer.js +0 -447
- package/.agents/scripts/lib/orchestration/story-close/auto-refresh-runner.js +0 -747
- package/.agents/scripts/lib/orchestration/story-close/baseline-attribution/phases/gate-failure.js +0 -211
- package/.agents/scripts/lib/orchestration/story-close/baseline-attribution/phases/pre-merge-attribution.js +0 -158
- package/.agents/scripts/lib/orchestration/story-close/baseline-attribution/phases/refresh-commit.js +0 -446
- package/.agents/scripts/lib/orchestration/story-close/baseline-attribution/phases/regression-projection.js +0 -297
- package/.agents/scripts/lib/orchestration/story-close/baseline-attribution/phases/scope-discovery.js +0 -48
- package/.agents/scripts/lib/orchestration/story-close/baseline-attribution-wiring.js +0 -67
- package/.agents/scripts/lib/orchestration/story-close/baseline-attribution.js +0 -161
- package/.agents/scripts/lib/orchestration/story-close/baseline-friction-body.js +0 -117
- package/.agents/scripts/lib/orchestration/story-close/cd-out-guard.js +0 -86
- package/.agents/scripts/lib/orchestration/story-close/cleanup-reconciler.js +0 -147
- package/.agents/scripts/lib/orchestration/story-close/close-inputs.js +0 -142
- package/.agents/scripts/lib/orchestration/story-close/comment-bodies.js +0 -62
- package/.agents/scripts/lib/orchestration/story-close/merge-runner.js +0 -658
- package/.agents/scripts/lib/orchestration/story-close/merge-subject.js +0 -198
- package/.agents/scripts/lib/orchestration/story-close/phases/branch-restore.js +0 -105
- package/.agents/scripts/lib/orchestration/story-close/phases/close.js +0 -222
- package/.agents/scripts/lib/orchestration/story-close/phases/gates.js +0 -292
- package/.agents/scripts/lib/orchestration/story-close/phases/locked-pipeline.js +0 -270
- package/.agents/scripts/lib/orchestration/story-close/phases/preflight.js +0 -110
- package/.agents/scripts/lib/orchestration/story-close/phases/refresh.js +0 -86
- package/.agents/scripts/lib/orchestration/story-close/phases/timeout-blocked-emitter.js +0 -112
- package/.agents/scripts/lib/orchestration/story-close/phases/timeout-blocked.js +0 -157
- package/.agents/scripts/lib/orchestration/story-close/post-merge-close.js +0 -421
- package/.agents/scripts/lib/orchestration/story-close/pre-merge-validation.js +0 -301
- package/.agents/scripts/lib/orchestration/story-close/shared-checkout-guard.js +0 -163
- package/.agents/scripts/lib/orchestration/story-close-recovery.js +0 -690
- package/.agents/scripts/lib/orchestration/wave-marker.js +0 -28
- package/.agents/scripts/lib/orchestration/wave-record-io.js +0 -218
- package/.agents/scripts/lib/orchestration/wave-record-notifications.js +0 -145
- package/.agents/scripts/lib/orchestration/wave-record-projection.js +0 -212
- package/.agents/scripts/lib/presentation/dispatch-manifest-render.js +0 -111
- package/.agents/scripts/lib/presentation/manifest-builder.js +0 -239
- package/.agents/scripts/lib/presentation/manifest-formatter.js +0 -242
- package/.agents/scripts/lib/presentation/manifest-helpers.js +0 -213
- package/.agents/scripts/lib/presentation/manifest-persistence.js +0 -261
- package/.agents/scripts/lib/presentation/manifest-procedures.js +0 -55
- package/.agents/scripts/lib/presentation/manifest-render-waves.js +0 -306
- package/.agents/scripts/lib/presentation/manifest-renderer.js +0 -188
- package/.agents/scripts/lib/presentation/manifest-story-views.js +0 -110
- package/.agents/scripts/lib/push-epic-retry.js +0 -209
- package/.agents/scripts/lib/spec/index.js +0 -36
- package/.agents/scripts/lib/spec/loader.js +0 -425
- package/.agents/scripts/lib/spec/state.js +0 -208
- package/.agents/scripts/lib/story-init/blocker-validator.js +0 -68
- package/.agents/scripts/lib/story-init/branch-initializer.js +0 -408
- package/.agents/scripts/lib/story-init/context-resolver.js +0 -92
- package/.agents/scripts/lib/story-init/donor-precheck.js +0 -207
- package/.agents/scripts/lib/story-init/state-transitioner.js +0 -80
- package/.agents/scripts/lib/story-init/task-graph-builder.js +0 -124
- package/.agents/scripts/lib/story-init/transition-summary.js +0 -34
- package/.agents/scripts/lib/test-reserved-epic-temp-ids.js +0 -35
- package/.agents/scripts/lib/wave-runner/tick.js +0 -754
- package/.agents/scripts/lib/wave-runner/wave-runner-error.js +0 -20
- package/.agents/scripts/lifecycle-emit-story-dispatch.js +0 -194
- package/.agents/scripts/lifecycle-emit.js +0 -510
- package/.agents/scripts/plan-critics.js +0 -199
- package/.agents/scripts/retro-run.js +0 -218
- package/.agents/scripts/standalone-feedback-rollup.js +0 -188
- package/.agents/scripts/story-close.js +0 -294
- package/.agents/scripts/story-init.js +0 -599
- package/.agents/scripts/story-phase.js +0 -369
- package/.agents/scripts/wave-tick.js +0 -335
- package/.agents/skills/core/baseline-refresh/SKILL.md +0 -181
- package/.agents/skills/core/ci-cd-and-automation/SKILL.md +0 -274
- package/.agents/skills/core/ci-cd-and-automation/examples.md +0 -211
- package/.agents/skills/core/code-simplification/SKILL.md +0 -389
- package/.agents/skills/core/context-engineering/SKILL.md +0 -309
- package/.agents/skills/core/context-engineering/examples.md +0 -58
- package/.agents/skills/core/deprecation-and-migration/SKILL.md +0 -250
- package/.agents/skills/core/epic-plan-consolidate/SKILL.md +0 -172
- package/.agents/skills/core/epic-plan-consolidate/examples.md +0 -51
- package/.agents/skills/core/epic-plan-decompose-author/SKILL.md +0 -441
- package/.agents/skills/core/epic-plan-decompose-author/examples.md +0 -47
- package/.agents/skills/core/epic-plan-premortem/SKILL.md +0 -146
- package/.agents/skills/core/epic-plan-premortem/examples.md +0 -53
- package/.agents/skills/core/epic-plan-spec-author/SKILL.md +0 -413
- package/.agents/skills/core/epic-plan-spec-author/examples.md +0 -91
- package/.agents/skills/core/frontend-ui-engineering/SKILL.md +0 -357
- package/.agents/skills/core/hydrate-context/SKILL.md +0 -123
- package/.agents/skills/core/idea-refinement/examples.md +0 -437
- package/.agents/skills/core/idea-refinement/frameworks.md +0 -135
- package/.agents/skills/core/incremental-implementation/SKILL.md +0 -271
- package/.agents/skills/core/introducing-a-baseline-gate/SKILL.md +0 -213
- package/.agents/skills/core/knowledge-transfer/SKILL.md +0 -180
- package/.agents/skills/core/mutation-survivor-remediation/SKILL.md +0 -117
- package/.agents/skills/core/performance-optimization/SKILL.md +0 -314
- package/.agents/skills/core/planning-and-task-breakdown/SKILL.md +0 -277
- package/.agents/skills/core/property-based-testing/SKILL.md +0 -148
- package/.agents/skills/core/refactoring-discipline/SKILL.md +0 -111
- package/.agents/skills/core/shipping-and-launch/SKILL.md +0 -328
- package/.agents/skills/core/spec-driven-development/SKILL.md +0 -252
- package/.agents/skills/core/test-driven-development/SKILL.md +0 -475
- package/.agents/skills/core/using-agent-skills/SKILL.md +0 -232
- package/.agents/skills/stack/architecture/monorepo-path-strategist/SKILL.md +0 -31
- package/.agents/skills/stack/architecture/structured-output-zod/SKILL.md +0 -51
- package/.agents/skills/stack/architecture/subagent-orchestration/SKILL.md +0 -76
- package/.agents/skills/stack/backend/cloudflare-hono-architect/SKILL.md +0 -31
- package/.agents/skills/stack/backend/cloudflare-hono-architect/examples/route-template.ts +0 -33
- package/.agents/skills/stack/backend/cloudflare-queue-manager/SKILL.md +0 -31
- package/.agents/skills/stack/backend/cloudflare-workers/SKILL.md +0 -51
- package/.agents/skills/stack/backend/highlevel-crm/SKILL.md +0 -54
- package/.agents/skills/stack/backend/sqlite-drizzle-expert/SKILL.md +0 -29
- package/.agents/skills/stack/backend/sqlite-drizzle-expert/examples/schema-template.ts +0 -30
- package/.agents/skills/stack/backend/stripe-integration/SKILL.md +0 -57
- package/.agents/skills/stack/backend/stripe-integration/scripts/listen-stripe.sh +0 -9
- package/.agents/skills/stack/backend/turso-sqlite/SKILL.md +0 -48
- package/.agents/skills/stack/frontend/astro/SKILL.md +0 -62
- package/.agents/skills/stack/frontend/astro-react-island-strategist/SKILL.md +0 -30
- package/.agents/skills/stack/frontend/expo-react-native-developer/SKILL.md +0 -29
- package/.agents/skills/stack/frontend/google-analytics-v4/SKILL.md +0 -50
- package/.agents/skills/stack/frontend/tailwind-v4/SKILL.md +0 -58
- package/.agents/skills/stack/frontend/ui-accessibility-engineer/SKILL.md +0 -34
- package/.agents/skills/stack/qa/audit-accessibility/SKILL.md +0 -51
- package/.agents/skills/stack/qa/lighthouse-baseline/SKILL.md +0 -199
- package/.agents/skills/stack/security/backend-security-patterns/SKILL.md +0 -68
- package/.agents/workflows/helpers/deliver-epic-reference.md +0 -534
- package/.agents/workflows/helpers/deliver-epic.md +0 -955
- package/.agents/workflows/helpers/deliver-stories.md +0 -440
- package/.agents/workflows/helpers/epic-audit.md +0 -189
- package/.agents/workflows/helpers/epic-deliver-story.md +0 -427
- package/.agents/workflows/helpers/epic-testing.md +0 -125
- package/.agents/workflows/helpers/plan-epic-reference.md +0 -160
- package/.agents/workflows/helpers/plan-epic.md +0 -351
- package/.agents/workflows/helpers/plan-story.md +0 -251
- package/.agents/workflows/helpers/scope-triage-gate.md +0 -108
- /package/.agents/scripts/lib/orchestration/{epic-plan-spec/phases → planning}/spec-authoring-grounding.js +0 -0
|
@@ -26,28 +26,215 @@
|
|
|
26
26
|
* @module lib/baselines/kernel
|
|
27
27
|
*/
|
|
28
28
|
|
|
29
|
-
import
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
29
|
+
import {
|
|
30
|
+
applyEpsilon as bundleSizeApplyEpsilon,
|
|
31
|
+
compare as bundleSizeCompare,
|
|
32
|
+
kernelVersion as bundleSizeKernelVersion,
|
|
33
|
+
keyField as bundleSizeKeyField,
|
|
34
|
+
mergeRows as bundleSizeMergeRows,
|
|
35
|
+
name as bundleSizeName,
|
|
36
|
+
projectRow as bundleSizeProjectRow,
|
|
37
|
+
rollup as bundleSizeRollup,
|
|
38
|
+
sortRows as bundleSizeSortRows,
|
|
39
|
+
} from './kinds/bundle-size.js';
|
|
40
|
+
import {
|
|
41
|
+
applyEpsilon as coverageApplyEpsilon,
|
|
42
|
+
compare as coverageCompare,
|
|
43
|
+
kernelVersion as coverageKernelVersion,
|
|
44
|
+
keyField as coverageKeyField,
|
|
45
|
+
mergeRows as coverageMergeRows,
|
|
46
|
+
name as coverageName,
|
|
47
|
+
projectRow as coverageProjectRow,
|
|
48
|
+
rollup as coverageRollup,
|
|
49
|
+
sortRows as coverageSortRows,
|
|
50
|
+
} from './kinds/coverage.js';
|
|
51
|
+
import {
|
|
52
|
+
applyEpsilon as crapApplyEpsilon,
|
|
53
|
+
compare as crapCompare,
|
|
54
|
+
kernelVersion as crapKernelVersion,
|
|
55
|
+
keyField as crapKeyField,
|
|
56
|
+
mergeRows as crapMergeRows,
|
|
57
|
+
name as crapName,
|
|
58
|
+
projectRow as crapProjectRow,
|
|
59
|
+
rollup as crapRollup,
|
|
60
|
+
sortRows as crapSortRows,
|
|
61
|
+
} from './kinds/crap.js';
|
|
62
|
+
import {
|
|
63
|
+
applyEpsilon as duplicationApplyEpsilon,
|
|
64
|
+
compare as duplicationCompare,
|
|
65
|
+
kernelVersion as duplicationKernelVersion,
|
|
66
|
+
keyField as duplicationKeyField,
|
|
67
|
+
mergeRows as duplicationMergeRows,
|
|
68
|
+
name as duplicationName,
|
|
69
|
+
projectRow as duplicationProjectRow,
|
|
70
|
+
rollup as duplicationRollup,
|
|
71
|
+
sortRows as duplicationSortRows,
|
|
72
|
+
} from './kinds/duplication.js';
|
|
73
|
+
import {
|
|
74
|
+
applyEpsilon as lighthouseApplyEpsilon,
|
|
75
|
+
compare as lighthouseCompare,
|
|
76
|
+
kernelVersion as lighthouseKernelVersion,
|
|
77
|
+
keyField as lighthouseKeyField,
|
|
78
|
+
mergeRows as lighthouseMergeRows,
|
|
79
|
+
name as lighthouseName,
|
|
80
|
+
projectRow as lighthouseProjectRow,
|
|
81
|
+
rollup as lighthouseRollup,
|
|
82
|
+
sortRows as lighthouseSortRows,
|
|
83
|
+
} from './kinds/lighthouse.js';
|
|
84
|
+
import {
|
|
85
|
+
applyEpsilon as lintApplyEpsilon,
|
|
86
|
+
compare as lintCompare,
|
|
87
|
+
kernelVersion as lintKernelVersion,
|
|
88
|
+
keyField as lintKeyField,
|
|
89
|
+
mergeRows as lintMergeRows,
|
|
90
|
+
name as lintName,
|
|
91
|
+
projectRow as lintProjectRow,
|
|
92
|
+
rollup as lintRollup,
|
|
93
|
+
sortRows as lintSortRows,
|
|
94
|
+
} from './kinds/lint.js';
|
|
95
|
+
import {
|
|
96
|
+
applyEpsilon as maintainabilityApplyEpsilon,
|
|
97
|
+
compare as maintainabilityCompare,
|
|
98
|
+
kernelVersion as maintainabilityKernelVersion,
|
|
99
|
+
keyField as maintainabilityKeyField,
|
|
100
|
+
mergeRows as maintainabilityMergeRows,
|
|
101
|
+
name as maintainabilityName,
|
|
102
|
+
projectRow as maintainabilityProjectRow,
|
|
103
|
+
rollup as maintainabilityRollup,
|
|
104
|
+
sortRows as maintainabilitySortRows,
|
|
105
|
+
} from './kinds/maintainability.js';
|
|
106
|
+
import {
|
|
107
|
+
applyEpsilon as mutationApplyEpsilon,
|
|
108
|
+
compare as mutationCompare,
|
|
109
|
+
kernelVersion as mutationKernelVersion,
|
|
110
|
+
keyField as mutationKeyField,
|
|
111
|
+
mergeRows as mutationMergeRows,
|
|
112
|
+
name as mutationName,
|
|
113
|
+
projectRow as mutationProjectRow,
|
|
114
|
+
rollup as mutationRollup,
|
|
115
|
+
sortRows as mutationSortRows,
|
|
116
|
+
} from './kinds/mutation.js';
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* Assemble the kind-module protocol from named imports.
|
|
120
|
+
*
|
|
121
|
+
* Prefer named imports over `import * as kind` here: knip (and the
|
|
122
|
+
* dead-exports ratchet) cannot see members reached only through
|
|
123
|
+
* `getKindModule(kind).projectRow(...)` after a namespace import, so
|
|
124
|
+
* star-imports of `kinds/*.js` produced systematic false-positive dead
|
|
125
|
+
* exports for the protocol surface (`name`, `keyField`, `kernelVersion`,
|
|
126
|
+
* `projectRow`, `sortRows`, `rollup`, …).
|
|
127
|
+
*
|
|
128
|
+
* @param {object} members
|
|
129
|
+
* @returns {object}
|
|
130
|
+
*/
|
|
131
|
+
function bindKindModule(members) {
|
|
132
|
+
return Object.freeze({
|
|
133
|
+
name: members.name,
|
|
134
|
+
keyField: members.keyField,
|
|
135
|
+
kernelVersion: members.kernelVersion,
|
|
136
|
+
projectRow: members.projectRow,
|
|
137
|
+
sortRows: members.sortRows,
|
|
138
|
+
rollup: members.rollup,
|
|
139
|
+
compare: members.compare,
|
|
140
|
+
applyEpsilon: members.applyEpsilon,
|
|
141
|
+
mergeRows: members.mergeRows,
|
|
142
|
+
});
|
|
143
|
+
}
|
|
37
144
|
|
|
38
145
|
/**
|
|
39
146
|
* Registry of every shipped kind module. Keys mirror the per-kind schema
|
|
40
147
|
* filenames so a future "list all kinds" iterator can stay declarative.
|
|
41
148
|
*/
|
|
42
149
|
const KIND_MODULES = Object.freeze({
|
|
43
|
-
lint
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
150
|
+
lint: bindKindModule({
|
|
151
|
+
name: lintName,
|
|
152
|
+
keyField: lintKeyField,
|
|
153
|
+
kernelVersion: lintKernelVersion,
|
|
154
|
+
projectRow: lintProjectRow,
|
|
155
|
+
sortRows: lintSortRows,
|
|
156
|
+
rollup: lintRollup,
|
|
157
|
+
compare: lintCompare,
|
|
158
|
+
applyEpsilon: lintApplyEpsilon,
|
|
159
|
+
mergeRows: lintMergeRows,
|
|
160
|
+
}),
|
|
161
|
+
coverage: bindKindModule({
|
|
162
|
+
name: coverageName,
|
|
163
|
+
keyField: coverageKeyField,
|
|
164
|
+
kernelVersion: coverageKernelVersion,
|
|
165
|
+
projectRow: coverageProjectRow,
|
|
166
|
+
sortRows: coverageSortRows,
|
|
167
|
+
rollup: coverageRollup,
|
|
168
|
+
compare: coverageCompare,
|
|
169
|
+
applyEpsilon: coverageApplyEpsilon,
|
|
170
|
+
mergeRows: coverageMergeRows,
|
|
171
|
+
}),
|
|
172
|
+
crap: bindKindModule({
|
|
173
|
+
name: crapName,
|
|
174
|
+
keyField: crapKeyField,
|
|
175
|
+
kernelVersion: crapKernelVersion,
|
|
176
|
+
projectRow: crapProjectRow,
|
|
177
|
+
sortRows: crapSortRows,
|
|
178
|
+
rollup: crapRollup,
|
|
179
|
+
compare: crapCompare,
|
|
180
|
+
applyEpsilon: crapApplyEpsilon,
|
|
181
|
+
mergeRows: crapMergeRows,
|
|
182
|
+
}),
|
|
183
|
+
maintainability: bindKindModule({
|
|
184
|
+
name: maintainabilityName,
|
|
185
|
+
keyField: maintainabilityKeyField,
|
|
186
|
+
kernelVersion: maintainabilityKernelVersion,
|
|
187
|
+
projectRow: maintainabilityProjectRow,
|
|
188
|
+
sortRows: maintainabilitySortRows,
|
|
189
|
+
rollup: maintainabilityRollup,
|
|
190
|
+
compare: maintainabilityCompare,
|
|
191
|
+
applyEpsilon: maintainabilityApplyEpsilon,
|
|
192
|
+
mergeRows: maintainabilityMergeRows,
|
|
193
|
+
}),
|
|
194
|
+
mutation: bindKindModule({
|
|
195
|
+
name: mutationName,
|
|
196
|
+
keyField: mutationKeyField,
|
|
197
|
+
kernelVersion: mutationKernelVersion,
|
|
198
|
+
projectRow: mutationProjectRow,
|
|
199
|
+
sortRows: mutationSortRows,
|
|
200
|
+
rollup: mutationRollup,
|
|
201
|
+
compare: mutationCompare,
|
|
202
|
+
applyEpsilon: mutationApplyEpsilon,
|
|
203
|
+
mergeRows: mutationMergeRows,
|
|
204
|
+
}),
|
|
205
|
+
lighthouse: bindKindModule({
|
|
206
|
+
name: lighthouseName,
|
|
207
|
+
keyField: lighthouseKeyField,
|
|
208
|
+
kernelVersion: lighthouseKernelVersion,
|
|
209
|
+
projectRow: lighthouseProjectRow,
|
|
210
|
+
sortRows: lighthouseSortRows,
|
|
211
|
+
rollup: lighthouseRollup,
|
|
212
|
+
compare: lighthouseCompare,
|
|
213
|
+
applyEpsilon: lighthouseApplyEpsilon,
|
|
214
|
+
mergeRows: lighthouseMergeRows,
|
|
215
|
+
}),
|
|
216
|
+
'bundle-size': bindKindModule({
|
|
217
|
+
name: bundleSizeName,
|
|
218
|
+
keyField: bundleSizeKeyField,
|
|
219
|
+
kernelVersion: bundleSizeKernelVersion,
|
|
220
|
+
projectRow: bundleSizeProjectRow,
|
|
221
|
+
sortRows: bundleSizeSortRows,
|
|
222
|
+
rollup: bundleSizeRollup,
|
|
223
|
+
compare: bundleSizeCompare,
|
|
224
|
+
applyEpsilon: bundleSizeApplyEpsilon,
|
|
225
|
+
mergeRows: bundleSizeMergeRows,
|
|
226
|
+
}),
|
|
227
|
+
duplication: bindKindModule({
|
|
228
|
+
name: duplicationName,
|
|
229
|
+
keyField: duplicationKeyField,
|
|
230
|
+
kernelVersion: duplicationKernelVersion,
|
|
231
|
+
projectRow: duplicationProjectRow,
|
|
232
|
+
sortRows: duplicationSortRows,
|
|
233
|
+
rollup: duplicationRollup,
|
|
234
|
+
compare: duplicationCompare,
|
|
235
|
+
applyEpsilon: duplicationApplyEpsilon,
|
|
236
|
+
mergeRows: duplicationMergeRows,
|
|
237
|
+
}),
|
|
51
238
|
});
|
|
52
239
|
|
|
53
240
|
/**
|
|
@@ -55,10 +242,11 @@ const KIND_MODULES = Object.freeze({
|
|
|
55
242
|
* callers can't silently fall through to undefined behaviour.
|
|
56
243
|
*
|
|
57
244
|
* @param {string} kind
|
|
58
|
-
* @returns {{ name: string, kernelVersion: () => string,
|
|
245
|
+
* @returns {{ name: string, keyField: string, kernelVersion: () => string,
|
|
59
246
|
* projectRow: (row: object) => object,
|
|
60
247
|
* sortRows: (rows: object[]) => object[],
|
|
61
|
-
* rollup: (rows: object[], components?: object[]) => object
|
|
248
|
+
* rollup: (rows: object[], components?: object[]) => object,
|
|
249
|
+
* compare?: Function, applyEpsilon?: Function, mergeRows?: Function }}
|
|
62
250
|
*/
|
|
63
251
|
export function getKindModule(kind) {
|
|
64
252
|
const mod = KIND_MODULES[kind];
|
|
@@ -62,10 +62,6 @@ export const MAINTAINABILITY_EXCLUSIONS = Object.freeze(
|
|
|
62
62
|
// escomplex: "this[node.callee.type] is not a function" — the cyclomatic
|
|
63
63
|
// visitor lacks a handler for one of the quality-watch CLI's call shapes.
|
|
64
64
|
'.agents/scripts/quality-watch.js',
|
|
65
|
-
// escomplex: "Cannot read properties of undefined (reading 'pattern')" —
|
|
66
|
-
// same family as acceptance-spec-reconciler. The audit recheck CLI uses
|
|
67
|
-
// the same regex-property scan helpers.
|
|
68
|
-
'.agents/scripts/epic-audit-recheck.js',
|
|
69
65
|
// escomplex: parse-fails (MI=0) on the spec-freshness phase's optional-
|
|
70
66
|
// chained destructuring fallthrough. Same upstream family as the other
|
|
71
67
|
// "pattern" / destructuring failures; carve-out so the phase split of
|
|
@@ -86,15 +86,10 @@ function resolveBaselinePath(kind, opts = {}) {
|
|
|
86
86
|
cwd,
|
|
87
87
|
configPath: opts.configPath,
|
|
88
88
|
});
|
|
89
|
-
const gateBlock =
|
|
90
|
-
resolved?.agentSettings?.delivery?.quality?.gates?.[kind] ??
|
|
91
|
-
resolved?.delivery?.quality?.gates?.[kind] ??
|
|
92
|
-
null;
|
|
89
|
+
const gateBlock = resolved?.delivery?.quality?.gates?.[kind] ?? null;
|
|
93
90
|
if (gateBlock?.baselinePath) {
|
|
94
91
|
configured = gateBlock.baselinePath;
|
|
95
92
|
} else {
|
|
96
|
-
// Fall through to the legacy {lint, crap, maintainability} envelope
|
|
97
|
-
// exposed by getBaselines.
|
|
98
93
|
const flat = getBaselines(resolved ?? {});
|
|
99
94
|
if (kind === 'lint' || kind === 'crap' || kind === 'maintainability') {
|
|
100
95
|
configured = flat[kind]?.path ?? null;
|
|
@@ -62,9 +62,7 @@ export const BDD_RUNNER_TAG_TABLE = Object.freeze({
|
|
|
62
62
|
/**
|
|
63
63
|
* Shared set of tag tokens that mean "this scenario does not yet satisfy
|
|
64
64
|
* its AC — treat coverage as pending, not satisfied." Sourced from every
|
|
65
|
-
*
|
|
66
|
-
* `@pending` literal for backward compatibility with feature files
|
|
67
|
-
* authored before runner-aware detection.
|
|
65
|
+
* pending-tag value in `BDD_RUNNER_TAG_TABLE` (today `@skip` / `skip`).
|
|
68
66
|
*
|
|
69
67
|
* Both the prefixed (`@skip`) and the unprefixed (`skip`) form of each
|
|
70
68
|
* tag are included so consumers can look up either the raw tag string
|
|
@@ -75,18 +73,16 @@ export const BDD_RUNNER_TAG_TABLE = Object.freeze({
|
|
|
75
73
|
* - `acceptance-spec-reconciler.classifyCoverage` — membership check
|
|
76
74
|
* against parsed scenario tag sets.
|
|
77
75
|
* - Contract tests that walk `BDD_RUNNER_TAG_TABLE` and assert each
|
|
78
|
-
*
|
|
76
|
+
* pending tag is registered here, guarding against drift when a
|
|
79
77
|
* new runner is added.
|
|
80
78
|
*/
|
|
81
79
|
export const PENDING_TAGS = Object.freeze(
|
|
82
|
-
new Set(
|
|
83
|
-
|
|
80
|
+
new Set(
|
|
81
|
+
Object.values(BDD_RUNNER_TAG_TABLE).flatMap((tag) => [
|
|
84
82
|
tag,
|
|
85
83
|
tag.startsWith('@') ? tag.slice(1) : `@${tag}`,
|
|
86
84
|
]),
|
|
87
|
-
|
|
88
|
-
'pending',
|
|
89
|
-
]),
|
|
85
|
+
),
|
|
90
86
|
);
|
|
91
87
|
|
|
92
88
|
/**
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* bootstrap/issue-forms-template — Story #4227 (framework-gap)
|
|
3
3
|
*
|
|
4
|
-
* Generates GitHub **Issue
|
|
5
|
-
*
|
|
4
|
+
* Generates the GitHub **Story Issue Form**
|
|
5
|
+
* (`.github/ISSUE_TEMPLATE/story.yml`) derived from the canonical Story-body SSOT
|
|
6
6
|
* (`lib/story-body/story-body.js`). The forms exist so a human filing a
|
|
7
|
-
* Story
|
|
7
|
+
* Story in the GitHub web UI produces a body that round-trips through
|
|
8
8
|
* the same `story-body.parse()` agents rely on — closing the
|
|
9
9
|
* human↔agent ticket-shape gap.
|
|
10
10
|
*
|
|
@@ -57,12 +57,11 @@ import path from 'node:path';
|
|
|
57
57
|
const ISSUE_TEMPLATE_RELATIVE_DIR = '.github/ISSUE_TEMPLATE';
|
|
58
58
|
|
|
59
59
|
/**
|
|
60
|
-
* Relative
|
|
61
|
-
* and the bootstrap caller assert the canonical write
|
|
62
|
-
* re-deriving
|
|
60
|
+
* Relative path of the generated Story form, surfaced as a constant so tests
|
|
61
|
+
* and the bootstrap caller assert the canonical write target without
|
|
62
|
+
* re-deriving it.
|
|
63
63
|
*/
|
|
64
64
|
export const STORY_FORM_RELATIVE_PATH = `${ISSUE_TEMPLATE_RELATIVE_DIR}/story.yml`;
|
|
65
|
-
export const EPIC_FORM_RELATIVE_PATH = `${ISSUE_TEMPLATE_RELATIVE_DIR}/epic.yml`;
|
|
66
65
|
|
|
67
66
|
/**
|
|
68
67
|
* The human **intent subset** of the Story-body schema, in canonical
|
|
@@ -102,8 +101,12 @@ export const HUMAN_INTENT_FIELDS = [
|
|
|
102
101
|
heading: 'Changes',
|
|
103
102
|
label: 'Changes',
|
|
104
103
|
description:
|
|
105
|
-
'Files
|
|
106
|
-
|
|
104
|
+
'Files this work touches, one per line as JSON objects: ' +
|
|
105
|
+
'`{ "path": "…", "assumption": "creates"|"refactors-existing"|"exists"|"deletes" }`. ' +
|
|
106
|
+
'Advisory — the binding contract is Acceptance/Verify.',
|
|
107
|
+
placeholder:
|
|
108
|
+
'- {"path":"src/foo.js","assumption":"creates"}\n' +
|
|
109
|
+
'- {"path":"tests/foo.test.js","assumption":"creates"}',
|
|
107
110
|
required: false,
|
|
108
111
|
kind: 'textarea',
|
|
109
112
|
},
|
|
@@ -132,8 +135,10 @@ export const HUMAN_INTENT_FIELDS = [
|
|
|
132
135
|
id: 'references',
|
|
133
136
|
heading: 'References',
|
|
134
137
|
label: 'References',
|
|
135
|
-
description:
|
|
136
|
-
|
|
138
|
+
description:
|
|
139
|
+
'Read-only paths worth consulting, one per line as JSON objects ' +
|
|
140
|
+
'`{ "path": "…", "assumption": "exists" }`. Optional.',
|
|
141
|
+
placeholder: '- {"path":"docs/architecture.md","assumption":"exists"}',
|
|
137
142
|
required: false,
|
|
138
143
|
kind: 'textarea',
|
|
139
144
|
},
|
|
@@ -220,27 +225,26 @@ const GENERATED_BANNER =
|
|
|
220
225
|
'# (lint-issue-body.js) is the drift guard between this form and the parser.';
|
|
221
226
|
|
|
222
227
|
/**
|
|
223
|
-
* Render the GitHub Issue Form YAML for
|
|
224
|
-
*
|
|
225
|
-
*
|
|
226
|
-
* `parse()` is type-agnostic over the body shape.
|
|
228
|
+
* Render the GitHub Issue Form YAML for Stories. Epics are no longer a
|
|
229
|
+
* ticket type in the label taxonomy, so the generated human-entry surface
|
|
230
|
+
* is story-only.
|
|
227
231
|
*
|
|
228
232
|
* The output is deterministic so the round-trip + idempotency tests assert
|
|
229
233
|
* on its exact shape.
|
|
230
234
|
*
|
|
231
|
-
* @param {'story'
|
|
235
|
+
* @param {'story'} ticketType
|
|
232
236
|
* @param {IssueFormOptions} [opts]
|
|
233
237
|
* @returns {string}
|
|
234
238
|
*/
|
|
235
239
|
export function renderIssueForm(ticketType, opts = {}) {
|
|
236
|
-
if (ticketType !== 'story'
|
|
240
|
+
if (ticketType !== 'story') {
|
|
237
241
|
throw new Error(
|
|
238
|
-
`renderIssueForm: ticketType must be 'story'
|
|
242
|
+
`renderIssueForm: ticketType must be 'story', got ${ticketType}`,
|
|
239
243
|
);
|
|
240
244
|
}
|
|
241
245
|
const entryStateLabel = opts.entryStateLabel ?? 'agent::review-spec';
|
|
242
|
-
const typeLabel =
|
|
243
|
-
const titleCase =
|
|
246
|
+
const typeLabel = 'type::story';
|
|
247
|
+
const titleCase = 'Story';
|
|
244
248
|
const projectSuffix = opts.projectName ? ` for ${opts.projectName}` : '';
|
|
245
249
|
|
|
246
250
|
const fieldBlocks = HUMAN_INTENT_FIELDS.map(renderFieldBlock).join('\n');
|
|
@@ -309,8 +313,8 @@ export const CONFORMANCE_WORKFLOW_RELATIVE_PATH =
|
|
|
309
313
|
|
|
310
314
|
/**
|
|
311
315
|
* Render the CI workflow that runs the issue-body conformance lint
|
|
312
|
-
* (`lint-issue-body.js`) on opened/edited `type::story`
|
|
313
|
-
*
|
|
316
|
+
* (`lint-issue-body.js`) on opened/edited `type::story` issues. This is
|
|
317
|
+
* the mechanism that prevents the generated form and
|
|
314
318
|
* `story-body.parse()` from silently drifting (Story #4227 acceptance).
|
|
315
319
|
* Deterministic so the bootstrap test asserts its exact shape. Internal —
|
|
316
320
|
* exposed to consumers only through {@link ensureIssueForms}.
|
|
@@ -321,7 +325,7 @@ function renderConformanceWorkflow() {
|
|
|
321
325
|
return `# Issue-body conformance lint (Story #4227).
|
|
322
326
|
#
|
|
323
327
|
# Generated by agents-bootstrap-github. Runs the canonical story-body parser
|
|
324
|
-
# against human-opened type::story
|
|
328
|
+
# against human-opened type::story issues and comments when the
|
|
325
329
|
# body does not round-trip, instead of letting the supported human entry
|
|
326
330
|
# points (e.g. /plan from an existing Epic ID) fail silently later. The lint
|
|
327
331
|
# informs; it never fails the issue. Re-run /agents-bootstrap-github to refresh.
|
|
@@ -362,7 +366,7 @@ jobs:
|
|
|
362
366
|
}
|
|
363
367
|
|
|
364
368
|
/**
|
|
365
|
-
* Write (or refresh)
|
|
369
|
+
* Write (or refresh) the Story issue form into a project checkout. Idempotent at
|
|
366
370
|
* the byte level — mirrors {@link ensureCiWorkflow}'s contract:
|
|
367
371
|
*
|
|
368
372
|
* - file absent → `created`
|
|
@@ -378,7 +382,7 @@ jobs:
|
|
|
378
382
|
* @param {IssueFormOptions} [args.options]
|
|
379
383
|
* @param {boolean} [args.write=true] - When `false`, compute the would-be
|
|
380
384
|
* actions without touching disk (dry-run).
|
|
381
|
-
* @returns {{ forms: Array<{ type: 'story'|'
|
|
385
|
+
* @returns {{ forms: Array<{ type: 'story'|'conformance-workflow',
|
|
382
386
|
* action: 'created'|'unchanged'|'custom-skip',
|
|
383
387
|
* path: string, rendered: string }> }}
|
|
384
388
|
*/
|
|
@@ -387,20 +391,15 @@ export function ensureIssueForms(args) {
|
|
|
387
391
|
const options = args.options ?? {};
|
|
388
392
|
const write = args.write !== false;
|
|
389
393
|
|
|
390
|
-
// Each target pairs a
|
|
391
|
-
//
|
|
392
|
-
//
|
|
394
|
+
// Each target pairs a type key with the rendered body. The conformance
|
|
395
|
+
// workflow is materialized alongside the form because it is the form's
|
|
396
|
+
// drift guard — they ship as one unit.
|
|
393
397
|
const targets = [
|
|
394
398
|
{
|
|
395
399
|
type: 'story',
|
|
396
400
|
rel: STORY_FORM_RELATIVE_PATH,
|
|
397
401
|
rendered: renderIssueForm('story', options),
|
|
398
402
|
},
|
|
399
|
-
{
|
|
400
|
-
type: 'epic',
|
|
401
|
-
rel: EPIC_FORM_RELATIVE_PATH,
|
|
402
|
-
rendered: renderIssueForm('epic', options),
|
|
403
|
-
},
|
|
404
403
|
{
|
|
405
404
|
type: 'conformance-workflow',
|
|
406
405
|
rel: CONFORMANCE_WORKFLOW_RELATIVE_PATH,
|
|
@@ -24,6 +24,12 @@ import { applyQualityBootstrap } from './quality-bootstrap.js';
|
|
|
24
24
|
|
|
25
25
|
export const SYNC_COMMAND = 'node .agents/scripts/sync-claude-commands.js';
|
|
26
26
|
|
|
27
|
+
// Epic #4478 (M7-B). The role-scoped agent projection runs in every place the
|
|
28
|
+
// command projection does — `sync:agents` script, `prepare`, and the bootstrap
|
|
29
|
+
// `sync` phase (`runSyncCommands`) — so `.claude/agents/*.md` materializes for
|
|
30
|
+
// hosts that read it, exactly as `.claude/commands/*.md` does.
|
|
31
|
+
export const SYNC_AGENTS_COMMAND = 'node .agents/scripts/sync-claude-agents.js';
|
|
32
|
+
|
|
27
33
|
export const BOOTSTRAP_COMMAND = 'node .agents/scripts/bootstrap.js';
|
|
28
34
|
|
|
29
35
|
/**
|
|
@@ -202,6 +208,7 @@ export function ensurePackageJson(ctx) {
|
|
|
202
208
|
const outcomes = {
|
|
203
209
|
created: false,
|
|
204
210
|
scriptsSyncCommands: 'already-present',
|
|
211
|
+
scriptsSyncAgents: 'already-present',
|
|
205
212
|
scriptsPrepare: 'already-present',
|
|
206
213
|
scriptsBootstrap: 'already-present',
|
|
207
214
|
};
|
|
@@ -220,13 +227,29 @@ export function ensurePackageJson(ctx) {
|
|
|
220
227
|
pkg.scripts['sync:commands'] = SYNC_COMMAND;
|
|
221
228
|
outcomes.scriptsSyncCommands = 'added';
|
|
222
229
|
}
|
|
230
|
+
if (!pkg.scripts['sync:agents']) {
|
|
231
|
+
pkg.scripts['sync:agents'] = SYNC_AGENTS_COMMAND;
|
|
232
|
+
outcomes.scriptsSyncAgents = 'added';
|
|
233
|
+
}
|
|
223
234
|
const prepare = pkg.scripts.prepare;
|
|
224
235
|
if (!prepare) {
|
|
225
|
-
pkg.scripts.prepare = SYNC_COMMAND
|
|
236
|
+
pkg.scripts.prepare = `${SYNC_COMMAND} && ${SYNC_AGENTS_COMMAND}`;
|
|
226
237
|
outcomes.scriptsPrepare = 'added';
|
|
227
|
-
} else
|
|
228
|
-
|
|
229
|
-
|
|
238
|
+
} else {
|
|
239
|
+
// Append each projection independently so an existing prepare that already
|
|
240
|
+
// carries the command sync still gains the agent sync on the next bootstrap
|
|
241
|
+
// (and both are idempotent — a prepare carrying both is left untouched).
|
|
242
|
+
let next = prepare;
|
|
243
|
+
if (!next.includes('sync-claude-commands.js')) {
|
|
244
|
+
next = `${next} && ${SYNC_COMMAND}`;
|
|
245
|
+
}
|
|
246
|
+
if (!next.includes('sync-claude-agents.js')) {
|
|
247
|
+
next = `${next} && ${SYNC_AGENTS_COMMAND}`;
|
|
248
|
+
}
|
|
249
|
+
if (next !== prepare) {
|
|
250
|
+
pkg.scripts.prepare = next;
|
|
251
|
+
outcomes.scriptsPrepare = 'appended';
|
|
252
|
+
}
|
|
230
253
|
}
|
|
231
254
|
// Expose a discoverable `npm run bootstrap` alias for the framework
|
|
232
255
|
// setup command. An operator-defined `bootstrap` script always wins —
|
|
@@ -238,6 +261,7 @@ export function ensurePackageJson(ctx) {
|
|
|
238
261
|
const mutated =
|
|
239
262
|
outcomes.created ||
|
|
240
263
|
outcomes.scriptsSyncCommands === 'added' ||
|
|
264
|
+
outcomes.scriptsSyncAgents === 'added' ||
|
|
241
265
|
outcomes.scriptsPrepare !== 'already-present' ||
|
|
242
266
|
outcomes.scriptsBootstrap === 'added';
|
|
243
267
|
if (mutated) writeJson(pkgPath, pkg, fsImpl);
|
|
@@ -482,25 +506,39 @@ function ensureIssueFormsPhase(ctx) {
|
|
|
482
506
|
*/
|
|
483
507
|
export function runSyncCommands(ctx) {
|
|
484
508
|
const { spawnImpl = defaultSpawnSync } = ctx;
|
|
485
|
-
const
|
|
509
|
+
const scriptsDir = path.join(
|
|
486
510
|
ctx.agentRoot ?? path.join(ctx.projectRoot, '.agents'),
|
|
487
511
|
'scripts',
|
|
488
|
-
'sync-claude-commands.js',
|
|
489
512
|
);
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
513
|
+
// Both projections run here (Epic #4478, M7-B): the command tree AND the
|
|
514
|
+
// role-scoped agent tree, so `mandrel sync` / the postinstall path
|
|
515
|
+
// materializes `.claude/agents/*.md` alongside `.claude/commands/*.md`.
|
|
516
|
+
const projections = [
|
|
517
|
+
{ label: 'sync-claude-commands.js', script: 'sync-claude-commands.js' },
|
|
518
|
+
{ label: 'sync-claude-agents.js', script: 'sync-claude-agents.js' },
|
|
519
|
+
];
|
|
520
|
+
const stdouts = [];
|
|
521
|
+
for (const { label, script } of projections) {
|
|
522
|
+
const result = spawnImpl(
|
|
523
|
+
process.execPath,
|
|
524
|
+
[path.join(scriptsDir, script)],
|
|
525
|
+
{
|
|
526
|
+
cwd: ctx.projectRoot,
|
|
527
|
+
encoding: 'utf8',
|
|
528
|
+
},
|
|
501
529
|
);
|
|
530
|
+
if (result.status !== 0) {
|
|
531
|
+
throw new Error(
|
|
532
|
+
`[Bootstrap] ${label} failed (exit ${result.status}): ${(
|
|
533
|
+
result.stderr ?? ''
|
|
534
|
+
)
|
|
535
|
+
.trim()
|
|
536
|
+
.slice(0, 400)}`,
|
|
537
|
+
);
|
|
538
|
+
}
|
|
539
|
+
stdouts.push((result.stdout ?? '').trim());
|
|
502
540
|
}
|
|
503
|
-
return { ok: true, stdout: (
|
|
541
|
+
return { ok: true, stdout: stdouts.filter(Boolean).join('\n') };
|
|
504
542
|
}
|
|
505
543
|
|
|
506
544
|
/**
|
|
@@ -4,11 +4,11 @@
|
|
|
4
4
|
* Asserts that `git config core.bare` on the main checkout is NOT set
|
|
5
5
|
* to `true`. This guards the old failure mode where an `npm test` path
|
|
6
6
|
* mis-set `core.bare=true` on the main checkout, after which
|
|
7
|
-
* `story-close.js`'s post-rebase `git checkout` aborted with
|
|
7
|
+
* `single-story-close.js`'s post-rebase `git checkout` aborted with
|
|
8
8
|
* `fatal: this operation must be run in a work tree`. `cleanGitEnv`
|
|
9
9
|
* already lands the live fix; this check is the regression guard.
|
|
10
10
|
*
|
|
11
|
-
* Severity is `blocker` because story-close cannot recover on its own
|
|
11
|
+
* Severity is `blocker` because single-story-close cannot recover on its own
|
|
12
12
|
* — the operator must run `git config --unset core.bare` (or rely on
|
|
13
13
|
* `cleanGitEnv` to do it before the rebase). The check is
|
|
14
14
|
* refuse-and-print: the `fixCommand` is the literal unset, and the
|
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
* checks/index.js — Discovery-based registry + runner for self-healing checks.
|
|
3
3
|
*
|
|
4
4
|
* This module is the single entry point for every consumer surface that
|
|
5
|
-
* runs checks (preflight guards at `
|
|
5
|
+
* runs checks (preflight guards at `single-story-close.js` and
|
|
6
|
+
* `mandrel-update-preflight.js`, the
|
|
6
7
|
* `npm test` wrapper, the `diagnose.js` CLI viewer, and the retro hook in
|
|
7
8
|
* `retro-runner.js`). Each surface calls `runChecks({ scope, autoFix, state })`
|
|
8
9
|
* with its own scope and gets back `{ findings, fixed }`.
|