devrites 4.6.0 → 5.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +23 -0
- package/NOTICE.md +6 -0
- package/README.md +36 -12
- package/SECURITY.md +3 -3
- package/bin/devrites.mjs +1 -0
- package/docs/adr/0027-content-bound-build-readiness.md +8 -0
- package/docs/adr/0029-v5-workspace-schema-and-native-migration.md +62 -0
- package/docs/adr/README.md +4 -3
- package/docs/architecture.md +8 -4
- package/docs/cli.md +2 -2
- package/docs/command-map.md +5 -4
- package/docs/engine/commands.md +19 -8
- package/docs/engine/state-schema.md +2 -2
- package/docs/engine/workspace-schema.md +9 -3
- package/docs/flow.md +1 -1
- package/docs/orchestration.md +4 -2
- package/docs/quick-reference.md +5 -0
- package/docs/release.md +55 -7
- package/docs/skills.md +3 -3
- package/docs/usage.md +2 -1
- package/engine/.golangci.yml +27 -0
- package/engine/AGENTS.md +24 -0
- package/engine/Makefile +20 -5
- package/engine/cmd/releasepack/main.go +2 -2
- package/engine/cmd/releasepack/main_test.go +4 -4
- package/engine/commands.go +27 -0
- package/engine/internal/devritespaths/paths.go +3 -0
- package/engine/internal/fsutil/copy.go +2 -0
- package/engine/internal/fsutil/copy_test.go +193 -0
- package/engine/internal/gate/gate.go +30 -0
- package/engine/internal/gate/gate_test.go +7 -7
- package/engine/internal/gate/readiness_binding.go +10 -7
- package/engine/internal/gate/readiness_binding_test.go +51 -3
- package/engine/internal/hostpack/hostpack.go +23 -5
- package/engine/internal/hostpack/hostpack_test.go +41 -5
- package/engine/internal/install/apply.go +324 -0
- package/engine/internal/install/binary.go +259 -0
- package/engine/internal/install/install.go +13 -1599
- package/engine/internal/install/install_test.go +12 -5
- package/engine/internal/install/manifest.go +112 -0
- package/engine/internal/install/merge.go +473 -0
- package/engine/internal/install/preflight.go +235 -0
- package/engine/internal/install/uninstall.go +119 -0
- package/engine/internal/install/update.go +185 -0
- package/engine/internal/lib/candidate.go +4 -2
- package/engine/internal/lib/candidate_test.go +4 -1
- package/engine/internal/lib/closeout.go +4 -0
- package/engine/internal/lib/closeout_test.go +3 -3
- package/engine/internal/lib/environment_report.go +109 -0
- package/engine/internal/lib/environment_report_test.go +54 -0
- package/engine/internal/lib/migrate.go +220 -0
- package/engine/internal/lib/migrate_test.go +154 -0
- package/engine/internal/lib/open_visual.go +5 -0
- package/engine/internal/lib/resolve.go +6 -0
- package/engine/internal/lib/resolve_remediation_test.go +1 -1
- package/engine/internal/lib/secretscan.go +1 -0
- package/engine/internal/lib/secretscan_test.go +1 -0
- package/engine/internal/lib/skilltrust.go +2 -1
- package/engine/internal/lib/taskgraph_test.go +2 -2
- package/engine/internal/lib/util.go +1 -0
- package/engine/internal/lib/workspace_read.go +1 -0
- package/engine/internal/markdowntext/markdowntext_fuzz_test.go +36 -0
- package/engine/internal/parallel/cli.go +1 -0
- package/engine/internal/parallel/git.go +1 -0
- package/engine/internal/parallel/lease.go +1 -0
- package/engine/internal/parallel/ops.go +67 -16
- package/engine/internal/parallel/ops_test.go +211 -0
- package/engine/internal/parallel/pathdisjoint.go +6 -0
- package/engine/internal/parallel/pathdisjoint_fuzz_test.go +43 -0
- package/engine/internal/parallel/pathdisjoint_test.go +4 -1
- package/engine/internal/parallel/testdata/fuzz/FuzzPathDisjoint/a449b81b4711b7b4 +3 -0
- package/engine/internal/release/release.go +8 -4
- package/engine/internal/rootfacts/facts.go +3 -0
- package/engine/internal/safepath/safepath_fuzz_test.go +21 -0
- package/engine/internal/state/acceptance.go +87 -0
- package/engine/internal/state/acceptance_test.go +57 -0
- package/engine/internal/state/cmd/workflowmanifest/main.go +24 -13
- package/engine/internal/state/cmd/workflowmanifest/main_test.go +96 -0
- package/engine/internal/state/cursor.go +129 -14
- package/engine/internal/state/cursor_fuzz_test.go +80 -0
- package/engine/internal/state/lock_unix.go +1 -0
- package/engine/internal/state/observation.go +3 -3
- package/engine/internal/state/observation_test.go +1 -1
- package/engine/internal/state/schema.go +3 -2
- package/engine/internal/state/state_test.go +2 -2
- package/engine/internal/state/taskgraph_fuzz_test.go +38 -0
- package/engine/internal/state/testdata/fuzz/FuzzCursorRoundTrip/114b28f68c1fa4db +4 -0
- package/engine/internal/state/testdata/fuzz/FuzzCursorRoundTrip/378a0f2218e812ea +4 -0
- package/engine/internal/state/testdata/fuzz/FuzzCursorRoundTrip/39eaa26fcb481e3c +4 -0
- package/engine/internal/state/testdata/fuzz/FuzzCursorRoundTrip/776ca1dc0143acf0 +4 -0
- package/engine/internal/state/testdata/fuzz/FuzzCursorRoundTrip/9295930c1ebb81df +4 -0
- package/engine/internal/state/testdata/fuzz/FuzzCursorRoundTrip/a60de309dc33be0d +4 -0
- package/engine/internal/state/testdata/fuzz/FuzzCursorRoundTrip/f04dc7b06ef7c99f +4 -0
- package/engine/internal/state/testdata/fuzz/FuzzCursorRoundTrip/f3000ac510878bd6 +4 -0
- package/engine/internal/state/testdata/fuzz/FuzzWorkspaceSchemaRow/a75aabb9f2a847d5 +2 -0
- package/engine/internal/state/workflow_manifest.json +1 -1
- package/engine/internal/state/workspaceschema.go +58 -0
- package/engine/internal/state/workspaceschema_fuzz_test.go +27 -0
- package/engine/internal/state/workspaceschema_test.go +67 -0
- package/engine/internal/state/write.go +3 -2
- package/engine/internal/testutil/testutil.go +4 -2
- package/engine/main.go +26 -32
- package/engine/observation_contract_test.go +174 -0
- package/engine/root_routing_test.go +24 -5
- package/engine/testdata/fixtures/basic/devrites-root/work/auth-tokens/state.md +1 -0
- package/engine/testdata/fixtures/basic/devrites-root/work/search-ranking/state.md +1 -0
- package/engine/testdata/golden/TestParityResolve/answer/state.md.golden +1 -0
- package/engine/testdata/golden/TestParityResolve/drop/state.md.golden +1 -0
- package/engine/tests/adr_0027_readiness_binding_test.go +1 -1
- package/engine/tests/cli_test.go +2 -2
- package/engine/tests/gate_test.go +2 -2
- package/engine/tests/parity_closeout_test.go +3 -0
- package/engine/tests/parity_resolve_test.go +1 -0
- package/pack/.claude/agents/devrites-code-reviewer.md +16 -6
- package/pack/.claude/agents/devrites-devex-reviewer.md +11 -6
- package/pack/.claude/agents/devrites-doubt-reviewer.md +7 -0
- package/pack/.claude/agents/devrites-evidence-scout.md +17 -2
- package/pack/.claude/agents/devrites-frontend-reviewer.md +43 -15
- package/pack/.claude/agents/devrites-performance-reviewer.md +11 -7
- package/pack/.claude/agents/devrites-plan-reviewer.md +13 -3
- package/pack/.claude/agents/devrites-proof-runner.md +1 -1
- package/pack/.claude/agents/devrites-retrospector.md +7 -1
- package/pack/.claude/agents/devrites-security-auditor.md +13 -5
- package/pack/.claude/agents/devrites-simplifier-reviewer.md +10 -2
- package/pack/.claude/agents/devrites-slice-wright.md +7 -11
- package/pack/.claude/agents/devrites-spec-reviewer.md +9 -1
- package/pack/.claude/agents/devrites-strategy-reviewer.md +11 -4
- package/pack/.claude/agents/devrites-test-analyst.md +9 -1
- package/pack/.claude/skills/devrites-api-interface/SKILL.md +9 -9
- package/pack/.claude/skills/devrites-audit/SKILL.md +3 -1
- package/pack/.claude/skills/devrites-debug-recovery/SKILL.md +9 -2
- package/pack/.claude/skills/devrites-debug-recovery/reference/cleanup-and-classify.md +3 -10
- package/pack/.claude/skills/devrites-debug-recovery/reference/regression-test.md +1 -1
- package/pack/.claude/skills/devrites-doubt/SKILL.md +5 -7
- package/pack/.claude/skills/devrites-frontend-craft/SKILL.md +6 -16
- package/pack/.claude/skills/devrites-frontend-craft/reference/craft.md +5 -13
- package/pack/.claude/skills/devrites-frontend-craft/reference/design-references.md +2 -3
- package/pack/.claude/skills/devrites-frontend-craft/reference/fullstack.md +4 -3
- package/pack/.claude/skills/devrites-frontend-craft/reference/quality-standards.md +82 -21
- package/pack/.claude/skills/devrites-frontend-craft/reference/reuse-first.md +4 -9
- package/pack/.claude/skills/devrites-frontend-craft/reference/shape.md +3 -7
- package/pack/.claude/skills/devrites-interview/SKILL.md +4 -3
- package/pack/.claude/skills/devrites-lib/SKILL.md +2 -1
- package/pack/.claude/skills/devrites-lib/reference/candidate-integrity.md +1 -9
- package/pack/.claude/skills/devrites-lib/reference/intent-map.md +27 -3
- package/pack/.claude/skills/devrites-lib/reference/orchestration-profiles.md +5 -0
- package/pack/.claude/skills/devrites-lib/reference/parallel-dispatch.md +34 -4
- package/pack/.claude/skills/devrites-lib/reference/reply-contract.md +10 -3
- package/pack/.claude/skills/devrites-lib/reference/standards/README.md +7 -0
- package/pack/.claude/skills/devrites-lib/reference/standards/afk-hitl.md +34 -15
- package/pack/.claude/skills/devrites-lib/reference/standards/agents.md +13 -5
- package/pack/.claude/skills/devrites-lib/reference/standards/browser-proof-checklist.md +19 -3
- package/pack/.claude/skills/devrites-lib/reference/standards/ci-cd.md +1 -1
- package/pack/.claude/skills/devrites-lib/reference/standards/code-navigation.md +43 -0
- package/pack/.claude/skills/devrites-lib/reference/standards/code-review.md +25 -2
- package/pack/.claude/skills/devrites-lib/reference/standards/coding-style.md +4 -3
- package/pack/.claude/skills/devrites-lib/reference/standards/context-hygiene.md +9 -1
- package/pack/.claude/skills/devrites-lib/reference/standards/core.md +34 -10
- package/pack/.claude/skills/devrites-lib/reference/standards/data-integrity.md +24 -1
- package/pack/.claude/skills/devrites-lib/reference/standards/debug-recovery.md +8 -1
- package/pack/.claude/skills/devrites-lib/reference/standards/definition-of-done.md +14 -11
- package/pack/.claude/skills/devrites-lib/reference/standards/documentation.md +4 -1
- package/pack/.claude/skills/devrites-lib/reference/standards/edge-case-trace.md +5 -3
- package/pack/.claude/skills/devrites-lib/reference/standards/elicitation.md +6 -1
- package/pack/.claude/skills/devrites-lib/reference/standards/error-handling.md +5 -2
- package/pack/.claude/skills/devrites-lib/reference/standards/integration-reliability.md +32 -9
- package/pack/.claude/skills/devrites-lib/reference/standards/loop-operations.md +2 -2
- package/pack/.claude/skills/devrites-lib/reference/standards/observability.md +6 -1
- package/pack/.claude/skills/devrites-lib/reference/standards/one-shot-actions.md +2 -2
- package/pack/.claude/skills/devrites-lib/reference/standards/patterns.md +16 -0
- package/pack/.claude/skills/devrites-lib/reference/standards/performance.md +20 -0
- package/pack/.claude/skills/devrites-lib/reference/standards/prose-style.md +7 -0
- package/pack/.claude/skills/devrites-lib/reference/standards/repository-topology.md +8 -1
- package/pack/.claude/skills/devrites-lib/reference/standards/review-checklist.md +7 -5
- package/pack/.claude/skills/devrites-lib/reference/standards/security-checklist.md +13 -1
- package/pack/.claude/skills/devrites-lib/reference/standards/security.md +109 -11
- package/pack/.claude/skills/devrites-lib/reference/standards/skill-authoring.md +53 -2
- package/pack/.claude/skills/devrites-lib/reference/standards/spec-grammar.md +28 -26
- package/pack/.claude/skills/devrites-lib/reference/standards/testing.md +22 -2
- package/pack/.claude/skills/devrites-lib/reference/standards/tooling.md +40 -12
- package/pack/.claude/skills/devrites-lib/reference/standards/workflow-artifacts.md +24 -8
- package/pack/.claude/skills/devrites-lib/reference/visual-playbooks/code.md +0 -2
- package/pack/.claude/skills/devrites-lib/reference/visual-playbooks/comparison.md +0 -2
- package/pack/.claude/skills/devrites-lib/reference/visual-playbooks/diagram.md +1 -3
- package/pack/.claude/skills/devrites-lib/reference/visual-playbooks/index.md +2 -4
- package/pack/.claude/skills/devrites-lib/reference/visual-playbooks/input.md +1 -2
- package/pack/.claude/skills/devrites-lib/reference/visual-playbooks/plan.md +1 -2
- package/pack/.claude/skills/devrites-lib/reference/visual-playbooks/slides.md +0 -2
- package/pack/.claude/skills/devrites-lib/reference/visual-playbooks/table.md +0 -2
- package/pack/.claude/skills/devrites-lib/reference/workspace-artifact-schema.md +7 -5
- package/pack/.claude/skills/devrites-prose-craft/SKILL.md +11 -7
- package/pack/.claude/skills/devrites-prose-craft/reference/banned-phrases.md +41 -4
- package/pack/.claude/skills/devrites-prose-craft/reference/examples.md +31 -2
- package/pack/.claude/skills/devrites-prose-craft/reference/structures.md +62 -0
- package/pack/.claude/skills/devrites-source-driven/SKILL.md +11 -12
- package/pack/.claude/skills/devrites-ux-shape/SKILL.md +5 -6
- package/pack/.claude/skills/rite/SKILL.md +3 -1
- package/pack/.claude/skills/rite-adopt/SKILL.md +9 -8
- package/pack/.claude/skills/rite-autocomplete/SKILL.md +9 -6
- package/pack/.claude/skills/rite-build/SKILL.md +6 -3
- package/pack/.claude/skills/rite-build/reference/afk-discipline.md +2 -2
- package/pack/.claude/skills/rite-build/reference/checkpoint.md +3 -1
- package/pack/.claude/skills/rite-build/reference/output.md +2 -2
- package/pack/.claude/skills/rite-build/reference/parallel-batch.md +19 -2
- package/pack/.claude/skills/rite-build/reference/phase-contract.md +5 -5
- package/pack/.claude/skills/rite-build/reference/tdd.md +3 -2
- package/pack/.claude/skills/rite-build/reference/wright-dispatch.md +7 -7
- package/pack/.claude/skills/rite-clarify/SKILL.md +6 -5
- package/pack/.claude/skills/rite-converge/SKILL.md +8 -7
- package/pack/.claude/skills/rite-converge/reference/anti-patterns.md +1 -1
- package/pack/.claude/skills/rite-customize/SKILL.md +9 -0
- package/pack/.claude/skills/rite-define/SKILL.md +4 -7
- package/pack/.claude/skills/rite-define/reference/anti-patterns.md +1 -1
- package/pack/.claude/skills/rite-define/reference/gates.md +6 -5
- package/pack/.claude/skills/rite-define/reference/plan-template.md +2 -2
- package/pack/.claude/skills/rite-dogfood/SKILL.md +10 -4
- package/pack/.claude/skills/rite-explain/SKILL.md +9 -5
- package/pack/.claude/skills/rite-explain/reference/intake.md +2 -1
- package/pack/.claude/skills/rite-frame/SKILL.md +1 -1
- package/pack/.claude/skills/rite-handoff/SKILL.md +1 -1
- package/pack/.claude/skills/rite-learn/SKILL.md +22 -4
- package/pack/.claude/skills/rite-plan/SKILL.md +4 -4
- package/pack/.claude/skills/rite-plan/reference/anti-patterns.md +2 -2
- package/pack/.claude/skills/rite-plan/reference/replan-and-repair.md +24 -0
- package/pack/.claude/skills/rite-polish/SKILL.md +13 -6
- package/pack/.claude/skills/rite-polish/reference/anti-ai-slop.md +20 -0
- package/pack/.claude/skills/rite-polish/reference/browser-polish-evidence.md +3 -1
- package/pack/.claude/skills/rite-polish/reference/code.md +1 -19
- package/pack/.claude/skills/rite-polish/reference/harden-checklist.md +1 -1
- package/pack/.claude/skills/rite-polish/reference/ledger.md +3 -0
- package/pack/.claude/skills/rite-polish/reference/ui.md +4 -3
- package/pack/.claude/skills/rite-pov/SKILL.md +16 -1
- package/pack/.claude/skills/rite-pr-feedback/SKILL.md +1 -1
- package/pack/.claude/skills/rite-pressure-test/SKILL.md +2 -1
- package/pack/.claude/skills/rite-prototype/SKILL.md +2 -2
- package/pack/.claude/skills/rite-prove/SKILL.md +6 -6
- package/pack/.claude/skills/rite-prove/reference/acceptance-proof.md +8 -9
- package/pack/.claude/skills/rite-prove/reference/browser-proof.md +5 -3
- package/pack/.claude/skills/rite-prove/reference/test-command-discovery.md +0 -1
- package/pack/.claude/skills/rite-quick/SKILL.md +6 -4
- package/pack/.claude/skills/rite-resolve/SKILL.md +5 -4
- package/pack/.claude/skills/rite-resolve/reference/answer-protocol.md +1 -1
- package/pack/.claude/skills/rite-review/SKILL.md +18 -27
- package/pack/.claude/skills/rite-review/reference/cognitive-load.md +0 -2
- package/pack/.claude/skills/rite-review/reference/five-axis-review.md +3 -3
- package/pack/.claude/skills/rite-review/reference/nielsen-heuristics.md +3 -7
- package/pack/.claude/skills/rite-seal/SKILL.md +7 -3
- package/pack/.claude/skills/rite-seal/reference/final-evidence.md +5 -6
- package/pack/.claude/skills/rite-seal/reference/risk-and-rollback.md +1 -1
- package/pack/.claude/skills/rite-seal/reference/seal-template.md +2 -0
- package/pack/.claude/skills/rite-ship/SKILL.md +3 -2
- package/pack/.claude/skills/rite-ship/reference/close-out.md +25 -5
- package/pack/.claude/skills/rite-ship/reference/rollout.md +1 -1
- package/pack/.claude/skills/rite-spec/SKILL.md +2 -1
- package/pack/.claude/skills/rite-spec/reference/anti-patterns.md +0 -1
- package/pack/.claude/skills/rite-spec/reference/investigation.md +1 -3
- package/pack/.claude/skills/rite-spec/reference/spec-checklists.md +1 -1
- package/pack/.claude/skills/rite-spec/reference/spec-template.md +1 -1
- package/pack/.claude/skills/rite-spec/reference/state-workspace.md +6 -3
- package/pack/.claude/skills/rite-status/SKILL.md +3 -1
- package/pack/.claude/skills/rite-temper/SKILL.md +9 -9
- package/pack/.claude/skills/rite-temper/reference/review-dimensions.md +2 -2
- package/pack/.claude/skills/rite-temper/reference/scope-modes.md +2 -2
- package/pack/.claude/skills/rite-temper/reference/significance.md +4 -4
- package/pack/.claude/skills/rite-temper/reference/strategy-template.md +6 -6
- package/pack/.claude/skills/rite-upgrade/SKILL.md +2 -2
- package/pack/.claude/skills/rite-vet/SKILL.md +14 -10
- package/pack/.claude/skills/rite-vet/reference/artifacts.md +9 -1
- package/pack/.claude/skills/rite-vet/reference/review-axes.md +14 -2
- package/pack/.claude/skills/rite-watch-pr/SKILL.md +2 -2
- package/pack/.claude/skills/rite-zoom-out/SKILL.md +4 -4
- package/pack/generated/README.md +4 -2
- package/pack/generated/claude/agents/devrites-code-reviewer.md +16 -6
- package/pack/generated/claude/agents/devrites-devex-reviewer.md +11 -6
- package/pack/generated/claude/agents/devrites-doubt-reviewer.md +7 -0
- package/pack/generated/claude/agents/devrites-evidence-scout.md +17 -2
- package/pack/generated/claude/agents/devrites-frontend-reviewer.md +43 -15
- package/pack/generated/claude/agents/devrites-performance-reviewer.md +11 -7
- package/pack/generated/claude/agents/devrites-plan-reviewer.md +13 -3
- package/pack/generated/claude/agents/devrites-proof-runner.md +1 -1
- package/pack/generated/claude/agents/devrites-retrospector.md +7 -1
- package/pack/generated/claude/agents/devrites-security-auditor.md +13 -5
- package/pack/generated/claude/agents/devrites-simplifier-reviewer.md +10 -2
- package/pack/generated/claude/agents/devrites-slice-wright.md +7 -11
- package/pack/generated/claude/agents/devrites-spec-reviewer.md +9 -1
- package/pack/generated/claude/agents/devrites-strategy-reviewer.md +11 -4
- package/pack/generated/claude/agents/devrites-test-analyst.md +9 -1
- package/pack/generated/claude/skills/devrites-api-interface/SKILL.md +9 -9
- package/pack/generated/claude/skills/devrites-audit/SKILL.md +3 -1
- package/pack/generated/claude/skills/devrites-debug-recovery/SKILL.md +9 -2
- package/pack/generated/claude/skills/devrites-debug-recovery/reference/cleanup-and-classify.md +3 -10
- package/pack/generated/claude/skills/devrites-debug-recovery/reference/regression-test.md +1 -1
- package/pack/generated/claude/skills/devrites-doubt/SKILL.md +5 -7
- package/pack/generated/claude/skills/devrites-frontend-craft/SKILL.md +6 -16
- package/pack/generated/claude/skills/devrites-frontend-craft/reference/craft.md +5 -13
- package/pack/generated/claude/skills/devrites-frontend-craft/reference/design-references.md +2 -3
- package/pack/generated/claude/skills/devrites-frontend-craft/reference/fullstack.md +4 -3
- package/pack/generated/claude/skills/devrites-frontend-craft/reference/quality-standards.md +82 -21
- package/pack/generated/claude/skills/devrites-frontend-craft/reference/reuse-first.md +4 -9
- package/pack/generated/claude/skills/devrites-frontend-craft/reference/shape.md +3 -7
- package/pack/generated/claude/skills/devrites-interview/SKILL.md +4 -3
- package/pack/generated/claude/skills/devrites-lib/SKILL.md +2 -1
- package/pack/generated/claude/skills/devrites-lib/reference/candidate-integrity.md +1 -9
- package/pack/generated/claude/skills/devrites-lib/reference/intent-map.md +27 -3
- package/pack/generated/claude/skills/devrites-lib/reference/orchestration-profiles.md +5 -0
- package/pack/generated/claude/skills/devrites-lib/reference/parallel-dispatch.md +34 -4
- package/pack/generated/claude/skills/devrites-lib/reference/reply-contract.md +10 -3
- package/pack/generated/claude/skills/devrites-lib/reference/standards/README.md +7 -0
- package/pack/generated/claude/skills/devrites-lib/reference/standards/afk-hitl.md +34 -15
- package/pack/generated/claude/skills/devrites-lib/reference/standards/agents.md +13 -5
- package/pack/generated/claude/skills/devrites-lib/reference/standards/browser-proof-checklist.md +19 -3
- package/pack/generated/claude/skills/devrites-lib/reference/standards/ci-cd.md +1 -1
- package/pack/generated/claude/skills/devrites-lib/reference/standards/code-navigation.md +43 -0
- package/pack/generated/claude/skills/devrites-lib/reference/standards/code-review.md +25 -2
- package/pack/generated/claude/skills/devrites-lib/reference/standards/coding-style.md +4 -3
- package/pack/generated/claude/skills/devrites-lib/reference/standards/context-hygiene.md +9 -1
- package/pack/generated/claude/skills/devrites-lib/reference/standards/core.md +34 -10
- package/pack/generated/claude/skills/devrites-lib/reference/standards/data-integrity.md +24 -1
- package/pack/generated/claude/skills/devrites-lib/reference/standards/debug-recovery.md +8 -1
- package/pack/generated/claude/skills/devrites-lib/reference/standards/definition-of-done.md +14 -11
- package/pack/generated/claude/skills/devrites-lib/reference/standards/documentation.md +4 -1
- package/pack/generated/claude/skills/devrites-lib/reference/standards/edge-case-trace.md +5 -3
- package/pack/generated/claude/skills/devrites-lib/reference/standards/elicitation.md +6 -1
- package/pack/generated/claude/skills/devrites-lib/reference/standards/error-handling.md +5 -2
- package/pack/generated/claude/skills/devrites-lib/reference/standards/integration-reliability.md +32 -9
- package/pack/generated/claude/skills/devrites-lib/reference/standards/loop-operations.md +2 -2
- package/pack/generated/claude/skills/devrites-lib/reference/standards/observability.md +6 -1
- package/pack/generated/claude/skills/devrites-lib/reference/standards/one-shot-actions.md +2 -2
- package/pack/generated/claude/skills/devrites-lib/reference/standards/patterns.md +16 -0
- package/pack/generated/claude/skills/devrites-lib/reference/standards/performance.md +20 -0
- package/pack/generated/claude/skills/devrites-lib/reference/standards/prose-style.md +7 -0
- package/pack/generated/claude/skills/devrites-lib/reference/standards/repository-topology.md +8 -1
- package/pack/generated/claude/skills/devrites-lib/reference/standards/review-checklist.md +7 -5
- package/pack/generated/claude/skills/devrites-lib/reference/standards/security-checklist.md +13 -1
- package/pack/generated/claude/skills/devrites-lib/reference/standards/security.md +109 -11
- package/pack/generated/claude/skills/devrites-lib/reference/standards/skill-authoring.md +53 -2
- package/pack/generated/claude/skills/devrites-lib/reference/standards/spec-grammar.md +28 -26
- package/pack/generated/claude/skills/devrites-lib/reference/standards/testing.md +22 -2
- package/pack/generated/claude/skills/devrites-lib/reference/standards/tooling.md +40 -12
- package/pack/generated/claude/skills/devrites-lib/reference/standards/workflow-artifacts.md +24 -8
- package/pack/generated/claude/skills/devrites-lib/reference/visual-playbooks/code.md +0 -2
- package/pack/generated/claude/skills/devrites-lib/reference/visual-playbooks/comparison.md +0 -2
- package/pack/generated/claude/skills/devrites-lib/reference/visual-playbooks/diagram.md +1 -3
- package/pack/generated/claude/skills/devrites-lib/reference/visual-playbooks/index.md +2 -4
- package/pack/generated/claude/skills/devrites-lib/reference/visual-playbooks/input.md +1 -2
- package/pack/generated/claude/skills/devrites-lib/reference/visual-playbooks/plan.md +1 -2
- package/pack/generated/claude/skills/devrites-lib/reference/visual-playbooks/slides.md +0 -2
- package/pack/generated/claude/skills/devrites-lib/reference/visual-playbooks/table.md +0 -2
- package/pack/generated/claude/skills/devrites-lib/reference/workspace-artifact-schema.md +7 -5
- package/pack/generated/claude/skills/devrites-prose-craft/SKILL.md +11 -7
- package/pack/generated/claude/skills/devrites-prose-craft/reference/banned-phrases.md +41 -4
- package/pack/generated/claude/skills/devrites-prose-craft/reference/examples.md +31 -2
- package/pack/generated/claude/skills/devrites-prose-craft/reference/structures.md +62 -0
- package/pack/generated/claude/skills/devrites-source-driven/SKILL.md +11 -12
- package/pack/generated/claude/skills/devrites-ux-shape/SKILL.md +5 -6
- package/pack/generated/claude/skills/rite/SKILL.md +3 -1
- package/pack/generated/claude/skills/rite-adopt/SKILL.md +9 -8
- package/pack/generated/claude/skills/rite-autocomplete/SKILL.md +9 -6
- package/pack/generated/claude/skills/rite-build/SKILL.md +6 -3
- package/pack/generated/claude/skills/rite-build/reference/afk-discipline.md +2 -2
- package/pack/generated/claude/skills/rite-build/reference/checkpoint.md +3 -1
- package/pack/generated/claude/skills/rite-build/reference/output.md +2 -2
- package/pack/generated/claude/skills/rite-build/reference/parallel-batch.md +19 -2
- package/pack/generated/claude/skills/rite-build/reference/phase-contract.md +5 -5
- package/pack/generated/claude/skills/rite-build/reference/tdd.md +3 -2
- package/pack/generated/claude/skills/rite-build/reference/wright-dispatch.md +7 -7
- package/pack/generated/claude/skills/rite-clarify/SKILL.md +6 -5
- package/pack/generated/claude/skills/rite-converge/SKILL.md +8 -7
- package/pack/generated/claude/skills/rite-converge/reference/anti-patterns.md +1 -1
- package/pack/generated/claude/skills/rite-customize/SKILL.md +9 -0
- package/pack/generated/claude/skills/rite-define/SKILL.md +4 -7
- package/pack/generated/claude/skills/rite-define/reference/anti-patterns.md +1 -1
- package/pack/generated/claude/skills/rite-define/reference/gates.md +6 -5
- package/pack/generated/claude/skills/rite-define/reference/plan-template.md +2 -2
- package/pack/generated/claude/skills/rite-dogfood/SKILL.md +10 -4
- package/pack/generated/claude/skills/rite-explain/SKILL.md +9 -5
- package/pack/generated/claude/skills/rite-explain/reference/intake.md +2 -1
- package/pack/generated/claude/skills/rite-frame/SKILL.md +1 -1
- package/pack/generated/claude/skills/rite-handoff/SKILL.md +1 -1
- package/pack/generated/claude/skills/rite-learn/SKILL.md +22 -4
- package/pack/generated/claude/skills/rite-plan/SKILL.md +4 -4
- package/pack/generated/claude/skills/rite-plan/reference/anti-patterns.md +2 -2
- package/pack/generated/claude/skills/rite-plan/reference/replan-and-repair.md +24 -0
- package/pack/generated/claude/skills/rite-polish/SKILL.md +13 -6
- package/pack/generated/claude/skills/rite-polish/reference/anti-ai-slop.md +20 -0
- package/pack/generated/claude/skills/rite-polish/reference/browser-polish-evidence.md +3 -1
- package/pack/generated/claude/skills/rite-polish/reference/code.md +1 -19
- package/pack/generated/claude/skills/rite-polish/reference/harden-checklist.md +1 -1
- package/pack/generated/claude/skills/rite-polish/reference/ledger.md +3 -0
- package/pack/generated/claude/skills/rite-polish/reference/ui.md +4 -3
- package/pack/generated/claude/skills/rite-pov/SKILL.md +16 -1
- package/pack/generated/claude/skills/rite-pr-feedback/SKILL.md +1 -1
- package/pack/generated/claude/skills/rite-pressure-test/SKILL.md +2 -1
- package/pack/generated/claude/skills/rite-prototype/SKILL.md +2 -2
- package/pack/generated/claude/skills/rite-prove/SKILL.md +6 -6
- package/pack/generated/claude/skills/rite-prove/reference/acceptance-proof.md +8 -9
- package/pack/generated/claude/skills/rite-prove/reference/browser-proof.md +5 -3
- package/pack/generated/claude/skills/rite-prove/reference/test-command-discovery.md +0 -1
- package/pack/generated/claude/skills/rite-quick/SKILL.md +6 -4
- package/pack/generated/claude/skills/rite-resolve/SKILL.md +5 -4
- package/pack/generated/claude/skills/rite-resolve/reference/answer-protocol.md +1 -1
- package/pack/generated/claude/skills/rite-review/SKILL.md +18 -27
- package/pack/generated/claude/skills/rite-review/reference/cognitive-load.md +0 -2
- package/pack/generated/claude/skills/rite-review/reference/five-axis-review.md +3 -3
- package/pack/generated/claude/skills/rite-review/reference/nielsen-heuristics.md +3 -7
- package/pack/generated/claude/skills/rite-seal/SKILL.md +7 -3
- package/pack/generated/claude/skills/rite-seal/reference/final-evidence.md +5 -6
- package/pack/generated/claude/skills/rite-seal/reference/risk-and-rollback.md +1 -1
- package/pack/generated/claude/skills/rite-seal/reference/seal-template.md +2 -0
- package/pack/generated/claude/skills/rite-ship/SKILL.md +3 -2
- package/pack/generated/claude/skills/rite-ship/reference/close-out.md +25 -5
- package/pack/generated/claude/skills/rite-ship/reference/rollout.md +1 -1
- package/pack/generated/claude/skills/rite-spec/SKILL.md +2 -1
- package/pack/generated/claude/skills/rite-spec/reference/anti-patterns.md +0 -1
- package/pack/generated/claude/skills/rite-spec/reference/investigation.md +1 -3
- package/pack/generated/claude/skills/rite-spec/reference/spec-checklists.md +1 -1
- package/pack/generated/claude/skills/rite-spec/reference/spec-template.md +1 -1
- package/pack/generated/claude/skills/rite-spec/reference/state-workspace.md +6 -3
- package/pack/generated/claude/skills/rite-status/SKILL.md +3 -1
- package/pack/generated/claude/skills/rite-temper/SKILL.md +9 -9
- package/pack/generated/claude/skills/rite-temper/reference/review-dimensions.md +2 -2
- package/pack/generated/claude/skills/rite-temper/reference/scope-modes.md +2 -2
- package/pack/generated/claude/skills/rite-temper/reference/significance.md +4 -4
- package/pack/generated/claude/skills/rite-temper/reference/strategy-template.md +6 -6
- package/pack/generated/claude/skills/rite-upgrade/SKILL.md +2 -2
- package/pack/generated/claude/skills/rite-vet/SKILL.md +14 -10
- package/pack/generated/claude/skills/rite-vet/reference/artifacts.md +9 -1
- package/pack/generated/claude/skills/rite-vet/reference/review-axes.md +14 -2
- package/pack/generated/claude/skills/rite-watch-pr/SKILL.md +2 -2
- package/pack/generated/claude/skills/rite-zoom-out/SKILL.md +4 -4
- package/pack/generated/codex/agents/devrites-code-reviewer.toml +16 -6
- package/pack/generated/codex/agents/devrites-devex-reviewer.toml +11 -6
- package/pack/generated/codex/agents/devrites-doubt-reviewer.toml +7 -0
- package/pack/generated/codex/agents/devrites-evidence-scout.toml +17 -2
- package/pack/generated/codex/agents/devrites-frontend-reviewer.toml +43 -15
- package/pack/generated/codex/agents/devrites-performance-reviewer.toml +11 -7
- package/pack/generated/codex/agents/devrites-plan-reviewer.toml +13 -3
- package/pack/generated/codex/agents/devrites-proof-runner.toml +1 -1
- package/pack/generated/codex/agents/devrites-retrospector.toml +7 -1
- package/pack/generated/codex/agents/devrites-security-auditor.toml +13 -5
- package/pack/generated/codex/agents/devrites-simplifier-reviewer.toml +10 -2
- package/pack/generated/codex/agents/devrites-slice-wright.toml +7 -11
- package/pack/generated/codex/agents/devrites-spec-reviewer.toml +9 -1
- package/pack/generated/codex/agents/devrites-strategy-reviewer.toml +11 -4
- package/pack/generated/codex/agents/devrites-test-analyst.toml +9 -1
- package/pack/generated/codex/skills/devrites-api-interface/SKILL.md +9 -9
- package/pack/generated/codex/skills/devrites-audit/SKILL.md +3 -1
- package/pack/generated/codex/skills/devrites-debug-recovery/SKILL.md +9 -2
- package/pack/generated/codex/skills/devrites-debug-recovery/reference/cleanup-and-classify.md +3 -10
- package/pack/generated/codex/skills/devrites-debug-recovery/reference/regression-test.md +1 -1
- package/pack/generated/codex/skills/devrites-doubt/SKILL.md +5 -7
- package/pack/generated/codex/skills/devrites-frontend-craft/SKILL.md +6 -16
- package/pack/generated/codex/skills/devrites-frontend-craft/reference/craft.md +5 -13
- package/pack/generated/codex/skills/devrites-frontend-craft/reference/design-references.md +2 -3
- package/pack/generated/codex/skills/devrites-frontend-craft/reference/fullstack.md +4 -3
- package/pack/generated/codex/skills/devrites-frontend-craft/reference/quality-standards.md +82 -21
- package/pack/generated/codex/skills/devrites-frontend-craft/reference/reuse-first.md +4 -9
- package/pack/generated/codex/skills/devrites-frontend-craft/reference/shape.md +3 -7
- package/pack/generated/codex/skills/devrites-interview/SKILL.md +4 -3
- package/pack/generated/codex/skills/devrites-lib/SKILL.md +2 -1
- package/pack/generated/codex/skills/devrites-lib/reference/candidate-integrity.md +1 -9
- package/pack/generated/codex/skills/devrites-lib/reference/intent-map.md +27 -3
- package/pack/generated/codex/skills/devrites-lib/reference/orchestration-profiles.md +5 -0
- package/pack/generated/codex/skills/devrites-lib/reference/parallel-dispatch.md +34 -4
- package/pack/generated/codex/skills/devrites-lib/reference/reply-contract.md +10 -3
- package/pack/generated/codex/skills/devrites-lib/reference/standards/README.md +7 -0
- package/pack/generated/codex/skills/devrites-lib/reference/standards/afk-hitl.md +34 -15
- package/pack/generated/codex/skills/devrites-lib/reference/standards/agents.md +13 -5
- package/pack/generated/codex/skills/devrites-lib/reference/standards/browser-proof-checklist.md +19 -3
- package/pack/generated/codex/skills/devrites-lib/reference/standards/ci-cd.md +1 -1
- package/pack/generated/codex/skills/devrites-lib/reference/standards/code-navigation.md +43 -0
- package/pack/generated/codex/skills/devrites-lib/reference/standards/code-review.md +25 -2
- package/pack/generated/codex/skills/devrites-lib/reference/standards/coding-style.md +4 -3
- package/pack/generated/codex/skills/devrites-lib/reference/standards/context-hygiene.md +9 -1
- package/pack/generated/codex/skills/devrites-lib/reference/standards/core.md +34 -10
- package/pack/generated/codex/skills/devrites-lib/reference/standards/data-integrity.md +24 -1
- package/pack/generated/codex/skills/devrites-lib/reference/standards/debug-recovery.md +8 -1
- package/pack/generated/codex/skills/devrites-lib/reference/standards/definition-of-done.md +14 -11
- package/pack/generated/codex/skills/devrites-lib/reference/standards/documentation.md +4 -1
- package/pack/generated/codex/skills/devrites-lib/reference/standards/edge-case-trace.md +5 -3
- package/pack/generated/codex/skills/devrites-lib/reference/standards/elicitation.md +6 -1
- package/pack/generated/codex/skills/devrites-lib/reference/standards/error-handling.md +5 -2
- package/pack/generated/codex/skills/devrites-lib/reference/standards/integration-reliability.md +32 -9
- package/pack/generated/codex/skills/devrites-lib/reference/standards/loop-operations.md +2 -2
- package/pack/generated/codex/skills/devrites-lib/reference/standards/observability.md +6 -1
- package/pack/generated/codex/skills/devrites-lib/reference/standards/one-shot-actions.md +2 -2
- package/pack/generated/codex/skills/devrites-lib/reference/standards/patterns.md +16 -0
- package/pack/generated/codex/skills/devrites-lib/reference/standards/performance.md +20 -0
- package/pack/generated/codex/skills/devrites-lib/reference/standards/prose-style.md +7 -0
- package/pack/generated/codex/skills/devrites-lib/reference/standards/repository-topology.md +8 -1
- package/pack/generated/codex/skills/devrites-lib/reference/standards/review-checklist.md +7 -5
- package/pack/generated/codex/skills/devrites-lib/reference/standards/security-checklist.md +13 -1
- package/pack/generated/codex/skills/devrites-lib/reference/standards/security.md +109 -11
- package/pack/generated/codex/skills/devrites-lib/reference/standards/skill-authoring.md +53 -2
- package/pack/generated/codex/skills/devrites-lib/reference/standards/spec-grammar.md +28 -26
- package/pack/generated/codex/skills/devrites-lib/reference/standards/testing.md +22 -2
- package/pack/generated/codex/skills/devrites-lib/reference/standards/tooling.md +40 -12
- package/pack/generated/codex/skills/devrites-lib/reference/standards/workflow-artifacts.md +24 -8
- package/pack/generated/codex/skills/devrites-lib/reference/visual-playbooks/code.md +0 -2
- package/pack/generated/codex/skills/devrites-lib/reference/visual-playbooks/comparison.md +0 -2
- package/pack/generated/codex/skills/devrites-lib/reference/visual-playbooks/diagram.md +1 -3
- package/pack/generated/codex/skills/devrites-lib/reference/visual-playbooks/index.md +2 -4
- package/pack/generated/codex/skills/devrites-lib/reference/visual-playbooks/input.md +1 -2
- package/pack/generated/codex/skills/devrites-lib/reference/visual-playbooks/plan.md +1 -2
- package/pack/generated/codex/skills/devrites-lib/reference/visual-playbooks/slides.md +0 -2
- package/pack/generated/codex/skills/devrites-lib/reference/visual-playbooks/table.md +0 -2
- package/pack/generated/codex/skills/devrites-lib/reference/workspace-artifact-schema.md +7 -5
- package/pack/generated/codex/skills/devrites-prose-craft/SKILL.md +11 -7
- package/pack/generated/codex/skills/devrites-prose-craft/reference/banned-phrases.md +41 -4
- package/pack/generated/codex/skills/devrites-prose-craft/reference/examples.md +31 -2
- package/pack/generated/codex/skills/devrites-prose-craft/reference/structures.md +62 -0
- package/pack/generated/codex/skills/devrites-source-driven/SKILL.md +11 -12
- package/pack/generated/codex/skills/devrites-ux-shape/SKILL.md +5 -6
- package/pack/generated/codex/skills/rite/SKILL.md +3 -1
- package/pack/generated/codex/skills/rite-adopt/SKILL.md +9 -8
- package/pack/generated/codex/skills/rite-autocomplete/SKILL.md +9 -6
- package/pack/generated/codex/skills/rite-build/SKILL.md +6 -3
- package/pack/generated/codex/skills/rite-build/reference/afk-discipline.md +2 -2
- package/pack/generated/codex/skills/rite-build/reference/checkpoint.md +3 -1
- package/pack/generated/codex/skills/rite-build/reference/output.md +2 -2
- package/pack/generated/codex/skills/rite-build/reference/parallel-batch.md +19 -2
- package/pack/generated/codex/skills/rite-build/reference/phase-contract.md +5 -5
- package/pack/generated/codex/skills/rite-build/reference/tdd.md +3 -2
- package/pack/generated/codex/skills/rite-build/reference/wright-dispatch.md +7 -7
- package/pack/generated/codex/skills/rite-clarify/SKILL.md +6 -5
- package/pack/generated/codex/skills/rite-converge/SKILL.md +8 -7
- package/pack/generated/codex/skills/rite-converge/reference/anti-patterns.md +1 -1
- package/pack/generated/codex/skills/rite-customize/SKILL.md +9 -0
- package/pack/generated/codex/skills/rite-define/SKILL.md +4 -7
- package/pack/generated/codex/skills/rite-define/reference/anti-patterns.md +1 -1
- package/pack/generated/codex/skills/rite-define/reference/gates.md +6 -5
- package/pack/generated/codex/skills/rite-define/reference/plan-template.md +2 -2
- package/pack/generated/codex/skills/rite-dogfood/SKILL.md +10 -4
- package/pack/generated/codex/skills/rite-explain/SKILL.md +9 -5
- package/pack/generated/codex/skills/rite-explain/reference/intake.md +2 -1
- package/pack/generated/codex/skills/rite-frame/SKILL.md +1 -1
- package/pack/generated/codex/skills/rite-handoff/SKILL.md +1 -1
- package/pack/generated/codex/skills/rite-learn/SKILL.md +22 -4
- package/pack/generated/codex/skills/rite-plan/SKILL.md +4 -4
- package/pack/generated/codex/skills/rite-plan/reference/anti-patterns.md +2 -2
- package/pack/generated/codex/skills/rite-plan/reference/replan-and-repair.md +24 -0
- package/pack/generated/codex/skills/rite-polish/SKILL.md +13 -6
- package/pack/generated/codex/skills/rite-polish/reference/anti-ai-slop.md +20 -0
- package/pack/generated/codex/skills/rite-polish/reference/browser-polish-evidence.md +3 -1
- package/pack/generated/codex/skills/rite-polish/reference/code.md +1 -19
- package/pack/generated/codex/skills/rite-polish/reference/harden-checklist.md +1 -1
- package/pack/generated/codex/skills/rite-polish/reference/ledger.md +3 -0
- package/pack/generated/codex/skills/rite-polish/reference/ui.md +4 -3
- package/pack/generated/codex/skills/rite-pov/SKILL.md +16 -1
- package/pack/generated/codex/skills/rite-pr-feedback/SKILL.md +1 -1
- package/pack/generated/codex/skills/rite-pressure-test/SKILL.md +2 -1
- package/pack/generated/codex/skills/rite-prototype/SKILL.md +2 -2
- package/pack/generated/codex/skills/rite-prove/SKILL.md +6 -6
- package/pack/generated/codex/skills/rite-prove/reference/acceptance-proof.md +8 -9
- package/pack/generated/codex/skills/rite-prove/reference/browser-proof.md +5 -3
- package/pack/generated/codex/skills/rite-prove/reference/test-command-discovery.md +0 -1
- package/pack/generated/codex/skills/rite-quick/SKILL.md +6 -4
- package/pack/generated/codex/skills/rite-resolve/SKILL.md +5 -4
- package/pack/generated/codex/skills/rite-resolve/reference/answer-protocol.md +1 -1
- package/pack/generated/codex/skills/rite-review/SKILL.md +18 -27
- package/pack/generated/codex/skills/rite-review/reference/cognitive-load.md +0 -2
- package/pack/generated/codex/skills/rite-review/reference/five-axis-review.md +3 -3
- package/pack/generated/codex/skills/rite-review/reference/nielsen-heuristics.md +3 -7
- package/pack/generated/codex/skills/rite-seal/SKILL.md +7 -3
- package/pack/generated/codex/skills/rite-seal/reference/final-evidence.md +5 -6
- package/pack/generated/codex/skills/rite-seal/reference/risk-and-rollback.md +1 -1
- package/pack/generated/codex/skills/rite-seal/reference/seal-template.md +2 -0
- package/pack/generated/codex/skills/rite-ship/SKILL.md +3 -2
- package/pack/generated/codex/skills/rite-ship/reference/close-out.md +25 -5
- package/pack/generated/codex/skills/rite-ship/reference/rollout.md +1 -1
- package/pack/generated/codex/skills/rite-spec/SKILL.md +2 -1
- package/pack/generated/codex/skills/rite-spec/reference/anti-patterns.md +0 -1
- package/pack/generated/codex/skills/rite-spec/reference/investigation.md +1 -3
- package/pack/generated/codex/skills/rite-spec/reference/spec-checklists.md +1 -1
- package/pack/generated/codex/skills/rite-spec/reference/spec-template.md +1 -1
- package/pack/generated/codex/skills/rite-spec/reference/state-workspace.md +6 -3
- package/pack/generated/codex/skills/rite-status/SKILL.md +3 -1
- package/pack/generated/codex/skills/rite-temper/SKILL.md +9 -9
- package/pack/generated/codex/skills/rite-temper/reference/review-dimensions.md +2 -2
- package/pack/generated/codex/skills/rite-temper/reference/scope-modes.md +2 -2
- package/pack/generated/codex/skills/rite-temper/reference/significance.md +4 -4
- package/pack/generated/codex/skills/rite-temper/reference/strategy-template.md +6 -6
- package/pack/generated/codex/skills/rite-upgrade/SKILL.md +2 -2
- package/pack/generated/codex/skills/rite-vet/SKILL.md +14 -10
- package/pack/generated/codex/skills/rite-vet/reference/artifacts.md +9 -1
- package/pack/generated/codex/skills/rite-vet/reference/review-axes.md +14 -2
- package/pack/generated/codex/skills/rite-watch-pr/SKILL.md +2 -2
- package/pack/generated/codex/skills/rite-zoom-out/SKILL.md +4 -4
- package/pack/generated/omp/.omp-plugin/plugin.json +6 -0
- package/pack/generated/omp/agents/devrites-code-reviewer.md +138 -0
- package/pack/generated/omp/agents/devrites-devex-reviewer.md +123 -0
- package/pack/generated/omp/agents/devrites-doubt-reviewer.md +81 -0
- package/pack/generated/omp/agents/devrites-evidence-scout.md +71 -0
- package/pack/generated/omp/agents/devrites-frontend-reviewer.md +114 -0
- package/pack/generated/omp/agents/devrites-performance-reviewer.md +114 -0
- package/pack/generated/omp/agents/devrites-plan-drafter.md +82 -0
- package/pack/generated/omp/agents/devrites-plan-reviewer.md +132 -0
- package/pack/generated/omp/agents/devrites-proof-runner.md +73 -0
- package/pack/generated/omp/agents/devrites-retrospector.md +60 -0
- package/pack/generated/omp/agents/devrites-security-auditor.md +108 -0
- package/pack/generated/omp/agents/devrites-simplifier-reviewer.md +93 -0
- package/pack/generated/omp/agents/devrites-slice-wright.md +203 -0
- package/pack/generated/omp/agents/devrites-spec-reviewer.md +95 -0
- package/pack/generated/omp/agents/devrites-strategy-reviewer.md +99 -0
- package/pack/generated/omp/agents/devrites-test-analyst.md +88 -0
- package/pack/generated/omp/agents/devrites-upgrade-planner.md +80 -0
- package/pack/generated/omp/skills/devrites-api-interface/SKILL.md +61 -0
- package/pack/generated/omp/skills/devrites-audit/SKILL.md +50 -0
- package/pack/generated/omp/skills/devrites-browser-proof/SKILL.md +76 -0
- package/pack/generated/omp/skills/devrites-browser-proof/reference/browser-performance.md +15 -0
- package/pack/generated/omp/skills/devrites-browser-proof/reference/visual-verdict.md +34 -0
- package/pack/generated/omp/skills/devrites-debug-recovery/SKILL.md +96 -0
- package/pack/generated/omp/skills/devrites-debug-recovery/reference/build-the-loop.md +58 -0
- package/pack/generated/omp/skills/devrites-debug-recovery/reference/cleanup-and-classify.md +34 -0
- package/pack/generated/omp/skills/devrites-debug-recovery/reference/hypotheses.md +17 -0
- package/pack/generated/omp/skills/devrites-debug-recovery/reference/instrumentation.md +21 -0
- package/pack/generated/omp/skills/devrites-debug-recovery/reference/regression-test.md +30 -0
- package/pack/generated/omp/skills/devrites-debug-recovery/reference/trace.md +25 -0
- package/pack/generated/omp/skills/devrites-doubt/SKILL.md +86 -0
- package/pack/generated/omp/skills/devrites-frontend-craft/SKILL.md +86 -0
- package/pack/generated/omp/skills/devrites-frontend-craft/reference/craft.md +63 -0
- package/pack/generated/omp/skills/devrites-frontend-craft/reference/design-references.md +116 -0
- package/pack/generated/omp/skills/devrites-frontend-craft/reference/fullstack.md +46 -0
- package/pack/generated/omp/skills/devrites-frontend-craft/reference/quality-standards.md +294 -0
- package/pack/generated/omp/skills/devrites-frontend-craft/reference/reuse-first.md +53 -0
- package/pack/generated/omp/skills/devrites-frontend-craft/reference/shape.md +56 -0
- package/pack/generated/omp/skills/devrites-interview/SKILL.md +102 -0
- package/pack/generated/omp/skills/devrites-lib/SKILL.md +58 -0
- package/pack/generated/omp/skills/devrites-lib/reference/candidate-integrity.md +43 -0
- package/pack/generated/omp/skills/devrites-lib/reference/intent-map.md +64 -0
- package/pack/generated/omp/skills/devrites-lib/reference/orchestration-profiles.md +27 -0
- package/pack/generated/omp/skills/devrites-lib/reference/parallel-dispatch.md +74 -0
- package/pack/generated/omp/skills/devrites-lib/reference/reply-contract.md +88 -0
- package/pack/generated/omp/skills/devrites-lib/reference/standards/README.md +60 -0
- package/pack/generated/omp/skills/devrites-lib/reference/standards/acceptance-preserving-reslice.md +30 -0
- package/pack/generated/omp/skills/devrites-lib/reference/standards/afk-hitl.md +345 -0
- package/pack/generated/omp/skills/devrites-lib/reference/standards/agents.md +98 -0
- package/pack/generated/omp/skills/devrites-lib/reference/standards/anti-patterns.md +48 -0
- package/pack/generated/omp/skills/devrites-lib/reference/standards/browser-proof-checklist.md +24 -0
- package/pack/generated/omp/skills/devrites-lib/reference/standards/ci-cd.md +50 -0
- package/pack/generated/omp/skills/devrites-lib/reference/standards/code-navigation.md +43 -0
- package/pack/generated/omp/skills/devrites-lib/reference/standards/code-review.md +108 -0
- package/pack/generated/omp/skills/devrites-lib/reference/standards/coding-style.md +48 -0
- package/pack/generated/omp/skills/devrites-lib/reference/standards/context-hygiene.md +89 -0
- package/pack/generated/omp/skills/devrites-lib/reference/standards/core.md +167 -0
- package/pack/generated/omp/skills/devrites-lib/reference/standards/data-integrity.md +118 -0
- package/pack/generated/omp/skills/devrites-lib/reference/standards/debug-recovery.md +28 -0
- package/pack/generated/omp/skills/devrites-lib/reference/standards/definition-of-done.md +19 -0
- package/pack/generated/omp/skills/devrites-lib/reference/standards/deprecation.md +31 -0
- package/pack/generated/omp/skills/devrites-lib/reference/standards/developer-experience.md +119 -0
- package/pack/generated/omp/skills/devrites-lib/reference/standards/development-workflow.md +29 -0
- package/pack/generated/omp/skills/devrites-lib/reference/standards/documentation.md +43 -0
- package/pack/generated/omp/skills/devrites-lib/reference/standards/edge-case-trace.md +92 -0
- package/pack/generated/omp/skills/devrites-lib/reference/standards/elicitation.md +85 -0
- package/pack/generated/omp/skills/devrites-lib/reference/standards/error-handling.md +47 -0
- package/pack/generated/omp/skills/devrites-lib/reference/standards/git-workflow.md +49 -0
- package/pack/generated/omp/skills/devrites-lib/reference/standards/hooks.md +25 -0
- package/pack/generated/omp/skills/devrites-lib/reference/standards/integration-reliability.md +102 -0
- package/pack/generated/omp/skills/devrites-lib/reference/standards/loop-operations.md +85 -0
- package/pack/generated/omp/skills/devrites-lib/reference/standards/observability.md +88 -0
- package/pack/generated/omp/skills/devrites-lib/reference/standards/one-shot-actions.md +97 -0
- package/pack/generated/omp/skills/devrites-lib/reference/standards/patterns.md +68 -0
- package/pack/generated/omp/skills/devrites-lib/reference/standards/performance.md +51 -0
- package/pack/generated/omp/skills/devrites-lib/reference/standards/principles.md +42 -0
- package/pack/generated/omp/skills/devrites-lib/reference/standards/prose-style.md +123 -0
- package/pack/generated/omp/skills/devrites-lib/reference/standards/release/ship-checklist.md +8 -0
- package/pack/generated/omp/skills/devrites-lib/reference/standards/repository-topology.md +80 -0
- package/pack/generated/omp/skills/devrites-lib/reference/standards/review-checklist.md +12 -0
- package/pack/generated/omp/skills/devrites-lib/reference/standards/security-checklist.md +25 -0
- package/pack/generated/omp/skills/devrites-lib/reference/standards/security.md +202 -0
- package/pack/generated/omp/skills/devrites-lib/reference/standards/skill-authoring.md +209 -0
- package/pack/generated/omp/skills/devrites-lib/reference/standards/spec-grammar.md +197 -0
- package/pack/generated/omp/skills/devrites-lib/reference/standards/test-proof-checklist.md +13 -0
- package/pack/generated/omp/skills/devrites-lib/reference/standards/testing.md +212 -0
- package/pack/generated/omp/skills/devrites-lib/reference/standards/tooling.md +92 -0
- package/pack/generated/omp/skills/devrites-lib/reference/standards/workflow-artifacts.md +427 -0
- package/pack/generated/omp/skills/devrites-lib/reference/visual-playbooks/code.md +44 -0
- package/pack/generated/omp/skills/devrites-lib/reference/visual-playbooks/comparison.md +42 -0
- package/pack/generated/omp/skills/devrites-lib/reference/visual-playbooks/diagram.md +51 -0
- package/pack/generated/omp/skills/devrites-lib/reference/visual-playbooks/index.md +66 -0
- package/pack/generated/omp/skills/devrites-lib/reference/visual-playbooks/input.md +46 -0
- package/pack/generated/omp/skills/devrites-lib/reference/visual-playbooks/outline-template.md +106 -0
- package/pack/generated/omp/skills/devrites-lib/reference/visual-playbooks/plan.md +48 -0
- package/pack/generated/omp/skills/devrites-lib/reference/visual-playbooks/slides.md +40 -0
- package/pack/generated/omp/skills/devrites-lib/reference/visual-playbooks/table.md +42 -0
- package/pack/generated/omp/skills/devrites-lib/reference/workspace-artifact-schema.md +228 -0
- package/pack/generated/omp/skills/devrites-prose-craft/SKILL.md +73 -0
- package/pack/generated/omp/skills/devrites-prose-craft/reference/banned-phrases.md +132 -0
- package/pack/generated/omp/skills/devrites-prose-craft/reference/examples.md +131 -0
- package/pack/generated/omp/skills/devrites-prose-craft/reference/structures.md +196 -0
- package/pack/generated/omp/skills/devrites-source-driven/SKILL.md +52 -0
- package/pack/generated/omp/skills/devrites-ux-shape/SKILL.md +134 -0
- package/pack/generated/omp/skills/devrites-ux-shape/reference/brief-template.md +108 -0
- package/pack/generated/omp/skills/devrites-ux-shape/reference/visual-direction-probe.md +48 -0
- package/pack/generated/omp/skills/rite/SKILL.md +148 -0
- package/pack/generated/omp/skills/rite/reference/menu.md +48 -0
- package/pack/generated/omp/skills/rite-adopt/SKILL.md +52 -0
- package/pack/generated/omp/skills/rite-adopt/reference/adoption.md +19 -0
- package/pack/generated/omp/skills/rite-adopt/reference/anti-patterns.md +19 -0
- package/pack/generated/omp/skills/rite-autocomplete/SKILL.md +122 -0
- package/pack/generated/omp/skills/rite-autocomplete/reference/decision-policy.md +41 -0
- package/pack/generated/omp/skills/rite-autocomplete/reference/loop.md +116 -0
- package/pack/generated/omp/skills/rite-autocomplete/reference/stop-conditions.md +92 -0
- package/pack/generated/omp/skills/rite-build/SKILL.md +79 -0
- package/pack/generated/omp/skills/rite-build/reference/afk-discipline.md +145 -0
- package/pack/generated/omp/skills/rite-build/reference/anti-patterns.md +23 -0
- package/pack/generated/omp/skills/rite-build/reference/checkpoint-protocol.md +120 -0
- package/pack/generated/omp/skills/rite-build/reference/checkpoint.md +46 -0
- package/pack/generated/omp/skills/rite-build/reference/frontend-trigger.md +39 -0
- package/pack/generated/omp/skills/rite-build/reference/one-slice-cycle.md +45 -0
- package/pack/generated/omp/skills/rite-build/reference/output.md +33 -0
- package/pack/generated/omp/skills/rite-build/reference/parallel-batch.md +81 -0
- package/pack/generated/omp/skills/rite-build/reference/phase-contract.md +66 -0
- package/pack/generated/omp/skills/rite-build/reference/spec-drift-guard.md +59 -0
- package/pack/generated/omp/skills/rite-build/reference/tdd.md +27 -0
- package/pack/generated/omp/skills/rite-build/reference/wright-dispatch.md +86 -0
- package/pack/generated/omp/skills/rite-clarify/SKILL.md +99 -0
- package/pack/generated/omp/skills/rite-clarify/reference/anti-patterns.md +24 -0
- package/pack/generated/omp/skills/rite-clarify/reference/decision-coverage.md +55 -0
- package/pack/generated/omp/skills/rite-converge/SKILL.md +140 -0
- package/pack/generated/omp/skills/rite-converge/reference/anti-patterns.md +35 -0
- package/pack/generated/omp/skills/rite-converge/reference/convergence-assessment.md +65 -0
- package/pack/generated/omp/skills/rite-customize/SKILL.md +60 -0
- package/pack/generated/omp/skills/rite-define/SKILL.md +166 -0
- package/pack/generated/omp/skills/rite-define/reference/anti-patterns.md +26 -0
- package/pack/generated/omp/skills/rite-define/reference/gates.md +154 -0
- package/pack/generated/omp/skills/rite-define/reference/plan-template.md +149 -0
- package/pack/generated/omp/skills/rite-doctor/SKILL.md +69 -0
- package/pack/generated/omp/skills/rite-dogfood/SKILL.md +55 -0
- package/pack/generated/omp/skills/rite-explain/SKILL.md +152 -0
- package/pack/generated/omp/skills/rite-explain/reference/intake.md +89 -0
- package/pack/generated/omp/skills/rite-frame/SKILL.md +115 -0
- package/pack/generated/omp/skills/rite-frame/reference/failure-modes.md +66 -0
- package/pack/generated/omp/skills/rite-handoff/SKILL.md +97 -0
- package/pack/generated/omp/skills/rite-handoff/reference/handoff-template.md +44 -0
- package/pack/generated/omp/skills/rite-learn/SKILL.md +72 -0
- package/pack/generated/omp/skills/rite-plan/SKILL.md +132 -0
- package/pack/generated/omp/skills/rite-plan/reference/anti-patterns.md +34 -0
- package/pack/generated/omp/skills/rite-plan/reference/dependency-graph.md +48 -0
- package/pack/generated/omp/skills/rite-plan/reference/replan-and-repair.md +73 -0
- package/pack/generated/omp/skills/rite-plan/reference/slicing.md +65 -0
- package/pack/generated/omp/skills/rite-plan/reference/task-breakdown.md +42 -0
- package/pack/generated/omp/skills/rite-polish/SKILL.md +104 -0
- package/pack/generated/omp/skills/rite-polish/reference/adr-promotion.md +11 -0
- package/pack/generated/omp/skills/rite-polish/reference/anti-ai-slop.md +187 -0
- package/pack/generated/omp/skills/rite-polish/reference/anti-patterns.md +30 -0
- package/pack/generated/omp/skills/rite-polish/reference/backend-polish.md +80 -0
- package/pack/generated/omp/skills/rite-polish/reference/browser-polish-evidence.md +33 -0
- package/pack/generated/omp/skills/rite-polish/reference/code.md +82 -0
- package/pack/generated/omp/skills/rite-polish/reference/design-memory.md +117 -0
- package/pack/generated/omp/skills/rite-polish/reference/design-system-discovery.md +8 -0
- package/pack/generated/omp/skills/rite-polish/reference/harden-checklist.md +109 -0
- package/pack/generated/omp/skills/rite-polish/reference/ledger.md +65 -0
- package/pack/generated/omp/skills/rite-polish/reference/ui.md +137 -0
- package/pack/generated/omp/skills/rite-pov/SKILL.md +58 -0
- package/pack/generated/omp/skills/rite-pr-feedback/SKILL.md +54 -0
- package/pack/generated/omp/skills/rite-pressure-test/SKILL.md +67 -0
- package/pack/generated/omp/skills/rite-prototype/SKILL.md +104 -0
- package/pack/generated/omp/skills/rite-prove/SKILL.md +122 -0
- package/pack/generated/omp/skills/rite-prove/reference/acceptance-proof.md +88 -0
- package/pack/generated/omp/skills/rite-prove/reference/anti-patterns.md +25 -0
- package/pack/generated/omp/skills/rite-prove/reference/browser-proof.md +51 -0
- package/pack/generated/omp/skills/rite-prove/reference/failure-triage.md +43 -0
- package/pack/generated/omp/skills/rite-prove/reference/proof-ladder.md +28 -0
- package/pack/generated/omp/skills/rite-prove/reference/test-command-discovery.md +30 -0
- package/pack/generated/omp/skills/rite-quick/SKILL.md +82 -0
- package/pack/generated/omp/skills/rite-resolve/SKILL.md +95 -0
- package/pack/generated/omp/skills/rite-resolve/reference/answer-protocol.md +118 -0
- package/pack/generated/omp/skills/rite-review/SKILL.md +159 -0
- package/pack/generated/omp/skills/rite-review/reference/anti-patterns.md +32 -0
- package/pack/generated/omp/skills/rite-review/reference/cognitive-load.md +90 -0
- package/pack/generated/omp/skills/rite-review/reference/feature-scoped-review.md +26 -0
- package/pack/generated/omp/skills/rite-review/reference/five-axis-review.md +66 -0
- package/pack/generated/omp/skills/rite-review/reference/nielsen-heuristics.md +126 -0
- package/pack/generated/omp/skills/rite-review/reference/performance-checklist.md +80 -0
- package/pack/generated/omp/skills/rite-review/reference/performance-review.md +14 -0
- package/pack/generated/omp/skills/rite-review/reference/security-review.md +42 -0
- package/pack/generated/omp/skills/rite-seal/SKILL.md +73 -0
- package/pack/generated/omp/skills/rite-seal/reference/anti-patterns.md +29 -0
- package/pack/generated/omp/skills/rite-seal/reference/final-evidence.md +40 -0
- package/pack/generated/omp/skills/rite-seal/reference/go-no-go.md +29 -0
- package/pack/generated/omp/skills/rite-seal/reference/output.md +5 -0
- package/pack/generated/omp/skills/rite-seal/reference/phase-contract.md +47 -0
- package/pack/generated/omp/skills/rite-seal/reference/risk-and-rollback.md +56 -0
- package/pack/generated/omp/skills/rite-seal/reference/seal-template.md +27 -0
- package/pack/generated/omp/skills/rite-ship/SKILL.md +85 -0
- package/pack/generated/omp/skills/rite-ship/reference/anti-patterns.md +28 -0
- package/pack/generated/omp/skills/rite-ship/reference/close-out.md +54 -0
- package/pack/generated/omp/skills/rite-ship/reference/git-ship.md +111 -0
- package/pack/generated/omp/skills/rite-ship/reference/rollout.md +62 -0
- package/pack/generated/omp/skills/rite-ship/reference/ship-template.md +39 -0
- package/pack/generated/omp/skills/rite-spec/SKILL.md +144 -0
- package/pack/generated/omp/skills/rite-spec/reference/acceptance-criteria.md +31 -0
- package/pack/generated/omp/skills/rite-spec/reference/ai-spec-template.md +40 -0
- package/pack/generated/omp/skills/rite-spec/reference/anti-patterns.md +27 -0
- package/pack/generated/omp/skills/rite-spec/reference/interview-patterns.md +56 -0
- package/pack/generated/omp/skills/rite-spec/reference/investigation.md +83 -0
- package/pack/generated/omp/skills/rite-spec/reference/question-protocol.md +36 -0
- package/pack/generated/omp/skills/rite-spec/reference/references-intake.md +62 -0
- package/pack/generated/omp/skills/rite-spec/reference/spec-checklists.md +89 -0
- package/pack/generated/omp/skills/rite-spec/reference/spec-template.md +154 -0
- package/pack/generated/omp/skills/rite-spec/reference/state-workspace.md +221 -0
- package/pack/generated/omp/skills/rite-status/SKILL.md +54 -0
- package/pack/generated/omp/skills/rite-temper/SKILL.md +127 -0
- package/pack/generated/omp/skills/rite-temper/reference/anti-patterns.md +29 -0
- package/pack/generated/omp/skills/rite-temper/reference/review-dimensions.md +67 -0
- package/pack/generated/omp/skills/rite-temper/reference/scope-modes.md +53 -0
- package/pack/generated/omp/skills/rite-temper/reference/significance.md +46 -0
- package/pack/generated/omp/skills/rite-temper/reference/strategy-template.md +90 -0
- package/pack/generated/omp/skills/rite-upgrade/SKILL.md +112 -0
- package/pack/generated/omp/skills/rite-vet/SKILL.md +158 -0
- package/pack/generated/omp/skills/rite-vet/reference/anti-patterns.md +41 -0
- package/pack/generated/omp/skills/rite-vet/reference/artifacts.md +202 -0
- package/pack/generated/omp/skills/rite-vet/reference/cross-model.md +19 -0
- package/pack/generated/omp/skills/rite-vet/reference/depth.md +60 -0
- package/pack/generated/omp/skills/rite-vet/reference/eng-lenses.md +48 -0
- package/pack/generated/omp/skills/rite-vet/reference/review-axes.md +176 -0
- package/pack/generated/omp/skills/rite-watch-pr/SKILL.md +85 -0
- package/pack/generated/omp/skills/rite-zoom-out/SKILL.md +69 -0
- package/package.json +12 -1
- package/scripts/build-host-artifacts.sh +48 -6
- package/scripts/omp-generate.sh +152 -0
package/docs/usage.md
CHANGED
|
@@ -8,6 +8,7 @@ lifecycle. Workspace phases first read the active workspace from
|
|
|
8
8
|
command that can create or select one. `/rite-upgrade [slug]` is the
|
|
9
9
|
compatibility audit for an older active workspace that cannot resume.
|
|
10
10
|
|
|
11
|
+
- **First install** → [README Quick start](../README.md#quick-start) (`npx devrites@latest`)
|
|
11
12
|
- **Full command reference** → [`command-map.md`](command-map.md)
|
|
12
13
|
- **Flow diagrams** → [`flow.md`](flow.md)
|
|
13
14
|
- **Architecture rationale** → [`architecture.md`](architecture.md)
|
|
@@ -61,7 +62,7 @@ preservation-first audit: age/cursor encoding alone is not a defect, and only a
|
|
|
61
62
|
cited current-contract failure routes repair through its phase owner. Completed
|
|
62
63
|
work and evidence stay intact. Candidate defects may route current Prove,
|
|
63
64
|
Polish, Review, and Seal in that order; old passes are never synthesized. The
|
|
64
|
-
engine
|
|
65
|
+
engine owns deterministic v5 schema normalization.
|
|
65
66
|
|
|
66
67
|
Project-root sentinel (outside the workspace):
|
|
67
68
|
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# golangci-lint v2 — curated complement to the existing strict gates
|
|
2
|
+
# (staticcheck, govulncheck, gosec). Enables only checkers that add findings
|
|
3
|
+
# staticcheck does not produce; see the engine job in ci.yml and `make lint`.
|
|
4
|
+
version: "2"
|
|
5
|
+
|
|
6
|
+
linters:
|
|
7
|
+
default: none
|
|
8
|
+
enable:
|
|
9
|
+
# Unchecked error returns: staticcheck does not flag ignored errors.
|
|
10
|
+
- errcheck
|
|
11
|
+
# Assignments never read: distinct from staticcheck's unused analysis.
|
|
12
|
+
- ineffassign
|
|
13
|
+
settings:
|
|
14
|
+
errcheck:
|
|
15
|
+
# The engine's CLI boundary reports via exit paths, not error returns;
|
|
16
|
+
# writes to the operator's stdout/stderr streams fail only on closed
|
|
17
|
+
# writers.
|
|
18
|
+
exclude-functions:
|
|
19
|
+
- fmt.Fprint
|
|
20
|
+
- fmt.Fprintf
|
|
21
|
+
- fmt.Fprintln
|
|
22
|
+
- (*bytes.Buffer).WriteByte
|
|
23
|
+
- (*strings.Builder).WriteByte
|
|
24
|
+
- (*strings.Builder).WriteString
|
|
25
|
+
|
|
26
|
+
formatters:
|
|
27
|
+
default: none
|
package/engine/AGENTS.md
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# Engine control plane
|
|
2
|
+
|
|
3
|
+
This directory is the deterministic Go control plane. Native skills and agents
|
|
4
|
+
own semantic judgment; this binary owns structure, identity, and ID-reference
|
|
5
|
+
completeness.
|
|
6
|
+
|
|
7
|
+
## Invariants
|
|
8
|
+
|
|
9
|
+
- Build with `CGO_ENABLED=0`. The hot path is stdlib-only (no CLI framework,
|
|
10
|
+
no model client). Workspace policy, state, proof, and install-application
|
|
11
|
+
packages stay network-free. Direct `devrites-engine update` is the bounded,
|
|
12
|
+
checksummed exception (ADR-0008, ADR-0024, ADR-0028).
|
|
13
|
+
- Date-derived `resolve` output reads the clock through `DEVRITES_NOW`
|
|
14
|
+
(RFC-3339 or `YYYY-MM-DD`). Operational timestamps (leases, install
|
|
15
|
+
manifests) use wall time by design (ADR-0006).
|
|
16
|
+
- `check readiness` / `check seal` do not parse reviewer prose or infer
|
|
17
|
+
coverage quality. They may require that a canonical `AC-###` ID declared in
|
|
18
|
+
`spec.md` also appears as a literal substring in `tasks.md` and
|
|
19
|
+
`test-plan.md` when those artifacts are required.
|
|
20
|
+
- Local full gate: `make quality` (`gofmt`, `go vet`, `staticcheck`,
|
|
21
|
+
`govulncheck`, `gosec`, `golangci-lint`, `osv-scanner`,
|
|
22
|
+
`go test -race -shuffle=on -count=1`).
|
|
23
|
+
|
|
24
|
+
See [`../CONTEXT.md`](../CONTEXT.md) and [`../docs/adr/README.md`](../docs/adr/README.md).
|
package/engine/Makefile
CHANGED
|
@@ -4,14 +4,18 @@ GOFILES := $(shell find . -name '*.go' -not -path './$(DIST)/*')
|
|
|
4
4
|
# darwin/amd64 kept for Intel Macs; the five targets the release matrix ships.
|
|
5
5
|
PLATFORMS := darwin/arm64 darwin/amd64 linux/amd64 linux/arm64 windows/amd64
|
|
6
6
|
|
|
7
|
-
.PHONY: build fmt-check test test-race vet quality staticcheck govulncheck gosec cover crosscompile clean
|
|
7
|
+
.PHONY: build fmt-check test test-race vet quality staticcheck govulncheck gosec lint cover crosscompile clean
|
|
8
8
|
|
|
9
9
|
STATICCHECK_VERSION := 2026.1
|
|
10
10
|
GOVULNCHECK_VERSION := v1.6.0
|
|
11
11
|
GOSEC_VERSION := v2.28.0
|
|
12
|
+
GOLANGCI_VERSION := v2.13.2
|
|
13
|
+
OSV_SCANNER_VERSION := v2.5.1
|
|
12
14
|
STATICCHECK := go run honnef.co/go/tools/cmd/staticcheck@$(STATICCHECK_VERSION)
|
|
13
15
|
GOVULNCHECK := go run golang.org/x/vuln/cmd/govulncheck@$(GOVULNCHECK_VERSION)
|
|
14
16
|
GOSEC := go run github.com/securego/gosec/v2/cmd/gosec@$(GOSEC_VERSION)
|
|
17
|
+
GOLANGCI := go run github.com/golangci/golangci-lint/v2/cmd/golangci-lint@$(GOLANGCI_VERSION)
|
|
18
|
+
OSV_SCANNER := go run github.com/google/osv-scanner/v2/cmd/osv-scanner@$(OSV_SCANNER_VERSION)
|
|
15
19
|
|
|
16
20
|
build:
|
|
17
21
|
CGO_ENABLED=0 go build -o $(BINARY) .
|
|
@@ -20,18 +24,18 @@ fmt-check:
|
|
|
20
24
|
@test -z "$$(gofmt -l $(GOFILES))" || (echo "gofmt required:"; gofmt -l $(GOFILES); exit 1)
|
|
21
25
|
|
|
22
26
|
test:
|
|
23
|
-
go test ./...
|
|
27
|
+
go test -shuffle=on ./...
|
|
24
28
|
|
|
25
29
|
# Race-enabled run for concurrent state paths and mutable test clients.
|
|
26
30
|
test-race:
|
|
27
|
-
go test -race -count=1 ./...
|
|
31
|
+
go test -race -shuffle=on -count=1 ./...
|
|
28
32
|
|
|
29
33
|
vet:
|
|
30
34
|
go vet ./...
|
|
31
35
|
|
|
32
36
|
# quality is the full local gate. Mirror it in CI so a green `make quality`
|
|
33
37
|
# means a green pipeline (the date-sensitive parity golden aside; see ADR-0006).
|
|
34
|
-
quality: fmt-check vet staticcheck govulncheck gosec test-race
|
|
38
|
+
quality: fmt-check vet staticcheck govulncheck gosec lint osv test-race
|
|
35
39
|
|
|
36
40
|
staticcheck:
|
|
37
41
|
$(STATICCHECK) ./...
|
|
@@ -39,8 +43,19 @@ staticcheck:
|
|
|
39
43
|
govulncheck:
|
|
40
44
|
$(GOVULNCHECK) ./...
|
|
41
45
|
|
|
46
|
+
# No rule-class exclusions: G204/G304/G702/G703 sites carry per-call
|
|
47
|
+
# `// #nosec GXXX -- <justification>` annotations in the source, so a genuinely
|
|
48
|
+
# new injection or traversal sink fails this target.
|
|
42
49
|
gosec:
|
|
43
|
-
$(GOSEC) -conf .gosec.json
|
|
50
|
+
$(GOSEC) -conf .gosec.json ./...
|
|
51
|
+
|
|
52
|
+
# Curated complement to staticcheck (errcheck + ineffassign; .golangci.yml).
|
|
53
|
+
lint:
|
|
54
|
+
$(GOLANGCI) run ./...
|
|
55
|
+
|
|
56
|
+
# OSV.dev dependency scanner (mirrors CI dependency gate).
|
|
57
|
+
osv:
|
|
58
|
+
$(OSV_SCANNER) scan --config ../osv-scanner.toml --lockfile go.mod
|
|
44
59
|
|
|
45
60
|
# Coverage baseline. No hard floor is wired yet (see ADR-0006): the number is
|
|
46
61
|
# understated because most engine behaviour is exercised through CLI-level
|
|
@@ -81,7 +81,7 @@ func writeArchive(root, output, prefix string, epoch time.Time) error {
|
|
|
81
81
|
if err != nil {
|
|
82
82
|
return fmt.Errorf("open staged release tree: %w", err)
|
|
83
83
|
}
|
|
84
|
-
defer sourceRoot.Close()
|
|
84
|
+
defer func() { _ = sourceRoot.Close() }()
|
|
85
85
|
|
|
86
86
|
entries, err := collectEntries(sourceRoot, prefix)
|
|
87
87
|
if err != nil {
|
|
@@ -96,7 +96,7 @@ func writeArchive(root, output, prefix string, epoch time.Time) error {
|
|
|
96
96
|
return fmt.Errorf("create temporary archive: %w", err)
|
|
97
97
|
}
|
|
98
98
|
tmpName := tmp.Name()
|
|
99
|
-
defer os.Remove(tmpName)
|
|
99
|
+
defer func() { _ = os.Remove(tmpName) }()
|
|
100
100
|
if err := tmp.Chmod(0o644); err != nil {
|
|
101
101
|
return errors.Join(fmt.Errorf("set archive mode: %w", err), tmp.Close())
|
|
102
102
|
}
|
|
@@ -103,7 +103,7 @@ func TestWriteEntriesRejectsChangedSource(t *testing.T) {
|
|
|
103
103
|
if err != nil {
|
|
104
104
|
t.Fatal(err)
|
|
105
105
|
}
|
|
106
|
-
defer sourceRoot.Close()
|
|
106
|
+
defer func() { _ = sourceRoot.Close() }()
|
|
107
107
|
entries, err := collectEntries(sourceRoot, "devrites-v1")
|
|
108
108
|
if err != nil {
|
|
109
109
|
t.Fatal(err)
|
|
@@ -138,7 +138,7 @@ func TestWriteEntriesRejectsEscapingSymlinkSwap(t *testing.T) {
|
|
|
138
138
|
if err != nil {
|
|
139
139
|
t.Fatal(err)
|
|
140
140
|
}
|
|
141
|
-
defer sourceRoot.Close()
|
|
141
|
+
defer func() { _ = sourceRoot.Close() }()
|
|
142
142
|
entries, err := collectEntries(sourceRoot, "devrites-v1")
|
|
143
143
|
if err != nil {
|
|
144
144
|
t.Fatal(err)
|
|
@@ -199,12 +199,12 @@ func readArchive(t *testing.T, archivePath string, epoch time.Time) archiveConte
|
|
|
199
199
|
if err != nil {
|
|
200
200
|
t.Fatal(err)
|
|
201
201
|
}
|
|
202
|
-
defer file.Close()
|
|
202
|
+
defer func() { _ = file.Close() }()
|
|
203
203
|
gz, err := gzip.NewReader(file)
|
|
204
204
|
if err != nil {
|
|
205
205
|
t.Fatal(err)
|
|
206
206
|
}
|
|
207
|
-
defer gz.Close()
|
|
207
|
+
defer func() { _ = gz.Close() }()
|
|
208
208
|
if !gz.ModTime.Equal(epoch) || gz.OS != 255 || gz.Name != "" || gz.Comment != "" || len(gz.Extra) != 0 {
|
|
209
209
|
t.Fatalf("gzip header is not normalized: %#v", gz.Header)
|
|
210
210
|
}
|
package/engine/commands.go
CHANGED
|
@@ -17,6 +17,7 @@ const (
|
|
|
17
17
|
rootUnused rootMode = iota
|
|
18
18
|
rootLenient
|
|
19
19
|
rootStrict
|
|
20
|
+
rootStrictUsage
|
|
20
21
|
)
|
|
21
22
|
|
|
22
23
|
// rootModeFor is the single policy boundary between diagnostic/read-only
|
|
@@ -34,6 +35,24 @@ func rootModeFor(command string, args []string) rootMode {
|
|
|
34
35
|
return rootStrict
|
|
35
36
|
}
|
|
36
37
|
return rootUnused
|
|
38
|
+
case "migrate":
|
|
39
|
+
return rootStrictUsage
|
|
40
|
+
case "check":
|
|
41
|
+
switch subcommand {
|
|
42
|
+
case "candidate", "readiness", "seal", "task-graph":
|
|
43
|
+
return rootStrictUsage
|
|
44
|
+
case "indexes":
|
|
45
|
+
return rootLenient
|
|
46
|
+
}
|
|
47
|
+
return rootUnused
|
|
48
|
+
case "orient":
|
|
49
|
+
return rootStrictUsage
|
|
50
|
+
case "observe":
|
|
51
|
+
switch subcommand {
|
|
52
|
+
case "summary":
|
|
53
|
+
return rootStrictUsage
|
|
54
|
+
}
|
|
55
|
+
return rootUnused
|
|
37
56
|
default:
|
|
38
57
|
return rootUnused
|
|
39
58
|
}
|
|
@@ -67,6 +86,14 @@ func resolveRootFor(command string, args []string) (string, int, error) {
|
|
|
67
86
|
return fallbackRoot(), exitOK, nil
|
|
68
87
|
}
|
|
69
88
|
return "", exitUsage, err
|
|
89
|
+
case rootStrictUsage:
|
|
90
|
+
root, err := state.ResolveRoot(os.Getenv("DEVRITES_ROOT"))
|
|
91
|
+
if err != nil {
|
|
92
|
+
// Workspace-requiring read/check commands have always mapped every
|
|
93
|
+
// resolution failure to the usage exit code.
|
|
94
|
+
return "", exitUsage, err
|
|
95
|
+
}
|
|
96
|
+
return root, exitOK, nil
|
|
70
97
|
default:
|
|
71
98
|
panic("unknown root resolution mode")
|
|
72
99
|
}
|
|
@@ -15,8 +15,10 @@ const (
|
|
|
15
15
|
|
|
16
16
|
ClaudeSkillsTarget = ".claude/skills"
|
|
17
17
|
CodexSkillsTarget = ".agents/skills"
|
|
18
|
+
OmpSkillsTarget = ".omp/skills"
|
|
18
19
|
ClaudeAgentsTarget = ".claude/agents"
|
|
19
20
|
CodexAgentsTarget = ".codex/agents"
|
|
21
|
+
OmpAgentsTarget = ".omp/agents"
|
|
20
22
|
ClaudeWorkflowsTarget = ".claude/workflows"
|
|
21
23
|
|
|
22
24
|
ManifestName = ".claude/devrites.manifest"
|
|
@@ -175,6 +177,7 @@ func ActiveSlug(root string) (string, error) {
|
|
|
175
177
|
if info, err := os.Lstat(activePath); err == nil && info.Mode()&os.ModeSymlink != 0 {
|
|
176
178
|
return "", fmt.Errorf("DRV-ACTIVE-SYMLINK: ACTIVE is a symlink; run `rm -f %q`", activePath)
|
|
177
179
|
}
|
|
180
|
+
// #nosec G304 -- operator-supplied workspace root; ACTIVE symlink refused above
|
|
178
181
|
raw, err := os.ReadFile(activePath)
|
|
179
182
|
if errors.Is(err, os.ErrNotExist) {
|
|
180
183
|
return "", nil
|
|
@@ -84,6 +84,7 @@ func CopyTree(src, dst string) error {
|
|
|
84
84
|
return fmt.Errorf("copy %s: %w", src, err)
|
|
85
85
|
}
|
|
86
86
|
if !info.IsDir() {
|
|
87
|
+
// #nosec G304 -- src is an engine-managed path inside the operator-supplied root
|
|
87
88
|
data, err := os.ReadFile(src)
|
|
88
89
|
if err != nil {
|
|
89
90
|
return fmt.Errorf("copy %s: %w", src, err)
|
|
@@ -91,6 +92,7 @@ func CopyTree(src, dst string) error {
|
|
|
91
92
|
if err := os.MkdirAll(filepath.Dir(dst), 0o755); err != nil {
|
|
92
93
|
return fmt.Errorf("copy to %s: %w", dst, err)
|
|
93
94
|
}
|
|
95
|
+
// #nosec G703 -- dst mirrors src within the same managed tree
|
|
94
96
|
return os.WriteFile(dst, data, 0o644)
|
|
95
97
|
}
|
|
96
98
|
entries, err := os.ReadDir(src)
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
package fsutil
|
|
2
|
+
|
|
3
|
+
import (
|
|
4
|
+
"os"
|
|
5
|
+
"path/filepath"
|
|
6
|
+
"runtime"
|
|
7
|
+
"strings"
|
|
8
|
+
"testing"
|
|
9
|
+
"time"
|
|
10
|
+
)
|
|
11
|
+
|
|
12
|
+
func TestWriteFileAtomicWritesAndOverwrites(t *testing.T) {
|
|
13
|
+
dir := t.TempDir()
|
|
14
|
+
path := filepath.Join(dir, "nested", "file.txt")
|
|
15
|
+
if err := WriteFileAtomic(path, []byte("first\n"), 0o644); err != nil {
|
|
16
|
+
t.Fatal(err)
|
|
17
|
+
}
|
|
18
|
+
got, err := os.ReadFile(path)
|
|
19
|
+
if err != nil {
|
|
20
|
+
t.Fatal(err)
|
|
21
|
+
}
|
|
22
|
+
if string(got) != "first\n" {
|
|
23
|
+
t.Fatalf("content %q", got)
|
|
24
|
+
}
|
|
25
|
+
if !PermissionsMatch(mustMode(t, path), 0o644) {
|
|
26
|
+
t.Fatalf("perm %v", mustMode(t, path))
|
|
27
|
+
}
|
|
28
|
+
// Overwrite in place.
|
|
29
|
+
if err := WriteFileAtomic(path, []byte("second\n"), 0o644); err != nil {
|
|
30
|
+
t.Fatal(err)
|
|
31
|
+
}
|
|
32
|
+
if got, _ := os.ReadFile(path); string(got) != "second\n" {
|
|
33
|
+
t.Fatalf("content after overwrite %q", got)
|
|
34
|
+
}
|
|
35
|
+
// No temp files left behind.
|
|
36
|
+
entries, err := os.ReadDir(filepath.Dir(path))
|
|
37
|
+
if err != nil {
|
|
38
|
+
t.Fatal(err)
|
|
39
|
+
}
|
|
40
|
+
for _, e := range entries {
|
|
41
|
+
if name := e.Name(); name != "file.txt" && name != "nested" {
|
|
42
|
+
t.Fatalf("temp file left behind: %s", name)
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
func mustMode(t *testing.T, path string) os.FileMode {
|
|
48
|
+
t.Helper()
|
|
49
|
+
info, err := os.Stat(path)
|
|
50
|
+
if err != nil {
|
|
51
|
+
t.Fatal(err)
|
|
52
|
+
}
|
|
53
|
+
return info.Mode()
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
func TestFileModTime(t *testing.T) {
|
|
57
|
+
dir := t.TempDir()
|
|
58
|
+
path := filepath.Join(dir, "file.txt")
|
|
59
|
+
if err := os.WriteFile(path, []byte("x"), 0o644); err != nil {
|
|
60
|
+
t.Fatal(err)
|
|
61
|
+
}
|
|
62
|
+
modified, ok := FileModTime(path)
|
|
63
|
+
if !ok {
|
|
64
|
+
t.Fatal("regular file should report mod time")
|
|
65
|
+
}
|
|
66
|
+
if modified <= 0 {
|
|
67
|
+
t.Fatalf("mod time %d", modified)
|
|
68
|
+
}
|
|
69
|
+
if _, ok := FileModTime(filepath.Join(dir, "missing.txt")); ok {
|
|
70
|
+
t.Fatal("missing file should report !ok")
|
|
71
|
+
}
|
|
72
|
+
if _, ok := FileModTime(dir); ok {
|
|
73
|
+
t.Fatal("directory should report !ok")
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
func TestNewestModTime(t *testing.T) {
|
|
78
|
+
dir := t.TempDir()
|
|
79
|
+
old := filepath.Join(dir, "old.txt")
|
|
80
|
+
new := filepath.Join(dir, "new.txt")
|
|
81
|
+
if err := os.WriteFile(old, []byte("x"), 0o644); err != nil {
|
|
82
|
+
t.Fatal(err)
|
|
83
|
+
}
|
|
84
|
+
if err := os.WriteFile(new, []byte("x"), 0o644); err != nil {
|
|
85
|
+
t.Fatal(err)
|
|
86
|
+
}
|
|
87
|
+
future := time.Now().Add(2 * time.Hour)
|
|
88
|
+
if err := os.Chtimes(new, future, future); err != nil {
|
|
89
|
+
t.Skipf("cannot set file times on this platform: %v", err)
|
|
90
|
+
}
|
|
91
|
+
newest, ok := NewestModTime(old, new)
|
|
92
|
+
if !ok {
|
|
93
|
+
t.Fatal("expected ok")
|
|
94
|
+
}
|
|
95
|
+
want, _ := FileModTime(new)
|
|
96
|
+
if newest != want {
|
|
97
|
+
t.Fatalf("newest=%d want %d", newest, want)
|
|
98
|
+
}
|
|
99
|
+
if _, ok := NewestModTime(filepath.Join(dir, "missing.txt")); ok {
|
|
100
|
+
t.Fatal("missing-only inputs should report !ok")
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
func TestCopyTreeMissingSourceIsNoOp(t *testing.T) {
|
|
105
|
+
dir := t.TempDir()
|
|
106
|
+
dst := filepath.Join(dir, "dst")
|
|
107
|
+
if err := CopyTree(filepath.Join(dir, "missing"), dst); err != nil {
|
|
108
|
+
t.Fatalf("missing src must not error: %v", err)
|
|
109
|
+
}
|
|
110
|
+
if _, err := os.Stat(dst); !os.IsNotExist(err) {
|
|
111
|
+
t.Fatalf("dst must not be created, got %v", err)
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
func TestCopyTreeFileAndTree(t *testing.T) {
|
|
116
|
+
dir := t.TempDir()
|
|
117
|
+
src := filepath.Join(dir, "src")
|
|
118
|
+
if err := os.MkdirAll(filepath.Join(src, "sub"), 0o755); err != nil {
|
|
119
|
+
t.Fatal(err)
|
|
120
|
+
}
|
|
121
|
+
if err := os.WriteFile(filepath.Join(src, "root.txt"), []byte("root\n"), 0o644); err != nil {
|
|
122
|
+
t.Fatal(err)
|
|
123
|
+
}
|
|
124
|
+
if err := os.WriteFile(filepath.Join(src, "sub", "leaf.txt"), []byte("leaf\n"), 0o644); err != nil {
|
|
125
|
+
t.Fatal(err)
|
|
126
|
+
}
|
|
127
|
+
dst := filepath.Join(dir, "dst")
|
|
128
|
+
if err := CopyTree(src, dst); err != nil {
|
|
129
|
+
t.Fatal(err)
|
|
130
|
+
}
|
|
131
|
+
for rel, want := range map[string]string{
|
|
132
|
+
"root.txt": "root\n",
|
|
133
|
+
"sub/leaf.txt": "leaf\n",
|
|
134
|
+
} {
|
|
135
|
+
got, err := os.ReadFile(filepath.Join(dst, filepath.FromSlash(rel)))
|
|
136
|
+
if err != nil {
|
|
137
|
+
t.Fatalf("%s: %v", rel, err)
|
|
138
|
+
}
|
|
139
|
+
if string(got) != want {
|
|
140
|
+
t.Fatalf("%s: %q want %q", rel, got, want)
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
// Copying a single file copies its contents.
|
|
145
|
+
single := filepath.Join(dir, "single.txt")
|
|
146
|
+
if err := os.WriteFile(single, []byte("one\n"), 0o644); err != nil {
|
|
147
|
+
t.Fatal(err)
|
|
148
|
+
}
|
|
149
|
+
singleDst := filepath.Join(dir, "single-copy.txt")
|
|
150
|
+
if err := CopyTree(single, singleDst); err != nil {
|
|
151
|
+
t.Fatal(err)
|
|
152
|
+
}
|
|
153
|
+
if got, _ := os.ReadFile(singleDst); string(got) != "one\n" {
|
|
154
|
+
t.Fatalf("single copy %q", got)
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
// Recopying overwrites existing files.
|
|
158
|
+
if err := os.WriteFile(filepath.Join(src, "root.txt"), []byte("changed\n"), 0o644); err != nil {
|
|
159
|
+
t.Fatal(err)
|
|
160
|
+
}
|
|
161
|
+
if err := CopyTree(src, dst); err != nil {
|
|
162
|
+
t.Fatal(err)
|
|
163
|
+
}
|
|
164
|
+
if got, _ := os.ReadFile(filepath.Join(dst, "root.txt")); string(got) != "changed\n" {
|
|
165
|
+
t.Fatalf("overwrite %q", got)
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
func TestPermissionsMatch(t *testing.T) {
|
|
170
|
+
if !PermissionsMatch(0o644, 0o644) {
|
|
171
|
+
t.Fatal("matching perms must match")
|
|
172
|
+
}
|
|
173
|
+
if runtime.GOOS != "windows" && PermissionsMatch(0o600, 0o644) {
|
|
174
|
+
t.Fatal("differing POSIX perms must not match")
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
func TestWriteFileAtomicSurfacesFailure(t *testing.T) {
|
|
179
|
+
dir := t.TempDir()
|
|
180
|
+
blocker := filepath.Join(dir, "blocker")
|
|
181
|
+
if err := os.WriteFile(blocker, []byte("x"), 0o644); err != nil {
|
|
182
|
+
t.Fatal(err)
|
|
183
|
+
}
|
|
184
|
+
// The parent path is an existing file, so creating the destination
|
|
185
|
+
// directory must fail and the error must surface to the caller.
|
|
186
|
+
err := WriteFileAtomic(filepath.Join(blocker, "nested", "file.txt"), []byte("x"), 0o644)
|
|
187
|
+
if err == nil {
|
|
188
|
+
t.Fatal("expected the write failure to surface")
|
|
189
|
+
}
|
|
190
|
+
if !strings.Contains(err.Error(), "atomic write") {
|
|
191
|
+
t.Fatalf("error should identify the operation, got %v", err)
|
|
192
|
+
}
|
|
193
|
+
}
|
|
@@ -103,6 +103,12 @@ func checkObservation(kind Kind, observation *state.WorkspaceObservation) (*Resu
|
|
|
103
103
|
}
|
|
104
104
|
}
|
|
105
105
|
}
|
|
106
|
+
if len(missingFiles) == 0 {
|
|
107
|
+
for _, problem := range acceptanceMapProblems(observation, policy) {
|
|
108
|
+
stateProblems = append(stateProblems, "acceptance-map: "+problem)
|
|
109
|
+
blocked = true
|
|
110
|
+
}
|
|
111
|
+
}
|
|
106
112
|
if len(missingFiles) == 0 && phaseRequiresReadinessBinding(policy) {
|
|
107
113
|
expected, bindingErr := verifyReadinessBinding(observation)
|
|
108
114
|
if bindingErr != nil {
|
|
@@ -136,6 +142,30 @@ func checkObservation(kind Kind, observation *state.WorkspaceObservation) (*Resu
|
|
|
136
142
|
return result, nil
|
|
137
143
|
}
|
|
138
144
|
|
|
145
|
+
func acceptanceMapProblems(observation *state.WorkspaceObservation, policy state.PhasePolicy) []string {
|
|
146
|
+
requireTasks := phaseRequiresTasks(policy)
|
|
147
|
+
requireTestPlan := phaseRequiresTestPlan(policy)
|
|
148
|
+
if !requireTasks && !requireTestPlan {
|
|
149
|
+
return nil
|
|
150
|
+
}
|
|
151
|
+
spec, ok := observation.Fact("spec.md")
|
|
152
|
+
if !ok || spec.State() != state.ArtifactPresent {
|
|
153
|
+
return nil
|
|
154
|
+
}
|
|
155
|
+
var tasks, testPlan []byte
|
|
156
|
+
if requireTasks {
|
|
157
|
+
if fact, ok := observation.Fact("tasks.md"); ok && fact.State() == state.ArtifactPresent {
|
|
158
|
+
tasks = fact.Bytes()
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
if requireTestPlan {
|
|
162
|
+
if fact, ok := observation.Fact("test-plan.md"); ok && fact.State() == state.ArtifactPresent {
|
|
163
|
+
testPlan = fact.Bytes()
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
return state.ParseAcceptanceMap(spec.Bytes(), tasks, testPlan, requireTasks, requireTestPlan).Problems
|
|
167
|
+
}
|
|
168
|
+
|
|
139
169
|
func missingSections(observation *state.WorkspaceObservation, required []state.Section) []state.Section {
|
|
140
170
|
var missing []state.Section
|
|
141
171
|
for _, section := range required {
|
|
@@ -123,7 +123,7 @@ Goal: looks complete without an ordering field
|
|
|
123
123
|
func TestCheckAndRenderReadiness(t *testing.T) {
|
|
124
124
|
root := t.TempDir()
|
|
125
125
|
writeFeature(t, root, "alpha", map[string]string{
|
|
126
|
-
"state.md": "- Phase: build\n",
|
|
126
|
+
"state.md": "- Phase: build\n- Schema: 3\n",
|
|
127
127
|
"brief.md": "brief\n",
|
|
128
128
|
"spec.md": "real spec\n",
|
|
129
129
|
"assumptions.md": "none\n",
|
|
@@ -164,7 +164,7 @@ func TestCheckAndRenderReadiness(t *testing.T) {
|
|
|
164
164
|
func TestCheckUsesConcreteWorkspaceRequirements(t *testing.T) {
|
|
165
165
|
root := t.TempDir()
|
|
166
166
|
files := map[string]string{
|
|
167
|
-
"state.md": "| phase | vet |\n",
|
|
167
|
+
"state.md": "| phase | vet |\n| schema | 3 |\n",
|
|
168
168
|
"brief.md": "brief\n",
|
|
169
169
|
"spec.md": "spec\n",
|
|
170
170
|
"decisions.md": "decisions\n",
|
|
@@ -192,7 +192,7 @@ func TestCheckUsesConcreteWorkspaceRequirements(t *testing.T) {
|
|
|
192
192
|
func TestSealRequiresDurableReviewAndSealArtifacts(t *testing.T) {
|
|
193
193
|
root := t.TempDir()
|
|
194
194
|
files := map[string]string{
|
|
195
|
-
"state.md": "| phase | seal |\n",
|
|
195
|
+
"state.md": "| phase | seal |\n| schema | 3 |\n",
|
|
196
196
|
"brief.md": "brief\n",
|
|
197
197
|
"spec.md": "spec\n",
|
|
198
198
|
"decisions.md": "decisions\n",
|
|
@@ -373,7 +373,7 @@ func TestCheckBlocksOpenHumanQuestions(t *testing.T) {
|
|
|
373
373
|
t.Run(tc.name, func(t *testing.T) {
|
|
374
374
|
root := t.TempDir()
|
|
375
375
|
writeFeature(t, root, "alpha", map[string]string{
|
|
376
|
-
"state.md": "- Phase: build\n- Status: " + tc.status + "\n",
|
|
376
|
+
"state.md": "- Phase: build\n- Status: " + tc.status + "\n- Schema: 3\n",
|
|
377
377
|
"spec.md": "spec\n",
|
|
378
378
|
"plan.md": "plan\n",
|
|
379
379
|
"decisions.md": "decisions\n",
|
|
@@ -412,7 +412,7 @@ func TestCheckUsesWorkspaceOverrideForStateInvariants(t *testing.T) {
|
|
|
412
412
|
override := filepath.Join(physicalRoot, "work", "alpha")
|
|
413
413
|
t.Setenv("DEVRITES_WORKSPACE", override)
|
|
414
414
|
testutil.WriteFile(t, filepath.Join(override, "README.md"), "---\nphase: spec\nschemaVersion: 1\n---\n")
|
|
415
|
-
testutil.WriteFile(t, filepath.Join(override, "state.md"), "- Phase: build\n- Status: running\n")
|
|
415
|
+
testutil.WriteFile(t, filepath.Join(override, "state.md"), "- Phase: build\n- Status: running\n- Schema: 3\n")
|
|
416
416
|
testutil.WriteFile(t, filepath.Join(override, "spec.md"), "spec\n")
|
|
417
417
|
testutil.WriteFile(t, filepath.Join(override, "questions.md"), "## q-1\nstatus: open\ngate: blocking\n")
|
|
418
418
|
|
|
@@ -443,7 +443,7 @@ func TestCheckObservationUsesRetainedPhaseQuestionsReadinessAndReview(t *testing
|
|
|
443
443
|
if err != nil {
|
|
444
444
|
t.Fatal(err)
|
|
445
445
|
}
|
|
446
|
-
testutil.WriteFile(t, filepath.Join(workspace, "state.md"), "- Phase: spec\n- Status: running\n")
|
|
446
|
+
testutil.WriteFile(t, filepath.Join(workspace, "state.md"), "- Phase: spec\n- Status: running\n- Schema: 3\n")
|
|
447
447
|
testutil.WriteFile(t, filepath.Join(workspace, "questions.md"), "## q-1\nstatus: open\ngate: blocking\n")
|
|
448
448
|
testutil.WriteFile(t, filepath.Join(workspace, "plan.md"), "# Plan\n\nChanged after observation.\n")
|
|
449
449
|
testutil.WriteFile(t, filepath.Join(workspace, "eng-review.md"), "# Engineering review\n\nNo binding.\n")
|
|
@@ -609,7 +609,7 @@ func writeCompleteGateFeature(t *testing.T, root, slug string, current, required
|
|
|
609
609
|
content := "# " + name + "\n\nreal\n"
|
|
610
610
|
switch name {
|
|
611
611
|
case "state.md":
|
|
612
|
-
content = "- Phase: " + string(current) + "\n- Status: running\n"
|
|
612
|
+
content = "- Phase: " + string(current) + "\n- Status: running\n- Schema: 3\n"
|
|
613
613
|
case "questions.md":
|
|
614
614
|
questionsRequired = true
|
|
615
615
|
content = questions
|
|
@@ -149,17 +149,20 @@ func readinessDiagnosticError(diagnostic state.ArtifactDiagnostic) error {
|
|
|
149
149
|
}
|
|
150
150
|
|
|
151
151
|
func phaseRequiresTasks(policy state.PhasePolicy) bool {
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
return false
|
|
152
|
+
return policyRequires(policy, "tasks.md")
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
func phaseRequiresTestPlan(policy state.PhasePolicy) bool {
|
|
156
|
+
return policyRequires(policy, "test-plan.md")
|
|
158
157
|
}
|
|
159
158
|
|
|
160
159
|
func phaseRequiresReadinessBinding(policy state.PhasePolicy) bool {
|
|
160
|
+
return policyRequires(policy, "eng-review.md")
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
func policyRequires(policy state.PhasePolicy, name state.ArtifactPath) bool {
|
|
161
164
|
for _, artifact := range policy.RequiredArtifacts {
|
|
162
|
-
if artifact ==
|
|
165
|
+
if artifact == name {
|
|
163
166
|
return true
|
|
164
167
|
}
|
|
165
168
|
}
|
|
@@ -77,7 +77,13 @@ func TestReadinessBindingBindsOnlyStableBuildInputs(t *testing.T) {
|
|
|
77
77
|
}
|
|
78
78
|
|
|
79
79
|
for _, name := range []string{"state.md", "questions.md", "decisions.md", "assumptions.md", "eng-review.md", "evidence.md", "review.md", "seal.md", "handoff.md", "ambient.md"} {
|
|
80
|
-
|
|
80
|
+
// state.md stays a valid v5 workspace when mutated: the schema row is
|
|
81
|
+
// part of the contract, not part of the bound inputs.
|
|
82
|
+
body := "# Mutable\n\nChanged outside the stable contract.\n"
|
|
83
|
+
if name == "state.md" {
|
|
84
|
+
body = "| phase | build |\n| schema | 3 |\n" + body
|
|
85
|
+
}
|
|
86
|
+
testutil.WriteFile(t, filepath.Join(workspace, name), body)
|
|
81
87
|
if got := mustReadinessBinding(t, root, "stable"); got != baseline {
|
|
82
88
|
t.Fatalf("excluded %s altered binding", name)
|
|
83
89
|
}
|
|
@@ -91,7 +97,7 @@ func TestReadinessBindingBindsOnlyStableBuildInputs(t *testing.T) {
|
|
|
91
97
|
func TestReadinessBindingGoldenDigest(t *testing.T) {
|
|
92
98
|
root := t.TempDir()
|
|
93
99
|
writeReadinessFixture(t, root, "golden", "build")
|
|
94
|
-
const want = "Readiness inputs SHA-256:
|
|
100
|
+
const want = "Readiness inputs SHA-256: 6a0d4991d86f5a0e78333289840b5fb1a123adbb18b53243b1af34fcffcf1961"
|
|
95
101
|
if got := mustReadinessBinding(t, root, "golden"); got != want {
|
|
96
102
|
t.Fatalf("ReadinessBinding()=%q, want %q", got, want)
|
|
97
103
|
}
|
|
@@ -361,11 +367,53 @@ func TestReadinessDiagnosticPayloads(t *testing.T) {
|
|
|
361
367
|
}
|
|
362
368
|
}
|
|
363
369
|
|
|
370
|
+
func TestCheckReadinessBlocksUnmappedAcceptance(t *testing.T) {
|
|
371
|
+
root := t.TempDir()
|
|
372
|
+
workspace := writeReadinessFixture(t, root, "unmapped", "build")
|
|
373
|
+
testutil.WriteFile(t, filepath.Join(workspace, "spec.md"), "# Spec\n\n## Acceptance criteria\n- AC-002: extra requirement.\n")
|
|
374
|
+
binding := mustReadinessBinding(t, root, "unmapped")
|
|
375
|
+
testutil.AppendFile(t, filepath.Join(workspace, "eng-review.md"), "\n"+binding+"\n")
|
|
376
|
+
|
|
377
|
+
result, err := Check(Readiness, root, "unmapped")
|
|
378
|
+
if err != nil {
|
|
379
|
+
t.Fatal(err)
|
|
380
|
+
}
|
|
381
|
+
if !result.Blocked || result.ReasonID != reason.GateReadinessMissing {
|
|
382
|
+
t.Fatalf("blocked=%v reason=%q render=%s", result.Blocked, result.ReasonID, result.Render())
|
|
383
|
+
}
|
|
384
|
+
joined := strings.Join(result.StateProblems, "\n")
|
|
385
|
+
for _, want := range []string{
|
|
386
|
+
"acceptance-map: acceptance AC-002 is not referenced in tasks.md",
|
|
387
|
+
"acceptance-map: acceptance AC-002 is not referenced in test-plan.md",
|
|
388
|
+
} {
|
|
389
|
+
if !strings.Contains(joined, want) {
|
|
390
|
+
t.Fatalf("missing %q in %q", want, joined)
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
|
|
395
|
+
func TestCheckReadinessPassesMappedAcceptance(t *testing.T) {
|
|
396
|
+
root := t.TempDir()
|
|
397
|
+
workspace := writeReadinessFixture(t, root, "mapped", "build")
|
|
398
|
+
testutil.WriteFile(t, filepath.Join(workspace, "spec.md"), "# Spec\n\n## Acceptance criteria\n- AC-001: bind readiness inputs.\n")
|
|
399
|
+
testutil.WriteFile(t, filepath.Join(workspace, "test-plan.md"), "# Test plan\n\nAC-001 focused tests.\n")
|
|
400
|
+
binding := mustReadinessBinding(t, root, "mapped")
|
|
401
|
+
testutil.AppendFile(t, filepath.Join(workspace, "eng-review.md"), "\n"+binding+"\n")
|
|
402
|
+
|
|
403
|
+
result, err := Check(Readiness, root, "mapped")
|
|
404
|
+
if err != nil {
|
|
405
|
+
t.Fatal(err)
|
|
406
|
+
}
|
|
407
|
+
if result.Blocked {
|
|
408
|
+
t.Fatalf("mapped acceptance blocked: %s", result.Render())
|
|
409
|
+
}
|
|
410
|
+
}
|
|
411
|
+
|
|
364
412
|
func writeReadinessFixture(t *testing.T, root, slug, phase string) string {
|
|
365
413
|
t.Helper()
|
|
366
414
|
workspace := filepath.Join(root, "work", slug)
|
|
367
415
|
for name, body := range map[string]string{
|
|
368
|
-
"state.md": "| phase | " + phase + " |\n",
|
|
416
|
+
"state.md": "| phase | " + phase + " |\n| schema | 3 |\n",
|
|
369
417
|
"brief.md": "# Brief\n\nReady.\n",
|
|
370
418
|
"spec.md": "# Spec\n\nReady.\n",
|
|
371
419
|
"decisions.md": "# Decisions\n\nNone.\n",
|