devrites 3.0.7 → 3.1.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 +12 -0
- package/README.md +67 -47
- 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/README.md +3 -0
- package/docs/agents/triage-labels.md +7 -7
- package/docs/architecture.md +157 -140
- package/docs/cli.md +41 -12
- package/docs/command-map.md +49 -35
- package/docs/engine/agent-contract.md +92 -15
- package/docs/engine/commands.md +242 -72
- package/docs/engine/state-schema.md +52 -23
- package/docs/engine/workspace-schema.md +94 -15
- package/docs/extensions.md +1 -1
- package/docs/flow.md +80 -50
- package/docs/harness-compliance.md +29 -5
- package/docs/orchestration.md +107 -79
- package/docs/quick-reference.md +7 -3
- package/docs/release.md +4 -3
- package/docs/skills.md +64 -38
- package/docs/usage.md +57 -38
- 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 +35 -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 +111 -0
- package/engine/internal/lib/readinessartifact.go +510 -0
- package/engine/internal/lib/readinessartifact_test.go +321 -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=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 +141 -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 +71 -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/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 +11 -9
- package/pack/.claude/skills/devrites-lib/reference/intent-map.md +3 -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 +198 -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 +23 -10
- package/pack/.claude/skills/devrites-source-driven/SKILL.md +23 -22
- package/pack/.claude/skills/rite/SKILL.md +8 -6
- package/pack/.claude/skills/rite/reference/menu.md +8 -6
- 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 +38 -38
- 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/wright-dispatch.md +129 -134
- package/pack/.claude/skills/rite-clarify/SKILL.md +89 -0
- package/pack/.claude/skills/rite-clarify/reference/decision-coverage.md +59 -0
- package/pack/.claude/skills/rite-converge/SKILL.md +35 -25
- package/pack/.claude/skills/rite-define/SKILL.md +57 -32
- package/pack/.claude/skills/rite-define/reference/gates.md +16 -15
- package/pack/.claude/skills/rite-define/reference/plan-template.md +16 -8
- package/pack/.claude/skills/rite-frame/reference/failure-modes.md +22 -24
- package/pack/.claude/skills/rite-plan/SKILL.md +44 -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-vet/SKILL.md +110 -113
- package/pack/.claude/skills/rite-vet/reference/artifacts.md +42 -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 +71 -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/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 +11 -9
- package/pack/generated/claude/skills/devrites-lib/reference/intent-map.md +3 -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 +198 -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 +23 -10
- package/pack/generated/claude/skills/devrites-source-driven/SKILL.md +23 -22
- package/pack/generated/claude/skills/rite/SKILL.md +8 -6
- package/pack/generated/claude/skills/rite/reference/menu.md +8 -6
- 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 +38 -38
- 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/wright-dispatch.md +129 -134
- package/pack/generated/claude/skills/rite-clarify/SKILL.md +89 -0
- package/pack/generated/claude/skills/rite-clarify/reference/decision-coverage.md +59 -0
- package/pack/generated/claude/skills/rite-converge/SKILL.md +35 -25
- package/pack/generated/claude/skills/rite-define/SKILL.md +57 -32
- package/pack/generated/claude/skills/rite-define/reference/gates.md +16 -15
- package/pack/generated/claude/skills/rite-define/reference/plan-template.md +16 -8
- package/pack/generated/claude/skills/rite-frame/reference/failure-modes.md +22 -24
- package/pack/generated/claude/skills/rite-plan/SKILL.md +44 -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-vet/SKILL.md +110 -113
- package/pack/generated/claude/skills/rite-vet/reference/artifacts.md +42 -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 +77 -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/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 +18 -12
- package/pack/generated/codex/skills/devrites-lib/reference/intent-map.md +3 -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 +198 -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 +23 -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 +19 -13
- package/pack/generated/codex/skills/rite/reference/menu.md +8 -6
- 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 +38 -38
- 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/wright-dispatch.md +129 -134
- package/pack/generated/codex/skills/rite-clarify/SKILL.md +105 -0
- package/pack/generated/codex/skills/rite-clarify/reference/decision-coverage.md +59 -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 +64 -35
- package/pack/generated/codex/skills/rite-define/reference/gates.md +16 -15
- package/pack/generated/codex/skills/rite-define/reference/plan-template.md +16 -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 +51 -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-vet/SKILL.md +117 -116
- package/pack/generated/codex/skills/rite-vet/reference/artifacts.md +42 -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 +414 -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
package/scripts/grade-feature.sh
CHANGED
|
@@ -1,27 +1,25 @@
|
|
|
1
1
|
#!/usr/bin/env bash
|
|
2
|
-
# Deterministic
|
|
2
|
+
# Deterministic outcome grader for a completed DevRites feature workspace.
|
|
3
3
|
#
|
|
4
|
-
#
|
|
5
|
-
#
|
|
6
|
-
#
|
|
7
|
-
#
|
|
8
|
-
# in CI against a golden fixture and is the kind of deterministic grader
|
|
9
|
-
# Anthropic's eval guidance recommends for coding agents.
|
|
4
|
+
# Trigger evals in evals/*.json check skill selection. This script checks
|
|
5
|
+
# whether a completed run is shippable and has proof. It reads only committed
|
|
6
|
+
# Markdown artifacts, so CI can grade a golden fixture without an API key or
|
|
7
|
+
# model harness.
|
|
10
8
|
#
|
|
11
|
-
#
|
|
12
|
-
|
|
13
|
-
# workspace
|
|
9
|
+
# Git fixtures do not preserve the mtimes needed to compare proof with code.
|
|
10
|
+
# The `devrites-engine evidence-fresh` gate performs that check in a live
|
|
11
|
+
# workspace.
|
|
14
12
|
#
|
|
15
|
-
# Usage: grade-feature.sh <workspace-dir>
|
|
13
|
+
# Usage: grade-feature.sh [--json] <workspace-dir>
|
|
16
14
|
# e.g. evals/golden/shippable-feature | .devrites/work/<slug> | .devrites/archive/<slug>
|
|
17
15
|
#
|
|
18
|
-
#
|
|
16
|
+
# Checks from rite-seal/reference/{seal-template,go-no-go,final-evidence}.md:
|
|
19
17
|
# 1. seal.md present with "Verdict: GO" (not NO-GO)
|
|
20
18
|
# 2. seal.md "## Acceptance Criteria" has no unchecked "- [ ]" item
|
|
21
19
|
# 3. seal.md "## Blockers" is empty / "none"
|
|
22
20
|
# 4. evidence.md present and non-empty
|
|
23
21
|
# 5. review.md present
|
|
24
|
-
# 6. questions.md has no
|
|
22
|
+
# 6. questions.md has no open question (later lifecycle phases block them)
|
|
25
23
|
# 7. state.md Phase in {seal, ship, done}; Status not awaiting_human / blocked
|
|
26
24
|
#
|
|
27
25
|
# Exit codes: 0 shippable; 1 one or more invariants failed; 2 bad usage.
|
|
@@ -29,24 +27,41 @@
|
|
|
29
27
|
set -euo pipefail
|
|
30
28
|
|
|
31
29
|
ROOT="$(cd "$(dirname "$0")/.." && pwd)"
|
|
30
|
+
json=0
|
|
31
|
+
if [ "${1:-}" = "--json" ]; then
|
|
32
|
+
json=1
|
|
33
|
+
shift
|
|
34
|
+
fi
|
|
32
35
|
ws="${1:-}"
|
|
33
|
-
if [
|
|
34
|
-
printf 'usage: grade-feature.sh <workspace-dir>\n' >&2
|
|
36
|
+
if [ "$#" -ne 1 ] || [ ! -d "$ws" ]; then
|
|
37
|
+
printf 'usage: grade-feature.sh [--json] <workspace-dir>\n' >&2
|
|
35
38
|
exit 2
|
|
36
39
|
fi
|
|
37
40
|
|
|
38
41
|
seal="$ws/seal.md"; ev="$ws/evidence.md"; rev="$ws/review.md"
|
|
39
42
|
q="$ws/questions.md"; st="$ws/state.md"
|
|
40
43
|
problems=()
|
|
44
|
+
rules=()
|
|
45
|
+
unchecked=0
|
|
46
|
+
acceptance_ready=0
|
|
47
|
+
|
|
48
|
+
add_problem() {
|
|
49
|
+
rules+=("$1")
|
|
50
|
+
problems+=("$2")
|
|
51
|
+
}
|
|
41
52
|
|
|
42
|
-
# 1
|
|
53
|
+
# Checks 1 through 3: seal verdict, acceptance, and blockers.
|
|
43
54
|
if [ ! -f "$seal" ]; then
|
|
44
|
-
|
|
55
|
+
add_problem "final.seal.missing" "seal.md missing: feature never sealed"
|
|
45
56
|
else
|
|
46
57
|
grep -qiE '^[[:space:]]*Verdict:[[:space:]]*GO[[:space:]]*$' "$seal" \
|
|
47
|
-
||
|
|
58
|
+
|| add_problem "final.verdict.not-go" "seal.md Verdict is not GO"
|
|
48
59
|
unchecked=$(awk '/^## /{insec=($0 ~ /^## Acceptance Criteria/)} insec && /^- \[ \]/{c++} END{print c+0}' "$seal")
|
|
49
|
-
[ "${unchecked:-0}" -gt 0 ]
|
|
60
|
+
if [ "${unchecked:-0}" -gt 0 ]; then
|
|
61
|
+
add_problem "final.acceptance.unchecked" "seal.md has ${unchecked} unchecked acceptance criterion(s)"
|
|
62
|
+
else
|
|
63
|
+
acceptance_ready=1
|
|
64
|
+
fi
|
|
50
65
|
if awk '
|
|
51
66
|
/^## /{ insec=($0 ~ /^## Blockers/); next }
|
|
52
67
|
insec { l=$0; gsub(/^[[:space:]]+|[[:space:]]+$/,"",l)
|
|
@@ -54,40 +69,75 @@ else
|
|
|
54
69
|
ll=tolower(l); if (ll ~ /^-?[[:space:]]*(none|n\/a)$/) next
|
|
55
70
|
nz=1 }
|
|
56
71
|
END { exit(nz?0:1) }' "$seal"; then
|
|
57
|
-
|
|
72
|
+
add_problem "final.blockers.unresolved" "seal.md lists unresolved blockers"
|
|
58
73
|
fi
|
|
59
74
|
fi
|
|
60
75
|
|
|
61
|
-
# 4: evidence
|
|
62
|
-
{ [ -f "$ev" ] && [ -s "$ev" ]; }
|
|
76
|
+
# Check 4: evidence.
|
|
77
|
+
{ [ -f "$ev" ] && [ -s "$ev" ]; } \
|
|
78
|
+
|| add_problem "final.evidence.missing-or-empty" "evidence.md missing or empty: acceptance unproven"
|
|
63
79
|
|
|
64
|
-
# 5: review
|
|
65
|
-
[ -f "$rev" ] ||
|
|
80
|
+
# Check 5: review.
|
|
81
|
+
[ -f "$rev" ] || add_problem "final.review.missing" "review.md missing: feature not reviewed"
|
|
66
82
|
|
|
67
|
-
# 6: open
|
|
83
|
+
# Check 6: open questions block sealing.
|
|
68
84
|
if [ -f "$q" ]; then
|
|
69
|
-
if
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
85
|
+
if python3 - "$q" <<'PY'
|
|
86
|
+
from pathlib import Path
|
|
87
|
+
import sys
|
|
88
|
+
|
|
89
|
+
lines = Path(sys.argv[1]).read_text().splitlines()
|
|
90
|
+
in_question = False
|
|
91
|
+
status = ""
|
|
92
|
+
for line in lines:
|
|
93
|
+
stripped = line.strip()
|
|
94
|
+
if stripped.startswith("## "):
|
|
95
|
+
if in_question and status.lower() == "open":
|
|
96
|
+
raise SystemExit(0)
|
|
97
|
+
in_question = stripped[3:].lower().startswith("q-")
|
|
98
|
+
status = ""
|
|
99
|
+
elif in_question and stripped.lower().startswith("status:"):
|
|
100
|
+
status = stripped.split(":", 1)[1].strip()
|
|
101
|
+
if in_question and status.lower() == "open":
|
|
102
|
+
raise SystemExit(0)
|
|
103
|
+
|
|
104
|
+
status_index = None
|
|
105
|
+
for line in lines:
|
|
106
|
+
stripped = line.strip()
|
|
107
|
+
if not (stripped.startswith("|") and stripped.endswith("|")):
|
|
108
|
+
status_index = None
|
|
109
|
+
continue
|
|
110
|
+
cells = [cell.strip() for cell in stripped.strip("|").split("|")]
|
|
111
|
+
lowered = [cell.lower() for cell in cells]
|
|
112
|
+
if status_index is None:
|
|
113
|
+
status_index = lowered.index("status") if "status" in lowered else None
|
|
114
|
+
continue
|
|
115
|
+
if status_index < len(cells) and cells[status_index].lower() == "open":
|
|
116
|
+
raise SystemExit(0)
|
|
117
|
+
raise SystemExit(1)
|
|
118
|
+
PY
|
|
119
|
+
then
|
|
120
|
+
add_problem "final.questions.open" "questions.md contains an open question"
|
|
75
121
|
fi
|
|
76
122
|
fi
|
|
77
123
|
|
|
78
|
-
# 7: state phase
|
|
124
|
+
# Check 7: state phase and status.
|
|
79
125
|
if [ -f "$st" ]; then
|
|
80
126
|
ph="$(python3 "$ROOT/scripts/workflow_schema.py" field "$st" phase 2>/dev/null || true)"
|
|
81
127
|
stt="$(python3 "$ROOT/scripts/workflow_schema.py" field "$st" status 2>/dev/null || true)"
|
|
82
|
-
if ! python3 "$ROOT/scripts/workflow_schema.py" phase-property "$ph" shippable; then
|
|
83
|
-
|
|
128
|
+
if ! python3 "$ROOT/scripts/workflow_schema.py" phase-property "$ph" shippable >/dev/null; then
|
|
129
|
+
add_problem "final.state.phase" "state.md Phase='${ph}' (expected a shippable phase)"
|
|
84
130
|
fi
|
|
85
|
-
case "$stt" in
|
|
131
|
+
case "$stt" in
|
|
132
|
+
awaiting_human|blocked)
|
|
133
|
+
add_problem "final.state.status" "state.md Status='${stt}' (not shippable)"
|
|
134
|
+
;;
|
|
135
|
+
esac
|
|
86
136
|
else
|
|
87
|
-
|
|
137
|
+
add_problem "final.state.missing" "state.md missing"
|
|
88
138
|
fi
|
|
89
139
|
|
|
90
|
-
# 8:
|
|
140
|
+
# Check 8: every spec [ACn] is proven and checked in the seal.
|
|
91
141
|
run_acceptance_check() {
|
|
92
142
|
if [ -n "${DEVRITES_CLI:-}" ]; then
|
|
93
143
|
"$DEVRITES_CLI" check-acceptance "$ws"
|
|
@@ -109,13 +159,44 @@ run_acceptance_check() {
|
|
|
109
159
|
return 127
|
|
110
160
|
}
|
|
111
161
|
|
|
112
|
-
if ! acout=$(run_acceptance_check 2>&1); then
|
|
113
|
-
|
|
162
|
+
if [ "$acceptance_ready" -eq 1 ] && ! acout=$(run_acceptance_check 2>&1); then
|
|
163
|
+
add_problem "final.acceptance.ids" \
|
|
164
|
+
"acceptance: $(printf '%s' "$acout" | tail -1 | sed 's/^check-acceptance: //')"
|
|
114
165
|
fi
|
|
115
166
|
|
|
116
167
|
slug="$(basename "$ws")"
|
|
168
|
+
if [ "$json" -eq 1 ]; then
|
|
169
|
+
status="GO"
|
|
170
|
+
[ "${#problems[@]}" -gt 0 ] && status="NO-GO"
|
|
171
|
+
pairs=()
|
|
172
|
+
for ((i = 0; i < ${#problems[@]}; i++)); do
|
|
173
|
+
pairs+=("${rules[$i]}" "${problems[$i]}")
|
|
174
|
+
done
|
|
175
|
+
python3 - "$slug" "$status" "${pairs[@]}" <<'PY'
|
|
176
|
+
import json
|
|
177
|
+
import sys
|
|
178
|
+
|
|
179
|
+
slug, status, *pairs = sys.argv[1:]
|
|
180
|
+
items = [
|
|
181
|
+
{"rule_id": pairs[i], "message": pairs[i + 1]}
|
|
182
|
+
for i in range(0, len(pairs), 2)
|
|
183
|
+
]
|
|
184
|
+
print(json.dumps({
|
|
185
|
+
"schema": "devrites-outcome-grade/v1",
|
|
186
|
+
"workspace": slug,
|
|
187
|
+
"status": status,
|
|
188
|
+
"rule_ids": [item["rule_id"] for item in items],
|
|
189
|
+
"problems": items,
|
|
190
|
+
}, separators=(",", ":")))
|
|
191
|
+
PY
|
|
192
|
+
if [ "${#problems[@]}" -eq 0 ]; then
|
|
193
|
+
exit 0
|
|
194
|
+
fi
|
|
195
|
+
exit 1
|
|
196
|
+
fi
|
|
197
|
+
|
|
117
198
|
if [ "${#problems[@]}" -eq 0 ]; then
|
|
118
|
-
printf 'GO %s: shippable: sealed GO, acceptance proven, no blockers, no open
|
|
199
|
+
printf 'GO %s: shippable: sealed GO, acceptance proven, no blockers, no open question.\n' "$slug"
|
|
119
200
|
exit 0
|
|
120
201
|
fi
|
|
121
202
|
printf 'NO-GO %s: %d blocker(s):\n' "$slug" "${#problems[@]}"
|
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"type": "object",
|
|
4
|
+
"additionalProperties": false,
|
|
5
|
+
"required": [
|
|
6
|
+
"result_version",
|
|
7
|
+
"run_id",
|
|
8
|
+
"cell_id",
|
|
9
|
+
"host",
|
|
10
|
+
"role",
|
|
11
|
+
"status",
|
|
12
|
+
"baseline_id",
|
|
13
|
+
"scope_id",
|
|
14
|
+
"budget",
|
|
15
|
+
"side_effects",
|
|
16
|
+
"payload_type",
|
|
17
|
+
"execution",
|
|
18
|
+
"signals",
|
|
19
|
+
"usage",
|
|
20
|
+
"dispatch_reason_id",
|
|
21
|
+
"result_reason_id",
|
|
22
|
+
"outcome",
|
|
23
|
+
"terminal_sentinel",
|
|
24
|
+
"host_version",
|
|
25
|
+
"model"
|
|
26
|
+
],
|
|
27
|
+
"properties": {
|
|
28
|
+
"result_version": {
|
|
29
|
+
"const": "agent-result/v1"
|
|
30
|
+
},
|
|
31
|
+
"run_id": {
|
|
32
|
+
"type": "string",
|
|
33
|
+
"pattern": "^drv-run-v1:[0-9a-f]{32}$"
|
|
34
|
+
},
|
|
35
|
+
"cell_id": {
|
|
36
|
+
"type": "string"
|
|
37
|
+
},
|
|
38
|
+
"host": {
|
|
39
|
+
"enum": [
|
|
40
|
+
"claude",
|
|
41
|
+
"codex"
|
|
42
|
+
]
|
|
43
|
+
},
|
|
44
|
+
"role": {
|
|
45
|
+
"type": "string"
|
|
46
|
+
},
|
|
47
|
+
"status": {
|
|
48
|
+
"enum": [
|
|
49
|
+
"complete",
|
|
50
|
+
"partial",
|
|
51
|
+
"blocked",
|
|
52
|
+
"failed"
|
|
53
|
+
]
|
|
54
|
+
},
|
|
55
|
+
"baseline_id": {
|
|
56
|
+
"type": "string"
|
|
57
|
+
},
|
|
58
|
+
"scope_id": {
|
|
59
|
+
"type": "string",
|
|
60
|
+
"pattern": "^[0-9a-f]{64}$"
|
|
61
|
+
},
|
|
62
|
+
"budget": {
|
|
63
|
+
"type": "object",
|
|
64
|
+
"additionalProperties": false,
|
|
65
|
+
"required": [
|
|
66
|
+
"files_used",
|
|
67
|
+
"loaded_lines_used",
|
|
68
|
+
"result_lines_used"
|
|
69
|
+
],
|
|
70
|
+
"properties": {
|
|
71
|
+
"files_used": {
|
|
72
|
+
"type": "integer",
|
|
73
|
+
"minimum": 0
|
|
74
|
+
},
|
|
75
|
+
"loaded_lines_used": {
|
|
76
|
+
"type": "integer",
|
|
77
|
+
"minimum": 0
|
|
78
|
+
},
|
|
79
|
+
"result_lines_used": {
|
|
80
|
+
"type": "integer",
|
|
81
|
+
"minimum": 0
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
},
|
|
85
|
+
"side_effects": {
|
|
86
|
+
"type": "object",
|
|
87
|
+
"additionalProperties": false,
|
|
88
|
+
"required": [
|
|
89
|
+
"repo_writes",
|
|
90
|
+
"scratch_write_count"
|
|
91
|
+
],
|
|
92
|
+
"properties": {
|
|
93
|
+
"repo_writes": {
|
|
94
|
+
"type": "array",
|
|
95
|
+
"items": {
|
|
96
|
+
"type": "object",
|
|
97
|
+
"additionalProperties": false,
|
|
98
|
+
"required": [
|
|
99
|
+
"path",
|
|
100
|
+
"kind",
|
|
101
|
+
"sha256"
|
|
102
|
+
],
|
|
103
|
+
"properties": {
|
|
104
|
+
"path": {
|
|
105
|
+
"type": "string"
|
|
106
|
+
},
|
|
107
|
+
"kind": {
|
|
108
|
+
"enum": [
|
|
109
|
+
"file",
|
|
110
|
+
"symlink",
|
|
111
|
+
"deleted"
|
|
112
|
+
]
|
|
113
|
+
},
|
|
114
|
+
"sha256": {
|
|
115
|
+
"type": "string",
|
|
116
|
+
"pattern": "^[0-9a-f]{64}$"
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
},
|
|
121
|
+
"scratch_write_count": {
|
|
122
|
+
"type": "integer",
|
|
123
|
+
"minimum": 0
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
},
|
|
127
|
+
"payload_type": {
|
|
128
|
+
"enum": [
|
|
129
|
+
"review-findings",
|
|
130
|
+
"wright-report"
|
|
131
|
+
]
|
|
132
|
+
},
|
|
133
|
+
"execution": {
|
|
134
|
+
"type": "object",
|
|
135
|
+
"additionalProperties": false,
|
|
136
|
+
"required": [
|
|
137
|
+
"mode",
|
|
138
|
+
"guard_strength",
|
|
139
|
+
"independence"
|
|
140
|
+
],
|
|
141
|
+
"properties": {
|
|
142
|
+
"mode": {
|
|
143
|
+
"enum": [
|
|
144
|
+
"named",
|
|
145
|
+
"generic",
|
|
146
|
+
"inline"
|
|
147
|
+
]
|
|
148
|
+
},
|
|
149
|
+
"guard_strength": {
|
|
150
|
+
"enum": [
|
|
151
|
+
"enforced",
|
|
152
|
+
"observed",
|
|
153
|
+
"unavailable",
|
|
154
|
+
"bypassed"
|
|
155
|
+
]
|
|
156
|
+
},
|
|
157
|
+
"independence": {
|
|
158
|
+
"type": "boolean"
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
},
|
|
162
|
+
"signals": {
|
|
163
|
+
"type": "array",
|
|
164
|
+
"items": {
|
|
165
|
+
"type": "string"
|
|
166
|
+
},
|
|
167
|
+
"uniqueItems": true
|
|
168
|
+
},
|
|
169
|
+
"usage": {
|
|
170
|
+
"type": "object",
|
|
171
|
+
"additionalProperties": false,
|
|
172
|
+
"required": [
|
|
173
|
+
"input_tokens",
|
|
174
|
+
"output_tokens",
|
|
175
|
+
"cost_usd",
|
|
176
|
+
"cost_provenance"
|
|
177
|
+
],
|
|
178
|
+
"properties": {
|
|
179
|
+
"input_tokens": {
|
|
180
|
+
"type": "integer",
|
|
181
|
+
"minimum": 0
|
|
182
|
+
},
|
|
183
|
+
"output_tokens": {
|
|
184
|
+
"type": "integer",
|
|
185
|
+
"minimum": 0
|
|
186
|
+
},
|
|
187
|
+
"cost_usd": {
|
|
188
|
+
"type": [
|
|
189
|
+
"string",
|
|
190
|
+
"null"
|
|
191
|
+
],
|
|
192
|
+
"pattern": "^[0-9]+(\\.[0-9]+)?$"
|
|
193
|
+
},
|
|
194
|
+
"cost_provenance": {
|
|
195
|
+
"enum": [
|
|
196
|
+
"provider-reported",
|
|
197
|
+
"unavailable"
|
|
198
|
+
]
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
},
|
|
202
|
+
"dispatch_reason_id": {
|
|
203
|
+
"type": "string",
|
|
204
|
+
"pattern": "^DRV-[A-Z0-9-]+$"
|
|
205
|
+
},
|
|
206
|
+
"result_reason_id": {
|
|
207
|
+
"type": "string",
|
|
208
|
+
"pattern": "^DRV-[A-Z0-9-]+$"
|
|
209
|
+
},
|
|
210
|
+
"outcome": {
|
|
211
|
+
"enum": [
|
|
212
|
+
"passed",
|
|
213
|
+
"denied",
|
|
214
|
+
"unavailable"
|
|
215
|
+
]
|
|
216
|
+
},
|
|
217
|
+
"terminal_sentinel": {
|
|
218
|
+
"enum": [
|
|
219
|
+
"complete",
|
|
220
|
+
"interrupted"
|
|
221
|
+
]
|
|
222
|
+
},
|
|
223
|
+
"host_version": {
|
|
224
|
+
"type": "string"
|
|
225
|
+
},
|
|
226
|
+
"model": {
|
|
227
|
+
"type": "string"
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
set -euo pipefail
|
|
3
|
+
|
|
4
|
+
DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd -P)"
|
|
5
|
+
# shellcheck disable=SC1091
|
|
6
|
+
source "$DIR/common.sh"
|
|
7
|
+
CONTRACT_HELPER="$DIR/host-transport.py"
|
|
8
|
+
|
|
9
|
+
case "${1:-}" in
|
|
10
|
+
version)
|
|
11
|
+
contract_version claude
|
|
12
|
+
;;
|
|
13
|
+
run)
|
|
14
|
+
;;
|
|
15
|
+
*)
|
|
16
|
+
contract_die "expected version or run"
|
|
17
|
+
;;
|
|
18
|
+
esac
|
|
19
|
+
|
|
20
|
+
contract_prepare_run
|
|
21
|
+
if [ -n "${DEVRITES_CONTRACT_FAKE_HOST:-}" ]; then
|
|
22
|
+
contract_run_fake
|
|
23
|
+
fi
|
|
24
|
+
contract_read_auth
|
|
25
|
+
actual_version="$(env -i "PATH=$PATH" "LANG=C" "LC_ALL=C" claude --version 2>/dev/null)" \
|
|
26
|
+
|| contract_die "Claude version preflight failed"
|
|
27
|
+
[ "$actual_version" = "$DEVRITES_CONTRACT_HOST_VERSION_PIN" ] \
|
|
28
|
+
|| contract_die "Claude version pin changed"
|
|
29
|
+
|
|
30
|
+
simulate="$(python3 "$CONTRACT_HELPER" field simulate)"
|
|
31
|
+
role_class="$(python3 "$CONTRACT_HELPER" field role_class)"
|
|
32
|
+
tools="Agent,Read,Glob,Grep"
|
|
33
|
+
if [ "$role_class" = "wright" ]; then
|
|
34
|
+
tools="$tools,Edit,Write,Bash"
|
|
35
|
+
fi
|
|
36
|
+
if [ "$simulate" = "inline-fallback" ]; then
|
|
37
|
+
tools="Read,Glob,Grep"
|
|
38
|
+
fi
|
|
39
|
+
schema="$(cat "$DIR/agent-result.schema.json")"
|
|
40
|
+
mkdir -p "$XDG_CONFIG_HOME/claude"
|
|
41
|
+
|
|
42
|
+
trap 'contract_interrupt_result; exit 130' INT TERM
|
|
43
|
+
cd "$DEVRITES_ROOT"
|
|
44
|
+
set +e
|
|
45
|
+
env -i \
|
|
46
|
+
"PATH=$PATH" "LANG=C" "LC_ALL=C" "PYTHONDONTWRITEBYTECODE=1" \
|
|
47
|
+
"DEVRITES_CONTRACT_PACKET=$DEVRITES_CONTRACT_PACKET" \
|
|
48
|
+
python3 "$CONTRACT_HELPER" render |
|
|
49
|
+
env -i \
|
|
50
|
+
"PATH=$PATH" "LANG=C" "LC_ALL=C" \
|
|
51
|
+
"HOME=$HOME" "TMPDIR=$TMPDIR" \
|
|
52
|
+
"XDG_CONFIG_HOME=$XDG_CONFIG_HOME" "XDG_STATE_HOME=$XDG_STATE_HOME" \
|
|
53
|
+
"CLAUDE_CONFIG_DIR=$XDG_CONFIG_HOME/claude" \
|
|
54
|
+
"CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1" \
|
|
55
|
+
"ANTHROPIC_API_KEY=$CONTRACT_AUTH_VALUE" \
|
|
56
|
+
"DEVRITES_ROOT=$DEVRITES_ROOT" \
|
|
57
|
+
"DEVRITES_AGENT_SCRATCH=$DEVRITES_AGENT_SCRATCH" \
|
|
58
|
+
"DEVRITES_RUN_ID=$DEVRITES_RUN_ID" \
|
|
59
|
+
claude -p \
|
|
60
|
+
--output-format json \
|
|
61
|
+
--json-schema "$schema" \
|
|
62
|
+
--model "$DEVRITES_CONTRACT_MODEL" \
|
|
63
|
+
--max-budget-usd "$DEVRITES_CONTRACT_MAX_COST_USD" \
|
|
64
|
+
--permission-mode dontAsk \
|
|
65
|
+
--tools "$tools" \
|
|
66
|
+
--setting-sources project \
|
|
67
|
+
--settings '{}' \
|
|
68
|
+
--strict-mcp-config \
|
|
69
|
+
--mcp-config '{"mcpServers":{}}' \
|
|
70
|
+
--no-chrome \
|
|
71
|
+
--no-session-persistence |
|
|
72
|
+
env -i \
|
|
73
|
+
"PATH=$PATH" "LANG=C" "LC_ALL=C" "PYTHONDONTWRITEBYTECODE=1" \
|
|
74
|
+
"DEVRITES_CONTRACT_PACKET=$DEVRITES_CONTRACT_PACKET" \
|
|
75
|
+
"DEVRITES_CONTRACT_RESULT=$DEVRITES_CONTRACT_RESULT" \
|
|
76
|
+
"DEVRITES_CONTRACT_HOST_VERSION_PIN=$DEVRITES_CONTRACT_HOST_VERSION_PIN" \
|
|
77
|
+
"DEVRITES_CONTRACT_MODEL=$DEVRITES_CONTRACT_MODEL" \
|
|
78
|
+
python3 "$CONTRACT_HELPER" normalize
|
|
79
|
+
pipeline=("${PIPESTATUS[@]}")
|
|
80
|
+
set -e
|
|
81
|
+
host_rc="${pipeline[1]:-2}"
|
|
82
|
+
normalize_rc="${pipeline[2]:-2}"
|
|
83
|
+
[ "$normalize_rc" -eq 0 ] || exit 2
|
|
84
|
+
if [ "$host_rc" -eq 130 ]; then
|
|
85
|
+
contract_interrupt_result
|
|
86
|
+
fi
|
|
87
|
+
exit "$host_rc"
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
set -euo pipefail
|
|
3
|
+
|
|
4
|
+
DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd -P)"
|
|
5
|
+
# shellcheck disable=SC1091
|
|
6
|
+
source "$DIR/common.sh"
|
|
7
|
+
CONTRACT_HELPER="$DIR/host-transport.py"
|
|
8
|
+
|
|
9
|
+
case "${1:-}" in
|
|
10
|
+
version)
|
|
11
|
+
contract_version codex
|
|
12
|
+
;;
|
|
13
|
+
run)
|
|
14
|
+
;;
|
|
15
|
+
*)
|
|
16
|
+
contract_die "expected version or run"
|
|
17
|
+
;;
|
|
18
|
+
esac
|
|
19
|
+
|
|
20
|
+
contract_prepare_run
|
|
21
|
+
if [ -n "${DEVRITES_CONTRACT_FAKE_HOST:-}" ]; then
|
|
22
|
+
contract_run_fake
|
|
23
|
+
fi
|
|
24
|
+
contract_read_auth
|
|
25
|
+
actual_version="$(env -i "PATH=$PATH" "LANG=C" "LC_ALL=C" codex --version 2>/dev/null)" \
|
|
26
|
+
|| contract_die "Codex version preflight failed"
|
|
27
|
+
[ "$actual_version" = "$DEVRITES_CONTRACT_HOST_VERSION_PIN" ] \
|
|
28
|
+
|| contract_die "Codex version pin changed"
|
|
29
|
+
|
|
30
|
+
role_class="$(python3 "$CONTRACT_HELPER" field role_class)"
|
|
31
|
+
sandbox="read-only"
|
|
32
|
+
if [ "$role_class" = "wright" ]; then
|
|
33
|
+
sandbox="workspace-write"
|
|
34
|
+
fi
|
|
35
|
+
mkdir -p "$XDG_CONFIG_HOME/codex"
|
|
36
|
+
|
|
37
|
+
trap 'contract_interrupt_result; exit 130' INT TERM
|
|
38
|
+
cd "$DEVRITES_ROOT"
|
|
39
|
+
set +e
|
|
40
|
+
env -i \
|
|
41
|
+
"PATH=$PATH" "LANG=C" "LC_ALL=C" "PYTHONDONTWRITEBYTECODE=1" \
|
|
42
|
+
"DEVRITES_CONTRACT_PACKET=$DEVRITES_CONTRACT_PACKET" \
|
|
43
|
+
python3 "$CONTRACT_HELPER" render |
|
|
44
|
+
env -i \
|
|
45
|
+
"PATH=$PATH" "LANG=C" "LC_ALL=C" \
|
|
46
|
+
"HOME=$HOME" "TMPDIR=$TMPDIR" \
|
|
47
|
+
"XDG_CONFIG_HOME=$XDG_CONFIG_HOME" "XDG_STATE_HOME=$XDG_STATE_HOME" \
|
|
48
|
+
"CODEX_HOME=$XDG_CONFIG_HOME/codex" \
|
|
49
|
+
"OPENAI_API_KEY=$CONTRACT_AUTH_VALUE" \
|
|
50
|
+
"DEVRITES_ROOT=$DEVRITES_ROOT" \
|
|
51
|
+
"DEVRITES_AGENT_SCRATCH=$DEVRITES_AGENT_SCRATCH" \
|
|
52
|
+
"DEVRITES_RUN_ID=$DEVRITES_RUN_ID" \
|
|
53
|
+
codex exec \
|
|
54
|
+
--json \
|
|
55
|
+
--ephemeral \
|
|
56
|
+
--strict-config \
|
|
57
|
+
--ignore-user-config \
|
|
58
|
+
--skip-git-repo-check \
|
|
59
|
+
--dangerously-bypass-hook-trust \
|
|
60
|
+
--sandbox "$sandbox" \
|
|
61
|
+
--model "$DEVRITES_CONTRACT_MODEL" \
|
|
62
|
+
--output-schema "$DIR/agent-result.schema.json" \
|
|
63
|
+
-c shell_environment_policy.inherit=none \
|
|
64
|
+
-C "$DEVRITES_ROOT" \
|
|
65
|
+
- |
|
|
66
|
+
env -i \
|
|
67
|
+
"PATH=$PATH" "LANG=C" "LC_ALL=C" "PYTHONDONTWRITEBYTECODE=1" \
|
|
68
|
+
"DEVRITES_CONTRACT_PACKET=$DEVRITES_CONTRACT_PACKET" \
|
|
69
|
+
"DEVRITES_CONTRACT_RESULT=$DEVRITES_CONTRACT_RESULT" \
|
|
70
|
+
"DEVRITES_CONTRACT_HOST_VERSION_PIN=$DEVRITES_CONTRACT_HOST_VERSION_PIN" \
|
|
71
|
+
"DEVRITES_CONTRACT_MODEL=$DEVRITES_CONTRACT_MODEL" \
|
|
72
|
+
python3 "$CONTRACT_HELPER" normalize
|
|
73
|
+
pipeline=("${PIPESTATUS[@]}")
|
|
74
|
+
set -e
|
|
75
|
+
host_rc="${pipeline[1]:-2}"
|
|
76
|
+
normalize_rc="${pipeline[2]:-2}"
|
|
77
|
+
[ "$normalize_rc" -eq 0 ] || exit 2
|
|
78
|
+
if [ "$host_rc" -eq 130 ]; then
|
|
79
|
+
contract_interrupt_result
|
|
80
|
+
fi
|
|
81
|
+
exit "$host_rc"
|