mandrel 1.57.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 +954 -0
- package/.agents/docs/SDLC.md +1420 -0
- package/.agents/docs/agentrc-reference.json +278 -0
- package/.agents/docs/configuration.md +1040 -0
- package/.agents/docs/workflows.md +59 -0
- package/.agents/instructions.md +384 -0
- package/.agents/personas/architect.md +107 -0
- package/.agents/personas/devops-engineer.md +36 -0
- package/.agents/personas/engineer-mobile.md +119 -0
- package/.agents/personas/engineer-web.md +110 -0
- package/.agents/personas/engineer.md +90 -0
- package/.agents/personas/product.md +88 -0
- package/.agents/personas/project-manager.md +110 -0
- package/.agents/personas/qa-engineer.md +91 -0
- package/.agents/personas/refactorer.md +110 -0
- package/.agents/personas/security-engineer.md +112 -0
- package/.agents/personas/sre.md +86 -0
- package/.agents/personas/technical-writer.md +100 -0
- package/.agents/personas/ux-designer.md +95 -0
- package/.agents/rules/api-conventions.md +75 -0
- package/.agents/rules/changelog-style.md +238 -0
- package/.agents/rules/gherkin-standards.md +146 -0
- package/.agents/rules/git-conventions.md +146 -0
- package/.agents/rules/orchestration-error-handling.md +35 -0
- package/.agents/rules/security-baseline.md +92 -0
- package/.agents/rules/shell-conventions.md +70 -0
- package/.agents/rules/test-seams.md +59 -0
- package/.agents/rules/testing-standards.md +177 -0
- package/.agents/runtime-deps.json +18 -0
- package/.agents/schemas/acceptance-eval-verdict.schema.json +93 -0
- package/.agents/schemas/agentrc.schema.json +1583 -0
- package/.agents/schemas/audit-results.schema.json +69 -0
- package/.agents/schemas/audit-rules.json +134 -0
- package/.agents/schemas/audit-rules.schema.json +69 -0
- package/.agents/schemas/baselines/baseline-envelope.schema.json +44 -0
- package/.agents/schemas/baselines/bundle-size.schema.json +47 -0
- package/.agents/schemas/baselines/coverage.schema.json +50 -0
- package/.agents/schemas/baselines/crap.schema.json +52 -0
- package/.agents/schemas/baselines/duplication.schema.json +62 -0
- package/.agents/schemas/baselines/lighthouse.schema.json +59 -0
- package/.agents/schemas/baselines/lint.schema.json +47 -0
- package/.agents/schemas/baselines/maintainability.schema.json +71 -0
- package/.agents/schemas/baselines/mutation.schema.json +52 -0
- package/.agents/schemas/crap-baseline.schema.json +57 -0
- package/.agents/schemas/crap-report.schema.json +102 -0
- package/.agents/schemas/dispatch-manifest.json +232 -0
- package/.agents/schemas/epic-perf-report.schema.json +89 -0
- package/.agents/schemas/epic-spec.schema.json +183 -0
- package/.agents/schemas/friction-event.schema.json +56 -0
- package/.agents/schemas/lifecycle/README.md +18 -0
- package/.agents/schemas/lifecycle/acceptance.reconcile.failed.schema.json +13 -0
- package/.agents/schemas/lifecycle/acceptance.reconcile.ok.schema.json +13 -0
- package/.agents/schemas/lifecycle/acceptance.reconcile.skipped.schema.json +13 -0
- package/.agents/schemas/lifecycle/acceptance.reconcile.start.schema.json +12 -0
- package/.agents/schemas/lifecycle/acceptance.reconcile.waived.schema.json +13 -0
- package/.agents/schemas/lifecycle/checkpoint.written.schema.json +13 -0
- package/.agents/schemas/lifecycle/close-validate.end.schema.json +18 -0
- package/.agents/schemas/lifecycle/close-validate.start.schema.json +13 -0
- package/.agents/schemas/lifecycle/code-review.end.schema.json +30 -0
- package/.agents/schemas/lifecycle/code-review.start.schema.json +12 -0
- package/.agents/schemas/lifecycle/epic.automerge.end.schema.json +14 -0
- package/.agents/schemas/lifecycle/epic.automerge.start.schema.json +13 -0
- package/.agents/schemas/lifecycle/epic.blocked.schema.json +13 -0
- package/.agents/schemas/lifecycle/epic.cleanup.end.schema.json +12 -0
- package/.agents/schemas/lifecycle/epic.cleanup.start.schema.json +12 -0
- package/.agents/schemas/lifecycle/epic.close.end.schema.json +12 -0
- package/.agents/schemas/lifecycle/epic.complete.schema.json +13 -0
- package/.agents/schemas/lifecycle/epic.finalize.end.schema.json +13 -0
- package/.agents/schemas/lifecycle/epic.finalize.start.schema.json +12 -0
- package/.agents/schemas/lifecycle/epic.merge.armed.schema.json +13 -0
- package/.agents/schemas/lifecycle/epic.merge.blocked.schema.json +14 -0
- package/.agents/schemas/lifecycle/epic.merge.confirmed.schema.json +17 -0
- package/.agents/schemas/lifecycle/epic.merge.ready.schema.json +15 -0
- package/.agents/schemas/lifecycle/epic.plan.end.schema.json +18 -0
- package/.agents/schemas/lifecycle/epic.plan.start.schema.json +12 -0
- package/.agents/schemas/lifecycle/epic.snapshot.end.schema.json +16 -0
- package/.agents/schemas/lifecycle/epic.snapshot.start.schema.json +12 -0
- package/.agents/schemas/lifecycle/epic.watch.end.schema.json +28 -0
- package/.agents/schemas/lifecycle/epic.watch.start.schema.json +16 -0
- package/.agents/schemas/lifecycle/intervention.recorded.schema.json +15 -0
- package/.agents/schemas/lifecycle/ledger-record.schema.json +59 -0
- package/.agents/schemas/lifecycle/notification.emitted.schema.json +18 -0
- package/.agents/schemas/lifecycle/pr.created.schema.json +14 -0
- package/.agents/schemas/lifecycle/retro.end.schema.json +16 -0
- package/.agents/schemas/lifecycle/retro.start.schema.json +12 -0
- package/.agents/schemas/lifecycle/story.blocked.schema.json +13 -0
- package/.agents/schemas/lifecycle/story.dispatch.end.schema.json +17 -0
- package/.agents/schemas/lifecycle/story.dispatch.start.schema.json +15 -0
- package/.agents/schemas/lifecycle/story.heartbeat.schema.json +20 -0
- package/.agents/schemas/lifecycle/story.merged.schema.json +13 -0
- package/.agents/schemas/mi-report.schema.json +58 -0
- package/.agents/schemas/model-attribution.schema.json +49 -0
- package/.agents/schemas/qa-finding.schema.json +133 -0
- package/.agents/schemas/qa-ledger.schema.json +89 -0
- package/.agents/schemas/risk-verdict.schema.json +53 -0
- package/.agents/schemas/signal-event.schema.json +58 -0
- package/.agents/schemas/skill.schema.json +31 -0
- package/.agents/schemas/skills-index.schema.json +81 -0
- package/.agents/schemas/story-perf-summary.schema.json +73 -0
- package/.agents/schemas/validation-evidence.schema.json +78 -0
- package/.agents/scripts/README.md +93 -0
- package/.agents/scripts/acceptance-eval.js +284 -0
- package/.agents/scripts/acceptance-spec-reconciler.js +556 -0
- package/.agents/scripts/agents-bootstrap-github.js +634 -0
- package/.agents/scripts/analyze-execution.js +369 -0
- package/.agents/scripts/assert-branch.js +83 -0
- package/.agents/scripts/audit-labels-bootstrap.js +253 -0
- package/.agents/scripts/audit-to-stories.js +257 -0
- package/.agents/scripts/bootstrap.js +1378 -0
- package/.agents/scripts/check-baselines.js +81 -0
- package/.agents/scripts/check-dead-exports.js +311 -0
- package/.agents/scripts/check-doc-links.js +401 -0
- package/.agents/scripts/check-gherkin-placeholders.js +663 -0
- package/.agents/scripts/check-lifecycle-doc-drift.js +402 -0
- package/.agents/scripts/check-lifecycle-lint.js +379 -0
- package/.agents/scripts/check-prepush-recovery.js +90 -0
- package/.agents/scripts/check-windows-git-perf.js +138 -0
- package/.agents/scripts/cleanup-repo-test-temp.js +67 -0
- package/.agents/scripts/coverage-capture.js +112 -0
- package/.agents/scripts/detect-merges.js +111 -0
- package/.agents/scripts/diagnose-friction.js +257 -0
- package/.agents/scripts/diagnose.js +240 -0
- package/.agents/scripts/dispatcher.js +295 -0
- package/.agents/scripts/drain-pending-cleanup.js +147 -0
- package/.agents/scripts/epic-audit-prepare.js +419 -0
- package/.agents/scripts/epic-audit-recheck.js +241 -0
- package/.agents/scripts/epic-deliver-note-intervention.js +192 -0
- package/.agents/scripts/epic-deliver-preflight.js +407 -0
- package/.agents/scripts/epic-deliver-prepare.js +383 -0
- package/.agents/scripts/epic-execute-record-wave.js +463 -0
- package/.agents/scripts/epic-plan-clarity.js +201 -0
- package/.agents/scripts/epic-plan-decompose.js +79 -0
- package/.agents/scripts/epic-plan-healthcheck.js +363 -0
- package/.agents/scripts/epic-plan-spec-validate.js +111 -0
- package/.agents/scripts/epic-plan-spec.js +198 -0
- package/.agents/scripts/epic-reconcile.js +637 -0
- package/.agents/scripts/evidence-gate.js +235 -0
- package/.agents/scripts/generate-config-docs.js +516 -0
- package/.agents/scripts/generate-lifecycle-docs.js +224 -0
- package/.agents/scripts/generate-skills-index.js +252 -0
- package/.agents/scripts/generate-workflows-doc.js +168 -0
- package/.agents/scripts/git-cleanup.js +124 -0
- package/.agents/scripts/git-pr-quality-gate.js +203 -0
- package/.agents/scripts/git-rebase-and-resolve.js +234 -0
- package/.agents/scripts/hierarchy-gate.js +176 -0
- package/.agents/scripts/hydrate-context.js +179 -0
- package/.agents/scripts/install-matrix-assert.js +282 -0
- package/.agents/scripts/lib/Graph.js +326 -0
- package/.agents/scripts/lib/ITicketingProvider.js +349 -0
- package/.agents/scripts/lib/Logger.js +194 -0
- package/.agents/scripts/lib/audit-suite/cli.js +64 -0
- package/.agents/scripts/lib/audit-suite/findings.js +164 -0
- package/.agents/scripts/lib/audit-suite/frontmatter-lint.js +32 -0
- package/.agents/scripts/lib/audit-suite/frontmatter.js +110 -0
- package/.agents/scripts/lib/audit-suite/index.js +22 -0
- package/.agents/scripts/lib/audit-suite/runner.js +233 -0
- package/.agents/scripts/lib/audit-suite/selector.js +235 -0
- package/.agents/scripts/lib/audit-suite/substitutions.js +124 -0
- package/.agents/scripts/lib/audit-suite/workflow-loader.js +49 -0
- package/.agents/scripts/lib/audit-to-stories/build-story-body.js +130 -0
- package/.agents/scripts/lib/audit-to-stories/dedupe-against-github.js +114 -0
- package/.agents/scripts/lib/audit-to-stories/finding-adapter.js +93 -0
- package/.agents/scripts/lib/audit-to-stories/group-findings.js +265 -0
- package/.agents/scripts/lib/audit-to-stories/parse-audit-md.js +246 -0
- package/.agents/scripts/lib/audit-to-stories/seed-epic-from-findings.js +160 -0
- package/.agents/scripts/lib/auto-refresh-baselines.js +308 -0
- package/.agents/scripts/lib/baseline-loader.js +0 -0
- package/.agents/scripts/lib/baseline-schema-registry.js +69 -0
- package/.agents/scripts/lib/baseline-snapshot.js +716 -0
- package/.agents/scripts/lib/baselines/component-matcher.js +21 -0
- package/.agents/scripts/lib/baselines/components.js +126 -0
- package/.agents/scripts/lib/baselines/diff-scope-cli.js +203 -0
- package/.agents/scripts/lib/baselines/duplication-scanner.js +220 -0
- package/.agents/scripts/lib/baselines/env-overrides.js +129 -0
- package/.agents/scripts/lib/baselines/envelope.js +368 -0
- package/.agents/scripts/lib/baselines/exit-codes.js +89 -0
- package/.agents/scripts/lib/baselines/git-base.js +0 -0
- package/.agents/scripts/lib/baselines/kernel.js +111 -0
- package/.agents/scripts/lib/baselines/kinds/_shared-metric.js +220 -0
- package/.agents/scripts/lib/baselines/kinds/bundle-size.js +157 -0
- package/.agents/scripts/lib/baselines/kinds/coverage.js +194 -0
- package/.agents/scripts/lib/baselines/kinds/crap.js +555 -0
- package/.agents/scripts/lib/baselines/kinds/duplication.js +197 -0
- package/.agents/scripts/lib/baselines/kinds/lighthouse.js +185 -0
- package/.agents/scripts/lib/baselines/kinds/lint.js +172 -0
- package/.agents/scripts/lib/baselines/kinds/maintainability.js +340 -0
- package/.agents/scripts/lib/baselines/kinds/mutation.js +153 -0
- package/.agents/scripts/lib/baselines/path-canon.js +279 -0
- package/.agents/scripts/lib/baselines/preview-gates.js +298 -0
- package/.agents/scripts/lib/baselines/reader.js +321 -0
- package/.agents/scripts/lib/baselines/refresh-service.js +733 -0
- package/.agents/scripts/lib/baselines/scope.js +291 -0
- package/.agents/scripts/lib/baselines/writer.js +312 -0
- package/.agents/scripts/lib/bdd-runner-detect.js +417 -0
- package/.agents/scripts/lib/bdd-scenario-scanner.js +310 -0
- package/.agents/scripts/lib/bootstrap/baselines-layout-migration.js +202 -0
- package/.agents/scripts/lib/bootstrap/branch-protection.js +222 -0
- package/.agents/scripts/lib/bootstrap/ci-workflow-template.js +171 -0
- package/.agents/scripts/lib/bootstrap/commit-push.js +146 -0
- package/.agents/scripts/lib/bootstrap/gh-list.js +153 -0
- package/.agents/scripts/lib/bootstrap/gh-preflight.js +306 -0
- package/.agents/scripts/lib/bootstrap/hitl-confirm.js +89 -0
- package/.agents/scripts/lib/bootstrap/install-ledger.js +174 -0
- package/.agents/scripts/lib/bootstrap/manifest.js +272 -0
- package/.agents/scripts/lib/bootstrap/merge-methods.js +108 -0
- package/.agents/scripts/lib/bootstrap/preflight.js +195 -0
- package/.agents/scripts/lib/bootstrap/project-bootstrap.js +801 -0
- package/.agents/scripts/lib/bootstrap/prompt.js +480 -0
- package/.agents/scripts/lib/bootstrap/quality-bootstrap.js +370 -0
- package/.agents/scripts/lib/bootstrap/summary.js +75 -0
- package/.agents/scripts/lib/bootstrap/workflow-audit.js +256 -0
- package/.agents/scripts/lib/branch-name-guard.js +98 -0
- package/.agents/scripts/lib/c8-cli-path.js +21 -0
- package/.agents/scripts/lib/changed-files.js +184 -0
- package/.agents/scripts/lib/checks/baseline-drift-main-checkout.js +104 -0
- package/.agents/scripts/lib/checks/core-bare-clean.js +48 -0
- package/.agents/scripts/lib/checks/epic-merge-lock-stale.js +54 -0
- package/.agents/scripts/lib/checks/index.js +288 -0
- package/.agents/scripts/lib/checks/push-hook-parity.js +106 -0
- package/.agents/scripts/lib/checks/stale-origin-epic.js +49 -0
- package/.agents/scripts/lib/checks/state.js +558 -0
- package/.agents/scripts/lib/checks/story-init-not-backgrounded.js +186 -0
- package/.agents/scripts/lib/checks/subagent-agent-tool-required.js +182 -0
- package/.agents/scripts/lib/checks/windows-coverage-noise-floor.js +92 -0
- package/.agents/scripts/lib/checks/worktree-bootstrap-env.js +81 -0
- package/.agents/scripts/lib/checks/worktree-residue-biome.js +55 -0
- package/.agents/scripts/lib/cli/parse-numeric.js +60 -0
- package/.agents/scripts/lib/cli/standard-args.js +351 -0
- package/.agents/scripts/lib/cli-args.js +286 -0
- package/.agents/scripts/lib/cli-utils.js +69 -0
- package/.agents/scripts/lib/close-validation/projections/head-sha.js +44 -0
- package/.agents/scripts/lib/close-validation/projections/inputs.js +86 -0
- package/.agents/scripts/lib/close-validation/projections/maintainability.js +286 -0
- package/.agents/scripts/lib/close-validation.js +897 -0
- package/.agents/scripts/lib/codebase-snapshot.js +513 -0
- package/.agents/scripts/lib/command-header.js +33 -0
- package/.agents/scripts/lib/config/acceptance-eval.js +95 -0
- package/.agents/scripts/lib/config/baselines.js +60 -0
- package/.agents/scripts/lib/config/ci.js +30 -0
- package/.agents/scripts/lib/config/commands.js +36 -0
- package/.agents/scripts/lib/config/defaults.js +119 -0
- package/.agents/scripts/lib/config/explain.js +348 -0
- package/.agents/scripts/lib/config/gates/bundle-size.schema.js +23 -0
- package/.agents/scripts/lib/config/gates/coverage.schema.js +18 -0
- package/.agents/scripts/lib/config/gates/crap.schema.js +33 -0
- package/.agents/scripts/lib/config/gates/duplication.schema.js +26 -0
- package/.agents/scripts/lib/config/gates/index.js +36 -0
- package/.agents/scripts/lib/config/gates/lighthouse.schema.js +23 -0
- package/.agents/scripts/lib/config/gates/lint.schema.js +9 -0
- package/.agents/scripts/lib/config/gates/maintainability.schema.js +20 -0
- package/.agents/scripts/lib/config/gates/mutation.schema.js +12 -0
- package/.agents/scripts/lib/config/gates/shared.js +117 -0
- package/.agents/scripts/lib/config/github.js +122 -0
- package/.agents/scripts/lib/config/lifecycle.js +40 -0
- package/.agents/scripts/lib/config/limits.js +211 -0
- package/.agents/scripts/lib/config/paths.js +73 -0
- package/.agents/scripts/lib/config/preflight.js +58 -0
- package/.agents/scripts/lib/config/quality.js +665 -0
- package/.agents/scripts/lib/config/retro.js +77 -0
- package/.agents/scripts/lib/config/runners.js +105 -0
- package/.agents/scripts/lib/config/runtime.js +167 -0
- package/.agents/scripts/lib/config/shared.js +46 -0
- package/.agents/scripts/lib/config/sync-agentrc.js +243 -0
- package/.agents/scripts/lib/config/temp-paths.js +373 -0
- package/.agents/scripts/lib/config/validate-orchestration.js +81 -0
- package/.agents/scripts/lib/config/worktree-isolation.js +80 -0
- package/.agents/scripts/lib/config-resolver.js +298 -0
- package/.agents/scripts/lib/config-schema-shared.js +32 -0
- package/.agents/scripts/lib/config-schema.js +20 -0
- package/.agents/scripts/lib/config-settings-schema-delivery.js +332 -0
- package/.agents/scripts/lib/config-settings-schema-quality.js +165 -0
- package/.agents/scripts/lib/config-settings-schema.js +420 -0
- package/.agents/scripts/lib/coverage-baseline.js +352 -0
- package/.agents/scripts/lib/coverage-capture.js +195 -0
- package/.agents/scripts/lib/coverage-utils.js +239 -0
- package/.agents/scripts/lib/cpu-pool.js +223 -0
- package/.agents/scripts/lib/crap-engine.js +119 -0
- package/.agents/scripts/lib/crap-utils.js +479 -0
- package/.agents/scripts/lib/degraded-mode.js +69 -0
- package/.agents/scripts/lib/dependency-parser.js +129 -0
- package/.agents/scripts/lib/duplicate-search.js +189 -0
- package/.agents/scripts/lib/dynamic-workflow/architecture-report-contract.js +70 -0
- package/.agents/scripts/lib/dynamic-workflow/audit-orchestrator.js +197 -0
- package/.agents/scripts/lib/dynamic-workflow/capability.js +396 -0
- package/.agents/scripts/lib/dynamic-workflow/clean-code-report-contract.js +80 -0
- package/.agents/scripts/lib/dynamic-workflow/performance-report-contract.js +72 -0
- package/.agents/scripts/lib/dynamic-workflow/quality-report-contract.js +90 -0
- package/.agents/scripts/lib/dynamic-workflow/report-contract-core.js +43 -0
- package/.agents/scripts/lib/dynamic-workflow/security-report-contract.js +83 -0
- package/.agents/scripts/lib/env-loader.js +52 -0
- package/.agents/scripts/lib/epic-merge-lock.js +239 -0
- package/.agents/scripts/lib/epic-plan-clarity.js +142 -0
- package/.agents/scripts/lib/epic-plan-ideation.js +228 -0
- package/.agents/scripts/lib/error-redactor.js +125 -0
- package/.agents/scripts/lib/errors/index.js +67 -0
- package/.agents/scripts/lib/feedback-loop/audit-results-graduator.js +230 -0
- package/.agents/scripts/lib/feedback-loop/code-review-graduator.js +207 -0
- package/.agents/scripts/lib/feedback-loop/graduator-core.js +421 -0
- package/.agents/scripts/lib/feedback-loop/memory-freshness.js +480 -0
- package/.agents/scripts/lib/feedback-loop/prior-feedback-fetcher.js +229 -0
- package/.agents/scripts/lib/findings/classify-finding.js +195 -0
- package/.agents/scripts/lib/findings/promote-finding.js +353 -0
- package/.agents/scripts/lib/findings/route-finding.js +283 -0
- package/.agents/scripts/lib/findings/semantic-issue-search.js +179 -0
- package/.agents/scripts/lib/findings/severity.js +102 -0
- package/.agents/scripts/lib/gates/baseline-store.js +106 -0
- package/.agents/scripts/lib/gates/friction.js +43 -0
- package/.agents/scripts/lib/gh-exec.js +553 -0
- package/.agents/scripts/lib/git/cached-fetch.js +0 -0
- package/.agents/scripts/lib/git/sync-from-base.js +162 -0
- package/.agents/scripts/lib/git-branch-cleanup.js +213 -0
- package/.agents/scripts/lib/git-branch-lifecycle.js +353 -0
- package/.agents/scripts/lib/git-merge-orchestrator.js +261 -0
- package/.agents/scripts/lib/git-utils.js +363 -0
- package/.agents/scripts/lib/github-url.js +29 -0
- package/.agents/scripts/lib/install-cmd-parser.js +51 -0
- package/.agents/scripts/lib/issue-link-parser.js +74 -0
- package/.agents/scripts/lib/json-utils.js +60 -0
- package/.agents/scripts/lib/label-constants.js +169 -0
- package/.agents/scripts/lib/label-taxonomy.js +200 -0
- package/.agents/scripts/lib/maintainability-engine.js +164 -0
- package/.agents/scripts/lib/maintainability-utils.js +343 -0
- package/.agents/scripts/lib/mandrel-catalog.js +170 -0
- package/.agents/scripts/lib/mutation/baseline-snapshot.js +238 -0
- package/.agents/scripts/lib/mutation/config-detector.js +119 -0
- package/.agents/scripts/lib/mutation/stryker-runner.js +306 -0
- package/.agents/scripts/lib/mutation/survivor-report.js +160 -0
- package/.agents/scripts/lib/notifications/notifier.js +75 -0
- package/.agents/scripts/lib/observability/active-story-env.js +182 -0
- package/.agents/scripts/lib/observability/baseline-refresh-rate.js +221 -0
- package/.agents/scripts/lib/observability/perf-aggregator.js +887 -0
- package/.agents/scripts/lib/observability/perf-report-readers.js +319 -0
- package/.agents/scripts/lib/observability/perf-report-render.js +182 -0
- package/.agents/scripts/lib/observability/signals-writer.js +296 -0
- package/.agents/scripts/lib/observability/source-classifier.js +103 -0
- package/.agents/scripts/lib/observability/tool-trace-hook.js +417 -0
- package/.agents/scripts/lib/onboard/detect-stack.js +300 -0
- package/.agents/scripts/lib/onboard/scaffold-docs.js +128 -0
- package/.agents/scripts/lib/orchestration/acceptance-eval-decision.js +173 -0
- package/.agents/scripts/lib/orchestration/cascade-grouping.js +275 -0
- package/.agents/scripts/lib/orchestration/check-baselines/phases/compare.js +131 -0
- package/.agents/scripts/lib/orchestration/check-baselines/phases/evaluate.js +80 -0
- package/.agents/scripts/lib/orchestration/check-baselines/phases/floors.js +132 -0
- package/.agents/scripts/lib/orchestration/check-baselines/phases/friction.js +142 -0
- package/.agents/scripts/lib/orchestration/check-baselines/phases/parse-args.js +149 -0
- package/.agents/scripts/lib/orchestration/check-baselines/phases/pipeline.js +158 -0
- package/.agents/scripts/lib/orchestration/check-baselines/phases/report.js +56 -0
- package/.agents/scripts/lib/orchestration/code-review.js +652 -0
- package/.agents/scripts/lib/orchestration/column-sync.js +286 -0
- package/.agents/scripts/lib/orchestration/context-envelope.js +280 -0
- package/.agents/scripts/lib/orchestration/context-hydration-engine.js +581 -0
- package/.agents/scripts/lib/orchestration/dependency-analyzer.js +88 -0
- package/.agents/scripts/lib/orchestration/detectors-phase.js +188 -0
- package/.agents/scripts/lib/orchestration/dispatch-engine.js +144 -0
- package/.agents/scripts/lib/orchestration/dispatch-pipeline.js +206 -0
- package/.agents/scripts/lib/orchestration/doc-reader.js +94 -0
- package/.agents/scripts/lib/orchestration/epic-cleanup.js +473 -0
- package/.agents/scripts/lib/orchestration/epic-deliver-lease-guard.js +310 -0
- package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/cli.js +167 -0
- package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/context.js +151 -0
- package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/creation.js +74 -0
- package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/dag.js +78 -0
- package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/diagnostics.js +72 -0
- package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/persist-helpers.js +155 -0
- package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/persist.js +321 -0
- package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/planning-artifacts.js +75 -0
- package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/reconcile-spawn.js +86 -0
- package/.agents/scripts/lib/orchestration/epic-plan-lease-guard.js +235 -0
- package/.agents/scripts/lib/orchestration/epic-plan-spec/phases/authoring-context.js +197 -0
- package/.agents/scripts/lib/orchestration/epic-plan-spec/phases/cli-args.js +48 -0
- package/.agents/scripts/lib/orchestration/epic-plan-spec/phases/drain.js +94 -0
- package/.agents/scripts/lib/orchestration/epic-plan-spec/phases/plan-epic.js +414 -0
- package/.agents/scripts/lib/orchestration/epic-plan-spec/phases/prompts.js +55 -0
- package/.agents/scripts/lib/orchestration/epic-plan-spec/phases/risk-verdict.js +105 -0
- package/.agents/scripts/lib/orchestration/epic-plan-spec/phases/run-spec-phase.js +235 -0
- package/.agents/scripts/lib/orchestration/epic-plan-spec/phases/spec-freshness.js +120 -0
- package/.agents/scripts/lib/orchestration/epic-plan-state-store.js +118 -0
- package/.agents/scripts/lib/orchestration/epic-run-state-store.js +295 -0
- package/.agents/scripts/lib/orchestration/epic-runner/concurrency-gate.js +186 -0
- package/.agents/scripts/lib/orchestration/epic-runner/deliver-phases.js +50 -0
- package/.agents/scripts/lib/orchestration/epic-runner/phases/build-wave-dag.js +146 -0
- package/.agents/scripts/lib/orchestration/epic-runner/phases/snapshot.js +110 -0
- package/.agents/scripts/lib/orchestration/epic-runner/progress-reporter/composition.js +392 -0
- package/.agents/scripts/lib/orchestration/epic-runner/progress-reporter/signals.js +217 -0
- package/.agents/scripts/lib/orchestration/epic-runner/progress-reporter/transport.js +235 -0
- package/.agents/scripts/lib/orchestration/epic-runner/progress-reporter.js +69 -0
- package/.agents/scripts/lib/orchestration/epic-runner/progress-signals/_bullet-format.js +32 -0
- package/.agents/scripts/lib/orchestration/epic-runner/progress-signals/crap-drift.js +291 -0
- package/.agents/scripts/lib/orchestration/epic-runner/progress-signals/maintainability-drift.js +175 -0
- package/.agents/scripts/lib/orchestration/epic-runner/progress-signals/stalled-worktree.js +37 -0
- package/.agents/scripts/lib/orchestration/epic-runner/story-launcher.js +127 -0
- package/.agents/scripts/lib/orchestration/epic-runner/story-run-progress-writer.js +400 -0
- package/.agents/scripts/lib/orchestration/epic-runner/sub-agent-return.js +285 -0
- package/.agents/scripts/lib/orchestration/epic-runner/wave-scheduler.js +66 -0
- package/.agents/scripts/lib/orchestration/epic-spec-reconciler-apply.js +797 -0
- package/.agents/scripts/lib/orchestration/epic-spec-reconciler-diff.js +619 -0
- package/.agents/scripts/lib/orchestration/epic-spec-reconciler-discriminator.js +335 -0
- package/.agents/scripts/lib/orchestration/epic-spec-reconciler-format.js +230 -0
- package/.agents/scripts/lib/orchestration/epic-spec-reconciler-ops.js +363 -0
- package/.agents/scripts/lib/orchestration/error-journal.js +139 -0
- package/.agents/scripts/lib/orchestration/file-assumption-enum.js +31 -0
- package/.agents/scripts/lib/orchestration/file-assumptions.js +506 -0
- package/.agents/scripts/lib/orchestration/finalize/close-planning-tickets.js +116 -0
- package/.agents/scripts/lib/orchestration/finalize/open-or-locate-pr.js +241 -0
- package/.agents/scripts/lib/orchestration/finalize/post-handoff-comment.js +489 -0
- package/.agents/scripts/lib/orchestration/finalize/sanitize-skip-ci.js +88 -0
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/branches-reap.js +219 -0
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/branches.js +309 -0
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/cli.js +99 -0
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/fast-forward.js +123 -0
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/filters.js +57 -0
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/git-probes-ff.js +114 -0
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/git-probes.js +426 -0
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/parse-args.js +84 -0
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/phase-drivers.js +365 -0
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/prompts.js +72 -0
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/prune.js +69 -0
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/render.js +214 -0
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/stashes.js +137 -0
- package/.agents/scripts/lib/orchestration/label-transitions.js +43 -0
- package/.agents/scripts/lib/orchestration/lifecycle/bus.js +309 -0
- package/.agents/scripts/lib/orchestration/lifecycle/emit-story-dispatch-end.js +147 -0
- package/.agents/scripts/lib/orchestration/lifecycle/emit-story-heartbeat.js +155 -0
- package/.agents/scripts/lib/orchestration/lifecycle/ledger-writer.js +226 -0
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/README.md +69 -0
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/acceptance-reconciler.js +378 -0
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/automerge-armer.js +248 -0
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/automerge-predicate.js +527 -0
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/branch-cleaner.js +259 -0
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/checkpoint-pointer-writer.js +278 -0
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/cleaner.js +355 -0
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/finalizer.js +647 -0
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/index.js +331 -0
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/intervention-recorder.js +140 -0
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/merge-watcher.js +421 -0
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/notify-dispatcher.js +168 -0
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/watcher.js +668 -0
- package/.agents/scripts/lib/orchestration/lifecycle/trace-logger.js +322 -0
- package/.agents/scripts/lib/orchestration/lint-baseline-service.js +114 -0
- package/.agents/scripts/lib/orchestration/manifest-builder.js +216 -0
- package/.agents/scripts/lib/orchestration/model-attribution.js +390 -0
- package/.agents/scripts/lib/orchestration/parked-follow-ons.js +147 -0
- package/.agents/scripts/lib/orchestration/phase-runner.js +87 -0
- package/.agents/scripts/lib/orchestration/plan-review-routing.js +63 -0
- package/.agents/scripts/lib/orchestration/plan-runner/plan-router.js +86 -0
- package/.agents/scripts/lib/orchestration/plan-runner/worktree-sweep.js +212 -0
- package/.agents/scripts/lib/orchestration/planning-context-budget.js +213 -0
- package/.agents/scripts/lib/orchestration/planning-risk.js +155 -0
- package/.agents/scripts/lib/orchestration/planning-state-manager.js +318 -0
- package/.agents/scripts/lib/orchestration/post-merge/phases/branch-cleanup.js +56 -0
- package/.agents/scripts/lib/orchestration/post-merge/phases/dashboard-refresh.js +33 -0
- package/.agents/scripts/lib/orchestration/post-merge/phases/notification.js +78 -0
- package/.agents/scripts/lib/orchestration/post-merge/phases/temp-cleanup.js +68 -0
- package/.agents/scripts/lib/orchestration/post-merge/phases/ticket-closure.js +118 -0
- package/.agents/scripts/lib/orchestration/post-merge/phases/worktree-reap.js +396 -0
- package/.agents/scripts/lib/orchestration/post-merge-pipeline.js +205 -0
- package/.agents/scripts/lib/orchestration/pr-base-guard.js +47 -0
- package/.agents/scripts/lib/orchestration/preflight-cache.js +164 -0
- package/.agents/scripts/lib/orchestration/reassert-status-column.js +202 -0
- package/.agents/scripts/lib/orchestration/reconciler.js +137 -0
- package/.agents/scripts/lib/orchestration/recurring-failure-detector.js +152 -0
- package/.agents/scripts/lib/orchestration/recut.js +56 -0
- package/.agents/scripts/lib/orchestration/resolves-token.js +127 -0
- package/.agents/scripts/lib/orchestration/retro/phases/checks.js +94 -0
- package/.agents/scripts/lib/orchestration/retro/phases/compose-body.js +448 -0
- package/.agents/scripts/lib/orchestration/retro/phases/gather-signals.js +335 -0
- package/.agents/scripts/lib/orchestration/retro/phases/post-and-mirror.js +133 -0
- package/.agents/scripts/lib/orchestration/retro-heuristics.js +57 -0
- package/.agents/scripts/lib/orchestration/retro-perf-heuristics.js +275 -0
- package/.agents/scripts/lib/orchestration/retro-proposals.js +395 -0
- package/.agents/scripts/lib/orchestration/retro-runner.js +171 -0
- package/.agents/scripts/lib/orchestration/review-depth.js +93 -0
- package/.agents/scripts/lib/orchestration/review-providers/codex.js +363 -0
- package/.agents/scripts/lib/orchestration/review-providers/findings-renderer.js +205 -0
- package/.agents/scripts/lib/orchestration/review-providers/native.js +805 -0
- package/.agents/scripts/lib/orchestration/review-providers/review-depth.js +73 -0
- package/.agents/scripts/lib/orchestration/review-providers/review-provider-factory.js +396 -0
- package/.agents/scripts/lib/orchestration/review-providers/security-review.js +373 -0
- package/.agents/scripts/lib/orchestration/review-providers/types.js +89 -0
- package/.agents/scripts/lib/orchestration/review-providers/ultrareview.js +107 -0
- package/.agents/scripts/lib/orchestration/single-story-close/phases/auto-merge.js +159 -0
- package/.agents/scripts/lib/orchestration/single-story-close/phases/base-sync.js +194 -0
- package/.agents/scripts/lib/orchestration/single-story-close/phases/close-validation.js +81 -0
- package/.agents/scripts/lib/orchestration/single-story-close/phases/code-review.js +190 -0
- package/.agents/scripts/lib/orchestration/single-story-close/phases/options.js +70 -0
- package/.agents/scripts/lib/orchestration/single-story-close/phases/pull-request.js +106 -0
- package/.agents/scripts/lib/orchestration/single-story-close/phases/push.js +42 -0
- package/.agents/scripts/lib/orchestration/single-story-close/phases/worktree-reap.js +73 -0
- package/.agents/scripts/lib/orchestration/single-story-close/phases/wrong-tree-guard.js +225 -0
- package/.agents/scripts/lib/orchestration/single-story-close/runner.js +315 -0
- package/.agents/scripts/lib/orchestration/single-story-lease-guard.js +149 -0
- package/.agents/scripts/lib/orchestration/skill-capsule-loader.js +110 -0
- package/.agents/scripts/lib/orchestration/spec-freshness.js +320 -0
- package/.agents/scripts/lib/orchestration/spec-renderer.js +456 -0
- package/.agents/scripts/lib/orchestration/spec-section-validator.js +80 -0
- package/.agents/scripts/lib/orchestration/story-close/auto-refresh-runner.js +797 -0
- package/.agents/scripts/lib/orchestration/story-close/baseline-attribution/phases/gate-failure.js +163 -0
- package/.agents/scripts/lib/orchestration/story-close/baseline-attribution/phases/pre-merge-attribution.js +152 -0
- package/.agents/scripts/lib/orchestration/story-close/baseline-attribution/phases/refresh-commit.js +387 -0
- package/.agents/scripts/lib/orchestration/story-close/baseline-attribution/phases/regression-projection.js +266 -0
- package/.agents/scripts/lib/orchestration/story-close/baseline-attribution/phases/scope-discovery.js +48 -0
- package/.agents/scripts/lib/orchestration/story-close/baseline-attribution-wiring.js +67 -0
- package/.agents/scripts/lib/orchestration/story-close/baseline-attribution.js +161 -0
- package/.agents/scripts/lib/orchestration/story-close/baseline-friction-body.js +117 -0
- package/.agents/scripts/lib/orchestration/story-close/cd-out-guard.js +86 -0
- package/.agents/scripts/lib/orchestration/story-close/cleanup-reconciler.js +147 -0
- package/.agents/scripts/lib/orchestration/story-close/close-inputs.js +142 -0
- package/.agents/scripts/lib/orchestration/story-close/comment-bodies.js +62 -0
- package/.agents/scripts/lib/orchestration/story-close/format-autofix-scoped.js +221 -0
- package/.agents/scripts/lib/orchestration/story-close/format-autofix-shared.js +123 -0
- package/.agents/scripts/lib/orchestration/story-close/format-autofix.js +216 -0
- package/.agents/scripts/lib/orchestration/story-close/merge-runner.js +636 -0
- package/.agents/scripts/lib/orchestration/story-close/merge-subject.js +198 -0
- package/.agents/scripts/lib/orchestration/story-close/phases/branch-restore.js +105 -0
- package/.agents/scripts/lib/orchestration/story-close/phases/close.js +222 -0
- package/.agents/scripts/lib/orchestration/story-close/phases/code-review.js +220 -0
- package/.agents/scripts/lib/orchestration/story-close/phases/gates.js +291 -0
- package/.agents/scripts/lib/orchestration/story-close/phases/locked-pipeline.js +234 -0
- package/.agents/scripts/lib/orchestration/story-close/phases/preflight.js +110 -0
- package/.agents/scripts/lib/orchestration/story-close/phases/refresh.js +86 -0
- package/.agents/scripts/lib/orchestration/story-close/phases/timeout-blocked-emitter.js +112 -0
- package/.agents/scripts/lib/orchestration/story-close/phases/timeout-blocked.js +157 -0
- package/.agents/scripts/lib/orchestration/story-close/post-merge-close.js +434 -0
- package/.agents/scripts/lib/orchestration/story-close/pre-merge-validation.js +290 -0
- package/.agents/scripts/lib/orchestration/story-close-recovery.js +643 -0
- package/.agents/scripts/lib/orchestration/structured-comment-parser.js +67 -0
- package/.agents/scripts/lib/orchestration/task-body-validator.js +391 -0
- package/.agents/scripts/lib/orchestration/ticket-lease.js +358 -0
- package/.agents/scripts/lib/orchestration/ticket-validator-conflicts.js +783 -0
- package/.agents/scripts/lib/orchestration/ticket-validator-sizing.js +367 -0
- package/.agents/scripts/lib/orchestration/ticket-validator.js +691 -0
- package/.agents/scripts/lib/orchestration/ticketing/bulk.js +723 -0
- package/.agents/scripts/lib/orchestration/ticketing/reads.js +474 -0
- package/.agents/scripts/lib/orchestration/ticketing/state.js +559 -0
- package/.agents/scripts/lib/orchestration/ticketing.js +55 -0
- package/.agents/scripts/lib/orchestration/wave-marker.js +28 -0
- package/.agents/scripts/lib/orchestration/wave-record-io.js +277 -0
- package/.agents/scripts/lib/orchestration/wave-record-notifications.js +189 -0
- package/.agents/scripts/lib/orchestration/wave-record-projection.js +423 -0
- package/.agents/scripts/lib/path-security.js +25 -0
- package/.agents/scripts/lib/plan-phase-cleanup.js +125 -0
- package/.agents/scripts/lib/preflight-runner.js +196 -0
- package/.agents/scripts/lib/presentation/dispatch-manifest-render.js +95 -0
- package/.agents/scripts/lib/presentation/manifest-builder.js +245 -0
- package/.agents/scripts/lib/presentation/manifest-formatter.js +243 -0
- package/.agents/scripts/lib/presentation/manifest-helpers.js +213 -0
- package/.agents/scripts/lib/presentation/manifest-persistence.js +262 -0
- package/.agents/scripts/lib/presentation/manifest-procedures.js +55 -0
- package/.agents/scripts/lib/presentation/manifest-render-waves.js +252 -0
- package/.agents/scripts/lib/presentation/manifest-renderer.js +188 -0
- package/.agents/scripts/lib/presentation/manifest-story-views.js +119 -0
- package/.agents/scripts/lib/provider-factory.js +80 -0
- package/.agents/scripts/lib/push-epic-retry.js +209 -0
- package/.agents/scripts/lib/qa/console-allowlist.js +151 -0
- package/.agents/scripts/lib/qa/coverage-report.js +181 -0
- package/.agents/scripts/lib/qa/coverage-verdict.js +296 -0
- package/.agents/scripts/lib/qa/propose-missing-test.js +95 -0
- package/.agents/scripts/lib/qa/qa-context-hydrator.js +296 -0
- package/.agents/scripts/lib/qa/qa-session.js +197 -0
- package/.agents/scripts/lib/qa/redact-evidence.js +245 -0
- package/.agents/scripts/lib/qa/resolve-qa-contract.js +190 -0
- package/.agents/scripts/lib/qa/resolve-selection.js +373 -0
- package/.agents/scripts/lib/runtime-deps/ensure-installed.js +100 -0
- package/.agents/scripts/lib/runtime-deps/manifest.js +96 -0
- package/.agents/scripts/lib/runtime-deps/preflight.js +78 -0
- package/.agents/scripts/lib/runtime-deps/scan-imports.js +202 -0
- package/.agents/scripts/lib/signals/detectors/common.js +36 -0
- package/.agents/scripts/lib/signals/detectors/hotspot.js +298 -0
- package/.agents/scripts/lib/signals/detectors/index.js +14 -0
- package/.agents/scripts/lib/signals/detectors/retry.js +289 -0
- package/.agents/scripts/lib/signals/detectors/rework.js +204 -0
- package/.agents/scripts/lib/signals/index.js +39 -0
- package/.agents/scripts/lib/signals/read.js +268 -0
- package/.agents/scripts/lib/signals/schema.js +225 -0
- package/.agents/scripts/lib/signals/span-tree.js +290 -0
- package/.agents/scripts/lib/signals/write.js +19 -0
- package/.agents/scripts/lib/single-story/confirm-merge.js +201 -0
- package/.agents/scripts/lib/single-story/story-merged-notify.js +126 -0
- package/.agents/scripts/lib/single-story-sweep/protection.js +274 -0
- package/.agents/scripts/lib/single-story-sweep/sweep-lock.js +169 -0
- package/.agents/scripts/lib/single-story-sweep.js +329 -0
- package/.agents/scripts/lib/skills/parse-skill.js +202 -0
- package/.agents/scripts/lib/skills/walk-skill-files.js +56 -0
- package/.agents/scripts/lib/spec/index.js +36 -0
- package/.agents/scripts/lib/spec/loader.js +425 -0
- package/.agents/scripts/lib/spec/state.js +217 -0
- package/.agents/scripts/lib/story-body/story-body.js +743 -0
- package/.agents/scripts/lib/story-init/blocker-validator.js +68 -0
- package/.agents/scripts/lib/story-init/branch-initializer.js +422 -0
- package/.agents/scripts/lib/story-init/context-resolver.js +92 -0
- package/.agents/scripts/lib/story-init/donor-precheck.js +207 -0
- package/.agents/scripts/lib/story-init/hierarchy-tracer.js +36 -0
- package/.agents/scripts/lib/story-init/state-transitioner.js +80 -0
- package/.agents/scripts/lib/story-init/task-graph-builder.js +114 -0
- package/.agents/scripts/lib/story-init/transition-summary.js +34 -0
- package/.agents/scripts/lib/story-lifecycle.js +186 -0
- package/.agents/scripts/lib/story-plan.js +246 -0
- package/.agents/scripts/lib/task-utils.js +26 -0
- package/.agents/scripts/lib/templates/decomposer-prompts.js +168 -0
- package/.agents/scripts/lib/test-env.js +30 -0
- package/.agents/scripts/lib/test-isolate/env-snapshot-loader.js +52 -0
- package/.agents/scripts/lib/test-isolate/list-files.js +90 -0
- package/.agents/scripts/lib/test-isolate/parse-tap.js +75 -0
- package/.agents/scripts/lib/test-isolate/runner.js +483 -0
- package/.agents/scripts/lib/test-profile/parse-tap.js +136 -0
- package/.agents/scripts/lib/test-profile/render-report.js +45 -0
- package/.agents/scripts/lib/test-reserved-epic-temp-ids.js +35 -0
- package/.agents/scripts/lib/test-tiers.js +94 -0
- package/.agents/scripts/lib/util/concurrent-map.js +59 -0
- package/.agents/scripts/lib/util/phase-timer-state.js +72 -0
- package/.agents/scripts/lib/util/phase-timer.js +163 -0
- package/.agents/scripts/lib/util/poll-loop.js +86 -0
- package/.agents/scripts/lib/util/with-timeout.js +32 -0
- package/.agents/scripts/lib/validation-evidence.js +323 -0
- package/.agents/scripts/lib/wave-runner/tick.js +665 -0
- package/.agents/scripts/lib/wave-runner/wave-checkpoint.js +91 -0
- package/.agents/scripts/lib/wave-runner/wave-runner-error.js +19 -0
- package/.agents/scripts/lib/workers/crap-worker.js +197 -0
- package/.agents/scripts/lib/workers/maintainability-report-worker.js +137 -0
- package/.agents/scripts/lib/workers/maintainability-worker.js +79 -0
- package/.agents/scripts/lib/workspace-provisioner.js +189 -0
- package/.agents/scripts/lib/worktree/bootstrapper.js +48 -0
- package/.agents/scripts/lib/worktree/inspector.js +140 -0
- package/.agents/scripts/lib/worktree/lifecycle/creation.js +118 -0
- package/.agents/scripts/lib/worktree/lifecycle/drift-detection.js +62 -0
- package/.agents/scripts/lib/worktree/lifecycle/force-drain.js +276 -0
- package/.agents/scripts/lib/worktree/lifecycle/gc.js +49 -0
- package/.agents/scripts/lib/worktree/lifecycle/merge-reachability.js +178 -0
- package/.agents/scripts/lib/worktree/lifecycle/pending-cleanup.js +264 -0
- package/.agents/scripts/lib/worktree/lifecycle/precheck.js +100 -0
- package/.agents/scripts/lib/worktree/lifecycle/reap.js +588 -0
- package/.agents/scripts/lib/worktree/lifecycle/registry-sync.js +124 -0
- package/.agents/scripts/lib/worktree/lifecycle/shared.js +26 -0
- package/.agents/scripts/lib/worktree/lifecycle-manager.js +40 -0
- package/.agents/scripts/lib/worktree/node-modules-strategy.js +349 -0
- package/.agents/scripts/lib/worktree-manager.js +243 -0
- package/.agents/scripts/lifecycle-diff.js +206 -0
- package/.agents/scripts/lifecycle-emit-story-dispatch.js +194 -0
- package/.agents/scripts/lifecycle-emit.js +479 -0
- package/.agents/scripts/lint-baseline.js +507 -0
- package/.agents/scripts/lint-label-vocabulary.js +237 -0
- package/.agents/scripts/loc-delta.js +205 -0
- package/.agents/scripts/notify.js +307 -0
- package/.agents/scripts/package.json +3 -0
- package/.agents/scripts/post-structured-comment.js +127 -0
- package/.agents/scripts/pr-watch-with-update.js +152 -0
- package/.agents/scripts/providers/github/auth.js +65 -0
- package/.agents/scripts/providers/github/board-add.js +63 -0
- package/.agents/scripts/providers/github/branch-protection.js +186 -0
- package/.agents/scripts/providers/github/cache.js +72 -0
- package/.agents/scripts/providers/github/comments.js +131 -0
- package/.agents/scripts/providers/github/compose.js +111 -0
- package/.agents/scripts/providers/github/errors.js +242 -0
- package/.agents/scripts/providers/github/issues.js +242 -0
- package/.agents/scripts/providers/github/labels.js +179 -0
- package/.agents/scripts/providers/github/mappers.js +126 -0
- package/.agents/scripts/providers/github/merge-methods.js +82 -0
- package/.agents/scripts/providers/github/project-board.js +47 -0
- package/.agents/scripts/providers/github/projects-v2-graphql.js +472 -0
- package/.agents/scripts/providers/github/prs.js +103 -0
- package/.agents/scripts/providers/github/request-helpers.js +110 -0
- package/.agents/scripts/providers/github/sub-issues.js +369 -0
- package/.agents/scripts/providers/github/tickets.js +381 -0
- package/.agents/scripts/providers/github/transient-retry.js +62 -0
- package/.agents/scripts/providers/github.js +157 -0
- package/.agents/scripts/quality-preview.js +327 -0
- package/.agents/scripts/quality-watch.js +223 -0
- package/.agents/scripts/render-manifest.js +143 -0
- package/.agents/scripts/resync-status-column.js +176 -0
- package/.agents/scripts/retro-run.js +167 -0
- package/.agents/scripts/run-audit-suite.js +97 -0
- package/.agents/scripts/run-coverage.js +103 -0
- package/.agents/scripts/run-lint.js +94 -0
- package/.agents/scripts/run-test-profile.js +126 -0
- package/.agents/scripts/run-tests.js +185 -0
- package/.agents/scripts/run-verify.js +56 -0
- package/.agents/scripts/select-audits.js +155 -0
- package/.agents/scripts/signals-view.js +294 -0
- package/.agents/scripts/single-story-close.js +83 -0
- package/.agents/scripts/single-story-confirm-merge.js +183 -0
- package/.agents/scripts/single-story-init.js +692 -0
- package/.agents/scripts/stories-wave-tick.js +415 -0
- package/.agents/scripts/story-close.js +246 -0
- package/.agents/scripts/story-deliver-prepare.js +267 -0
- package/.agents/scripts/story-init.js +516 -0
- package/.agents/scripts/story-phase.js +327 -0
- package/.agents/scripts/story-plan.js +284 -0
- package/.agents/scripts/sync-agentrc.js +71 -0
- package/.agents/scripts/sync-branch-from-base.js +138 -0
- package/.agents/scripts/sync-claude-commands.js +151 -0
- package/.agents/scripts/test-isolate.js +222 -0
- package/.agents/scripts/test-wrapper.js +108 -0
- package/.agents/scripts/update-coverage-baseline.js +129 -0
- package/.agents/scripts/update-crap-baseline.js +177 -0
- package/.agents/scripts/update-duplication-baseline.js +134 -0
- package/.agents/scripts/update-maintainability-baseline.js +183 -0
- package/.agents/scripts/update-mutation-baseline.js +189 -0
- package/.agents/scripts/update-ticket-state.js +107 -0
- package/.agents/scripts/validate-docs-freshness.js +259 -0
- package/.agents/scripts/validate-skills.js +278 -0
- package/.agents/scripts/wave-tick.js +335 -0
- package/.agents/skills/core/analyze-execution/SKILL.md +98 -0
- package/.agents/skills/core/api-and-interface-design/SKILL.md +327 -0
- package/.agents/skills/core/baseline-refresh/SKILL.md +181 -0
- package/.agents/skills/core/browser-testing-with-devtools/SKILL.md +352 -0
- package/.agents/skills/core/ci-cd-and-automation/SKILL.md +274 -0
- package/.agents/skills/core/ci-cd-and-automation/examples.md +211 -0
- package/.agents/skills/core/code-review-and-quality/SKILL.md +421 -0
- package/.agents/skills/core/code-simplification/SKILL.md +389 -0
- package/.agents/skills/core/context-engineering/SKILL.md +309 -0
- package/.agents/skills/core/context-engineering/examples.md +58 -0
- package/.agents/skills/core/debugging-and-error-recovery/SKILL.md +338 -0
- package/.agents/skills/core/deprecation-and-migration/SKILL.md +250 -0
- package/.agents/skills/core/diagnose-friction/SKILL.md +79 -0
- package/.agents/skills/core/documentation-and-adrs/SKILL.md +323 -0
- package/.agents/skills/core/epic-plan-consolidate/SKILL.md +145 -0
- package/.agents/skills/core/epic-plan-decompose-author/SKILL.md +425 -0
- package/.agents/skills/core/epic-plan-spec-author/SKILL.md +393 -0
- package/.agents/skills/core/frontend-ui-engineering/SKILL.md +357 -0
- package/.agents/skills/core/git-workflow-and-versioning/SKILL.md +352 -0
- package/.agents/skills/core/hydrate-context/SKILL.md +118 -0
- package/.agents/skills/core/idea-refinement/SKILL.md +317 -0
- package/.agents/skills/core/idea-refinement/examples.md +437 -0
- package/.agents/skills/core/idea-refinement/frameworks.md +135 -0
- package/.agents/skills/core/idea-refinement/refinement-criteria.md +155 -0
- package/.agents/skills/core/idea-refinement/scripts/idea-refine.sh +15 -0
- package/.agents/skills/core/incremental-implementation/SKILL.md +271 -0
- package/.agents/skills/core/introducing-a-baseline-gate/SKILL.md +213 -0
- package/.agents/skills/core/knowledge-transfer/SKILL.md +175 -0
- package/.agents/skills/core/mutation-survivor-remediation/SKILL.md +117 -0
- package/.agents/skills/core/performance-optimization/SKILL.md +314 -0
- package/.agents/skills/core/planning-and-task-breakdown/SKILL.md +277 -0
- package/.agents/skills/core/property-based-testing/SKILL.md +148 -0
- package/.agents/skills/core/qa-coverage-mapping/SKILL.md +105 -0
- package/.agents/skills/core/refactoring-discipline/SKILL.md +111 -0
- package/.agents/skills/core/scope-triage/SKILL.md +127 -0
- package/.agents/skills/core/security-and-hardening/SKILL.md +400 -0
- package/.agents/skills/core/shipping-and-launch/SKILL.md +328 -0
- package/.agents/skills/core/spec-driven-development/SKILL.md +252 -0
- package/.agents/skills/core/test-driven-development/SKILL.md +475 -0
- package/.agents/skills/core/using-agent-skills/SKILL.md +232 -0
- package/.agents/skills/skills.index.json +596 -0
- package/.agents/skills/stack/architecture/monorepo-path-strategist/SKILL.md +31 -0
- package/.agents/skills/stack/architecture/structured-output-zod/SKILL.md +51 -0
- package/.agents/skills/stack/architecture/subagent-orchestration/SKILL.md +48 -0
- package/.agents/skills/stack/backend/cloudflare-hono-architect/SKILL.md +31 -0
- package/.agents/skills/stack/backend/cloudflare-hono-architect/examples/route-template.ts +33 -0
- package/.agents/skills/stack/backend/cloudflare-queue-manager/SKILL.md +31 -0
- package/.agents/skills/stack/backend/cloudflare-workers/SKILL.md +51 -0
- package/.agents/skills/stack/backend/highlevel-crm/SKILL.md +54 -0
- package/.agents/skills/stack/backend/sqlite-drizzle-expert/SKILL.md +29 -0
- package/.agents/skills/stack/backend/sqlite-drizzle-expert/examples/schema-template.ts +30 -0
- package/.agents/skills/stack/backend/stripe-integration/SKILL.md +57 -0
- package/.agents/skills/stack/backend/stripe-integration/scripts/listen-stripe.sh +9 -0
- package/.agents/skills/stack/backend/turso-sqlite/SKILL.md +48 -0
- package/.agents/skills/stack/frontend/astro/SKILL.md +62 -0
- package/.agents/skills/stack/frontend/astro-react-island-strategist/SKILL.md +30 -0
- package/.agents/skills/stack/frontend/expo-react-native-developer/SKILL.md +29 -0
- package/.agents/skills/stack/frontend/google-analytics-v4/SKILL.md +50 -0
- package/.agents/skills/stack/frontend/tailwind-v4/SKILL.md +58 -0
- package/.agents/skills/stack/frontend/ui-accessibility-engineer/SKILL.md +34 -0
- package/.agents/skills/stack/qa/audit-accessibility/SKILL.md +51 -0
- package/.agents/skills/stack/qa/gherkin-authoring/SKILL.md +257 -0
- package/.agents/skills/stack/qa/gherkin-authoring/examples/invoice-issue.feature +41 -0
- package/.agents/skills/stack/qa/lighthouse-baseline/SKILL.md +199 -0
- package/.agents/skills/stack/qa/playwright/SKILL.md +50 -0
- package/.agents/skills/stack/qa/playwright-bdd/SKILL.md +188 -0
- package/.agents/skills/stack/qa/qa-explore-driving/SKILL.md +142 -0
- package/.agents/skills/stack/qa/qa-harness/SKILL.md +220 -0
- package/.agents/skills/stack/qa/vitest/SKILL.md +51 -0
- package/.agents/skills/stack/security/backend-security-patterns/SKILL.md +68 -0
- package/.agents/starter-agentrc.json +22 -0
- package/.agents/templates/agent-protocol.md +72 -0
- package/.agents/templates/docs/architecture.md +30 -0
- package/.agents/templates/docs/decisions.md +24 -0
- package/.agents/templates/epic-from-idea.md +21 -0
- package/.agents/templates/single-story-body.md +17 -0
- package/.agents/workflows/agents-update.md +415 -0
- package/.agents/workflows/audit-architecture.md +312 -0
- package/.agents/workflows/audit-clean-code.md +179 -0
- package/.agents/workflows/audit-dependencies.md +91 -0
- package/.agents/workflows/audit-devops.md +110 -0
- package/.agents/workflows/audit-lighthouse.md +260 -0
- package/.agents/workflows/audit-performance.md +161 -0
- package/.agents/workflows/audit-privacy.md +104 -0
- package/.agents/workflows/audit-quality.md +191 -0
- package/.agents/workflows/audit-security.md +156 -0
- package/.agents/workflows/audit-seo.md +118 -0
- package/.agents/workflows/audit-sre.md +139 -0
- package/.agents/workflows/audit-to-stories.md +257 -0
- package/.agents/workflows/audit-ux-ui.md +102 -0
- package/.agents/workflows/epic-deliver.md +864 -0
- package/.agents/workflows/epic-plan.md +998 -0
- package/.agents/workflows/explain.md +118 -0
- package/.agents/workflows/git-cleanup.md +250 -0
- package/.agents/workflows/git-commit-all.md +15 -0
- package/.agents/workflows/git-merge-pr.md +377 -0
- package/.agents/workflows/git-pr-all.md +278 -0
- package/.agents/workflows/git-push.md +60 -0
- package/.agents/workflows/helpers/_merge-conflict-template.md +54 -0
- package/.agents/workflows/helpers/acceptance-self-eval.md +74 -0
- package/.agents/workflows/helpers/agents-sync-config.md +129 -0
- package/.agents/workflows/helpers/code-quality-guardrails.md +101 -0
- package/.agents/workflows/helpers/code-review.md +370 -0
- package/.agents/workflows/helpers/diagnose.md +117 -0
- package/.agents/workflows/helpers/epic-audit.md +295 -0
- package/.agents/workflows/helpers/epic-deliver-story.md +370 -0
- package/.agents/workflows/helpers/epic-plan-decompose.md +199 -0
- package/.agents/workflows/helpers/epic-plan-spec.md +184 -0
- package/.agents/workflows/helpers/epic-testing.md +125 -0
- package/.agents/workflows/helpers/parallel-tooling.md +88 -0
- package/.agents/workflows/helpers/signals.md +112 -0
- package/.agents/workflows/helpers/single-story-deliver.md +636 -0
- package/.agents/workflows/helpers/worktree-lifecycle.md +317 -0
- package/.agents/workflows/onboard.md +207 -0
- package/.agents/workflows/qa-assist.md +293 -0
- package/.agents/workflows/qa-explore.md +350 -0
- package/.agents/workflows/qa-run-harness.md +288 -0
- package/.agents/workflows/story-deliver.md +327 -0
- package/.agents/workflows/story-plan.md +233 -0
- package/LICENSE +21 -0
- package/README.md +193 -0
- package/bin/mandrel.js +56 -0
- package/bin/postinstall.js +195 -0
- package/lib/cli/__tests__/migrate.test.js +268 -0
- package/lib/cli/__tests__/sync-local-zone.test.js +247 -0
- package/lib/cli/__tests__/sync.test.js +372 -0
- package/lib/cli/__tests__/update-major.test.js +217 -0
- package/lib/cli/__tests__/update.test.js +696 -0
- package/lib/cli/__tests__/version-check.test.js +398 -0
- package/lib/cli/doctor.js +124 -0
- package/lib/cli/explain.js +107 -0
- package/lib/cli/migrate.js +260 -0
- package/lib/cli/registry.js +830 -0
- package/lib/cli/sync-commands.js +50 -0
- package/lib/cli/sync.js +200 -0
- package/lib/cli/uninstall.js +795 -0
- package/lib/cli/update.js +854 -0
- package/lib/cli/version-check.js +206 -0
- package/lib/migrations/README.md +69 -0
- package/lib/migrations/__tests__/index.test.js +216 -0
- package/lib/migrations/index.js +164 -0
- package/package.json +105 -0
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
# CHANGELOG Style Contract
|
|
2
|
+
|
|
3
|
+
This rule governs the shape of per-release entries in the project CHANGELOG
|
|
4
|
+
(typically `docs/CHANGELOG.md` or `CHANGELOG.md`). It applies whenever a
|
|
5
|
+
release entry is authored or edited — most commonly inside Story #N's
|
|
6
|
+
docs sweep before `/epic-deliver` opens the release PR.
|
|
7
|
+
|
|
8
|
+
The contract is **guidance-tier** in v1: no automated gate fails a close when
|
|
9
|
+
an entry drifts off-template. It still binds every author.
|
|
10
|
+
|
|
11
|
+
## Goal
|
|
12
|
+
|
|
13
|
+
A reader scanning release notes should identify what ships in a release in
|
|
14
|
+
under 30 seconds. Breaking changes, config-shape changes, and CLI renames
|
|
15
|
+
must be impossible to miss. Internal refactor detail belongs in commit
|
|
16
|
+
messages and PR descriptions — not here.
|
|
17
|
+
|
|
18
|
+
## Per-Release Entry Shape
|
|
19
|
+
|
|
20
|
+
Every entry starts with a version header line already produced by the
|
|
21
|
+
release tooling:
|
|
22
|
+
|
|
23
|
+
```markdown
|
|
24
|
+
## [X.Y.Z] - YYYY-MM-DD
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
Immediately below, the entry MUST have:
|
|
28
|
+
|
|
29
|
+
1. **A short section header** naming the theme of the release — one line,
|
|
30
|
+
Sentence case, no trailing punctuation.
|
|
31
|
+
|
|
32
|
+
```markdown
|
|
33
|
+
### Epic-runner throughput & caching pass
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
2. **A 1–3 sentence theme paragraph** that tells the reader, in plain
|
|
37
|
+
English, what the release is about and why it matters. No bullets, no
|
|
38
|
+
sub-headers, no code fences.
|
|
39
|
+
|
|
40
|
+
3. **Bullets of user-visible changes**, grouped by natural topic if the
|
|
41
|
+
release spans more than one theme. Each bullet leads with a bold phrase
|
|
42
|
+
naming the change, followed by a one- or two-sentence explanation.
|
|
43
|
+
|
|
44
|
+
```markdown
|
|
45
|
+
## [5.21.0] - 2026-04-24
|
|
46
|
+
|
|
47
|
+
### Epic-runner throughput & caching pass
|
|
48
|
+
|
|
49
|
+
Performance and observability pass across the epic-runner hot paths — wave
|
|
50
|
+
gating, commit assertion, progress reporting, and label polling. Caching
|
|
51
|
+
and bounded concurrency throughout; new per-phase timing surface.
|
|
52
|
+
|
|
53
|
+
- **Bounded-concurrency parallelism.** Wave gating, commit assertion, and
|
|
54
|
+
progress reporting now fan out in parallel with a configurable cap.
|
|
55
|
+
- **Per-phase timing surface.** Story close posts a structured comment
|
|
56
|
+
with per-phase timings; the Epic progress comment aggregates median
|
|
57
|
+
and p95 across closed stories.
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
## Bullets: What Counts as "User-Visible"
|
|
61
|
+
|
|
62
|
+
Include:
|
|
63
|
+
|
|
64
|
+
- New CLI commands, flags, or scripts the operator invokes.
|
|
65
|
+
- New or renamed labels, ticket shapes, or workflow phases the operator
|
|
66
|
+
touches.
|
|
67
|
+
- New or renamed configuration keys, with the old → new mapping if any.
|
|
68
|
+
- New behavioural guarantees (e.g., "retries on transient errors").
|
|
69
|
+
- Bug fixes the operator would otherwise trip over.
|
|
70
|
+
- Performance changes with a user-observable magnitude.
|
|
71
|
+
|
|
72
|
+
Exclude:
|
|
73
|
+
|
|
74
|
+
- Internal refactors with no behavioural delta.
|
|
75
|
+
- Test additions, coverage bumps, lint cleanups.
|
|
76
|
+
- Module renames or file moves invisible to operators.
|
|
77
|
+
- Per-phase implementation details ("now uses a BFS walker").
|
|
78
|
+
|
|
79
|
+
## Banned Content
|
|
80
|
+
|
|
81
|
+
The following MUST NOT appear in a release entry:
|
|
82
|
+
|
|
83
|
+
- **Per-ticket citations.** No `(Epic #553)`, `(resolves #612)`,
|
|
84
|
+
`(Story #645)` in bullet text. The theme paragraph may reference the
|
|
85
|
+
Epic once when the release is scoped to one Epic — that is the only
|
|
86
|
+
allowed citation, and only there.
|
|
87
|
+
- **Internal file paths** (`lib/orchestration/epic-runner/commit-assertion.js`,
|
|
88
|
+
`.agents/scripts/story-init.js`). Callers care what changed, not
|
|
89
|
+
where it lives.
|
|
90
|
+
- **Internal function, class, or method names** (`finalizeMerge`,
|
|
91
|
+
`WorkspaceProvisioner.verify`, `cascadeCompletion`). Name the behaviour,
|
|
92
|
+
not the symbol — unless the symbol is part of the public API.
|
|
93
|
+
- **Test counts** (`47 new tests`, `95% coverage`). Tests are a means, not
|
|
94
|
+
a ship artefact.
|
|
95
|
+
- **Module-sizing stats** (`shrinks epic-runner from 840 to 420 LOC`).
|
|
96
|
+
- **Implementation mechanics** (`BFS walker`, `Promise.all over parents`,
|
|
97
|
+
`exponential backoff with 3 attempts, 500ms base`) unless the mechanism
|
|
98
|
+
is part of a new public contract.
|
|
99
|
+
|
|
100
|
+
## Mandatory Prominence
|
|
101
|
+
|
|
102
|
+
The following categories MUST be called out visibly — typically in **bold**
|
|
103
|
+
at the start of a bullet, or in a short dedicated section above the
|
|
104
|
+
bullet list:
|
|
105
|
+
|
|
106
|
+
- **Breaking changes.** A bullet leading with `**Breaking:**` or a
|
|
107
|
+
`### Breaking Changes` sub-section. Include the migration path.
|
|
108
|
+
- **Config-shape changes.** Moved, removed, renamed, or newly-required
|
|
109
|
+
config keys. Old key → new key, or removal notice with remediation.
|
|
110
|
+
- **CLI renames.** Old command → new command, including whether the old
|
|
111
|
+
name remains as a deprecation alias and for how long.
|
|
112
|
+
- **Schema shape changes** on structured comments, manifest files, or
|
|
113
|
+
public API payloads. Readers parsing these surfaces must be told.
|
|
114
|
+
|
|
115
|
+
If a release ships any of the above, they belong at the top of the bullet
|
|
116
|
+
list (or in a dedicated sub-section), not buried mid-list.
|
|
117
|
+
|
|
118
|
+
## Line-Count Guidance
|
|
119
|
+
|
|
120
|
+
Soft ceilings, not hard fails:
|
|
121
|
+
|
|
122
|
+
- **Non-major release** (patch or minor): **≤60 lines**, including
|
|
123
|
+
header, theme paragraph, blank lines, and bullets.
|
|
124
|
+
- **Major release**: **≤150 lines**. Major releases span larger surface
|
|
125
|
+
and warrant more prominence.
|
|
126
|
+
|
|
127
|
+
If an entry exceeds the ceiling, prefer splitting a genuinely multi-theme
|
|
128
|
+
release into grouped sub-sections over padding the bullet list. Before
|
|
129
|
+
accepting a long entry, ask: which bullets are user-visible, and which
|
|
130
|
+
are internal detail that migrated in from the Epic body?
|
|
131
|
+
|
|
132
|
+
## Worked Example — Before/After
|
|
133
|
+
|
|
134
|
+
The "before" reflects the style that drove the Epic #553 retro action item:
|
|
135
|
+
multi-section entries where each bullet leaked internal function names,
|
|
136
|
+
file paths, and implementation mechanics. The "after" applies the contract
|
|
137
|
+
above.
|
|
138
|
+
|
|
139
|
+
### Before (off-contract, ~48 lines)
|
|
140
|
+
|
|
141
|
+
```markdown
|
|
142
|
+
## [5.8.7] - 2026-04-15
|
|
143
|
+
|
|
144
|
+
### Robust story→epic merge at story close
|
|
145
|
+
|
|
146
|
+
Parallel wave execution kept producing conflicts — Stories branched
|
|
147
|
+
early in a wave landed after peers had merged. `finalizeMerge` now:
|
|
148
|
+
|
|
149
|
+
1. **Pre-merge rebase in the story worktree** onto
|
|
150
|
+
`origin/<epicBranch>`, shrinking the conflict surface to the
|
|
151
|
+
Story's real delta. Failed rebase is aborted and merge still
|
|
152
|
+
proceeds.
|
|
153
|
+
2. **Conflict triage via `mergeFeatureBranch`** — same threshold-based
|
|
154
|
+
triage used at integration time (major ≥3 files or ≥20 markers =
|
|
155
|
+
abort; minor = auto-resolve by accepting Story's version with audit
|
|
156
|
+
log).
|
|
157
|
+
|
|
158
|
+
### Per-worktree node_modules collapsed into shared store
|
|
159
|
+
|
|
160
|
+
Per-worktree `npm install` duplicated dependencies across every story
|
|
161
|
+
tree and blew out disk on parallel waves. `ensure()` now links each
|
|
162
|
+
worktree's `node_modules` to a primed donor tree (junction on Windows)
|
|
163
|
+
and `reap()` removes the link before `git worktree remove`.
|
|
164
|
+
Auto-detected: if the configured strategy is `symlink`, the link
|
|
165
|
+
applies.
|
|
166
|
+
|
|
167
|
+
### Deliver tail auto-invokes pre-merge gates
|
|
168
|
+
|
|
169
|
+
`/epic-deliver` auto-invokes the code-review module (Phase 4) and
|
|
170
|
+
the retro runner (Phase 5) inline instead of halting to ask the
|
|
171
|
+
operator to run them separately. `--skip-code-review` available as
|
|
172
|
+
an override.
|
|
173
|
+
|
|
174
|
+
### Epic Health ticket closed alongside PRD/Tech Spec
|
|
175
|
+
|
|
176
|
+
Step 8's closure sweep now matches any ticket carrying `type::health`
|
|
177
|
+
or a title starting with `📉 Epic Health:`, in addition to
|
|
178
|
+
`context::prd` / `context::tech-spec`.
|
|
179
|
+
|
|
180
|
+
### Stale-lock sweep for shared `.git/` dir
|
|
181
|
+
|
|
182
|
+
`WorktreeManager.sweepStaleLocks({ maxAgeMs = 30_000 })` removes
|
|
183
|
+
well-known lock files (`index.lock`, `HEAD.lock`, `packed-refs.lock`,
|
|
184
|
+
`config.lock`, `shallow.lock`) whose mtime exceeds the threshold.
|
|
185
|
+
Fresh locks belonging to in-flight ops are skipped. Runs at
|
|
186
|
+
`/epic-deliver` start, before worktree GC.
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
Contract violations: five separate `###` sub-sections where one theme
|
|
190
|
+
would do; internal function names (`finalizeMerge`, `mergeFeatureBranch`,
|
|
191
|
+
`ensure()`, `reap()`, `WorktreeManager.sweepStaleLocks`); implementation
|
|
192
|
+
mechanics (`BFS walker` equivalent, exact argument shapes, internal step
|
|
193
|
+
numbering like "Step 1.4", "Step 8"); lock-file name list leaks
|
|
194
|
+
implementation detail that operators cannot act on.
|
|
195
|
+
|
|
196
|
+
### After (on-contract, ~18 lines)
|
|
197
|
+
|
|
198
|
+
```markdown
|
|
199
|
+
## [5.8.7] - 2026-04-15
|
|
200
|
+
|
|
201
|
+
### Parallel-wave merge robustness
|
|
202
|
+
|
|
203
|
+
Parallel story waves kept tripping over each other at integration time.
|
|
204
|
+
This release reduces the conflict surface at story close and stabilises
|
|
205
|
+
worktree cleanup.
|
|
206
|
+
|
|
207
|
+
- **Pre-merge rebase at story close** shrinks the conflict window to
|
|
208
|
+
each story's real delta; conflicts above the triage threshold abort
|
|
209
|
+
and surface to the operator.
|
|
210
|
+
- **Shared-store worktrees.** Per-story worktrees link a shared
|
|
211
|
+
`node_modules` store, so parallel waves no longer duplicate installs
|
|
212
|
+
or leave residue that blocks reap.
|
|
213
|
+
- **`/epic-deliver` auto-invokes pre-merge gates** (code review, retro)
|
|
214
|
+
inline. `--skip-code-review` is available as an override.
|
|
215
|
+
- **Closure sweep covers Epic Health tickets** in addition to PRD and
|
|
216
|
+
Tech Spec tickets.
|
|
217
|
+
- **Stale-lock sweep** on the shared `.git/` directory runs at
|
|
218
|
+
`/epic-deliver` start, clearing lock files left behind by interrupted
|
|
219
|
+
operations.
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
What changed: one theme section instead of five; the paragraph gives the
|
|
223
|
+
"why" in two sentences; each bullet leads with the user-visible behaviour
|
|
224
|
+
and drops internal symbols, file paths, and step numbers; the override
|
|
225
|
+
flag (`--skip-code-review`) is kept because it is part of the public CLI
|
|
226
|
+
surface; the lock-file list is dropped because operators do not act on
|
|
227
|
+
individual lock names.
|
|
228
|
+
|
|
229
|
+
## When to Deviate
|
|
230
|
+
|
|
231
|
+
- **Major releases** may warrant multiple `###` sub-sections under a
|
|
232
|
+
single version header when the release genuinely spans multiple themes.
|
|
233
|
+
Keep each sub-section on-contract individually.
|
|
234
|
+
- **Security fixes** may include CVE-style detail and remediation steps
|
|
235
|
+
beyond normal bullet shape — those callouts are always on-contract.
|
|
236
|
+
- **When in doubt**, cut more aggressively. A reader can always follow
|
|
237
|
+
the Epic link for detail; they cannot un-read bullets that told them
|
|
238
|
+
nothing.
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
# Gherkin Authoring Standards
|
|
2
|
+
|
|
3
|
+
Rules for authoring `.feature` files so scenarios remain business-readable,
|
|
4
|
+
reusable across projects, and free of implementation leakage. Applies to every
|
|
5
|
+
Gherkin file (`*.feature`) in any project that consumes this framework. The
|
|
6
|
+
companion stack skill is
|
|
7
|
+
[`stack/qa/gherkin-authoring`](../skills/stack/qa/gherkin-authoring/SKILL.md);
|
|
8
|
+
test-layer responsibilities live in
|
|
9
|
+
[`testing-standards.md`](./testing-standards.md).
|
|
10
|
+
|
|
11
|
+
## Tag Taxonomy
|
|
12
|
+
|
|
13
|
+
Tags are the only supported mechanism for selecting, filtering, and routing
|
|
14
|
+
scenarios. Use the canonical set below; do not invent ad-hoc tags.
|
|
15
|
+
|
|
16
|
+
- `@smoke` — minimal critical-path scenarios that MUST pass on every PR.
|
|
17
|
+
- `@risk-high` — scenarios covering flows flagged `risk::high` on their
|
|
18
|
+
originating ticket. Run on every release candidate.
|
|
19
|
+
- `@platform-web` — scenarios that only make sense on the web client.
|
|
20
|
+
- `@platform-mobile` — scenarios that only make sense on the mobile client.
|
|
21
|
+
- `@domain-<slug>` — domain scope (e.g. `@domain-billing`, `@domain-auth`).
|
|
22
|
+
The slug is project-defined; one tag per scenario.
|
|
23
|
+
- `@flaky` — operational quarantine tag. Scenarios carrying this tag are
|
|
24
|
+
excluded from the gating suite and run in a dedicated non-blocking job
|
|
25
|
+
until stabilized. Treat `@flaky` as a debt marker, not a permanent label.
|
|
26
|
+
|
|
27
|
+
Rules:
|
|
28
|
+
|
|
29
|
+
- Every `Scenario` or `Scenario Outline` MUST carry exactly one `@domain-*`
|
|
30
|
+
tag.
|
|
31
|
+
- Platform tags are mutually exclusive. A scenario that applies to both
|
|
32
|
+
platforms carries neither.
|
|
33
|
+
- `@smoke` and `@risk-high` are orthogonal to domain/platform and may be
|
|
34
|
+
combined freely.
|
|
35
|
+
- Tag at the `Feature:` level when every scenario shares the tag; tag at the
|
|
36
|
+
scenario level otherwise. Do not duplicate feature-level tags onto
|
|
37
|
+
scenarios.
|
|
38
|
+
- Tags not in this taxonomy MUST be proposed in a PR that updates this rule
|
|
39
|
+
before use.
|
|
40
|
+
|
|
41
|
+
## Forbidden Patterns
|
|
42
|
+
|
|
43
|
+
`.feature` files describe business intent. The following MUST NOT appear in
|
|
44
|
+
any `Feature`, `Background`, `Scenario`, `Scenario Outline`, or `Examples`
|
|
45
|
+
block. They belong in step definitions or contract-layer tests instead.
|
|
46
|
+
|
|
47
|
+
- **Raw SQL or ORM calls.** `SELECT ... FROM ...`, `INSERT INTO ...`,
|
|
48
|
+
`prisma.user.findMany(...)`, Knex builders, etc. Database access is a step
|
|
49
|
+
definition concern.
|
|
50
|
+
- **HTTP status codes.** `200`, `401`, `expect status 404`. Status-code
|
|
51
|
+
assertions are contract-layer tests; scenarios assert user-visible
|
|
52
|
+
outcomes.
|
|
53
|
+
- **DOM selectors.** CSS selectors, XPath, `#id`, `.class`, `[data-testid=...]`,
|
|
54
|
+
element tag names. Selectors live inside step definitions.
|
|
55
|
+
- **Raw URLs or route paths.** `/api/v1/users/123`, `https://...`. Reference
|
|
56
|
+
the business resource (e.g. "the user's profile"), not the transport path.
|
|
57
|
+
- **JSON/request/response payloads.** Shape and field assertions belong in
|
|
58
|
+
contract-layer tests.
|
|
59
|
+
- **Framework or tooling names.** No `Playwright`, `Cucumber`, `Jest`,
|
|
60
|
+
`Prisma`, `React` in scenario text.
|
|
61
|
+
- **Timings or waits.** `wait 2 seconds`, `sleep`, `retry 3 times`. Use
|
|
62
|
+
business-level readiness ("until the invoice is issued"); step definitions
|
|
63
|
+
own timing.
|
|
64
|
+
|
|
65
|
+
## Scenario Outline Conventions
|
|
66
|
+
|
|
67
|
+
Use `Scenario Outline` only when the same behavior is exercised across a
|
|
68
|
+
bounded matrix (roles, permissions, plan tiers, locales). For divergent
|
|
69
|
+
behavior, write separate `Scenario` blocks.
|
|
70
|
+
|
|
71
|
+
- Placeholders use `<angle-bracket-names>` that match `Examples` column
|
|
72
|
+
headers exactly.
|
|
73
|
+
- Each `Examples` block MUST include a header row whose names are kebab-case
|
|
74
|
+
and self-describing (`<user-role>`, not `<x>`).
|
|
75
|
+
- For role/permission matrices, dedicate one column to the role and one
|
|
76
|
+
column per observable outcome. Do not encode multiple outcomes in a single
|
|
77
|
+
free-text column.
|
|
78
|
+
- Split `Examples` tables by tag when rows need different tags (e.g.
|
|
79
|
+
`@risk-high` for admin rows). Each `Examples` block may carry its own
|
|
80
|
+
tags.
|
|
81
|
+
- Keep `Examples` tables under ~12 rows. Larger matrices indicate the
|
|
82
|
+
scenario is really several scenarios and should be split.
|
|
83
|
+
|
|
84
|
+
Example skeleton:
|
|
85
|
+
|
|
86
|
+
```gherkin
|
|
87
|
+
@domain-billing
|
|
88
|
+
Scenario Outline: <user-role> access to invoice exports
|
|
89
|
+
Given a signed-in <user-role>
|
|
90
|
+
When they request an invoice export
|
|
91
|
+
Then the export is <export-outcome>
|
|
92
|
+
|
|
93
|
+
Examples:
|
|
94
|
+
| user-role | export-outcome |
|
|
95
|
+
| account-owner | delivered |
|
|
96
|
+
| billing-admin | delivered |
|
|
97
|
+
| viewer | denied |
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
## Selector & `data-testid` Discipline
|
|
101
|
+
|
|
102
|
+
Steps reference **business intent**; selectors are a step-definition
|
|
103
|
+
implementation detail.
|
|
104
|
+
|
|
105
|
+
- Scenario text names the user-visible concept: "the submit button", "the
|
|
106
|
+
invoices table", "the error banner".
|
|
107
|
+
- Step definitions resolve concepts to selectors. Prefer `data-testid`
|
|
108
|
+
attributes (e.g. `data-testid="submit-invoice"`); fall back to role-based
|
|
109
|
+
queries (`getByRole`) only when `data-testid` is unavailable.
|
|
110
|
+
- `data-testid` values MUST NOT appear in `.feature` files. If a step needs
|
|
111
|
+
to distinguish between two similar elements, encode the distinction in
|
|
112
|
+
business language ("the primary submit button"), then let the step
|
|
113
|
+
definition map that to the `data-testid`.
|
|
114
|
+
- When a new UI element needs a stable hook, add the `data-testid` in the
|
|
115
|
+
component and reference the business concept in the scenario in the same
|
|
116
|
+
PR.
|
|
117
|
+
|
|
118
|
+
## Step Reuse — Grep Before You Write
|
|
119
|
+
|
|
120
|
+
Before authoring a new step, search the existing step-definition library for
|
|
121
|
+
an equivalent phrase. New steps are a cost: they fragment the vocabulary and
|
|
122
|
+
multiply step-definition maintenance.
|
|
123
|
+
|
|
124
|
+
Workflow:
|
|
125
|
+
|
|
126
|
+
1. Identify the verb phrase you want to write (e.g. "the user signs in as").
|
|
127
|
+
2. Grep the step-definition directory for the verb stem:
|
|
128
|
+
|
|
129
|
+
```bash
|
|
130
|
+
rg -n "signs? in" tests/steps
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
3. If a matching step exists, reuse it verbatim — adjust your scenario
|
|
134
|
+
phrasing to fit the existing step, not the reverse.
|
|
135
|
+
4. If a near-match exists, extend the existing step (add a parameter, widen
|
|
136
|
+
the regex) rather than forking a new one. Update every call site in the
|
|
137
|
+
same PR.
|
|
138
|
+
5. Only when no reasonable match exists, add a new step definition.
|
|
139
|
+
Co-locate it with related steps and follow the library's naming
|
|
140
|
+
convention.
|
|
141
|
+
6. Never copy-paste a step implementation to support a paraphrased scenario.
|
|
142
|
+
Rephrase the scenario instead.
|
|
143
|
+
|
|
144
|
+
Deprecations: when a step is superseded, mark the old definition deprecated
|
|
145
|
+
in code and migrate all call sites in the same PR. Do not leave two
|
|
146
|
+
near-identical steps live.
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
# Git & Version Control Conventions
|
|
2
|
+
|
|
3
|
+
This rule applies globally to all repository changes to maintain a clean git
|
|
4
|
+
history.
|
|
5
|
+
|
|
6
|
+
## Canonical Branching (v5 Orchestration)
|
|
7
|
+
|
|
8
|
+
### Epic Base Branch
|
|
9
|
+
|
|
10
|
+
Each Epic operates on a dedicated **Epic base branch** named `epic/[EPIC_ID]`
|
|
11
|
+
(e.g., `epic/98`). This branch is created from the project's base branch
|
|
12
|
+
(`main` by default) and serves as the integration target for all Stories
|
|
13
|
+
within that Epic.
|
|
14
|
+
|
|
15
|
+
### Story-Level Branching
|
|
16
|
+
|
|
17
|
+
All tasks within a Story MUST be committed to a shared **Story branch**:
|
|
18
|
+
`story-<storyId>` (e.g., `story-104`). The runtime owns Story branch
|
|
19
|
+
creation via `story-init.js`; agents commit on the active Story branch only.
|
|
20
|
+
|
|
21
|
+
> **Commit subjects.** Under the 3-tier hierarchy
|
|
22
|
+
> (Epic → Feature → Story), Stories have no child tickets. Commits
|
|
23
|
+
> land on `story-<storyId>` directly from the agent and the
|
|
24
|
+
> Conventional Commit subject references the parent Story via
|
|
25
|
+
> `(refs #<storyId>)`. See
|
|
26
|
+
> [`.agents/instructions.md` § 5.D](../instructions.md) for the
|
|
27
|
+
> full hierarchy contract.
|
|
28
|
+
|
|
29
|
+
## Conventional Commits
|
|
30
|
+
|
|
31
|
+
- MUST adhere to Conventional Commits format:
|
|
32
|
+
`<type>(<optional scope>): <description>`
|
|
33
|
+
- Types allowed: `feat:`, `fix:`, `perf:`, `refactor:`, `revert:`, `docs:`,
|
|
34
|
+
`style:`, `chore:`, `test:`, `build:`, `ci:`. This list mirrors the
|
|
35
|
+
`changelog-sections` in `release-please-config.json`; keep the two in
|
|
36
|
+
sync when adding a type.
|
|
37
|
+
- Description must be in the imperative mood (e.g., "add feature", not
|
|
38
|
+
"adds" or "added").
|
|
39
|
+
- **Local enforcement**: the `commit-msg` Husky hook runs `commitlint`
|
|
40
|
+
against every local commit (`.husky/commit-msg` →
|
|
41
|
+
`commitlint --edit "$1"`, config in `commitlint.config.js`). A
|
|
42
|
+
non-conventional subject fails the hook and no commit is created. Do not
|
|
43
|
+
bypass with `--no-verify`. The hook does **not** run on squash-merge
|
|
44
|
+
titles edited in the GitHub UI; author the PR title in conventional form
|
|
45
|
+
so the squash commit on `main` parses cleanly for release-please.
|
|
46
|
+
|
|
47
|
+
## Contract Cutovers — No Shim Layer
|
|
48
|
+
|
|
49
|
+
Mandrel ships as the `mandrel` npm package, whose consumers pin an
|
|
50
|
+
exact lockfile version; they opt into breaks at upgrade time. Operator policy
|
|
51
|
+
for any contract change (config shape, baseline shape, schema, lifecycle
|
|
52
|
+
payload, ticket label, dispatch artifact, public API of a script) is
|
|
53
|
+
therefore:
|
|
54
|
+
|
|
55
|
+
1. **Hard cutovers only.** Contract changes ship as a single in-tree
|
|
56
|
+
migration of every producer and consumer. There is no parallel
|
|
57
|
+
old-shape support code, no read-side tolerance branch, and no
|
|
58
|
+
feature flag that toggles between the two shapes.
|
|
59
|
+
2. **The PR diff IS the migration.** A consumer upgrading to a release
|
|
60
|
+
with the change adopts the new shape by upgrading the
|
|
61
|
+
`mandrel` package (`mandrel update`). The PR that lands on
|
|
62
|
+
`main` already moved every internal call site; consumers move on the
|
|
63
|
+
same beat by upgrading.
|
|
64
|
+
3. **No deprecation ledger, no version-windowed sunsets.** The framework
|
|
65
|
+
does not track "to be removed in vX.Y" entries or run two shapes side
|
|
66
|
+
by side for a release window. If a shape changes, the old shape is
|
|
67
|
+
deleted in the same PR.
|
|
68
|
+
|
|
69
|
+
The codifying decision is **Epic #2646** (the "Hard-Cutover Cleanup Epic"),
|
|
70
|
+
which deleted the existing compatibility shim layer across
|
|
71
|
+
`config-resolver.js`, `lib/config/*.js`, `lib/baselines/`,
|
|
72
|
+
`wave-session.js`, `IExecutionAdapter` / `ManualDispatchAdapter`, lifecycle
|
|
73
|
+
emit shims, and duplicate progress/comment writers in one pass. The
|
|
74
|
+
per-finding closing references (audit Findings #10, #11, #13, #17) live in
|
|
75
|
+
the merged PRs and the Epic #2646 history; the standing forward-looking
|
|
76
|
+
audit lives at [`docs/roadmap.md`](../../docs/roadmap.md) (Part 1 — Model-Evolution Audit).
|
|
77
|
+
|
|
78
|
+
Practical guidance when authoring a contract change:
|
|
79
|
+
|
|
80
|
+
- If you are tempted to add a "legacy shape" branch in a parser or
|
|
81
|
+
resolver, **don't** — update every call site instead, and delete the
|
|
82
|
+
old shape in the same PR.
|
|
83
|
+
- If you cannot land every call site in a single PR (e.g. a
|
|
84
|
+
cross-repository change), the contract change is too large for one
|
|
85
|
+
hard cutover. Split the contract itself, not the rollout.
|
|
86
|
+
- Schema versions remain useful as **identifiers** (so a future consumer
|
|
87
|
+
can detect "I cannot read this artifact"); they are **not** an
|
|
88
|
+
invitation to keep multiple readers alive in the same release.
|
|
89
|
+
|
|
90
|
+
## Push Validation & Reliability
|
|
91
|
+
|
|
92
|
+
To prevent "silent" push failures (e.g., hidden by multi-command chains or
|
|
93
|
+
rejected by `pre-push` hooks):
|
|
94
|
+
|
|
95
|
+
1. **Local Validation**: Run the project's configured validation commands
|
|
96
|
+
(`agentSettings.commands.validate` and `agentSettings.commands.test` in
|
|
97
|
+
`.agentrc.json`, or the equivalent format-check command) locally
|
|
98
|
+
_before_ attempting a `git push`.
|
|
99
|
+
2. **Verify Push Output**: Do NOT assume a push succeeded unless the output
|
|
100
|
+
explicitly confirms the remote ref was updated (`[new branch]`,
|
|
101
|
+
`[up to date]`, or `... -> ...`).
|
|
102
|
+
3. **Handle Rejections**: If a push is rejected by a `pre-push` hook, fix
|
|
103
|
+
the underlying issue (usually formatting or linting) and create a NEW
|
|
104
|
+
follow-up commit. Do **not** amend the rejected commit — amending makes
|
|
105
|
+
diffs harder to review and can lose work if the original commit
|
|
106
|
+
contained more than the linting fix.
|
|
107
|
+
4. **Never bypass hooks**: Do not use `--no-verify`, `--no-gpg-sign`, or
|
|
108
|
+
other hook-skipping flags unless the operator explicitly authorizes it.
|
|
109
|
+
If a hook fails, investigate the underlying cause.
|
|
110
|
+
|
|
111
|
+
## Meta Labels (Retrospective Signal Routing)
|
|
112
|
+
|
|
113
|
+
Two `meta::*` labels route retrospective signals into durable substrates so
|
|
114
|
+
the `/epic-plan` Phase 0 fetcher (see
|
|
115
|
+
[`prior-feedback-fetcher.js`](../scripts/lib/feedback-loop/prior-feedback-fetcher.js))
|
|
116
|
+
can surface open feedback issues to the planner. Both labels live in
|
|
117
|
+
[`label-constants.js`](../scripts/lib/label-constants.js) under the
|
|
118
|
+
`META_LABELS` export — reference them by symbol from scripts rather than
|
|
119
|
+
hard-coding the string.
|
|
120
|
+
|
|
121
|
+
### `meta::framework-gap`
|
|
122
|
+
|
|
123
|
+
Apply this label to a GitHub issue that surfaces a defect, missing
|
|
124
|
+
capability, or weak ergonomic in the **framework itself** (anything under
|
|
125
|
+
`.agents/` or the dispatcher engine). Typical sources: a retrospective that
|
|
126
|
+
identifies a workflow that does not yet exist, a hook that should fire but
|
|
127
|
+
does not, or a script-level usability problem that should be solved
|
|
128
|
+
upstream rather than worked around in a consumer project.
|
|
129
|
+
|
|
130
|
+
### `meta::consumer-improvement`
|
|
131
|
+
|
|
132
|
+
Apply this label to a GitHub issue that surfaces an improvement that lives
|
|
133
|
+
in a **consumer project** (workflow tweaks, ergonomic asks, doc polish, or
|
|
134
|
+
project-local automation). The work is scoped to the consumer's
|
|
135
|
+
`.agents/`-driven layer or the consumer's own codebase, not to upstream
|
|
136
|
+
framework changes. Issues that span both axes should carry both labels —
|
|
137
|
+
`fetchPriorFeedback` dedupes by issue number so a dual-labeled issue
|
|
138
|
+
appears exactly once in the planner context.
|
|
139
|
+
|
|
140
|
+
## Pull Requests
|
|
141
|
+
|
|
142
|
+
- Never commit `.env` or hardcoded secrets.
|
|
143
|
+
- Always include a short description of _why_ the change was made in the PR
|
|
144
|
+
body.
|
|
145
|
+
- **Reference Issues**: Use "Resolves #109" or "Closes #114" to link
|
|
146
|
+
tickets.
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# Orchestration Error Handling
|
|
2
|
+
|
|
3
|
+
This rule applies to contributors writing or modifying orchestration scripts
|
|
4
|
+
under `.agents/scripts/*.js` and the helper modules under
|
|
5
|
+
`.agents/scripts/lib/orchestration/**`. Most agent task work does not touch
|
|
6
|
+
these files; consult this rule only when implementing or refactoring
|
|
7
|
+
orchestrators themselves.
|
|
8
|
+
|
|
9
|
+
## Throw, Never Fatal
|
|
10
|
+
|
|
11
|
+
Orchestration scripts MUST surface unrecoverable failures with
|
|
12
|
+
`throw new Error(<message>)` rather than `Logger.fatal(<message>)`.
|
|
13
|
+
|
|
14
|
+
### Why
|
|
15
|
+
|
|
16
|
+
The `runAsCli` boundary catches the throw and maps it to `process.exit(1)`,
|
|
17
|
+
preserving the operator-visible message verbatim while staying robust under
|
|
18
|
+
a mocked `process.exit` (in tests or when the harness stubs it). By contrast,
|
|
19
|
+
`Logger.fatal` falls through silently when `process.exit` is stubbed, which
|
|
20
|
+
lets execution continue past the intended hard-stop and masks failures.
|
|
21
|
+
|
|
22
|
+
### Precedent
|
|
23
|
+
|
|
24
|
+
Story #959 converted every `Logger.fatal` call inside the story-close
|
|
25
|
+
orchestrator surface to `throw` and established this rule for future
|
|
26
|
+
orchestration work.
|
|
27
|
+
|
|
28
|
+
### Where it applies
|
|
29
|
+
|
|
30
|
+
- `.agents/scripts/<orchestrator>.js` (top-level CLI entry points)
|
|
31
|
+
- `.agents/scripts/lib/orchestration/**/*.js` (helper modules)
|
|
32
|
+
|
|
33
|
+
Non-orchestration scripts (one-shot utilities, audit reporters, doc
|
|
34
|
+
generators) may continue to use `Logger.fatal` where the lifetime guarantees
|
|
35
|
+
are simpler.
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
# Application Security Baseline
|
|
2
|
+
|
|
3
|
+
Non-negotiable security MUSTs that apply to every piece of code generated. This
|
|
4
|
+
rule is the SSOT for security taxonomy and constraints; the companion skill
|
|
5
|
+
[`core/security-and-hardening`](../skills/core/security-and-hardening/SKILL.md)
|
|
6
|
+
shows **how** to apply these MUSTs with code patterns, examples, and process
|
|
7
|
+
guidance. Conflicts resolve per the central ordering in
|
|
8
|
+
[`.agents/instructions.md` § 1.K](../instructions.md) — this rule sits above
|
|
9
|
+
the skill, and its security MUSTs are **inviolable**: no persona, skill, or
|
|
10
|
+
local override may relax them. The skill is updated to match.
|
|
11
|
+
|
|
12
|
+
## Input Validation
|
|
13
|
+
|
|
14
|
+
- ALL input received from the client (body, query params, headers, path params)
|
|
15
|
+
MUST be validated at the edge using a strict schema (e.g., Zod). Validation
|
|
16
|
+
runs at the system boundary — never trust client-side validation as a
|
|
17
|
+
security control.
|
|
18
|
+
- Never trust client-provided IDs without verifying ownership recursively.
|
|
19
|
+
- File uploads MUST validate type (mimetype, optionally magic bytes) and size
|
|
20
|
+
before persisting or processing.
|
|
21
|
+
|
|
22
|
+
## Authentication
|
|
23
|
+
|
|
24
|
+
- Passwords MUST be hashed with `bcrypt`, `scrypt`, or `argon2`. Salt rounds
|
|
25
|
+
for bcrypt MUST be ≥ 12. Plaintext password storage is forbidden.
|
|
26
|
+
- Session tokens MUST be stored in cookies that are `httpOnly`, `secure`, and
|
|
27
|
+
carry an explicit `sameSite` policy (`lax` or `strict`). Auth tokens MUST
|
|
28
|
+
NOT be placed in client-accessible storage (e.g., `localStorage`,
|
|
29
|
+
`sessionStorage`).
|
|
30
|
+
- Authentication endpoints MUST be rate-limited.
|
|
31
|
+
|
|
32
|
+
## Authorization
|
|
33
|
+
|
|
34
|
+
- Every protected endpoint MUST check user permissions, not just authentication.
|
|
35
|
+
"Logged in" is not "allowed".
|
|
36
|
+
- Users MUST only be able to access or modify resources they own; ownership
|
|
37
|
+
checks MUST run server-side before any state change.
|
|
38
|
+
- Admin or elevated actions MUST verify the role server-side; never trust a
|
|
39
|
+
client-asserted role claim.
|
|
40
|
+
|
|
41
|
+
## Output & Rendering
|
|
42
|
+
|
|
43
|
+
- Database queries MUST be parameterized. Never concatenate user input into
|
|
44
|
+
SQL, NoSQL filters, or shell commands.
|
|
45
|
+
- HTML output MUST be encoded via the framework's auto-escaping. If raw HTML
|
|
46
|
+
rendering is unavoidable, sanitize with a vetted library (e.g., DOMPurify)
|
|
47
|
+
first.
|
|
48
|
+
- `eval()`, `Function()`, and `innerHTML` (or framework equivalents like
|
|
49
|
+
`dangerouslySetInnerHTML`) MUST NOT receive user-provided data without
|
|
50
|
+
sanitization.
|
|
51
|
+
- API responses MUST exclude sensitive fields (password hashes, reset tokens,
|
|
52
|
+
internal IDs not intended for clients). Stack traces and internal error
|
|
53
|
+
details MUST NOT be exposed to users.
|
|
54
|
+
|
|
55
|
+
## Data Leakage & Logging
|
|
56
|
+
|
|
57
|
+
- NEVER log Personal Identifiable Information (PII) such as emails, passwords,
|
|
58
|
+
full credit card numbers, session tokens, or phone numbers.
|
|
59
|
+
- Avoid logging complete objects directly; destructure out safe properties.
|
|
60
|
+
|
|
61
|
+
## Transport & Headers
|
|
62
|
+
|
|
63
|
+
- All external communication MUST use HTTPS.
|
|
64
|
+
- Security headers MUST be configured: `Content-Security-Policy`,
|
|
65
|
+
`Strict-Transport-Security`, `X-Frame-Options`, `X-Content-Type-Options`.
|
|
66
|
+
- CORS MUST be restricted to a known origin allowlist. Wildcard (`*`) origins
|
|
67
|
+
are forbidden on endpoints that accept credentials.
|
|
68
|
+
|
|
69
|
+
## Secrets Management
|
|
70
|
+
|
|
71
|
+
- Keys, passwords, and tokens MUST be pulled from environment variables.
|
|
72
|
+
Fallback or placeholder secrets MUST NOT be committed in code.
|
|
73
|
+
- `.env` files containing real secrets MUST be gitignored. Only `.env.example`
|
|
74
|
+
(placeholder values) is committed.
|
|
75
|
+
|
|
76
|
+
## Dependency Hygiene
|
|
77
|
+
|
|
78
|
+
- `npm audit` (or the project equivalent) MUST run before every release.
|
|
79
|
+
Critical and high-severity vulnerabilities reachable in production code MUST
|
|
80
|
+
be remediated before shipping; deferred findings MUST be documented with a
|
|
81
|
+
review date.
|
|
82
|
+
|
|
83
|
+
## Forbidden Practices
|
|
84
|
+
|
|
85
|
+
- Committing secrets to version control.
|
|
86
|
+
- Logging passwords, tokens, or full credit-card numbers.
|
|
87
|
+
- Trusting client-side validation as a security boundary.
|
|
88
|
+
- Disabling security headers for convenience.
|
|
89
|
+
- Using `eval()` or `innerHTML` with user-provided data.
|
|
90
|
+
- Storing auth tokens in client-accessible storage.
|
|
91
|
+
- Exposing stack traces or internal error details to users.
|
|
92
|
+
- Hardcoding fallback secrets ("default" API keys, debug bypasses) in source.
|