devrites 3.0.7 → 3.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 +18 -0
- package/README.md +82 -50
- package/SECURITY.md +31 -29
- package/docs/adr/0001-go-engine-as-control-plane.md +1 -1
- package/docs/adr/0002-dual-host-harness.md +1 -1
- package/docs/adr/0004-state-schema-phases-sections.md +1 -2
- package/docs/adr/0006-clock-seam-and-engine-ci-gates.md +3 -4
- package/docs/adr/0009-prebuild-decision-coverage-and-readiness.md +67 -0
- package/docs/adr/0010-agent-first-fresh-context-orchestration.md +71 -0
- package/docs/adr/0011-define-plan-transition-rights.md +28 -0
- package/docs/adr/0012-semantic-workspace-upgrades.md +77 -0
- package/docs/adr/README.md +4 -0
- package/docs/agents/triage-labels.md +7 -7
- package/docs/architecture.md +179 -141
- package/docs/cli.md +47 -12
- package/docs/command-map.md +61 -38
- package/docs/engine/agent-contract.md +92 -15
- package/docs/engine/commands.md +248 -72
- package/docs/engine/state-schema.md +52 -23
- package/docs/engine/workspace-schema.md +103 -15
- package/docs/extensions.md +1 -1
- package/docs/flow.md +86 -51
- package/docs/harness-compliance.md +29 -5
- package/docs/orchestration.md +107 -79
- package/docs/quick-reference.md +11 -3
- package/docs/release.md +4 -3
- package/docs/skills.md +67 -38
- package/docs/usage.md +84 -39
- package/engine/cmd/releasepack/main.go +219 -0
- package/engine/cmd/releasepack/main_test.go +170 -0
- package/engine/commands.go +170 -23
- package/engine/git_guard.go +187 -0
- package/engine/git_guard_test.go +283 -0
- package/engine/hookpolicy.go +53 -55
- package/engine/hookpolicy_test.go +91 -1
- package/engine/hooks.go +296 -75
- package/engine/hooks_events_test.go +276 -6
- package/engine/hooks_workspace.go +640 -159
- package/engine/internal/devritespaths/paths.go +65 -10
- package/engine/internal/devritespaths/paths_test.go +110 -0
- package/engine/internal/doctor/doctor.go +153 -23
- package/engine/internal/doctor/doctor_test.go +74 -0
- package/engine/internal/forge/forge.go +940 -0
- package/engine/internal/forge/forge_test.go +576 -0
- package/engine/internal/forge/git.go +245 -0
- package/engine/internal/forge/liveness_unix.go +48 -0
- package/engine/internal/forge/liveness_windows.go +67 -0
- package/engine/internal/forge/manifest.go +402 -0
- package/engine/internal/gate/gate.go +90 -71
- package/engine/internal/gate/gate_test.go +71 -2
- package/engine/internal/harness/compliance.go +18 -24
- package/engine/internal/harness/harness.go +37 -44
- package/engine/internal/harness/harness_test.go +21 -5
- package/engine/internal/install/install.go +486 -38
- package/engine/internal/install/install_test.go +383 -10
- package/engine/internal/iohooks/iohooks.go +350 -59
- package/engine/internal/iohooks/iohooks_test.go +421 -1
- package/engine/internal/lib/buildreadiness.go +43 -18
- package/engine/internal/lib/clarifyreturn.go +91 -0
- package/engine/internal/lib/clarifyreturn_test.go +123 -0
- package/engine/internal/lib/context.go +54 -15
- package/engine/internal/lib/cursor_compat_test.go +8 -0
- package/engine/internal/lib/extensions.go +2 -3
- package/engine/internal/lib/gitauthority.go +601 -0
- package/engine/internal/lib/gitauthority_test.go +346 -0
- package/engine/internal/lib/jsonout.go +25 -11
- package/engine/internal/lib/jsonout_test.go +16 -0
- package/engine/internal/lib/lanes.go +14 -8
- package/engine/internal/lib/observability_test.go +358 -0
- package/engine/internal/lib/packageexistence.go +151 -35
- package/engine/internal/lib/packageexistence_test.go +163 -0
- package/engine/internal/lib/progress.go +11 -9
- package/engine/internal/lib/provenance.go +462 -0
- package/engine/internal/lib/provenance_test.go +154 -0
- package/engine/internal/lib/readiness_contract.json +118 -0
- package/engine/internal/lib/readinessartifact.go +533 -0
- package/engine/internal/lib/readinessartifact_test.go +422 -0
- package/engine/internal/lib/reconcile.go +712 -88
- package/engine/internal/lib/reconcile_test.go +335 -16
- package/engine/internal/lib/recoveryattempts.go +298 -0
- package/engine/internal/lib/recoveryattempts_test.go +215 -0
- package/engine/internal/lib/resolve.go +23 -19
- package/engine/internal/lib/runbook_context_test.go +20 -0
- package/engine/internal/lib/session.go +701 -9
- package/engine/internal/lib/session_test.go +80 -13
- package/engine/internal/lib/testintegrity.go +33 -37
- package/engine/internal/lib/testintegrity_test.go +63 -1
- package/engine/internal/migrate/migrate.go +81 -1
- package/engine/internal/migrate/migrate_test.go +22 -1
- package/engine/internal/reason/reason.go +180 -0
- package/engine/internal/reason/reason_test.go +35 -0
- package/engine/internal/rootfacts/facts.go +466 -0
- package/engine/internal/rootfacts/facts_test.go +306 -0
- package/engine/internal/safepath/safepath.go +55 -0
- package/engine/internal/safepath/safepath_test.go +69 -0
- package/engine/internal/safepath/safepath_windows_test.go +26 -0
- package/engine/internal/state/clarify_transition.go +165 -0
- package/engine/internal/state/clarify_transition_test.go +130 -0
- package/engine/internal/state/cmd/workflowmanifest/main.go +12 -8
- package/engine/internal/state/cursor.go +58 -0
- package/engine/internal/state/cursor_test.go +42 -1
- package/engine/internal/state/feature.go +35 -48
- package/engine/internal/state/schema.go +90 -37
- package/engine/internal/state/snapshot.go +18 -2
- package/engine/internal/state/state_test.go +187 -7
- package/engine/internal/state/status.go +48 -11
- package/engine/internal/state/workflow_manifest.json +231 -50
- package/engine/internal/toolpolicy/classifier.go +533 -0
- package/engine/internal/toolpolicy/classifier_test.go +424 -0
- package/engine/internal/toolpolicy/git.go +616 -0
- package/engine/internal/toolpolicy/scanner.go +382 -0
- package/engine/main.go +160 -77
- package/engine/observability_cli_test.go +52 -0
- package/engine/root_routing_test.go +277 -0
- package/engine/testdata/golden/TestParityBuildReadiness/arg=approved.golden +1 -1
- package/engine/testdata/golden/TestParityBuildReadiness/arg=emptystatus.golden +1 -1
- package/engine/testdata/golden/TestParityBuildReadiness/arg=legacycontract.golden +1 -0
- package/engine/testdata/golden/TestParityBuildReadiness/arg=noclarify.golden +1 -0
- package/engine/testdata/golden/TestParityBuildReadiness/arg=novet.golden +1 -0
- package/engine/testdata/golden/TestParityBuildReadiness/arg=stalevet.golden +1 -0
- package/engine/testdata/golden/TestParityBuildReadiness/arg=trailhash.golden +1 -1
- package/engine/testdata/golden/TestParityBuildReadiness/arg=trailpipe.golden +1 -1
- package/engine/testdata/golden/TestParityBuildReadiness/arg=vetnotready.golden +1 -0
- package/engine/testdata/golden/TestParityProgress/arg=allbuilt.golden +1 -1
- package/engine/testdata/golden/TestParityProgress/arg=done.golden +1 -1
- package/engine/testdata/golden/TestParityProgress/arg=mid.golden +1 -1
- package/engine/testdata/golden/TestParityProgress/arg=nophase.golden +1 -1
- package/engine/testdata/golden/TestParityProgress/arg=noslice.golden +1 -1
- package/engine/testdata/golden/TestParityProgress/arg=plan.golden +1 -1
- package/engine/testdata/golden/TestParityProgress/arg=seal.golden +1 -1
- package/engine/testdata/golden/TestParityReconcile/check-clean.golden +1 -1
- package/engine/testdata/golden/TestParityReconcile/inline-fallback.golden +1 -0
- package/engine/testdata/golden/TestParityReconcile/snapshot-no-allowlist.golden +1 -0
- package/engine/testdata/golden/TestParityWrightScope/devrites-edit-denied.golden +2 -0
- package/engine/testdata/golden/TestParityWrightScope/out-of-scope-enforce-denies.golden +1 -1
- package/engine/tests/adr_0011_define_plan_test.go +30 -0
- package/engine/tests/budget_test.go +19 -8
- package/engine/tests/concurrency_cli_test.go +7 -1
- package/engine/tests/doctor_cli_test.go +148 -2
- package/engine/tests/forge_cli_test.go +463 -0
- package/engine/tests/gate_test.go +63 -8
- package/engine/tests/hook_test.go +260 -8
- package/engine/tests/hooks_io_test.go +94 -3
- package/engine/tests/json_contract_test.go +127 -2
- package/engine/tests/migrate_cli_test.go +2 -2
- package/engine/tests/parity_buildreadiness_test.go +167 -10
- package/engine/tests/parity_learnings_test.go +16 -17
- package/engine/tests/parity_reconcile_test.go +20 -17
- package/engine/tests/parity_resolve_test.go +12 -11
- package/engine/tests/parity_test.go +21 -17
- package/pack/.claude/agents/devrites-code-reviewer.md +62 -48
- package/pack/.claude/agents/devrites-devex-reviewer.md +69 -53
- package/pack/.claude/agents/devrites-doubt-reviewer.md +29 -22
- package/pack/.claude/agents/devrites-evidence-scout.md +69 -0
- package/pack/.claude/agents/devrites-forge-judge.md +74 -61
- package/pack/.claude/agents/devrites-frontend-reviewer.md +48 -39
- package/pack/.claude/agents/devrites-performance-reviewer.md +49 -40
- package/pack/.claude/agents/devrites-plan-drafter.md +73 -0
- package/pack/.claude/agents/devrites-plan-reviewer.md +80 -47
- package/pack/.claude/agents/devrites-proof-runner.md +74 -0
- package/pack/.claude/agents/devrites-retrospector.md +48 -45
- package/pack/.claude/agents/devrites-security-auditor.md +46 -36
- package/pack/.claude/agents/devrites-simplifier-reviewer.md +50 -46
- package/pack/.claude/agents/devrites-slice-wright.md +153 -165
- package/pack/.claude/agents/devrites-spec-reviewer.md +34 -32
- package/pack/.claude/agents/devrites-strategy-reviewer.md +63 -34
- package/pack/.claude/agents/devrites-test-analyst.md +40 -30
- package/pack/.claude/agents/devrites-upgrade-planner.md +100 -0
- package/pack/.claude/settings.json +2 -1
- package/pack/.claude/skills/devrites-audit/SKILL.md +40 -61
- package/pack/.claude/skills/devrites-debug-recovery/SKILL.md +24 -13
- package/pack/.claude/skills/devrites-debug-recovery/reference/build-the-loop.md +24 -21
- package/pack/.claude/skills/devrites-debug-recovery/reference/cleanup-and-classify.md +34 -6
- package/pack/.claude/skills/devrites-debug-recovery/reference/instrumentation.md +2 -2
- package/pack/.claude/skills/devrites-doubt/SKILL.md +25 -17
- package/pack/.claude/skills/devrites-interview/SKILL.md +53 -52
- package/pack/.claude/skills/devrites-lib/SKILL.md +12 -9
- package/pack/.claude/skills/devrites-lib/reference/intent-map.md +4 -2
- package/pack/.claude/skills/devrites-lib/reference/parallel-dispatch.md +82 -137
- package/pack/.claude/skills/devrites-lib/reference/reply-contract.md +8 -1
- package/pack/.claude/skills/devrites-lib/reference/standards/README.md +38 -55
- package/pack/.claude/skills/devrites-lib/reference/standards/afk-hitl.md +53 -27
- package/pack/.claude/skills/devrites-lib/reference/standards/agents.md +200 -190
- package/pack/.claude/skills/devrites-lib/reference/standards/anti-patterns.md +5 -15
- package/pack/.claude/skills/devrites-lib/reference/standards/ci-cd.md +27 -58
- package/pack/.claude/skills/devrites-lib/reference/standards/code-review.md +16 -52
- package/pack/.claude/skills/devrites-lib/reference/standards/coding-style.md +2 -10
- package/pack/.claude/skills/devrites-lib/reference/standards/context-hygiene.md +18 -61
- package/pack/.claude/skills/devrites-lib/reference/standards/core.md +23 -18
- package/pack/.claude/skills/devrites-lib/reference/standards/deprecation.md +17 -57
- package/pack/.claude/skills/devrites-lib/reference/standards/development-workflow.md +4 -33
- package/pack/.claude/skills/devrites-lib/reference/standards/git-workflow.md +4 -20
- package/pack/.claude/skills/devrites-lib/reference/standards/hooks.md +3 -14
- package/pack/.claude/skills/devrites-lib/reference/standards/patterns.md +9 -25
- package/pack/.claude/skills/devrites-lib/reference/standards/performance.md +0 -9
- package/pack/.claude/skills/devrites-lib/reference/standards/principles.md +1 -3
- package/pack/.claude/skills/devrites-lib/reference/standards/security.md +17 -7
- package/pack/.claude/skills/devrites-lib/reference/standards/testing.md +1 -27
- package/pack/.claude/skills/devrites-lib/reference/standards/tooling.md +46 -50
- package/pack/.claude/skills/devrites-lib/reference/workspace-artifact-schema.md +40 -10
- package/pack/.claude/skills/devrites-source-driven/SKILL.md +23 -22
- package/pack/.claude/skills/rite/SKILL.md +10 -6
- package/pack/.claude/skills/rite/reference/menu.md +13 -7
- package/pack/.claude/skills/rite-adopt/SKILL.md +33 -37
- package/pack/.claude/skills/rite-autocomplete/SKILL.md +33 -28
- package/pack/.claude/skills/rite-autocomplete/reference/loop.md +21 -21
- package/pack/.claude/skills/rite-autocomplete/reference/stop-conditions.md +15 -6
- package/pack/.claude/skills/rite-build/SKILL.md +35 -30
- package/pack/.claude/skills/rite-build/reference/afk-discipline.md +41 -39
- package/pack/.claude/skills/rite-build/reference/evidence-standard.md +10 -0
- package/pack/.claude/skills/rite-build/reference/forge.md +186 -156
- package/pack/.claude/skills/rite-build/reference/one-slice-cycle.md +4 -3
- package/pack/.claude/skills/rite-build/reference/phase-contract.md +96 -175
- package/pack/.claude/skills/rite-build/reference/spec-drift-guard.md +10 -4
- package/pack/.claude/skills/rite-build/reference/wright-dispatch.md +129 -134
- package/pack/.claude/skills/rite-clarify/SKILL.md +90 -0
- package/pack/.claude/skills/rite-clarify/reference/decision-coverage.md +61 -0
- package/pack/.claude/skills/rite-converge/SKILL.md +35 -25
- package/pack/.claude/skills/rite-define/SKILL.md +58 -32
- package/pack/.claude/skills/rite-define/reference/gates.md +16 -15
- package/pack/.claude/skills/rite-define/reference/plan-template.md +18 -8
- package/pack/.claude/skills/rite-frame/reference/failure-modes.md +22 -24
- package/pack/.claude/skills/rite-plan/SKILL.md +47 -16
- package/pack/.claude/skills/rite-plan/reference/task-breakdown.md +4 -0
- package/pack/.claude/skills/rite-polish/SKILL.md +27 -23
- package/pack/.claude/skills/rite-prototype/SKILL.md +25 -26
- package/pack/.claude/skills/rite-prove/SKILL.md +27 -17
- package/pack/.claude/skills/rite-resolve/SKILL.md +12 -11
- package/pack/.claude/skills/rite-resolve/reference/answer-protocol.md +3 -0
- package/pack/.claude/skills/rite-review/SKILL.md +37 -28
- package/pack/.claude/skills/rite-seal/reference/phase-contract.md +27 -92
- package/pack/.claude/skills/rite-seal/reference/risk-and-rollback.md +13 -0
- package/pack/.claude/skills/rite-ship/reference/design-memory.md +31 -36
- package/pack/.claude/skills/rite-spec/SKILL.md +84 -135
- package/pack/.claude/skills/rite-spec/reference/investigation.md +37 -33
- package/pack/.claude/skills/rite-spec/reference/question-protocol.md +6 -2
- package/pack/.claude/skills/rite-spec/reference/spec-checklists.md +25 -24
- package/pack/.claude/skills/rite-spec/reference/spec-template.md +9 -2
- package/pack/.claude/skills/rite-spec/reference/state-workspace.md +13 -3
- package/pack/.claude/skills/rite-temper/SKILL.md +62 -47
- package/pack/.claude/skills/rite-temper/reference/review-dimensions.md +24 -22
- package/pack/.claude/skills/rite-upgrade/SKILL.md +125 -0
- package/pack/.claude/skills/rite-vet/SKILL.md +114 -113
- package/pack/.claude/skills/rite-vet/reference/artifacts.md +50 -9
- package/pack/.claude/skills/rite-vet/reference/review-axes.md +39 -37
- package/pack/generated/claude/agents/devrites-code-reviewer.md +62 -48
- package/pack/generated/claude/agents/devrites-devex-reviewer.md +69 -53
- package/pack/generated/claude/agents/devrites-doubt-reviewer.md +29 -22
- package/pack/generated/claude/agents/devrites-evidence-scout.md +69 -0
- package/pack/generated/claude/agents/devrites-forge-judge.md +74 -61
- package/pack/generated/claude/agents/devrites-frontend-reviewer.md +48 -39
- package/pack/generated/claude/agents/devrites-performance-reviewer.md +49 -40
- package/pack/generated/claude/agents/devrites-plan-drafter.md +73 -0
- package/pack/generated/claude/agents/devrites-plan-reviewer.md +80 -47
- package/pack/generated/claude/agents/devrites-proof-runner.md +74 -0
- package/pack/generated/claude/agents/devrites-retrospector.md +48 -45
- package/pack/generated/claude/agents/devrites-security-auditor.md +46 -36
- package/pack/generated/claude/agents/devrites-simplifier-reviewer.md +50 -46
- package/pack/generated/claude/agents/devrites-slice-wright.md +153 -165
- package/pack/generated/claude/agents/devrites-spec-reviewer.md +34 -32
- package/pack/generated/claude/agents/devrites-strategy-reviewer.md +63 -34
- package/pack/generated/claude/agents/devrites-test-analyst.md +40 -30
- package/pack/generated/claude/agents/devrites-upgrade-planner.md +100 -0
- package/pack/generated/claude/settings.json +2 -1
- package/pack/generated/claude/skills/devrites-audit/SKILL.md +40 -61
- package/pack/generated/claude/skills/devrites-debug-recovery/SKILL.md +24 -13
- package/pack/generated/claude/skills/devrites-debug-recovery/reference/build-the-loop.md +24 -21
- package/pack/generated/claude/skills/devrites-debug-recovery/reference/cleanup-and-classify.md +34 -6
- package/pack/generated/claude/skills/devrites-debug-recovery/reference/instrumentation.md +2 -2
- package/pack/generated/claude/skills/devrites-doubt/SKILL.md +25 -17
- package/pack/generated/claude/skills/devrites-interview/SKILL.md +53 -52
- package/pack/generated/claude/skills/devrites-lib/SKILL.md +12 -9
- package/pack/generated/claude/skills/devrites-lib/reference/intent-map.md +4 -2
- package/pack/generated/claude/skills/devrites-lib/reference/parallel-dispatch.md +82 -137
- package/pack/generated/claude/skills/devrites-lib/reference/reply-contract.md +8 -1
- package/pack/generated/claude/skills/devrites-lib/reference/standards/README.md +38 -55
- package/pack/generated/claude/skills/devrites-lib/reference/standards/afk-hitl.md +53 -27
- package/pack/generated/claude/skills/devrites-lib/reference/standards/agents.md +200 -190
- package/pack/generated/claude/skills/devrites-lib/reference/standards/anti-patterns.md +5 -15
- package/pack/generated/claude/skills/devrites-lib/reference/standards/ci-cd.md +27 -58
- package/pack/generated/claude/skills/devrites-lib/reference/standards/code-review.md +16 -52
- package/pack/generated/claude/skills/devrites-lib/reference/standards/coding-style.md +2 -10
- package/pack/generated/claude/skills/devrites-lib/reference/standards/context-hygiene.md +18 -61
- package/pack/generated/claude/skills/devrites-lib/reference/standards/core.md +23 -18
- package/pack/generated/claude/skills/devrites-lib/reference/standards/deprecation.md +17 -57
- package/pack/generated/claude/skills/devrites-lib/reference/standards/development-workflow.md +4 -33
- package/pack/generated/claude/skills/devrites-lib/reference/standards/git-workflow.md +4 -20
- package/pack/generated/claude/skills/devrites-lib/reference/standards/hooks.md +3 -14
- package/pack/generated/claude/skills/devrites-lib/reference/standards/patterns.md +9 -25
- package/pack/generated/claude/skills/devrites-lib/reference/standards/performance.md +0 -9
- package/pack/generated/claude/skills/devrites-lib/reference/standards/principles.md +1 -3
- package/pack/generated/claude/skills/devrites-lib/reference/standards/security.md +17 -7
- package/pack/generated/claude/skills/devrites-lib/reference/standards/testing.md +1 -27
- package/pack/generated/claude/skills/devrites-lib/reference/standards/tooling.md +46 -50
- package/pack/generated/claude/skills/devrites-lib/reference/workspace-artifact-schema.md +40 -10
- package/pack/generated/claude/skills/devrites-source-driven/SKILL.md +23 -22
- package/pack/generated/claude/skills/rite/SKILL.md +10 -6
- package/pack/generated/claude/skills/rite/reference/menu.md +13 -7
- package/pack/generated/claude/skills/rite-adopt/SKILL.md +33 -37
- package/pack/generated/claude/skills/rite-autocomplete/SKILL.md +33 -28
- package/pack/generated/claude/skills/rite-autocomplete/reference/loop.md +21 -21
- package/pack/generated/claude/skills/rite-autocomplete/reference/stop-conditions.md +15 -6
- package/pack/generated/claude/skills/rite-build/SKILL.md +35 -30
- package/pack/generated/claude/skills/rite-build/reference/afk-discipline.md +41 -39
- package/pack/generated/claude/skills/rite-build/reference/evidence-standard.md +10 -0
- package/pack/generated/claude/skills/rite-build/reference/forge.md +186 -156
- package/pack/generated/claude/skills/rite-build/reference/one-slice-cycle.md +4 -3
- package/pack/generated/claude/skills/rite-build/reference/phase-contract.md +96 -175
- package/pack/generated/claude/skills/rite-build/reference/spec-drift-guard.md +10 -4
- package/pack/generated/claude/skills/rite-build/reference/wright-dispatch.md +129 -134
- package/pack/generated/claude/skills/rite-clarify/SKILL.md +90 -0
- package/pack/generated/claude/skills/rite-clarify/reference/decision-coverage.md +61 -0
- package/pack/generated/claude/skills/rite-converge/SKILL.md +35 -25
- package/pack/generated/claude/skills/rite-define/SKILL.md +58 -32
- package/pack/generated/claude/skills/rite-define/reference/gates.md +16 -15
- package/pack/generated/claude/skills/rite-define/reference/plan-template.md +18 -8
- package/pack/generated/claude/skills/rite-frame/reference/failure-modes.md +22 -24
- package/pack/generated/claude/skills/rite-plan/SKILL.md +47 -16
- package/pack/generated/claude/skills/rite-plan/reference/task-breakdown.md +4 -0
- package/pack/generated/claude/skills/rite-polish/SKILL.md +27 -23
- package/pack/generated/claude/skills/rite-prototype/SKILL.md +25 -26
- package/pack/generated/claude/skills/rite-prove/SKILL.md +27 -17
- package/pack/generated/claude/skills/rite-resolve/SKILL.md +12 -11
- package/pack/generated/claude/skills/rite-resolve/reference/answer-protocol.md +3 -0
- package/pack/generated/claude/skills/rite-review/SKILL.md +37 -28
- package/pack/generated/claude/skills/rite-seal/reference/phase-contract.md +27 -92
- package/pack/generated/claude/skills/rite-seal/reference/risk-and-rollback.md +13 -0
- package/pack/generated/claude/skills/rite-ship/reference/design-memory.md +31 -36
- package/pack/generated/claude/skills/rite-spec/SKILL.md +84 -135
- package/pack/generated/claude/skills/rite-spec/reference/investigation.md +37 -33
- package/pack/generated/claude/skills/rite-spec/reference/question-protocol.md +6 -2
- package/pack/generated/claude/skills/rite-spec/reference/spec-checklists.md +25 -24
- package/pack/generated/claude/skills/rite-spec/reference/spec-template.md +9 -2
- package/pack/generated/claude/skills/rite-spec/reference/state-workspace.md +13 -3
- package/pack/generated/claude/skills/rite-temper/SKILL.md +62 -47
- package/pack/generated/claude/skills/rite-temper/reference/review-dimensions.md +24 -22
- package/pack/generated/claude/skills/rite-upgrade/SKILL.md +125 -0
- package/pack/generated/claude/skills/rite-vet/SKILL.md +114 -113
- package/pack/generated/claude/skills/rite-vet/reference/artifacts.md +50 -9
- package/pack/generated/claude/skills/rite-vet/reference/review-axes.md +39 -37
- package/pack/generated/codex/AGENTS.md +5 -2
- package/pack/generated/codex/agents/devrites-code-reviewer.toml +69 -47
- package/pack/generated/codex/agents/devrites-devex-reviewer.toml +75 -51
- package/pack/generated/codex/agents/devrites-doubt-reviewer.toml +35 -20
- package/pack/generated/codex/agents/devrites-evidence-scout.toml +75 -0
- package/pack/generated/codex/agents/devrites-forge-judge.toml +80 -59
- package/pack/generated/codex/agents/devrites-frontend-reviewer.toml +54 -37
- package/pack/generated/codex/agents/devrites-performance-reviewer.toml +55 -38
- package/pack/generated/codex/agents/devrites-plan-drafter.toml +79 -0
- package/pack/generated/codex/agents/devrites-plan-reviewer.toml +82 -47
- package/pack/generated/codex/agents/devrites-proof-runner.toml +80 -0
- package/pack/generated/codex/agents/devrites-retrospector.toml +54 -43
- package/pack/generated/codex/agents/devrites-security-auditor.toml +53 -35
- package/pack/generated/codex/agents/devrites-simplifier-reviewer.toml +56 -44
- package/pack/generated/codex/agents/devrites-slice-wright.toml +159 -163
- package/pack/generated/codex/agents/devrites-spec-reviewer.toml +40 -30
- package/pack/generated/codex/agents/devrites-strategy-reviewer.toml +65 -34
- package/pack/generated/codex/agents/devrites-test-analyst.toml +46 -28
- package/pack/generated/codex/agents/devrites-upgrade-planner.toml +106 -0
- package/pack/generated/codex/hooks.json +4 -14
- package/pack/generated/codex/skills/devrites-api-interface/SKILL.md +7 -3
- package/pack/generated/codex/skills/devrites-audit/SKILL.md +47 -64
- package/pack/generated/codex/skills/devrites-browser-proof/SKILL.md +7 -3
- package/pack/generated/codex/skills/devrites-debug-recovery/SKILL.md +31 -16
- package/pack/generated/codex/skills/devrites-debug-recovery/reference/build-the-loop.md +24 -21
- package/pack/generated/codex/skills/devrites-debug-recovery/reference/cleanup-and-classify.md +34 -6
- package/pack/generated/codex/skills/devrites-debug-recovery/reference/instrumentation.md +2 -2
- package/pack/generated/codex/skills/devrites-doubt/SKILL.md +32 -20
- package/pack/generated/codex/skills/devrites-frontend-craft/SKILL.md +7 -3
- package/pack/generated/codex/skills/devrites-interview/SKILL.md +60 -55
- package/pack/generated/codex/skills/devrites-lib/SKILL.md +19 -12
- package/pack/generated/codex/skills/devrites-lib/reference/intent-map.md +4 -2
- package/pack/generated/codex/skills/devrites-lib/reference/parallel-dispatch.md +82 -137
- package/pack/generated/codex/skills/devrites-lib/reference/reply-contract.md +8 -1
- package/pack/generated/codex/skills/devrites-lib/reference/standards/README.md +38 -55
- package/pack/generated/codex/skills/devrites-lib/reference/standards/afk-hitl.md +53 -27
- package/pack/generated/codex/skills/devrites-lib/reference/standards/agents.md +200 -190
- package/pack/generated/codex/skills/devrites-lib/reference/standards/anti-patterns.md +5 -15
- package/pack/generated/codex/skills/devrites-lib/reference/standards/ci-cd.md +27 -58
- package/pack/generated/codex/skills/devrites-lib/reference/standards/code-review.md +16 -52
- package/pack/generated/codex/skills/devrites-lib/reference/standards/coding-style.md +2 -10
- package/pack/generated/codex/skills/devrites-lib/reference/standards/context-hygiene.md +18 -61
- package/pack/generated/codex/skills/devrites-lib/reference/standards/core.md +23 -18
- package/pack/generated/codex/skills/devrites-lib/reference/standards/deprecation.md +17 -57
- package/pack/generated/codex/skills/devrites-lib/reference/standards/development-workflow.md +4 -33
- package/pack/generated/codex/skills/devrites-lib/reference/standards/git-workflow.md +4 -20
- package/pack/generated/codex/skills/devrites-lib/reference/standards/hooks.md +3 -14
- package/pack/generated/codex/skills/devrites-lib/reference/standards/patterns.md +9 -25
- package/pack/generated/codex/skills/devrites-lib/reference/standards/performance.md +0 -9
- package/pack/generated/codex/skills/devrites-lib/reference/standards/principles.md +1 -3
- package/pack/generated/codex/skills/devrites-lib/reference/standards/security.md +17 -7
- package/pack/generated/codex/skills/devrites-lib/reference/standards/testing.md +1 -27
- package/pack/generated/codex/skills/devrites-lib/reference/standards/tooling.md +46 -50
- package/pack/generated/codex/skills/devrites-lib/reference/workspace-artifact-schema.md +40 -10
- package/pack/generated/codex/skills/devrites-prose-craft/SKILL.md +7 -3
- package/pack/generated/codex/skills/devrites-refresh-indexes/SKILL.md +7 -3
- package/pack/generated/codex/skills/devrites-source-driven/SKILL.md +29 -24
- package/pack/generated/codex/skills/devrites-ux-shape/SKILL.md +7 -3
- package/pack/generated/codex/skills/rite/SKILL.md +21 -13
- package/pack/generated/codex/skills/rite/reference/menu.md +13 -7
- package/pack/generated/codex/skills/rite-adopt/SKILL.md +40 -40
- package/pack/generated/codex/skills/rite-autocomplete/SKILL.md +40 -31
- package/pack/generated/codex/skills/rite-autocomplete/reference/loop.md +21 -21
- package/pack/generated/codex/skills/rite-autocomplete/reference/stop-conditions.md +15 -6
- package/pack/generated/codex/skills/rite-build/SKILL.md +42 -33
- package/pack/generated/codex/skills/rite-build/reference/afk-discipline.md +41 -39
- package/pack/generated/codex/skills/rite-build/reference/evidence-standard.md +10 -0
- package/pack/generated/codex/skills/rite-build/reference/forge.md +186 -156
- package/pack/generated/codex/skills/rite-build/reference/one-slice-cycle.md +4 -3
- package/pack/generated/codex/skills/rite-build/reference/phase-contract.md +96 -175
- package/pack/generated/codex/skills/rite-build/reference/spec-drift-guard.md +10 -4
- package/pack/generated/codex/skills/rite-build/reference/wright-dispatch.md +129 -134
- package/pack/generated/codex/skills/rite-clarify/SKILL.md +106 -0
- package/pack/generated/codex/skills/rite-clarify/reference/decision-coverage.md +61 -0
- package/pack/generated/codex/skills/rite-converge/SKILL.md +42 -28
- package/pack/generated/codex/skills/rite-customize/SKILL.md +7 -3
- package/pack/generated/codex/skills/rite-define/SKILL.md +65 -35
- package/pack/generated/codex/skills/rite-define/reference/gates.md +16 -15
- package/pack/generated/codex/skills/rite-define/reference/plan-template.md +18 -8
- package/pack/generated/codex/skills/rite-doctor/SKILL.md +7 -3
- package/pack/generated/codex/skills/rite-dogfood/SKILL.md +7 -3
- package/pack/generated/codex/skills/rite-explain/SKILL.md +7 -3
- package/pack/generated/codex/skills/rite-frame/SKILL.md +7 -3
- package/pack/generated/codex/skills/rite-frame/reference/failure-modes.md +22 -24
- package/pack/generated/codex/skills/rite-handoff/SKILL.md +7 -3
- package/pack/generated/codex/skills/rite-learn/SKILL.md +7 -3
- package/pack/generated/codex/skills/rite-plan/SKILL.md +54 -19
- package/pack/generated/codex/skills/rite-plan/reference/task-breakdown.md +5 -1
- package/pack/generated/codex/skills/rite-polish/SKILL.md +34 -26
- package/pack/generated/codex/skills/rite-pov/SKILL.md +7 -3
- package/pack/generated/codex/skills/rite-pr-feedback/SKILL.md +7 -3
- package/pack/generated/codex/skills/rite-pressure-test/SKILL.md +7 -3
- package/pack/generated/codex/skills/rite-prototype/SKILL.md +32 -29
- package/pack/generated/codex/skills/rite-prove/SKILL.md +34 -20
- package/pack/generated/codex/skills/rite-quick/SKILL.md +7 -3
- package/pack/generated/codex/skills/rite-resolve/SKILL.md +19 -14
- package/pack/generated/codex/skills/rite-resolve/reference/answer-protocol.md +3 -0
- package/pack/generated/codex/skills/rite-review/SKILL.md +44 -31
- package/pack/generated/codex/skills/rite-seal/SKILL.md +7 -3
- package/pack/generated/codex/skills/rite-seal/reference/phase-contract.md +27 -92
- package/pack/generated/codex/skills/rite-seal/reference/risk-and-rollback.md +13 -0
- package/pack/generated/codex/skills/rite-ship/SKILL.md +7 -3
- package/pack/generated/codex/skills/rite-ship/reference/design-memory.md +31 -36
- package/pack/generated/codex/skills/rite-spec/SKILL.md +91 -138
- package/pack/generated/codex/skills/rite-spec/reference/investigation.md +37 -33
- package/pack/generated/codex/skills/rite-spec/reference/question-protocol.md +6 -2
- package/pack/generated/codex/skills/rite-spec/reference/spec-checklists.md +25 -24
- package/pack/generated/codex/skills/rite-spec/reference/spec-template.md +9 -2
- package/pack/generated/codex/skills/rite-spec/reference/state-workspace.md +13 -3
- package/pack/generated/codex/skills/rite-status/SKILL.md +7 -3
- package/pack/generated/codex/skills/rite-temper/SKILL.md +69 -50
- package/pack/generated/codex/skills/rite-temper/reference/review-dimensions.md +24 -22
- package/pack/generated/codex/skills/rite-upgrade/SKILL.md +141 -0
- package/pack/generated/codex/skills/rite-upgrade/agents/openai.yaml +2 -0
- package/pack/generated/codex/skills/rite-vet/SKILL.md +121 -116
- package/pack/generated/codex/skills/rite-vet/reference/artifacts.md +50 -9
- package/pack/generated/codex/skills/rite-vet/reference/review-axes.md +40 -38
- package/pack/generated/codex/skills/rite-zoom-out/SKILL.md +7 -3
- package/package.json +1 -1
- package/scripts/build-release-tarball.sh +32 -15
- package/scripts/check-authority-drift.py +125 -0
- package/scripts/check-instruction-size-baseline.mjs +19 -11
- package/scripts/check-invocation-integrity.py +2 -0
- package/scripts/codex-generate.sh +69 -33
- package/scripts/grade-feature.sh +121 -40
- package/scripts/live-hosts/agent-result.schema.json +230 -0
- package/scripts/live-hosts/claude.sh +87 -0
- package/scripts/live-hosts/codex.sh +81 -0
- package/scripts/live-hosts/common.sh +113 -0
- package/scripts/live-hosts/fake-host.py +264 -0
- package/scripts/live-hosts/host-transport.py +287 -0
- package/scripts/release-check.sh +5 -1
- package/scripts/run-agent-contract-evals.py +1380 -0
- package/scripts/run-behavioral-evals.sh +24 -30
- package/scripts/run-evals.sh +1 -5
- package/scripts/run-live-behavioral-evals.py +1274 -144
- package/scripts/run-outcome-evals.sh +445 -88
- package/scripts/run-tests.mjs +30 -2
- package/scripts/skills-inventory.mjs +1 -1
- package/scripts/validate-workflow-security.py +39 -20
- package/scripts/validate-workspace-schema.py +362 -10
- package/scripts/validate.sh +21 -15
- package/engine/testdata/golden/TestParityWrightScope/devrites-edit-allowed.golden +0 -1
- /package/engine/testdata/golden/{TestParityReconcile/check-no-claimed.golden → TestParityBuildReadiness/arg=clarifyopen.golden} +0 -0
|
@@ -1,57 +1,53 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Vet review: scope, four axes, and outputs
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
throughout
|
|
6
|
-
|
|
3
|
+
Run §0 first as a blocking gate, then review the four axes in order and produce the
|
|
4
|
+
required outputs. Apply the engineering lenses in [`eng-lenses.md`](eng-lenses.md)
|
|
5
|
+
throughout rather than as a separate checklist. Calibrate every finding through the
|
|
6
|
+
confidence and verification gate before presenting it.
|
|
7
7
|
|
|
8
8
|
---
|
|
9
9
|
|
|
10
|
-
## §0. Scope
|
|
10
|
+
## §0. Scope challenge (blocking gate)
|
|
11
11
|
|
|
12
|
-
Before reviewing
|
|
13
|
-
|
|
12
|
+
Before reviewing implementation details, check whether the plan includes more work than
|
|
13
|
+
the settled spec requires.
|
|
14
14
|
|
|
15
15
|
1. **What already exists?** For each sub-problem in the plan, find the existing code/flow that
|
|
16
16
|
already solves it (use a code-intelligence index if available: see `../../devrites-lib/reference/standards/tooling.md`).
|
|
17
17
|
Can the plan **capture outputs from an existing
|
|
18
18
|
flow** instead of building a parallel one? Reuse → extend → build new, in that order
|
|
19
19
|
(`coding-style.md`). List every reuse opportunity the plan misses.
|
|
20
|
-
2. **Minimum diff.**
|
|
21
|
-
criteria
|
|
22
|
-
|
|
23
|
-
matter, not a trim).
|
|
20
|
+
2. **Minimum diff.** Find the smallest set of changes that meets the spec's acceptance
|
|
21
|
+
criteria. Flag work that can be deferred without blocking acceptance. Do not cut an
|
|
22
|
+
acceptance criterion; that requires the Drift Guard.
|
|
24
23
|
3. **Complexity smell.** If `plan.md` touches **>8 files** or adds **>2 new services / modules /
|
|
25
24
|
classes**, treat it as a smell. Check the plan's complexity gate justifies it. If it doesn't
|
|
26
|
-
→
|
|
27
|
-
|
|
25
|
+
→ harden to the smallest acceptance-preserving plan. Ask only if reduction changes
|
|
26
|
+
acceptance or explicit architecture policy; never start the axes unresolved.
|
|
28
27
|
4. **Built-in check.** For each new pattern / infra component / concurrency approach the plan
|
|
29
28
|
introduces, verify a framework/runtime built-in doesn't already do it, and that the choice is
|
|
30
|
-
current best practice with no known footgun:
|
|
29
|
+
current best practice with no known footgun: invoke `devrites-source-driven` to confirm at
|
|
31
30
|
the source and record the citation. A custom roll where a built-in exists is a scope-reduction
|
|
32
31
|
finding.
|
|
33
|
-
5. **Completeness check.**
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
minutes here is a false economy. Prefer the complete option; flag shortcuts that exist only to
|
|
37
|
-
save effort that AI has already made cheap.
|
|
32
|
+
5. **Completeness check.** Identify shortcuts in edge-case handling, error paths, and
|
|
33
|
+
test coverage. Prefer the complete option when AI-assisted implementation makes the
|
|
34
|
+
additional work small. Flag shortcuts that save little time but leave known gaps.
|
|
38
35
|
6. **Distribution check.** If the plan introduces a new artifact (CLI binary, package, container,
|
|
39
36
|
deployable), does it include how it gets built / published / installed? If distribution is
|
|
40
37
|
deferred, say so explicitly in "NOT in scope": don't let it silently drop.
|
|
41
38
|
|
|
42
|
-
> **STOP discipline.**
|
|
43
|
-
>
|
|
39
|
+
> **STOP discipline.** Fold technical reduction into the plan; ask and stop only for a
|
|
40
|
+
> human-owned choice.
|
|
44
41
|
|
|
45
42
|
If the smell does not trip, present the §0 findings and proceed to Axis 1.
|
|
46
43
|
|
|
47
44
|
---
|
|
48
45
|
|
|
49
|
-
##
|
|
46
|
+
## Four axes (one at a time, at most 8 findings each)
|
|
50
47
|
|
|
51
|
-
For each axis
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
moving on" and continue: don't manufacture findings.
|
|
48
|
+
For each axis, fold verified technical findings into the plan, then walk each human-owned
|
|
49
|
+
decision via one coherent `AskUserQuestion` packet. Supporting findings may combine only
|
|
50
|
+
with one owner/trade-off. HITL pauses there; AFK follows `depth.md`. Never invent findings.
|
|
55
51
|
|
|
56
52
|
### 1. Architecture
|
|
57
53
|
- Component boundaries, coupling, data-flow patterns, single points of failure. Architecture records invariants, not scaffolding: each medium+ decision should state `Binds:` and `Prevents:` so the builder knows what divergence it prevents.
|
|
@@ -72,7 +68,7 @@ moving on" and continue: don't manufacture findings.
|
|
|
72
68
|
change will make stale.
|
|
73
69
|
|
|
74
70
|
### 3. Test-coverage design
|
|
75
|
-
|
|
71
|
+
Design tests before code so the build writes them alongside the implementation.
|
|
76
72
|
- **Framework detection:** find the project's existing test runner + conventions; match them
|
|
77
73
|
(never introduce a new runner to prove one change: `testing.md`).
|
|
78
74
|
- **Map acceptance → tests.** Every spec acceptance criterion must map to ≥1 planned, surface-anchored test (the API response/UI state/CLI output the criterion names, not an internal proxy).
|
|
@@ -117,22 +113,21 @@ acceptance criteria covered ✓" and continue.
|
|
|
117
113
|
|
|
118
114
|
---
|
|
119
115
|
|
|
120
|
-
## Confidence
|
|
116
|
+
## Confidence and verification gate
|
|
121
117
|
Tag each finding `[severity] (confidence: N/10) <plan/task/spec ref> — finding`:
|
|
122
118
|
- **9-10** verified against a quoted line · **7-8** strong pattern match → report normally.
|
|
123
119
|
- **5-6** moderate → report with "verify this is real".
|
|
124
120
|
- **≤4** speculative → **suppress from the walk-through**, appendix only.
|
|
125
121
|
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
plan
|
|
129
|
-
runs: `devrites-plan-reviewer`.)
|
|
122
|
+
Before raising a finding, quote the lines that support it. If no line supports it, set
|
|
123
|
+
confidence to 4 or lower and suppress it. Do not inflate confidence to avoid suppression.
|
|
124
|
+
`devrites-plan-reviewer` follows the same rule.
|
|
130
125
|
|
|
131
126
|
---
|
|
132
127
|
|
|
133
|
-
##
|
|
128
|
+
## Present human-owned decisions
|
|
134
129
|
Use `AskUserQuestion` per the pack's standard. Plan-review specifics:
|
|
135
|
-
- **One
|
|
130
|
+
- **One decision = one call.** Never ask about agent work or batch unrelated choices.
|
|
136
131
|
- Concrete: name the plan/task section + the quoted line.
|
|
137
132
|
- 2-3 options, including "do nothing / proceed as-is" where reasonable.
|
|
138
133
|
- Per option, one line: **effort** (human ~X / with the build agent ~Y), **risk**, **maintenance**.
|
|
@@ -144,8 +139,10 @@ Use `AskUserQuestion` per the pack's standard. Plan-review specifics:
|
|
|
144
139
|
happy-path), add `Completeness: N/10` per option. If they differ in *kind* (two different
|
|
145
140
|
architectures), skip the score and note "options differ in kind, not coverage". Never fabricate
|
|
146
141
|
a score on a kind question.
|
|
147
|
-
- Every material
|
|
148
|
-
|
|
142
|
+
- Every material call ends as a **recorded decision**: behavior-preserving technical hardening
|
|
143
|
+
goes to `decisions.md`; a human-owned HITL choice gets a resolved `questions.md` qid; AFK
|
|
144
|
+
records the allowed recommendation in `decisions.md`. The review must leave an auditable
|
|
145
|
+
trail without turning agent work into questions.
|
|
149
146
|
|
|
150
147
|
---
|
|
151
148
|
|
|
@@ -164,4 +161,9 @@ Use `AskUserQuestion` per the pack's standard. Plan-review specifics:
|
|
|
164
161
|
parallel lanes (shared module → same lane/sequential; independent → separate lanes), execution
|
|
165
162
|
order, and conflict flags where two lanes touch the same module dir. This feeds `$rite-build`'s
|
|
166
163
|
isolation strategy and the autocomplete loop. (Shape in [`artifacts.md`](artifacts.md).)
|
|
167
|
-
5. **
|
|
164
|
+
5. **Build-entry preflight:** commands/cwds, tools, package state, parser/browser smoke,
|
|
165
|
+
prerequisites, and provenance ([`artifacts.md`](artifacts.md)).
|
|
166
|
+
6. **Implementation readiness:** goal-backward coverage, wiring, dependency simulation,
|
|
167
|
+
alignment, operations, and rollback verdict.
|
|
168
|
+
7. **Completion summary:** the compact recap defined in
|
|
169
|
+
[`artifacts.md`](artifacts.md).
|
|
@@ -12,9 +12,13 @@ This is the Codex mirror of a DevRites skill. In Codex:
|
|
|
12
12
|
|
|
13
13
|
- Load DevRites engineering standards from `.agents/skills/devrites-lib/reference/standards/`. Read `.agents/skills/devrites-lib/reference/standards/core.md` before workflow work, then load the other `.agents/skills/devrites-lib/reference/standards/*.md` files exactly when this skill asks for them.
|
|
14
14
|
- Use the installed `devrites-engine` binary as the canonical runtime helper surface for orientation, gates, and state mutation.
|
|
15
|
-
-
|
|
16
|
-
-
|
|
17
|
-
-
|
|
15
|
+
- **Invocation and dispatch are different:** invoke means run a skill in this context; dispatch means start a fresh agent with `spawn_agent`, await it, and reconcile its result. Never describe inline skill work as a dispatch.
|
|
16
|
+
- For every DevRites specialist or writer dispatch, first call `spawn_agent` with the named `devrites-<role>` custom role. The matching project contract is `.codex/agents/devrites-<role>.toml`.
|
|
17
|
+
- If `spawn_agent` is callable but a named read-only role is unavailable, use generic `explorer` only when the host proves that run has a runtime-enforced read-only sandbox. Tell it to read `.codex/agents/devrites-<role>.toml`, follow its `developer_instructions`, and execute the unchanged packet. A missing read-only custom role is not evidence that spawning is unavailable.
|
|
18
|
+
- Never dispatch generic `worker` for `devrites-slice-wright` unless the host proves that worker run carries exact DevRites identity and the same `.wright-allowlist` enforcement as the named role. Codex reports a generic run as `agent_type=worker`, so the generated global hooks cannot prove that binding. Reject that unsafe rung and use the documented labelled inline wright path with `.reconcile-inline` plus the full reconcile gate.
|
|
19
|
+
- If the host cannot prove the generic explorer is runtime read-only, reject that rung too. Only when no spawn primitive exists or a higher-priority policy rejects a safe spawn may the root run the documented discipline inline. Label it `independence: fallback`, never call it independent, and apply every fallback risk gate. An unbound generic wright or unconfined generic explorer is such a safety rejection, not evidence that no agents exist.
|
|
20
|
+
- Wait for every required fresh-context dispatch before reconciling or advancing. A backgrounded or lost result is incomplete.
|
|
21
|
+
- Codex project hooks are installed in `.codex/hooks.json`; declared-leaf hooks are scoped inside `.codex/agents/devrites-*.toml`. Review and trust them with `/hooks` before relying on hook enforcement.
|
|
18
22
|
- When this skill asks a HITL question via `AskUserQuestion`: Codex's equivalent (`request_user_input`) exists only in Plan mode. Outside Plan mode, render the option set as a plain numbered list in chat and **end the turn** so the human answers: NEVER silently pick an option yourself; auto-picking is AFK's contract, gated by the `.devrites/AFK` sentinel.
|
|
19
23
|
|
|
20
24
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "devrites",
|
|
3
|
-
"version": "3.0
|
|
3
|
+
"version": "3.2.0",
|
|
4
4
|
"description": "DevRites: a disciplined senior-engineer workflow pack for Claude Code and Codex",
|
|
5
5
|
"license": "SEE LICENSE IN LICENSE",
|
|
6
6
|
"homepage": "https://github.com/ViktorsBaikers/DevRites#readme",
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env bash
|
|
2
|
-
# Build the
|
|
3
|
-
#
|
|
4
|
-
#
|
|
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
5
|
#
|
|
6
6
|
# Usage: build-release-tarball.sh <version>
|
|
7
7
|
set -euo pipefail
|
|
@@ -11,20 +11,31 @@ if [[ -z "$VERSION" ]]; then
|
|
|
11
11
|
echo "usage: build-release-tarball.sh <version>" >&2
|
|
12
12
|
exit 1
|
|
13
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
|
|
14
18
|
|
|
15
|
-
ROOT="$(cd "$(dirname "$0")/.." && pwd)"
|
|
19
|
+
ROOT="$(cd "$(dirname "$0")/.." && pwd -P)"
|
|
16
20
|
DIST="${DEVRITES_RELEASE_DIST_DIR:-$ROOT/dist}"
|
|
17
21
|
NAME="devrites-v${VERSION}"
|
|
18
|
-
STAGE="$DIST/$NAME"
|
|
19
22
|
|
|
20
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
|
|
21
35
|
|
|
22
36
|
echo "Building release tarball: ${NAME}.tar.gz"
|
|
23
37
|
|
|
24
|
-
|
|
25
|
-
mkdir -p "$STAGE"
|
|
26
|
-
|
|
27
|
-
# Files and directories shipped to end-users.
|
|
38
|
+
# Release contents.
|
|
28
39
|
PAYLOAD=(
|
|
29
40
|
pack
|
|
30
41
|
engine
|
|
@@ -60,17 +71,23 @@ for item in "${PAYLOAD[@]}"; do
|
|
|
60
71
|
fi
|
|
61
72
|
done
|
|
62
73
|
|
|
63
|
-
#
|
|
74
|
+
# Include the same prebuilt host artifacts as the npm package.
|
|
64
75
|
DEVRITES_HOST_ARTIFACT_DIR="$STAGE/pack/generated" bash "$ROOT/scripts/build-host-artifacts.sh" >/dev/null
|
|
65
76
|
|
|
66
|
-
#
|
|
77
|
+
# Remove development files copied with the payload.
|
|
67
78
|
rm -rf "$STAGE/docs/internal" "$STAGE/scripts/.cache" 2>/dev/null || true
|
|
68
79
|
|
|
69
|
-
|
|
70
|
-
|
|
80
|
+
(
|
|
81
|
+
cd "$ROOT/engine"
|
|
82
|
+
go run ./cmd/releasepack \
|
|
83
|
+
-root "$STAGE" \
|
|
84
|
+
-output "$DIST/${NAME}.tar.gz" \
|
|
85
|
+
-prefix "$NAME" \
|
|
86
|
+
-epoch "${SOURCE_DATE_EPOCH:-0}"
|
|
87
|
+
)
|
|
71
88
|
|
|
72
|
-
#
|
|
73
|
-
#
|
|
89
|
+
# Write a sibling checksum for install.sh to verify when available.
|
|
90
|
+
# Store only "<sha256> <filename>" so verification works from any directory.
|
|
74
91
|
(
|
|
75
92
|
cd "$DIST"
|
|
76
93
|
if command -v shasum >/dev/null 2>&1; then
|
|
@@ -0,0 +1,125 @@
|
|
|
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)
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
//
|
|
2
|
+
// Track canonical instruction files individually and skills as a group.
|
|
3
3
|
import { existsSync, mkdirSync, readFileSync, readdirSync, writeFileSync } from 'node:fs';
|
|
4
4
|
import { dirname, join, relative, resolve } from 'node:path';
|
|
5
5
|
|
|
@@ -12,6 +12,7 @@ function option(name, fallback) {
|
|
|
12
12
|
const root = resolve(option('--root', defaultRoot));
|
|
13
13
|
const baselinePath = resolve(option('--baseline', join(root, 'tests', 'instruction-size-baseline.json')));
|
|
14
14
|
const write = argv.includes('--write');
|
|
15
|
+
const ratchetLimit = 855_000;
|
|
15
16
|
|
|
16
17
|
function lfBytes(text) {
|
|
17
18
|
return Buffer.byteLength(text.replace(/\r\n/g, '\n'));
|
|
@@ -28,12 +29,7 @@ function markdownFiles(dir) {
|
|
|
28
29
|
return files;
|
|
29
30
|
}
|
|
30
31
|
|
|
31
|
-
function collect() {
|
|
32
|
-
const roots = [
|
|
33
|
-
join(root, 'pack', '.claude', 'skills'),
|
|
34
|
-
join(root, 'pack', '.claude', 'agents'),
|
|
35
|
-
join(root, 'pack', '.claude', 'rules'),
|
|
36
|
-
];
|
|
32
|
+
function collect(roots) {
|
|
37
33
|
const out = {};
|
|
38
34
|
for (const file of roots.flatMap(markdownFiles)) {
|
|
39
35
|
out[relative(root, file)] = lfBytes(readFileSync(file, 'utf8'));
|
|
@@ -41,13 +37,25 @@ function collect() {
|
|
|
41
37
|
return Object.fromEntries(Object.entries(out).sort(([a], [b]) => a.localeCompare(b)));
|
|
42
38
|
}
|
|
43
39
|
|
|
44
|
-
const
|
|
45
|
-
const
|
|
40
|
+
const skillRoot = join(root, 'pack', '.claude', 'skills');
|
|
41
|
+
const files = collect([
|
|
42
|
+
skillRoot,
|
|
43
|
+
join(root, 'pack', '.claude', 'agents'),
|
|
44
|
+
join(root, 'pack', '.claude', 'rules'),
|
|
45
|
+
]);
|
|
46
|
+
const skillFiles = collect([skillRoot]);
|
|
47
|
+
const totalBytes = Object.values(skillFiles).reduce((sum, bytes) => sum + bytes, 0);
|
|
46
48
|
const current = { version: 2, total_bytes: totalBytes, files };
|
|
49
|
+
if (totalBytes > ratchetLimit) {
|
|
50
|
+
console.error(`FAIL: canonical skill Markdown is ${totalBytes} bytes (ratchet ${ratchetLimit})`);
|
|
51
|
+
process.exit(1);
|
|
52
|
+
}
|
|
47
53
|
if (write) {
|
|
48
54
|
mkdirSync(dirname(baselinePath), { recursive: true });
|
|
49
55
|
writeFileSync(baselinePath, JSON.stringify(current, null, 2) + '\n');
|
|
50
|
-
console.log(
|
|
56
|
+
console.log(
|
|
57
|
+
`instruction-size: wrote ${relative(root, baselinePath)} (${Object.keys(files).length} instruction files, ${totalBytes} skill bytes)`,
|
|
58
|
+
);
|
|
51
59
|
process.exit(0);
|
|
52
60
|
}
|
|
53
61
|
|
|
@@ -75,5 +83,5 @@ for (const file of Object.keys(baseline.files)) {
|
|
|
75
83
|
if (totalBytes > baseline.total_bytes) {
|
|
76
84
|
fail(`aggregate instruction payload grew by ${totalBytes - baseline.total_bytes} bytes (${baseline.total_bytes} -> ${totalBytes})`);
|
|
77
85
|
}
|
|
78
|
-
console.log(`instruction-size: ${Object.keys(files).length} files checked, ${totalBytes} bytes`);
|
|
86
|
+
console.log(`instruction-size: ${Object.keys(files).length} instruction files checked, ${totalBytes} skill bytes`);
|
|
79
87
|
process.exit(failures ? 1 : 0);
|
|
@@ -26,6 +26,8 @@ NONSKILL = {
|
|
|
26
26
|
"devrites-engine",
|
|
27
27
|
# a git commit-trailer marker ("[devrites-context]" body in a WIP checkpoint), not a skill
|
|
28
28
|
"devrites-context",
|
|
29
|
+
# typed contract schemas and a generated-hook diagnostic marker, not skills
|
|
30
|
+
"devrites-forge", "devrites-git-authority", "devrites-codex-leaf-guard",
|
|
29
31
|
}
|
|
30
32
|
# names a skill deliberately mentions as NON-existent (self-documenting prose).
|
|
31
33
|
DOCUMENTED_NONEXISTENT = {"rite-use"}
|