devrites 3.0.5 → 3.0.6
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/CHANGELOG.md +15 -0
- package/README.md +280 -533
- package/SECURITY.md +26 -26
- package/docs/adr/README.md +7 -9
- package/docs/agents/domain.md +5 -5
- package/docs/agents/issue-driven-rites.md +1 -1
- package/docs/agents/issue-tracker.md +1 -1
- package/docs/agents/triage-labels.md +2 -2
- package/docs/architecture.md +45 -45
- package/docs/cli.md +11 -11
- package/docs/command-map.md +33 -33
- package/docs/engine/agent-contract.md +6 -6
- package/docs/engine/commands.md +66 -65
- package/docs/engine/state-schema.md +15 -15
- package/docs/engine/workspace-schema.md +7 -7
- package/docs/extensions.md +17 -17
- package/docs/flow.md +17 -17
- package/docs/harness-compliance.md +2 -2
- package/docs/orchestration.md +21 -20
- package/docs/release.md +22 -5
- package/docs/research/go-authoritative-workflow-schema-and-quality-2026-07-20.md +3 -3
- package/docs/skills.md +77 -52
- package/docs/usage.md +33 -32
- package/engine/Makefile +2 -2
- package/engine/commands.go +3 -3
- package/engine/harnessmatrix.go +2 -2
- package/engine/hookpolicy.go +9 -9
- package/engine/hooks.go +11 -11
- package/engine/hooks_workspace.go +11 -11
- package/engine/internal/doctor/doctor.go +7 -7
- package/engine/internal/gate/gate.go +11 -11
- package/engine/internal/harness/compliance.go +1 -1
- package/engine/internal/harness/harness.go +7 -7
- package/engine/internal/install/install.go +2 -0
- package/engine/internal/install/install_test.go +3 -3
- package/engine/internal/iohooks/detach_unix.go +1 -1
- package/engine/internal/iohooks/iohooks.go +8 -8
- package/engine/internal/lib/adoption.go +1 -1
- package/engine/internal/lib/analyze.go +15 -15
- package/engine/internal/lib/archivesearch.go +3 -3
- package/engine/internal/lib/budget.go +3 -3
- package/engine/internal/lib/buildreadiness.go +6 -6
- package/engine/internal/lib/checkacceptance.go +10 -10
- package/engine/internal/lib/closeout.go +5 -5
- package/engine/internal/lib/conventions.go +3 -3
- package/engine/internal/lib/coverage.go +4 -4
- package/engine/internal/lib/doubtcoverage.go +9 -9
- package/engine/internal/lib/evidencefresh.go +6 -6
- package/engine/internal/lib/extensions.go +9 -9
- package/engine/internal/lib/footprint.go +13 -13
- package/engine/internal/lib/jsonout.go +2 -2
- package/engine/internal/lib/lanes.go +2 -2
- package/engine/internal/lib/learnings.go +9 -9
- package/engine/internal/lib/ledger.go +8 -8
- package/engine/internal/lib/ledger_test.go +5 -5
- package/engine/internal/lib/mutationgate.go +4 -4
- package/engine/internal/lib/overrides.go +9 -9
- package/engine/internal/lib/overrides_test.go +2 -2
- package/engine/internal/lib/packageexistence.go +5 -5
- package/engine/internal/lib/preamble.go +6 -6
- package/engine/internal/lib/progress.go +5 -5
- package/engine/internal/lib/reconcile.go +80 -20
- package/engine/internal/lib/reconcile_test.go +13 -5
- package/engine/internal/lib/resolve.go +3 -3
- package/engine/internal/lib/reviewerstats.go +2 -2
- package/engine/internal/lib/reviewintegrity.go +13 -13
- package/engine/internal/lib/reviewintegrity_test.go +6 -6
- package/engine/internal/lib/runbook.go +1 -1
- package/engine/internal/lib/session.go +1 -1
- package/engine/internal/lib/session_test.go +2 -2
- package/engine/internal/lib/specparse.go +4 -4
- package/engine/internal/lib/specskeleton.go +2 -2
- package/engine/internal/lib/specvalidate.go +13 -13
- package/engine/internal/lib/stuck.go +13 -13
- package/engine/internal/lib/templates/conventions_ledger_header.md +1 -1
- package/engine/internal/lib/templates/conventions_orient_header.txt +1 -1
- package/engine/internal/lib/testintegrity.go +9 -9
- package/engine/internal/lib/tickafk.go +4 -4
- package/engine/internal/migrate/migrate.go +2 -2
- package/engine/internal/migrate/migrate_test.go +1 -0
- package/engine/internal/orient/firstrun.go +8 -8
- package/engine/internal/orient/orient.go +5 -5
- package/engine/internal/state/concurrency_test.go +4 -4
- package/engine/internal/state/feature.go +6 -6
- package/engine/internal/state/lock_unix.go +1 -1
- package/engine/internal/state/schema.go +1 -1
- package/engine/internal/state/snapshot.go +2 -2
- package/engine/internal/state/write.go +1 -1
- package/engine/internal/version/version.go +1 -1
- package/engine/main.go +5 -5
- package/engine/subagent_orient_context.txt +4 -4
- package/engine/testdata/golden/TestParityA1Guard/source-edit-enforce-denies.golden +1 -1
- package/engine/testdata/golden/TestParityAnalyze/slug=covered.golden +2 -2
- package/engine/testdata/golden/TestParityAnalyze/slug=dangling.golden +3 -3
- package/engine/testdata/golden/TestParityAnalyze/slug=noac.golden +2 -2
- package/engine/testdata/golden/TestParityAnalyze/slug=order.golden +4 -4
- package/engine/testdata/golden/TestParityAnalyze/slug=orphan.golden +3 -3
- package/engine/testdata/golden/TestParityAnalyze/slug=uncovered.golden +3 -3
- package/engine/testdata/golden/TestParityBudget/extra-md.golden +1 -1
- package/engine/testdata/golden/TestParityBudget/over-advisory.golden +1 -1
- package/engine/testdata/golden/TestParityBudget/over-strict.golden +1 -1
- package/engine/testdata/golden/TestParityBuildReadiness/arg=approved.golden +1 -1
- package/engine/testdata/golden/TestParityBuildReadiness/arg=emptystatus.golden +1 -1
- package/engine/testdata/golden/TestParityBuildReadiness/arg=trailhash.golden +1 -1
- package/engine/testdata/golden/TestParityBuildReadiness/arg=trailpipe.golden +1 -1
- package/engine/testdata/golden/TestParityCheckAcceptance/arg=flat-ok.golden +1 -1
- package/engine/testdata/golden/TestParityCheckAcceptance/arg=id-ok.golden +1 -1
- package/engine/testdata/golden/TestParityCloseOut/active_pointed_elsewhere.golden +1 -1
- package/engine/testdata/golden/TestParityCoverage/arg=speconly.golden +2 -2
- package/engine/testdata/golden/TestParityCursor/bare.golden +1 -1
- package/engine/testdata/golden/TestParityCursor/full-afk.golden +1 -1
- package/engine/testdata/golden/TestParityCursor/full-hitl.golden +1 -1
- package/engine/testdata/golden/TestParityCursor/red.golden +2 -2
- package/engine/testdata/golden/TestParityCursor/zerogates.golden +1 -1
- package/engine/testdata/golden/TestParityDoubtCoverage/arg=ghost.golden +1 -1
- package/engine/testdata/golden/TestParityDoubtCoverage/arg=inline.golden +1 -1
- package/engine/testdata/golden/TestParityDoubtCoverage/arg=missing-inline.golden +1 -1
- package/engine/testdata/golden/TestParityDoubtCoverage/arg=missing.golden +1 -1
- package/engine/testdata/golden/TestParityDoubtCoverage/arg=nodoubt.golden +1 -1
- package/engine/testdata/golden/TestParityDoubtCoverage/arg=nolog.golden +1 -1
- package/engine/testdata/golden/TestParityLearnings/mine-no-archive.golden +1 -1
- package/engine/testdata/golden/TestParityLearnings/mine.golden +1 -1
- package/engine/testdata/golden/TestParityLearnings/nudge.golden +1 -1
- package/engine/testdata/golden/TestParityMutationGate/active-slug.golden +1 -1
- package/engine/testdata/golden/TestParityMutationGate/explicit-slug.golden +1 -1
- package/engine/testdata/golden/TestParityPackageExistence/declared.golden +1 -1
- package/engine/testdata/golden/TestParityPackageExistence/default-import-subpath.golden +1 -1
- package/engine/testdata/golden/TestParityReconcile/check-clean.golden +1 -1
- package/engine/testdata/golden/TestParityRedwatch/fail-writes-red.golden +1 -1
- package/engine/testdata/golden/TestParityResolve/answer/state.md.golden +1 -1
- package/engine/testdata/golden/TestParityResolve/batch.golden +1 -1
- package/engine/testdata/golden/TestParityReviewerReadonly/agent-required-devrites-agent-denies.golden +1 -1
- package/engine/testdata/golden/TestParityReviewerReadonly/enforce-deny-git-commit.golden +1 -1
- package/engine/testdata/golden/TestParityReviewerReadonly/enforce-deny-mutating.golden +1 -1
- package/engine/testdata/golden/TestParitySpecValidate/arg=flat.golden +1 -1
- package/engine/testdata/golden/TestParitySpecValidate/arg=valid/spec.md.golden +1 -1
- package/engine/testdata/golden/TestParitySpecValidate/arg=valid.golden +1 -1
- package/engine/testdata/golden/TestParityStuckCheck/custom-window-2.golden +1 -1
- package/engine/testdata/golden/TestParityStuckCheck/dominant.golden +1 -1
- package/engine/testdata/golden/TestParityStuckCheck/few.golden +1 -1
- package/engine/testdata/golden/TestParityStuckCheck/ghost.golden +1 -1
- package/engine/testdata/golden/TestParityStuckCheck/identical.golden +1 -1
- package/engine/testdata/golden/TestParityStuckCheck/nolog.golden +1 -1
- package/engine/testdata/golden/TestParityStuckCheck/pingpong.golden +1 -1
- package/engine/testdata/golden/TestParityStuckCheck/varied.golden +1 -1
- package/engine/testdata/golden/TestParityStuckCheck/window-04-identical.golden +1 -1
- package/engine/testdata/golden/TestParityStuckCheck/window-2.5-varied4.golden +1 -1
- package/engine/testdata/golden/TestParityStuckCheck/window-4x-varied4.golden +1 -1
- package/engine/testdata/golden/TestParityStuckCheck/window-leadspace-varied4.golden +1 -1
- package/engine/testdata/golden/TestParityStuckCheck/window-plus4-identical.golden +1 -1
- package/engine/testdata/golden/TestParitySubagentOrient/devrites-agent-subagent-type-key.golden +1 -1
- package/engine/testdata/golden/TestParitySubagentOrient/devrites-agent.golden +1 -1
- package/engine/testdata/golden/TestParityTestIntegrity/clean.golden +1 -1
- package/engine/testdata/golden/TestParityTickAfk/missingField.golden +1 -1
- package/engine/testdata/golden/TestParityTickAfk/none.golden +1 -1
- package/engine/testdata/golden/TestParityWrightScope/out-of-scope-enforce-denies.golden +1 -1
- package/engine/testdata/golden/TestSpecSkeleton/missing-some.golden +1 -1
- package/engine/testdata/golden/TestSpecSkeleton/present-all.golden +1 -1
- package/engine/tests/adr_0004_required_by_phase_test.go +2 -2
- package/engine/tests/adr_0006_clock_seam_test.go +1 -1
- package/engine/tests/budget_test.go +1 -1
- package/engine/tests/canonical_ac_ids_test.go +2 -2
- package/engine/tests/cli_test.go +1 -1
- package/engine/tests/concurrency_cli_test.go +1 -1
- package/engine/tests/gate_test.go +4 -4
- package/engine/tests/hook_test.go +3 -3
- package/engine/tests/hooks_io_test.go +1 -1
- package/engine/tests/lib_parity_test.go +29 -29
- package/engine/tests/meta_test.go +2 -2
- package/engine/tests/parity_closeout_test.go +1 -1
- package/engine/tests/parity_learnings_test.go +2 -2
- package/engine/tests/parity_mutationgate_test.go +2 -2
- package/engine/tests/parity_resolve_test.go +1 -1
- package/engine/tests/parity_test.go +3 -3
- package/engine/tests/parity_tickafk_test.go +1 -1
- package/engine/validatepack.go +5 -5
- package/engine/validatepackskills.go +9 -9
- package/pack/.claude/agents/devrites-code-reviewer.md +21 -22
- package/pack/.claude/agents/devrites-devex-reviewer.md +17 -17
- package/pack/.claude/agents/devrites-doubt-reviewer.md +6 -6
- package/pack/.claude/agents/devrites-forge-judge.md +26 -26
- package/pack/.claude/agents/devrites-frontend-reviewer.md +17 -17
- package/pack/.claude/agents/devrites-performance-reviewer.md +19 -18
- package/pack/.claude/agents/devrites-plan-reviewer.md +29 -27
- package/pack/.claude/agents/devrites-retrospector.md +19 -19
- package/pack/.claude/agents/devrites-security-auditor.md +15 -15
- package/pack/.claude/agents/devrites-simplifier-reviewer.md +14 -14
- package/pack/.claude/agents/devrites-slice-wright.md +52 -51
- package/pack/.claude/agents/devrites-spec-reviewer.md +11 -11
- package/pack/.claude/agents/devrites-strategy-reviewer.md +21 -21
- package/pack/.claude/agents/devrites-test-analyst.md +13 -13
- package/pack/.claude/settings.json +1 -1
- package/pack/.claude/skills/devrites-api-interface/SKILL.md +12 -12
- package/pack/.claude/skills/devrites-audit/SKILL.md +7 -7
- package/pack/.claude/skills/devrites-browser-proof/SKILL.md +16 -16
- package/pack/.claude/skills/devrites-debug-recovery/SKILL.md +14 -14
- package/pack/.claude/skills/devrites-debug-recovery/reference/build-the-loop.md +16 -16
- package/pack/.claude/skills/devrites-debug-recovery/reference/cleanup-and-classify.md +2 -2
- package/pack/.claude/skills/devrites-debug-recovery/reference/hypotheses.md +2 -2
- package/pack/.claude/skills/devrites-debug-recovery/reference/regression-test.md +3 -3
- package/pack/.claude/skills/devrites-debug-recovery/reference/trace.md +4 -4
- package/pack/.claude/skills/devrites-doubt/SKILL.md +14 -14
- package/pack/.claude/skills/devrites-frontend-craft/SKILL.md +18 -18
- package/pack/.claude/skills/devrites-frontend-craft/reference/craft.md +17 -17
- package/pack/.claude/skills/devrites-frontend-craft/reference/design-references.md +25 -25
- package/pack/.claude/skills/devrites-frontend-craft/reference/fullstack.md +6 -6
- package/pack/.claude/skills/devrites-frontend-craft/reference/quality-standards.md +44 -44
- package/pack/.claude/skills/devrites-frontend-craft/reference/reuse-first.md +9 -9
- package/pack/.claude/skills/devrites-frontend-craft/reference/shape.md +13 -13
- package/pack/.claude/skills/devrites-interview/SKILL.md +27 -27
- package/pack/.claude/skills/devrites-lib/SKILL.md +18 -18
- package/pack/.claude/skills/devrites-lib/reference/model-tiers.md +5 -5
- package/pack/.claude/skills/devrites-lib/reference/parallel-dispatch.md +36 -36
- package/pack/.claude/skills/devrites-lib/reference/standards/README.md +10 -10
- package/pack/.claude/skills/devrites-lib/reference/standards/afk-hitl.md +33 -33
- package/pack/.claude/skills/devrites-lib/reference/standards/agents.md +37 -37
- package/pack/.claude/skills/devrites-lib/reference/standards/anti-patterns.md +9 -9
- package/pack/.claude/skills/devrites-lib/reference/standards/ci-cd.md +12 -12
- package/pack/.claude/skills/devrites-lib/reference/standards/code-review.md +40 -40
- package/pack/.claude/skills/devrites-lib/reference/standards/coding-style.md +7 -7
- package/pack/.claude/skills/devrites-lib/reference/standards/context-hygiene.md +24 -25
- package/pack/.claude/skills/devrites-lib/reference/standards/core.md +23 -23
- package/pack/.claude/skills/devrites-lib/reference/standards/definition-of-done.md +1 -1
- package/pack/.claude/skills/devrites-lib/reference/standards/deprecation.md +18 -18
- package/pack/.claude/skills/devrites-lib/reference/standards/developer-experience.md +29 -29
- package/pack/.claude/skills/devrites-lib/reference/standards/development-workflow.md +10 -10
- package/pack/.claude/skills/devrites-lib/reference/standards/documentation.md +4 -4
- package/pack/.claude/skills/devrites-lib/reference/standards/edge-case-trace.md +1 -1
- package/pack/.claude/skills/devrites-lib/reference/standards/elicitation.md +26 -26
- package/pack/.claude/skills/devrites-lib/reference/standards/error-handling.md +4 -4
- package/pack/.claude/skills/devrites-lib/reference/standards/git-workflow.md +9 -9
- package/pack/.claude/skills/devrites-lib/reference/standards/hooks.md +3 -3
- package/pack/.claude/skills/devrites-lib/reference/standards/observability.md +15 -15
- package/pack/.claude/skills/devrites-lib/reference/standards/patterns.md +8 -8
- package/pack/.claude/skills/devrites-lib/reference/standards/performance.md +5 -5
- package/pack/.claude/skills/devrites-lib/reference/standards/principles.md +31 -31
- package/pack/.claude/skills/devrites-lib/reference/standards/prose-style.md +25 -25
- package/pack/.claude/skills/devrites-lib/reference/standards/security.md +30 -30
- package/pack/.claude/skills/devrites-lib/reference/standards/skill-authoring.md +11 -11
- package/pack/.claude/skills/devrites-lib/reference/standards/spec-grammar.md +30 -30
- package/pack/.claude/skills/devrites-lib/reference/standards/testing.md +40 -40
- package/pack/.claude/skills/devrites-lib/reference/standards/tooling.md +26 -26
- package/pack/.claude/skills/devrites-prose-craft/SKILL.md +5 -5
- package/pack/.claude/skills/devrites-refresh-indexes/SKILL.md +6 -6
- package/pack/.claude/skills/devrites-source-driven/SKILL.md +8 -8
- package/pack/.claude/skills/devrites-ux-shape/SKILL.md +33 -33
- package/pack/.claude/skills/devrites-ux-shape/reference/brief-template.md +6 -6
- package/pack/.claude/skills/devrites-ux-shape/reference/visual-direction-probe.md +9 -9
- package/pack/.claude/skills/rite/SKILL.md +7 -7
- package/pack/.claude/skills/rite/reference/menu.md +6 -6
- package/pack/.claude/skills/rite-adopt/SKILL.md +15 -15
- package/pack/.claude/skills/rite-adopt/reference/adoption.md +9 -9
- package/pack/.claude/skills/rite-adopt/reference/anti-patterns.md +6 -6
- package/pack/.claude/skills/rite-autocomplete/SKILL.md +14 -14
- package/pack/.claude/skills/rite-autocomplete/reference/decision-policy.md +4 -4
- package/pack/.claude/skills/rite-autocomplete/reference/loop.md +7 -7
- package/pack/.claude/skills/rite-autocomplete/reference/stop-conditions.md +7 -7
- package/pack/.claude/skills/rite-build/SKILL.md +22 -22
- package/pack/.claude/skills/rite-build/reference/afk-discipline.md +9 -9
- package/pack/.claude/skills/rite-build/reference/anti-patterns.md +6 -6
- package/pack/.claude/skills/rite-build/reference/checkpoint-protocol.md +14 -14
- package/pack/.claude/skills/rite-build/reference/checkpoint.md +8 -8
- package/pack/.claude/skills/rite-build/reference/evidence-standard.md +1 -1
- package/pack/.claude/skills/rite-build/reference/forge.md +28 -29
- package/pack/.claude/skills/rite-build/reference/frontend-trigger.md +2 -2
- package/pack/.claude/skills/rite-build/reference/one-slice-cycle.md +3 -3
- package/pack/.claude/skills/rite-build/reference/output.md +1 -1
- package/pack/.claude/skills/rite-build/reference/phase-contract.md +44 -44
- package/pack/.claude/skills/rite-build/reference/spec-drift-guard.md +1 -1
- package/pack/.claude/skills/rite-build/reference/tdd.md +6 -6
- package/pack/.claude/skills/rite-build/reference/wright-dispatch.md +23 -23
- package/pack/.claude/skills/rite-converge/SKILL.md +17 -17
- package/pack/.claude/skills/rite-converge/reference/anti-patterns.md +7 -7
- package/pack/.claude/skills/rite-converge/reference/convergence-assessment.md +14 -14
- package/pack/.claude/skills/rite-customize/SKILL.md +2 -2
- package/pack/.claude/skills/rite-define/SKILL.md +25 -25
- package/pack/.claude/skills/rite-define/reference/anti-patterns.md +5 -5
- package/pack/.claude/skills/rite-define/reference/gates.md +13 -13
- package/pack/.claude/skills/rite-define/reference/plan-template.md +1 -1
- package/pack/.claude/skills/rite-doctor/SKILL.md +11 -11
- package/pack/.claude/skills/rite-dogfood/SKILL.md +2 -2
- package/pack/.claude/skills/rite-explain/SKILL.md +22 -22
- package/pack/.claude/skills/rite-explain/reference/intake.md +16 -16
- package/pack/.claude/skills/rite-frame/SKILL.md +22 -22
- package/pack/.claude/skills/rite-frame/reference/failure-modes.md +13 -13
- package/pack/.claude/skills/rite-handoff/SKILL.md +12 -12
- package/pack/.claude/skills/rite-learn/SKILL.md +23 -23
- package/pack/.claude/skills/rite-plan/SKILL.md +21 -21
- package/pack/.claude/skills/rite-plan/reference/anti-patterns.md +3 -3
- package/pack/.claude/skills/rite-plan/reference/dependency-graph.md +1 -1
- package/pack/.claude/skills/rite-plan/reference/replan-and-repair.md +3 -3
- package/pack/.claude/skills/rite-plan/reference/slicing.md +9 -9
- package/pack/.claude/skills/rite-plan/reference/task-breakdown.md +3 -3
- package/pack/.claude/skills/rite-polish/SKILL.md +11 -11
- package/pack/.claude/skills/rite-polish/reference/anti-patterns.md +8 -8
- package/pack/.claude/skills/rite-polish/reference/backend-polish.md +13 -13
- package/pack/.claude/skills/rite-polish/reference/browser-polish-evidence.md +4 -4
- package/pack/.claude/skills/rite-polish/reference/code.md +26 -26
- package/pack/.claude/skills/rite-polish/reference/harden-checklist.md +31 -31
- package/pack/.claude/skills/rite-polish/reference/ui.md +23 -23
- package/pack/.claude/skills/rite-pov/SKILL.md +3 -3
- package/pack/.claude/skills/rite-pr-feedback/SKILL.md +2 -2
- package/pack/.claude/skills/rite-pressure-test/SKILL.md +14 -14
- package/pack/.claude/skills/rite-prototype/SKILL.md +13 -13
- package/pack/.claude/skills/rite-prove/SKILL.md +17 -17
- package/pack/.claude/skills/rite-prove/reference/anti-patterns.md +4 -4
- package/pack/.claude/skills/rite-prove/reference/browser-proof.md +2 -2
- package/pack/.claude/skills/rite-prove/reference/failure-triage.md +4 -4
- package/pack/.claude/skills/rite-prove/reference/proof-ladder.md +6 -6
- package/pack/.claude/skills/rite-prove/reference/test-command-discovery.md +1 -1
- package/pack/.claude/skills/rite-quick/SKILL.md +22 -22
- package/pack/.claude/skills/rite-resolve/SKILL.md +18 -18
- package/pack/.claude/skills/rite-resolve/reference/answer-protocol.md +7 -7
- package/pack/.claude/skills/rite-review/SKILL.md +34 -34
- package/pack/.claude/skills/rite-review/reference/anti-patterns.md +4 -4
- package/pack/.claude/skills/rite-review/reference/cognitive-load.md +22 -22
- package/pack/.claude/skills/rite-review/reference/feature-scoped-review.md +2 -2
- package/pack/.claude/skills/rite-review/reference/five-axis-review.md +8 -8
- package/pack/.claude/skills/rite-review/reference/nielsen-heuristics.md +14 -14
- package/pack/.claude/skills/rite-review/reference/performance-checklist.md +14 -14
- package/pack/.claude/skills/rite-review/reference/security-review.md +9 -9
- package/pack/.claude/skills/rite-seal/SKILL.md +26 -26
- package/pack/.claude/skills/rite-seal/reference/anti-patterns.md +8 -8
- package/pack/.claude/skills/rite-seal/reference/conventions-ledger.md +8 -8
- package/pack/.claude/skills/rite-seal/reference/final-evidence.md +9 -9
- package/pack/.claude/skills/rite-seal/reference/go-no-go.md +9 -9
- package/pack/.claude/skills/rite-seal/reference/phase-contract.md +43 -43
- package/pack/.claude/skills/rite-ship/SKILL.md +12 -12
- package/pack/.claude/skills/rite-ship/reference/anti-patterns.md +5 -5
- package/pack/.claude/skills/rite-ship/reference/close-out.md +2 -2
- package/pack/.claude/skills/rite-ship/reference/design-memory.md +22 -22
- package/pack/.claude/skills/rite-ship/reference/git-ship.md +10 -10
- package/pack/.claude/skills/rite-ship/reference/ledger.md +9 -9
- package/pack/.claude/skills/rite-ship/reference/rollout.md +11 -11
- package/pack/.claude/skills/rite-ship/reference/ship-template.md +1 -1
- package/pack/.claude/skills/rite-spec/SKILL.md +45 -45
- package/pack/.claude/skills/rite-spec/reference/acceptance-criteria.md +4 -4
- package/pack/.claude/skills/rite-spec/reference/anti-patterns.md +6 -6
- package/pack/.claude/skills/rite-spec/reference/interview-patterns.md +3 -3
- package/pack/.claude/skills/rite-spec/reference/investigation.md +21 -21
- package/pack/.claude/skills/rite-spec/reference/question-protocol.md +9 -9
- package/pack/.claude/skills/rite-spec/reference/references-intake.md +8 -8
- package/pack/.claude/skills/rite-spec/reference/spec-checklists.md +19 -19
- package/pack/.claude/skills/rite-status/SKILL.md +13 -13
- package/pack/.claude/skills/rite-temper/SKILL.md +29 -29
- package/pack/.claude/skills/rite-temper/reference/anti-patterns.md +11 -11
- package/pack/.claude/skills/rite-temper/reference/review-dimensions.md +20 -20
- package/pack/.claude/skills/rite-temper/reference/scope-modes.md +16 -16
- package/pack/.claude/skills/rite-temper/reference/significance.md +10 -10
- package/pack/.claude/skills/rite-temper/reference/strategy-template.md +14 -14
- package/pack/.claude/skills/rite-vet/SKILL.md +31 -31
- package/pack/.claude/skills/rite-vet/reference/anti-patterns.md +14 -14
- package/pack/.claude/skills/rite-vet/reference/artifacts.md +10 -10
- package/pack/.claude/skills/rite-vet/reference/cross-model.md +9 -9
- package/pack/.claude/skills/rite-vet/reference/depth.md +14 -14
- package/pack/.claude/skills/rite-vet/reference/eng-lenses.md +9 -9
- package/pack/.claude/skills/rite-vet/reference/review-axes.md +28 -28
- package/pack/.claude/skills/rite-zoom-out/SKILL.md +18 -18
- package/pack/generated/claude/agents/devrites-code-reviewer.md +21 -22
- package/pack/generated/claude/agents/devrites-devex-reviewer.md +17 -17
- package/pack/generated/claude/agents/devrites-doubt-reviewer.md +6 -6
- package/pack/generated/claude/agents/devrites-forge-judge.md +26 -26
- package/pack/generated/claude/agents/devrites-frontend-reviewer.md +17 -17
- package/pack/generated/claude/agents/devrites-performance-reviewer.md +19 -18
- package/pack/generated/claude/agents/devrites-plan-reviewer.md +29 -27
- package/pack/generated/claude/agents/devrites-retrospector.md +19 -19
- package/pack/generated/claude/agents/devrites-security-auditor.md +15 -15
- package/pack/generated/claude/agents/devrites-simplifier-reviewer.md +14 -14
- package/pack/generated/claude/agents/devrites-slice-wright.md +52 -51
- package/pack/generated/claude/agents/devrites-spec-reviewer.md +11 -11
- package/pack/generated/claude/agents/devrites-strategy-reviewer.md +21 -21
- package/pack/generated/claude/agents/devrites-test-analyst.md +13 -13
- package/pack/generated/claude/settings.json +1 -1
- package/pack/generated/claude/skills/devrites-api-interface/SKILL.md +12 -12
- package/pack/generated/claude/skills/devrites-audit/SKILL.md +7 -7
- package/pack/generated/claude/skills/devrites-browser-proof/SKILL.md +16 -16
- package/pack/generated/claude/skills/devrites-debug-recovery/SKILL.md +14 -14
- package/pack/generated/claude/skills/devrites-debug-recovery/reference/build-the-loop.md +16 -16
- package/pack/generated/claude/skills/devrites-debug-recovery/reference/cleanup-and-classify.md +2 -2
- package/pack/generated/claude/skills/devrites-debug-recovery/reference/hypotheses.md +2 -2
- package/pack/generated/claude/skills/devrites-debug-recovery/reference/regression-test.md +3 -3
- package/pack/generated/claude/skills/devrites-debug-recovery/reference/trace.md +4 -4
- package/pack/generated/claude/skills/devrites-doubt/SKILL.md +14 -14
- package/pack/generated/claude/skills/devrites-frontend-craft/SKILL.md +18 -18
- package/pack/generated/claude/skills/devrites-frontend-craft/reference/craft.md +17 -17
- package/pack/generated/claude/skills/devrites-frontend-craft/reference/design-references.md +25 -25
- package/pack/generated/claude/skills/devrites-frontend-craft/reference/fullstack.md +6 -6
- package/pack/generated/claude/skills/devrites-frontend-craft/reference/quality-standards.md +44 -44
- package/pack/generated/claude/skills/devrites-frontend-craft/reference/reuse-first.md +9 -9
- package/pack/generated/claude/skills/devrites-frontend-craft/reference/shape.md +13 -13
- package/pack/generated/claude/skills/devrites-interview/SKILL.md +27 -27
- package/pack/generated/claude/skills/devrites-lib/SKILL.md +18 -18
- package/pack/generated/claude/skills/devrites-lib/reference/model-tiers.md +5 -5
- package/pack/generated/claude/skills/devrites-lib/reference/parallel-dispatch.md +36 -36
- package/pack/generated/claude/skills/devrites-lib/reference/standards/README.md +10 -10
- package/pack/generated/claude/skills/devrites-lib/reference/standards/afk-hitl.md +33 -33
- package/pack/generated/claude/skills/devrites-lib/reference/standards/agents.md +37 -37
- package/pack/generated/claude/skills/devrites-lib/reference/standards/anti-patterns.md +9 -9
- package/pack/generated/claude/skills/devrites-lib/reference/standards/ci-cd.md +12 -12
- package/pack/generated/claude/skills/devrites-lib/reference/standards/code-review.md +40 -40
- package/pack/generated/claude/skills/devrites-lib/reference/standards/coding-style.md +7 -7
- package/pack/generated/claude/skills/devrites-lib/reference/standards/context-hygiene.md +24 -25
- package/pack/generated/claude/skills/devrites-lib/reference/standards/core.md +23 -23
- package/pack/generated/claude/skills/devrites-lib/reference/standards/definition-of-done.md +1 -1
- package/pack/generated/claude/skills/devrites-lib/reference/standards/deprecation.md +18 -18
- package/pack/generated/claude/skills/devrites-lib/reference/standards/developer-experience.md +29 -29
- package/pack/generated/claude/skills/devrites-lib/reference/standards/development-workflow.md +10 -10
- package/pack/generated/claude/skills/devrites-lib/reference/standards/documentation.md +4 -4
- package/pack/generated/claude/skills/devrites-lib/reference/standards/edge-case-trace.md +1 -1
- package/pack/generated/claude/skills/devrites-lib/reference/standards/elicitation.md +26 -26
- package/pack/generated/claude/skills/devrites-lib/reference/standards/error-handling.md +4 -4
- package/pack/generated/claude/skills/devrites-lib/reference/standards/git-workflow.md +9 -9
- package/pack/generated/claude/skills/devrites-lib/reference/standards/hooks.md +3 -3
- package/pack/generated/claude/skills/devrites-lib/reference/standards/observability.md +15 -15
- package/pack/generated/claude/skills/devrites-lib/reference/standards/patterns.md +8 -8
- package/pack/generated/claude/skills/devrites-lib/reference/standards/performance.md +5 -5
- package/pack/generated/claude/skills/devrites-lib/reference/standards/principles.md +31 -31
- package/pack/generated/claude/skills/devrites-lib/reference/standards/prose-style.md +25 -25
- package/pack/generated/claude/skills/devrites-lib/reference/standards/security.md +30 -30
- package/pack/generated/claude/skills/devrites-lib/reference/standards/skill-authoring.md +11 -11
- package/pack/generated/claude/skills/devrites-lib/reference/standards/spec-grammar.md +30 -30
- package/pack/generated/claude/skills/devrites-lib/reference/standards/testing.md +40 -40
- package/pack/generated/claude/skills/devrites-lib/reference/standards/tooling.md +26 -26
- package/pack/generated/claude/skills/devrites-prose-craft/SKILL.md +5 -5
- package/pack/generated/claude/skills/devrites-refresh-indexes/SKILL.md +6 -6
- package/pack/generated/claude/skills/devrites-source-driven/SKILL.md +8 -8
- package/pack/generated/claude/skills/devrites-ux-shape/SKILL.md +33 -33
- package/pack/generated/claude/skills/devrites-ux-shape/reference/brief-template.md +6 -6
- package/pack/generated/claude/skills/devrites-ux-shape/reference/visual-direction-probe.md +9 -9
- package/pack/generated/claude/skills/rite/SKILL.md +7 -7
- package/pack/generated/claude/skills/rite/reference/menu.md +6 -6
- package/pack/generated/claude/skills/rite-adopt/SKILL.md +15 -15
- package/pack/generated/claude/skills/rite-adopt/reference/adoption.md +9 -9
- package/pack/generated/claude/skills/rite-adopt/reference/anti-patterns.md +6 -6
- package/pack/generated/claude/skills/rite-autocomplete/SKILL.md +14 -14
- package/pack/generated/claude/skills/rite-autocomplete/reference/decision-policy.md +4 -4
- package/pack/generated/claude/skills/rite-autocomplete/reference/loop.md +7 -7
- package/pack/generated/claude/skills/rite-autocomplete/reference/stop-conditions.md +7 -7
- package/pack/generated/claude/skills/rite-build/SKILL.md +22 -22
- package/pack/generated/claude/skills/rite-build/reference/afk-discipline.md +9 -9
- package/pack/generated/claude/skills/rite-build/reference/anti-patterns.md +6 -6
- package/pack/generated/claude/skills/rite-build/reference/checkpoint-protocol.md +14 -14
- package/pack/generated/claude/skills/rite-build/reference/checkpoint.md +8 -8
- package/pack/generated/claude/skills/rite-build/reference/evidence-standard.md +1 -1
- package/pack/generated/claude/skills/rite-build/reference/forge.md +28 -29
- package/pack/generated/claude/skills/rite-build/reference/frontend-trigger.md +2 -2
- package/pack/generated/claude/skills/rite-build/reference/one-slice-cycle.md +3 -3
- package/pack/generated/claude/skills/rite-build/reference/output.md +1 -1
- package/pack/generated/claude/skills/rite-build/reference/phase-contract.md +44 -44
- package/pack/generated/claude/skills/rite-build/reference/spec-drift-guard.md +1 -1
- package/pack/generated/claude/skills/rite-build/reference/tdd.md +6 -6
- package/pack/generated/claude/skills/rite-build/reference/wright-dispatch.md +23 -23
- package/pack/generated/claude/skills/rite-converge/SKILL.md +17 -17
- package/pack/generated/claude/skills/rite-converge/reference/anti-patterns.md +7 -7
- package/pack/generated/claude/skills/rite-converge/reference/convergence-assessment.md +14 -14
- package/pack/generated/claude/skills/rite-customize/SKILL.md +2 -2
- package/pack/generated/claude/skills/rite-define/SKILL.md +25 -25
- package/pack/generated/claude/skills/rite-define/reference/anti-patterns.md +5 -5
- package/pack/generated/claude/skills/rite-define/reference/gates.md +13 -13
- package/pack/generated/claude/skills/rite-define/reference/plan-template.md +1 -1
- package/pack/generated/claude/skills/rite-doctor/SKILL.md +11 -11
- package/pack/generated/claude/skills/rite-dogfood/SKILL.md +2 -2
- package/pack/generated/claude/skills/rite-explain/SKILL.md +22 -22
- package/pack/generated/claude/skills/rite-explain/reference/intake.md +16 -16
- package/pack/generated/claude/skills/rite-frame/SKILL.md +22 -22
- package/pack/generated/claude/skills/rite-frame/reference/failure-modes.md +13 -13
- package/pack/generated/claude/skills/rite-handoff/SKILL.md +12 -12
- package/pack/generated/claude/skills/rite-learn/SKILL.md +23 -23
- package/pack/generated/claude/skills/rite-plan/SKILL.md +21 -21
- package/pack/generated/claude/skills/rite-plan/reference/anti-patterns.md +3 -3
- package/pack/generated/claude/skills/rite-plan/reference/dependency-graph.md +1 -1
- package/pack/generated/claude/skills/rite-plan/reference/replan-and-repair.md +3 -3
- package/pack/generated/claude/skills/rite-plan/reference/slicing.md +9 -9
- package/pack/generated/claude/skills/rite-plan/reference/task-breakdown.md +3 -3
- package/pack/generated/claude/skills/rite-polish/SKILL.md +11 -11
- package/pack/generated/claude/skills/rite-polish/reference/anti-patterns.md +8 -8
- package/pack/generated/claude/skills/rite-polish/reference/backend-polish.md +13 -13
- package/pack/generated/claude/skills/rite-polish/reference/browser-polish-evidence.md +4 -4
- package/pack/generated/claude/skills/rite-polish/reference/code.md +26 -26
- package/pack/generated/claude/skills/rite-polish/reference/harden-checklist.md +31 -31
- package/pack/generated/claude/skills/rite-polish/reference/ui.md +23 -23
- package/pack/generated/claude/skills/rite-pov/SKILL.md +3 -3
- package/pack/generated/claude/skills/rite-pr-feedback/SKILL.md +2 -2
- package/pack/generated/claude/skills/rite-pressure-test/SKILL.md +14 -14
- package/pack/generated/claude/skills/rite-prototype/SKILL.md +13 -13
- package/pack/generated/claude/skills/rite-prove/SKILL.md +17 -17
- package/pack/generated/claude/skills/rite-prove/reference/anti-patterns.md +4 -4
- package/pack/generated/claude/skills/rite-prove/reference/browser-proof.md +2 -2
- package/pack/generated/claude/skills/rite-prove/reference/failure-triage.md +4 -4
- package/pack/generated/claude/skills/rite-prove/reference/proof-ladder.md +6 -6
- package/pack/generated/claude/skills/rite-prove/reference/test-command-discovery.md +1 -1
- package/pack/generated/claude/skills/rite-quick/SKILL.md +22 -22
- package/pack/generated/claude/skills/rite-resolve/SKILL.md +18 -18
- package/pack/generated/claude/skills/rite-resolve/reference/answer-protocol.md +7 -7
- package/pack/generated/claude/skills/rite-review/SKILL.md +34 -34
- package/pack/generated/claude/skills/rite-review/reference/anti-patterns.md +4 -4
- package/pack/generated/claude/skills/rite-review/reference/cognitive-load.md +22 -22
- package/pack/generated/claude/skills/rite-review/reference/feature-scoped-review.md +2 -2
- package/pack/generated/claude/skills/rite-review/reference/five-axis-review.md +8 -8
- package/pack/generated/claude/skills/rite-review/reference/nielsen-heuristics.md +14 -14
- package/pack/generated/claude/skills/rite-review/reference/performance-checklist.md +14 -14
- package/pack/generated/claude/skills/rite-review/reference/security-review.md +9 -9
- package/pack/generated/claude/skills/rite-seal/SKILL.md +26 -26
- package/pack/generated/claude/skills/rite-seal/reference/anti-patterns.md +8 -8
- package/pack/generated/claude/skills/rite-seal/reference/conventions-ledger.md +8 -8
- package/pack/generated/claude/skills/rite-seal/reference/final-evidence.md +9 -9
- package/pack/generated/claude/skills/rite-seal/reference/go-no-go.md +9 -9
- package/pack/generated/claude/skills/rite-seal/reference/phase-contract.md +43 -43
- package/pack/generated/claude/skills/rite-ship/SKILL.md +12 -12
- package/pack/generated/claude/skills/rite-ship/reference/anti-patterns.md +5 -5
- package/pack/generated/claude/skills/rite-ship/reference/close-out.md +2 -2
- package/pack/generated/claude/skills/rite-ship/reference/design-memory.md +22 -22
- package/pack/generated/claude/skills/rite-ship/reference/git-ship.md +10 -10
- package/pack/generated/claude/skills/rite-ship/reference/ledger.md +9 -9
- package/pack/generated/claude/skills/rite-ship/reference/rollout.md +11 -11
- package/pack/generated/claude/skills/rite-ship/reference/ship-template.md +1 -1
- package/pack/generated/claude/skills/rite-spec/SKILL.md +45 -45
- package/pack/generated/claude/skills/rite-spec/reference/acceptance-criteria.md +4 -4
- package/pack/generated/claude/skills/rite-spec/reference/anti-patterns.md +6 -6
- package/pack/generated/claude/skills/rite-spec/reference/interview-patterns.md +3 -3
- package/pack/generated/claude/skills/rite-spec/reference/investigation.md +21 -21
- package/pack/generated/claude/skills/rite-spec/reference/question-protocol.md +9 -9
- package/pack/generated/claude/skills/rite-spec/reference/references-intake.md +8 -8
- package/pack/generated/claude/skills/rite-spec/reference/spec-checklists.md +19 -19
- package/pack/generated/claude/skills/rite-status/SKILL.md +13 -13
- package/pack/generated/claude/skills/rite-temper/SKILL.md +29 -29
- package/pack/generated/claude/skills/rite-temper/reference/anti-patterns.md +11 -11
- package/pack/generated/claude/skills/rite-temper/reference/review-dimensions.md +20 -20
- package/pack/generated/claude/skills/rite-temper/reference/scope-modes.md +16 -16
- package/pack/generated/claude/skills/rite-temper/reference/significance.md +10 -10
- package/pack/generated/claude/skills/rite-temper/reference/strategy-template.md +14 -14
- package/pack/generated/claude/skills/rite-vet/SKILL.md +31 -31
- package/pack/generated/claude/skills/rite-vet/reference/anti-patterns.md +14 -14
- package/pack/generated/claude/skills/rite-vet/reference/artifacts.md +10 -10
- package/pack/generated/claude/skills/rite-vet/reference/cross-model.md +9 -9
- package/pack/generated/claude/skills/rite-vet/reference/depth.md +14 -14
- package/pack/generated/claude/skills/rite-vet/reference/eng-lenses.md +9 -9
- package/pack/generated/claude/skills/rite-vet/reference/review-axes.md +28 -28
- package/pack/generated/claude/skills/rite-zoom-out/SKILL.md +18 -18
- package/pack/generated/codex/agents/devrites-code-reviewer.toml +21 -22
- package/pack/generated/codex/agents/devrites-devex-reviewer.toml +17 -17
- package/pack/generated/codex/agents/devrites-doubt-reviewer.toml +6 -6
- package/pack/generated/codex/agents/devrites-forge-judge.toml +26 -26
- package/pack/generated/codex/agents/devrites-frontend-reviewer.toml +17 -17
- package/pack/generated/codex/agents/devrites-performance-reviewer.toml +19 -18
- package/pack/generated/codex/agents/devrites-plan-reviewer.toml +29 -27
- package/pack/generated/codex/agents/devrites-retrospector.toml +19 -19
- package/pack/generated/codex/agents/devrites-security-auditor.toml +15 -15
- package/pack/generated/codex/agents/devrites-simplifier-reviewer.toml +14 -14
- package/pack/generated/codex/agents/devrites-slice-wright.toml +52 -51
- package/pack/generated/codex/agents/devrites-spec-reviewer.toml +11 -11
- package/pack/generated/codex/agents/devrites-strategy-reviewer.toml +21 -21
- package/pack/generated/codex/agents/devrites-test-analyst.toml +13 -13
- package/pack/generated/codex/skills/devrites-api-interface/SKILL.md +15 -15
- package/pack/generated/codex/skills/devrites-audit/SKILL.md +10 -10
- package/pack/generated/codex/skills/devrites-browser-proof/SKILL.md +19 -19
- package/pack/generated/codex/skills/devrites-debug-recovery/SKILL.md +17 -17
- package/pack/generated/codex/skills/devrites-debug-recovery/reference/build-the-loop.md +16 -16
- package/pack/generated/codex/skills/devrites-debug-recovery/reference/cleanup-and-classify.md +2 -2
- package/pack/generated/codex/skills/devrites-debug-recovery/reference/hypotheses.md +2 -2
- package/pack/generated/codex/skills/devrites-debug-recovery/reference/regression-test.md +3 -3
- package/pack/generated/codex/skills/devrites-debug-recovery/reference/trace.md +4 -4
- package/pack/generated/codex/skills/devrites-doubt/SKILL.md +17 -17
- package/pack/generated/codex/skills/devrites-frontend-craft/SKILL.md +20 -20
- package/pack/generated/codex/skills/devrites-frontend-craft/reference/craft.md +17 -17
- package/pack/generated/codex/skills/devrites-frontend-craft/reference/design-references.md +25 -25
- package/pack/generated/codex/skills/devrites-frontend-craft/reference/fullstack.md +6 -6
- package/pack/generated/codex/skills/devrites-frontend-craft/reference/quality-standards.md +44 -44
- package/pack/generated/codex/skills/devrites-frontend-craft/reference/reuse-first.md +9 -9
- package/pack/generated/codex/skills/devrites-frontend-craft/reference/shape.md +13 -13
- package/pack/generated/codex/skills/devrites-interview/SKILL.md +30 -30
- package/pack/generated/codex/skills/devrites-lib/SKILL.md +21 -21
- package/pack/generated/codex/skills/devrites-lib/reference/model-tiers.md +5 -5
- package/pack/generated/codex/skills/devrites-lib/reference/parallel-dispatch.md +36 -36
- package/pack/generated/codex/skills/devrites-lib/reference/standards/README.md +10 -10
- package/pack/generated/codex/skills/devrites-lib/reference/standards/afk-hitl.md +33 -33
- package/pack/generated/codex/skills/devrites-lib/reference/standards/agents.md +37 -37
- package/pack/generated/codex/skills/devrites-lib/reference/standards/anti-patterns.md +9 -9
- package/pack/generated/codex/skills/devrites-lib/reference/standards/ci-cd.md +12 -12
- package/pack/generated/codex/skills/devrites-lib/reference/standards/code-review.md +40 -40
- package/pack/generated/codex/skills/devrites-lib/reference/standards/coding-style.md +7 -7
- package/pack/generated/codex/skills/devrites-lib/reference/standards/context-hygiene.md +24 -25
- package/pack/generated/codex/skills/devrites-lib/reference/standards/core.md +23 -23
- package/pack/generated/codex/skills/devrites-lib/reference/standards/definition-of-done.md +1 -1
- package/pack/generated/codex/skills/devrites-lib/reference/standards/deprecation.md +18 -18
- package/pack/generated/codex/skills/devrites-lib/reference/standards/developer-experience.md +29 -29
- package/pack/generated/codex/skills/devrites-lib/reference/standards/development-workflow.md +10 -10
- package/pack/generated/codex/skills/devrites-lib/reference/standards/documentation.md +4 -4
- package/pack/generated/codex/skills/devrites-lib/reference/standards/edge-case-trace.md +1 -1
- package/pack/generated/codex/skills/devrites-lib/reference/standards/elicitation.md +26 -26
- package/pack/generated/codex/skills/devrites-lib/reference/standards/error-handling.md +4 -4
- package/pack/generated/codex/skills/devrites-lib/reference/standards/git-workflow.md +9 -9
- package/pack/generated/codex/skills/devrites-lib/reference/standards/hooks.md +3 -3
- package/pack/generated/codex/skills/devrites-lib/reference/standards/observability.md +15 -15
- package/pack/generated/codex/skills/devrites-lib/reference/standards/patterns.md +8 -8
- package/pack/generated/codex/skills/devrites-lib/reference/standards/performance.md +5 -5
- package/pack/generated/codex/skills/devrites-lib/reference/standards/principles.md +31 -31
- package/pack/generated/codex/skills/devrites-lib/reference/standards/prose-style.md +25 -25
- package/pack/generated/codex/skills/devrites-lib/reference/standards/security.md +30 -30
- package/pack/generated/codex/skills/devrites-lib/reference/standards/skill-authoring.md +11 -11
- package/pack/generated/codex/skills/devrites-lib/reference/standards/spec-grammar.md +30 -30
- package/pack/generated/codex/skills/devrites-lib/reference/standards/testing.md +40 -40
- package/pack/generated/codex/skills/devrites-lib/reference/standards/tooling.md +26 -26
- package/pack/generated/codex/skills/devrites-prose-craft/SKILL.md +8 -8
- package/pack/generated/codex/skills/devrites-refresh-indexes/SKILL.md +9 -9
- package/pack/generated/codex/skills/devrites-source-driven/SKILL.md +11 -11
- package/pack/generated/codex/skills/devrites-ux-shape/SKILL.md +36 -36
- package/pack/generated/codex/skills/devrites-ux-shape/reference/brief-template.md +6 -6
- package/pack/generated/codex/skills/devrites-ux-shape/reference/visual-direction-probe.md +9 -9
- package/pack/generated/codex/skills/rite/SKILL.md +10 -10
- package/pack/generated/codex/skills/rite/reference/menu.md +6 -6
- package/pack/generated/codex/skills/rite-adopt/SKILL.md +18 -18
- package/pack/generated/codex/skills/rite-adopt/reference/adoption.md +9 -9
- package/pack/generated/codex/skills/rite-adopt/reference/anti-patterns.md +6 -6
- package/pack/generated/codex/skills/rite-autocomplete/SKILL.md +17 -17
- package/pack/generated/codex/skills/rite-autocomplete/reference/decision-policy.md +4 -4
- package/pack/generated/codex/skills/rite-autocomplete/reference/loop.md +7 -7
- package/pack/generated/codex/skills/rite-autocomplete/reference/stop-conditions.md +7 -7
- package/pack/generated/codex/skills/rite-build/SKILL.md +25 -25
- package/pack/generated/codex/skills/rite-build/reference/afk-discipline.md +9 -9
- package/pack/generated/codex/skills/rite-build/reference/anti-patterns.md +6 -6
- package/pack/generated/codex/skills/rite-build/reference/checkpoint-protocol.md +14 -14
- package/pack/generated/codex/skills/rite-build/reference/checkpoint.md +8 -8
- package/pack/generated/codex/skills/rite-build/reference/evidence-standard.md +1 -1
- package/pack/generated/codex/skills/rite-build/reference/forge.md +28 -29
- package/pack/generated/codex/skills/rite-build/reference/frontend-trigger.md +2 -2
- package/pack/generated/codex/skills/rite-build/reference/one-slice-cycle.md +3 -3
- package/pack/generated/codex/skills/rite-build/reference/output.md +1 -1
- package/pack/generated/codex/skills/rite-build/reference/phase-contract.md +44 -44
- package/pack/generated/codex/skills/rite-build/reference/spec-drift-guard.md +1 -1
- package/pack/generated/codex/skills/rite-build/reference/tdd.md +6 -6
- package/pack/generated/codex/skills/rite-build/reference/wright-dispatch.md +23 -23
- package/pack/generated/codex/skills/rite-converge/SKILL.md +20 -20
- package/pack/generated/codex/skills/rite-converge/reference/anti-patterns.md +7 -7
- package/pack/generated/codex/skills/rite-converge/reference/convergence-assessment.md +14 -14
- package/pack/generated/codex/skills/rite-customize/SKILL.md +5 -5
- package/pack/generated/codex/skills/rite-define/SKILL.md +28 -28
- package/pack/generated/codex/skills/rite-define/reference/anti-patterns.md +5 -5
- package/pack/generated/codex/skills/rite-define/reference/gates.md +13 -13
- package/pack/generated/codex/skills/rite-define/reference/plan-template.md +1 -1
- package/pack/generated/codex/skills/rite-doctor/SKILL.md +14 -14
- package/pack/generated/codex/skills/rite-dogfood/SKILL.md +5 -5
- package/pack/generated/codex/skills/rite-explain/SKILL.md +25 -25
- package/pack/generated/codex/skills/rite-explain/reference/intake.md +16 -16
- package/pack/generated/codex/skills/rite-frame/SKILL.md +25 -25
- package/pack/generated/codex/skills/rite-frame/reference/failure-modes.md +13 -13
- package/pack/generated/codex/skills/rite-handoff/SKILL.md +15 -15
- package/pack/generated/codex/skills/rite-learn/SKILL.md +26 -26
- package/pack/generated/codex/skills/rite-plan/SKILL.md +24 -24
- package/pack/generated/codex/skills/rite-plan/reference/anti-patterns.md +3 -3
- package/pack/generated/codex/skills/rite-plan/reference/dependency-graph.md +1 -1
- package/pack/generated/codex/skills/rite-plan/reference/replan-and-repair.md +3 -3
- package/pack/generated/codex/skills/rite-plan/reference/slicing.md +9 -9
- package/pack/generated/codex/skills/rite-plan/reference/task-breakdown.md +3 -3
- package/pack/generated/codex/skills/rite-polish/SKILL.md +14 -14
- package/pack/generated/codex/skills/rite-polish/reference/anti-patterns.md +8 -8
- package/pack/generated/codex/skills/rite-polish/reference/backend-polish.md +13 -13
- package/pack/generated/codex/skills/rite-polish/reference/browser-polish-evidence.md +4 -4
- package/pack/generated/codex/skills/rite-polish/reference/code.md +26 -26
- package/pack/generated/codex/skills/rite-polish/reference/harden-checklist.md +31 -31
- package/pack/generated/codex/skills/rite-polish/reference/ui.md +23 -23
- package/pack/generated/codex/skills/rite-pov/SKILL.md +6 -6
- package/pack/generated/codex/skills/rite-pr-feedback/SKILL.md +5 -5
- package/pack/generated/codex/skills/rite-pressure-test/SKILL.md +17 -17
- package/pack/generated/codex/skills/rite-prototype/SKILL.md +16 -16
- package/pack/generated/codex/skills/rite-prove/SKILL.md +20 -20
- package/pack/generated/codex/skills/rite-prove/reference/anti-patterns.md +4 -4
- package/pack/generated/codex/skills/rite-prove/reference/browser-proof.md +2 -2
- package/pack/generated/codex/skills/rite-prove/reference/failure-triage.md +4 -4
- package/pack/generated/codex/skills/rite-prove/reference/proof-ladder.md +6 -6
- package/pack/generated/codex/skills/rite-prove/reference/test-command-discovery.md +1 -1
- package/pack/generated/codex/skills/rite-quick/SKILL.md +25 -25
- package/pack/generated/codex/skills/rite-resolve/SKILL.md +21 -21
- package/pack/generated/codex/skills/rite-resolve/reference/answer-protocol.md +7 -7
- package/pack/generated/codex/skills/rite-review/SKILL.md +37 -37
- package/pack/generated/codex/skills/rite-review/reference/anti-patterns.md +4 -4
- package/pack/generated/codex/skills/rite-review/reference/cognitive-load.md +22 -22
- package/pack/generated/codex/skills/rite-review/reference/feature-scoped-review.md +2 -2
- package/pack/generated/codex/skills/rite-review/reference/five-axis-review.md +8 -8
- package/pack/generated/codex/skills/rite-review/reference/nielsen-heuristics.md +14 -14
- package/pack/generated/codex/skills/rite-review/reference/performance-checklist.md +14 -14
- package/pack/generated/codex/skills/rite-review/reference/security-review.md +9 -9
- package/pack/generated/codex/skills/rite-seal/SKILL.md +29 -29
- package/pack/generated/codex/skills/rite-seal/reference/anti-patterns.md +8 -8
- package/pack/generated/codex/skills/rite-seal/reference/conventions-ledger.md +8 -8
- package/pack/generated/codex/skills/rite-seal/reference/final-evidence.md +9 -9
- package/pack/generated/codex/skills/rite-seal/reference/go-no-go.md +9 -9
- package/pack/generated/codex/skills/rite-seal/reference/phase-contract.md +43 -43
- package/pack/generated/codex/skills/rite-ship/SKILL.md +15 -15
- package/pack/generated/codex/skills/rite-ship/reference/anti-patterns.md +5 -5
- package/pack/generated/codex/skills/rite-ship/reference/close-out.md +2 -2
- package/pack/generated/codex/skills/rite-ship/reference/design-memory.md +22 -22
- package/pack/generated/codex/skills/rite-ship/reference/git-ship.md +10 -10
- package/pack/generated/codex/skills/rite-ship/reference/ledger.md +9 -9
- package/pack/generated/codex/skills/rite-ship/reference/rollout.md +11 -11
- package/pack/generated/codex/skills/rite-ship/reference/ship-template.md +1 -1
- package/pack/generated/codex/skills/rite-spec/SKILL.md +48 -48
- package/pack/generated/codex/skills/rite-spec/reference/acceptance-criteria.md +4 -4
- package/pack/generated/codex/skills/rite-spec/reference/anti-patterns.md +6 -6
- package/pack/generated/codex/skills/rite-spec/reference/interview-patterns.md +3 -3
- package/pack/generated/codex/skills/rite-spec/reference/investigation.md +21 -21
- package/pack/generated/codex/skills/rite-spec/reference/question-protocol.md +9 -9
- package/pack/generated/codex/skills/rite-spec/reference/references-intake.md +8 -8
- package/pack/generated/codex/skills/rite-spec/reference/spec-checklists.md +19 -19
- package/pack/generated/codex/skills/rite-status/SKILL.md +16 -16
- package/pack/generated/codex/skills/rite-temper/SKILL.md +32 -32
- package/pack/generated/codex/skills/rite-temper/reference/anti-patterns.md +11 -11
- package/pack/generated/codex/skills/rite-temper/reference/review-dimensions.md +20 -20
- package/pack/generated/codex/skills/rite-temper/reference/scope-modes.md +16 -16
- package/pack/generated/codex/skills/rite-temper/reference/significance.md +10 -10
- package/pack/generated/codex/skills/rite-temper/reference/strategy-template.md +14 -14
- package/pack/generated/codex/skills/rite-vet/SKILL.md +34 -34
- package/pack/generated/codex/skills/rite-vet/reference/anti-patterns.md +14 -14
- package/pack/generated/codex/skills/rite-vet/reference/artifacts.md +10 -10
- package/pack/generated/codex/skills/rite-vet/reference/cross-model.md +9 -9
- package/pack/generated/codex/skills/rite-vet/reference/depth.md +14 -14
- package/pack/generated/codex/skills/rite-vet/reference/eng-lenses.md +9 -9
- package/pack/generated/codex/skills/rite-vet/reference/review-axes.md +28 -28
- package/pack/generated/codex/skills/rite-zoom-out/SKILL.md +21 -21
- package/package.json +2 -2
- package/scripts/build-binaries.sh +1 -1
- package/scripts/build-host-artifacts.sh +1 -1
- package/scripts/build-release-tarball.sh +1 -1
- package/scripts/check-cross-refs.py +8 -8
- package/scripts/check-invocation-integrity.py +4 -4
- package/scripts/check-no-global-writes.sh +2 -2
- package/scripts/check-reply-contract.sh +1 -1
- package/scripts/check-rule-uniqueness.sh +2 -2
- package/scripts/codex-generate.sh +5 -5
- package/scripts/devrites-detect.sh +33 -33
- package/scripts/eval-runner.py +7 -7
- package/scripts/grade-feature.sh +14 -14
- package/scripts/install-lib.sh +2 -2
- package/scripts/pin.sh +12 -12
- package/scripts/run-behavioral-evals.sh +12 -12
- package/scripts/run-evals.sh +1 -1
- package/scripts/run-outcome-evals.sh +12 -12
- package/scripts/scan-pack-security.py +4 -4
- package/scripts/scan-supply-chain-iocs.py +7 -7
- package/scripts/skills-inventory.mjs +7 -8
- package/scripts/sync-version.sh +2 -2
- package/scripts/validate-workflow-security.py +12 -6
- package/scripts/validate-workspace-schema.py +2 -2
- package/scripts/validate.sh +7 -7
|
@@ -15,10 +15,10 @@ import (
|
|
|
15
15
|
// written, so a coverage gap surfaces as a one-line plan edit rather than a reslice
|
|
16
16
|
// mid-build. It emits a markdown report and flags:
|
|
17
17
|
//
|
|
18
|
-
// Coverage
|
|
19
|
-
// Consistency
|
|
20
|
-
// Orphan slice
|
|
21
|
-
// Ambiguity
|
|
18
|
+
// Coverage : a spec AC id that no slice Satisfies (CRITICAL)
|
|
19
|
+
// Consistency : a slice that Satisfies an AC the spec never defines (CRITICAL)
|
|
20
|
+
// Orphan slice: a slice that satisfies no acceptance criterion (warn)
|
|
21
|
+
// Ambiguity : an unquantified vague adjective or unresolved
|
|
22
22
|
// placeholder in the spec (warn)
|
|
23
23
|
//
|
|
24
24
|
// It closes with a Metrics line (criteria count, coverage %, orphan + ambiguity
|
|
@@ -69,14 +69,14 @@ func Analyze(root string, args []string, stdout, stderr io.Writer) int {
|
|
|
69
69
|
covered := 0
|
|
70
70
|
fmt.Fprintln(stdout, "## Coverage")
|
|
71
71
|
if len(specACs) == 0 {
|
|
72
|
-
fmt.Fprintln(stdout, "- [warn] spec.md
|
|
72
|
+
fmt.Fprintln(stdout, "- [warn] spec.md: no AC-### acceptance ids found; tag criteria for a machine-checkable gate.")
|
|
73
73
|
} else {
|
|
74
74
|
for _, ac := range specACs {
|
|
75
75
|
if taskSet[ac] {
|
|
76
76
|
covered++
|
|
77
|
-
fmt.Fprintf(stdout, "- [ok] %s
|
|
77
|
+
fmt.Fprintf(stdout, "- [ok] %s: covered\n", ac)
|
|
78
78
|
} else {
|
|
79
|
-
fmt.Fprintf(stdout, "- [CRITICAL] %s (spec.md)
|
|
79
|
+
fmt.Fprintf(stdout, "- [CRITICAL] %s (spec.md): no slice Satisfies it (uncovered)\n", ac)
|
|
80
80
|
crit++
|
|
81
81
|
}
|
|
82
82
|
}
|
|
@@ -88,7 +88,7 @@ func Analyze(root string, args []string, stdout, stderr io.Writer) int {
|
|
|
88
88
|
if len(taskACs) > 0 {
|
|
89
89
|
for _, ac := range taskACs {
|
|
90
90
|
if !specSet[ac] {
|
|
91
|
-
fmt.Fprintf(stdout, "- [CRITICAL] %s (tasks.md)
|
|
91
|
+
fmt.Fprintf(stdout, "- [CRITICAL] %s (tasks.md): referenced by a slice but not defined in spec.md (dangling)\n", ac)
|
|
92
92
|
crit++
|
|
93
93
|
}
|
|
94
94
|
}
|
|
@@ -99,7 +99,7 @@ func Analyze(root string, args []string, stdout, stderr io.Writer) int {
|
|
|
99
99
|
for _, name := range orphanSlices(tasksData) {
|
|
100
100
|
if name != "" {
|
|
101
101
|
orphans++
|
|
102
|
-
fmt.Fprintf(stdout, "- [warn] slice '%s'
|
|
102
|
+
fmt.Fprintf(stdout, "- [warn] slice '%s': satisfies no acceptance criterion (add Satisfies, or justify)\n", name)
|
|
103
103
|
}
|
|
104
104
|
}
|
|
105
105
|
|
|
@@ -127,17 +127,17 @@ func Analyze(root string, args []string, stdout, stderr io.Writer) int {
|
|
|
127
127
|
|
|
128
128
|
fmt.Fprintln(stdout)
|
|
129
129
|
if crit > 0 {
|
|
130
|
-
fmt.Fprintf(stdout, "## Verdict: BLOCKED
|
|
130
|
+
fmt.Fprintf(stdout, "## Verdict: BLOCKED: %d CRITICAL finding(s). Resolve before %s.\n", crit, workflow.ForVerb("build").Both())
|
|
131
131
|
return 1
|
|
132
132
|
}
|
|
133
|
-
fmt.Fprintln(stdout, "## Verdict: clear
|
|
133
|
+
fmt.Fprintln(stdout, "## Verdict: clear: spec/tasks consistent and fully mapped.")
|
|
134
134
|
return 0
|
|
135
135
|
}
|
|
136
136
|
|
|
137
137
|
// ambiguityFindings scans spec text for unfalsifiable criteria: a vague quality
|
|
138
138
|
// adjective (fast, robust, secure …) on a line with no number to pin it down, or an
|
|
139
139
|
// unresolved placeholder (TODO, ???, <placeholder> …). Code fences are skipped. One
|
|
140
|
-
// finding per line
|
|
140
|
+
// finding per line: a placeholder takes precedence over an adjective. 1-based lines.
|
|
141
141
|
func ambiguityFindings(specData []byte) []string {
|
|
142
142
|
var out []string
|
|
143
143
|
inFence := false
|
|
@@ -151,16 +151,16 @@ func ambiguityFindings(specData []byte) []string {
|
|
|
151
151
|
}
|
|
152
152
|
ln := i + 1
|
|
153
153
|
if m := placeholderRe.FindString(line); m != "" {
|
|
154
|
-
out = append(out, fmt.Sprintf("- [warn] spec.md:L%d
|
|
154
|
+
out = append(out, fmt.Sprintf("- [warn] spec.md:L%d: unresolved placeholder %q", ln, m))
|
|
155
155
|
continue
|
|
156
156
|
}
|
|
157
|
-
// Strip the AC id before the digit gate
|
|
157
|
+
// Strip the AC id before the digit gate: else the id's own digit masks
|
|
158
158
|
// a vague adjective on the very criterion line it tags.
|
|
159
159
|
bare := acIDRe.ReplaceAllString(line, "")
|
|
160
160
|
bare = taskACRe.ReplaceAllString(bare, "")
|
|
161
161
|
if !analyzeDigitRe.MatchString(bare) {
|
|
162
162
|
if m := vagueAdjRe.FindString(bare); m != "" {
|
|
163
|
-
out = append(out, fmt.Sprintf("- [warn] spec.md:L%d
|
|
163
|
+
out = append(out, fmt.Sprintf("- [warn] spec.md:L%d: %q is not quantified; state a measurable target", ln, m))
|
|
164
164
|
}
|
|
165
165
|
}
|
|
166
166
|
}
|
|
@@ -10,7 +10,7 @@ import (
|
|
|
10
10
|
)
|
|
11
11
|
|
|
12
12
|
// ArchiveSearch surfaces shipped features whose spec.md overlaps a query, so
|
|
13
|
-
// /rite-spec can spot prior art before writing a new spec
|
|
13
|
+
// /rite-spec can spot prior art before writing a new spec: an extension, a
|
|
14
14
|
// conflict, or a re-spec of solved work. It is advisory, not a gate: it always
|
|
15
15
|
// exits 0 when it runs (empty output means no overlap), and reserves exit 2 for
|
|
16
16
|
// a missing query. The query is the feature's key nouns, one or many args; a
|
|
@@ -36,7 +36,7 @@ func ArchiveSearch(root string, args []string, stdout, stderr io.Writer) int {
|
|
|
36
36
|
|
|
37
37
|
entries, err := os.ReadDir(filepath.Join(root, "archive"))
|
|
38
38
|
if err != nil {
|
|
39
|
-
// No archive yet
|
|
39
|
+
// No archive yet: no prior art to surface. Silent, successful no-op.
|
|
40
40
|
return 0
|
|
41
41
|
}
|
|
42
42
|
|
|
@@ -80,7 +80,7 @@ func ArchiveSearch(root string, args []string, stdout, stderr io.Writer) int {
|
|
|
80
80
|
}
|
|
81
81
|
|
|
82
82
|
// specTitle returns the spec's first Markdown heading, or its first non-empty
|
|
83
|
-
// line, as a one-line label
|
|
83
|
+
// line, as a one-line label: empty when the spec has neither.
|
|
84
84
|
func specTitle(b []byte) string {
|
|
85
85
|
for _, line := range strings.Split(string(b), "\n") {
|
|
86
86
|
line = strings.TrimSpace(line)
|
|
@@ -10,7 +10,7 @@ import (
|
|
|
10
10
|
// The context-budget lint. A feature is deliberately a directory of small,
|
|
11
11
|
// single-concern files rather than one long document: each file stays
|
|
12
12
|
// context-cheap to read, and completeness is self-evident from which files
|
|
13
|
-
// exist. That discipline only holds if the files stay small
|
|
13
|
+
// exist. That discipline only holds if the files stay small: a spec.md that
|
|
14
14
|
// grows to 800 lines is a "sausage" that an agent must load whole, spending the
|
|
15
15
|
// context window it was meant to conserve. Budget measures every workspace file
|
|
16
16
|
// against a per-file line ceiling and flags the overgrown ones.
|
|
@@ -107,10 +107,10 @@ func Budget(root string, args []string, stdout, stderr io.Writer) int {
|
|
|
107
107
|
return 0
|
|
108
108
|
}
|
|
109
109
|
if strict {
|
|
110
|
-
fmt.Fprintf(stdout, "budget: %d file(s) over the line budget
|
|
110
|
+
fmt.Fprintf(stdout, "budget: %d file(s) over the line budget: split or trim them\n", over)
|
|
111
111
|
return 3
|
|
112
112
|
}
|
|
113
|
-
fmt.Fprintf(stdout, "budget: %d file(s) over the line budget (advisory
|
|
113
|
+
fmt.Fprintf(stdout, "budget: %d file(s) over the line budget (advisory: pass --strict to fail)\n", over)
|
|
114
114
|
return 0
|
|
115
115
|
}
|
|
116
116
|
|
|
@@ -12,7 +12,7 @@ import (
|
|
|
12
12
|
)
|
|
13
13
|
|
|
14
14
|
// BuildReadiness decides whether a feature is ready to build, reading only its
|
|
15
|
-
// recorded state (state.md)
|
|
15
|
+
// recorded state (state.md): an open HITL question, a blocked plan, or an
|
|
16
16
|
// unapproved plan each stops the build with a distinct, actionable exit code
|
|
17
17
|
// rather than trusting the model to honour a prose checklist. It never mutates
|
|
18
18
|
// the workspace.
|
|
@@ -33,7 +33,7 @@ func BuildReadiness(root string, args []string, stdout, stderr io.Writer) int {
|
|
|
33
33
|
if shown == "" {
|
|
34
34
|
shown = "<unset>"
|
|
35
35
|
}
|
|
36
|
-
fmt.Fprintf(stderr, "readiness: no active workspace/state.md (slug=%s)
|
|
36
|
+
fmt.Fprintf(stderr, "readiness: no active workspace/state.md (slug=%s): run %s <feature>\n", shown, workflow.ForVerb("spec").Both())
|
|
37
37
|
return 5
|
|
38
38
|
}
|
|
39
39
|
|
|
@@ -43,16 +43,16 @@ func BuildReadiness(root string, args []string, stdout, stderr io.Writer) int {
|
|
|
43
43
|
status := readinessField(lines, "Status")
|
|
44
44
|
switch status {
|
|
45
45
|
case "awaiting_human":
|
|
46
|
-
fmt.Fprintf(stderr, "readiness: STOP
|
|
46
|
+
fmt.Fprintf(stderr, "readiness: STOP: Status: awaiting_human. Resume with %s <qid> \"<answer>\".\n", workflow.ForVerb("resolve").Both())
|
|
47
47
|
return 3
|
|
48
48
|
case "blocked":
|
|
49
|
-
fmt.Fprintf(stderr, "readiness: STOP
|
|
49
|
+
fmt.Fprintf(stderr, "readiness: STOP: Status: blocked. Repair with %s repair (or unblock).\n", workflow.ForVerb("plan").Both())
|
|
50
50
|
return 4
|
|
51
51
|
}
|
|
52
52
|
|
|
53
53
|
approved := readinessField(lines, "Plan approved")
|
|
54
54
|
if approved == "" || approved == "none" {
|
|
55
|
-
fmt.Fprintf(stderr, "readiness: STOP
|
|
55
|
+
fmt.Fprintf(stderr, "readiness: STOP: plan not approved (state.md has no \"Plan approved\"). Run %s.\n", workflow.ForVerb("define").Both())
|
|
56
56
|
return 2
|
|
57
57
|
}
|
|
58
58
|
|
|
@@ -60,7 +60,7 @@ func BuildReadiness(root string, args []string, stdout, stderr io.Writer) int {
|
|
|
60
60
|
if shownStatus == "" {
|
|
61
61
|
shownStatus = "running"
|
|
62
62
|
}
|
|
63
|
-
fmt.Fprintf(stdout, "readiness: OK
|
|
63
|
+
fmt.Fprintf(stdout, "readiness: OK: plan approved %s, status %s. Ready to build.\n", approved, shownStatus)
|
|
64
64
|
return 0
|
|
65
65
|
}
|
|
66
66
|
|
|
@@ -9,7 +9,7 @@ import (
|
|
|
9
9
|
"strings"
|
|
10
10
|
)
|
|
11
11
|
|
|
12
|
-
// Executable acceptance criteria
|
|
12
|
+
// Executable acceptance criteria: a port of check-acceptance.sh. Grades the
|
|
13
13
|
// AC-### acceptance criteria in spec.md against seal.md: each spec
|
|
14
14
|
// criterion must be checked ([x]) in seal.md. Without ids it falls back to a
|
|
15
15
|
// count/unchecked heuristic. The spec-time mirror is SpecValidate (shape); this
|
|
@@ -41,7 +41,7 @@ func CheckAcceptance(ws string, stdout, stderr io.Writer) int {
|
|
|
41
41
|
return 5
|
|
42
42
|
}
|
|
43
43
|
if !isFile(seal) {
|
|
44
|
-
fmt.Fprintf(stderr, "check-acceptance: no seal.md in %s
|
|
44
|
+
fmt.Fprintf(stderr, "check-acceptance: no seal.md in %s: feature not sealed\n", ws)
|
|
45
45
|
return 5
|
|
46
46
|
}
|
|
47
47
|
|
|
@@ -57,14 +57,14 @@ func CheckAcceptance(ws string, stdout, stderr io.Writer) int {
|
|
|
57
57
|
}
|
|
58
58
|
|
|
59
59
|
if sectionEmpty(specBody) {
|
|
60
|
-
fmt.Fprintln(stderr, "check-acceptance: spec.md has no \"## Acceptance criteria\" section
|
|
60
|
+
fmt.Fprintln(stderr, "check-acceptance: spec.md has no \"## Acceptance criteria\" section: nothing to grade")
|
|
61
61
|
return 1
|
|
62
62
|
}
|
|
63
63
|
|
|
64
64
|
specIDs := sortedUniqueIDs(specBody)
|
|
65
65
|
|
|
66
66
|
if len(specIDs) > 0 {
|
|
67
|
-
// ID mode
|
|
67
|
+
// ID mode: each spec AC id must be checked ([x]) in seal.md.
|
|
68
68
|
checkedIDs := map[string]bool{}
|
|
69
69
|
for _, line := range sealBody {
|
|
70
70
|
if checkedRe.MatchString(line) {
|
|
@@ -85,18 +85,18 @@ func CheckAcceptance(ws string, stdout, stderr io.Writer) int {
|
|
|
85
85
|
total-len(missing), total, " "+strings.Join(missing, " "))
|
|
86
86
|
return 1
|
|
87
87
|
}
|
|
88
|
-
fmt.Fprintf(stdout, "check-acceptance: OK
|
|
88
|
+
fmt.Fprintf(stdout, "check-acceptance: OK: all %d acceptance criteria (%s) proven + checked in seal.md\n",
|
|
89
89
|
total, strings.Join(specIDs, " "))
|
|
90
90
|
return 0
|
|
91
91
|
}
|
|
92
92
|
|
|
93
|
-
// Fallback (no ids)
|
|
93
|
+
// Fallback (no ids): count spec criteria vs seal checked/unchecked items.
|
|
94
94
|
specN := countMatching(specBody, bulletRe)
|
|
95
95
|
sealTotal := countMatching(sealBody, checkboxRe)
|
|
96
96
|
sealUnchecked := countMatching(sealBody, uncheckedRe)
|
|
97
97
|
|
|
98
98
|
if sealTotal < specN {
|
|
99
|
-
fmt.Fprintf(stderr, "check-acceptance: seal.md lists %d acceptance items but spec.md has %d criteria
|
|
99
|
+
fmt.Fprintf(stderr, "check-acceptance: seal.md lists %d acceptance items but spec.md has %d criteria: %d dropped. (Tag criteria AC-### to grade by id.)\n",
|
|
100
100
|
sealTotal, specN, specN-sealTotal)
|
|
101
101
|
return 1
|
|
102
102
|
}
|
|
@@ -104,12 +104,12 @@ func CheckAcceptance(ws string, stdout, stderr io.Writer) int {
|
|
|
104
104
|
fmt.Fprintf(stderr, "check-acceptance: %d acceptance criterion(s) unchecked in seal.md (unproven). (Tag criteria AC-### to grade by id.)\n", sealUnchecked)
|
|
105
105
|
return 1
|
|
106
106
|
}
|
|
107
|
-
fmt.Fprintf(stdout, "check-acceptance: OK
|
|
107
|
+
fmt.Fprintf(stdout, "check-acceptance: OK: %d acceptance items all checked in seal.md (no ids; add AC-### for id-level grading)\n", sealTotal)
|
|
108
108
|
return 0
|
|
109
109
|
}
|
|
110
110
|
|
|
111
111
|
// acSection returns the body lines under an "## Acceptance Criteria" heading
|
|
112
|
-
// (case-insensitive on the words), up to the next "## " heading
|
|
112
|
+
// (case-insensitive on the words), up to the next "## " heading: mirroring the
|
|
113
113
|
// awk one-liner in check-acceptance.sh.
|
|
114
114
|
func acSection(file string) ([]string, error) {
|
|
115
115
|
f, err := os.Open(file)
|
|
@@ -140,7 +140,7 @@ func acSection(file string) ([]string, error) {
|
|
|
140
140
|
// sectionEmpty reports whether the acceptance body is empty in the bash sense:
|
|
141
141
|
// awk emits each in-section line with a trailing newline, $() strips the trailing
|
|
142
142
|
// newlines, and `[ -z ]` tests the remainder. A body of only blank lines collapses
|
|
143
|
-
// to ""
|
|
143
|
+
// to "", so a heading followed by blanks is "nothing to grade", not a fallback.
|
|
144
144
|
func sectionEmpty(lines []string) bool {
|
|
145
145
|
return strings.TrimRight(strings.Join(lines, "\n"), "\n") == ""
|
|
146
146
|
}
|
|
@@ -9,7 +9,7 @@ import (
|
|
|
9
9
|
|
|
10
10
|
// CloseOut retires a shipped feature: it moves the feature directory into the
|
|
11
11
|
// archive and, when the feature is still the active one, clears the ACTIVE cursor
|
|
12
|
-
// so the next /rite-spec starts clean. The workspace is relocated, never deleted
|
|
12
|
+
// so the next /rite-spec starts clean. The workspace is relocated, never deleted:
|
|
13
13
|
// the audit trail is preserved under archive/<slug>.
|
|
14
14
|
//
|
|
15
15
|
// args is `<slug> [devrites-dir]`. The optional second argument overrides the
|
|
@@ -18,7 +18,7 @@ import (
|
|
|
18
18
|
//
|
|
19
19
|
// 0 archived (ACTIVE cleared if it pointed here)
|
|
20
20
|
// 4 no slug given, or the feature has no workspace
|
|
21
|
-
// 5 an archive already exists at the destination
|
|
21
|
+
// 5 an archive already exists at the destination: refuse to clobber it
|
|
22
22
|
func CloseOut(root string, args []string, stdout, stderr io.Writer) int {
|
|
23
23
|
slug := argAt(args, 0)
|
|
24
24
|
dv := argAt(args, 1)
|
|
@@ -41,12 +41,12 @@ func CloseOut(root string, args []string, stdout, stderr io.Writer) int {
|
|
|
41
41
|
// A broken symlink at the destination still counts as "already there", so use
|
|
42
42
|
// Lstat rather than Stat to avoid silently overwriting it.
|
|
43
43
|
if _, err := os.Lstat(arch); err == nil {
|
|
44
|
-
fmt.Fprintf(stderr, "close-out: archive already exists at %s
|
|
44
|
+
fmt.Fprintf(stderr, "close-out: archive already exists at %s: refusing to clobber\n", arch)
|
|
45
45
|
return 5
|
|
46
46
|
}
|
|
47
47
|
|
|
48
48
|
// Fail closed: if the move does not happen, leave the cursor alone and do not
|
|
49
|
-
// claim success
|
|
49
|
+
// claim success: a lost audit trail must never look like a clean close-out.
|
|
50
50
|
if err := os.MkdirAll(filepath.Join(dv, "archive"), 0o755); err != nil {
|
|
51
51
|
fmt.Fprintf(stderr, "close-out: cannot create archive dir: %v\n", err)
|
|
52
52
|
return 1
|
|
@@ -64,6 +64,6 @@ func CloseOut(root string, args []string, stdout, stderr io.Writer) int {
|
|
|
64
64
|
return 0
|
|
65
65
|
}
|
|
66
66
|
}
|
|
67
|
-
fmt.Fprintf(stdout, "close-out: archived %s -> %s (ACTIVE pointed elsewhere
|
|
67
|
+
fmt.Fprintf(stdout, "close-out: archived %s -> %s (ACTIVE pointed elsewhere: left as-is)\n", slug, filepath.ToSlash(arch))
|
|
68
68
|
return 0
|
|
69
69
|
}
|
|
@@ -162,7 +162,7 @@ func conventionsPromote(args []string, stdout, stderr io.Writer) int {
|
|
|
162
162
|
}
|
|
163
163
|
if !already {
|
|
164
164
|
e.Corroborations++
|
|
165
|
-
e.Proofs = append(e.Proofs, fmt.Sprintf("%s %s
|
|
165
|
+
e.Proofs = append(e.Proofs, fmt.Sprintf("%s %s: %s", slug, conventionDate(date), evidence))
|
|
166
166
|
}
|
|
167
167
|
entries[key] = e
|
|
168
168
|
if err := saveConventions(root, entries); err != nil {
|
|
@@ -202,7 +202,7 @@ func conventionsContradict(args []string, stdout, stderr io.Writer) int {
|
|
|
202
202
|
}
|
|
203
203
|
when := conventionDate(date)
|
|
204
204
|
e.Contradictions++
|
|
205
|
-
e.Proofs = append(e.Proofs, fmt.Sprintf("%s %s
|
|
205
|
+
e.Proofs = append(e.Proofs, fmt.Sprintf("%s %s: CONTRADICTED: %s", slug, when, evidence))
|
|
206
206
|
entries[key] = e
|
|
207
207
|
if err := saveConventions(root, entries); err != nil {
|
|
208
208
|
fmt.Fprintln(stderr, err)
|
|
@@ -240,7 +240,7 @@ func conventionsContradict(args []string, stdout, stderr io.Writer) int {
|
|
|
240
240
|
return 1
|
|
241
241
|
}
|
|
242
242
|
}
|
|
243
|
-
fmt.Fprintf(stdout, "DRIFT: convention '%s' contradicted by %s
|
|
243
|
+
fmt.Fprintf(stdout, "DRIFT: convention '%s' contradicted by %s: now %s\n", key, slug, state)
|
|
244
244
|
return 0
|
|
245
245
|
}
|
|
246
246
|
|
|
@@ -49,11 +49,11 @@ func Coverage(root string, args []string, stdout, stderr io.Writer) int {
|
|
|
49
49
|
|
|
50
50
|
specBytes, err := os.ReadFile(filepath.Join(dir, "spec.md"))
|
|
51
51
|
if err != nil {
|
|
52
|
-
fmt.Fprintln(stderr, "coverage: no spec.md
|
|
52
|
+
fmt.Fprintln(stderr, "coverage: no spec.md: nothing to map.")
|
|
53
53
|
return 2
|
|
54
54
|
}
|
|
55
55
|
|
|
56
|
-
// tasks.md / seal.md are optional inputs
|
|
56
|
+
// tasks.md / seal.md are optional inputs: a missing one just yields
|
|
57
57
|
// UNCOVERED slices / pending proof, never an error.
|
|
58
58
|
tasks, haveTasks := readFileOK(filepath.Join(dir, "tasks.md"))
|
|
59
59
|
seal, haveSeal := readFileOK(filepath.Join(dir, "seal.md"))
|
|
@@ -69,7 +69,7 @@ func Coverage(root string, args []string, stdout, stderr io.Writer) int {
|
|
|
69
69
|
slices = slicesForAC(tasks, ac)
|
|
70
70
|
}
|
|
71
71
|
if slices == "" {
|
|
72
|
-
slices = "
|
|
72
|
+
slices = "(UNCOVERED)"
|
|
73
73
|
}
|
|
74
74
|
proven := "pending"
|
|
75
75
|
if haveSeal && provenInSeal(seal, ac) {
|
|
@@ -108,7 +108,7 @@ func acIDs(spec string) []string {
|
|
|
108
108
|
// slicesForAC returns the `;`-joined slice headers whose `Satisfies:` line names
|
|
109
109
|
// ac, in file order. It reproduces the script's awk exactly, including its two
|
|
110
110
|
// quirks: the current `## Slice …` header persists to the next Satisfies line,
|
|
111
|
-
// and the match is a substring test
|
|
111
|
+
// and the match is a substring test, so ac "AC1" also matches a slice that
|
|
112
112
|
// satisfies "AC10". Faithful parity requires preserving both.
|
|
113
113
|
func slicesForAC(tasks, ac string) string {
|
|
114
114
|
var matched []string
|
|
@@ -10,14 +10,14 @@ import (
|
|
|
10
10
|
|
|
11
11
|
// DoubtCoverage answers a single deterministic question: did the build doubt the
|
|
12
12
|
// decisions it stood? It reads only records /rite-build writes, so it is
|
|
13
|
-
// zero-token and cannot fabricate a verdict-per-decision match
|
|
13
|
+
// zero-token and cannot fabricate a verdict-per-decision match: the seal's prose
|
|
14
14
|
// gate and the reviewer fan-out judge the rest.
|
|
15
15
|
//
|
|
16
16
|
// Two signals, checked in order:
|
|
17
17
|
//
|
|
18
|
-
// 1. decisions.md `doubt: MISSING
|
|
18
|
+
// 1. decisions.md `doubt: MISSING`: a stood decision recorded but never
|
|
19
19
|
// doubted. The unambiguous skip; checked first, on every path.
|
|
20
|
-
// 2. footprint.log `wright` vs `doubt` lines
|
|
20
|
+
// 2. footprint.log `wright` vs `doubt` lines: wright dispatch(es) with zero
|
|
21
21
|
// doubt is the coarse "no doubt ran at all" signal.
|
|
22
22
|
//
|
|
23
23
|
// base is the project directory that contains the .devrites tree.
|
|
@@ -39,26 +39,26 @@ func DoubtCoverage(root string, args []string, stdout, stderr io.Writer) int {
|
|
|
39
39
|
dir := featureDir(root, slug)
|
|
40
40
|
|
|
41
41
|
// A recorded stood decision that was never doubted is the unambiguous
|
|
42
|
-
// failure
|
|
42
|
+
// failure: checked first, and on every path (it survives the inline-build
|
|
43
43
|
// case below, where the footprint heuristic cannot apply).
|
|
44
44
|
if dec, ok := readFileOK(filepath.Join(dir, "decisions.md")); ok && strings.Contains(dec, "doubt: MISSING") {
|
|
45
|
-
fmt.Fprintln(stdout, "doubt-coverage: SKIPPED
|
|
45
|
+
fmt.Fprintln(stdout, "doubt-coverage: SKIPPED: a '## Decisions stood' entry in decisions.md has doubt: MISSING.")
|
|
46
46
|
fmt.Fprintln(stdout, "A decision was stood and recorded but never doubted. Re-dispatch doubt or escalate.")
|
|
47
47
|
return 3
|
|
48
48
|
}
|
|
49
49
|
|
|
50
50
|
// Inline build (Task tool unavailable): the wright + doubt ran in-context,
|
|
51
|
-
// dispatching nothing, so the footprint heuristic does not apply
|
|
51
|
+
// dispatching nothing, so the footprint heuristic does not apply: the
|
|
52
52
|
// decisions.md check above is the assessment.
|
|
53
53
|
if isFile(filepath.Join(dir, ".reconcile-inline")) {
|
|
54
|
-
fmt.Fprintln(stdout, "doubt-coverage: inline build (.reconcile-inline)
|
|
54
|
+
fmt.Fprintln(stdout, "doubt-coverage: inline build (.reconcile-inline): footprint heuristic n/a; no MISSING")
|
|
55
55
|
fmt.Fprintln(stdout, "verdict recorded. Verify by hand that each stood decision carries a devrites-doubt verdict.")
|
|
56
56
|
return 0
|
|
57
57
|
}
|
|
58
58
|
|
|
59
59
|
f, err := os.Open(filepath.Join(dir, "footprint.log"))
|
|
60
60
|
if err != nil {
|
|
61
|
-
fmt.Fprintln(stdout, "doubt-coverage: no footprint log
|
|
61
|
+
fmt.Fprintln(stdout, "doubt-coverage: no footprint log: nothing to assess (pass)")
|
|
62
62
|
return 0
|
|
63
63
|
}
|
|
64
64
|
defer f.Close()
|
|
@@ -81,7 +81,7 @@ func DoubtCoverage(root string, args []string, stdout, stderr io.Writer) int {
|
|
|
81
81
|
|
|
82
82
|
if wright > 0 && doubt == 0 {
|
|
83
83
|
fmt.Fprintf(stdout, "doubt-coverage: no doubt dispatched across %d wright run(s). Either every slice's\n", wright)
|
|
84
|
-
fmt.Fprintln(stdout, "'Decisions stood' was genuinely empty, or doubt was skipped
|
|
84
|
+
fmt.Fprintln(stdout, "'Decisions stood' was genuinely empty, or doubt was skipped: verify against decisions.md.")
|
|
85
85
|
return 1
|
|
86
86
|
}
|
|
87
87
|
return 0
|
|
@@ -23,8 +23,8 @@ var touchedPathRe = regexp.MustCompile("`([^`]+)`")
|
|
|
23
23
|
// base is the project directory that contains the .devrites tree. slug defaults
|
|
24
24
|
// to the active feature named in .devrites/ACTIVE.
|
|
25
25
|
//
|
|
26
|
-
// 0 fresh
|
|
27
|
-
// 3 stale
|
|
26
|
+
// 0 fresh: the proof post-dates every touched file, or there is nothing to compare
|
|
27
|
+
// 3 stale: a touched file is newer than the proof
|
|
28
28
|
// 5 no workspace, or no proof to check
|
|
29
29
|
func EvidenceFresh(root string, args []string, stdout, stderr io.Writer) int {
|
|
30
30
|
slug := ""
|
|
@@ -51,13 +51,13 @@ func EvidenceFresh(root string, args []string, stdout, stderr io.Writer) int {
|
|
|
51
51
|
filepath.Join(workDir, "browser-evidence.md"),
|
|
52
52
|
)
|
|
53
53
|
if !haveProof {
|
|
54
|
-
fmt.Fprintf(stderr, "evidence-fresh: no evidence.md / proof.md / browser-evidence.md in %s
|
|
54
|
+
fmt.Fprintf(stderr, "evidence-fresh: no evidence.md / proof.md / browser-evidence.md in %s: run %s\n", workDir, workflow.ForVerb("prove").Both())
|
|
55
55
|
return 5
|
|
56
56
|
}
|
|
57
57
|
|
|
58
58
|
touched, err := os.ReadFile(filepath.Join(workDir, "touched-files.md"))
|
|
59
59
|
if err != nil {
|
|
60
|
-
fmt.Fprintln(stdout, "evidence-fresh: no touched-files.md
|
|
60
|
+
fmt.Fprintln(stdout, "evidence-fresh: no touched-files.md: nothing to compare (treating as fresh).")
|
|
61
61
|
return 0
|
|
62
62
|
}
|
|
63
63
|
|
|
@@ -77,9 +77,9 @@ func EvidenceFresh(root string, args []string, stdout, stderr io.Writer) int {
|
|
|
77
77
|
}
|
|
78
78
|
|
|
79
79
|
if newestCode > newestProof {
|
|
80
|
-
fmt.Fprintf(stderr, "evidence-fresh: STALE
|
|
80
|
+
fmt.Fprintf(stderr, "evidence-fresh: STALE: %s is newer than the proof. Re-run %s before GO.\n", newestPath, workflow.ForVerb("prove").Both())
|
|
81
81
|
return 3
|
|
82
82
|
}
|
|
83
|
-
fmt.Fprintln(stdout, "evidence-fresh: OK
|
|
83
|
+
fmt.Fprintln(stdout, "evidence-fresh: OK: evidence post-dates every touched file.")
|
|
84
84
|
return 0
|
|
85
85
|
}
|
|
@@ -15,14 +15,14 @@ import (
|
|
|
15
15
|
// Extensions is the project-local extension surface: user-authored rites and
|
|
16
16
|
// reviewers that live under .devrites/extensions/<name>/ and are held to the same
|
|
17
17
|
// schema as the shipped pack, then mirrored into the harness's skill/agent dirs.
|
|
18
|
-
// It is DevRites' answer to "add a rite or reviewer without forking the pack"
|
|
18
|
+
// It is DevRites' answer to "add a rite or reviewer without forking the pack":
|
|
19
19
|
// deliberately project-scoped, with no channel/marketplace/registry apparatus.
|
|
20
20
|
//
|
|
21
21
|
// Layout of one extension:
|
|
22
22
|
//
|
|
23
23
|
// .devrites/extensions/<name>/
|
|
24
|
-
// skill/SKILL.md (optional) a user skill
|
|
25
|
-
// agent.md (optional) a user reviewer agent
|
|
24
|
+
// skill/SKILL.md (optional) a user skill: must carry name + description frontmatter
|
|
25
|
+
// agent.md (optional) a user reviewer agent: must carry name + description
|
|
26
26
|
// extension.yaml (optional) metadata: aliases (prior names, so a rename doesn't orphan)
|
|
27
27
|
//
|
|
28
28
|
// base is the .devrites root; the project directory (where .claude lives) is its
|
|
@@ -60,7 +60,7 @@ type extension struct {
|
|
|
60
60
|
}
|
|
61
61
|
|
|
62
62
|
// discoverExtensions returns the extensions under extDir, sorted by name. A
|
|
63
|
-
// missing extensions dir is not an error
|
|
63
|
+
// missing extensions dir is not an error: it means the project declares none.
|
|
64
64
|
func discoverExtensions(extDir string) ([]extension, error) {
|
|
65
65
|
entries, err := os.ReadDir(extDir)
|
|
66
66
|
if err != nil {
|
|
@@ -124,7 +124,7 @@ func extensionsList(extDir string, stdout io.Writer) int {
|
|
|
124
124
|
if len(provides) == 0 {
|
|
125
125
|
provides = []string{"(empty)"}
|
|
126
126
|
}
|
|
127
|
-
line := fmt.Sprintf(" %s
|
|
127
|
+
line := fmt.Sprintf(" %s: %s", e.name, strings.Join(provides, "+"))
|
|
128
128
|
if len(e.aliases) > 0 {
|
|
129
129
|
line += " · aliases: " + strings.Join(e.aliases, ", ")
|
|
130
130
|
}
|
|
@@ -139,7 +139,7 @@ func extensionsList(extDir string, stdout io.Writer) int {
|
|
|
139
139
|
// name. Reserved pack prefixes (rite-, devrites-) are a collision warning.
|
|
140
140
|
//
|
|
141
141
|
// 0 every extension well-formed (or none)
|
|
142
|
-
// 1 a schema violation
|
|
142
|
+
// 1 a schema violation: an extension that would install broken
|
|
143
143
|
func extensionsValidate(extDir string, stdout, stderr io.Writer) int {
|
|
144
144
|
exts, err := discoverExtensions(extDir)
|
|
145
145
|
if err != nil {
|
|
@@ -179,7 +179,7 @@ func extensionsValidate(extDir string, stdout, stderr io.Writer) int {
|
|
|
179
179
|
}
|
|
180
180
|
seenSkill[name] = e.name
|
|
181
181
|
if reservedPackName(name) {
|
|
182
|
-
fmt.Fprintf(stdout, " warning: %s skill name %q uses a reserved pack prefix (rite-/devrites-)
|
|
182
|
+
fmt.Fprintf(stdout, " warning: %s skill name %q uses a reserved pack prefix (rite-/devrites-): it will shadow or collide with the shipped pack\n", e.name, name)
|
|
183
183
|
}
|
|
184
184
|
}
|
|
185
185
|
}
|
|
@@ -207,7 +207,7 @@ func extensionsValidate(extDir string, stdout, stderr io.Writer) int {
|
|
|
207
207
|
}
|
|
208
208
|
return 1
|
|
209
209
|
}
|
|
210
|
-
fmt.Fprintf(stdout, "extensions: OK
|
|
210
|
+
fmt.Fprintf(stdout, "extensions: OK: %d extension(s) well-formed, %d manifest(s) checked\n", len(exts), manifestCount)
|
|
211
211
|
return 0
|
|
212
212
|
}
|
|
213
213
|
|
|
@@ -479,7 +479,7 @@ func allowedComponentWriteRoot(root string) bool {
|
|
|
479
479
|
// Claude-to-Codex generation path.
|
|
480
480
|
func extensionsSync(extDir, projectDir string, stdout, stderr io.Writer) int {
|
|
481
481
|
if code := extensionsValidate(extDir, io.Discard, stderr); code != 0 {
|
|
482
|
-
fmt.Fprintln(stderr, "extensions: not syncing
|
|
482
|
+
fmt.Fprintln(stderr, "extensions: not syncing: validation failed (run `devrites-engine extensions validate`)")
|
|
483
483
|
return code
|
|
484
484
|
}
|
|
485
485
|
exts, _ := discoverExtensions(extDir)
|
|
@@ -10,8 +10,8 @@ import (
|
|
|
10
10
|
"time"
|
|
11
11
|
)
|
|
12
12
|
|
|
13
|
-
// Footprint reports the fan-out footprint of a feature run
|
|
14
|
-
// were dispatched, of which kinds, across how many slices and minutes
|
|
13
|
+
// Footprint reports the fan-out footprint of a feature run: how many subagents
|
|
14
|
+
// were dispatched, of which kinds, across how many slices and minutes: from the
|
|
15
15
|
// append-only dispatch log at .devrites/work/<slug>/footprint.log. It never
|
|
16
16
|
// derives a token or dollar figure: those cannot be sourced truthfully, and
|
|
17
17
|
// inventing one would violate the proof thesis.
|
|
@@ -53,7 +53,7 @@ func Footprint(root string, args []string, stdout, stderr io.Writer) int {
|
|
|
53
53
|
}
|
|
54
54
|
|
|
55
55
|
// footprintLog appends one dispatch record. Recording is best-effort: with no
|
|
56
|
-
// workspace, or an unwritable log, it silently succeeds
|
|
56
|
+
// workspace, or an unwritable log, it silently succeeds: bookkeeping must never
|
|
57
57
|
// fail the orchestrator it instruments.
|
|
58
58
|
func footprintLog(dir, logPath string, rest []string, stderr io.Writer) int {
|
|
59
59
|
kind, label := "", ""
|
|
@@ -78,7 +78,7 @@ func footprintLog(dir, logPath string, rest []string, stderr io.Writer) int {
|
|
|
78
78
|
|
|
79
79
|
// Match footprint.sh's `printf '%s %s %s\n'` exactly: three fields always,
|
|
80
80
|
// so an empty label still writes its trailing space. render/roster tokenize
|
|
81
|
-
// on whitespace, so the extra field is harmless
|
|
81
|
+
// on whitespace, so the extra field is harmless, but keeping the byte format
|
|
82
82
|
// identical means the persisted log is parity-clean too.
|
|
83
83
|
record := strconv.FormatInt(time.Now().Unix(), 10) + " " + kind + " " + label
|
|
84
84
|
fmt.Fprintln(f, record)
|
|
@@ -87,8 +87,8 @@ func footprintLog(dir, logPath string, rest []string, stderr io.Writer) int {
|
|
|
87
87
|
|
|
88
88
|
// footprintRender prints the one-line footprint: the subagent count with a
|
|
89
89
|
// per-kind breakdown, the slice count (one per wright dispatch), and the active
|
|
90
|
-
// span in whole minutes between the first and last record. A "skip" record
|
|
91
|
-
// conscious non-dispatch
|
|
90
|
+
// span in whole minutes between the first and last record. A "skip" record: a
|
|
91
|
+
// conscious non-dispatch: is not a subagent and never counts.
|
|
92
92
|
func footprintRender(logPath string, stdout io.Writer) int {
|
|
93
93
|
f, err := os.Open(logPath)
|
|
94
94
|
if err != nil {
|
|
@@ -129,8 +129,8 @@ func footprintRender(logPath string, stdout io.Writer) int {
|
|
|
129
129
|
return 0
|
|
130
130
|
}
|
|
131
131
|
|
|
132
|
-
// kindBreakdown renders the dispatched kinds in a fixed order
|
|
133
|
-
// audit, doubt
|
|
132
|
+
// kindBreakdown renders the dispatched kinds in a fixed order: wright, reviewer,
|
|
133
|
+
// audit, doubt: each with its count, joined by " · ". Only kinds
|
|
134
134
|
// present appear; reviewers and audits pluralize, wright and doubt do not.
|
|
135
135
|
func kindBreakdown(byKind map[string]int) string {
|
|
136
136
|
kinds := []struct {
|
|
@@ -158,7 +158,7 @@ func kindBreakdown(byKind map[string]int) string {
|
|
|
158
158
|
}
|
|
159
159
|
|
|
160
160
|
// footprintRoster is the review fan-out accounting gate. Every reviewer on the
|
|
161
|
-
// roster must carry a recorded decision
|
|
161
|
+
// roster must carry a recorded decision: dispatched, or a conscious skip. An
|
|
162
162
|
// unaccounted reviewer is the silent omission this catches. The roster mirrors
|
|
163
163
|
// devrites-lib/reference/parallel-dispatch.md, its single source of truth.
|
|
164
164
|
//
|
|
@@ -171,7 +171,7 @@ func footprintRoster(logPath string, stdout io.Writer) int {
|
|
|
171
171
|
|
|
172
172
|
f, err := os.Open(logPath)
|
|
173
173
|
if err != nil {
|
|
174
|
-
fmt.Fprintln(stdout, "roster: n/a (no dispatch records
|
|
174
|
+
fmt.Fprintln(stdout, "roster: n/a (no dispatch records: fan-out did not run)")
|
|
175
175
|
return 0
|
|
176
176
|
}
|
|
177
177
|
defer f.Close()
|
|
@@ -198,7 +198,7 @@ func footprintRoster(logPath string, stdout io.Writer) int {
|
|
|
198
198
|
case dispatched[r]:
|
|
199
199
|
fmt.Fprintf(stdout, " %s: dispatched\n", r)
|
|
200
200
|
case skipped[r]:
|
|
201
|
-
fmt.Fprintf(stdout, " %s: skipped (always-on
|
|
201
|
+
fmt.Fprintf(stdout, " %s: skipped (always-on: verify carry-forward)\n", r)
|
|
202
202
|
alwaysOnSkipped = append(alwaysOnSkipped, r)
|
|
203
203
|
default:
|
|
204
204
|
fmt.Fprintf(stdout, " %s: UNACCOUNTED\n", r)
|
|
@@ -219,10 +219,10 @@ func footprintRoster(logPath string, stdout io.Writer) int {
|
|
|
219
219
|
|
|
220
220
|
switch {
|
|
221
221
|
case len(unaccounted) > 0:
|
|
222
|
-
fmt.Fprintf(stdout, "roster: UNACCOUNTED
|
|
222
|
+
fmt.Fprintf(stdout, "roster: UNACCOUNTED: %s\n", strings.Join(unaccounted, " "))
|
|
223
223
|
return 3
|
|
224
224
|
case len(alwaysOnSkipped) > 0:
|
|
225
|
-
fmt.Fprintf(stdout, "roster: always-on skipped
|
|
225
|
+
fmt.Fprintf(stdout, "roster: always-on skipped: %s\n", strings.Join(alwaysOnSkipped, " "))
|
|
226
226
|
return 1
|
|
227
227
|
default:
|
|
228
228
|
fmt.Fprintln(stdout, "roster: complete (every reviewer accounted for)")
|
|
@@ -11,7 +11,7 @@ import (
|
|
|
11
11
|
// The machine-readable agent contract. A `--json` run of an AFK-parsed command
|
|
12
12
|
// wraps its normal text output in a stable envelope so an unattended driver reads
|
|
13
13
|
// a structured result instead of scraping prose. The command's own logic is
|
|
14
|
-
// unchanged
|
|
14
|
+
// unchanged: the envelope captures its stdout (as data.text), its stderr (parsed
|
|
15
15
|
// into diagnostics), and the exit code. Full contract: docs/engine/agent-contract.md.
|
|
16
16
|
|
|
17
17
|
// Envelope is the top-level JSON result of a `--json` command run.
|
|
@@ -92,7 +92,7 @@ func parseDiagnostic(command, line string) Diagnostic {
|
|
|
92
92
|
}
|
|
93
93
|
|
|
94
94
|
// diagnosticCode assigns a stable, greppable code. It is intentionally coarse in
|
|
95
|
-
// v1
|
|
95
|
+
// v1 (a `<command>_<severity>` slug) so the catalog in agent-contract.md can grow
|
|
96
96
|
// specific codes over time without breaking consumers that match on the prefix.
|
|
97
97
|
func diagnosticCode(command, severity, message string) string {
|
|
98
98
|
base := diagCodeWord.ReplaceAllString(strings.ToLower(command), "_")
|