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
|
@@ -10,33 +10,36 @@ This is the Codex mirror of a DevRites skill. In Codex:
|
|
|
10
10
|
|
|
11
11
|
- 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.
|
|
12
12
|
- Use the installed `devrites-engine` binary as the canonical runtime helper surface for orientation, gates, and state mutation.
|
|
13
|
-
-
|
|
14
|
-
-
|
|
15
|
-
-
|
|
13
|
+
- **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.
|
|
14
|
+
- 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`.
|
|
15
|
+
- 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.
|
|
16
|
+
- 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.
|
|
17
|
+
- 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.
|
|
18
|
+
- Wait for every required fresh-context dispatch before reconciling or advancing. A backgrounded or lost result is incomplete.
|
|
19
|
+
- 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.
|
|
16
20
|
- 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.
|
|
17
21
|
|
|
18
22
|
|
|
19
23
|
# devrites-interview: extract intent
|
|
20
24
|
|
|
21
|
-
|
|
22
|
-
|
|
25
|
+
Resolve the difference between the request and the user's intent before writing a
|
|
26
|
+
spec, plan, or code.
|
|
23
27
|
|
|
24
28
|
## Protocol
|
|
25
|
-
- **State a confidence number.** Open with
|
|
26
|
-
explicit **0-100%** confidence
|
|
27
|
-
predict
|
|
28
|
-
|
|
29
|
+
- **State a confidence number.** Open with a one-line hypothesis of what the user wants and an
|
|
30
|
+
explicit **0-100%** confidence. Check the number against the next three questions you would ask:
|
|
31
|
+
if you cannot predict the user's answers, lower it. Below **~70%**, append the single unresolved
|
|
32
|
+
point so the user can answer it directly.
|
|
29
33
|
- **One question per turn.** Multiple questions get one answered and the rest ignored.
|
|
30
|
-
- **Attach your best guess** to every question
|
|
34
|
+
- **Attach your best guess** and its reason to every question:
|
|
31
35
|
> "I'm assuming export is CSV only (covers the stated use case). Right, or also XLSX?"
|
|
32
|
-
|
|
33
|
-
can fix the premise.
|
|
36
|
+
The user can then correct a concrete premise instead of answering an open-ended question.
|
|
34
37
|
- **Highest-value question first:** order by how much the answer changes the build. A
|
|
35
38
|
question that moves the data model or acceptance criteria beats a cosmetic one.
|
|
36
|
-
- **
|
|
37
|
-
technical
|
|
38
|
-
the spec
|
|
39
|
-
detail never
|
|
39
|
+
- **Prioritize impact and limit blockers.** Order unknowns **scope > security/privacy > UX >
|
|
40
|
+
technical**. Ask at most **3 blocking questions** per pass, choosing only those that gate
|
|
41
|
+
the spec. Record the rest in `assumptions.md` with the best guess and reason. A reversible
|
|
42
|
+
detail is never blocking.
|
|
40
43
|
- **Structured options** when the space is enumerable: present them as the standard ranked
|
|
41
44
|
**option set** (`standards/afk-hitl.md` → "Option set"): recommended **first**, labelled
|
|
42
45
|
`(Recommended)`, each with a dimension-tagged rationale (`logic · infra · business ·
|
|
@@ -49,38 +52,34 @@ before a plan, spec, or code exists.
|
|
|
49
52
|
```
|
|
50
53
|
|
|
51
54
|
## Stop condition
|
|
52
|
-
Stop **opening new questions** when
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
- **Confidence: the predict-three test.**
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
missing: step back and name it, don't grind out more questions.
|
|
55
|
+
Stop **opening new questions** when any condition below holds. This does not transfer a
|
|
56
|
+
material decision to the agent. Present that decision as a ranked option set even when
|
|
57
|
+
high confidence makes it a one-pick confirmation.
|
|
58
|
+
- **Confidence: the predict-three test.** At 95%, you should be able to predict the user's
|
|
59
|
+
reaction to the next three questions. If so, stop. If several rounds pass without that
|
|
60
|
+
confidence, name the missing premise instead of asking more narrow questions.
|
|
59
61
|
- **Convergence:** the last 2-3 answers only rubber-stamped your guesses and didn't
|
|
60
62
|
move the spec.
|
|
61
63
|
- **Soft cap:** after ~8 material questions, proceed with your best-guess answers logged
|
|
62
64
|
in `assumptions.md` rather than asking more (hard-stop sooner if the ask is small).
|
|
63
65
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
another question.
|
|
66
|
+
Ask fewer, deeper questions. If answers stop converging and the discussion circles one
|
|
67
|
+
area, **reframe once** instead of asking another version of the same question.
|
|
67
68
|
|
|
68
69
|
## Want vs. should-want
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
"modern"),
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
then record it; don't design to the performed one.
|
|
70
|
+
Users sometimes name the convention or best practice they think they should want instead
|
|
71
|
+
of their actual preference. Signals include abstract virtues ("scalable", "clean",
|
|
72
|
+
"modern"), deference to convention, or an answer that fits any project. Ask: *"if you
|
|
73
|
+
didn't have to justify this to anyone, what would you want?"* Record that answer rather
|
|
74
|
+
than designing to the generic one.
|
|
75
75
|
|
|
76
76
|
## What counts as a yes
|
|
77
|
-
Approval
|
|
78
|
-
- *"Whatever you think is best"* / *"you decide"*: **delegation, not approval.**
|
|
79
|
-
concrete options so the user chooses
|
|
80
|
-
- *"Sounds good"* / *"sure, let's go"*:
|
|
81
|
-
|
|
82
|
-
- **Silence:** not consent.
|
|
83
|
-
built. Make the "out of scope" line explicit and get a yes on it too.
|
|
77
|
+
Approval requires an **explicit** yes. Treat these replies differently:
|
|
78
|
+
- *"Whatever you think is best"* / *"you decide"*: **delegation, not approval.** Offer two
|
|
79
|
+
concrete options so the user chooses the substance.
|
|
80
|
+
- *"Sounds good"* / *"sure, let's go"*: confirm once for a material decision rather than
|
|
81
|
+
treating a polite exit as approval.
|
|
82
|
+
- **Silence:** not consent. State what is out of scope and get explicit approval for it.
|
|
84
83
|
|
|
85
84
|
## Don't ask
|
|
86
85
|
- Things the codebase answers (read it first).
|
|
@@ -88,29 +87,35 @@ Approval is an **explicit** yes, and several common replies aren't one:
|
|
|
88
87
|
- Everything at once "to be thorough."
|
|
89
88
|
|
|
90
89
|
## When the ask is vague: map the decision tree first
|
|
91
|
-
For a
|
|
92
|
-
|
|
93
|
-
|
|
90
|
+
For a short or vague request (`"design a contact page"`), do not ask isolated questions.
|
|
91
|
+
Sketch the **decision tree** first, then resolve each branch **depth-first** with the
|
|
92
|
+
protocol above. Domain branches per area:
|
|
94
93
|
`rite-spec/reference/interview-patterns.md`.
|
|
95
94
|
|
|
96
95
|
## Reframe (once, when stuck)
|
|
97
|
-
If the interview
|
|
98
|
-
|
|
99
|
-
|
|
96
|
+
If the interview is not converging, use **one** turn to challenge the premise:
|
|
97
|
+
*"is a form even the right answer here, or a mailto / booking link?"* Then resume the
|
|
98
|
+
protocol with the revised premise.
|
|
100
99
|
|
|
101
100
|
## /clarify mode: coverage scan of an existing spec
|
|
102
|
-
When
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
101
|
+
When clarifying a written spec rather than extracting intent from scratch, first enumerate
|
|
102
|
+
its actors, journeys/components, states, data boundaries, interfaces/integrations, and
|
|
103
|
+
operational/proof surfaces. Scan every material surface against the caller's fixed taxonomy and mark
|
|
104
|
+
**Clear / Partial / Missing** with evidence. Ask **≤5 prioritized decision packets per scan**,
|
|
105
|
+
targeting Missing before Partial, one per turn with a best-guess attached. A packet may close
|
|
106
|
+
several cells only when they share one owner and trade-off.
|
|
107
|
+
|
|
108
|
+
**Integrate each answer into the relevant spec section** immediately. A Q&A log alone is
|
|
109
|
+
insufficient.
|
|
110
|
+
Append a dated **`## Clarifications`** block to `spec.md` with the question and resolution.
|
|
111
|
+
Re-run the scan after answers. The general question caps control cognitive load; they never turn
|
|
112
|
+
a material blocker into a silent assumption. Continue another scan while human-owned blockers
|
|
113
|
+
remain, and stop only when every row is clear, agent-owned, not applicable, or explicitly
|
|
114
|
+
deferred with a nonblocking reason, owner, and validation gate. Then re-score the affected
|
|
110
115
|
`checklists/<domain>.md`.
|
|
111
116
|
|
|
112
117
|
## Output
|
|
113
|
-
A short summary the caller
|
|
114
|
-
|
|
118
|
+
A short summary for the caller: objective in one sentence, confirmed decisions,
|
|
119
|
+
open non-blocking items, and the recommended next step. If a workspace is active, write
|
|
115
120
|
Q&A to `questions.md`, confirmed calls to `decisions.md`, standing guesses to
|
|
116
121
|
`assumptions.md`. If not, just return the summary: don't create a workspace.
|
|
@@ -11,21 +11,25 @@ This is the Codex mirror of a DevRites skill. In Codex:
|
|
|
11
11
|
|
|
12
12
|
- 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.
|
|
13
13
|
- Use the installed `devrites-engine` binary as the canonical runtime helper surface for orientation, gates, and state mutation.
|
|
14
|
-
-
|
|
15
|
-
-
|
|
16
|
-
-
|
|
14
|
+
- **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.
|
|
15
|
+
- 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`.
|
|
16
|
+
- 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.
|
|
17
|
+
- 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.
|
|
18
|
+
- 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.
|
|
19
|
+
- Wait for every required fresh-context dispatch before reconciling or advancing. A backgrounded or lost result is incomplete.
|
|
20
|
+
- 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.
|
|
17
21
|
- 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.
|
|
18
22
|
|
|
19
23
|
|
|
20
24
|
# devrites-lib: internal shared helpers (not a command)
|
|
21
25
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
26
|
+
Do **not** run this skill directly. It lists shared references and control-plane
|
|
27
|
+
operations. Skills call `devrites-engine <command>` from any workspace without a pack
|
|
28
|
+
script path.
|
|
25
29
|
|
|
26
30
|
## Operations
|
|
27
31
|
|
|
28
|
-
These are selected `devrites-engine` contracts
|
|
32
|
+
These are selected `devrites-engine` contracts. Run `devrites-engine help` for the full list.
|
|
29
33
|
|
|
30
34
|
**Read-only: orient / gate (never mutate the workspace):**
|
|
31
35
|
|
|
@@ -34,13 +38,13 @@ These are selected `devrites-engine` contracts; `devrites-engine help` is exhaus
|
|
|
34
38
|
open-question tally by gate. Run first (step 0) by every workspace-operating
|
|
35
39
|
`rite-*` skill so the model orients deterministically instead of re-deriving
|
|
36
40
|
state from raw Markdown.
|
|
37
|
-
- `devrites-engine progress`: progress footer
|
|
38
|
-
|
|
41
|
+
- `devrites-engine progress`: progress footer and counterpart to the initial
|
|
42
|
+
`devrites-engine preamble`. Run it **last** in every lifecycle `rite-*` skill to render from
|
|
39
43
|
`state.md`, with zero model drift) the `── rite-<phase> ──` header rule, the **slice
|
|
40
44
|
meter** (`Slice 3/5 ██████░░░░ <last-built> ✓`, or `Slices 5/5 ██████████ ✅ ALL
|
|
41
45
|
BUILT` at completion), and the **flow ribbon** (`spec ✓ define ✓ build ◉ … ship ○`).
|
|
42
46
|
The meter answers "how many slices left"; the `✅ ALL BUILT` marker answers "is the
|
|
43
|
-
build done". The skill prints its own
|
|
47
|
+
build done". The skill prints its own result, next step, and hygiene lines beneath
|
|
44
48
|
it. Read-only; silent (exit 0) when there is no active workspace. Not for the workspace-less
|
|
45
49
|
utilities (`$rite-prototype`, `$rite-zoom-out`, `$rite-pressure-test`, `$rite-handoff`,
|
|
46
50
|
the `$rite` menu). They have no phase/slice state to render.
|
|
@@ -55,7 +59,10 @@ These are selected `devrites-engine` contracts; `devrites-engine help` is exhaus
|
|
|
55
59
|
- `devrites-engine build-readiness`: build-readiness gate. Exits non-zero on `$rite-build`'s
|
|
56
60
|
step-0 stop conditions so they hold by exit code, not by prose the model must
|
|
57
61
|
remember: `2` no `Plan approved` (→ `$rite-define`), `3` `awaiting_human`
|
|
58
|
-
(→ `$rite-resolve`), `4` `blocked` (→ `$rite-plan`), `5` no workspace
|
|
62
|
+
(→ `$rite-resolve`), `4` `blocked` (→ `$rite-plan`), `5` no workspace
|
|
63
|
+
(→ `$rite-spec`), `6` decision coverage missing/not CLEAR (→ `$rite-clarify`),
|
|
64
|
+
`7` implementation readiness missing/not READY (→ `$rite-vet`), `8` older or unknown
|
|
65
|
+
semantic readiness contract (→ `$rite-upgrade`), `0` ready.
|
|
59
66
|
- `devrites-engine evidence-fresh`: evidence-freshness gate for `$rite-seal`. Exits `3`
|
|
60
67
|
when any file in `touched-files.md` is newer than `evidence.md` /
|
|
61
68
|
`browser-evidence.md` (stale proof = NO-GO until re-proven), `0` when fresh.
|
|
@@ -76,7 +83,7 @@ These are selected `devrites-engine` contracts; `devrites-engine help` is exhaus
|
|
|
76
83
|
- `devrites-engine resolve`: backs the `$rite-resolve` contract (answer / drop / batch).
|
|
77
84
|
- `devrites-engine close-out`: archive the workspace + clear `ACTIVE` on `$rite-ship`.
|
|
78
85
|
|
|
79
|
-
### Canonical footer
|
|
86
|
+
### Canonical footer
|
|
80
87
|
|
|
81
88
|
Every lifecycle `rite-*` skill prints this as the **first lines of its output**, then its
|
|
82
89
|
own compact fact lines below per [`reply-contract.md`](reference/reply-contract.md):
|
|
@@ -4,9 +4,11 @@ This is an explicit reference, not a session-start autoload. Load it when the us
|
|
|
4
4
|
|
|
5
5
|
| User intent | Route | Notes |
|
|
6
6
|
|---|---|---|
|
|
7
|
-
| New feature / vague product idea | `$rite-spec` (Codex: `$rite-spec`) | Investigate
|
|
7
|
+
| New feature / vague product idea | `$rite-spec` (Codex: `$rite-spec`) | Investigate before planning. |
|
|
8
|
+
| Written spec still has unknowns / missing decision coverage | `$rite-clarify` | Required before planning; topology scan, zero-question fast path when clear. |
|
|
8
9
|
| Existing codebase / resume reality | `$rite-adopt` or `$rite-converge` | Adopt derives intent from code; converge appends remaining slices. |
|
|
9
|
-
|
|
|
10
|
+
| Active workspace created under older DevRites rules | `$rite-upgrade` | Explicit-only semantic reconciliation; preserves completed work and history. `devrites-engine migrate` handles structure only. |
|
|
11
|
+
| Review plan before code | `$rite-vet` | Every defined plan; depth scales to stakes and emits the implementation-readiness verdict. |
|
|
10
12
|
| Small safe fix | `$rite-quick` | Escalates on auth, migration, public API, destructive, ambiguous, or multi-slice work. |
|
|
11
13
|
| Prove UI/runtime | `$rite-prove` plus `devrites-browser-proof` | Capture real evidence. |
|
|
12
14
|
| Stuck / unfamiliar area | `$rite-zoom-out` | Map structure before changing code. |
|
|
@@ -1,165 +1,110 @@
|
|
|
1
1
|
# Parallel review dispatch
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
This file defines reviewer rosters for `$rite-review` and `$rite-seal`. The shared
|
|
4
|
+
packet, result, capability ladder, concurrency limit, retry, and reconciliation rules live in
|
|
5
|
+
[`standards/agents.md`](standards/agents.md); do not restate them here.
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
here: the roster table below names them under **Not in this fan-out** so the set is unambiguous.
|
|
7
|
+
All reviewers read the same **immutable candidate**, but no more than three run
|
|
8
|
+
concurrently. For a larger panel, use awaited batches of at most three; after resource
|
|
9
|
+
or process errors, reduce the batch or run serially. A batch boundary does not permit a
|
|
10
|
+
write.
|
|
12
11
|
|
|
13
|
-
|
|
14
|
-
them concurrently, reconcile on return.
|
|
12
|
+
## Roster
|
|
15
13
|
|
|
16
|
-
|
|
14
|
+
`$rite-seal` accounts for all seven roles. `$rite-review` runs the first two.
|
|
15
|
+
Conditional triggers use the listed signals.
|
|
17
16
|
|
|
18
|
-
|
|
19
|
-
plus each conditional, either dispatched or skip-recorded; `$rite-review` runs the two always-on
|
|
20
|
-
axes. Each trigger is a *checkable signal*, not a judgement call, so a conditional reviewer is
|
|
21
|
-
either fired or consciously skipped: never silently dropped.
|
|
22
|
-
|
|
23
|
-
| Reviewer | Fires | Trigger: the checkable signal |
|
|
17
|
+
| Reviewer | Fires | Trigger |
|
|
24
18
|
|---|---|---|
|
|
25
|
-
| `devrites-spec-reviewer` | always |
|
|
26
|
-
| `devrites-code-reviewer` | always |
|
|
27
|
-
| `devrites-test-analyst` | always
|
|
28
|
-
| `devrites-frontend-reviewer` | conditional |
|
|
29
|
-
| `devrites-security-auditor` | conditional |
|
|
30
|
-
| `devrites-performance-reviewer` | conditional |
|
|
31
|
-
| `devrites-devex-reviewer` | conditional |
|
|
32
|
-
|
|
33
|
-
### Hit-rate gating: consult before dispatching conditionals
|
|
34
|
-
|
|
35
|
-
Before dispatching, run `devrites-engine reviewer-stats report`. It grades each reviewer from the
|
|
36
|
-
cross-feature dispatch ledger (`.devrites/reviewer-stats.jsonl`):
|
|
37
|
-
|
|
38
|
-
- `run` / `run (always-on)` / `run (insurance — never gated)`: dispatch per the trigger table above.
|
|
39
|
-
- `gate-candidate`: this **conditional** reviewer produced zero surviving findings in its last 10+
|
|
40
|
-
dispatches on this project. Skip it as a *recorded* skip:
|
|
41
|
-
`devrites-engine footprint log <slug> skip devrites-<x>-reviewer` with the reason
|
|
42
|
-
`gated: zero surviving findings in <N> dispatches`. The roster gate stays satisfied: a gated
|
|
43
|
-
skip is a conscious skip.
|
|
44
|
-
|
|
45
|
-
The verdict is engine-owned and deterministic; never gate by your own judgement of a reviewer's
|
|
46
|
-
past usefulness. Two hard bounds: the always-on axes (`spec`, `code-review`, `test-analyst`) and
|
|
47
|
-
the insurance reviewers (`security-auditor`, `doubt-reviewer`) are **never** gated: the engine
|
|
48
|
-
never grades them `gate-candidate`, and a caller must not skip them on hit-rate grounds. The user
|
|
49
|
-
can override gating for one run by asking for a full panel (`--full`): then dispatch every
|
|
50
|
-
triggered reviewer regardless of verdict.
|
|
51
|
-
|
|
52
|
-
After reconciliation, close the loop: record each **dispatched** reviewer's outcome so the
|
|
53
|
-
ledger stays live:
|
|
19
|
+
| `devrites-spec-reviewer` | always | review Spec axis; seal may carry it forward only on the identical candidate |
|
|
20
|
+
| `devrites-code-reviewer` | always | review Code-review axis; seal may carry it forward only on the identical candidate |
|
|
21
|
+
| `devrites-test-analyst` | always at seal | completed feature |
|
|
22
|
+
| `devrites-frontend-reviewer` | conditional | diff touches a component, template, stylesheet, story, route, screen, or design token |
|
|
23
|
+
| `devrites-security-auditor` | conditional | input, auth/authz, data access/storage, external integration, permission, dependency, or secret |
|
|
24
|
+
| `devrites-performance-reviewer` | conditional | spec has a performance budget, or diff adds a query, growing-set loop, render/hot-path work, or material payload |
|
|
25
|
+
| `devrites-devex-reviewer` | conditional | public API, CLI, SDK/export, webhook, config/env, error message, docs, or getting-started path |
|
|
54
26
|
|
|
55
|
-
|
|
56
|
-
devrites-
|
|
57
|
-
|
|
27
|
+
Not in this roster: `devrites-simplifier-reviewer` (polish), `devrites-doubt-reviewer`
|
|
28
|
+
(doubt), `devrites-strategy-reviewer` (temper), `devrites-plan-reviewer` (vet),
|
|
29
|
+
`devrites-forge-judge` (build), and `devrites-retrospector` (ship).
|
|
58
30
|
|
|
59
|
-
|
|
60
|
-
false positive does not count. Record `0` honestly; dry streaks are the signal.
|
|
31
|
+
## Hit-rate gating
|
|
61
32
|
|
|
62
|
-
|
|
63
|
-
at `$rite-polish` Phase 1 (via `devrites-audit simplify`) and `devrites-doubt-reviewer` fires from
|
|
64
|
-
`devrites-doubt` when a decision is stood up: neither is a seal reviewer, so neither is part of
|
|
65
|
-
the seal accounting. `devrites-strategy-reviewer` (pre-plan, `$rite-temper`), `devrites-plan-reviewer`
|
|
66
|
-
(pre-build, `$rite-vet`), `devrites-forge-judge` (`$rite-build` forge), and `devrites-retrospector`
|
|
67
|
-
(`$rite-ship` close) are single-agent, phase-locked gates. They fire iff their phase runs, not here.
|
|
33
|
+
Before conditionals, run:
|
|
68
34
|
|
|
69
|
-
|
|
70
|
-
|
|
35
|
+
```bash
|
|
36
|
+
devrites-engine reviewer-stats report
|
|
37
|
+
```
|
|
71
38
|
|
|
72
|
-
|
|
39
|
+
- `run`, `run (always-on)`, or `run (insurance — never gated)`: apply the roster.
|
|
40
|
+
- `gate-candidate`: a conditional produced zero surviving findings in its last 10+
|
|
41
|
+
dispatches. Record a skip with `gated: zero surviving findings in <N> dispatches`.
|
|
42
|
+
- `--full`: dispatch every triggered reviewer despite gating.
|
|
73
43
|
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
44
|
+
Always-on reviewers and insurance reviewers (security and doubt) are never hit-rate
|
|
45
|
+
gated. After reconciliation, record each dispatched reviewer's surviving
|
|
46
|
+
Critical+Important count:
|
|
77
47
|
|
|
78
|
-
```
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
Workspace: .devrites/work/<slug>/
|
|
82
|
-
Read (yourself, fresh context):
|
|
83
|
-
- spec.md (+ acceptance criteria)
|
|
84
|
-
- touched-files.md
|
|
85
|
-
- the git diff
|
|
86
|
-
- <any axis-specific files: decisions.md, evidence.md, references/...>
|
|
87
|
-
|
|
88
|
-
Before judging the diff, derive the expected behaviour from the spec
|
|
89
|
-
yourself, then compare it against what the code does. Anchor every finding
|
|
90
|
-
to file:line plus the spec criterion or command output that proves it —
|
|
91
|
-
an unanchored finding is a Suggestion at most. The order or length of the
|
|
92
|
-
diff is not evidence.
|
|
93
|
-
|
|
94
|
-
Apply your documented discipline. Return labeled findings (Critical /
|
|
95
|
-
Important / Suggestion / Nit / FYI) using your documented output format,
|
|
96
|
-
ONE FINDING PER LINE, cite file:line.
|
|
97
|
-
|
|
98
|
-
Feature scope only. No edits. Do not summarize or re-rank — the caller
|
|
99
|
-
reconciles.
|
|
48
|
+
```bash
|
|
49
|
+
devrites-engine reviewer-stats record devrites-<x>-reviewer <count> <slug>
|
|
100
50
|
```
|
|
101
51
|
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
52
|
+
## Reviewer packet
|
|
53
|
+
|
|
54
|
+
Create `agent-packet/v1` per `standards/agents.md`. In addition to the common fields:
|
|
55
|
+
|
|
56
|
+
```yaml
|
|
57
|
+
objective: Audit the active feature on <axis>; derive expected behavior independently.
|
|
58
|
+
inputs:
|
|
59
|
+
- path: .devrites/work/<slug>/spec.md
|
|
60
|
+
purpose: acceptance contract
|
|
61
|
+
- path: .devrites/work/<slug>/touched-files.md
|
|
62
|
+
purpose: feature boundary
|
|
63
|
+
- path: <scratch_root>/candidate.diff
|
|
64
|
+
purpose: reviewed candidate
|
|
65
|
+
scope:
|
|
66
|
+
in: [<axis-specific workspace paths>, <touched source/test paths>]
|
|
67
|
+
out: [author reasoning, sibling findings, unrelated repository debt]
|
|
68
|
+
allowed_repo_writes: []
|
|
69
|
+
```
|
|
115
70
|
|
|
116
|
-
|
|
71
|
+
Tell the role to apply its documented discipline and return `payload.type:
|
|
72
|
+
review-findings`, one finding per line, labeled Critical / Important / Suggestion /
|
|
73
|
+
Nit / FYI and anchored to `file:line` plus the spec criterion or observed command.
|
|
74
|
+
The exact result `CANNOT-VERIFY: <requirement> — <why>` is never a pass.
|
|
117
75
|
|
|
118
|
-
|
|
119
|
-
consciously skipped with a one-line reason. A conditional reviewer that genuinely does not apply
|
|
120
|
-
(no UI in the diff → `frontend-reviewer`) is a *recorded* skip, not a silent no-op. That record
|
|
121
|
-
is the difference between "reviewed" and "declared done after firing three of seven": the silent
|
|
122
|
-
skip is exactly how a needed reviewer never runs.
|
|
76
|
+
Dispatch rules:
|
|
123
77
|
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
78
|
+
- Fresh-context dispatch through the capability ladder; one packet per reviewer.
|
|
79
|
+
- No author context, sibling findings, severity coaching, or plan justification.
|
|
80
|
+
- Feature scope is `touched-files.md` plus the frozen diff.
|
|
81
|
+
- Await every required batch before any write or verdict. Never background/detach.
|
|
128
82
|
|
|
129
|
-
|
|
130
|
-
- skipped → `devrites-engine footprint log <slug> skip devrites-<x>-reviewer` # e.g. `skip devrites-frontend-reviewer`: no UI in the diff
|
|
83
|
+
## Account for every reviewer
|
|
131
84
|
|
|
132
|
-
|
|
85
|
+
Log exact agent names as decisions are made:
|
|
133
86
|
|
|
134
87
|
```bash
|
|
135
|
-
devrites-engine footprint
|
|
88
|
+
devrites-engine footprint log <slug> reviewer devrites-<x>-reviewer
|
|
89
|
+
devrites-engine footprint log <slug> skip devrites-<x>-reviewer
|
|
90
|
+
devrites-engine footprint roster <slug>
|
|
136
91
|
```
|
|
137
92
|
|
|
138
|
-
`rc=3
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
93
|
+
`roster` rc=3 means an unaccounted reviewer: dispatch or record why it does not apply.
|
|
94
|
+
rc=1 means an always-on skip; this is valid only for an unchanged-candidate carry-forward
|
|
95
|
+
or the explicit independence fallback in
|
|
96
|
+
[`../../rite-seal/reference/risk-and-rollback.md`](../../rite-seal/reference/risk-and-rollback.md).
|
|
142
97
|
|
|
143
98
|
## Reconciliation
|
|
144
99
|
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
by declaring no `model:` in the agent definition (see
|
|
157
|
-
[`model-tiers.md`](model-tiers.md)). Adversarial review is exactly where a cheaper model costs the
|
|
158
|
-
most: a missed Critical is far more expensive than the tokens saved. Do not downgrade a reviewer to
|
|
159
|
-
save cost. Extraction-tier savings belong to scouts (archive-search, footprint), not to the panel.
|
|
160
|
-
|
|
161
|
-
## Fallback
|
|
162
|
-
|
|
163
|
-
If the harness has **no subagent primitive at all** (neither Claude's `Task` nor Codex's
|
|
164
|
-
`spawn_agent`: an absent tool on one harness while the other's equivalent exists does NOT
|
|
165
|
-
qualify), the caller runs the relevant subagent discipline **inline** in its own context and flags the result as a fallback (not an independent review). The seal weighs the fallback differently: see [`../../rite-seal/reference/risk-and-rollback.md`](../../rite-seal/reference/risk-and-rollback.md). This is the [`model-tiers.md`](model-tiers.md) degradation rule applied to the review panel: no subagent primitive → run inline under the same discipline and budget.
|
|
100
|
+
1. Preserve each valid report verbatim under `## <axis>` in `review.md`/`seal.md`.
|
|
101
|
+
2. Surface contradictions explicitly; the root decides them.
|
|
102
|
+
3. Keep the shared five-label scale. The simplifier's Suggestion/Nit/FYI subset is valid.
|
|
103
|
+
4. Resolve every `CANNOT-VERIFY` before the gate or retain it as a gap.
|
|
104
|
+
5. Add a deduped roll-up only after the verbatim record. Mark matching `file:line`
|
|
105
|
+
findings from two or more axes as consensus; do not hide lone findings.
|
|
106
|
+
6. Apply the caller's gate; do not invent a composite score.
|
|
107
|
+
|
|
108
|
+
Every panel reviewer runs at the ceiling or inherited tier. If the named role is
|
|
109
|
+
unavailable, use the universal ladder. Record an inline fallback as non-independent
|
|
110
|
+
under the seal risk rule, never as a fresh-context pass.
|
|
@@ -9,7 +9,14 @@ Before the final reply, persist the phase event, then render the deterministic
|
|
|
9
9
|
progress chrome:
|
|
10
10
|
|
|
11
11
|
```bash
|
|
12
|
-
devrites-engine timeline log
|
|
12
|
+
devrites-engine timeline log run-finished \
|
|
13
|
+
--slug "$(cat .devrites/ACTIVE 2>/dev/null)" \
|
|
14
|
+
--outcome "<passed|blocked>" \
|
|
15
|
+
--execution-mode named \
|
|
16
|
+
--guard-strength n/a \
|
|
17
|
+
--reason-id "<stable DRV-* reason for the result>" \
|
|
18
|
+
--host "<claude|codex>" \
|
|
19
|
+
--evidence "<project-relative primary artifact>"
|
|
13
20
|
devrites-engine budget
|
|
14
21
|
devrites-engine progress
|
|
15
22
|
```
|