devrites 6.10.0 → 7.0.1
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 +29 -0
- package/README.md +8 -4
- package/SECURITY.md +1 -1
- package/docs/adr/0038-engine-flags-unattributed-root-edits.md +67 -0
- package/docs/adr/README.md +2 -1
- package/docs/cli.md +19 -6
- package/docs/command-map.md +22 -20
- package/docs/engine/commands.md +22 -15
- package/docs/usage.md +10 -5
- package/engine/commands.go +8 -3
- package/engine/help.go +43 -16
- package/engine/internal/acceptance/approve.go +46 -7
- package/engine/internal/acceptance/cli.go +102 -0
- package/engine/internal/acceptance/exec.go +8 -6
- package/engine/internal/acceptance/ledger.go +16 -1
- package/engine/internal/acceptance/lint.go +9 -1
- package/engine/internal/acceptance/preconditions.go +201 -0
- package/engine/internal/anchor/anchor.go +76 -0
- package/engine/internal/gate/drivers.go +144 -0
- package/engine/internal/gate/gate.go +56 -13
- package/engine/internal/gate/preconditions.go +121 -0
- package/engine/internal/gate/predecessor.go +67 -0
- package/engine/internal/lib/anchors.go +270 -0
- package/engine/internal/lib/apply_bundle.go +2 -1
- package/engine/internal/lib/candidate.go +17 -8
- package/engine/internal/lib/claims.go +104 -39
- package/engine/internal/lib/context.go +337 -22
- package/engine/internal/lib/diffscope.go +201 -12
- package/engine/internal/lib/dispatch.go +393 -21
- package/engine/internal/lib/dispatch_contract.go +82 -2
- package/engine/internal/lib/dispatch_packet.go +224 -8
- package/engine/internal/lib/environment_report.go +2 -3
- package/engine/internal/lib/handoff.go +33 -3
- package/engine/internal/lib/metrics.go +119 -11
- package/engine/internal/lib/next.go +45 -5
- package/engine/internal/lib/observe_summary.go +2 -4
- package/engine/internal/lib/packet.go +319 -0
- package/engine/internal/lib/packet_freeze.go +227 -0
- package/engine/internal/lib/perturb.go +403 -0
- package/engine/internal/lib/questions_lint.go +99 -0
- package/engine/internal/lib/state_edit.go +396 -0
- package/engine/internal/lib/taskgraph.go +166 -0
- package/engine/internal/lib/treebaseline.go +331 -0
- package/engine/internal/lib/triggers.go +19 -0
- package/engine/internal/lib/windows.go +110 -5
- package/engine/internal/overhaul/admit/run.go +7 -30
- package/engine/internal/parallel/cli.go +27 -33
- package/engine/internal/parallel/git.go +10 -0
- package/engine/internal/parallel/select.go +36 -0
- package/engine/internal/state/budgets.go +60 -13
- package/engine/internal/state/observation.go +1 -1
- package/engine/main.go +61 -14
- package/pack/.claude/agents/devrites-code-reviewer.md +9 -5
- package/pack/.claude/agents/devrites-devex-reviewer.md +5 -4
- package/pack/.claude/agents/devrites-doubt-reviewer.md +4 -4
- package/pack/.claude/agents/devrites-evidence-scout.md +3 -2
- package/pack/.claude/agents/devrites-frontend-reviewer.md +5 -4
- package/pack/.claude/agents/devrites-performance-reviewer.md +5 -5
- package/pack/.claude/agents/devrites-plan-drafter.md +4 -2
- package/pack/.claude/agents/devrites-plan-reviewer.md +5 -5
- package/pack/.claude/agents/devrites-proof-runner.md +1 -1
- package/pack/.claude/agents/devrites-retrospector.md +1 -1
- package/pack/.claude/agents/devrites-security-auditor.md +4 -4
- package/pack/.claude/agents/devrites-simplifier-reviewer.md +5 -4
- package/pack/.claude/agents/devrites-slice-wright.md +18 -9
- package/pack/.claude/agents/devrites-spec-reviewer.md +4 -4
- package/pack/.claude/agents/devrites-strategy-reviewer.md +5 -6
- package/pack/.claude/agents/devrites-test-analyst.md +7 -4
- package/pack/.claude/agents/devrites-upgrade-planner.md +1 -1
- package/pack/.claude/agents/fast-builder.md +4 -2
- package/pack/.claude/agents/fast-checker.md +3 -2
- package/pack/.claude/agents/fast-critic.md +3 -2
- package/pack/.claude/agents/fast-planner.md +3 -3
- package/pack/.claude/agents/overhaul-recon.md +5 -4
- package/pack/.claude/settings.json +19 -7
- package/pack/.claude/skills/devrites-api-interface/SKILL.md +1 -1
- package/pack/.claude/skills/devrites-audit/SKILL.md +1 -1
- package/pack/.claude/skills/devrites-debug-recovery/SKILL.md +1 -1
- package/pack/.claude/skills/devrites-doubt/SKILL.md +5 -5
- package/pack/.claude/skills/devrites-frontend-craft/reference/reuse-first.md +3 -3
- package/pack/.claude/skills/devrites-interview/SKILL.md +1 -1
- package/pack/.claude/skills/devrites-lib/SKILL.md +11 -6
- package/pack/.claude/skills/devrites-lib/reference/orchestration-profiles.md +2 -0
- package/pack/.claude/skills/devrites-lib/reference/parallel-dispatch.md +25 -14
- package/pack/.claude/skills/devrites-lib/reference/standards/README.md +2 -1
- package/pack/.claude/skills/devrites-lib/reference/standards/afk-hitl.md +11 -3
- package/pack/.claude/skills/devrites-lib/reference/standards/agents.md +43 -19
- package/pack/.claude/skills/devrites-lib/reference/standards/architecture-health.md +1 -1
- package/pack/.claude/skills/devrites-lib/reference/standards/code-index.md +111 -0
- package/pack/.claude/skills/devrites-lib/reference/standards/code-navigation.md +13 -63
- package/pack/.claude/skills/devrites-lib/reference/standards/context-hygiene.md +8 -9
- package/pack/.claude/skills/devrites-lib/reference/standards/core.md +14 -1
- package/pack/.claude/skills/devrites-lib/reference/standards/deprecation.md +1 -1
- package/pack/.claude/skills/devrites-lib/reference/standards/gates.md +10 -1
- package/pack/.claude/skills/devrites-lib/reference/standards/performance.md +14 -0
- package/pack/.claude/skills/devrites-lib/reference/standards/security.md +4 -0
- package/pack/.claude/skills/devrites-lib/reference/standards/testing.md +3 -1
- package/pack/.claude/skills/devrites-lib/reference/standards/tooling.md +9 -8
- package/pack/.claude/skills/devrites-lib/reference/standards/windows.md +3 -2
- package/pack/.claude/skills/devrites-lib/reference/standards/workflow-artifacts.md +2 -0
- package/pack/.claude/skills/devrites-lib/reference/workspace-artifact-schema.md +16 -16
- package/pack/.claude/skills/devrites-ux-shape/SKILL.md +1 -1
- package/pack/.claude/skills/overhaul/references/orchestration.md +3 -2
- package/pack/.claude/skills/rite/SKILL.md +1 -1
- package/pack/.claude/skills/rite-adopt/SKILL.md +1 -1
- package/pack/.claude/skills/rite-adopt/reference/adoption.md +1 -1
- package/pack/.claude/skills/rite-autocomplete/SKILL.md +11 -6
- package/pack/.claude/skills/rite-autocomplete/reference/lookahead.md +50 -0
- package/pack/.claude/skills/rite-autocomplete/reference/loop.md +7 -0
- package/pack/.claude/skills/rite-build/SKILL.md +4 -3
- package/pack/.claude/skills/rite-build/reference/afk-discipline.md +2 -0
- package/pack/.claude/skills/rite-build/reference/checkpoint-protocol.md +4 -1
- package/pack/.claude/skills/rite-build/reference/checkpoint.md +2 -0
- package/pack/.claude/skills/rite-build/reference/one-slice-cycle.md +1 -1
- package/pack/.claude/skills/rite-build/reference/output.md +2 -0
- package/pack/.claude/skills/rite-build/reference/parallel-batch.md +22 -12
- package/pack/.claude/skills/rite-build/reference/phase-contract.md +13 -3
- package/pack/.claude/skills/rite-build/reference/spec-drift-guard.md +4 -0
- package/pack/.claude/skills/rite-build/reference/wright-dispatch.md +42 -25
- package/pack/.claude/skills/rite-clarify/SKILL.md +1 -1
- package/pack/.claude/skills/rite-converge/SKILL.md +4 -4
- package/pack/.claude/skills/rite-converge/reference/convergence-assessment.md +3 -3
- package/pack/.claude/skills/rite-define/SKILL.md +10 -5
- package/pack/.claude/skills/rite-doctor/SKILL.md +17 -2
- package/pack/.claude/skills/rite-dogfood/SKILL.md +1 -1
- package/pack/.claude/skills/rite-explain/SKILL.md +1 -1
- package/pack/.claude/skills/rite-explain/reference/intake.md +1 -1
- package/pack/.claude/skills/rite-fast/SKILL.md +1 -1
- package/pack/.claude/skills/rite-handoff/SKILL.md +3 -3
- package/pack/.claude/skills/rite-handoff/reference/handoff-template.md +1 -1
- package/pack/.claude/skills/rite-plan/SKILL.md +4 -4
- package/pack/.claude/skills/rite-plan/reference/slicing.md +3 -2
- package/pack/.claude/skills/rite-polish/SKILL.md +6 -3
- package/pack/.claude/skills/rite-prove/SKILL.md +1 -1
- package/pack/.claude/skills/rite-quick/SKILL.md +1 -1
- package/pack/.claude/skills/rite-resolve/SKILL.md +1 -1
- package/pack/.claude/skills/rite-review/SKILL.md +4 -4
- package/pack/.claude/skills/rite-seal/SKILL.md +2 -2
- package/pack/.claude/skills/rite-ship/SKILL.md +1 -1
- package/pack/.claude/skills/rite-spec/SKILL.md +3 -2
- package/pack/.claude/skills/rite-spec/reference/investigation.md +5 -5
- package/pack/.claude/skills/rite-spec/reference/spec-template.md +1 -1
- package/pack/.claude/skills/rite-spec/reference/state-workspace.md +6 -4
- package/pack/.claude/skills/rite-status/SKILL.md +1 -1
- package/pack/.claude/skills/rite-temper/SKILL.md +1 -1
- package/pack/.claude/skills/rite-temper/reference/review-dimensions.md +2 -2
- package/pack/.claude/skills/rite-temper/reference/scope-modes.md +2 -2
- package/pack/.claude/skills/rite-temper/reference/significance.md +2 -2
- package/pack/.claude/skills/rite-vet/SKILL.md +11 -5
- package/pack/.claude/skills/rite-vet/reference/artifacts.md +10 -3
- package/pack/.claude/skills/rite-vet/reference/depth.md +2 -2
- package/pack/.claude/skills/rite-vet/reference/review-axes.md +2 -2
- package/pack/.claude/skills/rite-zoom-out/SKILL.md +6 -6
- package/pack/generated/claude/agents/devrites-code-reviewer.md +9 -5
- package/pack/generated/claude/agents/devrites-devex-reviewer.md +5 -4
- package/pack/generated/claude/agents/devrites-doubt-reviewer.md +4 -4
- package/pack/generated/claude/agents/devrites-evidence-scout.md +3 -2
- package/pack/generated/claude/agents/devrites-frontend-reviewer.md +5 -4
- package/pack/generated/claude/agents/devrites-performance-reviewer.md +5 -5
- package/pack/generated/claude/agents/devrites-plan-drafter.md +4 -2
- package/pack/generated/claude/agents/devrites-plan-reviewer.md +5 -5
- package/pack/generated/claude/agents/devrites-proof-runner.md +1 -1
- package/pack/generated/claude/agents/devrites-retrospector.md +1 -1
- package/pack/generated/claude/agents/devrites-security-auditor.md +4 -4
- package/pack/generated/claude/agents/devrites-simplifier-reviewer.md +5 -4
- package/pack/generated/claude/agents/devrites-slice-wright.md +18 -9
- package/pack/generated/claude/agents/devrites-spec-reviewer.md +4 -4
- package/pack/generated/claude/agents/devrites-strategy-reviewer.md +5 -6
- package/pack/generated/claude/agents/devrites-test-analyst.md +7 -4
- package/pack/generated/claude/agents/devrites-upgrade-planner.md +1 -1
- package/pack/generated/claude/agents/fast-builder.md +4 -2
- package/pack/generated/claude/agents/fast-checker.md +3 -2
- package/pack/generated/claude/agents/fast-critic.md +3 -2
- package/pack/generated/claude/agents/fast-planner.md +3 -3
- package/pack/generated/claude/agents/overhaul-recon.md +5 -4
- package/pack/generated/claude/settings.json +19 -7
- package/pack/generated/claude/skills/devrites-api-interface/SKILL.md +1 -1
- package/pack/generated/claude/skills/devrites-audit/SKILL.md +1 -1
- package/pack/generated/claude/skills/devrites-debug-recovery/SKILL.md +1 -1
- package/pack/generated/claude/skills/devrites-doubt/SKILL.md +5 -5
- package/pack/generated/claude/skills/devrites-frontend-craft/reference/reuse-first.md +3 -3
- package/pack/generated/claude/skills/devrites-interview/SKILL.md +1 -1
- package/pack/generated/claude/skills/devrites-lib/SKILL.md +11 -6
- package/pack/generated/claude/skills/devrites-lib/reference/orchestration-profiles.md +2 -0
- package/pack/generated/claude/skills/devrites-lib/reference/parallel-dispatch.md +25 -14
- package/pack/generated/claude/skills/devrites-lib/reference/standards/README.md +2 -1
- package/pack/generated/claude/skills/devrites-lib/reference/standards/afk-hitl.md +11 -3
- package/pack/generated/claude/skills/devrites-lib/reference/standards/agents.md +43 -19
- package/pack/generated/claude/skills/devrites-lib/reference/standards/architecture-health.md +1 -1
- package/pack/generated/claude/skills/devrites-lib/reference/standards/code-index.md +111 -0
- package/pack/generated/claude/skills/devrites-lib/reference/standards/code-navigation.md +13 -63
- package/pack/generated/claude/skills/devrites-lib/reference/standards/context-hygiene.md +8 -9
- package/pack/generated/claude/skills/devrites-lib/reference/standards/core.md +14 -1
- package/pack/generated/claude/skills/devrites-lib/reference/standards/deprecation.md +1 -1
- package/pack/generated/claude/skills/devrites-lib/reference/standards/gates.md +10 -1
- package/pack/generated/claude/skills/devrites-lib/reference/standards/performance.md +14 -0
- package/pack/generated/claude/skills/devrites-lib/reference/standards/security.md +4 -0
- package/pack/generated/claude/skills/devrites-lib/reference/standards/testing.md +3 -1
- package/pack/generated/claude/skills/devrites-lib/reference/standards/tooling.md +9 -8
- package/pack/generated/claude/skills/devrites-lib/reference/standards/windows.md +3 -2
- package/pack/generated/claude/skills/devrites-lib/reference/standards/workflow-artifacts.md +2 -0
- package/pack/generated/claude/skills/devrites-lib/reference/workspace-artifact-schema.md +16 -16
- package/pack/generated/claude/skills/devrites-ux-shape/SKILL.md +1 -1
- package/pack/generated/claude/skills/overhaul/references/orchestration.md +3 -2
- package/pack/generated/claude/skills/rite/SKILL.md +1 -1
- package/pack/generated/claude/skills/rite-adopt/SKILL.md +1 -1
- package/pack/generated/claude/skills/rite-adopt/reference/adoption.md +1 -1
- package/pack/generated/claude/skills/rite-autocomplete/SKILL.md +11 -6
- package/pack/generated/claude/skills/rite-autocomplete/reference/lookahead.md +50 -0
- package/pack/generated/claude/skills/rite-autocomplete/reference/loop.md +7 -0
- package/pack/generated/claude/skills/rite-build/SKILL.md +4 -3
- package/pack/generated/claude/skills/rite-build/reference/afk-discipline.md +2 -0
- package/pack/generated/claude/skills/rite-build/reference/checkpoint-protocol.md +4 -1
- package/pack/generated/claude/skills/rite-build/reference/checkpoint.md +2 -0
- package/pack/generated/claude/skills/rite-build/reference/one-slice-cycle.md +1 -1
- package/pack/generated/claude/skills/rite-build/reference/output.md +2 -0
- package/pack/generated/claude/skills/rite-build/reference/parallel-batch.md +22 -12
- package/pack/generated/claude/skills/rite-build/reference/phase-contract.md +13 -3
- package/pack/generated/claude/skills/rite-build/reference/spec-drift-guard.md +4 -0
- package/pack/generated/claude/skills/rite-build/reference/wright-dispatch.md +42 -25
- package/pack/generated/claude/skills/rite-clarify/SKILL.md +1 -1
- package/pack/generated/claude/skills/rite-converge/SKILL.md +4 -4
- package/pack/generated/claude/skills/rite-converge/reference/convergence-assessment.md +3 -3
- package/pack/generated/claude/skills/rite-define/SKILL.md +10 -5
- package/pack/generated/claude/skills/rite-doctor/SKILL.md +17 -2
- package/pack/generated/claude/skills/rite-dogfood/SKILL.md +1 -1
- package/pack/generated/claude/skills/rite-explain/SKILL.md +1 -1
- package/pack/generated/claude/skills/rite-explain/reference/intake.md +1 -1
- package/pack/generated/claude/skills/rite-fast/SKILL.md +1 -1
- package/pack/generated/claude/skills/rite-handoff/SKILL.md +3 -3
- package/pack/generated/claude/skills/rite-handoff/reference/handoff-template.md +1 -1
- package/pack/generated/claude/skills/rite-plan/SKILL.md +4 -4
- package/pack/generated/claude/skills/rite-plan/reference/slicing.md +3 -2
- package/pack/generated/claude/skills/rite-polish/SKILL.md +6 -3
- package/pack/generated/claude/skills/rite-prove/SKILL.md +1 -1
- package/pack/generated/claude/skills/rite-quick/SKILL.md +1 -1
- package/pack/generated/claude/skills/rite-resolve/SKILL.md +1 -1
- package/pack/generated/claude/skills/rite-review/SKILL.md +4 -4
- package/pack/generated/claude/skills/rite-seal/SKILL.md +2 -2
- package/pack/generated/claude/skills/rite-ship/SKILL.md +1 -1
- package/pack/generated/claude/skills/rite-spec/SKILL.md +3 -2
- package/pack/generated/claude/skills/rite-spec/reference/investigation.md +5 -5
- package/pack/generated/claude/skills/rite-spec/reference/spec-template.md +1 -1
- package/pack/generated/claude/skills/rite-spec/reference/state-workspace.md +6 -4
- package/pack/generated/claude/skills/rite-status/SKILL.md +1 -1
- package/pack/generated/claude/skills/rite-temper/SKILL.md +1 -1
- package/pack/generated/claude/skills/rite-temper/reference/review-dimensions.md +2 -2
- package/pack/generated/claude/skills/rite-temper/reference/scope-modes.md +2 -2
- package/pack/generated/claude/skills/rite-temper/reference/significance.md +2 -2
- package/pack/generated/claude/skills/rite-vet/SKILL.md +11 -5
- package/pack/generated/claude/skills/rite-vet/reference/artifacts.md +10 -3
- package/pack/generated/claude/skills/rite-vet/reference/depth.md +2 -2
- package/pack/generated/claude/skills/rite-vet/reference/review-axes.md +2 -2
- package/pack/generated/claude/skills/rite-zoom-out/SKILL.md +6 -6
- package/pack/generated/codex/agents/devrites-code-reviewer.toml +8 -4
- package/pack/generated/codex/agents/devrites-devex-reviewer.toml +4 -3
- package/pack/generated/codex/agents/devrites-doubt-reviewer.toml +3 -3
- package/pack/generated/codex/agents/devrites-evidence-scout.toml +2 -1
- package/pack/generated/codex/agents/devrites-frontend-reviewer.toml +4 -3
- package/pack/generated/codex/agents/devrites-performance-reviewer.toml +4 -4
- package/pack/generated/codex/agents/devrites-plan-drafter.toml +3 -1
- package/pack/generated/codex/agents/devrites-plan-reviewer.toml +4 -4
- package/pack/generated/codex/agents/devrites-security-auditor.toml +3 -3
- package/pack/generated/codex/agents/devrites-simplifier-reviewer.toml +4 -3
- package/pack/generated/codex/agents/devrites-slice-wright.toml +17 -8
- package/pack/generated/codex/agents/devrites-spec-reviewer.toml +3 -3
- package/pack/generated/codex/agents/devrites-strategy-reviewer.toml +4 -5
- package/pack/generated/codex/agents/devrites-test-analyst.toml +6 -3
- package/pack/generated/codex/agents/fast-builder.toml +3 -1
- package/pack/generated/codex/agents/fast-checker.toml +2 -1
- package/pack/generated/codex/agents/fast-critic.toml +2 -1
- package/pack/generated/codex/agents/fast-planner.toml +2 -2
- package/pack/generated/codex/agents/overhaul-recon.toml +5 -4
- package/pack/generated/codex/skills/devrites-api-interface/SKILL.md +1 -1
- package/pack/generated/codex/skills/devrites-audit/SKILL.md +1 -1
- package/pack/generated/codex/skills/devrites-debug-recovery/SKILL.md +1 -1
- package/pack/generated/codex/skills/devrites-doubt/SKILL.md +5 -5
- package/pack/generated/codex/skills/devrites-frontend-craft/reference/reuse-first.md +3 -3
- package/pack/generated/codex/skills/devrites-interview/SKILL.md +1 -1
- package/pack/generated/codex/skills/devrites-lib/SKILL.md +11 -6
- package/pack/generated/codex/skills/devrites-lib/reference/orchestration-profiles.md +2 -0
- package/pack/generated/codex/skills/devrites-lib/reference/parallel-dispatch.md +25 -14
- package/pack/generated/codex/skills/devrites-lib/reference/standards/README.md +2 -1
- package/pack/generated/codex/skills/devrites-lib/reference/standards/afk-hitl.md +11 -3
- package/pack/generated/codex/skills/devrites-lib/reference/standards/agents.md +43 -19
- package/pack/generated/codex/skills/devrites-lib/reference/standards/architecture-health.md +1 -1
- package/pack/generated/codex/skills/devrites-lib/reference/standards/code-index.md +111 -0
- package/pack/generated/codex/skills/devrites-lib/reference/standards/code-navigation.md +13 -63
- package/pack/generated/codex/skills/devrites-lib/reference/standards/context-hygiene.md +8 -9
- package/pack/generated/codex/skills/devrites-lib/reference/standards/core.md +14 -1
- package/pack/generated/codex/skills/devrites-lib/reference/standards/deprecation.md +1 -1
- package/pack/generated/codex/skills/devrites-lib/reference/standards/gates.md +10 -1
- package/pack/generated/codex/skills/devrites-lib/reference/standards/performance.md +14 -0
- package/pack/generated/codex/skills/devrites-lib/reference/standards/security.md +4 -0
- package/pack/generated/codex/skills/devrites-lib/reference/standards/testing.md +3 -1
- package/pack/generated/codex/skills/devrites-lib/reference/standards/tooling.md +9 -8
- package/pack/generated/codex/skills/devrites-lib/reference/standards/windows.md +3 -2
- package/pack/generated/codex/skills/devrites-lib/reference/standards/workflow-artifacts.md +2 -0
- package/pack/generated/codex/skills/devrites-lib/reference/workspace-artifact-schema.md +16 -16
- package/pack/generated/codex/skills/devrites-ux-shape/SKILL.md +1 -1
- package/pack/generated/codex/skills/overhaul/references/orchestration.md +3 -2
- package/pack/generated/codex/skills/rite/SKILL.md +1 -1
- package/pack/generated/codex/skills/rite-adopt/SKILL.md +1 -1
- package/pack/generated/codex/skills/rite-adopt/reference/adoption.md +1 -1
- package/pack/generated/codex/skills/rite-autocomplete/SKILL.md +11 -6
- package/pack/generated/codex/skills/rite-autocomplete/reference/lookahead.md +50 -0
- package/pack/generated/codex/skills/rite-autocomplete/reference/loop.md +7 -0
- package/pack/generated/codex/skills/rite-build/SKILL.md +4 -3
- package/pack/generated/codex/skills/rite-build/reference/afk-discipline.md +2 -0
- package/pack/generated/codex/skills/rite-build/reference/checkpoint-protocol.md +4 -1
- package/pack/generated/codex/skills/rite-build/reference/checkpoint.md +2 -0
- package/pack/generated/codex/skills/rite-build/reference/one-slice-cycle.md +1 -1
- package/pack/generated/codex/skills/rite-build/reference/output.md +2 -0
- package/pack/generated/codex/skills/rite-build/reference/parallel-batch.md +22 -12
- package/pack/generated/codex/skills/rite-build/reference/phase-contract.md +13 -3
- package/pack/generated/codex/skills/rite-build/reference/spec-drift-guard.md +4 -0
- package/pack/generated/codex/skills/rite-build/reference/wright-dispatch.md +42 -25
- package/pack/generated/codex/skills/rite-clarify/SKILL.md +1 -1
- package/pack/generated/codex/skills/rite-converge/SKILL.md +4 -4
- package/pack/generated/codex/skills/rite-converge/reference/convergence-assessment.md +3 -3
- package/pack/generated/codex/skills/rite-define/SKILL.md +10 -5
- package/pack/generated/codex/skills/rite-doctor/SKILL.md +17 -2
- package/pack/generated/codex/skills/rite-dogfood/SKILL.md +1 -1
- package/pack/generated/codex/skills/rite-explain/SKILL.md +1 -1
- package/pack/generated/codex/skills/rite-explain/reference/intake.md +1 -1
- package/pack/generated/codex/skills/rite-fast/SKILL.md +1 -1
- package/pack/generated/codex/skills/rite-handoff/SKILL.md +3 -3
- package/pack/generated/codex/skills/rite-handoff/reference/handoff-template.md +1 -1
- package/pack/generated/codex/skills/rite-plan/SKILL.md +4 -4
- package/pack/generated/codex/skills/rite-plan/reference/slicing.md +3 -2
- package/pack/generated/codex/skills/rite-polish/SKILL.md +6 -3
- package/pack/generated/codex/skills/rite-prove/SKILL.md +1 -1
- package/pack/generated/codex/skills/rite-quick/SKILL.md +1 -1
- package/pack/generated/codex/skills/rite-resolve/SKILL.md +1 -1
- package/pack/generated/codex/skills/rite-review/SKILL.md +4 -4
- package/pack/generated/codex/skills/rite-seal/SKILL.md +2 -2
- package/pack/generated/codex/skills/rite-ship/SKILL.md +1 -1
- package/pack/generated/codex/skills/rite-spec/SKILL.md +3 -2
- package/pack/generated/codex/skills/rite-spec/reference/investigation.md +5 -5
- package/pack/generated/codex/skills/rite-spec/reference/spec-template.md +1 -1
- package/pack/generated/codex/skills/rite-spec/reference/state-workspace.md +6 -4
- package/pack/generated/codex/skills/rite-status/SKILL.md +1 -1
- package/pack/generated/codex/skills/rite-temper/SKILL.md +1 -1
- package/pack/generated/codex/skills/rite-temper/reference/review-dimensions.md +2 -2
- package/pack/generated/codex/skills/rite-temper/reference/scope-modes.md +2 -2
- package/pack/generated/codex/skills/rite-temper/reference/significance.md +2 -2
- package/pack/generated/codex/skills/rite-vet/SKILL.md +11 -5
- package/pack/generated/codex/skills/rite-vet/reference/artifacts.md +10 -3
- package/pack/generated/codex/skills/rite-vet/reference/depth.md +2 -2
- package/pack/generated/codex/skills/rite-vet/reference/review-axes.md +2 -2
- package/pack/generated/codex/skills/rite-zoom-out/SKILL.md +6 -6
- package/pack/generated/devin/agents/devrites-code-reviewer.md +8 -4
- package/pack/generated/devin/agents/devrites-devex-reviewer.md +4 -3
- package/pack/generated/devin/agents/devrites-doubt-reviewer.md +3 -3
- package/pack/generated/devin/agents/devrites-evidence-scout.md +2 -1
- package/pack/generated/devin/agents/devrites-frontend-reviewer.md +4 -3
- package/pack/generated/devin/agents/devrites-performance-reviewer.md +4 -4
- package/pack/generated/devin/agents/devrites-plan-drafter.md +3 -1
- package/pack/generated/devin/agents/devrites-plan-reviewer.md +4 -4
- package/pack/generated/devin/agents/devrites-security-auditor.md +3 -3
- package/pack/generated/devin/agents/devrites-simplifier-reviewer.md +4 -3
- package/pack/generated/devin/agents/devrites-slice-wright.md +17 -8
- package/pack/generated/devin/agents/devrites-spec-reviewer.md +3 -3
- package/pack/generated/devin/agents/devrites-strategy-reviewer.md +4 -5
- package/pack/generated/devin/agents/devrites-test-analyst.md +6 -3
- package/pack/generated/devin/agents/fast-builder.md +3 -1
- package/pack/generated/devin/agents/fast-checker.md +2 -1
- package/pack/generated/devin/agents/fast-critic.md +2 -1
- package/pack/generated/devin/agents/fast-planner.md +2 -2
- package/pack/generated/devin/agents/overhaul-recon.md +5 -4
- package/pack/generated/devin/skills/devrites-api-interface/SKILL.md +1 -1
- package/pack/generated/devin/skills/devrites-audit/SKILL.md +1 -1
- package/pack/generated/devin/skills/devrites-debug-recovery/SKILL.md +1 -1
- package/pack/generated/devin/skills/devrites-doubt/SKILL.md +5 -5
- package/pack/generated/devin/skills/devrites-frontend-craft/reference/reuse-first.md +3 -3
- package/pack/generated/devin/skills/devrites-interview/SKILL.md +1 -1
- package/pack/generated/devin/skills/devrites-lib/SKILL.md +11 -6
- package/pack/generated/devin/skills/devrites-lib/reference/orchestration-profiles.md +2 -0
- package/pack/generated/devin/skills/devrites-lib/reference/parallel-dispatch.md +25 -14
- package/pack/generated/devin/skills/devrites-lib/reference/standards/README.md +2 -1
- package/pack/generated/devin/skills/devrites-lib/reference/standards/afk-hitl.md +11 -3
- package/pack/generated/devin/skills/devrites-lib/reference/standards/agents.md +43 -19
- package/pack/generated/devin/skills/devrites-lib/reference/standards/architecture-health.md +1 -1
- package/pack/generated/devin/skills/devrites-lib/reference/standards/code-index.md +111 -0
- package/pack/generated/devin/skills/devrites-lib/reference/standards/code-navigation.md +13 -63
- package/pack/generated/devin/skills/devrites-lib/reference/standards/context-hygiene.md +8 -9
- package/pack/generated/devin/skills/devrites-lib/reference/standards/core.md +14 -1
- package/pack/generated/devin/skills/devrites-lib/reference/standards/deprecation.md +1 -1
- package/pack/generated/devin/skills/devrites-lib/reference/standards/gates.md +10 -1
- package/pack/generated/devin/skills/devrites-lib/reference/standards/performance.md +14 -0
- package/pack/generated/devin/skills/devrites-lib/reference/standards/security.md +4 -0
- package/pack/generated/devin/skills/devrites-lib/reference/standards/testing.md +3 -1
- package/pack/generated/devin/skills/devrites-lib/reference/standards/tooling.md +9 -8
- package/pack/generated/devin/skills/devrites-lib/reference/standards/windows.md +3 -2
- package/pack/generated/devin/skills/devrites-lib/reference/standards/workflow-artifacts.md +2 -0
- package/pack/generated/devin/skills/devrites-lib/reference/workspace-artifact-schema.md +16 -16
- package/pack/generated/devin/skills/devrites-ux-shape/SKILL.md +1 -1
- package/pack/generated/devin/skills/overhaul/references/orchestration.md +3 -2
- package/pack/generated/devin/skills/rite/SKILL.md +1 -1
- package/pack/generated/devin/skills/rite-adopt/SKILL.md +1 -1
- package/pack/generated/devin/skills/rite-adopt/reference/adoption.md +1 -1
- package/pack/generated/devin/skills/rite-autocomplete/SKILL.md +11 -6
- package/pack/generated/devin/skills/rite-autocomplete/reference/lookahead.md +50 -0
- package/pack/generated/devin/skills/rite-autocomplete/reference/loop.md +7 -0
- package/pack/generated/devin/skills/rite-build/SKILL.md +4 -3
- package/pack/generated/devin/skills/rite-build/reference/afk-discipline.md +2 -0
- package/pack/generated/devin/skills/rite-build/reference/checkpoint-protocol.md +4 -1
- package/pack/generated/devin/skills/rite-build/reference/checkpoint.md +2 -0
- package/pack/generated/devin/skills/rite-build/reference/one-slice-cycle.md +1 -1
- package/pack/generated/devin/skills/rite-build/reference/output.md +2 -0
- package/pack/generated/devin/skills/rite-build/reference/parallel-batch.md +22 -12
- package/pack/generated/devin/skills/rite-build/reference/phase-contract.md +13 -3
- package/pack/generated/devin/skills/rite-build/reference/spec-drift-guard.md +4 -0
- package/pack/generated/devin/skills/rite-build/reference/wright-dispatch.md +42 -25
- package/pack/generated/devin/skills/rite-clarify/SKILL.md +1 -1
- package/pack/generated/devin/skills/rite-converge/SKILL.md +4 -4
- package/pack/generated/devin/skills/rite-converge/reference/convergence-assessment.md +3 -3
- package/pack/generated/devin/skills/rite-define/SKILL.md +10 -5
- package/pack/generated/devin/skills/rite-doctor/SKILL.md +17 -2
- package/pack/generated/devin/skills/rite-dogfood/SKILL.md +1 -1
- package/pack/generated/devin/skills/rite-explain/SKILL.md +1 -1
- package/pack/generated/devin/skills/rite-explain/reference/intake.md +1 -1
- package/pack/generated/devin/skills/rite-fast/SKILL.md +1 -1
- package/pack/generated/devin/skills/rite-handoff/SKILL.md +3 -3
- package/pack/generated/devin/skills/rite-handoff/reference/handoff-template.md +1 -1
- package/pack/generated/devin/skills/rite-plan/SKILL.md +4 -4
- package/pack/generated/devin/skills/rite-plan/reference/slicing.md +3 -2
- package/pack/generated/devin/skills/rite-polish/SKILL.md +6 -3
- package/pack/generated/devin/skills/rite-prove/SKILL.md +1 -1
- package/pack/generated/devin/skills/rite-quick/SKILL.md +1 -1
- package/pack/generated/devin/skills/rite-resolve/SKILL.md +1 -1
- package/pack/generated/devin/skills/rite-review/SKILL.md +4 -4
- package/pack/generated/devin/skills/rite-seal/SKILL.md +2 -2
- package/pack/generated/devin/skills/rite-ship/SKILL.md +1 -1
- package/pack/generated/devin/skills/rite-spec/SKILL.md +3 -2
- package/pack/generated/devin/skills/rite-spec/reference/investigation.md +5 -5
- package/pack/generated/devin/skills/rite-spec/reference/spec-template.md +1 -1
- package/pack/generated/devin/skills/rite-spec/reference/state-workspace.md +6 -4
- package/pack/generated/devin/skills/rite-status/SKILL.md +1 -1
- package/pack/generated/devin/skills/rite-temper/SKILL.md +1 -1
- package/pack/generated/devin/skills/rite-temper/reference/review-dimensions.md +2 -2
- package/pack/generated/devin/skills/rite-temper/reference/scope-modes.md +2 -2
- package/pack/generated/devin/skills/rite-temper/reference/significance.md +2 -2
- package/pack/generated/devin/skills/rite-vet/SKILL.md +11 -5
- package/pack/generated/devin/skills/rite-vet/reference/artifacts.md +10 -3
- package/pack/generated/devin/skills/rite-vet/reference/depth.md +2 -2
- package/pack/generated/devin/skills/rite-vet/reference/review-axes.md +2 -2
- package/pack/generated/devin/skills/rite-zoom-out/SKILL.md +6 -6
- package/pack/generated/omp/agents/devrites-code-reviewer.md +9 -5
- package/pack/generated/omp/agents/devrites-devex-reviewer.md +5 -4
- package/pack/generated/omp/agents/devrites-doubt-reviewer.md +4 -4
- package/pack/generated/omp/agents/devrites-evidence-scout.md +3 -2
- package/pack/generated/omp/agents/devrites-frontend-reviewer.md +5 -4
- package/pack/generated/omp/agents/devrites-performance-reviewer.md +5 -5
- package/pack/generated/omp/agents/devrites-plan-drafter.md +4 -2
- package/pack/generated/omp/agents/devrites-plan-reviewer.md +5 -5
- package/pack/generated/omp/agents/devrites-proof-runner.md +1 -1
- package/pack/generated/omp/agents/devrites-retrospector.md +1 -1
- package/pack/generated/omp/agents/devrites-security-auditor.md +4 -4
- package/pack/generated/omp/agents/devrites-simplifier-reviewer.md +5 -4
- package/pack/generated/omp/agents/devrites-slice-wright.md +18 -9
- package/pack/generated/omp/agents/devrites-spec-reviewer.md +4 -4
- package/pack/generated/omp/agents/devrites-strategy-reviewer.md +5 -6
- package/pack/generated/omp/agents/devrites-test-analyst.md +7 -4
- package/pack/generated/omp/agents/devrites-upgrade-planner.md +1 -1
- package/pack/generated/omp/agents/fast-builder.md +4 -2
- package/pack/generated/omp/agents/fast-checker.md +3 -2
- package/pack/generated/omp/agents/fast-critic.md +3 -2
- package/pack/generated/omp/agents/fast-planner.md +3 -3
- package/pack/generated/omp/agents/overhaul-backend-engineer.md +1 -1
- package/pack/generated/omp/agents/overhaul-boundary.md +1 -1
- package/pack/generated/omp/agents/overhaul-craft.md +1 -1
- package/pack/generated/omp/agents/overhaul-frontend-engineer.md +1 -1
- package/pack/generated/omp/agents/overhaul-implementer.md +1 -1
- package/pack/generated/omp/agents/overhaul-recon.md +6 -5
- package/pack/generated/omp/agents/overhaul-specialist.md +1 -1
- package/pack/generated/omp/agents/overhaul-verifier.md +1 -1
- package/pack/generated/omp/commands/rite-autocomplete.md +1 -1
- package/pack/generated/omp/skills/devrites-api-interface/SKILL.md +1 -1
- package/pack/generated/omp/skills/devrites-audit/SKILL.md +1 -1
- package/pack/generated/omp/skills/devrites-debug-recovery/SKILL.md +1 -1
- package/pack/generated/omp/skills/devrites-doubt/SKILL.md +5 -5
- package/pack/generated/omp/skills/devrites-frontend-craft/reference/reuse-first.md +3 -3
- package/pack/generated/omp/skills/devrites-interview/SKILL.md +1 -1
- package/pack/generated/omp/skills/devrites-lib/SKILL.md +11 -6
- package/pack/generated/omp/skills/devrites-lib/reference/orchestration-profiles.md +2 -0
- package/pack/generated/omp/skills/devrites-lib/reference/parallel-dispatch.md +25 -14
- package/pack/generated/omp/skills/devrites-lib/reference/standards/README.md +2 -1
- package/pack/generated/omp/skills/devrites-lib/reference/standards/afk-hitl.md +11 -3
- package/pack/generated/omp/skills/devrites-lib/reference/standards/agents.md +43 -19
- package/pack/generated/omp/skills/devrites-lib/reference/standards/architecture-health.md +1 -1
- package/pack/generated/omp/skills/devrites-lib/reference/standards/code-index.md +111 -0
- package/pack/generated/omp/skills/devrites-lib/reference/standards/code-navigation.md +13 -63
- package/pack/generated/omp/skills/devrites-lib/reference/standards/context-hygiene.md +8 -9
- package/pack/generated/omp/skills/devrites-lib/reference/standards/core.md +14 -1
- package/pack/generated/omp/skills/devrites-lib/reference/standards/deprecation.md +1 -1
- package/pack/generated/omp/skills/devrites-lib/reference/standards/gates.md +10 -1
- package/pack/generated/omp/skills/devrites-lib/reference/standards/performance.md +14 -0
- package/pack/generated/omp/skills/devrites-lib/reference/standards/security.md +4 -0
- package/pack/generated/omp/skills/devrites-lib/reference/standards/testing.md +3 -1
- package/pack/generated/omp/skills/devrites-lib/reference/standards/tooling.md +9 -8
- package/pack/generated/omp/skills/devrites-lib/reference/standards/windows.md +3 -2
- package/pack/generated/omp/skills/devrites-lib/reference/standards/workflow-artifacts.md +2 -0
- package/pack/generated/omp/skills/devrites-lib/reference/workspace-artifact-schema.md +16 -16
- package/pack/generated/omp/skills/devrites-ux-shape/SKILL.md +1 -1
- package/pack/generated/omp/skills/overhaul/references/orchestration.md +3 -2
- package/pack/generated/omp/skills/rite/SKILL.md +1 -1
- package/pack/generated/omp/skills/rite-adopt/SKILL.md +1 -1
- package/pack/generated/omp/skills/rite-adopt/reference/adoption.md +1 -1
- package/pack/generated/omp/skills/rite-autocomplete/SKILL.md +11 -6
- package/pack/generated/omp/skills/rite-autocomplete/reference/lookahead.md +50 -0
- package/pack/generated/omp/skills/rite-autocomplete/reference/loop.md +7 -0
- package/pack/generated/omp/skills/rite-build/SKILL.md +4 -3
- package/pack/generated/omp/skills/rite-build/reference/afk-discipline.md +2 -0
- package/pack/generated/omp/skills/rite-build/reference/checkpoint-protocol.md +4 -1
- package/pack/generated/omp/skills/rite-build/reference/checkpoint.md +2 -0
- package/pack/generated/omp/skills/rite-build/reference/one-slice-cycle.md +1 -1
- package/pack/generated/omp/skills/rite-build/reference/output.md +2 -0
- package/pack/generated/omp/skills/rite-build/reference/parallel-batch.md +22 -12
- package/pack/generated/omp/skills/rite-build/reference/phase-contract.md +13 -3
- package/pack/generated/omp/skills/rite-build/reference/spec-drift-guard.md +4 -0
- package/pack/generated/omp/skills/rite-build/reference/wright-dispatch.md +42 -25
- package/pack/generated/omp/skills/rite-clarify/SKILL.md +1 -1
- package/pack/generated/omp/skills/rite-converge/SKILL.md +4 -4
- package/pack/generated/omp/skills/rite-converge/reference/convergence-assessment.md +3 -3
- package/pack/generated/omp/skills/rite-define/SKILL.md +10 -5
- package/pack/generated/omp/skills/rite-doctor/SKILL.md +17 -2
- package/pack/generated/omp/skills/rite-dogfood/SKILL.md +1 -1
- package/pack/generated/omp/skills/rite-explain/SKILL.md +1 -1
- package/pack/generated/omp/skills/rite-explain/reference/intake.md +1 -1
- package/pack/generated/omp/skills/rite-fast/SKILL.md +1 -1
- package/pack/generated/omp/skills/rite-handoff/SKILL.md +3 -3
- package/pack/generated/omp/skills/rite-handoff/reference/handoff-template.md +1 -1
- package/pack/generated/omp/skills/rite-plan/SKILL.md +4 -4
- package/pack/generated/omp/skills/rite-plan/reference/slicing.md +3 -2
- package/pack/generated/omp/skills/rite-polish/SKILL.md +6 -3
- package/pack/generated/omp/skills/rite-prove/SKILL.md +1 -1
- package/pack/generated/omp/skills/rite-quick/SKILL.md +1 -1
- package/pack/generated/omp/skills/rite-resolve/SKILL.md +1 -1
- package/pack/generated/omp/skills/rite-review/SKILL.md +4 -4
- package/pack/generated/omp/skills/rite-seal/SKILL.md +2 -2
- package/pack/generated/omp/skills/rite-ship/SKILL.md +1 -1
- package/pack/generated/omp/skills/rite-spec/SKILL.md +3 -2
- package/pack/generated/omp/skills/rite-spec/reference/investigation.md +5 -5
- package/pack/generated/omp/skills/rite-spec/reference/spec-template.md +1 -1
- package/pack/generated/omp/skills/rite-spec/reference/state-workspace.md +6 -4
- package/pack/generated/omp/skills/rite-status/SKILL.md +1 -1
- package/pack/generated/omp/skills/rite-temper/SKILL.md +1 -1
- package/pack/generated/omp/skills/rite-temper/reference/review-dimensions.md +2 -2
- package/pack/generated/omp/skills/rite-temper/reference/scope-modes.md +2 -2
- package/pack/generated/omp/skills/rite-temper/reference/significance.md +2 -2
- package/pack/generated/omp/skills/rite-vet/SKILL.md +11 -5
- package/pack/generated/omp/skills/rite-vet/reference/artifacts.md +10 -3
- package/pack/generated/omp/skills/rite-vet/reference/depth.md +2 -2
- package/pack/generated/omp/skills/rite-vet/reference/review-axes.md +2 -2
- package/pack/generated/omp/skills/rite-zoom-out/SKILL.md +6 -6
- package/pack/generated/pi/agents/devrites-code-reviewer.md +9 -5
- package/pack/generated/pi/agents/devrites-devex-reviewer.md +5 -4
- package/pack/generated/pi/agents/devrites-doubt-reviewer.md +4 -4
- package/pack/generated/pi/agents/devrites-evidence-scout.md +3 -2
- package/pack/generated/pi/agents/devrites-frontend-reviewer.md +5 -4
- package/pack/generated/pi/agents/devrites-performance-reviewer.md +5 -5
- package/pack/generated/pi/agents/devrites-plan-drafter.md +4 -2
- package/pack/generated/pi/agents/devrites-plan-reviewer.md +5 -5
- package/pack/generated/pi/agents/devrites-proof-runner.md +1 -1
- package/pack/generated/pi/agents/devrites-retrospector.md +1 -1
- package/pack/generated/pi/agents/devrites-security-auditor.md +4 -4
- package/pack/generated/pi/agents/devrites-simplifier-reviewer.md +5 -4
- package/pack/generated/pi/agents/devrites-slice-wright.md +18 -9
- package/pack/generated/pi/agents/devrites-spec-reviewer.md +4 -4
- package/pack/generated/pi/agents/devrites-strategy-reviewer.md +5 -6
- package/pack/generated/pi/agents/devrites-test-analyst.md +7 -4
- package/pack/generated/pi/agents/devrites-upgrade-planner.md +1 -1
- package/pack/generated/pi/agents/fast-builder.md +4 -2
- package/pack/generated/pi/agents/fast-checker.md +3 -2
- package/pack/generated/pi/agents/fast-critic.md +3 -2
- package/pack/generated/pi/agents/fast-planner.md +3 -3
- package/pack/generated/pi/agents/overhaul-backend-engineer.md +1 -1
- package/pack/generated/pi/agents/overhaul-boundary.md +1 -1
- package/pack/generated/pi/agents/overhaul-craft.md +1 -1
- package/pack/generated/pi/agents/overhaul-frontend-engineer.md +1 -1
- package/pack/generated/pi/agents/overhaul-implementer.md +1 -1
- package/pack/generated/pi/agents/overhaul-recon.md +6 -5
- package/pack/generated/pi/agents/overhaul-specialist.md +1 -1
- package/pack/generated/pi/agents/overhaul-verifier.md +1 -1
- package/pack/generated/pi/prompts/rite-autocomplete.md +1 -1
- package/pack/generated/pi/skills/devrites-api-interface/SKILL.md +1 -1
- package/pack/generated/pi/skills/devrites-audit/SKILL.md +1 -1
- package/pack/generated/pi/skills/devrites-debug-recovery/SKILL.md +1 -1
- package/pack/generated/pi/skills/devrites-doubt/SKILL.md +5 -5
- package/pack/generated/pi/skills/devrites-frontend-craft/reference/reuse-first.md +3 -3
- package/pack/generated/pi/skills/devrites-interview/SKILL.md +1 -1
- package/pack/generated/pi/skills/devrites-lib/SKILL.md +11 -6
- package/pack/generated/pi/skills/devrites-lib/reference/orchestration-profiles.md +2 -0
- package/pack/generated/pi/skills/devrites-lib/reference/parallel-dispatch.md +25 -14
- package/pack/generated/pi/skills/devrites-lib/reference/standards/README.md +2 -1
- package/pack/generated/pi/skills/devrites-lib/reference/standards/afk-hitl.md +11 -3
- package/pack/generated/pi/skills/devrites-lib/reference/standards/agents.md +43 -19
- package/pack/generated/pi/skills/devrites-lib/reference/standards/architecture-health.md +1 -1
- package/pack/generated/pi/skills/devrites-lib/reference/standards/code-index.md +111 -0
- package/pack/generated/pi/skills/devrites-lib/reference/standards/code-navigation.md +13 -63
- package/pack/generated/pi/skills/devrites-lib/reference/standards/context-hygiene.md +8 -9
- package/pack/generated/pi/skills/devrites-lib/reference/standards/core.md +14 -1
- package/pack/generated/pi/skills/devrites-lib/reference/standards/deprecation.md +1 -1
- package/pack/generated/pi/skills/devrites-lib/reference/standards/gates.md +10 -1
- package/pack/generated/pi/skills/devrites-lib/reference/standards/performance.md +14 -0
- package/pack/generated/pi/skills/devrites-lib/reference/standards/security.md +4 -0
- package/pack/generated/pi/skills/devrites-lib/reference/standards/testing.md +3 -1
- package/pack/generated/pi/skills/devrites-lib/reference/standards/tooling.md +9 -8
- package/pack/generated/pi/skills/devrites-lib/reference/standards/windows.md +3 -2
- package/pack/generated/pi/skills/devrites-lib/reference/standards/workflow-artifacts.md +2 -0
- package/pack/generated/pi/skills/devrites-lib/reference/workspace-artifact-schema.md +16 -16
- package/pack/generated/pi/skills/devrites-ux-shape/SKILL.md +1 -1
- package/pack/generated/pi/skills/overhaul/references/orchestration.md +3 -2
- package/pack/generated/pi/skills/rite/SKILL.md +1 -1
- package/pack/generated/pi/skills/rite-adopt/SKILL.md +1 -1
- package/pack/generated/pi/skills/rite-adopt/reference/adoption.md +1 -1
- package/pack/generated/pi/skills/rite-autocomplete/SKILL.md +11 -6
- package/pack/generated/pi/skills/rite-autocomplete/reference/lookahead.md +50 -0
- package/pack/generated/pi/skills/rite-autocomplete/reference/loop.md +7 -0
- package/pack/generated/pi/skills/rite-build/SKILL.md +4 -3
- package/pack/generated/pi/skills/rite-build/reference/afk-discipline.md +2 -0
- package/pack/generated/pi/skills/rite-build/reference/checkpoint-protocol.md +4 -1
- package/pack/generated/pi/skills/rite-build/reference/checkpoint.md +2 -0
- package/pack/generated/pi/skills/rite-build/reference/one-slice-cycle.md +1 -1
- package/pack/generated/pi/skills/rite-build/reference/output.md +2 -0
- package/pack/generated/pi/skills/rite-build/reference/parallel-batch.md +22 -12
- package/pack/generated/pi/skills/rite-build/reference/phase-contract.md +13 -3
- package/pack/generated/pi/skills/rite-build/reference/spec-drift-guard.md +4 -0
- package/pack/generated/pi/skills/rite-build/reference/wright-dispatch.md +42 -25
- package/pack/generated/pi/skills/rite-clarify/SKILL.md +1 -1
- package/pack/generated/pi/skills/rite-converge/SKILL.md +4 -4
- package/pack/generated/pi/skills/rite-converge/reference/convergence-assessment.md +3 -3
- package/pack/generated/pi/skills/rite-define/SKILL.md +10 -5
- package/pack/generated/pi/skills/rite-doctor/SKILL.md +17 -2
- package/pack/generated/pi/skills/rite-dogfood/SKILL.md +1 -1
- package/pack/generated/pi/skills/rite-explain/SKILL.md +1 -1
- package/pack/generated/pi/skills/rite-explain/reference/intake.md +1 -1
- package/pack/generated/pi/skills/rite-fast/SKILL.md +1 -1
- package/pack/generated/pi/skills/rite-handoff/SKILL.md +3 -3
- package/pack/generated/pi/skills/rite-handoff/reference/handoff-template.md +1 -1
- package/pack/generated/pi/skills/rite-plan/SKILL.md +4 -4
- package/pack/generated/pi/skills/rite-plan/reference/slicing.md +3 -2
- package/pack/generated/pi/skills/rite-polish/SKILL.md +6 -3
- package/pack/generated/pi/skills/rite-prove/SKILL.md +1 -1
- package/pack/generated/pi/skills/rite-quick/SKILL.md +1 -1
- package/pack/generated/pi/skills/rite-resolve/SKILL.md +1 -1
- package/pack/generated/pi/skills/rite-review/SKILL.md +4 -4
- package/pack/generated/pi/skills/rite-seal/SKILL.md +2 -2
- package/pack/generated/pi/skills/rite-ship/SKILL.md +1 -1
- package/pack/generated/pi/skills/rite-spec/SKILL.md +3 -2
- package/pack/generated/pi/skills/rite-spec/reference/investigation.md +5 -5
- package/pack/generated/pi/skills/rite-spec/reference/spec-template.md +1 -1
- package/pack/generated/pi/skills/rite-spec/reference/state-workspace.md +6 -4
- package/pack/generated/pi/skills/rite-status/SKILL.md +1 -1
- package/pack/generated/pi/skills/rite-temper/SKILL.md +1 -1
- package/pack/generated/pi/skills/rite-temper/reference/review-dimensions.md +2 -2
- package/pack/generated/pi/skills/rite-temper/reference/scope-modes.md +2 -2
- package/pack/generated/pi/skills/rite-temper/reference/significance.md +2 -2
- package/pack/generated/pi/skills/rite-vet/SKILL.md +11 -5
- package/pack/generated/pi/skills/rite-vet/reference/artifacts.md +10 -3
- package/pack/generated/pi/skills/rite-vet/reference/depth.md +2 -2
- package/pack/generated/pi/skills/rite-vet/reference/review-axes.md +2 -2
- package/pack/generated/pi/skills/rite-zoom-out/SKILL.md +6 -6
- package/package.json +1 -1
- package/scripts/build-host-artifacts.sh +5 -4
- package/scripts/omp-generate.sh +3 -12
- package/scripts/pi-generate.sh +5 -51
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
package acceptance
|
|
2
|
+
|
|
3
|
+
import (
|
|
4
|
+
"context"
|
|
5
|
+
"crypto/sha256"
|
|
6
|
+
"encoding/hex"
|
|
7
|
+
"fmt"
|
|
8
|
+
"io"
|
|
9
|
+
"os"
|
|
10
|
+
"path/filepath"
|
|
11
|
+
"regexp"
|
|
12
|
+
"strconv"
|
|
13
|
+
"strings"
|
|
14
|
+
"time"
|
|
15
|
+
|
|
16
|
+
"github.com/devrites/devrites/internal/devritespaths"
|
|
17
|
+
"github.com/devrites/devrites/internal/state"
|
|
18
|
+
)
|
|
19
|
+
|
|
20
|
+
const preconditionsUsage = "usage: devrites-engine check preconditions <slug> [--slice SLICE-###] [--timeout N]"
|
|
21
|
+
|
|
22
|
+
var preDispatchRunAtRE = regexp.MustCompile(`(?i)^pre-dispatch SLICE-\d+$`)
|
|
23
|
+
|
|
24
|
+
// PreflightGateID names a preflight row's transcript directory. The command
|
|
25
|
+
// and cwd digest keeps two rows sharing a Gate cell apart and retires a
|
|
26
|
+
// transcript the moment its row's command changes.
|
|
27
|
+
func PreflightGateID(row PreflightRow) string {
|
|
28
|
+
sum := sha256.Sum256([]byte(row.Command + "\x00" + row.Cwd))
|
|
29
|
+
return "preflight-" + valueOr(row.Gate, "row") + "-" + hex.EncodeToString(sum[:4])
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
// PreflightRowsPassed reports whether every row has a passing transcript in
|
|
33
|
+
// the feature workspace (see PreflightPassed).
|
|
34
|
+
func PreflightRowsPassed(root, slug string, rows []PreflightRow) (bool, error) {
|
|
35
|
+
work, err := devritespaths.ExistingFeatureDirChecked(root, slug)
|
|
36
|
+
if err != nil {
|
|
37
|
+
return false, err
|
|
38
|
+
}
|
|
39
|
+
for _, row := range rows {
|
|
40
|
+
if !PreflightPassed(work, row) {
|
|
41
|
+
return false, nil
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
return true, nil
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
// PreflightPassed reports whether the row's newest transcript under
|
|
48
|
+
// <work>/references/gates/ records RESULT: pass. The transcript records its
|
|
49
|
+
// candidate but the lookup does not compare it: Vet writes workspace artifacts
|
|
50
|
+
// after the run, and only a change to the row's command or cwd retires a pass.
|
|
51
|
+
func PreflightPassed(work string, row PreflightRow) bool {
|
|
52
|
+
dir := filepath.Join(work, "references", "gates", unsafeNameRE.ReplaceAllString(PreflightGateID(row), "_"))
|
|
53
|
+
entries, err := os.ReadDir(dir)
|
|
54
|
+
if err != nil {
|
|
55
|
+
return false
|
|
56
|
+
}
|
|
57
|
+
newest, newestTime := "", time.Time{}
|
|
58
|
+
for _, entry := range entries {
|
|
59
|
+
info, err := entry.Info()
|
|
60
|
+
if err != nil || !info.Mode().IsRegular() || !strings.HasSuffix(entry.Name(), ".log") {
|
|
61
|
+
continue
|
|
62
|
+
}
|
|
63
|
+
if newest == "" || info.ModTime().After(newestTime) {
|
|
64
|
+
newest, newestTime = entry.Name(), info.ModTime()
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
if newest == "" {
|
|
68
|
+
return false
|
|
69
|
+
}
|
|
70
|
+
// #nosec G304 -- transcript path built from the workspace and a sanitized row id
|
|
71
|
+
body, err := os.ReadFile(filepath.Join(dir, newest))
|
|
72
|
+
// Only the header counts: command output could print the verdict line.
|
|
73
|
+
header, _, _ := strings.Cut(string(body), "--- OUTPUT ---")
|
|
74
|
+
return err == nil && strings.Contains(header, "\nRESULT: pass\n")
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
// RunPreconditions is `check preconditions <slug> [--slice S]`: it executes
|
|
78
|
+
// the Build-entry preflight rows whose `Run at` is `vet` (or, with --slice,
|
|
79
|
+
// `pre-dispatch <S>`), writes one candidate-bound transcript per row, and exits
|
|
80
|
+
// ExitBlocked on any failure. Rows are the approved surface itself, so nothing
|
|
81
|
+
// outside test-plan.md runs; `action` rows and rows without a `Run at` cell
|
|
82
|
+
// never run here.
|
|
83
|
+
func RunPreconditions(root string, args []string, stdout, stderr io.Writer) int {
|
|
84
|
+
var slug, slice string
|
|
85
|
+
timeout := DefaultTimeout
|
|
86
|
+
for i := 0; i < len(args); i++ {
|
|
87
|
+
switch {
|
|
88
|
+
case (args[i] == "--slice" || args[i] == "--timeout") && i+1 < len(args):
|
|
89
|
+
if args[i] == "--slice" {
|
|
90
|
+
slice = args[i+1]
|
|
91
|
+
} else if n, err := strconv.Atoi(args[i+1]); err == nil && n > 0 {
|
|
92
|
+
timeout = time.Duration(n) * time.Second
|
|
93
|
+
} else {
|
|
94
|
+
fmt.Fprintln(stderr, preconditionsUsage)
|
|
95
|
+
return ExitUsage
|
|
96
|
+
}
|
|
97
|
+
i++
|
|
98
|
+
case strings.HasPrefix(args[i], "-") || slug != "":
|
|
99
|
+
fmt.Fprintln(stderr, preconditionsUsage)
|
|
100
|
+
return ExitUsage
|
|
101
|
+
default:
|
|
102
|
+
slug = args[i]
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
runAt := "vet"
|
|
106
|
+
if slice != "" {
|
|
107
|
+
runAt = "pre-dispatch " + slice
|
|
108
|
+
}
|
|
109
|
+
if slug == "" || (slice != "" && !preDispatchRunAtRE.MatchString(runAt)) {
|
|
110
|
+
fmt.Fprintln(stderr, preconditionsUsage)
|
|
111
|
+
return ExitUsage
|
|
112
|
+
}
|
|
113
|
+
work, ledgerPath, testPlanPath, project, err := featurePaths(root, slug)
|
|
114
|
+
if err != nil {
|
|
115
|
+
fmt.Fprintf(stderr, "check preconditions: %v\n", err)
|
|
116
|
+
return ExitBlocked
|
|
117
|
+
}
|
|
118
|
+
var plan []byte
|
|
119
|
+
if err := state.WithFeatureLock(root, slug, func() error {
|
|
120
|
+
var err error
|
|
121
|
+
// #nosec G304 -- workspace artifact path resolved from the operator root
|
|
122
|
+
plan, err = os.ReadFile(testPlanPath)
|
|
123
|
+
return err
|
|
124
|
+
}); err != nil {
|
|
125
|
+
fmt.Fprintf(stderr, "check preconditions: %v\n", err)
|
|
126
|
+
return ExitBlocked
|
|
127
|
+
}
|
|
128
|
+
rows, _ := PreflightRows(plan)
|
|
129
|
+
fmt.Fprintf(stdout, "feature: %s\nrun-at: %s\n", slug, runAt)
|
|
130
|
+
|
|
131
|
+
// The gates lock serializes execution and transcript attempt numbering
|
|
132
|
+
// with `gates run` and any concurrent run of the same row.
|
|
133
|
+
failed, ran := false, false
|
|
134
|
+
lockErr := state.WithLock(ledgerPath+".lock", func() error {
|
|
135
|
+
var err error
|
|
136
|
+
failed, ran, err = runPreflightRows(root, slug, work, project, runAt, rows, timeout, stdout)
|
|
137
|
+
return err
|
|
138
|
+
})
|
|
139
|
+
if lockErr != nil {
|
|
140
|
+
fmt.Fprintf(stderr, "check preconditions: %v\n", lockErr)
|
|
141
|
+
return ExitBlocked
|
|
142
|
+
}
|
|
143
|
+
switch {
|
|
144
|
+
case failed:
|
|
145
|
+
fmt.Fprintln(stdout, "result: fail")
|
|
146
|
+
return ExitBlocked
|
|
147
|
+
case !ran:
|
|
148
|
+
fmt.Fprintln(stdout, "result: none")
|
|
149
|
+
default:
|
|
150
|
+
fmt.Fprintln(stdout, "result: pass")
|
|
151
|
+
}
|
|
152
|
+
return ExitOK
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
// runPreflightRows executes the rows whose Run at equals runAt and writes their
|
|
156
|
+
// transcripts. It reports whether any row failed or carried an invalid Run at,
|
|
157
|
+
// and whether any row ran.
|
|
158
|
+
func runPreflightRows(root, slug, work, project, runAt string, rows []PreflightRow, timeout time.Duration, stdout io.Writer) (bool, bool, error) {
|
|
159
|
+
before := candidateLabel(root, slug)
|
|
160
|
+
failed := false
|
|
161
|
+
doc := &Document{}
|
|
162
|
+
var results []GateResult
|
|
163
|
+
for _, row := range rows {
|
|
164
|
+
lower := strings.ToLower(row.RunAt)
|
|
165
|
+
if lower != "" && lower != "vet" && lower != "action" && !preDispatchRunAtRE.MatchString(row.RunAt) {
|
|
166
|
+
fmt.Fprintf(stdout, "row %s: invalid Run at %q (want vet, pre-dispatch SLICE-###, or action)\n", valueOr(row.Gate, row.Command), row.RunAt)
|
|
167
|
+
failed = true
|
|
168
|
+
continue
|
|
169
|
+
}
|
|
170
|
+
if !strings.EqualFold(row.RunAt, runAt) {
|
|
171
|
+
continue
|
|
172
|
+
}
|
|
173
|
+
gate := &Gate{ID: PreflightGateID(row), Title: row.Gate, Check: row.Command, Cwd: row.Cwd,
|
|
174
|
+
Expect: "exit 0 (Expected: " + valueOr(row.Expected, "unstated") + ")"}
|
|
175
|
+
cwd := project
|
|
176
|
+
if row.Cwd != "" {
|
|
177
|
+
cwd = filepath.Join(project, filepath.FromSlash(row.Cwd))
|
|
178
|
+
}
|
|
179
|
+
started := time.Now().UTC()
|
|
180
|
+
outcome := Execute(context.Background(), row.Command, cwd, timeout)
|
|
181
|
+
passed := outcome.Err == nil && outcome.ExitCode == 0
|
|
182
|
+
doc.Gates = append(doc.Gates, gate)
|
|
183
|
+
results = append(results, GateResult{ID: gate.ID, Ran: true, Passed: passed, Outcome: outcome, Started: started, Ended: time.Now().UTC()})
|
|
184
|
+
if passed {
|
|
185
|
+
fmt.Fprintf(stdout, "row %s: pass\n", gate.ID)
|
|
186
|
+
} else {
|
|
187
|
+
fmt.Fprintf(stdout, "row %s: fail (%s)\n", gate.ID, exitLabel(outcome))
|
|
188
|
+
failed = true
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
if len(results) > 0 {
|
|
192
|
+
paths, err := writeTranscripts(work, doc, results, before, candidateLabel(root, slug))
|
|
193
|
+
for _, path := range paths {
|
|
194
|
+
fmt.Fprintf(stdout, "transcript: %s\n", path)
|
|
195
|
+
}
|
|
196
|
+
if err != nil {
|
|
197
|
+
return failed, true, fmt.Errorf("transcript: %w", err)
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
return failed, len(results) > 0, nil
|
|
201
|
+
}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
// Package anchor matches a quoted line against file text: whitespace-normalised
|
|
2
|
+
// containment inside a line range, with quotes too short to identify a line
|
|
3
|
+
// rejected. /overhaul admit and `check anchors` share it so both admit the
|
|
4
|
+
// same quotes.
|
|
5
|
+
package anchor
|
|
6
|
+
|
|
7
|
+
import (
|
|
8
|
+
"strings"
|
|
9
|
+
"unicode/utf8"
|
|
10
|
+
)
|
|
11
|
+
|
|
12
|
+
// MinRunes is the shortest quote (non-space runes) that anchors on its own; a
|
|
13
|
+
// shorter one anchors only when it is the whole cited window.
|
|
14
|
+
const MinRunes = 8
|
|
15
|
+
|
|
16
|
+
// Result is the outcome of matching one quote.
|
|
17
|
+
type Result int
|
|
18
|
+
|
|
19
|
+
const (
|
|
20
|
+
NotFound Result = iota
|
|
21
|
+
Found
|
|
22
|
+
TooShort
|
|
23
|
+
)
|
|
24
|
+
|
|
25
|
+
// Normalize collapses every whitespace run to one space and trims the ends.
|
|
26
|
+
func Normalize(s string) string { return strings.Join(strings.Fields(s), " ") }
|
|
27
|
+
|
|
28
|
+
// Lines decodes b as text (invalid UTF-8 replaced) split like Python's str.splitlines.
|
|
29
|
+
func Lines(b []byte) []string { return Splitlines(strings.ToValidUTF8(string(b), "�")) }
|
|
30
|
+
|
|
31
|
+
// Splitlines is Python's str.splitlines().
|
|
32
|
+
func Splitlines(s string) []string {
|
|
33
|
+
var out []string
|
|
34
|
+
start := 0
|
|
35
|
+
for i := 0; i < len(s); {
|
|
36
|
+
r, size := utf8.DecodeRuneInString(s[i:])
|
|
37
|
+
i += size
|
|
38
|
+
switch r {
|
|
39
|
+
case '\n', '\r', '\v', '\f', 0x1c, 0x1d, 0x1e, 0x85, 0x2028, 0x2029:
|
|
40
|
+
out = append(out, s[start:i-size])
|
|
41
|
+
if r == '\r' && i < len(s) && s[i] == '\n' {
|
|
42
|
+
i++
|
|
43
|
+
}
|
|
44
|
+
start = i
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
if start < len(s) {
|
|
48
|
+
out = append(out, s[start:])
|
|
49
|
+
}
|
|
50
|
+
return out
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
// At matches quote inside lines start..end (1-based, inclusive). The caller
|
|
54
|
+
// checks 1 <= start <= end <= len(lines).
|
|
55
|
+
func At(lines []string, start, end int, quote string) Result {
|
|
56
|
+
q := Normalize(quote)
|
|
57
|
+
w := Normalize(strings.Join(lines[start-1:end], " "))
|
|
58
|
+
if q == "" || !strings.Contains(w, q) {
|
|
59
|
+
return NotFound
|
|
60
|
+
}
|
|
61
|
+
if utf8.RuneCountInString(strings.ReplaceAll(q, " ", "")) < MinRunes && q != w {
|
|
62
|
+
return TooShort
|
|
63
|
+
}
|
|
64
|
+
return Found
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
// Find returns every 1-based line whose own text At admits quote on.
|
|
68
|
+
func Find(lines []string, quote string) []int {
|
|
69
|
+
var hits []int
|
|
70
|
+
for i := range lines {
|
|
71
|
+
if At(lines, i+1, i+1, quote) == Found {
|
|
72
|
+
hits = append(hits, i+1)
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
return hits
|
|
76
|
+
}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
package gate
|
|
2
|
+
|
|
3
|
+
import (
|
|
4
|
+
"fmt"
|
|
5
|
+
"regexp"
|
|
6
|
+
"slices"
|
|
7
|
+
"strings"
|
|
8
|
+
|
|
9
|
+
"github.com/devrites/devrites/internal/acceptance"
|
|
10
|
+
"github.com/devrites/devrites/internal/markdowntext"
|
|
11
|
+
"github.com/devrites/devrites/internal/state"
|
|
12
|
+
)
|
|
13
|
+
|
|
14
|
+
var (
|
|
15
|
+
// testDriverRE matches a test driver script: a file under a scripts/
|
|
16
|
+
// directory whose basename carries a whole test/tests word
|
|
17
|
+
// (scripts/dev-run-test.sh, scripts/run-tests.mjs). Word boundaries keep
|
|
18
|
+
// latest-release.sh and attest.sh out, and unit test files outside
|
|
19
|
+
// scripts/ are run by a driver rather than being one.
|
|
20
|
+
testDriverRE = regexp.MustCompile(`(?:^|/)scripts/(?:[^/]+/)*(?:[^/]*[-_.])?tests?(?:[-_.][^/]*)?\.(?:sh|bash|py|mjs|js)$`)
|
|
21
|
+
// writerAllowlistRE reads a tasks.md slice field the way the task parser
|
|
22
|
+
// does: a column-1 `Writer allowlist:` line of `,`/`;` separated paths.
|
|
23
|
+
writerAllowlistRE = regexp.MustCompile(`(?im)^writer allowlist:[ \t]*(.*)$`)
|
|
24
|
+
// touchedPresentRE reads a `present` row of touched-files.md's candidate
|
|
25
|
+
// manifest table (| State | File | Slice | Reason |).
|
|
26
|
+
touchedPresentRE = regexp.MustCompile("(?m)^\\|[ \t]*present[ \t]*\\|[ \t]*`([^`]+)`[ \t]*\\|")
|
|
27
|
+
// driverWaiverRE reads `Driver waiver: <path> — <DEC-id> <reason>` from
|
|
28
|
+
// gates.md; the first DEC id on the line is the backing decision, and a
|
|
29
|
+
// reason must follow it after a space or `:`/`,`/`.`/`;`.
|
|
30
|
+
driverWaiverRE = regexp.MustCompile("(?m)^Driver waiver:[ \t]*`?([^\\s`]+)`?.*?\\b(DEC-[A-Za-z0-9-]*[A-Za-z0-9])[ \t:,.;]+\\S")
|
|
31
|
+
decisionHeadingRE = regexp.MustCompile(`(?m)^#{1,6}[ \t]+(DEC-[A-Za-z0-9-]*[A-Za-z0-9])`)
|
|
32
|
+
)
|
|
33
|
+
|
|
34
|
+
// testDriverProblems blocks a test driver script the feature plans to write (a
|
|
35
|
+
// tasks.md Writer allowlist, before proof) or touched (a touched-files.md
|
|
36
|
+
// present row, once proof is required) when no gates.md CHECK executes it and
|
|
37
|
+
// no `Driver waiver:` line cites a DEC id that decisions.md records. A touched
|
|
38
|
+
// driver no gate runs can be red at seal unnoticed. Waived drivers are returned
|
|
39
|
+
// separately so the gate output names every deferral.
|
|
40
|
+
func testDriverProblems(observation *state.WorkspaceObservation, policy state.PhasePolicy) (problems, waived []string) {
|
|
41
|
+
if !slices.Contains(policy.RequiredArtifacts, state.ArtifactPath(acceptance.GatesFile)) {
|
|
42
|
+
return nil, nil
|
|
43
|
+
}
|
|
44
|
+
gatesText := structuralFact(observation, state.ArtifactPath(acceptance.GatesFile))
|
|
45
|
+
doc := acceptance.ParseLedger(gatesText)
|
|
46
|
+
if len(doc.Errors) > 0 {
|
|
47
|
+
return nil, nil // gateLedgerProblems already blocks a malformed ledger
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
source, re := "tasks.md", writerAllowlistRE
|
|
51
|
+
if policy.ProofRequired {
|
|
52
|
+
source, re = "touched-files.md", touchedPresentRE
|
|
53
|
+
}
|
|
54
|
+
var drivers []string
|
|
55
|
+
for _, match := range re.FindAllStringSubmatch(structuralFact(observation, state.ArtifactPath(source)), -1) {
|
|
56
|
+
for _, part := range strings.FieldsFunc(match[1], func(r rune) bool { return r == ',' || r == ';' }) {
|
|
57
|
+
driver := strings.TrimPrefix(strings.Trim(strings.TrimSpace(part), "`'\""), "./")
|
|
58
|
+
if testDriverRE.MatchString(driver) && !slices.Contains(drivers, driver) {
|
|
59
|
+
drivers = append(drivers, driver)
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
if len(drivers) == 0 {
|
|
64
|
+
return nil, nil
|
|
65
|
+
}
|
|
66
|
+
slices.Sort(drivers)
|
|
67
|
+
|
|
68
|
+
waivers := map[string]string{}
|
|
69
|
+
for _, match := range driverWaiverRE.FindAllStringSubmatch(gatesText, -1) {
|
|
70
|
+
waivers[strings.TrimPrefix(match[1], "./")] = match[2]
|
|
71
|
+
}
|
|
72
|
+
decisions := map[string]bool{}
|
|
73
|
+
for _, match := range decisionHeadingRE.FindAllStringSubmatch(structuralFact(observation, "decisions.md"), -1) {
|
|
74
|
+
decisions[match[1]] = true
|
|
75
|
+
}
|
|
76
|
+
for _, driver := range drivers {
|
|
77
|
+
if driverExecuted(driver, doc.Gates) {
|
|
78
|
+
continue
|
|
79
|
+
}
|
|
80
|
+
decision, ok := waivers[driver]
|
|
81
|
+
switch {
|
|
82
|
+
case !ok:
|
|
83
|
+
problems = append(problems, fmt.Sprintf(
|
|
84
|
+
"test driver %s is in %s but no gates.md CHECK executes it; add a CHECK or a DEC-backed `Driver waiver: %s — DEC-### <reason>` line",
|
|
85
|
+
driver, source, driver))
|
|
86
|
+
case !decisions[decision]:
|
|
87
|
+
problems = append(problems, fmt.Sprintf(
|
|
88
|
+
"test driver %s waiver cites %s, which has no decisions.md heading; record that decision or add a CHECK",
|
|
89
|
+
driver, decision))
|
|
90
|
+
default:
|
|
91
|
+
waived = append(waived, fmt.Sprintf("unexecuted driver (waived by %s): %s", decision, driver))
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
return problems, waived
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
// driverExecuted reports whether a CHECK names the driver by its
|
|
98
|
+
// repository-relative path, or by its path relative to the gate's CWD.
|
|
99
|
+
func driverExecuted(driver string, gates []*acceptance.Gate) bool {
|
|
100
|
+
for _, gate := range gates {
|
|
101
|
+
if gate.Check == "" {
|
|
102
|
+
continue
|
|
103
|
+
}
|
|
104
|
+
if namesPath(gate.Check, driver) {
|
|
105
|
+
return true
|
|
106
|
+
}
|
|
107
|
+
cwd := strings.TrimSuffix(strings.TrimPrefix(gate.Cwd, "./"), "/")
|
|
108
|
+
if rel, ok := strings.CutPrefix(driver, cwd+"/"); ok && namesPath(gate.Check, rel) {
|
|
109
|
+
return true
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
return false
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
// namesPath reports whether check contains path as a whole path: at the start,
|
|
116
|
+
// or after whitespace, a quote, '=' or a leading "./" or "../", so
|
|
117
|
+
// tools/scripts/test.sh never satisfies scripts/test.sh.
|
|
118
|
+
func namesPath(check, path string) bool {
|
|
119
|
+
for from := 0; ; {
|
|
120
|
+
i := strings.Index(check[from:], path)
|
|
121
|
+
if i < 0 {
|
|
122
|
+
return false
|
|
123
|
+
}
|
|
124
|
+
at := from + i
|
|
125
|
+
if at == 0 || strings.ContainsRune(" \t'\"=", rune(check[at-1])) || strings.HasSuffix(check[:at], "./") {
|
|
126
|
+
return true
|
|
127
|
+
}
|
|
128
|
+
from = at + 1
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
// structuralFact returns a present artifact's text with fenced examples
|
|
133
|
+
// masked, or "" when it is absent or unreadable.
|
|
134
|
+
func structuralFact(observation *state.WorkspaceObservation, path state.ArtifactPath) string {
|
|
135
|
+
fact, ok := observation.Fact(path)
|
|
136
|
+
if !ok || fact.State() != state.ArtifactPresent {
|
|
137
|
+
return ""
|
|
138
|
+
}
|
|
139
|
+
structural, err := markdowntext.Structural(fact.Bytes())
|
|
140
|
+
if err != nil {
|
|
141
|
+
return ""
|
|
142
|
+
}
|
|
143
|
+
return string(structural)
|
|
144
|
+
}
|
|
@@ -7,6 +7,7 @@ package gate
|
|
|
7
7
|
import (
|
|
8
8
|
"fmt"
|
|
9
9
|
"regexp"
|
|
10
|
+
"slices"
|
|
10
11
|
"strings"
|
|
11
12
|
|
|
12
13
|
"github.com/devrites/devrites/internal/markdowntext"
|
|
@@ -38,6 +39,7 @@ type Result struct {
|
|
|
38
39
|
Diagnostics []state.ArtifactDiagnostic
|
|
39
40
|
AddContentFiles []string
|
|
40
41
|
StateProblems []string
|
|
42
|
+
Notes []string // non-blocking lines printed pass or blocked, e.g. waived test drivers
|
|
41
43
|
Blocked bool
|
|
42
44
|
ReasonID reason.ID
|
|
43
45
|
}
|
|
@@ -53,6 +55,20 @@ func Check(kind Kind, root, slug string) (*Result, error) {
|
|
|
53
55
|
if err != nil {
|
|
54
56
|
return nil, fmt.Errorf("gate %s: %w", kind, err)
|
|
55
57
|
}
|
|
58
|
+
for _, problem := range dependencyDryRunProblems(kind, root, observation) {
|
|
59
|
+
result.StateProblems = append(result.StateProblems, "preconditions: "+problem)
|
|
60
|
+
if !result.Blocked {
|
|
61
|
+
result.Blocked = true
|
|
62
|
+
result.ReasonID = ResultReasonID(kind, true)
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
if kind == Readiness {
|
|
66
|
+
for _, problem := range predecessorProblems(root, observation) {
|
|
67
|
+
result.StateProblems = append(result.StateProblems, "predecessor: "+problem)
|
|
68
|
+
result.Blocked = true
|
|
69
|
+
result.ReasonID = reason.GateReadinessStale
|
|
70
|
+
}
|
|
71
|
+
}
|
|
56
72
|
for _, problem := range unsanctionedRootFiles(observation) {
|
|
57
73
|
result.StateProblems = append(result.StateProblems, "placement: "+problem)
|
|
58
74
|
// Keep a more specific reason (readiness-stale) when the observation
|
|
@@ -150,6 +166,15 @@ func checkObservation(kind Kind, observation *state.WorkspaceObservation) (*Resu
|
|
|
150
166
|
blocked = true
|
|
151
167
|
}
|
|
152
168
|
}
|
|
169
|
+
var notes []string
|
|
170
|
+
if len(missingFiles) == 0 {
|
|
171
|
+
driverProblems, waived := testDriverProblems(observation, policy)
|
|
172
|
+
for _, problem := range driverProblems {
|
|
173
|
+
stateProblems = append(stateProblems, "gates: "+problem)
|
|
174
|
+
blocked = true
|
|
175
|
+
}
|
|
176
|
+
notes = waived
|
|
177
|
+
}
|
|
153
178
|
if len(missingFiles) == 0 {
|
|
154
179
|
for _, problem := range artifactBudgetProblems(observation, policy) {
|
|
155
180
|
stateProblems = append(stateProblems, "budget: "+problem)
|
|
@@ -165,10 +190,7 @@ func checkObservation(kind Kind, observation *state.WorkspaceObservation) (*Resu
|
|
|
165
190
|
continue
|
|
166
191
|
}
|
|
167
192
|
if diagnostic, has := fact.Diagnostic(); has && diagnostic.Code == state.DiagnosticFileTooLarge {
|
|
168
|
-
stateProblems = append(stateProblems,
|
|
169
|
-
"budget: %s exceeds the %d-byte artifact cap; relocate history (history/<file>-<YYYYMMDD>.md) or split the feature via /rite-plan revise|course-correct",
|
|
170
|
-
artifact, state.MaxArtifactBytes,
|
|
171
|
-
))
|
|
193
|
+
stateProblems = append(stateProblems, "budget: "+readCapProblem(artifact))
|
|
172
194
|
blocked = true
|
|
173
195
|
}
|
|
174
196
|
}
|
|
@@ -196,6 +218,7 @@ func checkObservation(kind Kind, observation *state.WorkspaceObservation) (*Resu
|
|
|
196
218
|
Diagnostics: diagnostics,
|
|
197
219
|
AddContentFiles: addContentFiles,
|
|
198
220
|
StateProblems: stateProblems,
|
|
221
|
+
Notes: notes,
|
|
199
222
|
Blocked: blocked,
|
|
200
223
|
}
|
|
201
224
|
result.ReasonID = ResultReasonID(kind, blocked)
|
|
@@ -205,18 +228,25 @@ func checkObservation(kind Kind, observation *state.WorkspaceObservation) (*Resu
|
|
|
205
228
|
return result, nil
|
|
206
229
|
}
|
|
207
230
|
|
|
208
|
-
// artifactBudgetProblems blocks
|
|
209
|
-
// (
|
|
210
|
-
//
|
|
211
|
-
// `
|
|
231
|
+
// artifactBudgetProblems blocks every present budget-gated artifact, required
|
|
232
|
+
// by the phase or not (an unrequired drift.md once grew to 7x its budget), on a
|
|
233
|
+
// material overshoot (>= state.BudgetBlockFactor of a line or byte budget) that
|
|
234
|
+
// no bounded `Budget override: <=N lines; <reason>` line covers. Smaller
|
|
235
|
+
// overshoots stay advisory and are reported by `orient`.
|
|
212
236
|
func artifactBudgetProblems(observation *state.WorkspaceObservation, policy state.PhasePolicy) []string {
|
|
213
237
|
var problems []string
|
|
214
|
-
for _, artifact := range
|
|
238
|
+
for _, artifact := range state.BudgetGatedArtifacts() {
|
|
215
239
|
fact, ok := observation.Fact(artifact)
|
|
216
|
-
if !ok
|
|
240
|
+
if !ok {
|
|
217
241
|
continue
|
|
218
242
|
}
|
|
219
|
-
|
|
243
|
+
// A required artifact over the read cap is already reported with the
|
|
244
|
+
// missing files; an unrequired one is caught only here.
|
|
245
|
+
if diagnostic, has := fact.Diagnostic(); has && diagnostic.Code == state.DiagnosticFileTooLarge && !slices.Contains(policy.RequiredArtifacts, artifact) {
|
|
246
|
+
problems = append(problems, readCapProblem(artifact))
|
|
247
|
+
continue
|
|
248
|
+
}
|
|
249
|
+
if fact.State() != state.ArtifactPresent {
|
|
220
250
|
continue
|
|
221
251
|
}
|
|
222
252
|
status, ok := state.ArtifactBudget(string(artifact), fact.Bytes())
|
|
@@ -224,14 +254,21 @@ func artifactBudgetProblems(observation *state.WorkspaceObservation, policy stat
|
|
|
224
254
|
continue
|
|
225
255
|
}
|
|
226
256
|
problems = append(problems, fmt.Sprintf(
|
|
227
|
-
"%s is %d lines/%d bytes, at or above %gx its %d-line/%d-byte budget;
|
|
257
|
+
"%s is %d lines/%d bytes, at or above %gx its %d-line/%d-byte budget; %s",
|
|
228
258
|
status.File, status.Lines, status.Bytes, state.BudgetBlockFactor,
|
|
229
|
-
status.LineBudget, status.ByteBudget,
|
|
259
|
+
status.LineBudget, status.ByteBudget, state.BudgetRemedy(status.LineBudget),
|
|
230
260
|
))
|
|
231
261
|
}
|
|
232
262
|
return problems
|
|
233
263
|
}
|
|
234
264
|
|
|
265
|
+
func readCapProblem(artifact state.ArtifactPath) string {
|
|
266
|
+
return fmt.Sprintf(
|
|
267
|
+
"%s exceeds the %d-byte artifact cap; relocate history (history/<file>-<YYYYMMDD>.md) or split the feature via /rite-plan revise|course-correct",
|
|
268
|
+
artifact, state.MaxArtifactBytes,
|
|
269
|
+
)
|
|
270
|
+
}
|
|
271
|
+
|
|
235
272
|
func acceptanceMapProblems(observation *state.WorkspaceObservation, policy state.PhasePolicy) []string {
|
|
236
273
|
requireTasks := phaseRequiresTasks(policy)
|
|
237
274
|
requireTestPlan := phaseRequiresTestPlan(policy)
|
|
@@ -350,6 +387,9 @@ func (r *Result) Render() string {
|
|
|
350
387
|
if !r.Blocked {
|
|
351
388
|
b.WriteString("result: pass\n")
|
|
352
389
|
fmt.Fprintf(&b, "reason: %s\n", r.ReasonID)
|
|
390
|
+
for _, note := range r.Notes {
|
|
391
|
+
fmt.Fprintf(&b, "note: %s\n", note)
|
|
392
|
+
}
|
|
353
393
|
return b.String()
|
|
354
394
|
}
|
|
355
395
|
missing := r.MissingFiles
|
|
@@ -377,6 +417,9 @@ func (r *Result) Render() string {
|
|
|
377
417
|
for _, problem := range r.StateProblems {
|
|
378
418
|
fmt.Fprintf(&b, "invariant: %s\n", problem)
|
|
379
419
|
}
|
|
420
|
+
for _, note := range r.Notes {
|
|
421
|
+
fmt.Fprintf(&b, "note: %s\n", note)
|
|
422
|
+
}
|
|
380
423
|
fmt.Fprintf(&b, "retry: devrites-engine check %s %s\n", r.Kind, r.Slug)
|
|
381
424
|
return b.String()
|
|
382
425
|
}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
package gate
|
|
2
|
+
|
|
3
|
+
import (
|
|
4
|
+
"fmt"
|
|
5
|
+
"path"
|
|
6
|
+
"regexp"
|
|
7
|
+
"strings"
|
|
8
|
+
|
|
9
|
+
"github.com/devrites/devrites/internal/acceptance"
|
|
10
|
+
"github.com/devrites/devrites/internal/state"
|
|
11
|
+
)
|
|
12
|
+
|
|
13
|
+
// DependencyManifests pairs each package manifest with its lockfiles; an edit
|
|
14
|
+
// to any of them changes dependency resolution.
|
|
15
|
+
var DependencyManifests = []struct {
|
|
16
|
+
Manifest string
|
|
17
|
+
Locks []string
|
|
18
|
+
}{
|
|
19
|
+
{"go.mod", []string{"go.sum"}},
|
|
20
|
+
{"Cargo.toml", []string{"Cargo.lock"}},
|
|
21
|
+
{"package.json", []string{"package-lock.json", "npm-shrinkwrap.json", "pnpm-lock.yaml", "yarn.lock", "bun.lock", "bun.lockb"}},
|
|
22
|
+
{"pyproject.toml", []string{"uv.lock", "poetry.lock"}},
|
|
23
|
+
{"Pipfile", []string{"Pipfile.lock"}},
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
// dependencyManifests are the manifest and lockfile basenames whose edit
|
|
27
|
+
// changes dependency resolution, which only a dry run observes before Build.
|
|
28
|
+
var dependencyManifests = func() map[string]bool {
|
|
29
|
+
names := map[string]bool{}
|
|
30
|
+
for _, m := range DependencyManifests {
|
|
31
|
+
names[m.Manifest] = true
|
|
32
|
+
for _, lock := range m.Locks {
|
|
33
|
+
names[lock] = true
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return names
|
|
37
|
+
}()
|
|
38
|
+
|
|
39
|
+
var slicePathFieldRE = regexp.MustCompile(`(?im)^\s*(?:[-*]\s+)?(?:files likely touched|writer allowlist):\s*(.*)$`)
|
|
40
|
+
|
|
41
|
+
// dependencyDryRunProblems blocks leaving Vet while a slice that edits a
|
|
42
|
+
// dependency manifest lacks a `dependency-dry-run <SLICE>` Build-entry
|
|
43
|
+
// preflight row with `Run at` `vet` whose newest transcript passed. Test plans
|
|
44
|
+
// without the `Run at` column predate the requirement and keep today's
|
|
45
|
+
// behavior.
|
|
46
|
+
func dependencyDryRunProblems(kind Kind, root string, observation *state.WorkspaceObservation) []string {
|
|
47
|
+
if kind != Readiness {
|
|
48
|
+
return nil
|
|
49
|
+
}
|
|
50
|
+
if phase, err := observation.DeclaredPhase(); err != nil || phase != state.PhaseVet {
|
|
51
|
+
return nil
|
|
52
|
+
}
|
|
53
|
+
tasks, ok := observation.Fact("tasks.md")
|
|
54
|
+
plan, planOK := observation.Fact("test-plan.md")
|
|
55
|
+
if !ok || !planOK || tasks.State() != state.ArtifactPresent || plan.State() != state.ArtifactPresent {
|
|
56
|
+
return nil // the missing-artifact path already blocks it
|
|
57
|
+
}
|
|
58
|
+
rows, hasRunAt := acceptance.PreflightRows(plan.Bytes())
|
|
59
|
+
if !hasRunAt {
|
|
60
|
+
return nil
|
|
61
|
+
}
|
|
62
|
+
slug := observation.Slug()
|
|
63
|
+
var problems []string
|
|
64
|
+
for _, slice := range state.ParseTaskGraph(tasks.Bytes()).Slices {
|
|
65
|
+
block, _ := state.ExtractTaskSlice(tasks.Bytes(), slice.ID)
|
|
66
|
+
manifest := touchedManifest(block)
|
|
67
|
+
if manifest == "" {
|
|
68
|
+
continue
|
|
69
|
+
}
|
|
70
|
+
matching := dryRunRows(rows, slice.ID)
|
|
71
|
+
switch {
|
|
72
|
+
case len(matching) == 0:
|
|
73
|
+
problems = append(problems, fmt.Sprintf(
|
|
74
|
+
"%s touches %s but test-plan.md has no `dependency-dry-run %s` Build-entry preflight row with Run at `vet`; add one that applies the planned change in an isolated copy, runs the tidy/lock step, then the project's admission checks",
|
|
75
|
+
slice.ID, manifest, slice.ID))
|
|
76
|
+
default:
|
|
77
|
+
passed, err := acceptance.PreflightRowsPassed(root, slug, matching)
|
|
78
|
+
if err != nil {
|
|
79
|
+
return []string{fmt.Sprintf("dependency dry-run transcripts cannot be read: %v", err)}
|
|
80
|
+
}
|
|
81
|
+
if passed {
|
|
82
|
+
continue
|
|
83
|
+
}
|
|
84
|
+
problems = append(problems, fmt.Sprintf(
|
|
85
|
+
"%s dependency dry run has a row without a passing transcript; run `devrites-engine check preconditions %s` and route a failure to Plan repair",
|
|
86
|
+
slice.ID, slug))
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
return problems
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
func touchedManifest(block string) string {
|
|
93
|
+
for _, match := range slicePathFieldRE.FindAllStringSubmatch(block, -1) {
|
|
94
|
+
for _, part := range strings.FieldsFunc(match[1], func(r rune) bool { return r == ';' || r == ',' }) {
|
|
95
|
+
if name := path.Base(strings.Trim(strings.TrimSpace(part), "`'\"")); dependencyManifests[name] {
|
|
96
|
+
return name
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
return ""
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
func dryRunRows(rows []acceptance.PreflightRow, sliceID string) []acceptance.PreflightRow {
|
|
104
|
+
var matching []acceptance.PreflightRow
|
|
105
|
+
for _, row := range rows {
|
|
106
|
+
if strings.EqualFold(row.RunAt, "vet") && strings.Contains(row.Gate, "dependency-dry-run") &&
|
|
107
|
+
containsToken(row.Gate, sliceID) {
|
|
108
|
+
matching = append(matching, row)
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
return matching
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
func containsToken(text, token string) bool {
|
|
115
|
+
for _, field := range strings.FieldsFunc(text, func(r rune) bool { return r == ' ' || r == ',' || r == ';' }) {
|
|
116
|
+
if field == token {
|
|
117
|
+
return true
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
return false
|
|
121
|
+
}
|