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
|
@@ -1,210 +0,0 @@
|
|
|
1
|
-
# Forge: isolated candidate builds
|
|
2
|
-
|
|
3
|
-
Forge is the rare `$rite-build` branch for a vetted architecture fork. Two or
|
|
4
|
-
three wrights implement the same slice in separate, manifest-owned worktrees; a
|
|
5
|
-
read-only judge selects one; only that candidate lands.
|
|
6
|
-
|
|
7
|
-
The engine manifest (`devrites-forge/v1`) is the sole authority for run,
|
|
8
|
-
candidate, branch, worktree, worker, merge, verification, and cleanup identity.
|
|
9
|
-
`forge-report.md`, names, paths, and prompts are records or inputs, never
|
|
10
|
-
ownership.
|
|
11
|
-
|
|
12
|
-
## Entry contract
|
|
13
|
-
|
|
14
|
-
`$rite-vet` may set `Forge: yes` only when the slice has all three:
|
|
15
|
-
|
|
16
|
-
```markdown
|
|
17
|
-
Forge: yes — <why building the wrong architecture costs more than 2–3 attempts>
|
|
18
|
-
Forge strategies: A=<complete approach> | B=<complete approach> [| C=<complete approach>]
|
|
19
|
-
Forge scorecard: acceptance=<AC-### list>; test-plan=<exact test-plan.md rows/commands>
|
|
20
|
-
```
|
|
21
|
-
|
|
22
|
-
Strategies are distinct seams, data shapes, reuse choices, or algorithms, not
|
|
23
|
-
wording variants. The scorecard covers every slice AC and every required test.
|
|
24
|
-
Otherwise set `Forge: no`, both Forge detail fields to `none`, and dispatch one
|
|
25
|
-
wright.
|
|
26
|
-
|
|
27
|
-
Before `forge plan`, also require a Git checkout and a real host adapter that can
|
|
28
|
-
declare `manifest-env-v1` and:
|
|
29
|
-
|
|
30
|
-
- start each candidate in its exact worktree;
|
|
31
|
-
- expose its stable worker ID, live PID, and matching process-start token before
|
|
32
|
-
its first tool call;
|
|
33
|
-
- set all five Forge binding variables; and
|
|
34
|
-
- end that process before extraction.
|
|
35
|
-
|
|
36
|
-
Never claim that binding on the adapter's behalf. Without it, an unbound
|
|
37
|
-
`forge plan` returns typed `degraded` / `serial` JSON and creates nothing; accept
|
|
38
|
-
that result and use the normal serial wright.
|
|
39
|
-
|
|
40
|
-
## Lifecycle
|
|
41
|
-
|
|
42
|
-
### 1. Plan, then snapshot
|
|
43
|
-
|
|
44
|
-
Write the normal root-owned `.wright-allowlist`. Hash the complete scorecard
|
|
45
|
-
owners, not excerpts:
|
|
46
|
-
|
|
47
|
-
```bash
|
|
48
|
-
SLUG="$(cat .devrites/ACTIVE)"
|
|
49
|
-
WORK=".devrites/work/$SLUG"
|
|
50
|
-
hash_file() {
|
|
51
|
-
if command -v shasum >/dev/null 2>&1; then
|
|
52
|
-
shasum -a 256 "$1" | awk '{print $1}'
|
|
53
|
-
elif command -v sha256sum >/dev/null 2>&1; then
|
|
54
|
-
sha256sum "$1" | awk '{print $1}'
|
|
55
|
-
else
|
|
56
|
-
return 127
|
|
57
|
-
fi
|
|
58
|
-
}
|
|
59
|
-
ACCEPTANCE_HASH="$(hash_file "$WORK/spec.md")"
|
|
60
|
-
TEST_PLAN_HASH="$(hash_file "$WORK/test-plan.md")"
|
|
61
|
-
|
|
62
|
-
devrites-engine forge plan "<SLICE-###>" "$SLUG" \
|
|
63
|
-
--strategy "A=<strategy A>" \
|
|
64
|
-
--strategy "B=<strategy B>" \
|
|
65
|
-
--acceptance-hash "$ACCEPTANCE_HASH" \
|
|
66
|
-
--test-plan-hash "$TEST_PLAN_HASH" \
|
|
67
|
-
--worker-binding=manifest-env-v1
|
|
68
|
-
```
|
|
69
|
-
|
|
70
|
-
Add `--strategy "C=<strategy C>"` only for a third vetted strategy. Both hashes
|
|
71
|
-
must be the complete 64-hex SHA-256 values of the current files. The command
|
|
72
|
-
shown is only for an adapter that really provides the binding. Otherwise omit
|
|
73
|
-
`--worker-binding`; the engine returns the side-effect-free serial result.
|
|
74
|
-
|
|
75
|
-
Read the JSON result:
|
|
76
|
-
|
|
77
|
-
- `status: planned`: take the run ID and every candidate path from its
|
|
78
|
-
manifest; then run `devrites-engine reconcile snapshot`.
|
|
79
|
-
- `status: degraded, mode: serial`: record the reason and use one normal
|
|
80
|
-
wright. The engine created no Forge state.
|
|
81
|
-
- non-zero exit: classify it as a technical defect. Preserve any manifest
|
|
82
|
-
state and recover it; never infer paths or silently start a serial writer.
|
|
83
|
-
|
|
84
|
-
`forge plan` must precede `reconcile snapshot`: validated operational manifests
|
|
85
|
-
are reconciliation-private, while `forge-report.md` and every other `.forge`
|
|
86
|
-
path remain visible.
|
|
87
|
-
|
|
88
|
-
### 2. Bind and dispatch every candidate
|
|
89
|
-
|
|
90
|
-
For each candidate, the host starts a fresh worker at the manifest's exact
|
|
91
|
-
`worktree`, pauses it before its first tool call, and obtains the engine token
|
|
92
|
-
for its live PID:
|
|
93
|
-
|
|
94
|
-
```bash
|
|
95
|
-
devrites-engine forge process-token "$WORKER_PID"
|
|
96
|
-
```
|
|
97
|
-
|
|
98
|
-
Read `process_start` from the JSON; never reproduce the token algorithm in
|
|
99
|
-
shell. Record that exact identity, then release the worker:
|
|
100
|
-
|
|
101
|
-
```bash
|
|
102
|
-
devrites-engine forge record "$RUN_ID" "$CANDIDATE" started \
|
|
103
|
-
--worker-id "$WORKER_ID" \
|
|
104
|
-
--pid "$WORKER_PID" \
|
|
105
|
-
--process-start "$PROCESS_START"
|
|
106
|
-
```
|
|
107
|
-
|
|
108
|
-
The candidate process receives this all-or-none environment:
|
|
109
|
-
|
|
110
|
-
```text
|
|
111
|
-
DEVRITES_FORGE_RUN_ID=<manifest run_id>
|
|
112
|
-
DEVRITES_FORGE_CANDIDATE=<A|B|C>
|
|
113
|
-
DEVRITES_FORGE_WORKER_ID=<recorded worker id>
|
|
114
|
-
DEVRITES_FORGE_WORKER_PID=<recorded live pid>
|
|
115
|
-
DEVRITES_FORGE_PROCESS_START=<recorded start token>
|
|
116
|
-
```
|
|
117
|
-
|
|
118
|
-
Its cwd is the exact manifest worktree. Give it the normal
|
|
119
|
-
[`wright-dispatch.md`](wright-dispatch.md) packet plus its one recorded
|
|
120
|
-
strategy. The same project-relative allowlist applies inside that candidate
|
|
121
|
-
tree. Any missing, partial, stale, wrong-tree, wrong-branch, or wrong-worker
|
|
122
|
-
binding is a denial, not a reason to widen scope.
|
|
123
|
-
|
|
124
|
-
After the worker returns and its process exits:
|
|
125
|
-
|
|
126
|
-
```bash
|
|
127
|
-
devrites-engine forge record "$RUN_ID" "$CANDIDATE" finished \
|
|
128
|
-
--worker-id "$WORKER_ID"
|
|
129
|
-
devrites-engine forge extract "$RUN_ID" "$CANDIDATE"
|
|
130
|
-
```
|
|
131
|
-
|
|
132
|
-
Extraction makes the complete tracked, staged, unstaged, untracked, deletion,
|
|
133
|
-
mode, and symlink delta reachable by the recorded candidate commit and binds
|
|
134
|
-
its SHA-256. Ignored, dirty, mismatched, live, or ambiguous content is
|
|
135
|
-
preserved. A crashed worker is recorded `failed`; the run stays preserved for
|
|
136
|
-
technical recovery and does not degrade in place.
|
|
137
|
-
|
|
138
|
-
### 3. Judge, record, and merge
|
|
139
|
-
|
|
140
|
-
After **every** candidate is extracted, dispatch
|
|
141
|
-
[`devrites-forge-judge`](.codex/agents/devrites-forge-judge.toml) in fresh,
|
|
142
|
-
read-only context. Give it the manifest, slice scorecard, base commit, and each
|
|
143
|
-
recorded candidate commit/tree/delta hash. It scores the immutable diffs against
|
|
144
|
-
the same acceptance, tests, principles, reuse, simplicity, and anti-slop bar.
|
|
145
|
-
|
|
146
|
-
For one qualifying winner:
|
|
147
|
-
|
|
148
|
-
```bash
|
|
149
|
-
devrites-engine forge record "$RUN_ID" winner "<A|B|C>" \
|
|
150
|
-
--worker-id "<judge result id>"
|
|
151
|
-
devrites-engine forge merge "$RUN_ID" "<A|B|C>"
|
|
152
|
-
```
|
|
153
|
-
|
|
154
|
-
Merge revalidates every extract and the unchanged primary baseline, performs a
|
|
155
|
-
no-side-effect conflict preflight, then fast-forwards to exactly the recorded
|
|
156
|
-
winner. A mismatch or conflict leaves the primary tree unchanged. Runner-up
|
|
157
|
-
ideas remain report notes; never hand-merge candidates or mutate the landed
|
|
158
|
-
winner inside this run.
|
|
159
|
-
|
|
160
|
-
If no candidate qualifies, preserve the run and route the actual finding:
|
|
161
|
-
product/acceptance ambiguity returns to planning; implementation or proof
|
|
162
|
-
defects use bounded technical recovery. Retry authorization is not a human
|
|
163
|
-
decision.
|
|
164
|
-
|
|
165
|
-
### 4. Verify, clean, then record
|
|
166
|
-
|
|
167
|
-
Hand the winner's structured artifact to the normal cycle. Run immediate
|
|
168
|
-
reconciliation, doubt every stood decision, and complete test-integrity,
|
|
169
|
-
targeted, browser, and other slice proof. Only after every required gate is
|
|
170
|
-
green:
|
|
171
|
-
|
|
172
|
-
```bash
|
|
173
|
-
devrites-engine forge record "$RUN_ID" verification verified \
|
|
174
|
-
--worker-id "<verifier result id>"
|
|
175
|
-
devrites-engine forge cleanup "$RUN_ID"
|
|
176
|
-
devrites-engine reconcile close
|
|
177
|
-
```
|
|
178
|
-
|
|
179
|
-
Cleanup reads only the manifest. It removes an exact terminal, dead, clean,
|
|
180
|
-
reachable worktree; preserves live, dirty, mismatched, unreachable, or
|
|
181
|
-
ambiguous state with a reason; and never deletes candidate branches.
|
|
182
|
-
|
|
183
|
-
Now write `.devrites/work/<slug>/forge-report.md` alongside the normal Build
|
|
184
|
-
records. The report is written after reconciliation and verification, includes
|
|
185
|
-
cleanup preservation results, and never authorizes merge, cleanup, or reap.
|
|
186
|
-
|
|
187
|
-
```markdown
|
|
188
|
-
# Forge report: <SLICE-### — name>
|
|
189
|
-
Run: <run-id> · scorecard: <acceptance hash> / <test-plan hash>
|
|
190
|
-
|
|
191
|
-
## Candidates
|
|
192
|
-
| # | Strategy | Gates | Delta SHA-256 | Judge result |
|
|
193
|
-
|---|---|---|---|---|
|
|
194
|
-
| A | <approach> | <green/red> | <hash> | <score + decisive evidence> |
|
|
195
|
-
| B | <approach> | <green/red> | <hash> | <score + decisive evidence> |
|
|
196
|
-
|
|
197
|
-
## Verdict
|
|
198
|
-
Winner: <A|B|C> — <rubric-based reason>
|
|
199
|
-
Discarded: <one reason per loser>
|
|
200
|
-
Runner-up notes: <ideas for later | none>
|
|
201
|
-
Cleanup: <complete | preserved candidate + exact engine reason>
|
|
202
|
-
```
|
|
203
|
-
|
|
204
|
-
## Interrupted runs
|
|
205
|
-
|
|
206
|
-
Use `devrites-engine forge reap [slug]` only for recovery. It enumerates
|
|
207
|
-
validated manifests rather than matching directories or branch names. It applies the
|
|
208
|
-
same exact identity, liveness, cleanliness, and reachability checks as cleanup.
|
|
209
|
-
Foreign, live, dirty, malformed, mismatched, or ambiguous state is reported and
|
|
210
|
-
preserved. Never infer a path, suppress a failure, or delete a branch.
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
# Recording proven conventions (the ledger, on GO)
|
|
2
|
-
|
|
3
|
-
Loaded on demand by `$rite-seal` step 9. On a **GO** seal (and only then) promote the
|
|
4
|
-
durable project conventions this feature *proved* into the local conventions ledger
|
|
5
|
-
(`.devrites/conventions.md`). Orient reads it on later slices so the wright stops
|
|
6
|
-
re-deriving the same idioms every time.
|
|
7
|
-
|
|
8
|
-
The discipline mirrors DevRites' whole thesis: a convention is not "learned" until a
|
|
9
|
-
**sealed slice proved it**. The ledger is evidence-gated, just like the seal.
|
|
10
|
-
|
|
11
|
-
## What to promote
|
|
12
|
-
|
|
13
|
-
Durable, reusable facts about *this codebase* that a future slice would otherwise
|
|
14
|
-
re-discover: each as one entry:
|
|
15
|
-
|
|
16
|
-
- **Commands:** the real build / test / typecheck / lint commands and how tests are run
|
|
17
|
-
(runner, file layout, co-location).
|
|
18
|
-
- **Idioms:** naming + casing, layering, the error model, the result/exception style, the
|
|
19
|
-
http/client/data-access pattern.
|
|
20
|
-
- **Placement:** where a kind of thing lives (where new endpoints / components / migrations go).
|
|
21
|
-
- **Gotchas:** a non-obvious constraint this feature hit and proved (ordering requirement,
|
|
22
|
-
a "don't call X before Y", a framework quirk verified against the source).
|
|
23
|
-
|
|
24
|
-
Do **not** promote: feature-specific details, one-off decisions (those live in
|
|
25
|
-
`decisions.md`), anything you only assumed, or anything a reviewer flagged as wrong.
|
|
26
|
-
If it isn't both *durable* and *proven by the evidence*, leave it out.
|
|
27
|
-
|
|
28
|
-
## How (deterministic band, idempotent, graceful)
|
|
29
|
-
|
|
30
|
-
For each convention, run the store. The confidence band is **earned** (computed from how
|
|
31
|
-
many independent sealed slices corroborated the entry) never set by you. Re-sealing the
|
|
32
|
-
same slice is idempotent (it won't double-count). If the `devrites-engine` binary is absent
|
|
33
|
-
the step is skipped with a notice; the ledger is an enhancement, never a gate.
|
|
34
|
-
|
|
35
|
-
```bash
|
|
36
|
-
SLUG="$(cat .devrites/ACTIVE 2>/dev/null | tr -d '[:space:]')"
|
|
37
|
-
if command -v devrites-engine >/dev/null 2>&1; then
|
|
38
|
-
devrites-engine conventions promote --slug "$SLUG" \
|
|
39
|
-
--key test-runner \
|
|
40
|
-
--kind test \
|
|
41
|
-
--statement "tests run with <runner>, co-located <pattern>" \
|
|
42
|
-
--evidence "evidence.md: <what proved it>"
|
|
43
|
-
# …one promote per durable convention this feature proved.
|
|
44
|
-
else
|
|
45
|
-
echo "(conventions ledger unavailable — devrites-engine missing; skipping promote)"
|
|
46
|
-
fi
|
|
47
|
-
```
|
|
48
|
-
|
|
49
|
-
- `--key` is a short kebab id for the convention (`test-runner`, `error-model`,
|
|
50
|
-
`http-client`, `endpoint-placement`); re-using a key on a later slice **corroborates** it
|
|
51
|
-
and raises the band.
|
|
52
|
-
- `--statement` is one human-readable line; `--evidence` cites what in this feature proved it.
|
|
53
|
-
|
|
54
|
-
## Authority is bounded by design
|
|
55
|
-
|
|
56
|
-
A high band raises *confidence*, never *authority*. Per
|
|
57
|
-
[`.agents/skills/devrites-lib/reference/standards/security.md`](../../devrites-lib/reference/standards/security.md) § Prompt-injection resistance, a
|
|
58
|
-
ledger entry is untrusted data; at orient a **fresh observation of the live code always
|
|
59
|
-
overrides** a stale entry. Promoting here is safe precisely because reading there is
|
|
60
|
-
defensive.
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
# ADR promotion
|
|
2
|
-
|
|
3
|
-
Promote only durable architecture or interface decisions from `decisions.md`; slice-local
|
|
4
|
-
calls remain in the archived workspace. If the project has no `docs/adr/`, ask before
|
|
5
|
-
creating that convention.
|
|
6
|
-
|
|
7
|
-
Write the next append-only `docs/adr/ADR-NNN.md` with Context, Decision, Status
|
|
8
|
-
`accepted`, and Consequences. Never rewrite an accepted ADR; supersede it with a new ADR
|
|
9
|
-
that links the old one. Add every promoted ADR to `touched-files.md` before shipping.
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
# Capability ledger: the living "what the system does now" layer
|
|
2
|
-
|
|
3
|
-
The ledger is DevRites' cumulative spec store: `.devrites/specs/<capability>/spec.md`, a flat
|
|
4
|
-
list of proven `### Requirement:` blocks per capability. Unlike a feature workspace (which is
|
|
5
|
-
archived away on close) the ledger **persists** and accumulates, so feature N+1 starts from the
|
|
6
|
-
proven contract of every feature before it instead of re-deriving from code.
|
|
7
|
-
|
|
8
|
-
It lives outside `.devrites/work/`, so close-out's archival never touches it. It is written only
|
|
9
|
-
here, on ship, and only from behavior that just passed the seal GO + evidence-freshness gate, so
|
|
10
|
-
the ledger records *proven* truth, never merely proposed.
|
|
11
|
-
|
|
12
|
-
## Fold semantics
|
|
13
|
-
|
|
14
|
-
A feature's `spec.md` carries **deltas** grouped under capability-tagged H2 sections
|
|
15
|
-
(`## ADDED Requirements — capability: <c>`, `MODIFIED`, `REMOVED`): see
|
|
16
|
-
[`spec-grammar.md`](../../devrites-lib/reference/standards/spec-grammar.md) § Delta form.
|
|
17
|
-
`devrites-engine ledger sync` groups them by capability and folds each into its ledger spec:
|
|
18
|
-
|
|
19
|
-
- **ADDED** → append the block (upsert: replaces in place on a re-sync, so sync is idempotent)
|
|
20
|
-
- **MODIFIED** → replace the same-named block with the full new version
|
|
21
|
-
- **REMOVED** → delete the block (an emptied capability spec is dropped)
|
|
22
|
-
|
|
23
|
-
Matching is by **requirement header identity**. A flat feature spec (no delta H2 sections) folds
|
|
24
|
-
as all-ADDED into the capability named by the feature slug.
|
|
25
|
-
|
|
26
|
-
## Sync workflow (rite-ship step 2b)
|
|
27
|
-
|
|
28
|
-
Runs **before the commit** so the ledger change ships in the same commit as the code that proves it.
|
|
29
|
-
|
|
30
|
-
1. Preview the fold: deterministic, zero-token:
|
|
31
|
-
```bash
|
|
32
|
-
devrites-engine ledger diff .devrites/work/<slug>
|
|
33
|
-
```
|
|
34
|
-
2. **Opt-in and confirmed** (mirrors the design-memory rollup): present the option set (default
|
|
35
|
-
is to sync, since a shipped feature's proven behavior belongs in the ledger; the escape hatch
|
|
36
|
-
is skip (the feature ships without updating the living spec) a deliberate call, e.g. an
|
|
37
|
-
internal-only change with no capability contract).
|
|
38
|
-
3. On yes:
|
|
39
|
-
```bash
|
|
40
|
-
devrites-engine ledger sync .devrites/work/<slug>
|
|
41
|
-
```
|
|
42
|
-
Then append each written `.devrites/specs/<capability>/spec.md` to `touched-files.md` so it is
|
|
43
|
-
staged and committed at the git ladder (step 4). Record the synced capabilities in `ship.md`.
|
|
44
|
-
**The ledger must be git-tracked.** Most of `.devrites/` is runtime state a project gitignores;
|
|
45
|
-
`specs/` is the exception (durable shared truth). If a `git status` / `git check-ignore` shows
|
|
46
|
-
the ledger path ignored, the commit would silently drop it: carve it out first:
|
|
47
|
-
`.devrites/*` + `!.devrites/specs/`. Surface this rather than shipping a ledger that never lands.
|
|
48
|
-
4. Skip when the feature declares no requirements (a pure refactor / chore with no spec deltas).
|
|
49
|
-
|
|
50
|
-
## Reading the ledger (earlier phases)
|
|
51
|
-
|
|
52
|
-
`$rite-spec` and `$rite-adopt` consult the ledger before writing a new spec:
|
|
53
|
-
```bash
|
|
54
|
-
devrites-engine ledger list # capabilities + requirement counts
|
|
55
|
-
devrites-engine ledger show <capability> # the proven contract to write deltas against
|
|
56
|
-
```
|
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
# Cross-compile devrites-engine for every supported target and emit a sha256
|
|
3
|
-
# sidecar per binary: the artifacts attached to the GitHub Release alongside the
|
|
4
|
-
# pack tarball. Pure-Go (CGO_ENABLED=0) so every target builds
|
|
5
|
-
# from one Linux runner with no cross-toolchain. The version is stamped into the
|
|
6
|
-
# binary via -ldflags so `devrites-engine doctor` reports the release it came from.
|
|
7
|
-
#
|
|
8
|
-
# Usage: build-binaries.sh <version> # version WITHOUT a leading "v"
|
|
9
|
-
#
|
|
10
|
-
# Output: dist/bin/devrites-<os>-<arch>[.exe] plus a "<sha> <name>" .sha256 each.
|
|
11
|
-
# Binary names are UNVERSIONED so the installer can fetch
|
|
12
|
-
# github.com/<repo>/releases/latest/download/devrites-<os>-<arch> directly.
|
|
13
|
-
set -euo pipefail
|
|
14
|
-
|
|
15
|
-
VERSION="${1:-}"
|
|
16
|
-
if [[ -z "$VERSION" ]]; then
|
|
17
|
-
echo "usage: build-binaries.sh <version>" >&2
|
|
18
|
-
exit 1
|
|
19
|
-
fi
|
|
20
|
-
|
|
21
|
-
ROOT="$(cd "$(dirname "$0")/.." && pwd)"
|
|
22
|
-
ENGINE="$ROOT/engine"
|
|
23
|
-
OUT="$ROOT/dist/bin"
|
|
24
|
-
MODULE="github.com/devrites/devrites"
|
|
25
|
-
|
|
26
|
-
if [[ ! -d "$ENGINE" ]]; then
|
|
27
|
-
echo "build-binaries: no engine/ directory at $ENGINE" >&2
|
|
28
|
-
exit 1
|
|
29
|
-
fi
|
|
30
|
-
|
|
31
|
-
# The release matrix: darwin arm64/amd64, linux amd64/arm64, windows amd64.
|
|
32
|
-
TARGETS=(
|
|
33
|
-
"darwin/arm64"
|
|
34
|
-
"darwin/amd64"
|
|
35
|
-
"linux/amd64"
|
|
36
|
-
"linux/arm64"
|
|
37
|
-
"windows/amd64"
|
|
38
|
-
)
|
|
39
|
-
|
|
40
|
-
rm -rf "$OUT"
|
|
41
|
-
mkdir -p "$OUT"
|
|
42
|
-
|
|
43
|
-
sha256_of() {
|
|
44
|
-
# Emit "<sha256> <filename>" (no path) so it verifies from any cwd.
|
|
45
|
-
local f="$1"
|
|
46
|
-
if command -v shasum >/dev/null 2>&1; then
|
|
47
|
-
shasum -a 256 "$f"
|
|
48
|
-
elif command -v sha256sum >/dev/null 2>&1; then
|
|
49
|
-
sha256sum "$f"
|
|
50
|
-
else
|
|
51
|
-
echo "build-binaries: no sha256 tool found" >&2
|
|
52
|
-
return 1
|
|
53
|
-
fi
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
echo "Cross-compiling devrites v${VERSION} (CGO_ENABLED=0)"
|
|
57
|
-
cd "$ENGINE"
|
|
58
|
-
|
|
59
|
-
for target in "${TARGETS[@]}"; do
|
|
60
|
-
os="${target%%/*}"
|
|
61
|
-
arch="${target##*/}"
|
|
62
|
-
name="devrites-${os}-${arch}"
|
|
63
|
-
[[ "$os" == "windows" ]] && name="${name}.exe"
|
|
64
|
-
|
|
65
|
-
echo " → ${name}"
|
|
66
|
-
CGO_ENABLED=0 GOOS="$os" GOARCH="$arch" \
|
|
67
|
-
go build -trimpath \
|
|
68
|
-
-ldflags "-s -w -X ${MODULE}/internal/version.Version=v${VERSION}" \
|
|
69
|
-
-o "$OUT/$name" .
|
|
70
|
-
|
|
71
|
-
( cd "$OUT" && sha256_of "$name" > "${name}.sha256" )
|
|
72
|
-
done
|
|
73
|
-
|
|
74
|
-
echo "Built $(find "$OUT" -maxdepth 1 -name 'devrites-*' ! -name '*.sha256' | wc -l | tr -d ' ') binaries in $OUT"
|
|
75
|
-
ls -lh "$OUT"
|
|
@@ -1,105 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
# Build the archive that semantic-release attaches to a GitHub Release.
|
|
3
|
-
# It extracts to `devrites-v<version>/` with the pack, engine, scripts,
|
|
4
|
-
# documentation, and install tools.
|
|
5
|
-
#
|
|
6
|
-
# Usage: build-release-tarball.sh <version>
|
|
7
|
-
set -euo pipefail
|
|
8
|
-
|
|
9
|
-
VERSION="${1:-}"
|
|
10
|
-
if [[ -z "$VERSION" ]]; then
|
|
11
|
-
echo "usage: build-release-tarball.sh <version>" >&2
|
|
12
|
-
exit 1
|
|
13
|
-
fi
|
|
14
|
-
if [[ ! "$VERSION" =~ ^[0-9A-Za-z][0-9A-Za-z._+-]*$ ]]; then
|
|
15
|
-
echo "error: version must be a portable release asset name" >&2
|
|
16
|
-
exit 1
|
|
17
|
-
fi
|
|
18
|
-
|
|
19
|
-
ROOT="$(cd "$(dirname "$0")/.." && pwd -P)"
|
|
20
|
-
DIST="${DEVRITES_RELEASE_DIST_DIR:-$ROOT/dist}"
|
|
21
|
-
NAME="devrites-v${VERSION}"
|
|
22
|
-
|
|
23
|
-
cd "$ROOT"
|
|
24
|
-
mkdir -p "$DIST"
|
|
25
|
-
DIST="$(cd "$DIST" && pwd -P)"
|
|
26
|
-
case "$DIST/" in
|
|
27
|
-
"$ROOT/pack/"* | "$ROOT/engine/"* | "$ROOT/scripts/"* | "$ROOT/mcp/"* | "$ROOT/docs/"*)
|
|
28
|
-
echo "error: release output directory overlaps the release payload" >&2
|
|
29
|
-
exit 1
|
|
30
|
-
;;
|
|
31
|
-
esac
|
|
32
|
-
STAGE="$(mktemp -d "$DIST/.devrites-release-stage.XXXXXX")"
|
|
33
|
-
cleanup() { rm -rf "$STAGE"; }
|
|
34
|
-
trap cleanup EXIT
|
|
35
|
-
|
|
36
|
-
echo "Building release tarball: ${NAME}.tar.gz"
|
|
37
|
-
|
|
38
|
-
# Release contents.
|
|
39
|
-
PAYLOAD=(
|
|
40
|
-
pack
|
|
41
|
-
engine
|
|
42
|
-
scripts
|
|
43
|
-
mcp
|
|
44
|
-
docs
|
|
45
|
-
install.sh
|
|
46
|
-
uninstall.sh
|
|
47
|
-
update.sh
|
|
48
|
-
README.md
|
|
49
|
-
CHANGELOG.md
|
|
50
|
-
LICENSE
|
|
51
|
-
SECURITY.md
|
|
52
|
-
NOTICE.md
|
|
53
|
-
CODE_OF_CONDUCT.md
|
|
54
|
-
CODEOWNERS
|
|
55
|
-
package.json
|
|
56
|
-
)
|
|
57
|
-
|
|
58
|
-
for item in "${PAYLOAD[@]}"; do
|
|
59
|
-
if [[ -e "$item" ]]; then
|
|
60
|
-
if git rev-parse --is-inside-work-tree >/dev/null 2>&1; then
|
|
61
|
-
while IFS= read -r -d '' path; do
|
|
62
|
-
[[ -e "$path" || -L "$path" ]] || continue
|
|
63
|
-
if [[ "$path" == engine/testdata/golden/* ]]; then
|
|
64
|
-
continue
|
|
65
|
-
fi
|
|
66
|
-
mkdir -p "$STAGE/$(dirname "$path")"
|
|
67
|
-
cp -P "$path" "$STAGE/$path"
|
|
68
|
-
done < <(git ls-files -z -- "$item")
|
|
69
|
-
else
|
|
70
|
-
cp -R "$item" "$STAGE/"
|
|
71
|
-
fi
|
|
72
|
-
fi
|
|
73
|
-
done
|
|
74
|
-
|
|
75
|
-
# Include the same prebuilt host artifacts as the npm package.
|
|
76
|
-
DEVRITES_HOST_ARTIFACT_DIR="$STAGE/pack/generated" bash "$STAGE/scripts/build-host-artifacts.sh" >/dev/null
|
|
77
|
-
|
|
78
|
-
# Remove development files copied with the payload.
|
|
79
|
-
rm -rf "$STAGE/docs/internal" "$STAGE/scripts/.cache" 2>/dev/null || true
|
|
80
|
-
|
|
81
|
-
(
|
|
82
|
-
cd "$ROOT/engine"
|
|
83
|
-
go run ./cmd/releasepack \
|
|
84
|
-
-root "$STAGE" \
|
|
85
|
-
-output "$DIST/${NAME}.tar.gz" \
|
|
86
|
-
-prefix "$NAME" \
|
|
87
|
-
-epoch "${SOURCE_DATE_EPOCH:-0}"
|
|
88
|
-
)
|
|
89
|
-
|
|
90
|
-
# Write a sibling checksum for install.sh to verify when available.
|
|
91
|
-
# Store only "<sha256> <filename>" so verification works from any directory.
|
|
92
|
-
(
|
|
93
|
-
cd "$DIST"
|
|
94
|
-
if command -v shasum >/dev/null 2>&1; then
|
|
95
|
-
shasum -a 256 "${NAME}.tar.gz" > "${NAME}.tar.gz.sha256"
|
|
96
|
-
elif command -v sha256sum >/dev/null 2>&1; then
|
|
97
|
-
sha256sum "${NAME}.tar.gz" > "${NAME}.tar.gz.sha256"
|
|
98
|
-
else
|
|
99
|
-
echo "warning: no sha256 tool found; skipping ${NAME}.tar.gz.sha256" >&2
|
|
100
|
-
fi
|
|
101
|
-
)
|
|
102
|
-
|
|
103
|
-
echo " → $DIST/${NAME}.tar.gz"
|
|
104
|
-
ls -lh "$DIST/${NAME}.tar.gz"
|
|
105
|
-
[[ -f "$DIST/${NAME}.tar.gz.sha256" ]] && { echo " → $DIST/${NAME}.tar.gz.sha256"; cat "$DIST/${NAME}.tar.gz.sha256"; } || true
|
|
@@ -1,125 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env python3
|
|
2
|
-
"""Compare generated JSON authorities with their short documentation blocks."""
|
|
3
|
-
|
|
4
|
-
import argparse
|
|
5
|
-
import json
|
|
6
|
-
import re
|
|
7
|
-
import sys
|
|
8
|
-
from pathlib import Path
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
def table(headers, rows):
|
|
12
|
-
return "\n".join(
|
|
13
|
-
[
|
|
14
|
-
"| " + " | ".join(headers) + " |",
|
|
15
|
-
"| " + " | ".join("---" for _ in headers) + " |",
|
|
16
|
-
*["| " + " | ".join(row) + " |" for row in rows],
|
|
17
|
-
]
|
|
18
|
-
)
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
def replace_block(path, name, wanted, write):
|
|
22
|
-
text = path.read_text()
|
|
23
|
-
start = f"<!-- authority:{name}:start -->"
|
|
24
|
-
end = f"<!-- authority:{name}:end -->"
|
|
25
|
-
pattern = re.compile(re.escape(start) + r"\n.*?\n" + re.escape(end), re.DOTALL)
|
|
26
|
-
replacement = f"{start}\n{wanted}\n{end}"
|
|
27
|
-
if not pattern.search(text):
|
|
28
|
-
raise ValueError(f"{path}: missing {name} authority markers")
|
|
29
|
-
if pattern.search(text).group(0) == replacement:
|
|
30
|
-
return
|
|
31
|
-
if write:
|
|
32
|
-
path.write_text(pattern.sub(replacement, text, count=1))
|
|
33
|
-
return
|
|
34
|
-
raise ValueError(f"{path}: {name} authority block is stale")
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
def main():
|
|
38
|
-
parser = argparse.ArgumentParser()
|
|
39
|
-
parser.add_argument("--root", type=Path, default=Path(__file__).resolve().parents[1])
|
|
40
|
-
parser.add_argument("--write", action="store_true")
|
|
41
|
-
args = parser.parse_args()
|
|
42
|
-
root = args.root.resolve()
|
|
43
|
-
|
|
44
|
-
manifest = json.loads((root / "engine/internal/state/workflow_manifest.json").read_text())
|
|
45
|
-
readiness = json.loads((root / "engine/internal/lib/readiness_contract.json").read_text())
|
|
46
|
-
phases = manifest["phases"]
|
|
47
|
-
reasons = readiness["reasons"]
|
|
48
|
-
policy = manifest["authorityPolicy"]
|
|
49
|
-
|
|
50
|
-
ids = [phase["id"] for phase in phases]
|
|
51
|
-
rights = [phase["transitionRight"] for phase in phases]
|
|
52
|
-
if len(ids) != len(set(ids)) or len(rights) != len(set(rights)):
|
|
53
|
-
raise ValueError("workflow manifest has duplicate phase IDs or transition rights")
|
|
54
|
-
resumes = {phase["id"]: phase.get("resumeVerb", "") for phase in phases}
|
|
55
|
-
if resumes.get("define") != "define" or resumes.get("plan") != "vet":
|
|
56
|
-
raise ValueError("workflow manifest violates ADR-0011 define/plan routing")
|
|
57
|
-
codes = [reason["code"] for reason in reasons]
|
|
58
|
-
if len(codes) != len(set(codes)):
|
|
59
|
-
raise ValueError("readiness contract has duplicate exit codes")
|
|
60
|
-
|
|
61
|
-
lifecycle = "`" + " → ".join(phase.upper() for phase in ids) + "`"
|
|
62
|
-
phase_rows = []
|
|
63
|
-
for phase in phases:
|
|
64
|
-
required = ", ".join(f"`{section}`" for section in phase.get("requiredSections", [])) or "*(none)*"
|
|
65
|
-
resume = f"`/rite-{phase['resumeVerb']}`" if phase.get("resumeVerb") else "*(terminal)*"
|
|
66
|
-
phase_rows.append([f"`{phase['id']}`", resume, required, phase["transitionRight"]])
|
|
67
|
-
reason_rows = [
|
|
68
|
-
[
|
|
69
|
-
f"`{reason['code']}`",
|
|
70
|
-
f"`{reason['id']}`",
|
|
71
|
-
reason["condition"],
|
|
72
|
-
f"`/rite-{reason['remediationVerb']}`" if reason["remediationVerb"] else "*(none)*",
|
|
73
|
-
]
|
|
74
|
-
for reason in reasons
|
|
75
|
-
]
|
|
76
|
-
tracking = (
|
|
77
|
-
"Git-tracked shared state: "
|
|
78
|
-
+ ", ".join(f"`{path}`" for path in policy["trackedState"])
|
|
79
|
-
+ ". Per-clone runtime state: "
|
|
80
|
-
+ ", ".join(f"`{path}`" for path in policy["localState"])
|
|
81
|
-
+ "."
|
|
82
|
-
)
|
|
83
|
-
clarify_rows = [[f"`{item['field']}`", item["policy"]] for item in manifest["clarifyReturnFields"]]
|
|
84
|
-
|
|
85
|
-
blocks = [
|
|
86
|
-
("docs/quick-reference.md", "lifecycle", lifecycle),
|
|
87
|
-
("docs/engine/state-schema.md", "schema-version", f"`schemaVersion: {manifest['schemaVersion']}`."),
|
|
88
|
-
(
|
|
89
|
-
"docs/engine/state-schema.md",
|
|
90
|
-
"phase-contract",
|
|
91
|
-
table(["phase", "normal resume", "required sections", "transition right"], phase_rows),
|
|
92
|
-
),
|
|
93
|
-
("docs/engine/state-schema.md", "state-tracking", tracking),
|
|
94
|
-
(
|
|
95
|
-
"docs/engine/state-schema.md",
|
|
96
|
-
"clarify-return-fields",
|
|
97
|
-
table(["field", "policy"], clarify_rows),
|
|
98
|
-
),
|
|
99
|
-
(
|
|
100
|
-
"docs/cli.md",
|
|
101
|
-
"readiness-reasons",
|
|
102
|
-
table(["exit", "reason", "condition", "remediation"], reason_rows),
|
|
103
|
-
),
|
|
104
|
-
("SECURITY.md", "principles-trust", policy["principlesTrust"]),
|
|
105
|
-
(
|
|
106
|
-
"pack/.claude/skills/devrites-lib/reference/standards/core.md",
|
|
107
|
-
"principles-trust",
|
|
108
|
-
policy["principlesTrust"],
|
|
109
|
-
),
|
|
110
|
-
]
|
|
111
|
-
for relative, name, wanted in blocks:
|
|
112
|
-
replace_block(root / relative, name, wanted, args.write)
|
|
113
|
-
|
|
114
|
-
state_schema = (root / "docs/engine/state-schema.md").read_text()
|
|
115
|
-
if re.search(r"schema(?:Version| version| v)[: ]+1\b", state_schema, re.IGNORECASE):
|
|
116
|
-
raise ValueError("docs/engine/state-schema.md still claims schema v1")
|
|
117
|
-
print("authority-drift: current docs match workflow and readiness authorities")
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
if __name__ == "__main__":
|
|
121
|
-
try:
|
|
122
|
-
main()
|
|
123
|
-
except (KeyError, OSError, ValueError, json.JSONDecodeError) as exc:
|
|
124
|
-
print(f"authority-drift: {exc}", file=sys.stderr)
|
|
125
|
-
sys.exit(1)
|