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
|
@@ -1,18 +1,24 @@
|
|
|
1
1
|
package lib
|
|
2
2
|
|
|
3
3
|
import (
|
|
4
|
+
"cmp"
|
|
4
5
|
"encoding/json"
|
|
6
|
+
"errors"
|
|
5
7
|
"fmt"
|
|
6
8
|
"io"
|
|
9
|
+
"io/fs"
|
|
7
10
|
"os"
|
|
8
11
|
"path/filepath"
|
|
9
12
|
"regexp"
|
|
10
13
|
"slices"
|
|
11
14
|
"sort"
|
|
15
|
+
"strconv"
|
|
12
16
|
"strings"
|
|
13
17
|
"time"
|
|
14
18
|
|
|
15
19
|
"github.com/devrites/devrites/internal/devritespaths"
|
|
20
|
+
"github.com/devrites/devrites/internal/markdowntext"
|
|
21
|
+
"github.com/devrites/devrites/internal/parallel"
|
|
16
22
|
"github.com/devrites/devrites/internal/state"
|
|
17
23
|
)
|
|
18
24
|
|
|
@@ -21,20 +27,53 @@ import (
|
|
|
21
27
|
// fan-out cannot silently degrade to serial (open -> every role started ->
|
|
22
28
|
// seal -> returns -> complete). start/return also auto-record metrics events.
|
|
23
29
|
//
|
|
24
|
-
// devrites-engine dispatch <slug> <sub> [--phase p] [--wave w] [--role r] [--handle h] [--reason s] [--slice SLICE-###] [--reslice-review <DRIFT-ID>] [--contract <file>] [--packet <file>]
|
|
30
|
+
// devrites-engine dispatch <slug> <sub> [--phase p] [--wave w] [--role r] [--handle h] [--reason s] [--slice SLICE-###] [--reslice-review <DRIFT-ID>] [--contract <file>] [--packet <file>] [--outcome findings|no-findings|gap] [--result <file>] [--all] [--claim-session <id> --claim <path>... [--claim-ttl <minutes>]] [--release] [--path <path>...]
|
|
25
31
|
|
|
26
|
-
const dispatchUsage = `usage: devrites-engine dispatch <slug> <open|start|seal|return|status|abandon> [--phase p] [--wave w] [--role r] [--handle h] [--reason s] [--slice SLICE-###] [--reslice-review <DRIFT-ID>] [--contract <file>] [--packet <file>]
|
|
32
|
+
const dispatchUsage = `usage: devrites-engine dispatch <slug> <open|start|seal|return|status|abandon|attribute> [--phase p] [--wave w] [--role r] [--handle h] [--reason s] [--slice SLICE-###] [--reslice-review <DRIFT-ID>] [--contract <file>] [--packet <file>] [--outcome findings|no-findings|gap] [--result <file>] [--all] [--claim-session <id> --claim <path>... [--claim-ttl <minutes>]] [--release] [--path <path>...]
|
|
27
33
|
|
|
28
34
|
Wave barrier for parallel agent dispatch: seal fails until every declared
|
|
29
|
-
role has a distinct handle; return fails before seal.
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
35
|
+
role has a distinct handle; return fails before seal. The start that gives
|
|
36
|
+
the last role its handle seals the wave; seal on a sealed wave is a no-op.
|
|
37
|
+
open --claim-session --claim records one file claim for the wave and fails,
|
|
38
|
+
creating no wave, while a live foreign session holds a path; the return that
|
|
39
|
+
completes the wave releases it, and abandon keeps it unless --release (any
|
|
40
|
+
host-confirmed terminal path without a completing return, such as a stop or a
|
|
41
|
+
refused launch). Re-opening an abandoned wave keeps or replaces its claim.
|
|
42
|
+
status --wave exits
|
|
43
|
+
nonzero until that wave is complete; bare status lists every open, sealed,
|
|
44
|
+
or abandoned wave, folds complete waves into one count line (--all lists
|
|
45
|
+
them too), and exits nonzero while any wave is open or sealed (abandoned
|
|
46
|
+
waves are listed only).
|
|
47
|
+
A complete wave cannot be abandoned. return --outcome records the role's
|
|
48
|
+
Outcome line in metrics.jsonl, so metrics summary reports reviewer yield.
|
|
49
|
+
For a reviewer role, return --result <file> stores the return verbatim as
|
|
50
|
+
packets/<wave>-<role>.return.md (never overwritten), derives the outcome
|
|
51
|
+
from its Outcome/Counts head (malformed records gap), refuses an --outcome
|
|
52
|
+
that disagrees, and records its Finding: keys for metrics summary.
|
|
33
53
|
|
|
34
54
|
A build wave with a wright role must name its slice(s) with --slice; a vet
|
|
35
|
-
wave may (slice-bound recheck)
|
|
55
|
+
wave may (slice-bound recheck), and so may a reviewer-only wave (uncapped),
|
|
56
|
+
which keys its --result findings on that slice. A --result file may already
|
|
57
|
+
be the packets/ path; it is then kept as the stored return. Every 5 rounds of one kind on one slice, the
|
|
36
58
|
next open is blocked until --reslice-review names a drift.md
|
|
37
|
-
"## <DRIFT-ID>" heading for that slice.
|
|
59
|
+
"## <DRIFT-ID>" heading for that slice. Under .devrites/AFK max_parallel >= 2,
|
|
60
|
+
a first-round build wright wave narrower than the parallel select --from-plan
|
|
61
|
+
batch is blocked until evidence.md records "serial: <skipped ids> — <reason>";
|
|
62
|
+
repair rounds and lease siblings are never blocked.
|
|
63
|
+
|
|
64
|
+
Root-edit tripwire (ADR-0038): the first open records tree-baseline.json
|
|
65
|
+
(dirty product paths outside .devrites/ and .scratch/, accepted as user work);
|
|
66
|
+
the return that completes a wright wave (any phase) takes in its slice write
|
|
67
|
+
sets and claim paths. open is BLOCKED while a dirty product path changed since
|
|
68
|
+
that baseline with no live claim or in-flight wright wave (any phase) covering
|
|
69
|
+
it, unless the new wright wave (any phase) takes the path on (--claim or a
|
|
70
|
+
slice write set). attribute --reason <evidence> --path <path>... records owner
|
|
71
|
+
work, gate output, a standalone wright, or a sanctioned root write for flagged
|
|
72
|
+
paths. The engine never reverts a file.
|
|
73
|
+
|
|
74
|
+
A build wright wave open in a git project records the work tree as a tree
|
|
75
|
+
object (tree in dispatch.json); check windows --since-dispatch <wave> diffs
|
|
76
|
+
against it to catch tests that lost assertions between same-tree rounds.
|
|
38
77
|
`
|
|
39
78
|
|
|
40
79
|
// wrightRoundsPerReview is how many build wright rounds (or slice-bound Vet
|
|
@@ -55,6 +94,17 @@ type dispatchWave struct {
|
|
|
55
94
|
Slices []string `json:"slices,omitempty"`
|
|
56
95
|
ResliceReview string `json:"reslice_review,omitempty"`
|
|
57
96
|
ResliceReviewed []string `json:"reslice_reviewed,omitempty"`
|
|
97
|
+
Claim string `json:"claim,omitempty"`
|
|
98
|
+
ClaimSession string `json:"claim_session,omitempty"`
|
|
99
|
+
Tree string `json:"tree,omitempty"` // work tree at a build wright open, for check windows --since-dispatch
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
// dispatchClaim carries the wave-claim flags; ttl 0 means unset.
|
|
103
|
+
type dispatchClaim struct {
|
|
104
|
+
session string
|
|
105
|
+
paths []string
|
|
106
|
+
ttl int
|
|
107
|
+
release bool
|
|
58
108
|
}
|
|
59
109
|
|
|
60
110
|
func waveStarted(w *dispatchWave) bool {
|
|
@@ -117,9 +167,12 @@ func nowStamp() string { return time.Now().UTC().Format(time.RFC3339) }
|
|
|
117
167
|
|
|
118
168
|
// RunDispatch implements the dispatch wave state machine.
|
|
119
169
|
func RunDispatch(root string, args []string, stdout, stderr io.Writer) int {
|
|
120
|
-
var slug, sub, phase, wave, role, handle, reason, review, contract, packet string
|
|
170
|
+
var slug, sub, phase, wave, role, handle, reason, review, contract, packet, outcome, result string
|
|
121
171
|
var roles, sliceIDs []string
|
|
122
172
|
var positional []string
|
|
173
|
+
all := false
|
|
174
|
+
var claim dispatchClaim
|
|
175
|
+
var attributed []string
|
|
123
176
|
for i := 0; i < len(args); i++ {
|
|
124
177
|
value := argAt(args, i+1)
|
|
125
178
|
switch args[i] {
|
|
@@ -142,6 +195,29 @@ func RunDispatch(root string, args []string, stdout, stderr io.Writer) int {
|
|
|
142
195
|
contract = value
|
|
143
196
|
case "--packet":
|
|
144
197
|
packet = value
|
|
198
|
+
case "--outcome":
|
|
199
|
+
outcome = value
|
|
200
|
+
case "--result":
|
|
201
|
+
result = value
|
|
202
|
+
case "--claim-session":
|
|
203
|
+
claim.session = value
|
|
204
|
+
case "--claim":
|
|
205
|
+
claim.paths = append(claim.paths, value)
|
|
206
|
+
case "--path":
|
|
207
|
+
attributed = append(attributed, value)
|
|
208
|
+
case "--claim-ttl":
|
|
209
|
+
n, err := strconv.Atoi(value)
|
|
210
|
+
if err != nil {
|
|
211
|
+
fmt.Fprintf(stderr, "dispatch: --claim-ttl expects minutes, got %q\n", value)
|
|
212
|
+
return 2
|
|
213
|
+
}
|
|
214
|
+
claim.ttl = min(max(n, claimMinTTL), claimMaxTTL)
|
|
215
|
+
case "--release":
|
|
216
|
+
claim.release = true
|
|
217
|
+
continue
|
|
218
|
+
case "--all":
|
|
219
|
+
all = true
|
|
220
|
+
continue
|
|
145
221
|
default:
|
|
146
222
|
if strings.HasPrefix(args[i], "-") {
|
|
147
223
|
fmt.Fprintf(stderr, "dispatch: unknown flag %q\n", args[i])
|
|
@@ -157,15 +233,30 @@ func RunDispatch(root string, args []string, stdout, stderr io.Writer) int {
|
|
|
157
233
|
return 2
|
|
158
234
|
}
|
|
159
235
|
slug, sub = positional[0], positional[1]
|
|
236
|
+
if sub != "open" && (claim.session != "" || len(claim.paths) > 0 || claim.ttl != 0) {
|
|
237
|
+
fmt.Fprintln(stderr, "dispatch: --claim-session, --claim, and --claim-ttl apply to open only")
|
|
238
|
+
return 2
|
|
239
|
+
}
|
|
240
|
+
if sub != "abandon" && claim.release {
|
|
241
|
+
fmt.Fprintln(stderr, "dispatch: --release applies to abandon only")
|
|
242
|
+
return 2
|
|
243
|
+
}
|
|
244
|
+
if sub != "attribute" && len(attributed) > 0 {
|
|
245
|
+
fmt.Fprintln(stderr, "dispatch: --path applies to attribute only")
|
|
246
|
+
return 2
|
|
247
|
+
}
|
|
160
248
|
if _, err := devritespaths.ExistingFeatureDirChecked(root, slug); err != nil {
|
|
161
249
|
fmt.Fprintf(stderr, "dispatch: %v\n", err)
|
|
162
250
|
return 2
|
|
163
251
|
}
|
|
252
|
+
if sub == "attribute" {
|
|
253
|
+
return attributeEdits(root, slug, reason, attributed, stdout, stderr)
|
|
254
|
+
}
|
|
164
255
|
// Serialize load-modify-save so concurrent start/return calls never lose
|
|
165
256
|
// an update and strand the wave short of complete.
|
|
166
257
|
code := 0
|
|
167
258
|
if err := state.WithFeatureLock(root, slug, func() error {
|
|
168
|
-
code = dispatchLocked(root, slug, sub, phase, wave, role, handle, reason, roles, sliceIDs, review, contract, packet, stdout, stderr)
|
|
259
|
+
code = dispatchLocked(root, slug, sub, phase, wave, role, handle, reason, roles, sliceIDs, review, contract, packet, outcome, result, all, claim, stdout, stderr)
|
|
169
260
|
return nil
|
|
170
261
|
}); err != nil {
|
|
171
262
|
fmt.Fprintf(stderr, "dispatch: %v\n", err)
|
|
@@ -174,7 +265,7 @@ func RunDispatch(root string, args []string, stdout, stderr io.Writer) int {
|
|
|
174
265
|
return code
|
|
175
266
|
}
|
|
176
267
|
|
|
177
|
-
func dispatchLocked(root, slug, sub, phase, wave, role, handle, reason string, roles, sliceIDs []string, review, contract, packet string, stdout, stderr io.Writer) int {
|
|
268
|
+
func dispatchLocked(root, slug, sub, phase, wave, role, handle, reason string, roles, sliceIDs []string, review, contract, packet, outcome, result string, all bool, claim dispatchClaim, stdout, stderr io.Writer) int {
|
|
178
269
|
f, path, err := loadDispatch(root, slug)
|
|
179
270
|
if err != nil {
|
|
180
271
|
fmt.Fprintf(stderr, "dispatch: %v\n", err)
|
|
@@ -199,8 +290,9 @@ func dispatchLocked(root, slug, sub, phase, wave, role, handle, reason string, r
|
|
|
199
290
|
fmt.Fprint(stderr, dispatchUsage)
|
|
200
291
|
return 2
|
|
201
292
|
}
|
|
202
|
-
|
|
203
|
-
|
|
293
|
+
prev := getWave()
|
|
294
|
+
if prev != nil && prev.State != "abandoned" {
|
|
295
|
+
return fail("wave %q already exists (state %s)", wave, prev.State)
|
|
204
296
|
}
|
|
205
297
|
w := &dispatchWave{Phase: phase, State: "open", Roles: map[string]*dispatchRole{}, Slices: sliceIDs}
|
|
206
298
|
for _, r := range roles {
|
|
@@ -209,18 +301,21 @@ func dispatchLocked(root, slug, sub, phase, wave, role, handle, reason string, r
|
|
|
209
301
|
}
|
|
210
302
|
w.Roles[r] = &dispatchRole{}
|
|
211
303
|
}
|
|
304
|
+
if err := lintKnownRoles(root, phase, roles); err != nil {
|
|
305
|
+
return fail("BLOCKED: %v", err)
|
|
306
|
+
}
|
|
212
307
|
rounds, code := admitWrightRounds(root, slug, f, w, review, stderr)
|
|
213
308
|
if code != 0 {
|
|
214
309
|
return code
|
|
215
310
|
}
|
|
216
311
|
if isBuildWrightWave(w) {
|
|
217
|
-
if err :=
|
|
312
|
+
if err := lintWrightContractFor(root, slug, contract); err != nil {
|
|
218
313
|
return fail("BLOCKED: %v", err)
|
|
219
314
|
}
|
|
220
315
|
}
|
|
221
316
|
for _, r := range roles {
|
|
222
317
|
if isReviewerRole(r) {
|
|
223
|
-
if err :=
|
|
318
|
+
if err := lintReviewerWavePacket(packet, roles); err != nil {
|
|
224
319
|
return fail("BLOCKED: %v", err)
|
|
225
320
|
}
|
|
226
321
|
if strings.EqualFold(phase, "review") || strings.EqualFold(phase, "seal") {
|
|
@@ -231,11 +326,48 @@ func dispatchLocked(root, slug, sub, phase, wave, role, handle, reason string, r
|
|
|
231
326
|
break
|
|
232
327
|
}
|
|
233
328
|
}
|
|
329
|
+
if err := openTripwire(root, slug, w, claim.paths); err != nil {
|
|
330
|
+
return fail("BLOCKED: %v", err)
|
|
331
|
+
}
|
|
332
|
+
if claim.session != "" || len(claim.paths) > 0 || claim.ttl != 0 {
|
|
333
|
+
if claim.session == "" || len(claim.paths) == 0 {
|
|
334
|
+
fmt.Fprintln(stderr, "dispatch: --claim-session and --claim go together (--claim-ttl needs both)")
|
|
335
|
+
return 2
|
|
336
|
+
}
|
|
337
|
+
// The claim goes last so a refused open never leaves one behind.
|
|
338
|
+
id, code := addClaim(root, claim.session, "dispatch wave "+wave, cmp.Or(claim.ttl, claimDefaultTTL), claim.paths, stdout, stderr)
|
|
339
|
+
if code != 0 {
|
|
340
|
+
return code
|
|
341
|
+
}
|
|
342
|
+
w.Claim, w.ClaimSession = id, claim.session
|
|
343
|
+
} else if prev != nil {
|
|
344
|
+
// Inherit the abandoned wave's kept claim so the completing return releases it.
|
|
345
|
+
w.Claim, w.ClaimSession = prev.Claim, prev.ClaimSession
|
|
346
|
+
}
|
|
347
|
+
if project, _, ok := treeProject(root); ok && isBuildWrightWave(w) {
|
|
348
|
+
// Uncommitted rounds look like additions against HEAD; this snapshot
|
|
349
|
+
// is the round's own base. A failed snapshot never blocks the open.
|
|
350
|
+
if tree, err := worktreeTree(project); err != nil {
|
|
351
|
+
fmt.Fprintf(stderr, "dispatch: WARNING: wave %s tree snapshot not recorded: %v\n", wave, err)
|
|
352
|
+
} else {
|
|
353
|
+
w.Tree = tree
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
superseded := prev != nil && prev.Claim != "" && prev.Claim != w.Claim
|
|
234
357
|
f.Waves[wave] = w
|
|
235
358
|
if err := saveDispatch(path, f); err != nil {
|
|
359
|
+
if w.Claim != "" && (prev == nil || w.Claim != prev.Claim) {
|
|
360
|
+
_, _ = releaseClaim(root, w.ClaimSession, w.Claim)
|
|
361
|
+
}
|
|
236
362
|
return fail("%v", err)
|
|
237
363
|
}
|
|
238
364
|
fmt.Fprintf(stdout, "dispatch: wave %s open, %d roles declared\n", wave, len(roles))
|
|
365
|
+
if err := ensureTreeBaseline(root, slug, stdout); err != nil {
|
|
366
|
+
fmt.Fprintf(stderr, "dispatch: WARNING: %s not recorded: %v\n", treeBaselineFile, err)
|
|
367
|
+
}
|
|
368
|
+
if superseded {
|
|
369
|
+
releaseWaveClaim(root, wave, prev, stdout, stderr)
|
|
370
|
+
}
|
|
239
371
|
for _, line := range rounds {
|
|
240
372
|
fmt.Fprintln(stdout, line)
|
|
241
373
|
}
|
|
@@ -263,15 +395,32 @@ func dispatchLocked(root, slug, sub, phase, wave, role, handle, reason string, r
|
|
|
263
395
|
}
|
|
264
396
|
r.Handle = handle
|
|
265
397
|
r.StartedAt = nowStamp()
|
|
398
|
+
// Handles are distinct (checked above), so the last start seals at launch.
|
|
399
|
+
sealed := true
|
|
400
|
+
for _, o := range w.Roles {
|
|
401
|
+
if o.Handle == "" {
|
|
402
|
+
sealed = false
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
if sealed {
|
|
406
|
+
w.State = "sealed"
|
|
407
|
+
}
|
|
266
408
|
if err := saveDispatch(path, f); err != nil {
|
|
267
409
|
return fail("%v", err)
|
|
268
410
|
}
|
|
269
411
|
recordMetric(root, slug, w.Phase, "dispatch", role, 0)
|
|
270
412
|
fmt.Fprintf(stdout, "dispatch: %s started (handle %s)\n", role, handle)
|
|
413
|
+
if sealed {
|
|
414
|
+
fmt.Fprintf(stdout, "dispatch: wave %s sealed (%d roles)\n", wave, len(w.Roles))
|
|
415
|
+
}
|
|
271
416
|
return 0
|
|
272
417
|
|
|
273
418
|
case "seal":
|
|
274
419
|
w := getWave()
|
|
420
|
+
if w != nil && w.State == "sealed" {
|
|
421
|
+
fmt.Fprintf(stdout, "dispatch: wave %s already sealed (%d roles)\n", wave, len(w.Roles))
|
|
422
|
+
return 0
|
|
423
|
+
}
|
|
275
424
|
if w == nil || w.State != "open" {
|
|
276
425
|
return fail("wave %q is not open (state %s)", wave, waveState(w))
|
|
277
426
|
}
|
|
@@ -304,6 +453,20 @@ func dispatchLocked(root, slug, sub, phase, wave, role, handle, reason string, r
|
|
|
304
453
|
if r.Returned {
|
|
305
454
|
return fail("role %q already returned", role)
|
|
306
455
|
}
|
|
456
|
+
if outcome != "" && !slices.Contains([]string{"findings", "no-findings", "gap"}, outcome) {
|
|
457
|
+
return fail("--outcome %q is not findings, no-findings, or gap", outcome)
|
|
458
|
+
}
|
|
459
|
+
note := ""
|
|
460
|
+
if outcome != "" {
|
|
461
|
+
note = "outcome=" + outcome
|
|
462
|
+
}
|
|
463
|
+
stored, created := "", false
|
|
464
|
+
if result != "" {
|
|
465
|
+
var err error
|
|
466
|
+
if note, stored, created, err = storeReturnResult(root, slug, wave, role, w.Slices, result, outcome, stderr); err != nil {
|
|
467
|
+
return fail("%v", err)
|
|
468
|
+
}
|
|
469
|
+
}
|
|
307
470
|
r.Returned, r.ReturnedAt = true, nowStamp()
|
|
308
471
|
all := true
|
|
309
472
|
for _, o := range w.Roles {
|
|
@@ -315,17 +478,35 @@ func dispatchLocked(root, slug, sub, phase, wave, role, handle, reason string, r
|
|
|
315
478
|
w.State = "complete"
|
|
316
479
|
}
|
|
317
480
|
if err := saveDispatch(path, f); err != nil {
|
|
481
|
+
if created {
|
|
482
|
+
_ = os.Remove(stored) // the return is unrecorded, so a retry may store it again
|
|
483
|
+
}
|
|
318
484
|
return fail("%v", err)
|
|
319
485
|
}
|
|
320
|
-
|
|
486
|
+
recordMetricNote(root, slug, w.Phase, "return", role, note)
|
|
321
487
|
fmt.Fprintf(stdout, "dispatch: %s returned (wave %s %s)\n", role, wave, w.State)
|
|
488
|
+
if all {
|
|
489
|
+
absorbWave(root, slug, w, stderr)
|
|
490
|
+
}
|
|
491
|
+
if all && w.Claim != "" {
|
|
492
|
+
releaseWaveClaim(root, wave, w, stdout, stderr)
|
|
493
|
+
}
|
|
494
|
+
if stored != "" {
|
|
495
|
+
head, _, _ := strings.Cut(note, " slice=")
|
|
496
|
+
fmt.Fprintf(stdout, "dispatch: stored %s (%s)\n", "packets/"+filepath.Base(stored), head)
|
|
497
|
+
}
|
|
322
498
|
return 0
|
|
323
499
|
|
|
324
500
|
case "status":
|
|
325
501
|
if wave == "" {
|
|
326
502
|
var incomplete []string
|
|
503
|
+
complete := 0
|
|
327
504
|
for _, name := range sortedKeys(f.Waves) {
|
|
328
505
|
w := f.Waves[name]
|
|
506
|
+
if w.State == "complete" && !all {
|
|
507
|
+
complete++
|
|
508
|
+
continue
|
|
509
|
+
}
|
|
329
510
|
fmt.Fprintf(stdout, "dispatch: wave %s state=%s roles=%d\n", name, w.State, len(w.Roles))
|
|
330
511
|
if w.State == "open" || w.State == "sealed" {
|
|
331
512
|
incomplete = append(incomplete, name)
|
|
@@ -334,6 +515,9 @@ func dispatchLocked(root, slug, sub, phase, wave, role, handle, reason string, r
|
|
|
334
515
|
if len(f.Waves) == 0 {
|
|
335
516
|
fmt.Fprintln(stdout, "dispatch: no waves")
|
|
336
517
|
}
|
|
518
|
+
if complete > 0 {
|
|
519
|
+
fmt.Fprintf(stdout, "dispatch: %d complete wave(s) (use --all)\n", complete)
|
|
520
|
+
}
|
|
337
521
|
if len(incomplete) > 0 {
|
|
338
522
|
return fail("waves not complete: %s", strings.Join(incomplete, ","))
|
|
339
523
|
}
|
|
@@ -374,11 +558,25 @@ func dispatchLocked(root, slug, sub, phase, wave, role, handle, reason string, r
|
|
|
374
558
|
if strings.TrimSpace(reason) == "" {
|
|
375
559
|
return fail("--reason is required (non-empty, recorded in dispatch.json)")
|
|
376
560
|
}
|
|
561
|
+
already := w.State == "abandoned"
|
|
377
562
|
w.State = "abandoned"
|
|
378
563
|
w.Reason = reason
|
|
564
|
+
// A timeout or unknown outcome keeps the claim; --release is for any
|
|
565
|
+
// host-confirmed terminal path without a completing return (a stop or a
|
|
566
|
+
// refused launch), including a re-run once a timed-out child is confirmed.
|
|
567
|
+
if claim.release {
|
|
568
|
+
if w.Claim == "" {
|
|
569
|
+
fmt.Fprintf(stderr, "dispatch: --release: wave %s holds no claim\n", wave)
|
|
570
|
+
} else if releaseWaveClaim(root, wave, w, stdout, stderr) {
|
|
571
|
+
w.Claim, w.ClaimSession = "", ""
|
|
572
|
+
}
|
|
573
|
+
}
|
|
379
574
|
if err := saveDispatch(path, f); err != nil {
|
|
380
575
|
return fail("%v", err)
|
|
381
576
|
}
|
|
577
|
+
if !already {
|
|
578
|
+
recordMetricNote(root, slug, w.Phase, "abandon", "", reason)
|
|
579
|
+
}
|
|
382
580
|
fmt.Fprintf(stdout, "dispatch: wave %s abandoned: %s\n", wave, reason)
|
|
383
581
|
return fail("wave %q is abandoned — HANDOFF REQUIRED: %s", wave, reason)
|
|
384
582
|
}
|
|
@@ -386,6 +584,106 @@ func dispatchLocked(root, slug, sub, phase, wave, role, handle, reason string, r
|
|
|
386
584
|
return 2
|
|
387
585
|
}
|
|
388
586
|
|
|
587
|
+
// releaseWaveClaim releases w's claim and reports whether it did. A failure
|
|
588
|
+
// only warns: the wave state change does not depend on it.
|
|
589
|
+
func releaseWaveClaim(root, wave string, w *dispatchWave, stdout, stderr io.Writer) bool {
|
|
590
|
+
n, err := releaseClaim(root, w.ClaimSession, w.Claim)
|
|
591
|
+
if err != nil {
|
|
592
|
+
fmt.Fprintf(stderr, "dispatch: WARNING: wave %s claim not released: %v\n", wave, err)
|
|
593
|
+
return false
|
|
594
|
+
}
|
|
595
|
+
fmt.Fprintf(stdout, "dispatch: wave %s released claim %s (%d path(s))\n", wave, w.Claim, n)
|
|
596
|
+
return true
|
|
597
|
+
}
|
|
598
|
+
|
|
599
|
+
// maxReturnBytes bounds one stored reviewer return.
|
|
600
|
+
const maxReturnBytes = 1 << 20
|
|
601
|
+
|
|
602
|
+
// storeReturnResult copies a reviewer's return verbatim to
|
|
603
|
+
// packets/<wave>-<role>.return.md, refusing to overwrite one, and builds the
|
|
604
|
+
// return's metrics note: outcome, counts or head=malformed, slice, Late: line
|
|
605
|
+
// count, and one finding= key per Finding: row. A malformed head records
|
|
606
|
+
// outcome=gap, never no-findings. An explicit --outcome that disagrees with
|
|
607
|
+
// the head is refused before anything is written. created is false when
|
|
608
|
+
// result already is the stored file, so a failed save must not remove it.
|
|
609
|
+
func storeReturnResult(root, slug, wave, role string, sliceIDs []string, result, typed string, stderr io.Writer) (note, stored string, created bool, err error) {
|
|
610
|
+
if !isReviewerRole(role) {
|
|
611
|
+
return "", "", false, fmt.Errorf("--result applies to reviewer, auditor, and test-analyst roles, not %q", role)
|
|
612
|
+
}
|
|
613
|
+
if !devritespaths.ValidSlug(wave) || !devritespaths.ValidSlug(role) {
|
|
614
|
+
return "", "", false, fmt.Errorf("--result needs a wave and role that are single path elements (wave %q, role %q)", wave, role)
|
|
615
|
+
}
|
|
616
|
+
raw, err := readBoundedRegularFile(result, maxReturnBytes)
|
|
617
|
+
if err != nil {
|
|
618
|
+
return "", "", false, fmt.Errorf("--result %s: %w", result, err)
|
|
619
|
+
}
|
|
620
|
+
outcome, counts, headErr := parseReturnHead(role, string(raw))
|
|
621
|
+
if headErr != nil {
|
|
622
|
+
outcome = "gap"
|
|
623
|
+
}
|
|
624
|
+
if typed != "" && typed != outcome {
|
|
625
|
+
reason := "its head says " + outcome
|
|
626
|
+
if headErr != nil {
|
|
627
|
+
reason = "its head is malformed (" + headErr.Error() + "), which records gap"
|
|
628
|
+
}
|
|
629
|
+
return "", "", false, fmt.Errorf("--outcome %s disagrees with the return in %s: %s; fix the account or drop --outcome", typed, result, reason)
|
|
630
|
+
}
|
|
631
|
+
dir, err := devritespaths.ExistingFeatureDirChecked(root, slug)
|
|
632
|
+
if err != nil {
|
|
633
|
+
return "", "", false, err
|
|
634
|
+
}
|
|
635
|
+
if err := os.MkdirAll(filepath.Join(dir, "packets"), 0o755); err != nil {
|
|
636
|
+
return "", "", false, err
|
|
637
|
+
}
|
|
638
|
+
stored = filepath.Join(dir, "packets", wave+"-"+role+".return.md")
|
|
639
|
+
if !sameFile(stored, result) {
|
|
640
|
+
out, err := os.OpenFile(stored, os.O_WRONLY|os.O_CREATE|os.O_EXCL, 0o600) // #nosec G304 -- validated workspace dir and single-element names
|
|
641
|
+
if errors.Is(err, fs.ErrExist) {
|
|
642
|
+
return "", "", false, fmt.Errorf("%s already exists; a stored return is never overwritten", "packets/"+filepath.Base(stored))
|
|
643
|
+
}
|
|
644
|
+
if err != nil {
|
|
645
|
+
return "", "", false, err
|
|
646
|
+
}
|
|
647
|
+
_, werr := out.Write(raw)
|
|
648
|
+
if cerr := out.Close(); werr == nil {
|
|
649
|
+
werr = cerr
|
|
650
|
+
}
|
|
651
|
+
if werr != nil {
|
|
652
|
+
_ = os.Remove(stored)
|
|
653
|
+
return "", "", false, werr
|
|
654
|
+
}
|
|
655
|
+
created = true
|
|
656
|
+
}
|
|
657
|
+
parts := []string{"outcome=" + outcome}
|
|
658
|
+
if headErr != nil {
|
|
659
|
+
parts = append(parts, "head=malformed")
|
|
660
|
+
fmt.Fprintf(stderr, "dispatch: WARNING: %s return head is malformed (%v); recorded outcome=gap, never no-findings — follow the gap path in agents.md § Result admission\n", role, headErr)
|
|
661
|
+
} else {
|
|
662
|
+
parts = append(parts, "counts="+counts)
|
|
663
|
+
}
|
|
664
|
+
slice := "-"
|
|
665
|
+
if len(sliceIDs) > 0 {
|
|
666
|
+
slice = strings.Join(sliceIDs, "+")
|
|
667
|
+
}
|
|
668
|
+
keys, late := findingKeys(role, slice, string(raw))
|
|
669
|
+
parts = append(parts, "slice="+slice, fmt.Sprintf("late=%d", late))
|
|
670
|
+
for _, key := range keys {
|
|
671
|
+
parts = append(parts, "finding="+key)
|
|
672
|
+
}
|
|
673
|
+
return strings.Join(parts, " "), stored, created, nil
|
|
674
|
+
}
|
|
675
|
+
|
|
676
|
+
// sameFile reports whether stored already is the result file (the root wrote
|
|
677
|
+
// the account straight to packets/), so storing it again is a no-op.
|
|
678
|
+
func sameFile(stored, result string) bool {
|
|
679
|
+
a, err := os.Lstat(stored)
|
|
680
|
+
if err != nil || !a.Mode().IsRegular() {
|
|
681
|
+
return false
|
|
682
|
+
}
|
|
683
|
+
b, err := os.Stat(result)
|
|
684
|
+
return err == nil && os.SameFile(a, b)
|
|
685
|
+
}
|
|
686
|
+
|
|
389
687
|
// roundKind names the capped loop a wave belongs to: build wright rounds or
|
|
390
688
|
// slice-bound Vet rechecks. Other waves are uncapped.
|
|
391
689
|
func roundKind(w *dispatchWave) string {
|
|
@@ -399,9 +697,11 @@ func roundKind(w *dispatchWave) string {
|
|
|
399
697
|
}
|
|
400
698
|
|
|
401
699
|
func isBuildWrightWave(w *dispatchWave) bool {
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
700
|
+
return strings.EqualFold(w.Phase, "build") && isWrightWave(w)
|
|
701
|
+
}
|
|
702
|
+
|
|
703
|
+
// isWrightWave reports whether any role of the wave, in any phase, is a wright.
|
|
704
|
+
func isWrightWave(w *dispatchWave) bool {
|
|
405
705
|
for r := range w.Roles {
|
|
406
706
|
if strings.Contains(r, "wright") {
|
|
407
707
|
return true
|
|
@@ -418,10 +718,17 @@ func isBuildWrightWave(w *dispatchWave) bool {
|
|
|
418
718
|
func admitWrightRounds(root, slug string, f *dispatchFile, w *dispatchWave, review string, stderr io.Writer) ([]string, int) {
|
|
419
719
|
kind := roundKind(w)
|
|
420
720
|
if kind == "" {
|
|
421
|
-
if review != "" || (len(w.Slices) > 0 && !strings.EqualFold(w.Phase, "vet")) {
|
|
422
|
-
fmt.Fprintln(stderr, "dispatch: --
|
|
721
|
+
if review != "" || (len(w.Slices) > 0 && !strings.EqualFold(w.Phase, "vet") && !reviewerOnlyWave(w)) {
|
|
722
|
+
fmt.Fprintln(stderr, "dispatch: --reslice-review applies only to build wright waves and slice-bound vet waves; --slice also to reviewer-only waves")
|
|
423
723
|
return nil, 2
|
|
424
724
|
}
|
|
725
|
+
// A reviewer-only wave names its slice for resolution metrics, uncapped.
|
|
726
|
+
for _, id := range w.Slices {
|
|
727
|
+
if !state.ValidSliceID(id) {
|
|
728
|
+
fmt.Fprintf(stderr, "dispatch: %q is not a SLICE-### id\n", id)
|
|
729
|
+
return nil, 2
|
|
730
|
+
}
|
|
731
|
+
}
|
|
425
732
|
return nil, 0
|
|
426
733
|
}
|
|
427
734
|
if len(w.Slices) == 0 {
|
|
@@ -435,6 +742,7 @@ func admitWrightRounds(root, slug string, f *dispatchFile, w *dispatchWave, revi
|
|
|
435
742
|
}
|
|
436
743
|
}
|
|
437
744
|
var lines, overCap []string
|
|
745
|
+
firstRound := true
|
|
438
746
|
for _, id := range w.Slices {
|
|
439
747
|
prior, reviews := 0, 0
|
|
440
748
|
var unreturned []string
|
|
@@ -454,6 +762,7 @@ func admitWrightRounds(root, slug string, f *dispatchFile, w *dispatchWave, revi
|
|
|
454
762
|
}
|
|
455
763
|
}
|
|
456
764
|
round := prior + 1
|
|
765
|
+
firstRound = firstRound && prior == 0
|
|
457
766
|
if round > wrightRoundsPerReview*(1+reviews) {
|
|
458
767
|
overCap = append(overCap, id)
|
|
459
768
|
}
|
|
@@ -471,6 +780,12 @@ func admitWrightRounds(root, slug string, f *dispatchFile, w *dispatchWave, revi
|
|
|
471
780
|
fmt.Fprintf(stderr, "dispatch: --reslice-review given but no slice has reached its %d-round cap\n", wrightRoundsPerReview)
|
|
472
781
|
return nil, 2
|
|
473
782
|
}
|
|
783
|
+
if kind == "wright" && firstRound {
|
|
784
|
+
if refusal := widerBatchRefusal(root, slug, w.Slices); refusal != "" {
|
|
785
|
+
fmt.Fprintln(stderr, refusal)
|
|
786
|
+
return nil, 3
|
|
787
|
+
}
|
|
788
|
+
}
|
|
474
789
|
return lines, 0
|
|
475
790
|
}
|
|
476
791
|
if review == "" {
|
|
@@ -500,6 +815,63 @@ func admitWrightRounds(root, slug string, f *dispatchFile, w *dispatchWave, revi
|
|
|
500
815
|
return lines, 0
|
|
501
816
|
}
|
|
502
817
|
|
|
818
|
+
// serialRecordRe matches an evidence.md `serial: <ids> — <reason>` record
|
|
819
|
+
// (the reason may open with a code span, never be empty); group 1 holds the ids.
|
|
820
|
+
var serialRecordRe = regexp.MustCompile("(?mi)^[ \\t]*(?:[-*][ \\t]+)?`?serial:([^\\n]*?)(?:[ \\t]*[—–]|[ \\t]+--?[ \\t])[ \\t]*(?:[^\\s`]|`[^\\s`])")
|
|
821
|
+
|
|
822
|
+
var sliceTokenRe = regexp.MustCompile(`(?i)\bSLICE-\d+\b`)
|
|
823
|
+
|
|
824
|
+
// widerBatchRefusal refuses a first-round AFK build wright wave when
|
|
825
|
+
// `parallel select --from-plan` picks more slices than the wave holds and
|
|
826
|
+
// evidence.md has no `serial:` record naming each skipped pick. HITL runs,
|
|
827
|
+
// lease siblings, slices the plan does not list as eligible, and selection
|
|
828
|
+
// errors are never refused: the check widens batches, it never stops a build.
|
|
829
|
+
func widerBatchRefusal(root, slug string, wave []string) string {
|
|
830
|
+
capN := min(afkMaxParallel(root), parallel.MaxParallelSlices)
|
|
831
|
+
if capN < 2 {
|
|
832
|
+
return ""
|
|
833
|
+
}
|
|
834
|
+
eligible, batch, err := planBatch(root, slug, capN)
|
|
835
|
+
if err != nil || len(batch) <= len(wave) {
|
|
836
|
+
return ""
|
|
837
|
+
}
|
|
838
|
+
for _, id := range wave {
|
|
839
|
+
if !containsSlice(eligible, id) {
|
|
840
|
+
return ""
|
|
841
|
+
}
|
|
842
|
+
}
|
|
843
|
+
var recorded []string
|
|
844
|
+
if raw, err := readWorkspaceArtifact(root, slug, "evidence.md"); err == nil {
|
|
845
|
+
if visible, err := markdowntext.Structural(raw); err == nil {
|
|
846
|
+
raw = visible
|
|
847
|
+
}
|
|
848
|
+
for _, m := range serialRecordRe.FindAllStringSubmatch(string(raw), -1) {
|
|
849
|
+
recorded = append(recorded, sliceTokenRe.FindAllString(m[1], -1)...)
|
|
850
|
+
}
|
|
851
|
+
}
|
|
852
|
+
var missing []string
|
|
853
|
+
for _, id := range batch {
|
|
854
|
+
if !containsSlice(wave, id) && !containsSlice(recorded, id) {
|
|
855
|
+
missing = append(missing, id)
|
|
856
|
+
}
|
|
857
|
+
}
|
|
858
|
+
if len(missing) == 0 {
|
|
859
|
+
return ""
|
|
860
|
+
}
|
|
861
|
+
return fmt.Sprintf("dispatch: BLOCKED: AFK max_parallel %d: `%s` picks %s, wider than this wave (%s); run that batch per rite-build/reference/parallel-batch.md (`parallel create`, then one wave with a --slice per sibling), or record `serial: %s — <shared surface or reason>` in evidence.md",
|
|
862
|
+
capN, planSelectCommand(filepath.Dir(root), slug, capN), strings.Join(batch, ","), strings.Join(wave, ","), strings.Join(missing, ","))
|
|
863
|
+
}
|
|
864
|
+
|
|
865
|
+
// reviewerOnlyWave reports whether every role in w is a reviewer role.
|
|
866
|
+
func reviewerOnlyWave(w *dispatchWave) bool {
|
|
867
|
+
for r := range w.Roles {
|
|
868
|
+
if !isReviewerRole(r) {
|
|
869
|
+
return false
|
|
870
|
+
}
|
|
871
|
+
}
|
|
872
|
+
return len(w.Roles) > 0
|
|
873
|
+
}
|
|
874
|
+
|
|
503
875
|
// containsSlice reports whether ids names the same slice as id, ignoring
|
|
504
876
|
// zero padding (SLICE-1 == SLICE-001) so a respelling cannot reset the cap.
|
|
505
877
|
func containsSlice(ids []string, id string) bool {
|