devrites 4.0.12 → 4.2.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 +14 -0
- package/README.md +3 -3
- package/docs/architecture.md +4 -4
- package/docs/command-map.md +4 -3
- package/docs/engine/commands.md +65 -6
- package/docs/flow.md +2 -1
- package/docs/orchestration.md +45 -4
- package/docs/skills.md +4 -3
- package/engine/go.mod +1 -1
- package/engine/internal/devritespaths/paths.go +5 -4
- package/engine/internal/gate/gate.go +154 -46
- package/engine/internal/gate/gate_test.go +290 -2
- package/engine/internal/gate/readiness_binding.go +66 -100
- package/engine/internal/gate/readiness_binding_test.go +126 -3
- package/engine/internal/hostpack/hostpack.go +9 -4
- package/engine/internal/hostpack/hostpack_test.go +16 -7
- package/engine/internal/install/install_test.go +5 -0
- package/engine/internal/lib/resolve.go +6 -6
- package/engine/internal/state/cmd/workflowmanifest/main.go +32 -3
- package/engine/internal/state/feature.go +1 -100
- package/engine/internal/state/observation.go +584 -0
- package/engine/internal/state/observation_open_other.go +9 -0
- package/engine/internal/state/observation_open_unix.go +12 -0
- package/engine/internal/state/observation_test.go +960 -0
- package/engine/internal/state/observation_unix_test.go +68 -0
- package/engine/internal/state/schema.go +60 -160
- package/engine/internal/state/state_test.go +489 -101
- package/engine/internal/state/status.go +67 -48
- package/engine/tests/adr_0004_required_by_phase_test.go +16 -13
- package/engine/tests/adr_0011_define_plan_test.go +14 -12
- package/engine/tests/gate_test.go +403 -28
- package/engine/tests/workspace_observation_migration_test.go +1065 -0
- package/pack/.claude/agents/devrites-code-reviewer.md +6 -1
- package/pack/.claude/agents/devrites-plan-drafter.md +5 -0
- package/pack/.claude/agents/devrites-plan-reviewer.md +6 -0
- package/pack/.claude/agents/devrites-proof-runner.md +7 -1
- package/pack/.claude/agents/devrites-retrospector.md +21 -25
- package/pack/.claude/agents/devrites-security-auditor.md +7 -3
- package/pack/.claude/agents/devrites-slice-wright.md +30 -4
- package/pack/.claude/agents/devrites-spec-reviewer.md +5 -0
- package/pack/.claude/agents/devrites-strategy-reviewer.md +3 -4
- package/pack/.claude/agents/devrites-test-analyst.md +5 -0
- package/pack/.claude/skills/devrites-debug-recovery/SKILL.md +13 -26
- package/pack/.claude/skills/devrites-debug-recovery/reference/build-the-loop.md +11 -14
- package/pack/.claude/skills/devrites-doubt/SKILL.md +3 -4
- package/pack/.claude/skills/devrites-frontend-craft/reference/reuse-first.md +3 -4
- package/pack/.claude/skills/devrites-lib/reference/standards/README.md +5 -1
- package/pack/.claude/skills/devrites-lib/reference/standards/acceptance-preserving-reslice.md +30 -0
- package/pack/.claude/skills/devrites-lib/reference/standards/afk-hitl.md +35 -17
- package/pack/.claude/skills/devrites-lib/reference/standards/agents.md +11 -3
- package/pack/.claude/skills/devrites-lib/reference/standards/ci-cd.md +19 -0
- package/pack/.claude/skills/devrites-lib/reference/standards/code-review.md +1 -1
- package/pack/.claude/skills/devrites-lib/reference/standards/core.md +5 -0
- package/pack/.claude/skills/devrites-lib/reference/standards/data-integrity.md +95 -0
- package/pack/.claude/skills/devrites-lib/reference/standards/developer-experience.md +5 -5
- package/pack/.claude/skills/devrites-lib/reference/standards/documentation.md +28 -29
- package/pack/.claude/skills/devrites-lib/reference/standards/edge-case-trace.md +70 -10
- package/pack/.claude/skills/devrites-lib/reference/standards/integration-reliability.md +79 -0
- package/pack/.claude/skills/devrites-lib/reference/standards/loop-operations.md +85 -0
- package/pack/.claude/skills/devrites-lib/reference/standards/observability.md +10 -0
- package/pack/.claude/skills/devrites-lib/reference/standards/one-shot-actions.md +1 -6
- package/pack/.claude/skills/devrites-lib/reference/standards/patterns.md +20 -0
- package/pack/.claude/skills/devrites-lib/reference/standards/repository-topology.md +73 -0
- package/pack/.claude/skills/devrites-lib/reference/standards/security-checklist.md +6 -2
- package/pack/.claude/skills/devrites-lib/reference/standards/security.md +51 -16
- package/pack/.claude/skills/devrites-lib/reference/standards/skill-authoring.md +35 -40
- package/pack/.claude/skills/devrites-lib/reference/standards/test-proof-checklist.md +4 -0
- package/pack/.claude/skills/devrites-lib/reference/standards/testing.md +51 -6
- package/pack/.claude/skills/devrites-lib/reference/standards/workflow-artifacts.md +411 -102
- package/pack/.claude/skills/rite/SKILL.md +2 -0
- package/pack/.claude/skills/rite-adopt/SKILL.md +8 -10
- package/pack/.claude/skills/rite-adopt/reference/adoption.md +13 -15
- package/pack/.claude/skills/rite-autocomplete/SKILL.md +98 -139
- package/pack/.claude/skills/rite-autocomplete/reference/decision-policy.md +11 -5
- package/pack/.claude/skills/rite-autocomplete/reference/loop.md +99 -114
- package/pack/.claude/skills/rite-autocomplete/reference/stop-conditions.md +92 -124
- package/pack/.claude/skills/rite-build/SKILL.md +51 -73
- package/pack/.claude/skills/rite-build/reference/phase-contract.md +9 -18
- package/pack/.claude/skills/rite-build/reference/wright-dispatch.md +37 -4
- package/pack/.claude/skills/rite-clarify/SKILL.md +3 -2
- package/pack/.claude/skills/rite-converge/SKILL.md +4 -2
- package/pack/.claude/skills/rite-converge/reference/convergence-assessment.md +8 -4
- package/pack/.claude/skills/rite-customize/SKILL.md +16 -18
- package/pack/.claude/skills/rite-define/SKILL.md +60 -62
- package/pack/.claude/skills/rite-define/reference/plan-template.md +88 -71
- package/pack/.claude/skills/rite-explain/SKILL.md +2 -1
- package/pack/.claude/skills/rite-learn/SKILL.md +28 -32
- package/pack/.claude/skills/rite-plan/SKILL.md +53 -56
- package/pack/.claude/skills/rite-plan/reference/anti-patterns.md +11 -1
- package/pack/.claude/skills/rite-plan/reference/dependency-graph.md +11 -2
- package/pack/.claude/skills/rite-plan/reference/replan-and-repair.md +10 -3
- package/pack/.claude/skills/rite-plan/reference/task-breakdown.md +2 -0
- package/pack/.claude/skills/rite-polish/reference/adr-promotion.md +7 -7
- package/pack/.claude/skills/rite-pressure-test/SKILL.md +24 -31
- package/pack/.claude/skills/rite-prove/SKILL.md +95 -156
- package/pack/.claude/skills/rite-prove/reference/acceptance-proof.md +28 -0
- package/pack/.claude/skills/rite-review/SKILL.md +5 -4
- package/pack/.claude/skills/rite-review/reference/five-axis-review.md +6 -0
- package/pack/.claude/skills/rite-review/reference/security-review.md +7 -2
- package/pack/.claude/skills/rite-seal/reference/final-evidence.md +3 -0
- package/pack/.claude/skills/rite-seal/reference/risk-and-rollback.md +19 -4
- package/pack/.claude/skills/rite-ship/reference/rollout.md +62 -43
- package/pack/.claude/skills/rite-spec/SKILL.md +8 -1
- package/pack/.claude/skills/rite-spec/reference/ai-spec-template.md +13 -6
- package/pack/.claude/skills/rite-spec/reference/spec-checklists.md +14 -2
- package/pack/.claude/skills/rite-spec/reference/spec-template.md +33 -4
- package/pack/.claude/skills/rite-temper/SKILL.md +5 -1
- package/pack/.claude/skills/rite-vet/SKILL.md +121 -174
- package/pack/.claude/skills/rite-vet/reference/anti-patterns.md +14 -2
- package/pack/.claude/skills/rite-vet/reference/artifacts.md +15 -9
- package/pack/.claude/skills/rite-vet/reference/depth.md +10 -3
- package/pack/.claude/skills/rite-vet/reference/review-axes.md +75 -77
- package/pack/.claude/skills/rite-watch-pr/SKILL.md +85 -0
- package/pack/.claude/skills/rite-zoom-out/SKILL.md +4 -5
- package/pack/.claude/workflows/devrites-readonly-review.js +194 -0
- package/pack/generated/README.md +1 -1
- package/pack/generated/claude/agents/devrites-code-reviewer.md +6 -1
- package/pack/generated/claude/agents/devrites-plan-drafter.md +5 -0
- package/pack/generated/claude/agents/devrites-plan-reviewer.md +6 -0
- package/pack/generated/claude/agents/devrites-proof-runner.md +7 -1
- package/pack/generated/claude/agents/devrites-retrospector.md +21 -25
- package/pack/generated/claude/agents/devrites-security-auditor.md +7 -3
- package/pack/generated/claude/agents/devrites-slice-wright.md +30 -4
- package/pack/generated/claude/agents/devrites-spec-reviewer.md +5 -0
- package/pack/generated/claude/agents/devrites-strategy-reviewer.md +3 -4
- package/pack/generated/claude/agents/devrites-test-analyst.md +5 -0
- package/pack/generated/claude/skills/devrites-debug-recovery/SKILL.md +13 -26
- package/pack/generated/claude/skills/devrites-debug-recovery/reference/build-the-loop.md +11 -14
- package/pack/generated/claude/skills/devrites-doubt/SKILL.md +3 -4
- package/pack/generated/claude/skills/devrites-frontend-craft/reference/reuse-first.md +3 -4
- package/pack/generated/claude/skills/devrites-lib/reference/standards/README.md +5 -1
- package/pack/generated/claude/skills/devrites-lib/reference/standards/acceptance-preserving-reslice.md +30 -0
- package/pack/generated/claude/skills/devrites-lib/reference/standards/afk-hitl.md +35 -17
- package/pack/generated/claude/skills/devrites-lib/reference/standards/agents.md +11 -3
- package/pack/generated/claude/skills/devrites-lib/reference/standards/ci-cd.md +19 -0
- package/pack/generated/claude/skills/devrites-lib/reference/standards/code-review.md +1 -1
- package/pack/generated/claude/skills/devrites-lib/reference/standards/core.md +5 -0
- package/pack/generated/claude/skills/devrites-lib/reference/standards/data-integrity.md +95 -0
- package/pack/generated/claude/skills/devrites-lib/reference/standards/developer-experience.md +5 -5
- package/pack/generated/claude/skills/devrites-lib/reference/standards/documentation.md +28 -29
- package/pack/generated/claude/skills/devrites-lib/reference/standards/edge-case-trace.md +70 -10
- package/pack/generated/claude/skills/devrites-lib/reference/standards/integration-reliability.md +79 -0
- package/pack/generated/claude/skills/devrites-lib/reference/standards/loop-operations.md +85 -0
- package/pack/generated/claude/skills/devrites-lib/reference/standards/observability.md +10 -0
- package/pack/generated/claude/skills/devrites-lib/reference/standards/one-shot-actions.md +1 -6
- package/pack/generated/claude/skills/devrites-lib/reference/standards/patterns.md +20 -0
- package/pack/generated/claude/skills/devrites-lib/reference/standards/repository-topology.md +73 -0
- package/pack/generated/claude/skills/devrites-lib/reference/standards/security-checklist.md +6 -2
- package/pack/generated/claude/skills/devrites-lib/reference/standards/security.md +51 -16
- package/pack/generated/claude/skills/devrites-lib/reference/standards/skill-authoring.md +35 -40
- package/pack/generated/claude/skills/devrites-lib/reference/standards/test-proof-checklist.md +4 -0
- package/pack/generated/claude/skills/devrites-lib/reference/standards/testing.md +51 -6
- package/pack/generated/claude/skills/devrites-lib/reference/standards/workflow-artifacts.md +411 -102
- package/pack/generated/claude/skills/rite/SKILL.md +2 -0
- package/pack/generated/claude/skills/rite-adopt/SKILL.md +8 -10
- package/pack/generated/claude/skills/rite-adopt/reference/adoption.md +13 -15
- package/pack/generated/claude/skills/rite-autocomplete/SKILL.md +98 -139
- package/pack/generated/claude/skills/rite-autocomplete/reference/decision-policy.md +11 -5
- package/pack/generated/claude/skills/rite-autocomplete/reference/loop.md +99 -114
- package/pack/generated/claude/skills/rite-autocomplete/reference/stop-conditions.md +92 -124
- package/pack/generated/claude/skills/rite-build/SKILL.md +51 -73
- package/pack/generated/claude/skills/rite-build/reference/phase-contract.md +9 -18
- package/pack/generated/claude/skills/rite-build/reference/wright-dispatch.md +37 -4
- package/pack/generated/claude/skills/rite-clarify/SKILL.md +3 -2
- package/pack/generated/claude/skills/rite-converge/SKILL.md +4 -2
- package/pack/generated/claude/skills/rite-converge/reference/convergence-assessment.md +8 -4
- package/pack/generated/claude/skills/rite-customize/SKILL.md +16 -18
- package/pack/generated/claude/skills/rite-define/SKILL.md +60 -62
- package/pack/generated/claude/skills/rite-define/reference/plan-template.md +88 -71
- package/pack/generated/claude/skills/rite-explain/SKILL.md +2 -1
- package/pack/generated/claude/skills/rite-learn/SKILL.md +28 -32
- package/pack/generated/claude/skills/rite-plan/SKILL.md +53 -56
- package/pack/generated/claude/skills/rite-plan/reference/anti-patterns.md +11 -1
- package/pack/generated/claude/skills/rite-plan/reference/dependency-graph.md +11 -2
- package/pack/generated/claude/skills/rite-plan/reference/replan-and-repair.md +10 -3
- package/pack/generated/claude/skills/rite-plan/reference/task-breakdown.md +2 -0
- package/pack/generated/claude/skills/rite-polish/reference/adr-promotion.md +7 -7
- package/pack/generated/claude/skills/rite-pressure-test/SKILL.md +24 -31
- package/pack/generated/claude/skills/rite-prove/SKILL.md +95 -156
- package/pack/generated/claude/skills/rite-prove/reference/acceptance-proof.md +28 -0
- package/pack/generated/claude/skills/rite-review/SKILL.md +5 -4
- package/pack/generated/claude/skills/rite-review/reference/five-axis-review.md +6 -0
- package/pack/generated/claude/skills/rite-review/reference/security-review.md +7 -2
- package/pack/generated/claude/skills/rite-seal/reference/final-evidence.md +3 -0
- package/pack/generated/claude/skills/rite-seal/reference/risk-and-rollback.md +19 -4
- package/pack/generated/claude/skills/rite-ship/reference/rollout.md +62 -43
- package/pack/generated/claude/skills/rite-spec/SKILL.md +8 -1
- package/pack/generated/claude/skills/rite-spec/reference/ai-spec-template.md +13 -6
- package/pack/generated/claude/skills/rite-spec/reference/spec-checklists.md +14 -2
- package/pack/generated/claude/skills/rite-spec/reference/spec-template.md +33 -4
- package/pack/generated/claude/skills/rite-temper/SKILL.md +5 -1
- package/pack/generated/claude/skills/rite-vet/SKILL.md +121 -174
- package/pack/generated/claude/skills/rite-vet/reference/anti-patterns.md +14 -2
- package/pack/generated/claude/skills/rite-vet/reference/artifacts.md +15 -9
- package/pack/generated/claude/skills/rite-vet/reference/depth.md +10 -3
- package/pack/generated/claude/skills/rite-vet/reference/review-axes.md +75 -77
- package/pack/generated/claude/skills/rite-watch-pr/SKILL.md +85 -0
- package/pack/generated/claude/skills/rite-zoom-out/SKILL.md +4 -5
- package/pack/generated/claude/workflows/devrites-readonly-review.js +194 -0
- package/pack/generated/codex/agents/devrites-code-reviewer.toml +6 -1
- package/pack/generated/codex/agents/devrites-plan-drafter.toml +5 -0
- package/pack/generated/codex/agents/devrites-plan-reviewer.toml +6 -0
- package/pack/generated/codex/agents/devrites-proof-runner.toml +7 -1
- package/pack/generated/codex/agents/devrites-retrospector.toml +21 -25
- package/pack/generated/codex/agents/devrites-security-auditor.toml +7 -3
- package/pack/generated/codex/agents/devrites-slice-wright.toml +30 -4
- package/pack/generated/codex/agents/devrites-spec-reviewer.toml +5 -0
- package/pack/generated/codex/agents/devrites-strategy-reviewer.toml +3 -4
- package/pack/generated/codex/agents/devrites-test-analyst.toml +5 -0
- package/pack/generated/codex/skills/devrites-debug-recovery/SKILL.md +13 -26
- package/pack/generated/codex/skills/devrites-debug-recovery/reference/build-the-loop.md +11 -14
- package/pack/generated/codex/skills/devrites-doubt/SKILL.md +3 -4
- package/pack/generated/codex/skills/devrites-frontend-craft/reference/reuse-first.md +3 -4
- package/pack/generated/codex/skills/devrites-lib/reference/standards/README.md +5 -1
- package/pack/generated/codex/skills/devrites-lib/reference/standards/acceptance-preserving-reslice.md +30 -0
- package/pack/generated/codex/skills/devrites-lib/reference/standards/afk-hitl.md +35 -17
- package/pack/generated/codex/skills/devrites-lib/reference/standards/agents.md +11 -3
- package/pack/generated/codex/skills/devrites-lib/reference/standards/ci-cd.md +19 -0
- package/pack/generated/codex/skills/devrites-lib/reference/standards/code-review.md +1 -1
- package/pack/generated/codex/skills/devrites-lib/reference/standards/core.md +5 -0
- package/pack/generated/codex/skills/devrites-lib/reference/standards/data-integrity.md +95 -0
- package/pack/generated/codex/skills/devrites-lib/reference/standards/developer-experience.md +5 -5
- package/pack/generated/codex/skills/devrites-lib/reference/standards/documentation.md +28 -29
- package/pack/generated/codex/skills/devrites-lib/reference/standards/edge-case-trace.md +70 -10
- package/pack/generated/codex/skills/devrites-lib/reference/standards/integration-reliability.md +79 -0
- package/pack/generated/codex/skills/devrites-lib/reference/standards/loop-operations.md +85 -0
- package/pack/generated/codex/skills/devrites-lib/reference/standards/observability.md +10 -0
- package/pack/generated/codex/skills/devrites-lib/reference/standards/one-shot-actions.md +1 -6
- package/pack/generated/codex/skills/devrites-lib/reference/standards/patterns.md +20 -0
- package/pack/generated/codex/skills/devrites-lib/reference/standards/repository-topology.md +73 -0
- package/pack/generated/codex/skills/devrites-lib/reference/standards/security-checklist.md +6 -2
- package/pack/generated/codex/skills/devrites-lib/reference/standards/security.md +51 -16
- package/pack/generated/codex/skills/devrites-lib/reference/standards/skill-authoring.md +35 -40
- package/pack/generated/codex/skills/devrites-lib/reference/standards/test-proof-checklist.md +4 -0
- package/pack/generated/codex/skills/devrites-lib/reference/standards/testing.md +51 -6
- package/pack/generated/codex/skills/devrites-lib/reference/standards/workflow-artifacts.md +411 -102
- package/pack/generated/codex/skills/rite/SKILL.md +2 -0
- package/pack/generated/codex/skills/rite-adopt/SKILL.md +8 -10
- package/pack/generated/codex/skills/rite-adopt/reference/adoption.md +13 -15
- package/pack/generated/codex/skills/rite-autocomplete/SKILL.md +98 -139
- package/pack/generated/codex/skills/rite-autocomplete/reference/decision-policy.md +11 -5
- package/pack/generated/codex/skills/rite-autocomplete/reference/loop.md +99 -114
- package/pack/generated/codex/skills/rite-autocomplete/reference/stop-conditions.md +92 -124
- package/pack/generated/codex/skills/rite-build/SKILL.md +51 -73
- package/pack/generated/codex/skills/rite-build/reference/phase-contract.md +9 -18
- package/pack/generated/codex/skills/rite-build/reference/wright-dispatch.md +37 -4
- package/pack/generated/codex/skills/rite-clarify/SKILL.md +3 -2
- package/pack/generated/codex/skills/rite-converge/SKILL.md +4 -2
- package/pack/generated/codex/skills/rite-converge/reference/convergence-assessment.md +8 -4
- package/pack/generated/codex/skills/rite-customize/SKILL.md +16 -18
- package/pack/generated/codex/skills/rite-define/SKILL.md +60 -62
- package/pack/generated/codex/skills/rite-define/reference/plan-template.md +88 -71
- package/pack/generated/codex/skills/rite-explain/SKILL.md +2 -1
- package/pack/generated/codex/skills/rite-learn/SKILL.md +28 -32
- package/pack/generated/codex/skills/rite-plan/SKILL.md +53 -56
- package/pack/generated/codex/skills/rite-plan/reference/anti-patterns.md +11 -1
- package/pack/generated/codex/skills/rite-plan/reference/dependency-graph.md +11 -2
- package/pack/generated/codex/skills/rite-plan/reference/replan-and-repair.md +10 -3
- package/pack/generated/codex/skills/rite-plan/reference/task-breakdown.md +2 -0
- package/pack/generated/codex/skills/rite-polish/reference/adr-promotion.md +7 -7
- package/pack/generated/codex/skills/rite-pressure-test/SKILL.md +24 -31
- package/pack/generated/codex/skills/rite-prove/SKILL.md +95 -156
- package/pack/generated/codex/skills/rite-prove/reference/acceptance-proof.md +28 -0
- package/pack/generated/codex/skills/rite-review/SKILL.md +5 -4
- package/pack/generated/codex/skills/rite-review/reference/five-axis-review.md +6 -0
- package/pack/generated/codex/skills/rite-review/reference/security-review.md +7 -2
- package/pack/generated/codex/skills/rite-seal/reference/final-evidence.md +3 -0
- package/pack/generated/codex/skills/rite-seal/reference/risk-and-rollback.md +19 -4
- package/pack/generated/codex/skills/rite-ship/reference/rollout.md +62 -43
- package/pack/generated/codex/skills/rite-spec/SKILL.md +8 -1
- package/pack/generated/codex/skills/rite-spec/reference/ai-spec-template.md +13 -6
- package/pack/generated/codex/skills/rite-spec/reference/spec-checklists.md +14 -2
- package/pack/generated/codex/skills/rite-spec/reference/spec-template.md +33 -4
- package/pack/generated/codex/skills/rite-temper/SKILL.md +5 -1
- package/pack/generated/codex/skills/rite-vet/SKILL.md +121 -174
- package/pack/generated/codex/skills/rite-vet/reference/anti-patterns.md +14 -2
- package/pack/generated/codex/skills/rite-vet/reference/artifacts.md +15 -9
- package/pack/generated/codex/skills/rite-vet/reference/depth.md +10 -3
- package/pack/generated/codex/skills/rite-vet/reference/review-axes.md +75 -77
- package/pack/generated/codex/skills/rite-watch-pr/SKILL.md +85 -0
- package/pack/generated/codex/skills/rite-zoom-out/SKILL.md +4 -5
- package/package.json +1 -1
- package/scripts/build-host-artifacts.sh +3 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,20 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to DevRites are documented here. The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) and DevRites adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). Releases are generated automatically by [semantic-release](https://semantic-release.gitbook.io/) from Conventional Commits on `main`.
|
|
4
4
|
|
|
5
|
+
## [4.2.0](https://github.com/ViktorsBaikers/DevRites/compare/v4.1.0...v4.2.0) (2026-08-23)
|
|
6
|
+
|
|
7
|
+
### Added
|
|
8
|
+
|
|
9
|
+
* **rite:** ship workflow artifact, reslice, and observation ([#36](https://github.com/ViktorsBaikers/DevRites/issues/36)) ([456a00e](https://github.com/ViktorsBaikers/DevRites/commit/456a00e8280acdab9525a762a267be7084b26a9f))
|
|
10
|
+
|
|
11
|
+
## [4.1.0](https://github.com/ViktorsBaikers/DevRites/compare/v4.0.12...v4.1.0) (2026-08-12)
|
|
12
|
+
|
|
13
|
+
### Added
|
|
14
|
+
|
|
15
|
+
* **rite:** add bounded host-native loop operations ([af8f50e](https://github.com/ViktorsBaikers/DevRites/commit/af8f50e434160a7ab33d7e4c8b5b387c4097bfdc))
|
|
16
|
+
* **rite:** deepen engineering risk guidance ([a109d35](https://github.com/ViktorsBaikers/DevRites/commit/a109d35788d831f037361cbc5c491d0b2cb2dd64))
|
|
17
|
+
* **rite:** govern decision horizons and learnings ([af48088](https://github.com/ViktorsBaikers/DevRites/commit/af48088157107e08f60a82659d7e445180ed1e96))
|
|
18
|
+
|
|
5
19
|
## [4.0.12](https://github.com/ViktorsBaikers/DevRites/compare/v4.0.11...v4.0.12) (2026-08-09)
|
|
6
20
|
|
|
7
21
|
### Fixed
|
package/README.md
CHANGED
|
@@ -28,7 +28,7 @@ project-conventional push, tag, or PR action, and archive the workspace.
|
|
|
28
28
|
Unattended runs may create local WIP checkpoint commits along the way, but they
|
|
29
29
|
remain local unless Ship's disclosed plan includes an approved remote action.
|
|
30
30
|
|
|
31
|
-
**Status:** [`v4.0
|
|
31
|
+
**Status:** [`v4.2.0`](https://github.com/ViktorsBaikers/DevRites/releases/tag/v4.2.0): see [`CHANGELOG.md`](CHANGELOG.md) for release notes.
|
|
32
32
|
|
|
33
33
|
This is the latest published release; `main` may contain unreleased work.
|
|
34
34
|
|
|
@@ -381,8 +381,8 @@ through Claude Code or Codex plugin stores.
|
|
|
381
381
|
|
|
382
382
|
## Skills and agents
|
|
383
383
|
|
|
384
|
-
The pack ships
|
|
385
|
-
the `rite` menu and
|
|
384
|
+
The pack ships 44 skills: 33 public and 11 internal. The public surface contains
|
|
385
|
+
the `rite` menu and 32 `rite-*` workflows and utilities. Ten `devrites-*`
|
|
386
386
|
specialists load when a matching task needs them; `devrites-lib` carries the
|
|
387
387
|
shared contracts and engineering standards.
|
|
388
388
|
|
package/docs/architecture.md
CHANGED
|
@@ -33,8 +33,8 @@ cursor readers, traceability rules, and phase-relative completeness model, see
|
|
|
33
33
|
2. **Public utility and on-ramp skills**: `rite-adopt`, `rite-quick`,
|
|
34
34
|
`rite-frame`, `rite-status`, `rite-doctor`, `rite-upgrade`, `rite-learn`, `rite-explain`,
|
|
35
35
|
`rite-customize`, `rite-zoom-out`, `rite-prototype`, `rite-handoff`,
|
|
36
|
-
`rite-pressure-test`, `rite-pov`, `rite-dogfood`, `rite-pr-feedback`,
|
|
37
|
-
`rite-autocomplete`. These are public commands. `rite-autocomplete` is the
|
|
36
|
+
`rite-pressure-test`, `rite-pov`, `rite-dogfood`, `rite-pr-feedback`,
|
|
37
|
+
`rite-watch-pr`, and `rite-autocomplete`. These are public commands. `rite-autocomplete` is the
|
|
38
38
|
unattended orchestrator. By default it drives the reversible lifecycle
|
|
39
39
|
through Seal GO and stops. Explicit `--ship` enters Ship preflight but still
|
|
40
40
|
waits for a fresh literal `GO` and native approval before mutation. It
|
|
@@ -381,8 +381,8 @@ contract.
|
|
|
381
381
|
|
|
382
382
|
## Design choices at a glance
|
|
383
383
|
|
|
384
|
-
- **Surface**:
|
|
385
|
-
menu:
|
|
384
|
+
- **Surface**: 32 public `rite-*` skills (44 total), plus the thin `/rite`
|
|
385
|
+
menu: 33 public and 11 internal. The lifecycle
|
|
386
386
|
includes mandatory adaptive Clarify, optional Temper, mandatory Vet, and
|
|
387
387
|
Converge recovery; Seal **decides** and Ship **executes + closes**. Ten
|
|
388
388
|
`devrites-*` specialist skills are model-invoked; `devrites-lib` is the
|
package/docs/command-map.md
CHANGED
|
@@ -19,8 +19,8 @@ mean that a skill is internal; each `SKILL.md` uses `user-invocable:` to set
|
|
|
19
19
|
visibility. Public utilities use the `rite-*` prefix: `rite-quick`,
|
|
20
20
|
`rite-frame`, `rite-adopt`, `rite-learn`, `rite-doctor`, `rite-customize`,
|
|
21
21
|
`rite-zoom-out`, `rite-prototype`, `rite-handoff`, `rite-pressure-test`,
|
|
22
|
-
`rite-autocomplete`, `rite-explain`, `rite-pov`, `rite-dogfood`,
|
|
23
|
-
`rite-pr-feedback`, plus the evidence-gated workspace compatibility command
|
|
22
|
+
`rite-autocomplete`, `rite-explain`, `rite-pov`, `rite-dogfood`,
|
|
23
|
+
`rite-pr-feedback`, and `rite-watch-pr`, plus the evidence-gated workspace compatibility command
|
|
24
24
|
`rite-upgrade`. The host may invoke `devrites-*` specialists through the model.
|
|
25
25
|
`devrites-lib` is the non-workflow library exception.
|
|
26
26
|
|
|
@@ -113,6 +113,7 @@ See [`cli.md`](cli.md).
|
|
|
113
113
|
| [`/rite-pov`](../pack/.claude/skills/rite-pov/SKILL.md) | utility | `[candidate/link/question]` | Project-grounded verdict on one outside option after live repository and primary-source evidence. | live code/docs + external sources | `decisions.md` or ADR only on request |
|
|
114
114
|
| [`/rite-dogfood`](../pack/.claude/skills/rite-dogfood/SKILL.md) | utility | `[feature-slug\|branch] [--port N]` | Diff-scoped browser QA: map changed user journeys, run scenario matrix, fix small obvious breakages, write dogfood report. Explicit-only. | diff + app routes + browser | `.devrites/work/<slug>/dogfood.md` + safe fixes |
|
|
115
115
|
| [`/rite-pr-feedback`](../pack/.claude/skills/rite-pr-feedback/SKILL.md) | utility | `[PR number\|thread URL\|blank for current branch]` | Resolve GitHub PR review feedback: fetch unresolved threads, judge centrally, fix valid items, reply, resolve. Explicit-only. | PR threads + code | code/tests + PR replies/resolutions |
|
|
116
|
+
| [`/rite-watch-pr`](../pack/.claude/skills/rite-watch-pr/SKILL.md) | utility | `[PR number\|PR URL\|blank for current branch]` | Observe one GitHub PR/CI/review snapshot, classify one next action, and stop. Safe for capability-admitted native schedules/events; never mutates code, Git, checks, threads, or PR state. | PR/check/review metadata + bounded failed-log excerpts | none |
|
|
116
117
|
| [`/rite-pressure-test`](../pack/.claude/skills/rite-pressure-test/SKILL.md) | utility | `[idea]` | Pressure-test a rough idea: 3 to 5 genuinely different options → converge on one with trade-off + hinge. | spec / surrounding code | `decisions.md` (optional) |
|
|
117
118
|
| [`/rite-doctor`](../pack/.claude/skills/rite-doctor/SKILL.md) | diagnostic | none | Diagnose the DevRites binary, pack, schema, and native host permission/profile configuration. | install + host config | none |
|
|
118
119
|
|
|
@@ -183,7 +184,7 @@ index is in
|
|
|
183
184
|
[`pack/.claude/skills/devrites-lib/reference/standards/README.md`](../pack/.claude/skills/devrites-lib/reference/standards/README.md).
|
|
184
185
|
|
|
185
186
|
- `core.md` (always-on): operating rules + universal anti-rationalizations + 1-line craft disciplines + persistence-before-stopping summary.
|
|
186
|
-
- On-demand rules and checklists (read by the phase that needs them): `coding-style.md` · `prose-style.md` · `error-handling.md` · `testing.md` · `spec-grammar.md` · `code-review.md` · `edge-case-trace.md` · `principles.md` · `security.md` · `performance.md` · `observability.md` · `developer-experience.md` · `patterns.md` · `git-workflow.md` · `ci-cd.md` · `hooks.md` · `documentation.md` · `development-workflow.md` · `deprecation.md` · `elicitation.md` · `agents.md` · `context-hygiene.md` · `anti-patterns.md` · `afk-hitl.md` · `tooling.md` · `skill-authoring.md` · `definition-of-done.md` · `review-checklist.md` · `test-proof-checklist.md` · `browser-proof-checklist.md` · `security-checklist.md`
|
|
187
|
+
- On-demand rules and checklists (read by the phase that needs them): `coding-style.md` · `prose-style.md` · `error-handling.md` · `testing.md` · `spec-grammar.md` · `code-review.md` · `edge-case-trace.md` · `principles.md` · `security.md` · `repository-topology.md` · `data-integrity.md` · `integration-reliability.md` · `performance.md` · `observability.md` · `developer-experience.md` · `patterns.md` · `git-workflow.md` · `ci-cd.md` · `hooks.md` · `documentation.md` · `development-workflow.md` · `deprecation.md` · `elicitation.md` · `agents.md` · `context-hygiene.md` · `anti-patterns.md` · `afk-hitl.md` · `loop-operations.md` · `tooling.md` · `skill-authoring.md` · `definition-of-done.md` · `review-checklist.md` · `test-proof-checklist.md` · `browser-proof-checklist.md` · `security-checklist.md`
|
|
187
188
|
- `anti-patterns.md`: pack-wide rationalizations + red flags. Loaded by each per-phase `rite-*/reference/anti-patterns.md`; can be loaded directly for cross-phase reluctance.
|
|
188
189
|
|
|
189
190
|
## Trigger conditions (auto-selection)
|
package/docs/engine/commands.md
CHANGED
|
@@ -12,9 +12,9 @@ workflow strategy.
|
|
|
12
12
|
| `update [flags]` | Refresh an existing managed installation. |
|
|
13
13
|
| `uninstall [flags]` | Remove managed artifacts while preserving runtime workspace state. |
|
|
14
14
|
| `check candidate <slug>` | Validate the strict manifest and compute the content-bound project-candidate identity. |
|
|
15
|
-
| `check readiness <slug>` | Check
|
|
15
|
+
| `check readiness <slug>` | Check target-Phase files, open human gates from Clarify onward, and the current stable Build-input binding when applicable. |
|
|
16
16
|
| `check readiness --emit-binding <slug>` | Render the exact stable Build-input binding for Vet to record after review. |
|
|
17
|
-
| `check seal <slug>` | Check
|
|
17
|
+
| `check seal <slug>` | Check files required by target Phase `seal`, open human gates, the stable Build-input binding, and exact candidate bindings. |
|
|
18
18
|
| `state resolve <qid> "<answer>"` | Resolve an open question and update `questions.md` plus `state.md` atomically. |
|
|
19
19
|
| `state close <slug>` | Archive a shipped workspace and clear matching `ACTIVE`. |
|
|
20
20
|
| `secret-scan [--staged] [--stdin] [slug]` | Scan exact staged blobs, stdin, or touched regular files for credential material. |
|
|
@@ -29,10 +29,12 @@ not to the engine command namespace.
|
|
|
29
29
|
## Check boundary
|
|
30
30
|
|
|
31
31
|
The candidate gate validates and hashes path/state/type/mode/content identity;
|
|
32
|
-
it does not infer scope from Git. The readiness gate checks
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
32
|
+
it does not infer scope from Git. The readiness gate checks target-Phase
|
|
33
|
+
structure and applies open-question blocking only when that target is Clarify
|
|
34
|
+
or later, plus the exact stable Build-input binding after Vet. The seal gate
|
|
35
|
+
always targets Phase `seal`, repeats that binding, and checks exact candidate
|
|
36
|
+
bindings in evidence, optional browser evidence, review, and seal. None judges
|
|
37
|
+
the meaning of `CLEAR`/`READY` prose,
|
|
36
38
|
parses reviewer narratives, infers acceptance coverage, counts assertions,
|
|
37
39
|
interprets capability deltas, or decides whether a technical plan is sound.
|
|
38
40
|
|
|
@@ -104,6 +106,63 @@ ambient Git state. Ordinary readiness and Seal require that exact standalone
|
|
|
104
106
|
line in `eng-review.md`; stale input returns
|
|
105
107
|
`reason: DRV-GATE-READINESS-STALE` and routes through `/rite-vet`.
|
|
106
108
|
|
|
109
|
+
### Workspace observation diagnostics
|
|
110
|
+
|
|
111
|
+
Lifecycle checks acquire the fixed workspace Markdown inventory once. Each
|
|
112
|
+
artifact is classified as `absent`, `empty`, `malformed`, `unsafe`,
|
|
113
|
+
`unreadable`, or `present`. Retained content is limited to 1 MiB per file and
|
|
114
|
+
8 MiB aggregate. Diagnostic lines use this exact shape:
|
|
115
|
+
`artifact: <logical-path>: <state> (<code>)`.
|
|
116
|
+
|
|
117
|
+
The closed diagnostic codes and recoveries are:
|
|
118
|
+
|
|
119
|
+
| Code | Exact Gate recovery | Exact standalone readiness-binding payload |
|
|
120
|
+
|---|---|---|
|
|
121
|
+
| `malformed_markdown` | `next: repair <logical-path>: replace invalid Markdown with valid Markdown; required artifacts need substantive content` | `readiness input <logical-path> is malformed (malformed_markdown); replace invalid Markdown with valid Markdown` |
|
|
122
|
+
| `parent_symlink` | `next: repair <logical-path>: replace the symlinked parent with a real directory` | `readiness input <logical-path> is unsafe (parent_symlink); replace the symlinked parent with a real directory` |
|
|
123
|
+
| `final_symlink` | `next: repair <logical-path>: replace the symlink with a regular file` | `readiness input <logical-path> is unsafe (final_symlink); replace the symlink with a regular file` |
|
|
124
|
+
| `non_regular` | `next: repair <logical-path>: replace the non-regular entry with a regular file` | `readiness input <logical-path> is unsafe (non_regular); replace the non-regular entry with a regular file` |
|
|
125
|
+
| `file_too_large` | `next: repair <logical-path>: reduce the file to at most 1 MiB` | `readiness input <logical-path> is unsafe (file_too_large); reduce the file to at most 1 MiB` |
|
|
126
|
+
| `permission_denied` | `next: repair <logical-path>: grant read permission` | `readiness input <logical-path> is unreadable (permission_denied); grant read permission` |
|
|
127
|
+
| `read_failure` | `next: repair <logical-path>: restore a readable regular file` | `readiness input <logical-path> is unreadable (read_failure); restore a readable regular file` |
|
|
128
|
+
|
|
129
|
+
The Gate recovery column remains exact for target-policy-required artifacts. For
|
|
130
|
+
a selected optional readiness input, the same code-specific repair appends
|
|
131
|
+
`; optional readiness input may instead be removed` and does not call the input
|
|
132
|
+
required.
|
|
133
|
+
|
|
134
|
+
These seven codes are the closed Workspace Observation classification and
|
|
135
|
+
recovery mapping outcomes. A selected public consumer emits only a code
|
|
136
|
+
reachable for its consumed fixed logical path. Invalid workspace ancestry is
|
|
137
|
+
`workspace_invalid`, not an artifact `parent_symlink` diagnostic.
|
|
138
|
+
|
|
139
|
+
Status emits diagnostics without recovery or `next:` lines, after section rows
|
|
140
|
+
and before `result`. Gate emits diagnostics after `reason` and before recovery,
|
|
141
|
+
`invariant`, and `retry` lines. Generic add-content recovery applies only to
|
|
142
|
+
absent or empty target-required artifacts. Standalone readiness-binding
|
|
143
|
+
failures use the existing `readiness-binding: BLOCKED:` prefix and the logical
|
|
144
|
+
readiness-input state/code plus recovery; they never disclose physical paths or
|
|
145
|
+
content.
|
|
146
|
+
|
|
147
|
+
Whole observation failures are `workspace_invalid`, `aggregate_too_large`, and
|
|
148
|
+
`concurrent_change`. Their disclosure-safe payloads are exact:
|
|
149
|
+
|
|
150
|
+
- `workspace observation: workspace_invalid: workspace is unavailable; verify the selected logical workspace and canonical workspace override, then retry`
|
|
151
|
+
- `workspace observation: aggregate_too_large: retained content exceeds the 8 MiB aggregate limit; reduce retained Markdown below 8 MiB, then retry`
|
|
152
|
+
- `workspace observation: concurrent_change: workspace changed during acquisition; retry`
|
|
153
|
+
|
|
154
|
+
An absent or empty `state.md` appends `add real content to state.md and retry` to
|
|
155
|
+
the existing logical error. A malformed, unsafe, or unreadable `state.md`
|
|
156
|
+
appends `repair state.md and retry`. A ledger without a phase appends `record
|
|
157
|
+
phase in state.md and retry`; an unknown phase appends `record a known phase in
|
|
158
|
+
state.md and retry`.
|
|
159
|
+
|
|
160
|
+
Whole observation failures use stderr, exit `2`, and no lifecycle result or
|
|
161
|
+
reason on stdout. Standalone readiness-binding failures use one stderr line,
|
|
162
|
+
exit `3`, and empty stdout. Per-artifact lifecycle blocks keep existing reason
|
|
163
|
+
IDs and stdout exit `3`; successful checks keep stdout exit `0`. Seal evidence
|
|
164
|
+
freshness still runs separately after a successful Seal gate.
|
|
165
|
+
|
|
107
166
|
- `0`: passed or completed.
|
|
108
167
|
- `2`: common invalid request or unreadable-state result.
|
|
109
168
|
- `3`: common deterministic lifecycle or safety block.
|
package/docs/flow.md
CHANGED
|
@@ -375,7 +375,7 @@ separately by `disable-model-invocation`.
|
|
|
375
375
|
|
|
376
376
|
```mermaid
|
|
377
377
|
flowchart TB
|
|
378
|
-
subgraph Public["Public (user-invocable: true):
|
|
378
|
+
subgraph Public["Public (user-invocable: true): 33 skills"]
|
|
379
379
|
direction TB
|
|
380
380
|
R1[/rite/]
|
|
381
381
|
R2[/rite-spec/]
|
|
@@ -405,6 +405,7 @@ flowchart TB
|
|
|
405
405
|
RDO[/rite-dogfood/]
|
|
406
406
|
RPOV[/rite-pov/]
|
|
407
407
|
RPF[/rite-pr-feedback/]
|
|
408
|
+
RWP[/rite-watch-pr/]
|
|
408
409
|
IPT[/rite-pressure-test/]
|
|
409
410
|
D1[/rite-zoom-out/]
|
|
410
411
|
D2[/rite-prototype/]
|
package/docs/orchestration.md
CHANGED
|
@@ -28,8 +28,9 @@ root reconciles semantics; engine checks deterministic structure/state/safety
|
|
|
28
28
|
workspace-capable for its writer child to execute.
|
|
29
29
|
- The role catalog has one source/test writer, `devrites-slice-wright`. Claude
|
|
30
30
|
and Codex make only that exact specialist writable.
|
|
31
|
-
- Leaves never invoke leaves, ask the human, change phase,
|
|
32
|
-
|
|
31
|
+
- Leaves never invoke leaves, ask the human, change phase, push, deploy, migrate live
|
|
32
|
+
data, or write canonical workflow state. Only an eligible isolated-worktree wright
|
|
33
|
+
may create one local unpushed transfer commit; same-worktree leaves never commit.
|
|
33
34
|
|
|
34
35
|
Skills name the exact role and bounded task in normal language. The host owns
|
|
35
36
|
internal spawn fields, scheduling, waiting, follow-ups, and result delivery.
|
|
@@ -65,6 +66,35 @@ sibling cannot erase it.
|
|
|
65
66
|
An evidenced clean result is valid. Reviewers must account for their rubric and
|
|
66
67
|
inspected scope, but they never manufacture a finding to fill a quota.
|
|
67
68
|
|
|
69
|
+
## Read-only Claude workflow pilot
|
|
70
|
+
|
|
71
|
+
Claude installs `.claude/workflows/devrites-readonly-review.js` as an optional
|
|
72
|
+
adapter for immutable-candidate discovery, four independent reviewer roles, one
|
|
73
|
+
adversarial verification pass, and a completeness check. Its script owns only
|
|
74
|
+
transient fan-out and intermediate results. It cannot write source, tests,
|
|
75
|
+
`.devrites/**`, Git, proof, lifecycle state, or shared services; it never invokes
|
|
76
|
+
`devrites-slice-wright`.
|
|
77
|
+
|
|
78
|
+
The caller still admits every returned role result under the normal result-closure
|
|
79
|
+
contract and performs final reconciliation. A workflow timeout, missing role,
|
|
80
|
+
malformed result, unread input, or incomplete verification is a gap. The adapter does
|
|
81
|
+
not replace `/rite-review`, alter required rosters, or create another durable state
|
|
82
|
+
plane.
|
|
83
|
+
|
|
84
|
+
Codex keeps the same portable skill/agent semantics through native agent dispatch and
|
|
85
|
+
has no fake workflow mirror. Provider parity applies to review meaning and evidence,
|
|
86
|
+
not to this optional Claude orchestration optimization. Use the pilot only when an
|
|
87
|
+
immutable candidate already exists; lifecycle writes, proof execution, human gates,
|
|
88
|
+
and final decisions remain with the rite root.
|
|
89
|
+
|
|
90
|
+
Host capabilities are admitted independently. Codex CLI agent threads and inherited
|
|
91
|
+
sandboxes establish context/permission separation, not filesystem worktree isolation;
|
|
92
|
+
without an explicit named-agent worktree and reconciliation interface, Codex uses the
|
|
93
|
+
serial same-worktree writer. Likewise, goals or hooks do not prove native time/event
|
|
94
|
+
activation. Unsupported activation remains `unavailable` rather than being emulated by
|
|
95
|
+
a DevRites scheduler or shell loop. The claim-bounded acceptance rows live in
|
|
96
|
+
[`codex-acceptance.json`](../evals/native-host/codex-acceptance.json).
|
|
97
|
+
|
|
68
98
|
## Slice-wright lifecycle
|
|
69
99
|
|
|
70
100
|
For Claude or Codex, the root states the smallest exact project-relative source
|
|
@@ -86,8 +116,19 @@ symlink escapes, duplicates, and `.devrites/**` are invalid.
|
|
|
86
116
|
Exact-path scope is instruction-backed on both hosts; native sandboxes provide
|
|
87
117
|
the broader writer/read-only split. An unauthorized delta is rejected and the
|
|
88
118
|
same bounded writer must restore it before work continues. The root never
|
|
89
|
-
widens the contract or rewrites source.
|
|
90
|
-
|
|
119
|
+
widens the contract or rewrites source.
|
|
120
|
+
|
|
121
|
+
A serial native-worktree pilot may isolate `devrites-slice-wright` when the candidate
|
|
122
|
+
baseline is committed and clean, the repository is not a submodule child, baseline
|
|
123
|
+
proof is green, and the host exposes explicit result reconciliation. The wright
|
|
124
|
+
returns one local unpushed transfer commit; root proves its exact paths and unchanged
|
|
125
|
+
base before native transfer, then re-proves the reconciled candidate. Missing transfer,
|
|
126
|
+
conflict, extra paths, moved base, or cleanup failure stops with worktree evidence
|
|
127
|
+
preserved. No ad hoc copy/cherry-pick/merge occurs from the read-only root.
|
|
128
|
+
|
|
129
|
+
Isolation does not authorize throughput. At most one writer runs across all linked
|
|
130
|
+
worktrees for the workspace; parallel writers remain forbidden until serial transfer,
|
|
131
|
+
conflict, proof, and review measurements justify a separate design.
|
|
91
132
|
|
|
92
133
|
## Engine boundary
|
|
93
134
|
|
package/docs/skills.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
# All
|
|
1
|
+
# All 44 skills
|
|
2
2
|
|
|
3
|
-
The pack contains
|
|
3
|
+
The pack contains 44 skills: the `rite` menu, 32 user-invocable `rite-*`
|
|
4
4
|
workflow and utility skills, 10 model-invoked `devrites-*` specialists, and the
|
|
5
5
|
internal `devrites-lib` library. `devrites-lib` is not a command. It holds shared
|
|
6
6
|
references and the few explicit script exceptions.
|
|
@@ -37,7 +37,7 @@ contract when a rite names parallel reviewers.
|
|
|
37
37
|
|
|
38
38
|
`rite-*` is the namespace for lifecycle and utility commands. Its utilities are
|
|
39
39
|
`rite-quick`, `rite-frame`, `rite-adopt`, `rite-learn`, `rite-customize`,
|
|
40
|
-
`rite-explain`, `rite-pov`, `rite-dogfood`, `rite-pr-feedback`, `rite-doctor`,
|
|
40
|
+
`rite-explain`, `rite-pov`, `rite-dogfood`, `rite-pr-feedback`, `rite-watch-pr`, `rite-doctor`,
|
|
41
41
|
`rite-upgrade`, `rite-prototype`, `rite-handoff`, `rite-zoom-out`, and
|
|
42
42
|
`rite-pressure-test`.
|
|
43
43
|
Some specialized utilities set `disable-model-invocation: true` and run only
|
|
@@ -231,6 +231,7 @@ and `Shipped`. Utility commands keep the same compact labels and one-next-action
|
|
|
231
231
|
| [`rite-pov`](../pack/.claude/skills/rite-pov/SKILL.md) | Project-grounded verdict on a named external option: adopt / trial / hold / reject / not-our-problem after project + external floors clear. | "should we adopt X", "switch to Y", CVE/deprecation relevance, bounded external comparisons. |
|
|
232
232
|
| [`rite-dogfood`](../pack/.claude/skills/rite-dogfood/SKILL.md) | Diff-scoped browser QA: map changed user journeys, run scenario matrix, fix small obvious breakages, write `dogfood.md`. | Explicit-only after prove/polish/review when browser UX confidence matters. |
|
|
233
233
|
| [`rite-pr-feedback`](../pack/.claude/skills/rite-pr-feedback/SKILL.md) | Resolve PR review feedback: fetch unresolved threads, judge centrally, fix valid items, reply, resolve. | Explicit-only: `/rite-pr-feedback` / `/rite pr-feedback`. |
|
|
234
|
+
| [`rite-watch-pr`](../pack/.claude/skills/rite-watch-pr/SKILL.md) | Observe one PR/CI/review snapshot and report one next action without mutation. | Read-only capability-admitted native schedule/event observation or `/rite-watch-pr`. |
|
|
234
235
|
|
|
235
236
|
### Foundation: engineering rules
|
|
236
237
|
|
package/engine/go.mod
CHANGED
|
@@ -13,10 +13,11 @@ import (
|
|
|
13
13
|
const (
|
|
14
14
|
DevritesRootName = ".devrites"
|
|
15
15
|
|
|
16
|
-
ClaudeSkillsTarget
|
|
17
|
-
CodexSkillsTarget
|
|
18
|
-
ClaudeAgentsTarget
|
|
19
|
-
CodexAgentsTarget
|
|
16
|
+
ClaudeSkillsTarget = ".claude/skills"
|
|
17
|
+
CodexSkillsTarget = ".agents/skills"
|
|
18
|
+
ClaudeAgentsTarget = ".claude/agents"
|
|
19
|
+
CodexAgentsTarget = ".codex/agents"
|
|
20
|
+
ClaudeWorkflowsTarget = ".claude/workflows"
|
|
20
21
|
|
|
21
22
|
ManifestName = ".claude/devrites.manifest"
|
|
22
23
|
)
|
|
@@ -6,11 +6,8 @@ package gate
|
|
|
6
6
|
|
|
7
7
|
import (
|
|
8
8
|
"fmt"
|
|
9
|
-
"os"
|
|
10
|
-
"path/filepath"
|
|
11
9
|
"strings"
|
|
12
10
|
|
|
13
|
-
"github.com/devrites/devrites/internal/devritespaths"
|
|
14
11
|
"github.com/devrites/devrites/internal/reason"
|
|
15
12
|
"github.com/devrites/devrites/internal/state"
|
|
16
13
|
)
|
|
@@ -27,50 +24,82 @@ const (
|
|
|
27
24
|
Seal Kind = "seal"
|
|
28
25
|
)
|
|
29
26
|
|
|
30
|
-
// Result is a gate outcome. Blocked is true iff a
|
|
31
|
-
//
|
|
27
|
+
// Result is a gate outcome. Blocked is true iff a deterministic requirement
|
|
28
|
+
// failed; missing files and diagnostics retain their canonical policy order.
|
|
32
29
|
type Result struct {
|
|
33
|
-
Kind
|
|
34
|
-
Slug
|
|
35
|
-
Phase
|
|
36
|
-
Target
|
|
37
|
-
Missing
|
|
38
|
-
MissingFiles
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
30
|
+
Kind Kind
|
|
31
|
+
Slug string
|
|
32
|
+
Phase state.Phase
|
|
33
|
+
Target state.Phase
|
|
34
|
+
Missing []state.Section
|
|
35
|
+
MissingFiles []string
|
|
36
|
+
Diagnostics []state.ArtifactDiagnostic
|
|
37
|
+
AddContentFiles []string
|
|
38
|
+
StateProblems []string
|
|
39
|
+
Blocked bool
|
|
40
|
+
ReasonID reason.ID
|
|
42
41
|
}
|
|
43
42
|
|
|
44
|
-
// Check runs a gate against feature <slug> under root.
|
|
45
|
-
//
|
|
46
|
-
// return errors; missing required content returns a blocked Result.
|
|
43
|
+
// Check runs a gate against feature <slug> under root. One workspace observation
|
|
44
|
+
// supplies every lifecycle, question, and readiness fact used by the result.
|
|
47
45
|
func Check(kind Kind, root, slug string) (*Result, error) {
|
|
48
|
-
|
|
46
|
+
observation, err := state.ObserveWorkspace(root, slug)
|
|
49
47
|
if err != nil {
|
|
50
48
|
return nil, fmt.Errorf("gate %s: %w", kind, err)
|
|
51
49
|
}
|
|
52
|
-
|
|
50
|
+
result, err := checkObservation(kind, observation)
|
|
51
|
+
if err != nil {
|
|
52
|
+
return nil, fmt.Errorf("gate %s: %w", kind, err)
|
|
53
|
+
}
|
|
54
|
+
return result, nil
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
func checkObservation(kind Kind, observation *state.WorkspaceObservation) (*Result, error) {
|
|
58
|
+
phase, err := observation.DeclaredPhase()
|
|
59
|
+
if err != nil {
|
|
60
|
+
return nil, err
|
|
61
|
+
}
|
|
62
|
+
target := phase
|
|
53
63
|
if kind == Seal {
|
|
54
64
|
target = state.PhaseSeal
|
|
55
65
|
}
|
|
56
|
-
|
|
57
|
-
|
|
66
|
+
policy, ok := state.PolicyFor(target)
|
|
67
|
+
if !ok {
|
|
68
|
+
return nil, fmt.Errorf("unknown target phase %q", target)
|
|
69
|
+
}
|
|
70
|
+
target = policy.Target
|
|
71
|
+
|
|
72
|
+
missing := missingSections(observation, policy.RequiredSections)
|
|
73
|
+
missingArtifacts, diagnostics := observation.Missing(policy.RequiredArtifacts)
|
|
74
|
+
missingFiles := make([]string, len(missingArtifacts))
|
|
75
|
+
var addContentFiles []string
|
|
76
|
+
for i, artifact := range missingArtifacts {
|
|
77
|
+
missingFiles[i] = string(artifact)
|
|
78
|
+
fact, ok := observation.Fact(artifact)
|
|
79
|
+
if ok && (fact.State() == state.ArtifactAbsent || fact.State() == state.ArtifactEmpty) {
|
|
80
|
+
addContentFiles = append(addContentFiles, string(artifact))
|
|
81
|
+
}
|
|
82
|
+
}
|
|
58
83
|
blocked := len(missingFiles) > 0
|
|
59
84
|
readinessStale := false
|
|
60
85
|
var stateProblems []string
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
if
|
|
64
|
-
problem
|
|
86
|
+
|
|
87
|
+
if policy.BlocksOpenQuestions {
|
|
88
|
+
if gates, awaitingHuman := retainedHumanGates(observation); len(gates) > 0 {
|
|
89
|
+
problem := fmt.Sprintf("open %s human question(s) remain in questions.md", strings.Join(gates, "/"))
|
|
90
|
+
if !awaitingHuman {
|
|
91
|
+
problem += " but state.md is not awaiting_human"
|
|
92
|
+
}
|
|
93
|
+
stateProblems = append(stateProblems, problem)
|
|
94
|
+
blocked = true
|
|
65
95
|
}
|
|
66
|
-
stateProblems = append(stateProblems, problem)
|
|
67
|
-
blocked = true
|
|
68
96
|
}
|
|
69
|
-
if len(missingFiles) == 0 && phaseRequiresReadinessBinding(
|
|
70
|
-
expected, bindingErr := verifyReadinessBinding(
|
|
97
|
+
if len(missingFiles) == 0 && phaseRequiresReadinessBinding(policy) {
|
|
98
|
+
expected, bindingErr := verifyReadinessBinding(observation)
|
|
71
99
|
if bindingErr != nil {
|
|
72
100
|
readinessStale = true
|
|
73
101
|
blocked = true
|
|
102
|
+
diagnostics = append(diagnostics, readinessDiagnostics(observation)...)
|
|
74
103
|
if expected == "" {
|
|
75
104
|
stateProblems = append(stateProblems, bindingErr.Error()+"; repair the input and rerun /rite-vet")
|
|
76
105
|
} else {
|
|
@@ -78,15 +107,18 @@ func Check(kind Kind, root, slug string) (*Result, error) {
|
|
|
78
107
|
}
|
|
79
108
|
}
|
|
80
109
|
}
|
|
110
|
+
|
|
81
111
|
result := &Result{
|
|
82
|
-
Kind:
|
|
83
|
-
Slug:
|
|
84
|
-
Phase:
|
|
85
|
-
Target:
|
|
86
|
-
Missing:
|
|
87
|
-
MissingFiles:
|
|
88
|
-
|
|
89
|
-
|
|
112
|
+
Kind: kind,
|
|
113
|
+
Slug: observation.Slug(),
|
|
114
|
+
Phase: phase,
|
|
115
|
+
Target: target,
|
|
116
|
+
Missing: missing,
|
|
117
|
+
MissingFiles: missingFiles,
|
|
118
|
+
Diagnostics: diagnostics,
|
|
119
|
+
AddContentFiles: addContentFiles,
|
|
120
|
+
StateProblems: stateProblems,
|
|
121
|
+
Blocked: blocked,
|
|
90
122
|
}
|
|
91
123
|
result.ReasonID = ResultReasonID(kind, blocked)
|
|
92
124
|
if readinessStale {
|
|
@@ -95,6 +127,24 @@ func Check(kind Kind, root, slug string) (*Result, error) {
|
|
|
95
127
|
return result, nil
|
|
96
128
|
}
|
|
97
129
|
|
|
130
|
+
func missingSections(observation *state.WorkspaceObservation, required []state.Section) []state.Section {
|
|
131
|
+
var missing []state.Section
|
|
132
|
+
for _, section := range required {
|
|
133
|
+
artifact := state.ArtifactPath(string(section) + ".md")
|
|
134
|
+
switch section {
|
|
135
|
+
case state.SectionProof:
|
|
136
|
+
artifact = state.EvidenceFile
|
|
137
|
+
case state.SectionStatus:
|
|
138
|
+
artifact = state.LedgerFile
|
|
139
|
+
}
|
|
140
|
+
fact, ok := observation.Fact(artifact)
|
|
141
|
+
if !ok || fact.State() != state.ArtifactPresent {
|
|
142
|
+
missing = append(missing, section)
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
return missing
|
|
146
|
+
}
|
|
147
|
+
|
|
98
148
|
// ResultReasonID returns the typed outcome owned by the lifecycle gate.
|
|
99
149
|
func ResultReasonID(kind Kind, blocked bool) reason.ID {
|
|
100
150
|
switch kind {
|
|
@@ -114,7 +164,7 @@ func ResultReasonID(kind Kind, blocked bool) reason.ID {
|
|
|
114
164
|
}
|
|
115
165
|
|
|
116
166
|
// Render returns stable, greppable output with a trailing newline. A blocked
|
|
117
|
-
// result names
|
|
167
|
+
// result names missing files, selected diagnostics, recovery, and the retry.
|
|
118
168
|
func (r *Result) Render() string {
|
|
119
169
|
var b strings.Builder
|
|
120
170
|
fmt.Fprintf(&b, "gate: %s\n", r.Kind)
|
|
@@ -135,8 +185,17 @@ func (r *Result) Render() string {
|
|
|
135
185
|
fmt.Fprintf(&b, "result: blocked (missing to leave %q: %s)\n", r.Phase, strings.Join(missing, ", "))
|
|
136
186
|
}
|
|
137
187
|
fmt.Fprintf(&b, "reason: %s\n", r.ReasonID)
|
|
138
|
-
|
|
139
|
-
fmt.Fprintf(&b, "
|
|
188
|
+
for _, diagnostic := range r.Diagnostics {
|
|
189
|
+
fmt.Fprintf(&b, "artifact: %s: %s (%s)\n", diagnostic.Path, diagnostic.State, diagnostic.Code)
|
|
190
|
+
}
|
|
191
|
+
if len(r.AddContentFiles) > 0 {
|
|
192
|
+
fmt.Fprintf(&b, "next: add real content to %s\n", strings.Join(r.AddContentFiles, ", "))
|
|
193
|
+
}
|
|
194
|
+
for _, diagnostic := range r.Diagnostics {
|
|
195
|
+
if recovery := diagnosticRecovery(diagnostic, targetRequiresArtifact(r.Target, diagnostic.Path)); recovery != "" {
|
|
196
|
+
b.WriteString(recovery)
|
|
197
|
+
b.WriteByte('\n')
|
|
198
|
+
}
|
|
140
199
|
}
|
|
141
200
|
for _, problem := range r.StateProblems {
|
|
142
201
|
fmt.Fprintf(&b, "invariant: %s\n", problem)
|
|
@@ -145,19 +204,68 @@ func (r *Result) Render() string {
|
|
|
145
204
|
return b.String()
|
|
146
205
|
}
|
|
147
206
|
|
|
207
|
+
func diagnosticRecovery(diagnostic state.ArtifactDiagnostic, required bool) string {
|
|
208
|
+
prefix := fmt.Sprintf("next: repair %s: ", diagnostic.Path)
|
|
209
|
+
repair := diagnosticRepair(diagnostic.Code)
|
|
210
|
+
if repair == "" {
|
|
211
|
+
return ""
|
|
212
|
+
}
|
|
213
|
+
if required && diagnostic.Code == state.DiagnosticMalformedMarkdown {
|
|
214
|
+
repair += "; required artifacts need substantive content"
|
|
215
|
+
}
|
|
216
|
+
if !required {
|
|
217
|
+
repair += "; optional readiness input may instead be removed"
|
|
218
|
+
}
|
|
219
|
+
return prefix + repair
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
func targetRequiresArtifact(target state.Phase, path state.ArtifactPath) bool {
|
|
223
|
+
policy, ok := state.PolicyFor(target)
|
|
224
|
+
if !ok {
|
|
225
|
+
return false
|
|
226
|
+
}
|
|
227
|
+
for _, required := range policy.RequiredArtifacts {
|
|
228
|
+
if required == path {
|
|
229
|
+
return true
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
return false
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
func diagnosticRepair(code state.DiagnosticCode) string {
|
|
236
|
+
switch code {
|
|
237
|
+
case state.DiagnosticMalformedMarkdown:
|
|
238
|
+
return "replace invalid Markdown with valid Markdown"
|
|
239
|
+
case state.DiagnosticParentSymlink:
|
|
240
|
+
return "replace the symlinked parent with a real directory"
|
|
241
|
+
case state.DiagnosticFinalSymlink:
|
|
242
|
+
return "replace the symlink with a regular file"
|
|
243
|
+
case state.DiagnosticNonRegular:
|
|
244
|
+
return "replace the non-regular entry with a regular file"
|
|
245
|
+
case state.DiagnosticFileTooLarge:
|
|
246
|
+
return "reduce the file to at most 1 MiB"
|
|
247
|
+
case state.DiagnosticPermissionDenied:
|
|
248
|
+
return "grant read permission"
|
|
249
|
+
case state.DiagnosticReadFailure:
|
|
250
|
+
return "restore a readable regular file"
|
|
251
|
+
default:
|
|
252
|
+
return ""
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
|
|
148
256
|
const gateSpaceChars = " \t\n\v\f\r"
|
|
149
257
|
|
|
150
|
-
func
|
|
151
|
-
|
|
152
|
-
if
|
|
258
|
+
func retainedHumanGates(observation *state.WorkspaceObservation) ([]string, bool) {
|
|
259
|
+
questions, ok := observation.Fact("questions.md")
|
|
260
|
+
if !ok || (questions.State() != state.ArtifactPresent && questions.State() != state.ArtifactEmpty) {
|
|
153
261
|
return nil, false
|
|
154
262
|
}
|
|
155
|
-
gates := openBlockingQuestionGates(
|
|
263
|
+
gates := openBlockingQuestionGates(questions.Bytes())
|
|
156
264
|
if len(gates) == 0 {
|
|
157
265
|
return nil, false
|
|
158
266
|
}
|
|
159
|
-
|
|
160
|
-
return gates,
|
|
267
|
+
ledger, ok := observation.Fact(state.LedgerFile)
|
|
268
|
+
return gates, ok && ledger.State() == state.ArtifactPresent && stateAwaitingHuman(ledger.Bytes())
|
|
161
269
|
}
|
|
162
270
|
|
|
163
271
|
func openBlockingQuestionGates(data []byte) []string {
|