devrites 3.2.27 → 4.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 +22 -144
- package/NOTICE.md +6 -5
- package/README.md +187 -95
- package/SECURITY.md +103 -79
- package/bin/devrites.mjs +140 -24
- package/docs/adr/0003-gate-model-hitl-pause.md +1 -1
- package/docs/adr/0013-native-codex-agent-orchestration.md +74 -0
- package/docs/adr/0014-native-host-hook-boundary.md +64 -0
- package/docs/adr/0015-read-only-root-native-orchestration.md +96 -0
- package/docs/adr/0016-codex-writer-fail-closed.md +53 -0
- package/docs/adr/0017-native-codex-writer-agent.md +63 -0
- package/docs/adr/0018-native-sandbox-instruction-writer-boundary.md +66 -0
- package/docs/adr/0019-native-boundary-with-deterministic-gates.md +48 -0
- package/docs/adr/0020-thin-engine-native-orchestration-boundary.md +54 -0
- package/docs/adr/0021-observable-workspace-compatibility.md +49 -0
- package/docs/adr/0022-native-orchestration-thin-engine.md +90 -0
- package/docs/adr/0023-native-workspace-reads-line-output.md +71 -0
- package/docs/adr/0024-native-policy-offline-installer-boundary.md +111 -0
- package/docs/adr/0025-evidence-gated-workspace-upgrades.md +64 -0
- package/docs/adr/0026-content-bound-proof-and-bounded-inputs.md +169 -0
- package/docs/adr/0027-content-bound-build-readiness.md +77 -0
- package/docs/adr/README.md +26 -11
- package/docs/agents/domain.md +2 -1
- package/docs/agents/issue-driven-rites.md +1 -1
- package/docs/architecture.md +191 -103
- package/docs/candidate-integrity.md +138 -0
- package/docs/capability-surface-selection.md +15 -5
- package/docs/cli.md +139 -92
- package/docs/command-map.md +88 -63
- package/docs/engine/commands.md +115 -507
- package/docs/engine/state-schema.md +94 -113
- package/docs/engine/workspace-schema.md +169 -229
- package/docs/flow.md +113 -68
- package/docs/harness-compliance.md +29 -56
- package/docs/markdown-instruction-upgrade-2026-08-02.md +302 -0
- package/docs/orchestration.md +136 -149
- package/docs/porting-to-a-new-harness.md +22 -7
- package/docs/quick-reference.md +21 -8
- package/docs/release.md +47 -4
- package/docs/skills.md +111 -72
- package/docs/templates/CRITIC_REVIEW_PACKET_TEMPLATE.md +2 -0
- package/docs/upstream-workflow-benchmark-2026-08-01.md +655 -0
- package/docs/usage.md +99 -65
- package/engine/Makefile +1 -2
- package/engine/cmd/releasepack/main.go +45 -25
- package/engine/cmd/releasepack/main_test.go +69 -0
- package/engine/commands.go +8 -258
- package/engine/harnessmatrix_test.go +28 -41
- package/engine/internal/devritespaths/paths.go +12 -28
- package/engine/internal/fsutil/copy.go +8 -0
- package/engine/internal/gate/gate.go +104 -105
- package/engine/internal/gate/gate_test.go +94 -84
- package/engine/internal/gate/readiness_binding.go +203 -0
- package/engine/internal/gate/readiness_binding_test.go +271 -0
- package/engine/internal/gitenv/env.go +46 -0
- package/engine/internal/gitenv/env_test.go +48 -0
- package/engine/internal/hostpack/hostpack.go +16 -20
- package/engine/internal/hostpack/hostpack_test.go +6 -6
- package/engine/internal/install/install.go +289 -511
- package/engine/internal/install/install_test.go +218 -306
- package/engine/internal/lib/candidate.go +475 -0
- package/engine/internal/lib/candidate_test.go +503 -0
- package/engine/internal/lib/closeout.go +17 -21
- package/engine/internal/lib/closeout_test.go +23 -0
- package/engine/internal/lib/cursor_compat_test.go +12 -75
- package/engine/internal/lib/evidencefresh.go +58 -47
- package/engine/internal/lib/evidencefresh_test.go +120 -0
- package/engine/internal/lib/resolve.go +13 -35
- package/engine/internal/lib/resolve_remediation_test.go +5 -17
- package/engine/internal/lib/secretscan.go +432 -0
- package/engine/internal/lib/secretscan_test.go +555 -0
- package/engine/internal/lib/util.go +24 -65
- package/engine/internal/lib/util_test.go +44 -0
- package/engine/internal/markdowntext/markdowntext.go +108 -0
- package/engine/internal/markdowntext/markdowntext_test.go +58 -0
- package/engine/internal/markdowntext/testdata/structural.json +27 -0
- package/engine/internal/reason/reason.go +2 -123
- package/engine/internal/reason/reason_test.go +4 -2
- package/engine/internal/rootfacts/facts.go +6 -8
- package/engine/internal/rootfacts/facts_test.go +20 -0
- package/engine/internal/state/cmd/workflowmanifest/main.go +10 -12
- package/engine/internal/state/cursor.go +53 -14
- package/engine/internal/state/cursor_test.go +57 -0
- package/engine/internal/state/feature.go +64 -154
- package/engine/internal/state/schema.go +24 -50
- package/engine/internal/state/state_test.go +151 -140
- package/engine/internal/state/status.go +4 -17
- package/engine/internal/state/workflow_manifest.json +9 -89
- package/engine/main.go +73 -502
- package/engine/root_routing_test.go +183 -212
- package/engine/testdata/fixtures/basic/devrites-root/{features/auth-tokens/feature.md → work/auth-tokens/README.md} +0 -1
- package/engine/testdata/fixtures/basic/devrites-root/work/auth-tokens/architecture.md +3 -0
- package/engine/testdata/fixtures/basic/devrites-root/work/auth-tokens/assumptions.md +3 -0
- package/engine/testdata/fixtures/basic/devrites-root/work/auth-tokens/brief.md +3 -0
- package/engine/testdata/fixtures/basic/devrites-root/work/auth-tokens/decision-coverage.md +3 -0
- package/engine/testdata/fixtures/basic/devrites-root/work/auth-tokens/eng-review.md +3 -0
- package/engine/testdata/fixtures/basic/devrites-root/work/auth-tokens/questions.md +3 -0
- package/engine/testdata/fixtures/basic/devrites-root/{features/auth-tokens/status.md → work/auth-tokens/state.md} +3 -0
- package/engine/testdata/fixtures/basic/devrites-root/work/auth-tokens/test-plan.md +3 -0
- package/engine/testdata/fixtures/basic/devrites-root/work/auth-tokens/traceability.md +3 -0
- package/engine/testdata/fixtures/basic/devrites-root/{features/search-ranking/feature.md → work/search-ranking/README.md} +0 -1
- package/engine/testdata/fixtures/basic/devrites-root/work/search-ranking/assumptions.md +3 -0
- package/engine/testdata/fixtures/basic/devrites-root/work/search-ranking/brief.md +3 -0
- package/engine/testdata/fixtures/basic/devrites-root/work/search-ranking/decisions.md +3 -0
- package/engine/testdata/fixtures/basic/devrites-root/work/search-ranking/questions.md +3 -0
- package/engine/testdata/fixtures/basic/devrites-root/work/search-ranking/state.md +2 -0
- package/engine/testdata/golden/TestParityCloseOut/active_pointed_elsewhere.golden +1 -1
- package/engine/testdata/golden/TestParityCloseOut/active_slug_cleared.golden +1 -1
- package/engine/tests/adr_0003_gate_exit_code_test.go +2 -2
- package/engine/tests/adr_0011_define_plan_test.go +2 -2
- package/engine/tests/adr_0027_readiness_binding_test.go +106 -0
- package/engine/tests/cli_test.go +24 -107
- package/engine/tests/gate_test.go +177 -200
- package/engine/tests/meta_test.go +5 -35
- package/engine/tests/parity_closeout_test.go +12 -12
- package/engine/tests/parity_resolve_test.go +6 -16
- package/engine/tests/parity_test.go +8 -302
- package/install.sh +201 -34
- package/pack/.claude/agents/devrites-code-reviewer.md +9 -18
- package/pack/.claude/agents/devrites-devex-reviewer.md +10 -18
- package/pack/.claude/agents/devrites-doubt-reviewer.md +10 -20
- package/pack/.claude/agents/devrites-evidence-scout.md +14 -26
- package/pack/.claude/agents/devrites-frontend-reviewer.md +9 -15
- package/pack/.claude/agents/devrites-performance-reviewer.md +13 -21
- package/pack/.claude/agents/devrites-plan-drafter.md +24 -28
- package/pack/.claude/agents/devrites-plan-reviewer.md +30 -47
- package/pack/.claude/agents/devrites-proof-runner.md +41 -47
- package/pack/.claude/agents/devrites-retrospector.md +34 -79
- package/pack/.claude/agents/devrites-security-auditor.md +9 -17
- package/pack/.claude/agents/devrites-simplifier-reviewer.md +9 -18
- package/pack/.claude/agents/devrites-slice-wright.md +44 -62
- package/pack/.claude/agents/devrites-spec-reviewer.md +38 -50
- package/pack/.claude/agents/devrites-strategy-reviewer.md +10 -19
- package/pack/.claude/agents/devrites-test-analyst.md +22 -21
- package/pack/.claude/agents/devrites-upgrade-planner.md +52 -71
- package/pack/.claude/settings.json +12 -100
- package/pack/.claude/skills/devrites-api-interface/SKILL.md +1 -2
- package/pack/.claude/skills/devrites-audit/SKILL.md +6 -9
- package/pack/.claude/skills/devrites-browser-proof/SKILL.md +0 -1
- package/pack/.claude/skills/devrites-debug-recovery/SKILL.md +21 -27
- package/pack/.claude/skills/devrites-debug-recovery/reference/cleanup-and-classify.md +22 -33
- package/pack/.claude/skills/devrites-doubt/SKILL.md +4 -6
- package/pack/.claude/skills/devrites-frontend-craft/SKILL.md +1 -2
- package/pack/.claude/skills/devrites-frontend-craft/reference/design-references.md +2 -1
- package/pack/.claude/skills/devrites-interview/SKILL.md +31 -36
- package/pack/.claude/skills/devrites-lib/SKILL.md +37 -66
- package/pack/.claude/skills/devrites-lib/reference/candidate-integrity.md +51 -0
- package/pack/.claude/skills/devrites-lib/reference/intent-map.md +20 -12
- package/pack/.claude/skills/devrites-lib/reference/orchestration-profiles.md +22 -0
- package/pack/.claude/skills/devrites-lib/reference/parallel-dispatch.md +35 -110
- package/pack/.claude/skills/devrites-lib/reference/reply-contract.md +26 -93
- package/pack/.claude/skills/devrites-lib/reference/standards/README.md +6 -3
- package/pack/.claude/skills/devrites-lib/reference/standards/afk-hitl.md +43 -34
- package/pack/.claude/skills/devrites-lib/reference/standards/agents.md +90 -216
- package/pack/.claude/skills/devrites-lib/reference/standards/anti-patterns.md +1 -1
- package/pack/.claude/skills/devrites-lib/reference/standards/code-review.md +9 -28
- package/pack/.claude/skills/devrites-lib/reference/standards/context-hygiene.md +13 -11
- package/pack/.claude/skills/devrites-lib/reference/standards/core.md +59 -54
- package/pack/.claude/skills/devrites-lib/reference/standards/hooks.md +3 -5
- package/pack/.claude/skills/devrites-lib/reference/standards/principles.md +29 -143
- package/pack/.claude/skills/devrites-lib/reference/standards/release/ship-checklist.md +5 -6
- package/pack/.claude/skills/devrites-lib/reference/standards/security.md +13 -31
- package/pack/.claude/skills/devrites-lib/reference/standards/skill-authoring.md +112 -82
- package/pack/.claude/skills/devrites-lib/reference/standards/spec-grammar.md +71 -45
- package/pack/.claude/skills/devrites-lib/reference/standards/testing.md +22 -11
- package/pack/.claude/skills/devrites-lib/reference/standards/tooling.md +15 -24
- package/pack/.claude/skills/devrites-lib/reference/workspace-artifact-schema.md +106 -37
- package/pack/.claude/skills/devrites-prose-craft/SKILL.md +3 -4
- package/pack/.claude/skills/devrites-source-driven/SKILL.md +3 -4
- package/pack/.claude/skills/devrites-ux-shape/SKILL.md +3 -3
- package/pack/.claude/skills/rite/SKILL.md +12 -13
- package/pack/.claude/skills/rite/reference/menu.md +11 -11
- package/pack/.claude/skills/rite-adopt/SKILL.md +29 -84
- package/pack/.claude/skills/rite-adopt/reference/adoption.md +16 -50
- package/pack/.claude/skills/rite-autocomplete/SKILL.md +65 -54
- package/pack/.claude/skills/rite-autocomplete/reference/loop.md +24 -17
- package/pack/.claude/skills/rite-autocomplete/reference/stop-conditions.md +18 -21
- package/pack/.claude/skills/rite-build/SKILL.md +28 -34
- package/pack/.claude/skills/rite-build/reference/afk-discipline.md +36 -34
- package/pack/.claude/skills/rite-build/reference/anti-patterns.md +5 -19
- package/pack/.claude/skills/rite-build/reference/checkpoint-protocol.md +10 -9
- package/pack/.claude/skills/rite-build/reference/checkpoint.md +17 -17
- package/pack/.claude/skills/rite-build/reference/frontend-trigger.md +3 -3
- package/pack/.claude/skills/rite-build/reference/one-slice-cycle.md +11 -14
- package/pack/.claude/skills/rite-build/reference/output.md +14 -24
- package/pack/.claude/skills/rite-build/reference/phase-contract.md +49 -188
- package/pack/.claude/skills/rite-build/reference/spec-drift-guard.md +1 -1
- package/pack/.claude/skills/rite-build/reference/wright-dispatch.md +43 -133
- package/pack/.claude/skills/rite-clarify/SKILL.md +46 -40
- package/pack/.claude/skills/rite-clarify/reference/decision-coverage.md +4 -10
- package/pack/.claude/skills/rite-converge/SKILL.md +9 -33
- package/pack/.claude/skills/rite-converge/reference/convergence-assessment.md +2 -2
- package/pack/.claude/skills/rite-customize/SKILL.md +34 -50
- package/pack/.claude/skills/rite-define/SKILL.md +34 -58
- package/pack/.claude/skills/rite-define/reference/plan-template.md +15 -0
- package/pack/.claude/skills/rite-doctor/SKILL.md +52 -64
- package/pack/.claude/skills/rite-dogfood/SKILL.md +1 -2
- package/pack/.claude/skills/rite-explain/SKILL.md +1 -20
- package/pack/.claude/skills/rite-frame/SKILL.md +1 -7
- package/pack/.claude/skills/rite-frame/reference/failure-modes.md +1 -1
- package/pack/.claude/skills/rite-handoff/SKILL.md +1 -2
- package/pack/.claude/skills/rite-handoff/reference/handoff-template.md +1 -1
- package/pack/.claude/skills/rite-learn/SKILL.md +44 -104
- package/pack/.claude/skills/rite-plan/SKILL.md +14 -26
- package/pack/.claude/skills/rite-plan/reference/task-breakdown.md +4 -1
- package/pack/.claude/skills/rite-polish/SKILL.md +20 -28
- package/pack/.claude/skills/rite-polish/reference/adr-promotion.md +11 -0
- package/pack/{generated/claude/skills/rite-ship → .claude/skills/rite-polish}/reference/design-memory.md +23 -21
- package/pack/.claude/skills/rite-polish/reference/ledger.md +62 -0
- package/pack/.claude/skills/rite-pov/SKILL.md +28 -32
- package/pack/.claude/skills/rite-pr-feedback/SKILL.md +0 -1
- package/pack/.claude/skills/rite-pressure-test/SKILL.md +6 -13
- package/pack/.claude/skills/rite-prototype/SKILL.md +0 -6
- package/pack/.claude/skills/rite-prove/SKILL.md +73 -68
- package/pack/.claude/skills/rite-prove/reference/acceptance-proof.md +34 -30
- package/pack/.claude/skills/rite-prove/reference/test-command-discovery.md +15 -14
- package/pack/.claude/skills/rite-quick/SKILL.md +5 -19
- package/pack/.claude/skills/rite-resolve/SKILL.md +4 -21
- package/pack/.claude/skills/rite-resolve/reference/answer-protocol.md +2 -2
- package/pack/.claude/skills/rite-review/SKILL.md +34 -57
- package/pack/.claude/skills/rite-seal/SKILL.md +54 -87
- package/pack/.claude/skills/rite-seal/reference/anti-patterns.md +2 -2
- package/pack/.claude/skills/rite-seal/reference/final-evidence.md +31 -56
- package/pack/.claude/skills/rite-seal/reference/go-no-go.md +27 -51
- package/pack/.claude/skills/rite-seal/reference/output.md +2 -4
- package/pack/.claude/skills/rite-seal/reference/phase-contract.md +42 -140
- package/pack/.claude/skills/rite-seal/reference/risk-and-rollback.md +2 -2
- package/pack/.claude/skills/rite-seal/reference/seal-template.md +17 -28
- package/pack/.claude/skills/rite-ship/SKILL.md +65 -93
- package/pack/.claude/skills/rite-ship/reference/anti-patterns.md +4 -1
- package/pack/.claude/skills/rite-ship/reference/close-out.md +4 -12
- package/pack/.claude/skills/rite-ship/reference/git-ship.md +86 -48
- package/pack/.claude/skills/rite-ship/reference/ship-template.md +22 -16
- package/pack/.claude/skills/rite-spec/SKILL.md +62 -95
- package/pack/.claude/skills/rite-spec/reference/investigation.md +1 -4
- package/pack/.claude/skills/rite-spec/reference/question-protocol.md +21 -20
- package/pack/.claude/skills/rite-spec/reference/spec-checklists.md +16 -17
- package/pack/.claude/skills/rite-spec/reference/spec-template.md +47 -49
- package/pack/.claude/skills/rite-spec/reference/state-workspace.md +28 -13
- package/pack/.claude/skills/rite-status/SKILL.md +30 -88
- package/pack/.claude/skills/rite-temper/SKILL.md +12 -31
- package/pack/.claude/skills/rite-upgrade/SKILL.md +86 -101
- package/pack/.claude/skills/rite-vet/SKILL.md +88 -117
- package/pack/.claude/skills/rite-vet/reference/artifacts.md +56 -50
- package/pack/.claude/skills/rite-vet/reference/cross-model.md +15 -39
- package/pack/.claude/skills/rite-vet/reference/depth.md +2 -2
- package/pack/.claude/skills/rite-vet/reference/review-axes.md +3 -6
- package/pack/.claude/skills/rite-zoom-out/SKILL.md +0 -6
- package/pack/generated/README.md +2 -2
- package/pack/generated/claude/agents/devrites-code-reviewer.md +9 -18
- package/pack/generated/claude/agents/devrites-devex-reviewer.md +10 -18
- package/pack/generated/claude/agents/devrites-doubt-reviewer.md +10 -20
- package/pack/generated/claude/agents/devrites-evidence-scout.md +14 -26
- package/pack/generated/claude/agents/devrites-frontend-reviewer.md +9 -15
- package/pack/generated/claude/agents/devrites-performance-reviewer.md +13 -21
- package/pack/generated/claude/agents/devrites-plan-drafter.md +24 -28
- package/pack/generated/claude/agents/devrites-plan-reviewer.md +30 -47
- package/pack/generated/claude/agents/devrites-proof-runner.md +41 -47
- package/pack/generated/claude/agents/devrites-retrospector.md +34 -79
- package/pack/generated/claude/agents/devrites-security-auditor.md +9 -17
- package/pack/generated/claude/agents/devrites-simplifier-reviewer.md +9 -18
- package/pack/generated/claude/agents/devrites-slice-wright.md +44 -62
- package/pack/generated/claude/agents/devrites-spec-reviewer.md +38 -50
- package/pack/generated/claude/agents/devrites-strategy-reviewer.md +10 -19
- package/pack/generated/claude/agents/devrites-test-analyst.md +22 -21
- package/pack/generated/claude/agents/devrites-upgrade-planner.md +52 -71
- package/pack/generated/claude/settings.json +12 -100
- package/pack/generated/claude/skills/devrites-api-interface/SKILL.md +1 -2
- package/pack/generated/claude/skills/devrites-audit/SKILL.md +6 -9
- package/pack/generated/claude/skills/devrites-browser-proof/SKILL.md +0 -1
- package/pack/generated/claude/skills/devrites-debug-recovery/SKILL.md +21 -27
- package/pack/generated/claude/skills/devrites-debug-recovery/reference/cleanup-and-classify.md +22 -33
- package/pack/generated/claude/skills/devrites-doubt/SKILL.md +4 -6
- package/pack/generated/claude/skills/devrites-frontend-craft/SKILL.md +1 -2
- package/pack/generated/claude/skills/devrites-frontend-craft/reference/design-references.md +2 -1
- package/pack/generated/claude/skills/devrites-interview/SKILL.md +31 -36
- package/pack/generated/claude/skills/devrites-lib/SKILL.md +37 -66
- package/pack/generated/claude/skills/devrites-lib/reference/candidate-integrity.md +51 -0
- package/pack/generated/claude/skills/devrites-lib/reference/intent-map.md +20 -12
- package/pack/generated/claude/skills/devrites-lib/reference/orchestration-profiles.md +22 -0
- package/pack/generated/claude/skills/devrites-lib/reference/parallel-dispatch.md +35 -110
- package/pack/generated/claude/skills/devrites-lib/reference/reply-contract.md +26 -93
- package/pack/generated/claude/skills/devrites-lib/reference/standards/README.md +6 -3
- package/pack/generated/claude/skills/devrites-lib/reference/standards/afk-hitl.md +43 -34
- package/pack/generated/claude/skills/devrites-lib/reference/standards/agents.md +90 -216
- package/pack/generated/claude/skills/devrites-lib/reference/standards/anti-patterns.md +1 -1
- package/pack/generated/claude/skills/devrites-lib/reference/standards/code-review.md +9 -28
- package/pack/generated/claude/skills/devrites-lib/reference/standards/context-hygiene.md +13 -11
- package/pack/generated/claude/skills/devrites-lib/reference/standards/core.md +59 -54
- package/pack/generated/claude/skills/devrites-lib/reference/standards/hooks.md +3 -5
- package/pack/generated/claude/skills/devrites-lib/reference/standards/principles.md +29 -143
- package/pack/generated/claude/skills/devrites-lib/reference/standards/release/ship-checklist.md +5 -6
- package/pack/generated/claude/skills/devrites-lib/reference/standards/security.md +13 -31
- package/pack/generated/claude/skills/devrites-lib/reference/standards/skill-authoring.md +112 -82
- package/pack/generated/claude/skills/devrites-lib/reference/standards/spec-grammar.md +71 -45
- package/pack/generated/claude/skills/devrites-lib/reference/standards/testing.md +22 -11
- package/pack/generated/claude/skills/devrites-lib/reference/standards/tooling.md +15 -24
- package/pack/generated/claude/skills/devrites-lib/reference/workspace-artifact-schema.md +106 -37
- package/pack/generated/claude/skills/devrites-prose-craft/SKILL.md +3 -4
- package/pack/generated/claude/skills/devrites-source-driven/SKILL.md +3 -4
- package/pack/generated/claude/skills/devrites-ux-shape/SKILL.md +3 -3
- package/pack/generated/claude/skills/rite/SKILL.md +12 -13
- package/pack/generated/claude/skills/rite/reference/menu.md +11 -11
- package/pack/generated/claude/skills/rite-adopt/SKILL.md +29 -84
- package/pack/generated/claude/skills/rite-adopt/reference/adoption.md +16 -50
- package/pack/generated/claude/skills/rite-autocomplete/SKILL.md +65 -54
- package/pack/generated/claude/skills/rite-autocomplete/reference/loop.md +24 -17
- package/pack/generated/claude/skills/rite-autocomplete/reference/stop-conditions.md +18 -21
- package/pack/generated/claude/skills/rite-build/SKILL.md +28 -34
- package/pack/generated/claude/skills/rite-build/reference/afk-discipline.md +36 -34
- package/pack/generated/claude/skills/rite-build/reference/anti-patterns.md +5 -19
- package/pack/generated/claude/skills/rite-build/reference/checkpoint-protocol.md +10 -9
- package/pack/generated/claude/skills/rite-build/reference/checkpoint.md +17 -17
- package/pack/generated/claude/skills/rite-build/reference/frontend-trigger.md +3 -3
- package/pack/generated/claude/skills/rite-build/reference/one-slice-cycle.md +11 -14
- package/pack/generated/claude/skills/rite-build/reference/output.md +14 -24
- package/pack/generated/claude/skills/rite-build/reference/phase-contract.md +49 -188
- package/pack/generated/claude/skills/rite-build/reference/spec-drift-guard.md +1 -1
- package/pack/generated/claude/skills/rite-build/reference/wright-dispatch.md +43 -133
- package/pack/generated/claude/skills/rite-clarify/SKILL.md +46 -40
- package/pack/generated/claude/skills/rite-clarify/reference/decision-coverage.md +4 -10
- package/pack/generated/claude/skills/rite-converge/SKILL.md +9 -33
- package/pack/generated/claude/skills/rite-converge/reference/convergence-assessment.md +2 -2
- package/pack/generated/claude/skills/rite-customize/SKILL.md +34 -50
- package/pack/generated/claude/skills/rite-define/SKILL.md +34 -58
- package/pack/generated/claude/skills/rite-define/reference/plan-template.md +15 -0
- package/pack/generated/claude/skills/rite-doctor/SKILL.md +52 -64
- package/pack/generated/claude/skills/rite-dogfood/SKILL.md +1 -2
- package/pack/generated/claude/skills/rite-explain/SKILL.md +1 -20
- package/pack/generated/claude/skills/rite-frame/SKILL.md +1 -7
- package/pack/generated/claude/skills/rite-frame/reference/failure-modes.md +1 -1
- package/pack/generated/claude/skills/rite-handoff/SKILL.md +1 -2
- package/pack/generated/claude/skills/rite-handoff/reference/handoff-template.md +1 -1
- package/pack/generated/claude/skills/rite-learn/SKILL.md +44 -104
- package/pack/generated/claude/skills/rite-plan/SKILL.md +14 -26
- package/pack/generated/claude/skills/rite-plan/reference/task-breakdown.md +4 -1
- package/pack/generated/claude/skills/rite-polish/SKILL.md +20 -28
- package/pack/generated/claude/skills/rite-polish/reference/adr-promotion.md +11 -0
- package/pack/generated/{codex/skills/rite-ship → claude/skills/rite-polish}/reference/design-memory.md +23 -21
- package/pack/generated/claude/skills/rite-polish/reference/ledger.md +62 -0
- package/pack/generated/claude/skills/rite-pov/SKILL.md +28 -32
- package/pack/generated/claude/skills/rite-pr-feedback/SKILL.md +0 -1
- package/pack/generated/claude/skills/rite-pressure-test/SKILL.md +6 -13
- package/pack/generated/claude/skills/rite-prototype/SKILL.md +0 -6
- package/pack/generated/claude/skills/rite-prove/SKILL.md +73 -68
- package/pack/generated/claude/skills/rite-prove/reference/acceptance-proof.md +34 -30
- package/pack/generated/claude/skills/rite-prove/reference/test-command-discovery.md +15 -14
- package/pack/generated/claude/skills/rite-quick/SKILL.md +5 -19
- package/pack/generated/claude/skills/rite-resolve/SKILL.md +4 -21
- package/pack/generated/claude/skills/rite-resolve/reference/answer-protocol.md +2 -2
- package/pack/generated/claude/skills/rite-review/SKILL.md +34 -57
- package/pack/generated/claude/skills/rite-seal/SKILL.md +54 -87
- package/pack/generated/claude/skills/rite-seal/reference/anti-patterns.md +2 -2
- package/pack/generated/claude/skills/rite-seal/reference/final-evidence.md +31 -56
- package/pack/generated/claude/skills/rite-seal/reference/go-no-go.md +27 -51
- package/pack/generated/claude/skills/rite-seal/reference/output.md +2 -4
- package/pack/generated/claude/skills/rite-seal/reference/phase-contract.md +42 -140
- package/pack/generated/claude/skills/rite-seal/reference/risk-and-rollback.md +2 -2
- package/pack/generated/claude/skills/rite-seal/reference/seal-template.md +17 -28
- package/pack/generated/claude/skills/rite-ship/SKILL.md +65 -93
- package/pack/generated/claude/skills/rite-ship/reference/anti-patterns.md +4 -1
- package/pack/generated/claude/skills/rite-ship/reference/close-out.md +4 -12
- package/pack/generated/claude/skills/rite-ship/reference/git-ship.md +86 -48
- package/pack/generated/claude/skills/rite-ship/reference/ship-template.md +22 -16
- package/pack/generated/claude/skills/rite-spec/SKILL.md +62 -95
- package/pack/generated/claude/skills/rite-spec/reference/investigation.md +1 -4
- package/pack/generated/claude/skills/rite-spec/reference/question-protocol.md +21 -20
- package/pack/generated/claude/skills/rite-spec/reference/spec-checklists.md +16 -17
- package/pack/generated/claude/skills/rite-spec/reference/spec-template.md +47 -49
- package/pack/generated/claude/skills/rite-spec/reference/state-workspace.md +28 -13
- package/pack/generated/claude/skills/rite-status/SKILL.md +30 -88
- package/pack/generated/claude/skills/rite-temper/SKILL.md +12 -31
- package/pack/generated/claude/skills/rite-upgrade/SKILL.md +86 -101
- package/pack/generated/claude/skills/rite-vet/SKILL.md +88 -117
- package/pack/generated/claude/skills/rite-vet/reference/artifacts.md +56 -50
- package/pack/generated/claude/skills/rite-vet/reference/cross-model.md +15 -39
- package/pack/generated/claude/skills/rite-vet/reference/depth.md +2 -2
- package/pack/generated/claude/skills/rite-vet/reference/review-axes.md +3 -6
- package/pack/generated/claude/skills/rite-zoom-out/SKILL.md +0 -6
- package/pack/generated/codex/AGENTS.md +5 -4
- package/pack/generated/codex/agents/devrites-code-reviewer.toml +8 -27
- package/pack/generated/codex/agents/devrites-devex-reviewer.toml +9 -27
- package/pack/generated/codex/agents/devrites-doubt-reviewer.toml +9 -29
- package/pack/generated/codex/agents/devrites-evidence-scout.toml +14 -36
- package/pack/generated/codex/agents/devrites-frontend-reviewer.toml +8 -24
- package/pack/generated/codex/agents/devrites-performance-reviewer.toml +12 -30
- package/pack/generated/codex/agents/devrites-plan-drafter.toml +24 -38
- package/pack/generated/codex/agents/devrites-plan-reviewer.toml +30 -57
- package/pack/generated/codex/agents/devrites-proof-runner.toml +41 -57
- package/pack/generated/codex/agents/devrites-retrospector.toml +34 -89
- package/pack/generated/codex/agents/devrites-security-auditor.toml +8 -26
- package/pack/generated/codex/agents/devrites-simplifier-reviewer.toml +8 -27
- package/pack/generated/codex/agents/devrites-slice-wright.toml +44 -71
- package/pack/generated/codex/agents/devrites-spec-reviewer.toml +38 -60
- package/pack/generated/codex/agents/devrites-strategy-reviewer.toml +9 -28
- package/pack/generated/codex/agents/devrites-test-analyst.toml +21 -30
- package/pack/generated/codex/agents/devrites-upgrade-planner.toml +52 -81
- package/pack/generated/codex/config.toml +7 -0
- package/pack/generated/codex/skills/devrites-api-interface/SKILL.md +1 -21
- package/pack/generated/codex/skills/devrites-audit/SKILL.md +6 -28
- package/pack/generated/codex/skills/devrites-browser-proof/SKILL.md +1 -21
- package/pack/generated/codex/skills/devrites-debug-recovery/SKILL.md +21 -46
- package/pack/generated/codex/skills/devrites-debug-recovery/reference/cleanup-and-classify.md +22 -33
- package/pack/generated/codex/skills/devrites-doubt/SKILL.md +4 -25
- package/pack/generated/codex/skills/devrites-frontend-craft/SKILL.md +1 -21
- package/pack/generated/codex/skills/devrites-frontend-craft/reference/design-references.md +2 -1
- package/pack/generated/codex/skills/devrites-interview/SKILL.md +32 -56
- package/pack/generated/codex/skills/devrites-lib/SKILL.md +38 -86
- package/pack/generated/codex/skills/devrites-lib/reference/candidate-integrity.md +51 -0
- package/pack/generated/codex/skills/devrites-lib/reference/intent-map.md +20 -12
- package/pack/generated/codex/skills/devrites-lib/reference/orchestration-profiles.md +22 -0
- package/pack/generated/codex/skills/devrites-lib/reference/parallel-dispatch.md +35 -110
- package/pack/generated/codex/skills/devrites-lib/reference/reply-contract.md +26 -93
- package/pack/generated/codex/skills/devrites-lib/reference/standards/README.md +6 -3
- package/pack/generated/codex/skills/devrites-lib/reference/standards/afk-hitl.md +43 -34
- package/pack/generated/codex/skills/devrites-lib/reference/standards/agents.md +90 -216
- package/pack/generated/codex/skills/devrites-lib/reference/standards/anti-patterns.md +1 -1
- package/pack/generated/codex/skills/devrites-lib/reference/standards/code-review.md +9 -28
- package/pack/generated/codex/skills/devrites-lib/reference/standards/context-hygiene.md +13 -11
- package/pack/generated/codex/skills/devrites-lib/reference/standards/core.md +59 -54
- package/pack/generated/codex/skills/devrites-lib/reference/standards/hooks.md +3 -5
- package/pack/generated/codex/skills/devrites-lib/reference/standards/principles.md +29 -143
- package/pack/generated/codex/skills/devrites-lib/reference/standards/release/ship-checklist.md +5 -6
- package/pack/generated/codex/skills/devrites-lib/reference/standards/security.md +13 -31
- package/pack/generated/codex/skills/devrites-lib/reference/standards/skill-authoring.md +112 -82
- package/pack/generated/codex/skills/devrites-lib/reference/standards/spec-grammar.md +71 -45
- package/pack/generated/codex/skills/devrites-lib/reference/standards/testing.md +22 -11
- package/pack/generated/codex/skills/devrites-lib/reference/standards/tooling.md +15 -24
- package/pack/generated/codex/skills/devrites-lib/reference/workspace-artifact-schema.md +106 -37
- package/pack/generated/codex/skills/devrites-prose-craft/SKILL.md +3 -23
- package/pack/generated/codex/skills/devrites-source-driven/SKILL.md +3 -23
- package/pack/generated/codex/skills/devrites-ux-shape/SKILL.md +3 -22
- package/pack/generated/codex/skills/rite/SKILL.md +12 -32
- package/pack/generated/codex/skills/rite/reference/menu.md +11 -11
- package/pack/generated/codex/skills/rite-adopt/SKILL.md +29 -103
- package/pack/generated/codex/skills/rite-adopt/reference/adoption.md +16 -50
- package/pack/generated/codex/skills/rite-autocomplete/SKILL.md +65 -73
- package/pack/generated/codex/skills/rite-autocomplete/reference/loop.md +24 -17
- package/pack/generated/codex/skills/rite-autocomplete/reference/stop-conditions.md +18 -21
- package/pack/generated/codex/skills/rite-build/SKILL.md +28 -53
- package/pack/generated/codex/skills/rite-build/reference/afk-discipline.md +36 -34
- package/pack/generated/codex/skills/rite-build/reference/anti-patterns.md +5 -19
- package/pack/generated/codex/skills/rite-build/reference/checkpoint-protocol.md +10 -9
- package/pack/generated/codex/skills/rite-build/reference/checkpoint.md +17 -17
- package/pack/generated/codex/skills/rite-build/reference/frontend-trigger.md +3 -3
- package/pack/generated/codex/skills/rite-build/reference/one-slice-cycle.md +11 -14
- package/pack/generated/codex/skills/rite-build/reference/output.md +14 -24
- package/pack/generated/codex/skills/rite-build/reference/phase-contract.md +49 -188
- package/pack/generated/codex/skills/rite-build/reference/spec-drift-guard.md +1 -1
- package/pack/generated/codex/skills/rite-build/reference/wright-dispatch.md +43 -133
- package/pack/generated/codex/skills/rite-clarify/SKILL.md +46 -59
- package/pack/generated/codex/skills/rite-clarify/reference/decision-coverage.md +4 -10
- package/pack/generated/codex/skills/rite-converge/SKILL.md +9 -52
- package/pack/generated/codex/skills/rite-converge/reference/convergence-assessment.md +2 -2
- package/pack/generated/codex/skills/rite-customize/SKILL.md +32 -67
- package/pack/generated/codex/skills/rite-define/SKILL.md +34 -77
- package/pack/generated/codex/skills/rite-define/reference/plan-template.md +15 -0
- package/pack/generated/codex/skills/rite-doctor/SKILL.md +52 -83
- package/pack/generated/codex/skills/rite-dogfood/SKILL.md +1 -21
- package/pack/generated/codex/skills/rite-explain/SKILL.md +1 -39
- package/pack/generated/codex/skills/rite-frame/SKILL.md +1 -26
- package/pack/generated/codex/skills/rite-frame/reference/failure-modes.md +1 -1
- package/pack/generated/codex/skills/rite-handoff/SKILL.md +1 -21
- package/pack/generated/codex/skills/rite-handoff/reference/handoff-template.md +1 -1
- package/pack/generated/codex/skills/rite-learn/SKILL.md +44 -123
- package/pack/generated/codex/skills/rite-plan/SKILL.md +14 -45
- package/pack/generated/codex/skills/rite-plan/reference/task-breakdown.md +4 -1
- package/pack/generated/codex/skills/rite-polish/SKILL.md +20 -47
- package/pack/generated/codex/skills/rite-polish/reference/adr-promotion.md +11 -0
- package/pack/{.claude/skills/rite-ship → generated/codex/skills/rite-polish}/reference/design-memory.md +23 -21
- package/pack/generated/codex/skills/rite-polish/reference/ledger.md +62 -0
- package/pack/generated/codex/skills/rite-pov/SKILL.md +28 -51
- package/pack/generated/codex/skills/rite-pr-feedback/SKILL.md +0 -20
- package/pack/generated/codex/skills/rite-pressure-test/SKILL.md +6 -32
- package/pack/generated/codex/skills/rite-prototype/SKILL.md +0 -25
- package/pack/generated/codex/skills/rite-prove/SKILL.md +73 -87
- package/pack/generated/codex/skills/rite-prove/reference/acceptance-proof.md +34 -30
- package/pack/generated/codex/skills/rite-prove/reference/test-command-discovery.md +15 -14
- package/pack/generated/codex/skills/rite-quick/SKILL.md +5 -38
- package/pack/generated/codex/skills/rite-resolve/SKILL.md +4 -40
- package/pack/generated/codex/skills/rite-resolve/reference/answer-protocol.md +2 -2
- package/pack/generated/codex/skills/rite-review/SKILL.md +34 -76
- package/pack/generated/codex/skills/rite-seal/SKILL.md +51 -103
- package/pack/generated/codex/skills/rite-seal/reference/anti-patterns.md +2 -2
- package/pack/generated/codex/skills/rite-seal/reference/final-evidence.md +31 -56
- package/pack/generated/codex/skills/rite-seal/reference/go-no-go.md +27 -51
- package/pack/generated/codex/skills/rite-seal/reference/output.md +2 -4
- package/pack/generated/codex/skills/rite-seal/reference/phase-contract.md +42 -140
- package/pack/generated/codex/skills/rite-seal/reference/risk-and-rollback.md +2 -2
- package/pack/generated/codex/skills/rite-seal/reference/seal-template.md +17 -28
- package/pack/generated/codex/skills/rite-ship/SKILL.md +65 -112
- package/pack/generated/codex/skills/rite-ship/reference/anti-patterns.md +4 -1
- package/pack/generated/codex/skills/rite-ship/reference/close-out.md +4 -12
- package/pack/generated/codex/skills/rite-ship/reference/git-ship.md +86 -48
- package/pack/generated/codex/skills/rite-ship/reference/ship-template.md +22 -16
- package/pack/generated/codex/skills/rite-spec/SKILL.md +62 -114
- package/pack/generated/codex/skills/rite-spec/reference/investigation.md +1 -4
- package/pack/generated/codex/skills/rite-spec/reference/question-protocol.md +21 -20
- package/pack/generated/codex/skills/rite-spec/reference/spec-checklists.md +16 -17
- package/pack/generated/codex/skills/rite-spec/reference/spec-template.md +47 -49
- package/pack/generated/codex/skills/rite-spec/reference/state-workspace.md +28 -13
- package/pack/generated/codex/skills/rite-status/SKILL.md +30 -107
- package/pack/generated/codex/skills/rite-temper/SKILL.md +12 -50
- package/pack/generated/codex/skills/rite-upgrade/SKILL.md +86 -120
- package/pack/generated/codex/skills/rite-vet/SKILL.md +88 -136
- package/pack/generated/codex/skills/rite-vet/reference/artifacts.md +56 -50
- package/pack/generated/codex/skills/rite-vet/reference/cross-model.md +15 -39
- package/pack/generated/codex/skills/rite-vet/reference/depth.md +2 -2
- package/pack/generated/codex/skills/rite-vet/reference/review-axes.md +3 -6
- package/pack/generated/codex/skills/rite-zoom-out/SKILL.md +0 -25
- package/package.json +6 -5
- package/scripts/build-host-artifacts.sh +5 -9
- package/scripts/codex-generate.sh +18 -278
- package/scripts/install-lib.sh +121 -34
- package/uninstall.sh +19 -17
- package/update.sh +26 -18
- package/docs/engine/agent-contract.md +0 -172
- package/docs/extensions.md +0 -178
- package/engine/git_guard.go +0 -187
- package/engine/git_guard_test.go +0 -283
- package/engine/harnessmatrix.go +0 -60
- package/engine/hookpolicy.go +0 -113
- package/engine/hookpolicy_test.go +0 -160
- package/engine/hooks.go +0 -677
- package/engine/hooks_agent_dispatch.go +0 -1637
- package/engine/hooks_events_test.go +0 -431
- package/engine/hooks_workspace.go +0 -1196
- package/engine/internal/doctor/doctor.go +0 -306
- package/engine/internal/doctor/doctor_test.go +0 -252
- package/engine/internal/forge/forge.go +0 -938
- package/engine/internal/forge/forge_test.go +0 -576
- package/engine/internal/forge/git.go +0 -245
- package/engine/internal/forge/liveness_unix.go +0 -48
- package/engine/internal/forge/liveness_windows.go +0 -67
- package/engine/internal/forge/manifest.go +0 -402
- package/engine/internal/harness/compliance.go +0 -96
- package/engine/internal/harness/harness.go +0 -301
- package/engine/internal/harness/harness_test.go +0 -124
- package/engine/internal/iohooks/detach_other.go +0 -11
- package/engine/internal/iohooks/detach_unix.go +0 -11
- package/engine/internal/iohooks/iohooks.go +0 -839
- package/engine/internal/iohooks/iohooks_test.go +0 -561
- package/engine/internal/lib/adoption.go +0 -659
- package/engine/internal/lib/adoption_test.go +0 -121
- package/engine/internal/lib/analyze.go +0 -232
- package/engine/internal/lib/archivesearch.go +0 -125
- package/engine/internal/lib/archivesearch_test.go +0 -138
- package/engine/internal/lib/budget.go +0 -172
- package/engine/internal/lib/buildreadiness.go +0 -111
- package/engine/internal/lib/checkacceptance.go +0 -176
- package/engine/internal/lib/clarifyreturn.go +0 -91
- package/engine/internal/lib/clarifyreturn_test.go +0 -123
- package/engine/internal/lib/command_other.go +0 -7
- package/engine/internal/lib/command_unix.go +0 -24
- package/engine/internal/lib/context.go +0 -280
- package/engine/internal/lib/conventions.go +0 -449
- package/engine/internal/lib/coverage.go +0 -145
- package/engine/internal/lib/dispatchwaive.go +0 -31
- package/engine/internal/lib/dispatchwaive_test.go +0 -23
- package/engine/internal/lib/doubtcoverage.go +0 -78
- package/engine/internal/lib/extensions.go +0 -622
- package/engine/internal/lib/extensions_test.go +0 -305
- package/engine/internal/lib/footprint.go +0 -239
- package/engine/internal/lib/gitauthority.go +0 -601
- package/engine/internal/lib/gitauthority_test.go +0 -346
- package/engine/internal/lib/jsonout.go +0 -129
- package/engine/internal/lib/jsonout_test.go +0 -73
- package/engine/internal/lib/lanes.go +0 -112
- package/engine/internal/lib/learnings.go +0 -397
- package/engine/internal/lib/learnings_inject_test.go +0 -77
- package/engine/internal/lib/learnings_remediation_test.go +0 -24
- package/engine/internal/lib/ledger.go +0 -311
- package/engine/internal/lib/ledger_test.go +0 -186
- package/engine/internal/lib/mutationgate.go +0 -89
- package/engine/internal/lib/observability_test.go +0 -358
- package/engine/internal/lib/overrides.go +0 -164
- package/engine/internal/lib/overrides_test.go +0 -112
- package/engine/internal/lib/preamble.go +0 -159
- package/engine/internal/lib/preamble_questions_test.go +0 -10
- package/engine/internal/lib/progress.go +0 -210
- package/engine/internal/lib/provenance.go +0 -462
- package/engine/internal/lib/provenance_test.go +0 -154
- package/engine/internal/lib/readiness_contract.json +0 -118
- package/engine/internal/lib/readinessartifact.go +0 -533
- package/engine/internal/lib/readinessartifact_test.go +0 -422
- package/engine/internal/lib/reconcile.go +0 -1496
- package/engine/internal/lib/reconcile_test.go +0 -1071
- package/engine/internal/lib/recoveryattempts.go +0 -298
- package/engine/internal/lib/recoveryattempts_test.go +0 -215
- package/engine/internal/lib/reviewers.go +0 -143
- package/engine/internal/lib/reviewers_test.go +0 -45
- package/engine/internal/lib/reviewerstats.go +0 -199
- package/engine/internal/lib/reviewerstats_test.go +0 -104
- package/engine/internal/lib/reviewintegrity.go +0 -143
- package/engine/internal/lib/reviewintegrity_test.go +0 -103
- package/engine/internal/lib/runbook.go +0 -295
- package/engine/internal/lib/runbook_context_test.go +0 -182
- package/engine/internal/lib/session.go +0 -1020
- package/engine/internal/lib/session_test.go +0 -177
- package/engine/internal/lib/specparse.go +0 -125
- package/engine/internal/lib/specskeleton.go +0 -79
- package/engine/internal/lib/specvalidate.go +0 -391
- package/engine/internal/lib/specvalidate_test.go +0 -185
- package/engine/internal/lib/stuck.go +0 -206
- package/engine/internal/lib/templates/conventions_drift.tmpl +0 -6
- package/engine/internal/lib/templates/conventions_ledger_header.md +0 -6
- package/engine/internal/lib/templates/conventions_orient_header.txt +0 -1
- package/engine/internal/lib/testintegrity.go +0 -199
- package/engine/internal/lib/testintegrity_test.go +0 -149
- package/engine/internal/lib/tickafk.go +0 -86
- package/engine/internal/migrate/migrate.go +0 -279
- package/engine/internal/migrate/migrate_test.go +0 -157
- package/engine/internal/orient/firstrun.go +0 -50
- package/engine/internal/orient/firstrun_test.go +0 -72
- package/engine/internal/orient/orient.go +0 -69
- package/engine/internal/orient/orient_test.go +0 -25
- package/engine/internal/profile/profile.go +0 -284
- package/engine/internal/profile/profile_test.go +0 -13
- package/engine/internal/state/clarify_transition.go +0 -165
- package/engine/internal/state/clarify_transition_test.go +0 -130
- package/engine/internal/state/snapshot.go +0 -457
- package/engine/internal/toolpolicy/classifier.go +0 -533
- package/engine/internal/toolpolicy/classifier_test.go +0 -424
- package/engine/internal/toolpolicy/git.go +0 -616
- package/engine/internal/toolpolicy/scanner.go +0 -382
- package/engine/observability_cli_test.go +0 -52
- package/engine/profile_test.go +0 -76
- package/engine/subagent_orient_context.txt +0 -8
- package/engine/testdata/golden/TestParityA1Guard/devrites-edit-allowed.golden +0 -1
- package/engine/testdata/golden/TestParityA1Guard/no-window-silent.golden +0 -1
- package/engine/testdata/golden/TestParityA1Guard/non-edit-tool.golden +0 -1
- package/engine/testdata/golden/TestParityA1Guard/observe-mode-silent.golden +0 -1
- package/engine/testdata/golden/TestParityA1Guard/source-edit-enforce-denies.golden +0 -2
- package/engine/testdata/golden/TestParityA1Guard/subagent-allowed.golden +0 -1
- package/engine/testdata/golden/TestParityAnalyze/noactive.golden +0 -1
- package/engine/testdata/golden/TestParityAnalyze/slug=covered.golden +0 -15
- package/engine/testdata/golden/TestParityAnalyze/slug=dangling.golden +0 -16
- package/engine/testdata/golden/TestParityAnalyze/slug=ghost.golden +0 -1
- package/engine/testdata/golden/TestParityAnalyze/slug=noac.golden +0 -15
- package/engine/testdata/golden/TestParityAnalyze/slug=order.golden +0 -17
- package/engine/testdata/golden/TestParityAnalyze/slug=orphan.golden +0 -16
- package/engine/testdata/golden/TestParityAnalyze/slug=uncovered.golden +0 -16
- package/engine/testdata/golden/TestParityBudget/default-active.golden +0 -4
- package/engine/testdata/golden/TestParityBudget/extra-md.golden +0 -5
- package/engine/testdata/golden/TestParityBudget/no-active.golden +0 -1
- package/engine/testdata/golden/TestParityBudget/no-feature.golden +0 -1
- package/engine/testdata/golden/TestParityBudget/over-advisory.golden +0 -6
- package/engine/testdata/golden/TestParityBudget/over-strict.golden +0 -6
- package/engine/testdata/golden/TestParityBudget/within.golden +0 -6
- package/engine/testdata/golden/TestParityBuildReadiness/arg=approved.golden +0 -2
- package/engine/testdata/golden/TestParityBuildReadiness/arg=approvenone.golden +0 -1
- package/engine/testdata/golden/TestParityBuildReadiness/arg=await.golden +0 -1
- package/engine/testdata/golden/TestParityBuildReadiness/arg=blocked.golden +0 -1
- package/engine/testdata/golden/TestParityBuildReadiness/arg=clarifyopen.golden +0 -1
- package/engine/testdata/golden/TestParityBuildReadiness/arg=emptystatus.golden +0 -2
- package/engine/testdata/golden/TestParityBuildReadiness/arg=ghost.golden +0 -1
- package/engine/testdata/golden/TestParityBuildReadiness/arg=legacycontract.golden +0 -1
- package/engine/testdata/golden/TestParityBuildReadiness/arg=noapprove.golden +0 -1
- package/engine/testdata/golden/TestParityBuildReadiness/arg=noclarify.golden +0 -1
- package/engine/testdata/golden/TestParityBuildReadiness/arg=novet.golden +0 -1
- package/engine/testdata/golden/TestParityBuildReadiness/arg=stalevet.golden +0 -1
- package/engine/testdata/golden/TestParityBuildReadiness/arg=trailhash.golden +0 -2
- package/engine/testdata/golden/TestParityBuildReadiness/arg=trailpipe.golden +0 -2
- package/engine/testdata/golden/TestParityBuildReadiness/arg=vetnotready.golden +0 -1
- package/engine/testdata/golden/TestParityCheckAcceptance/arg=blank-section.golden +0 -1
- package/engine/testdata/golden/TestParityCheckAcceptance/arg=empty.golden +0 -1
- package/engine/testdata/golden/TestParityCheckAcceptance/arg=flat-dropped.golden +0 -1
- package/engine/testdata/golden/TestParityCheckAcceptance/arg=flat-ok.golden +0 -2
- package/engine/testdata/golden/TestParityCheckAcceptance/arg=flat-unchecked.golden +0 -1
- package/engine/testdata/golden/TestParityCheckAcceptance/arg=id-gap.golden +0 -1
- package/engine/testdata/golden/TestParityCheckAcceptance/arg=id-ok.golden +0 -2
- package/engine/testdata/golden/TestParityCheckAcceptance/arg=no-seal.golden +0 -1
- package/engine/testdata/golden/TestParityCheckAcceptance/arg=no-section.golden +0 -1
- package/engine/testdata/golden/TestParityCheckAcceptance/arg=nonexistent.golden +0 -1
- package/engine/testdata/golden/TestParityCheckAcceptance.golden +0 -1
- package/engine/testdata/golden/TestParityCoverage/arg=flat.golden +0 -7
- package/engine/testdata/golden/TestParityCoverage/arg=full.golden +0 -10
- package/engine/testdata/golden/TestParityCoverage/arg=nonexistent.golden +0 -1
- package/engine/testdata/golden/TestParityCoverage/arg=nospec.golden +0 -1
- package/engine/testdata/golden/TestParityCoverage/arg=speconly.golden +0 -9
- package/engine/testdata/golden/TestParityCoverage.golden +0 -1
- package/engine/testdata/golden/TestParityCursor/bare.golden +0 -3
- package/engine/testdata/golden/TestParityCursor/full-afk.golden +0 -6
- package/engine/testdata/golden/TestParityCursor/full-hitl.golden +0 -5
- package/engine/testdata/golden/TestParityCursor/no-active.golden +0 -1
- package/engine/testdata/golden/TestParityCursor/red.golden +0 -5
- package/engine/testdata/golden/TestParityCursor/zerogates.golden +0 -5
- package/engine/testdata/golden/TestParityDoubtCoverage/arg=doubted.golden +0 -2
- package/engine/testdata/golden/TestParityDoubtCoverage/arg=ghost.golden +0 -2
- package/engine/testdata/golden/TestParityDoubtCoverage/arg=missing.golden +0 -3
- package/engine/testdata/golden/TestParityDoubtCoverage/arg=nodoubt.golden +0 -4
- package/engine/testdata/golden/TestParityDoubtCoverage/arg=nolog.golden +0 -2
- package/engine/testdata/golden/TestParityDoubtCoverage/arg=nowright.golden +0 -2
- package/engine/testdata/golden/TestParityDoubtCoverage.golden +0 -1
- package/engine/testdata/golden/TestParityMutationGate/active-slug.golden +0 -3
- package/engine/testdata/golden/TestParityMutationGate/explicit-slug.golden +0 -3
- package/engine/testdata/golden/TestParityMutationGate/ghost.golden +0 -1
- package/engine/testdata/golden/TestParityOrientSilentPath.golden +0 -1
- package/engine/testdata/golden/TestParityReconcile/bad-mode.golden +0 -1
- package/engine/testdata/golden/TestParityReconcile/check-clean/snapshot.golden +0 -2
- package/engine/testdata/golden/TestParityReconcile/check-clean.golden +0 -2
- package/engine/testdata/golden/TestParityReconcile/check-no-base.golden +0 -1
- package/engine/testdata/golden/TestParityReconcile/check-no-claimed/snapshot.golden +0 -2
- package/engine/testdata/golden/TestParityReconcile/check-violation/snapshot.golden +0 -2
- package/engine/testdata/golden/TestParityReconcile/check-violation.golden +0 -1
- package/engine/testdata/golden/TestParityReconcile/close-window/snapshot.golden +0 -2
- package/engine/testdata/golden/TestParityReconcile/close-window.golden +0 -3
- package/engine/testdata/golden/TestParityReconcile/not-git.golden +0 -1
- package/engine/testdata/golden/TestParityReconcile/snapshot/snapshot.golden +0 -2
- package/engine/testdata/golden/TestParityReconcile/snapshot-no-allowlist.golden +0 -1
- package/engine/testdata/golden/TestParityReconcile/snapshot.golden +0 -2
- package/engine/testdata/golden/TestParityRedwatch/fail-writes-red.golden +0 -2
- package/engine/testdata/golden/TestParityRedwatch/non-bash-tool.golden +0 -1
- package/engine/testdata/golden/TestParityRedwatch/non-test-command.golden +0 -1
- package/engine/testdata/golden/TestParityRedwatch/pass-clears-red.golden +0 -1
- package/engine/testdata/golden/TestParityResolve/next-qid.golden +0 -2
- package/engine/testdata/golden/TestParityReviewerReadonly/agent-required-devrites-agent-denies.golden +0 -2
- package/engine/testdata/golden/TestParityReviewerReadonly/agent-required-non-devrites-allows.golden +0 -1
- package/engine/testdata/golden/TestParityReviewerReadonly/agent-required-subagent-type-only-allows.golden +0 -1
- package/engine/testdata/golden/TestParityReviewerReadonly/enforce-deny-git-commit.golden +0 -2
- package/engine/testdata/golden/TestParityReviewerReadonly/enforce-deny-mutating.golden +0 -2
- package/engine/testdata/golden/TestParityReviewerReadonly/non-bash-tool.golden +0 -1
- package/engine/testdata/golden/TestParityReviewerReadonly/non-tool-input.golden +0 -1
- package/engine/testdata/golden/TestParityReviewerReadonly/observe-mutating-silent.golden +0 -1
- package/engine/testdata/golden/TestParityReviewerReadonly/safe-bash-command.golden +0 -1
- package/engine/testdata/golden/TestParitySpecValidate/arg=dup.golden +0 -1
- package/engine/testdata/golden/TestParitySpecValidate/arg=empty.golden +0 -1
- package/engine/testdata/golden/TestParitySpecValidate/arg=flat.golden +0 -2
- package/engine/testdata/golden/TestParitySpecValidate/arg=nonexistent.golden +0 -1
- package/engine/testdata/golden/TestParitySpecValidate/arg=noscenario.golden +0 -1
- package/engine/testdata/golden/TestParitySpecValidate/arg=noshall.golden +0 -1
- package/engine/testdata/golden/TestParitySpecValidate/arg=nothen.golden +0 -1
- package/engine/testdata/golden/TestParitySpecValidate/arg=valid/spec.md.golden +0 -2
- package/engine/testdata/golden/TestParitySpecValidate/arg=valid.golden +0 -2
- package/engine/testdata/golden/TestParitySpecValidate.golden +0 -1
- package/engine/testdata/golden/TestParityStatusline/full-afk.golden +0 -2
- package/engine/testdata/golden/TestParityStatusline/full-hitl.golden +0 -2
- package/engine/testdata/golden/TestParityStatusline/no-active.golden +0 -1
- package/engine/testdata/golden/TestParityStatusline/nophase.golden +0 -2
- package/engine/testdata/golden/TestParityStatusline/red.golden +0 -2
- package/engine/testdata/golden/TestParityStuckCheck/bad-cmd.golden +0 -1
- package/engine/testdata/golden/TestParityStuckCheck/custom-window-2.golden +0 -2
- package/engine/testdata/golden/TestParityStuckCheck/dominant.golden +0 -2
- package/engine/testdata/golden/TestParityStuckCheck/few.golden +0 -2
- package/engine/testdata/golden/TestParityStuckCheck/ghost.golden +0 -2
- package/engine/testdata/golden/TestParityStuckCheck/identical.golden +0 -2
- package/engine/testdata/golden/TestParityStuckCheck/no-cmd.golden +0 -1
- package/engine/testdata/golden/TestParityStuckCheck/no-slug.golden +0 -1
- package/engine/testdata/golden/TestParityStuckCheck/nolog.golden +0 -2
- package/engine/testdata/golden/TestParityStuckCheck/pingpong.golden +0 -2
- package/engine/testdata/golden/TestParityStuckCheck/varied.golden +0 -2
- package/engine/testdata/golden/TestParityStuckCheck/window-04-identical.golden +0 -2
- package/engine/testdata/golden/TestParityStuckCheck/window-2.5-varied4.golden +0 -2
- package/engine/testdata/golden/TestParityStuckCheck/window-4x-varied4.golden +0 -2
- package/engine/testdata/golden/TestParityStuckCheck/window-leadspace-varied4.golden +0 -2
- package/engine/testdata/golden/TestParityStuckCheck/window-plus4-identical.golden +0 -2
- package/engine/testdata/golden/TestParitySubagentOrient/devrites-agent-subagent-type-key.golden +0 -2
- package/engine/testdata/golden/TestParitySubagentOrient/devrites-agent.golden +0 -2
- package/engine/testdata/golden/TestParitySubagentOrient/garbage-input.golden +0 -1
- package/engine/testdata/golden/TestParitySubagentOrient/non-devrites-agent.golden +0 -1
- package/engine/testdata/golden/TestParityTestIntegrity/assertion-dropped.golden +0 -1
- package/engine/testdata/golden/TestParityTestIntegrity/clean.golden +0 -2
- package/engine/testdata/golden/TestParityTestIntegrity/deleted.golden +0 -1
- package/engine/testdata/golden/TestParityTestIntegrity/ghost-workspace.golden +0 -1
- package/engine/testdata/golden/TestParityTestIntegrity/not-git.golden +0 -1
- package/engine/testdata/golden/TestParityTestIntegrity/skip-added.golden +0 -1
- package/engine/testdata/golden/TestParityTickAfk/budget1/state.md.golden +0 -1
- package/engine/testdata/golden/TestParityTickAfk/budget1.golden +0 -2
- package/engine/testdata/golden/TestParityTickAfk/budget3/state.md.golden +0 -5
- package/engine/testdata/golden/TestParityTickAfk/budget3.golden +0 -2
- package/engine/testdata/golden/TestParityTickAfk/bulletPipe/state.md.golden +0 -1
- package/engine/testdata/golden/TestParityTickAfk/bulletPipe.golden +0 -2
- package/engine/testdata/golden/TestParityTickAfk/missingField/state.md.golden +0 -3
- package/engine/testdata/golden/TestParityTickAfk/missingField.golden +0 -2
- package/engine/testdata/golden/TestParityTickAfk/missingFile.golden +0 -1
- package/engine/testdata/golden/TestParityTickAfk/nonNumeric/state.md.golden +0 -1
- package/engine/testdata/golden/TestParityTickAfk/nonNumeric.golden +0 -1
- package/engine/testdata/golden/TestParityTickAfk/none/state.md.golden +0 -1
- package/engine/testdata/golden/TestParityTickAfk/none.golden +0 -2
- package/engine/testdata/golden/TestParityWrightScope/agent-required-non-wright.golden +0 -1
- package/engine/testdata/golden/TestParityWrightScope/devrites-edit-denied.golden +0 -2
- package/engine/testdata/golden/TestParityWrightScope/in-scope-allowed.golden +0 -1
- package/engine/testdata/golden/TestParityWrightScope/non-edit-tool.golden +0 -1
- package/engine/testdata/golden/TestParityWrightScope/out-of-scope-enforce-denies.golden +0 -2
- package/engine/testdata/golden/TestParityWrightScope/out-of-scope-observe-silent.golden +0 -1
- package/engine/testdata/golden/TestSpecSkeleton/missing-some.golden +0 -2
- package/engine/testdata/golden/TestSpecSkeleton/present-all.golden +0 -2
- package/engine/testdata/golden/TestStuckLogHashParity.golden +0 -1
- package/engine/tests/adr_0006_clock_seam_test.go +0 -36
- package/engine/tests/budget_test.go +0 -88
- package/engine/tests/canonical_ac_ids_test.go +0 -44
- package/engine/tests/concurrency_cli_test.go +0 -131
- package/engine/tests/conventions_test.go +0 -106
- package/engine/tests/doctor_cli_test.go +0 -223
- package/engine/tests/forge_cli_test.go +0 -463
- package/engine/tests/hook_test.go +0 -2732
- package/engine/tests/hooks_io_test.go +0 -309
- package/engine/tests/json_contract_test.go +0 -224
- package/engine/tests/lib_parity_test.go +0 -930
- package/engine/tests/migrate_cli_test.go +0 -195
- package/engine/tests/parity_analyze_test.go +0 -55
- package/engine/tests/parity_buildreadiness_test.go +0 -199
- package/engine/tests/parity_learnings_test.go +0 -89
- package/engine/tests/parity_mutationgate_test.go +0 -36
- package/engine/tests/parity_reconcile_test.go +0 -94
- package/engine/tests/parity_testintegrity_test.go +0 -65
- package/engine/tests/parity_tickafk_test.go +0 -83
- package/engine/validatepack.go +0 -192
- package/engine/validatepack_test.go +0 -79
- package/engine/validatepackskills.go +0 -181
- package/engine/validatepackskills_test.go +0 -171
- package/pack/.claude/agents/devrites-forge-judge.md +0 -118
- package/pack/.claude/skills/devrites-lib/reference/model-tiers.md +0 -44
- package/pack/.claude/skills/devrites-refresh-indexes/SKILL.md +0 -52
- package/pack/.claude/skills/rite-build/reference/evidence-standard.md +0 -45
- package/pack/.claude/skills/rite-build/reference/forge.md +0 -210
- package/pack/.claude/skills/rite-seal/reference/conventions-ledger.md +0 -60
- package/pack/.claude/skills/rite-ship/reference/adr-promotion.md +0 -9
- package/pack/.claude/skills/rite-ship/reference/ledger.md +0 -56
- package/pack/generated/claude/agents/devrites-forge-judge.md +0 -118
- package/pack/generated/claude/skills/devrites-lib/reference/model-tiers.md +0 -44
- package/pack/generated/claude/skills/devrites-refresh-indexes/SKILL.md +0 -52
- package/pack/generated/claude/skills/rite-build/reference/evidence-standard.md +0 -45
- package/pack/generated/claude/skills/rite-build/reference/forge.md +0 -210
- package/pack/generated/claude/skills/rite-seal/reference/conventions-ledger.md +0 -60
- package/pack/generated/claude/skills/rite-ship/reference/adr-promotion.md +0 -9
- package/pack/generated/claude/skills/rite-ship/reference/ledger.md +0 -56
- package/pack/generated/codex/agents/devrites-forge-judge.toml +0 -128
- package/pack/generated/codex/hooks.json +0 -185
- package/pack/generated/codex/skills/devrites-api-interface/agents/openai.yaml +0 -2
- package/pack/generated/codex/skills/devrites-audit/agents/openai.yaml +0 -2
- package/pack/generated/codex/skills/devrites-browser-proof/agents/openai.yaml +0 -2
- package/pack/generated/codex/skills/devrites-debug-recovery/agents/openai.yaml +0 -2
- package/pack/generated/codex/skills/devrites-doubt/agents/openai.yaml +0 -2
- package/pack/generated/codex/skills/devrites-frontend-craft/agents/openai.yaml +0 -2
- package/pack/generated/codex/skills/devrites-interview/agents/openai.yaml +0 -2
- package/pack/generated/codex/skills/devrites-lib/reference/model-tiers.md +0 -44
- package/pack/generated/codex/skills/devrites-prose-craft/agents/openai.yaml +0 -2
- package/pack/generated/codex/skills/devrites-refresh-indexes/SKILL.md +0 -71
- package/pack/generated/codex/skills/devrites-refresh-indexes/agents/openai.yaml +0 -2
- package/pack/generated/codex/skills/devrites-source-driven/agents/openai.yaml +0 -2
- package/pack/generated/codex/skills/devrites-ux-shape/agents/openai.yaml +0 -2
- package/pack/generated/codex/skills/rite-build/reference/evidence-standard.md +0 -45
- package/pack/generated/codex/skills/rite-build/reference/forge.md +0 -210
- package/pack/generated/codex/skills/rite-seal/reference/conventions-ledger.md +0 -60
- package/pack/generated/codex/skills/rite-ship/reference/adr-promotion.md +0 -9
- package/pack/generated/codex/skills/rite-ship/reference/ledger.md +0 -56
- package/scripts/build-binaries.sh +0 -75
- package/scripts/build-release-tarball.sh +0 -105
- package/scripts/check-authority-drift.py +0 -125
- package/scripts/check-cross-refs.py +0 -139
- package/scripts/check-generated-skill-budget.mjs +0 -42
- package/scripts/check-instruction-size-baseline.mjs +0 -88
- package/scripts/check-invocation-integrity.py +0 -115
- package/scripts/check-no-global-writes.sh +0 -66
- package/scripts/check-no-personal-paths.py +0 -50
- package/scripts/check-npm-audit.mjs +0 -110
- package/scripts/check-reference-governance.mjs +0 -83
- package/scripts/check-reply-contract.sh +0 -64
- package/scripts/check-rule-uniqueness.sh +0 -45
- package/scripts/devrites-detect.sh +0 -176
- package/scripts/grade-feature.sh +0 -204
- package/scripts/live-hosts/agent-result.schema.json +0 -231
- package/scripts/live-hosts/claude.sh +0 -87
- package/scripts/live-hosts/codex.sh +0 -85
- package/scripts/live-hosts/common.sh +0 -113
- package/scripts/live-hosts/fake-host.py +0 -257
- package/scripts/live-hosts/host-transport.py +0 -286
- package/scripts/npm-audit-exceptions.json +0 -26
- package/scripts/pin.sh +0 -249
- package/scripts/release-check.sh +0 -75
- package/scripts/run-agent-contract-evals.py +0 -1380
- package/scripts/run-behavioral-evals.sh +0 -196
- package/scripts/run-evals.sh +0 -132
- package/scripts/run-live-behavioral-evals.py +0 -1310
- package/scripts/run-outcome-evals.sh +0 -454
- package/scripts/run-routing-evals.py +0 -342
- package/scripts/run-tests.mjs +0 -232
- package/scripts/scan-pack-security.py +0 -209
- package/scripts/scan-supply-chain-iocs.py +0 -127
- package/scripts/skill-pruning-audit.mjs +0 -121
- package/scripts/skills-inventory.mjs +0 -125
- package/scripts/supply-chain-iocs.json +0 -11
- package/scripts/sync-version.sh +0 -54
- package/scripts/validate-agent-composition.py +0 -57
- package/scripts/validate-command-parity.py +0 -70
- package/scripts/validate-frontmatter.py +0 -218
- package/scripts/validate-skill-anatomy.py +0 -139
- package/scripts/validate-workflow-security.py +0 -184
- package/scripts/validate-workspace-schema.py +0 -800
- package/scripts/validate.sh +0 -354
- package/scripts/workflow_schema.py +0 -69
- /package/engine/testdata/fixtures/basic/devrites-root/{features → work}/auth-tokens/decisions.md +0 -0
- /package/engine/testdata/fixtures/basic/devrites-root/{features → work}/auth-tokens/plan.md +0 -0
- /package/engine/testdata/fixtures/basic/devrites-root/{features → work}/auth-tokens/spec.md +0 -0
- /package/engine/testdata/fixtures/basic/devrites-root/{features → work}/auth-tokens/tasks.md +0 -0
- /package/engine/testdata/fixtures/basic/devrites-root/{features → work}/search-ranking/spec.md +0 -0
package/engine/main.go
CHANGED
|
@@ -1,24 +1,15 @@
|
|
|
1
|
-
// Command devrites-engine runs the DevRites control plane
|
|
2
|
-
//
|
|
3
|
-
// calling a model or the network. The pure-Go binary uses standard library
|
|
4
|
-
// dispatch so it can cross-compile with CGO_ENABLED=0.
|
|
1
|
+
// Command devrites-engine runs the deterministic DevRites control plane without
|
|
2
|
+
// calling a model or the network. Native host agents own semantic judgment.
|
|
5
3
|
package main
|
|
6
4
|
|
|
7
5
|
import (
|
|
8
|
-
"bytes"
|
|
9
6
|
"fmt"
|
|
10
7
|
"io"
|
|
11
8
|
"os"
|
|
12
|
-
"path/filepath"
|
|
13
9
|
|
|
14
|
-
"github.com/devrites/devrites/internal/forge"
|
|
15
10
|
"github.com/devrites/devrites/internal/gate"
|
|
16
|
-
"github.com/devrites/devrites/internal/harness"
|
|
17
11
|
"github.com/devrites/devrites/internal/install"
|
|
18
|
-
"github.com/devrites/devrites/internal/iohooks"
|
|
19
12
|
"github.com/devrites/devrites/internal/lib"
|
|
20
|
-
"github.com/devrites/devrites/internal/profile"
|
|
21
|
-
"github.com/devrites/devrites/internal/reason"
|
|
22
13
|
"github.com/devrites/devrites/internal/state"
|
|
23
14
|
"github.com/devrites/devrites/internal/version"
|
|
24
15
|
)
|
|
@@ -26,116 +17,28 @@ import (
|
|
|
26
17
|
const usage = `devrites: DevRites control-plane engine
|
|
27
18
|
|
|
28
19
|
Usage:
|
|
29
|
-
devrites-engine install [flags] Install DevRites skills
|
|
20
|
+
devrites-engine install [flags] Install DevRites skills, agents, and host configuration
|
|
30
21
|
devrites-engine update [flags] Update an existing DevRites install in place
|
|
31
22
|
devrites-engine uninstall [flags] Remove a DevRites install, preserving runtime state
|
|
32
|
-
devrites-engine
|
|
33
|
-
devrites-engine
|
|
34
|
-
devrites-engine
|
|
35
|
-
devrites-engine
|
|
36
|
-
devrites-engine
|
|
37
|
-
devrites-engine
|
|
38
|
-
devrites-engine
|
|
39
|
-
devrites-engine spec-dedupe "<query>" Search local PRDs/issues/archive for similar specs
|
|
40
|
-
devrites-engine check-acceptance <dir> Grade spec.md's [ACn] criteria against seal.md
|
|
41
|
-
devrites-engine footprint <sub> <slug> Fan-out footprint: log|render|roster the dispatch log
|
|
42
|
-
devrites-engine evidence-fresh [slug] Gate: does the proof post-date every touched file?
|
|
43
|
-
devrites-engine coverage [slug] Render the AC → slice(s) → proven traceability matrix
|
|
44
|
-
devrites-engine doubt-coverage <slug> Check whether the build challenged its recorded decisions
|
|
45
|
-
devrites-engine budget [slug] Lint each workspace file against its context-size ceiling
|
|
46
|
-
devrites-engine preamble [slug] Print the active feature's workspace-state orientation
|
|
47
|
-
devrites-engine progress [slug] Render the active feature's phase/slice/flow footer
|
|
48
|
-
devrites-engine profile get|refresh Cache stable repo facts for grounding skills
|
|
49
|
-
devrites-engine stuck <sub> <slug> Unattended-build loop detector: log|check
|
|
50
|
-
devrites-engine recovery <sub> [...] Track up to three technical recovery attempts across runs
|
|
51
|
-
devrites-engine tick-afk <state.md> Decrement the AFK slice budget in a state.md
|
|
52
|
-
devrites-engine build-readiness [slug] Gate: are plan approval, decision coverage, and implementation readiness build-ready?
|
|
53
|
-
devrites-engine readiness-digest <coverage|engineering> [slug] Render the canonical artifact input digest
|
|
54
|
-
devrites-engine clarify-return <enter|restore> [slug] Preserve/restore a later-phase clarification cursor
|
|
55
|
-
devrites-engine analyze [slug] Check coverage and consistency between the spec and tasks
|
|
56
|
-
devrites-engine mutation-gate [slug] Advisory: detect the mutation runner and scope it
|
|
57
|
-
devrites-engine test-integrity [slug] Gate: no test deleted, skipped, or de-asserted
|
|
58
|
-
devrites-engine review-integrity [slug] Gate: no adversarial review axis is silent (zero findings, no justification)
|
|
59
|
-
devrites-engine dispatch-waive <reason> Record a deterministic pre-dispatch STOP reason
|
|
60
|
-
devrites-engine reconcile <sub> [slug] A1 gate: snapshot|check|restore-check|abort|close the wright's source writes
|
|
61
|
-
devrites-engine resolve <qid> "<ans>" Resolve an open question; keep state.md consistent
|
|
62
|
-
devrites-engine close-out <slug> Archive a shipped feature and clear ACTIVE
|
|
63
|
-
devrites-engine archive-search "<nouns>" Find prior shipped specs that overlap the query
|
|
64
|
-
devrites-engine decisions <sub> [...] Derived decision memory: index|search
|
|
65
|
-
devrites-engine ledger <sub> [...] Capability ledger (living specs/): sync|diff|validate|list|show
|
|
66
|
-
devrites-engine learnings <sub> [...] Cross-feature learning ledger: add|list|top|mine|nudge
|
|
67
|
-
devrites-engine timeline <sub> [...] Local typed trace: log|list|report|purge
|
|
68
|
-
devrites-engine health [run|record|list] Run the code health dashboard or view its history
|
|
69
|
-
devrites-engine config get <key> Read project config (outside_voice defaults auto)
|
|
70
|
-
devrites-engine reviewers list Validate/list configured reviewer aliases
|
|
71
|
-
devrites-engine outside-voice Detect outside-review availability
|
|
72
|
-
devrites-engine docs-stale [slug] Advisory docs-staleness check over changed public surfaces
|
|
73
|
-
devrites-engine secret-scan [slug] Credential scan over staged/touched files; HIGH blocks
|
|
74
|
-
devrites-engine review-fingerprints [slug] Stable IDs for review findings; --write saves JSONL
|
|
75
|
-
devrites-engine reviewer-stats <sub> Reviewer dispatch outcomes: record <agent> <n> [slug] | report [--json]
|
|
76
|
-
devrites-engine conventions <sub> [...] Project convention ledger: band|read|orient|promote|contradict
|
|
77
|
-
devrites-engine lanes plan [slug] Advisory safe-parallelism/lane plan for slices
|
|
78
|
-
devrites-engine forge <sub> [...] Isolated candidate worktrees: plan|record|extract|merge|cleanup|reap
|
|
79
|
-
devrites-engine extensions <sub> Project extensions (.devrites/extensions/): list|validate|sync
|
|
80
|
-
devrites-engine overrides <sub> Reviewer-override linter (.devrites/overrides/): list|validate
|
|
81
|
-
devrites-engine context sync [file ...] Sync managed DevRites block into context files
|
|
82
|
-
devrites-engine context show [--json] Report root, active workspace, and host command forms
|
|
83
|
-
devrites-engine runbook <sub> [...] Local runbooks: list|validate|run|resume
|
|
84
|
-
devrites-engine doctor Report the binary / pack / state-schema version triangle
|
|
85
|
-
devrites-engine migrate Normalize .devrites workspaces to the current schema
|
|
86
|
-
devrites-engine validate-pack [dir] Check shipped hook wiring, frontmatter contracts, and command-map links
|
|
87
|
-
devrites-engine harness-matrix [--check F] Render (or drift-check) the harness adapter-compliance matrix
|
|
23
|
+
devrites-engine check candidate <slug> Validate and hash the closed project candidate
|
|
24
|
+
devrites-engine check readiness <slug> Check required files and the stable Build-input binding
|
|
25
|
+
devrites-engine check readiness --emit-binding <slug> Emit the stable Build-input binding for Vet
|
|
26
|
+
devrites-engine check seal <slug> Recheck the Build-input binding, final files, and evidence freshness
|
|
27
|
+
devrites-engine state resolve <qid> "<ans>" Resolve an open question and update state atomically
|
|
28
|
+
devrites-engine state close <slug> Archive a shipped feature and clear ACTIVE
|
|
29
|
+
devrites-engine secret-scan [--staged] [--stdin] [slug] Scan exact staged blobs, stdin, or touched files; HIGH blocks
|
|
88
30
|
devrites-engine version Print the engine binary's version
|
|
89
|
-
devrites-engine hook <name> --harness=H Run hook <name> for harness H (claude|codex)
|
|
90
|
-
|
|
91
|
-
Hooks:
|
|
92
|
-
hook allow Auto-approve the read-only devrites orientation/gate subcommands
|
|
93
|
-
hook orient Emit SessionStart orientation for the active feature
|
|
94
|
-
hook stop-gate Refuse to end a turn at a provably inconsistent rest point
|
|
95
|
-
hook reviewer-readonly Deny every mutation/dispatch surface for read-only DevRites agents
|
|
96
|
-
hook agent-dispatch Bind Codex spawn, start, wait, result, and reconcile receipts
|
|
97
|
-
hook subagent-orient Inject DevRites discipline and bind a spawned specialist role
|
|
98
|
-
hook cursor Re-inject the active feature's cursor (UserPromptSubmit)
|
|
99
|
-
hook statusline One-line workspace HUD (settings.json statusLine)
|
|
100
|
-
hook redwatch Fail-on-red sentinel: set/clear .red after a test/build command
|
|
101
|
-
hook a1-guard Block the orchestrator editing source mid-build
|
|
102
|
-
hook git-guard Require exact one-shot authority for destructive Git
|
|
103
|
-
hook wright-scope Fence the slice-wright to an exact orchestrator allowlist
|
|
104
|
-
hook source-cache-pre Serve a cached page reading on a 304 revalidation (WebFetch)
|
|
105
|
-
hook source-cache-post Store a WebFetch result keyed on its origin validators
|
|
106
|
-
hook refresh-indexes Refresh the code-intelligence indexes (detached) on Stop
|
|
107
|
-
hook event <name> Append a hook/session event to the active workspace trace
|
|
108
|
-
hook auq Record an AskUserQuestion exchange to the session trace (capture only)
|
|
109
|
-
hook handoff-snapshot Append a compact active-workspace handoff before compaction
|
|
110
|
-
|
|
111
31
|
Exit codes:
|
|
112
32
|
0 ok / gate passed
|
|
113
33
|
2 usage error
|
|
114
|
-
3 blocked: a gate
|
|
115
|
-
|
|
34
|
+
3 blocked: a deterministic gate paused; resolve the reported gap and retry
|
|
35
|
+
(HITL, never a crash)
|
|
116
36
|
|
|
117
37
|
Environment:
|
|
118
38
|
DEVRITES_ROOT Path to the project root or .devrites directory. Defaults to
|
|
119
39
|
the nearest .devrites found walking up from the working directory.
|
|
120
40
|
DEVRITES_WORKSPACE Explicit feature workspace path for CI/agents; overrides
|
|
121
41
|
.devrites/ACTIVE when a command defaults to the active feature.
|
|
122
|
-
DEVRITES_AGENT_RUN=1 declares a DevRites leaf run when hook payloads omit identity.
|
|
123
|
-
DEVRITES_ACTIVE_AGENT=devrites-<role> supplies that exact leaf identity.
|
|
124
|
-
DEVRITES_WRIGHT_ALLOWLIST_FILE points to the wright's exact project-relative
|
|
125
|
-
path manifest; defaults to the active workspace's .wright-allowlist.
|
|
126
|
-
DEVRITES_FORGE_RUN_ID, DEVRITES_FORGE_CANDIDATE, DEVRITES_FORGE_WORKER_ID,
|
|
127
|
-
DEVRITES_FORGE_WORKER_PID, and DEVRITES_FORGE_PROCESS_START bind a candidate
|
|
128
|
-
wright to its root-owned manifest. All five are required.
|
|
129
|
-
|
|
130
|
-
Hook control plane:
|
|
131
|
-
DEVRITES_HOOK_PROFILE minimal | standard (default) | strict. minimal runs
|
|
132
|
-
orientation/approval hooks only; standard adds the
|
|
133
|
-
gates, guards and caches; strict also enables
|
|
134
|
-
every legacy OBSERVE-default guard to enforce at once.
|
|
135
|
-
Declared DevRites agents are always enforced.
|
|
136
|
-
DEVRITES_DISABLED_HOOKS Comma-separated hook ids to force off, e.g.
|
|
137
|
-
"stop-gate,redwatch". A disabled hook is a clean
|
|
138
|
-
fail-open no-op.
|
|
139
42
|
`
|
|
140
43
|
|
|
141
44
|
// Exit codes shared across commands.
|
|
@@ -167,138 +70,12 @@ func run(args []string, stdin io.Reader, stdout, stderr io.Writer) int {
|
|
|
167
70
|
return install.Run(args[1:], stdout, stderr, install.ModeUpdate)
|
|
168
71
|
case "uninstall":
|
|
169
72
|
return install.Run(args[1:], stdout, stderr, install.ModeUninstall)
|
|
170
|
-
case "
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
return cmdSnapshot(args[1:], stdout, stderr)
|
|
175
|
-
case "first-task":
|
|
176
|
-
return lib.FirstTask(root, args[1:], stdout, stderr)
|
|
177
|
-
case "readiness":
|
|
178
|
-
rest, j := extractFlag(args[1:], "--json")
|
|
179
|
-
return jsonWrapReason("readiness", j, stdout, stderr, func(code int) reason.ID {
|
|
180
|
-
if code == exitOK || code == exitBlocked {
|
|
181
|
-
return gate.ResultReasonID(gate.Readiness, code == exitBlocked)
|
|
182
|
-
}
|
|
183
|
-
return ""
|
|
184
|
-
}, func(o, e io.Writer) int { return cmdGate(gate.Readiness, rest, o, e) })
|
|
185
|
-
case "seal":
|
|
186
|
-
rest, j := extractFlag(args[1:], "--json")
|
|
187
|
-
return jsonWrapReason("seal", j, stdout, stderr, func(code int) reason.ID {
|
|
188
|
-
if code == exitOK || code == exitBlocked {
|
|
189
|
-
return gate.ResultReasonID(gate.Seal, code == exitBlocked)
|
|
190
|
-
}
|
|
191
|
-
return ""
|
|
192
|
-
}, func(o, e io.Writer) int { return cmdGate(gate.Seal, rest, o, e) })
|
|
193
|
-
case "spec-validate":
|
|
194
|
-
rest, j := extractFlag(args[1:], "--json")
|
|
195
|
-
return jsonWrap("spec-validate", j, stdout, stderr, func(o, e io.Writer) int { return cmdSpecValidate(rest, o, e) })
|
|
196
|
-
case "spec-skeleton":
|
|
197
|
-
return cmdSpecSkeleton(args[1:], stdout, stderr)
|
|
198
|
-
case "spec-dedupe":
|
|
199
|
-
return lib.SpecDedupe(root, args[1:], stdout, stderr)
|
|
200
|
-
case "check-acceptance":
|
|
201
|
-
return cmdCheckAcceptance(args[1:], stdout, stderr)
|
|
202
|
-
case "footprint":
|
|
203
|
-
return cmdFootprint(root, args[1:], stdout, stderr)
|
|
204
|
-
case "evidence-fresh":
|
|
205
|
-
rest, j := extractFlag(args[1:], "--json")
|
|
206
|
-
return jsonWrap("evidence-fresh", j, stdout, stderr, func(o, e io.Writer) int { return cmdEvidenceFresh(root, rest, o, e) })
|
|
207
|
-
case "coverage":
|
|
208
|
-
rest, j := extractFlag(args[1:], "--json")
|
|
209
|
-
return jsonWrap("coverage", j, stdout, stderr, func(o, e io.Writer) int { return cmdCoverage(root, rest, o, e) })
|
|
210
|
-
case "doubt-coverage":
|
|
211
|
-
return cmdDoubtCoverage(root, args[1:], stdout, stderr)
|
|
212
|
-
case "budget":
|
|
213
|
-
return lib.Budget(root, args[1:], stdout, stderr)
|
|
214
|
-
case "preamble":
|
|
215
|
-
rest, j := extractFlag(args[1:], "--json")
|
|
216
|
-
return jsonWrap("preamble", j, stdout, stderr, func(o, e io.Writer) int { return cmdPreamble(root, rest, o, e) })
|
|
217
|
-
case "progress":
|
|
218
|
-
return cmdProgress(root, args[1:], stdout, stderr)
|
|
219
|
-
case "profile":
|
|
220
|
-
return profile.Run(args[1:], stdout, stderr)
|
|
221
|
-
case "stuck":
|
|
222
|
-
return cmdStuck(root, args[1:], stdout, stderr)
|
|
223
|
-
case "recovery":
|
|
224
|
-
return lib.RecoveryAttempts(root, args[1:], stdout, stderr)
|
|
225
|
-
case "tick-afk":
|
|
226
|
-
return lib.TickAfk(args[1:], stdout, stderr)
|
|
227
|
-
case "build-readiness":
|
|
228
|
-
return lib.BuildReadiness(root, args[1:], stdout, stderr)
|
|
229
|
-
case "readiness-digest":
|
|
230
|
-
return lib.ReadinessDigest(root, args[1:], stdout, stderr)
|
|
231
|
-
case "clarify-return":
|
|
232
|
-
return lib.ClarifyReturn(root, args[1:], stdout, stderr)
|
|
233
|
-
case "analyze":
|
|
234
|
-
rest, j := extractFlag(args[1:], "--json")
|
|
235
|
-
return jsonWrap("analyze", j, stdout, stderr, func(o, e io.Writer) int { return lib.Analyze(root, rest, o, e) })
|
|
236
|
-
case "mutation-gate":
|
|
237
|
-
return lib.MutationGate(root, args[1:], stdout, stderr)
|
|
238
|
-
case "test-integrity":
|
|
239
|
-
return lib.TestIntegrity(root, args[1:], stdout, stderr)
|
|
240
|
-
case "review-integrity":
|
|
241
|
-
return lib.ReviewIntegrity(root, args[1:], stdout, stderr)
|
|
242
|
-
case "dispatch-waive":
|
|
243
|
-
return lib.DispatchWaive(args[1:], stdout, stderr)
|
|
244
|
-
case "reconcile":
|
|
245
|
-
return lib.Reconcile(root, args[1:], stdout, stderr)
|
|
246
|
-
case "resolve":
|
|
247
|
-
return lib.Resolve(root, args[1:], stdout, stderr)
|
|
248
|
-
case "close-out":
|
|
249
|
-
return lib.CloseOut(root, args[1:], stdout, stderr)
|
|
250
|
-
case "archive-search":
|
|
251
|
-
return lib.ArchiveSearch(root, args[1:], stdout, stderr)
|
|
252
|
-
case "decisions":
|
|
253
|
-
return lib.Decisions(root, args[1:], stdout, stderr)
|
|
254
|
-
case "ledger":
|
|
255
|
-
rest, j := extractFlag(args[1:], "--json")
|
|
256
|
-
return jsonWrap("ledger", j, stdout, stderr, func(o, e io.Writer) int { return lib.Ledger(root, rest, o, e) })
|
|
257
|
-
case "learnings":
|
|
258
|
-
return lib.Learnings(root, args[1:], stdout, stderr)
|
|
259
|
-
case "timeline":
|
|
260
|
-
return lib.Timeline(root, args[1:], stdout, stderr)
|
|
261
|
-
case "health":
|
|
262
|
-
return lib.Health(root, args[1:], stdout, stderr)
|
|
263
|
-
case "config":
|
|
264
|
-
return lib.Config(root, args[1:], stdout, stderr)
|
|
265
|
-
case "reviewers":
|
|
266
|
-
return lib.Reviewers(root, args[1:], stdout, stderr)
|
|
267
|
-
case "outside-voice":
|
|
268
|
-
return lib.OutsideVoice(root, args[1:], stdout, stderr)
|
|
269
|
-
case "docs-stale":
|
|
270
|
-
return lib.DocsStale(root, args[1:], stdout, stderr)
|
|
73
|
+
case "check":
|
|
74
|
+
return cmdCheck(args[1:], stdout, stderr)
|
|
75
|
+
case "state":
|
|
76
|
+
return cmdState(root, args[1:], stdout, stderr)
|
|
271
77
|
case "secret-scan":
|
|
272
|
-
return lib.SecretScan(root, args[1:], stdout, stderr)
|
|
273
|
-
case "review-fingerprints":
|
|
274
|
-
return lib.ReviewFingerprints(root, args[1:], stdout, stderr)
|
|
275
|
-
case "reviewer-stats":
|
|
276
|
-
return lib.ReviewerStats(root, args[1:], stdout, stderr)
|
|
277
|
-
case "conventions":
|
|
278
|
-
return lib.Conventions(args[1:], stdout, stderr)
|
|
279
|
-
case "lanes":
|
|
280
|
-
return lib.Lanes(root, args[1:], stdout, stderr)
|
|
281
|
-
case "forge":
|
|
282
|
-
return forge.Run(filepath.Dir(root), args[1:], stdout, stderr)
|
|
283
|
-
case "extensions":
|
|
284
|
-
return lib.Extensions(root, args[1:], stdout, stderr)
|
|
285
|
-
case "overrides":
|
|
286
|
-
return lib.Overrides(root, args[1:], stdout, stderr)
|
|
287
|
-
case "context":
|
|
288
|
-
return lib.Context(root, args[1:], stdout, stderr)
|
|
289
|
-
case "runbook":
|
|
290
|
-
return lib.Runbook(root, args[1:], stdout, stderr)
|
|
291
|
-
case "doctor":
|
|
292
|
-
rest, j := extractFlag(args[1:], "--json")
|
|
293
|
-
return jsonWrap("doctor", j, stdout, stderr, func(o, e io.Writer) int { return cmdDoctor(rest, o, e) })
|
|
294
|
-
case "migrate":
|
|
295
|
-
return cmdMigrate(args[1:], stdout, stderr)
|
|
296
|
-
case "validate-pack":
|
|
297
|
-
return cmdValidatePack(args[1:], stdout, stderr)
|
|
298
|
-
case "harness-matrix":
|
|
299
|
-
return cmdHarnessMatrix(args[1:], stdout, stderr)
|
|
300
|
-
case "hook":
|
|
301
|
-
return cmdHook(args[1:], stdin, stdout, stderr)
|
|
78
|
+
return lib.SecretScan(root, args[1:], stdin, stdout, stderr)
|
|
302
79
|
case "version", "--version":
|
|
303
80
|
fmt.Fprintln(stdout, version.Version)
|
|
304
81
|
return exitOK
|
|
@@ -311,32 +88,26 @@ func run(args []string, stdin io.Reader, stdout, stderr io.Writer) int {
|
|
|
311
88
|
}
|
|
312
89
|
}
|
|
313
90
|
|
|
314
|
-
func
|
|
315
|
-
if len(args)
|
|
316
|
-
fmt.Fprintln(stderr, "usage: devrites-engine
|
|
317
|
-
return exitUsage
|
|
318
|
-
}
|
|
319
|
-
root, err := state.ResolveRoot(os.Getenv("DEVRITES_ROOT"))
|
|
320
|
-
if err != nil {
|
|
321
|
-
fmt.Fprintf(stderr, "devrites: %v\n", err)
|
|
91
|
+
func cmdCheck(args []string, stdout, stderr io.Writer) int {
|
|
92
|
+
if len(args) == 0 {
|
|
93
|
+
fmt.Fprintln(stderr, "usage: devrites-engine check <candidate|readiness|seal> ...")
|
|
322
94
|
return exitUsage
|
|
323
95
|
}
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
96
|
+
sub, rest := args[0], args[1:]
|
|
97
|
+
switch sub {
|
|
98
|
+
case "candidate":
|
|
99
|
+
return cmdCandidate(rest, stdout, stderr)
|
|
100
|
+
case "readiness", "seal":
|
|
101
|
+
return cmdGate(gate.Kind(sub), rest, stdout, stderr)
|
|
102
|
+
default:
|
|
103
|
+
fmt.Fprintf(stderr, "devrites: unknown check %q\n", sub)
|
|
328
104
|
return exitUsage
|
|
329
105
|
}
|
|
330
|
-
fmt.Fprint(stdout, report.Render())
|
|
331
|
-
return exitOK
|
|
332
106
|
}
|
|
333
107
|
|
|
334
|
-
|
|
335
|
-
// (exit 0); an incomplete one prints a structured, actionable "missing X" and
|
|
336
|
-
// exits with the HITL pause code: never a crash.
|
|
337
|
-
func cmdGate(kind gate.Kind, args []string, stdout, stderr io.Writer) int {
|
|
108
|
+
func cmdCandidate(args []string, stdout, stderr io.Writer) int {
|
|
338
109
|
if len(args) != 1 {
|
|
339
|
-
fmt.
|
|
110
|
+
fmt.Fprintln(stderr, "usage: devrites-engine check candidate <slug>")
|
|
340
111
|
return exitUsage
|
|
341
112
|
}
|
|
342
113
|
root, err := state.ResolveRoot(os.Getenv("DEVRITES_ROOT"))
|
|
@@ -344,273 +115,73 @@ func cmdGate(kind gate.Kind, args []string, stdout, stderr io.Writer) int {
|
|
|
344
115
|
fmt.Fprintf(stderr, "devrites: %v\n", err)
|
|
345
116
|
return exitUsage
|
|
346
117
|
}
|
|
347
|
-
|
|
348
|
-
result, err := gate.Check(kind, root, args[0])
|
|
118
|
+
digest, files, err := lib.CandidateIdentity(root, args[0])
|
|
349
119
|
if err != nil {
|
|
350
|
-
fmt.Fprintf(stderr, "
|
|
351
|
-
return exitUsage
|
|
352
|
-
}
|
|
353
|
-
evidence := append([]string(nil), result.MissingFiles...)
|
|
354
|
-
if result.LegacyLayout {
|
|
355
|
-
evidence = evidence[:0]
|
|
356
|
-
for _, section := range result.Missing {
|
|
357
|
-
evidence = append(evidence, string(section)+".md")
|
|
358
|
-
}
|
|
359
|
-
}
|
|
360
|
-
if ev, eventErr := lib.NewLifecycleGateEvent(
|
|
361
|
-
root, result.Slug, string(result.Kind), result.Phase,
|
|
362
|
-
result.Blocked, result.ReasonID, evidence,
|
|
363
|
-
); eventErr == nil {
|
|
364
|
-
if eventErr = lib.AppendEventV1(root, ev); eventErr != nil {
|
|
365
|
-
debugf(stderr, "lifecycle-gate event: %v", eventErr)
|
|
366
|
-
}
|
|
367
|
-
} else {
|
|
368
|
-
debugf(stderr, "lifecycle-gate event: %v", eventErr)
|
|
369
|
-
}
|
|
370
|
-
fmt.Fprint(stdout, result.Render())
|
|
371
|
-
if result.Blocked {
|
|
120
|
+
fmt.Fprintf(stderr, "candidate: BLOCKED: %v\n", err)
|
|
372
121
|
return exitBlocked
|
|
373
122
|
}
|
|
123
|
+
fmt.Fprintf(stdout, "candidate-sha256: %s\ncandidate-files: %d\n", digest, files)
|
|
374
124
|
return exitOK
|
|
375
125
|
}
|
|
376
126
|
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
func cmdSpecValidate(args []string, stdout, stderr io.Writer) int {
|
|
382
|
-
arg, against := "", ""
|
|
383
|
-
for i := 0; i < len(args); i++ {
|
|
384
|
-
a := args[i]
|
|
385
|
-
if a == "--against" && i+1 < len(args) {
|
|
386
|
-
against = args[i+1]
|
|
387
|
-
i++
|
|
388
|
-
continue
|
|
389
|
-
}
|
|
390
|
-
if v, ok := cutFlag(a, "--against"); ok {
|
|
391
|
-
against = v
|
|
392
|
-
continue
|
|
393
|
-
}
|
|
394
|
-
if arg == "" {
|
|
395
|
-
arg = a
|
|
396
|
-
}
|
|
127
|
+
func cmdState(root string, args []string, stdout, stderr io.Writer) int {
|
|
128
|
+
if len(args) == 0 {
|
|
129
|
+
fmt.Fprintln(stderr, "usage: devrites-engine state <resolve|close> ...")
|
|
130
|
+
return exitUsage
|
|
397
131
|
}
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
132
|
+
switch args[0] {
|
|
133
|
+
case "resolve":
|
|
134
|
+
return lib.Resolve(root, args[1:], stdout, stderr)
|
|
135
|
+
case "close":
|
|
136
|
+
return lib.CloseOut(root, args[1:], stdout, stderr)
|
|
137
|
+
default:
|
|
138
|
+
fmt.Fprintf(stderr, "devrites: unknown state command %q\n", args[0])
|
|
401
139
|
return exitUsage
|
|
402
140
|
}
|
|
403
|
-
return lib.SpecValidate(arg, against, cwd, stdout, stderr)
|
|
404
141
|
}
|
|
405
142
|
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
143
|
+
// cmdGate runs readiness completeness or the final seal aggregate. Missing or
|
|
144
|
+
// failed requirements return the HITL pause code; invalid gate state returns
|
|
145
|
+
// the usage/internal code.
|
|
146
|
+
func cmdGate(kind gate.Kind, args []string, stdout, stderr io.Writer) int {
|
|
147
|
+
emitBinding := kind == gate.Readiness && len(args) == 2 && args[0] == "--emit-binding"
|
|
148
|
+
if !emitBinding && len(args) != 1 {
|
|
149
|
+
fmt.Fprintf(stderr, "usage: devrites-engine check %s <slug>\n", kind)
|
|
150
|
+
return exitUsage
|
|
410
151
|
}
|
|
411
|
-
|
|
152
|
+
root, err := state.ResolveRoot(os.Getenv("DEVRITES_ROOT"))
|
|
412
153
|
if err != nil {
|
|
413
154
|
fmt.Fprintf(stderr, "devrites: %v\n", err)
|
|
414
155
|
return exitUsage
|
|
415
156
|
}
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
if len(args) > 0 {
|
|
424
|
-
arg = args[0]
|
|
425
|
-
}
|
|
426
|
-
return lib.CheckAcceptance(arg, stdout, stderr)
|
|
427
|
-
}
|
|
428
|
-
|
|
429
|
-
// cmdFootprint renders, logs, or lists the fan-out dispatch footprint for a
|
|
430
|
-
// feature. Workspace state lives under <root>/work/<slug>, with features as an
|
|
431
|
-
// alias for older workspaces.
|
|
432
|
-
func cmdFootprint(root string, args []string, stdout, stderr io.Writer) int {
|
|
433
|
-
return lib.Footprint(root, args, stdout, stderr)
|
|
434
|
-
}
|
|
435
|
-
|
|
436
|
-
// cmdEvidenceFresh runs the evidence-freshness gate (0 fresh · 3 stale · 5 no
|
|
437
|
-
// workspace/evidence).
|
|
438
|
-
func cmdEvidenceFresh(root string, args []string, stdout, stderr io.Writer) int {
|
|
439
|
-
return lib.EvidenceFresh(root, args, stdout, stderr)
|
|
440
|
-
}
|
|
441
|
-
|
|
442
|
-
// cmdCoverage renders the AC → slice → proven traceability matrix (0 rendered ·
|
|
443
|
-
// 2 no workspace/spec).
|
|
444
|
-
func cmdCoverage(root string, args []string, stdout, stderr io.Writer) int {
|
|
445
|
-
return lib.Coverage(root, args, stdout, stderr)
|
|
446
|
-
}
|
|
447
|
-
|
|
448
|
-
// cmdDoubtCoverage runs the doubt-coverage assessment (0 covered/n-a · 1 no doubt
|
|
449
|
-
// ran · 2 usage · 3 doubt: MISSING).
|
|
450
|
-
func cmdDoubtCoverage(root string, args []string, stdout, stderr io.Writer) int {
|
|
451
|
-
return lib.DoubtCoverage(root, args, stdout, stderr)
|
|
452
|
-
}
|
|
453
|
-
|
|
454
|
-
// cmdPreamble prints the active feature's workspace-state orientation (always
|
|
455
|
-
// exit 0).
|
|
456
|
-
func cmdPreamble(root string, args []string, stdout, stderr io.Writer) int {
|
|
457
|
-
return lib.Preamble(root, args, stdout, stderr)
|
|
458
|
-
}
|
|
459
|
-
|
|
460
|
-
// cmdProgress renders the active feature's phase/slice/flow footer (always exit 0,
|
|
461
|
-
// silent when no workspace).
|
|
462
|
-
func cmdProgress(root string, args []string, stdout, stderr io.Writer) int {
|
|
463
|
-
return lib.Progress(root, args, stdout, stderr)
|
|
464
|
-
}
|
|
465
|
-
|
|
466
|
-
// cmdStuck is the unattended-build loop detector: `stuck log|check <slug>` (0 not
|
|
467
|
-
// stuck · 2 bad args · 3 STUCK).
|
|
468
|
-
func cmdStuck(root string, args []string, stdout, stderr io.Writer) int {
|
|
469
|
-
return lib.Stuck(root, args, stdout, stderr)
|
|
470
|
-
}
|
|
471
|
-
|
|
472
|
-
func cmdHook(args []string, stdin io.Reader, stdout, stderr io.Writer) int {
|
|
473
|
-
if len(args) == 0 {
|
|
474
|
-
fmt.Fprintln(stderr, "usage: devrites-engine hook <name> --harness=claude|codex")
|
|
475
|
-
return exitUsage
|
|
476
|
-
}
|
|
477
|
-
name := args[0]
|
|
478
|
-
// Control plane: a hook stripped by the active DEVRITES_HOOK_PROFILE or named
|
|
479
|
-
// in DEVRITES_DISABLED_HOOKS is a clean fail-open no-op, indistinguishable from
|
|
480
|
-
// an absent binary. Consulted before any work, including refresh-indexes.
|
|
481
|
-
if !hookActive(name) {
|
|
482
|
-
h, _ := harness.Parse(harnessFlag(args[1:]))
|
|
483
|
-
recordHookGuard(h, name, reason.HookDisabled, lib.GuardBypassed, lib.OutcomeBypassed)
|
|
157
|
+
if emitBinding {
|
|
158
|
+
binding, err := gate.ReadinessBinding(root, args[1])
|
|
159
|
+
if err != nil {
|
|
160
|
+
fmt.Fprintf(stderr, "readiness-binding: BLOCKED: %v\n", err)
|
|
161
|
+
return exitBlocked
|
|
162
|
+
}
|
|
163
|
+
fmt.Fprintln(stdout, binding)
|
|
484
164
|
return exitOK
|
|
485
165
|
}
|
|
486
|
-
|
|
487
|
-
// dispatch them before the --harness requirement.
|
|
488
|
-
if name == "refresh-indexes" {
|
|
489
|
-
return iohooks.RefreshIndexes(args[1:], stdin, stdout, stderr)
|
|
490
|
-
}
|
|
491
|
-
if name == "event" {
|
|
492
|
-
return hookEvent(args[1:], stdin, stdout, stderr)
|
|
493
|
-
}
|
|
494
|
-
if name == "auq" {
|
|
495
|
-
return hookAUQ(stdin, stdout, stderr)
|
|
496
|
-
}
|
|
497
|
-
if name == "handoff-snapshot" {
|
|
498
|
-
return hookHandoffSnapshot(stdin, stdout, stderr)
|
|
499
|
-
}
|
|
500
|
-
h, err := harness.Parse(harnessFlag(args[1:]))
|
|
166
|
+
result, err := gate.Check(kind, root, args[0])
|
|
501
167
|
if err != nil {
|
|
502
168
|
fmt.Fprintf(stderr, "devrites: %v\n", err)
|
|
503
169
|
return exitUsage
|
|
504
170
|
}
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
return
|
|
508
|
-
case "orient":
|
|
509
|
-
return hookOrient(h, stdin, stdout, stderr)
|
|
510
|
-
case "stop-gate":
|
|
511
|
-
return hookStopGate(h, stdin, stdout, stderr)
|
|
512
|
-
case "reviewer-readonly":
|
|
513
|
-
return hookReviewerReadonly(h, stdin, stdout, stderr)
|
|
514
|
-
case "agent-dispatch":
|
|
515
|
-
return hookAgentDispatch(h, stdin, stdout, stderr)
|
|
516
|
-
case "subagent-orient":
|
|
517
|
-
return hookSubagentOrient(h, stdin, stdout, stderr)
|
|
518
|
-
case "cursor":
|
|
519
|
-
return hookCursor(stdin, stdout, stderr)
|
|
520
|
-
case "statusline":
|
|
521
|
-
return hookStatusline(stdin, stdout, stderr)
|
|
522
|
-
case "redwatch":
|
|
523
|
-
return hookRedwatch(h, stdin, stdout, stderr)
|
|
524
|
-
case "a1-guard":
|
|
525
|
-
return hookA1Guard(h, stdin, stdout, stderr)
|
|
526
|
-
case "git-guard":
|
|
527
|
-
return hookGitGuard(h, stdin, stdout, stderr)
|
|
528
|
-
case "wright-scope":
|
|
529
|
-
return hookWrightScope(h, stdin, stdout, stderr)
|
|
530
|
-
case "source-cache-pre":
|
|
531
|
-
return iohooks.SourceCachePre(stdin, stdout, stderr)
|
|
532
|
-
case "source-cache-post":
|
|
533
|
-
var warning bytes.Buffer
|
|
534
|
-
code := iohooks.SourceCachePost(h, stdin, io.MultiWriter(stdout, &warning), stderr)
|
|
535
|
-
if warning.Len() > 0 {
|
|
536
|
-
recordHookGuard(h, "source-cache-post", reason.HookIngestWarning, lib.GuardObserved, lib.OutcomeWarning)
|
|
537
|
-
}
|
|
538
|
-
return code
|
|
539
|
-
default:
|
|
540
|
-
fmt.Fprintf(stderr, "devrites: unknown hook %q\n", name)
|
|
541
|
-
return exitUsage
|
|
171
|
+
if result.Blocked {
|
|
172
|
+
fmt.Fprint(stdout, result.Render())
|
|
173
|
+
return exitBlocked
|
|
542
174
|
}
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
func harnessFlag(args []string) string {
|
|
548
|
-
const pfx = "--harness"
|
|
549
|
-
for i := 0; i < len(args); i++ {
|
|
550
|
-
a := args[i]
|
|
551
|
-
if a == pfx && i+1 < len(args) {
|
|
552
|
-
return args[i+1]
|
|
175
|
+
if kind == gate.Seal {
|
|
176
|
+
code := lib.EvidenceFresh(root, []string{args[0]}, stdout, stderr)
|
|
177
|
+
if code == exitUsage {
|
|
178
|
+
return exitUsage
|
|
553
179
|
}
|
|
554
|
-
if
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
}
|
|
558
|
-
return ""
|
|
559
|
-
}
|
|
560
|
-
|
|
561
|
-
func cutFlag(arg, name string) (string, bool) {
|
|
562
|
-
if len(arg) > len(name)+1 && arg[:len(name)] == name && arg[len(name)] == '=' {
|
|
563
|
-
return arg[len(name)+1:], true
|
|
564
|
-
}
|
|
565
|
-
return "", false
|
|
566
|
-
}
|
|
567
|
-
|
|
568
|
-
// extractFlag removes a bare boolean flag (e.g. --json) from args, returning the
|
|
569
|
-
// remaining args and whether the flag was present.
|
|
570
|
-
func extractFlag(args []string, flag string) ([]string, bool) {
|
|
571
|
-
out := make([]string, 0, len(args))
|
|
572
|
-
found := false
|
|
573
|
-
for _, a := range args {
|
|
574
|
-
if a == flag {
|
|
575
|
-
found = true
|
|
576
|
-
continue
|
|
180
|
+
if code != exitOK {
|
|
181
|
+
fmt.Fprintf(stdout, "reason: %s\n", gate.ResultReasonID(kind, true))
|
|
182
|
+
return exitBlocked
|
|
577
183
|
}
|
|
578
|
-
out = append(out, a)
|
|
579
|
-
}
|
|
580
|
-
return out, found
|
|
581
|
-
}
|
|
582
|
-
|
|
583
|
-
// jsonWrap runs a command thunk, wrapping its captured output in the machine-
|
|
584
|
-
// readable envelope when jsonMode is set and passing the real writers through
|
|
585
|
-
// otherwise. It is applied only to the AFK-parsed read commands (see the
|
|
586
|
-
// --json set in run()); other commands never accept --json.
|
|
587
|
-
func jsonWrap(command string, jsonMode bool, stdout, stderr io.Writer, thunk func(o, e io.Writer) int) int {
|
|
588
|
-
return jsonWrapReason(command, jsonMode, stdout, stderr, nil, thunk)
|
|
589
|
-
}
|
|
590
|
-
|
|
591
|
-
func jsonWrapReason(command string, jsonMode bool, stdout, stderr io.Writer, reasonFor func(int) reason.ID, thunk func(o, e io.Writer) int) int {
|
|
592
|
-
if !jsonMode {
|
|
593
|
-
return thunk(stdout, stderr)
|
|
594
|
-
}
|
|
595
|
-
var out, errb bytes.Buffer
|
|
596
|
-
code := thunk(&out, &errb)
|
|
597
|
-
env := lib.NewEnvelope(command, code, out.String(), errb.String())
|
|
598
|
-
if reasonFor != nil {
|
|
599
|
-
env = env.WithReason(reasonFor(code))
|
|
600
|
-
}
|
|
601
|
-
lib.WriteEnvelope(stdout, env)
|
|
602
|
-
return code
|
|
603
|
-
}
|
|
604
|
-
|
|
605
|
-
func recordRootSelection(root, command string, stderr io.Writer) {
|
|
606
|
-
if root == "" {
|
|
607
|
-
return
|
|
608
|
-
}
|
|
609
|
-
ev, err := lib.NewRootSelectionEvent(root, command)
|
|
610
|
-
if err == nil {
|
|
611
|
-
err = lib.AppendEventV1(root, ev)
|
|
612
|
-
}
|
|
613
|
-
if err != nil {
|
|
614
|
-
debugf(stderr, "root-selection event: %v", err)
|
|
615
184
|
}
|
|
185
|
+
fmt.Fprint(stdout, result.Render())
|
|
186
|
+
return exitOK
|
|
616
187
|
}
|