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
|
@@ -11,6 +11,7 @@ import (
|
|
|
11
11
|
|
|
12
12
|
"github.com/devrites/devrites/internal/devritespaths"
|
|
13
13
|
"github.com/devrites/devrites/internal/markdowntext"
|
|
14
|
+
"github.com/devrites/devrites/internal/parallel"
|
|
14
15
|
"github.com/devrites/devrites/internal/state"
|
|
15
16
|
"github.com/devrites/devrites/internal/workflow"
|
|
16
17
|
)
|
|
@@ -18,7 +19,8 @@ import (
|
|
|
18
19
|
// RunNext prints the minimal remaining lifecycle path: the first phase whose
|
|
19
20
|
// required artifacts are not all present, plus advisory skips for phases whose
|
|
20
21
|
// remaining work is vacuous (e.g. clarify with zero open questions). Advisory
|
|
21
|
-
// only — the rite still owns the decision to advance
|
|
22
|
+
// only — the rite still owns the decision to advance — except the root-edit
|
|
23
|
+
// tripwire, which exits 3 while an unattributed product edit is in the tree.
|
|
22
24
|
func RunNext(root string, args []string, stdout, stderr io.Writer) int {
|
|
23
25
|
slug, code, err := ActiveSlug(root, args)
|
|
24
26
|
if err != nil {
|
|
@@ -60,10 +62,24 @@ func RunNext(root string, args []string, stdout, stderr io.Writer) int {
|
|
|
60
62
|
fmt.Fprintln(stdout, "current-status: incomplete")
|
|
61
63
|
}
|
|
62
64
|
fmt.Fprintf(stdout, "open-questions: %d\n", openQuestions)
|
|
65
|
+
// The root-edit tripwire (ADR-0038) leads the output and exits 3; the rest
|
|
66
|
+
// still prints so the root sees where it resumes once the edit is routed.
|
|
67
|
+
exit := 0
|
|
68
|
+
if flagged, err := unattributedEdits(root, slug); err != nil {
|
|
69
|
+
fmt.Fprintf(stdout, "blocked: tree baseline: %v\n", err)
|
|
70
|
+
exit = 3
|
|
71
|
+
} else if len(flagged) > 0 {
|
|
72
|
+
recordUnattributed(root, slug, string(report.Phase), flagged)
|
|
73
|
+
fmt.Fprintf(stdout, "blocked: %s\n", unattributedMessage(slug, flagged))
|
|
74
|
+
exit = 3
|
|
75
|
+
}
|
|
76
|
+
if report.Phase == state.PhaseBuild {
|
|
77
|
+
printPlanBatch(stdout, root, slug)
|
|
78
|
+
}
|
|
63
79
|
|
|
64
80
|
if report.Phase == state.PhaseDone {
|
|
65
81
|
fmt.Fprintln(stdout, "next-phase: done")
|
|
66
|
-
return
|
|
82
|
+
return exit
|
|
67
83
|
}
|
|
68
84
|
|
|
69
85
|
// Walk from the current phase to the first incomplete one. Vacuous phases
|
|
@@ -74,7 +90,7 @@ func RunNext(root string, args []string, stdout, stderr io.Writer) int {
|
|
|
74
90
|
if policy.Target == state.PhaseDone {
|
|
75
91
|
fmt.Fprintln(stdout, "next-phase: done")
|
|
76
92
|
printSkips(stdout, skips)
|
|
77
|
-
return
|
|
93
|
+
return exit
|
|
78
94
|
}
|
|
79
95
|
var missing []string
|
|
80
96
|
if i == currentIdx {
|
|
@@ -106,11 +122,35 @@ func RunNext(root string, args []string, stdout, stderr io.Writer) int {
|
|
|
106
122
|
fmt.Fprintf(stdout, "missing: %s\n", strings.Join(missing, ","))
|
|
107
123
|
}
|
|
108
124
|
printSkips(stdout, skips)
|
|
109
|
-
return
|
|
125
|
+
return exit
|
|
110
126
|
}
|
|
111
127
|
fmt.Fprintln(stdout, "next-phase: done")
|
|
112
128
|
printSkips(stdout, skips)
|
|
113
|
-
return
|
|
129
|
+
return exit
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
// printPlanBatch prints the slices runnable now and the batch `parallel select
|
|
133
|
+
// --from-plan` picks at the AFK max_parallel cap (else the maximum), with the
|
|
134
|
+
// command itself. Advisory: an unreadable plan prints why, never an exit code.
|
|
135
|
+
func printPlanBatch(stdout io.Writer, root, slug string) {
|
|
136
|
+
capN := afkMaxParallel(root)
|
|
137
|
+
if capN < 1 || capN > parallel.MaxParallelSlices {
|
|
138
|
+
capN = parallel.MaxParallelSlices
|
|
139
|
+
}
|
|
140
|
+
eligible, batch, err := planBatch(root, slug, capN)
|
|
141
|
+
if err != nil {
|
|
142
|
+
fmt.Fprintf(stdout, "batch: unavailable (%v)\n", err)
|
|
143
|
+
return
|
|
144
|
+
}
|
|
145
|
+
list := func(ids []string) string {
|
|
146
|
+
if len(ids) == 0 {
|
|
147
|
+
return "none"
|
|
148
|
+
}
|
|
149
|
+
return strings.Join(ids, ",")
|
|
150
|
+
}
|
|
151
|
+
fmt.Fprintf(stdout, "eligible_now: %s\n", list(eligible))
|
|
152
|
+
fmt.Fprintf(stdout, "batch: %s\n", list(batch))
|
|
153
|
+
fmt.Fprintf(stdout, "select-command: %s\n", planSelectCommand(filepath.Dir(root), slug, capN))
|
|
114
154
|
}
|
|
115
155
|
|
|
116
156
|
func renderNextCommand(policy state.PhasePolicy) string {
|
|
@@ -157,13 +157,11 @@ func missingSectionNames(sections []state.Section) []string {
|
|
|
157
157
|
return out
|
|
158
158
|
}
|
|
159
159
|
|
|
160
|
-
// WriteObserveSummaryJSON prints one JSON object to stdout.
|
|
160
|
+
// WriteObserveSummaryJSON prints one compact JSON object line to stdout.
|
|
161
161
|
func WriteObserveSummaryJSON(root, slug string, stdout io.Writer) error {
|
|
162
162
|
summary, err := ObserveSummaryFor(root, slug)
|
|
163
163
|
if err != nil {
|
|
164
164
|
return err
|
|
165
165
|
}
|
|
166
|
-
|
|
167
|
-
enc.SetIndent("", " ")
|
|
168
|
-
return enc.Encode(summary)
|
|
166
|
+
return json.NewEncoder(stdout).Encode(summary)
|
|
169
167
|
}
|
|
@@ -0,0 +1,319 @@
|
|
|
1
|
+
package lib
|
|
2
|
+
|
|
3
|
+
import (
|
|
4
|
+
"errors"
|
|
5
|
+
"fmt"
|
|
6
|
+
"io"
|
|
7
|
+
"os"
|
|
8
|
+
"path/filepath"
|
|
9
|
+
"regexp"
|
|
10
|
+
"strings"
|
|
11
|
+
|
|
12
|
+
"github.com/devrites/devrites/internal/acceptance"
|
|
13
|
+
"github.com/devrites/devrites/internal/devritespaths"
|
|
14
|
+
"github.com/devrites/devrites/internal/state"
|
|
15
|
+
)
|
|
16
|
+
|
|
17
|
+
// PacketUsage is the help and usage-error text for `packet`.
|
|
18
|
+
const PacketUsage = `usage: devrites-engine packet <slug> --wave <w> --phase <p> --role <r> [--slice <SLICE-ID>] [--recheck] [--checks <G-ID,...>] [--focus <file>]
|
|
19
|
+
|
|
20
|
+
Renders one role's by-reference dispatch packet and runs the lints dispatch
|
|
21
|
+
open runs on it; a refused packet is removed and the command exits 3. A
|
|
22
|
+
wright role (needs --slice and --checks) writes a same-worktree
|
|
23
|
+
packets/<w>.contract.md with the slice's Writer allowlist and each --checks
|
|
24
|
+
gates.md gate's CHECK, which must be an approved test-plan.md Build-entry
|
|
25
|
+
preflight row; a native-worktree pilot keeps its own contract. A reviewer
|
|
26
|
+
role (*-reviewer, *-auditor, test-analyst) writes packets/<w>.<role>.md with
|
|
27
|
+
its Outcome/Counts return head. Read first names the role's context bundle
|
|
28
|
+
(run context first; --recheck names the build --recheck bundle) and
|
|
29
|
+
packets/<w>.diff when candidate freeze wrote one; Candidate copies
|
|
30
|
+
packets/<w>.sha256 verbatim, or only its header rows when the per-file rows
|
|
31
|
+
would overflow the packet (required at review and seal). --focus (relative
|
|
32
|
+
to the workspace) holds one "- <ID> <path:line> <text>" row per line, text up
|
|
33
|
+
to 240 characters, and any other non-blank line is refused: open findings
|
|
34
|
+
for a reviewer, defects and quoted carry-forward constraints for a wright,
|
|
35
|
+
and the 1-3 row claim a doubt-reviewer attacks (required for that role).
|
|
36
|
+
`
|
|
37
|
+
|
|
38
|
+
// focusRowRE is the only open-finding shape a packet carries: an ID, an
|
|
39
|
+
// anchor, and a bounded defect statement, never narrative or outcomes.
|
|
40
|
+
var focusRowRE = regexp.MustCompile(`^- [A-Za-z][A-Za-z0-9._-]{0,63} [^\s:]+(?::[0-9]+)+(?:-[0-9]+)? \S.{0,239}$`)
|
|
41
|
+
|
|
42
|
+
// RunPacket implements `packet`: it renders the fixed skeleton so the root
|
|
43
|
+
// never hand-writes packet prose, hashes, or IDs.
|
|
44
|
+
func RunPacket(root string, args []string, stdout, stderr io.Writer) int {
|
|
45
|
+
var wave, phase, role, slice, checks, focus, recheck string
|
|
46
|
+
var positional []string
|
|
47
|
+
for i := 0; i < len(args); i++ {
|
|
48
|
+
value := argAt(args, i+1)
|
|
49
|
+
switch args[i] {
|
|
50
|
+
case "--recheck":
|
|
51
|
+
// Non-empty selects the .recheck bundle name; the text is the context hint.
|
|
52
|
+
recheck = " --recheck <inventory>"
|
|
53
|
+
continue
|
|
54
|
+
case "--wave":
|
|
55
|
+
wave = value
|
|
56
|
+
case "--phase":
|
|
57
|
+
phase = value
|
|
58
|
+
case "--role":
|
|
59
|
+
role = value
|
|
60
|
+
case "--slice":
|
|
61
|
+
slice = value
|
|
62
|
+
case "--checks":
|
|
63
|
+
checks = value
|
|
64
|
+
case "--focus":
|
|
65
|
+
focus = value
|
|
66
|
+
default:
|
|
67
|
+
if strings.HasPrefix(args[i], "-") {
|
|
68
|
+
fmt.Fprintf(stderr, "packet: unknown flag %q\n", args[i])
|
|
69
|
+
return 2
|
|
70
|
+
}
|
|
71
|
+
positional = append(positional, args[i])
|
|
72
|
+
continue
|
|
73
|
+
}
|
|
74
|
+
i++
|
|
75
|
+
}
|
|
76
|
+
wright := strings.Contains(role, "wright")
|
|
77
|
+
doubt := roleBase(role) == "doubt-reviewer"
|
|
78
|
+
if len(positional) != 1 || !packetNameRE.MatchString(wave) || !packetNameRE.MatchString(phase) || !packetNameRE.MatchString(role) ||
|
|
79
|
+
(slice != "" && !packetNameRE.MatchString(slice)) || (!wright && !isReviewerRole(role)) || (wright && slice == "") || (!wright && checks != "") ||
|
|
80
|
+
(recheck != "" && (phase != "build" || slice == "")) || (doubt && focus == "") {
|
|
81
|
+
fmt.Fprint(stderr, PacketUsage)
|
|
82
|
+
return 2
|
|
83
|
+
}
|
|
84
|
+
slug := positional[0]
|
|
85
|
+
fail := func(err error) int {
|
|
86
|
+
fmt.Fprintf(stderr, "packet: %v\n", err)
|
|
87
|
+
return 3
|
|
88
|
+
}
|
|
89
|
+
workspace, err := devritespaths.ExistingFeatureDirChecked(root, slug)
|
|
90
|
+
if err != nil {
|
|
91
|
+
return fail(err)
|
|
92
|
+
}
|
|
93
|
+
rel := workspaceRel(root, workspace)
|
|
94
|
+
bundle := "ctx/" + bundleName(contextOpts{phase: phase, role: role, slice: slice, recheck: recheck})
|
|
95
|
+
if info, err := os.Stat(filepath.Join(workspace, filepath.FromSlash(bundle))); err != nil || !info.Mode().IsRegular() {
|
|
96
|
+
scope := recheck
|
|
97
|
+
if slice != "" {
|
|
98
|
+
scope = " --slice " + slice + recheck
|
|
99
|
+
}
|
|
100
|
+
return fail(fmt.Errorf("%s/%s is missing; run devrites-engine context %s --phase %s --role %s%s first", rel, bundle, slug, phase, role, scope))
|
|
101
|
+
}
|
|
102
|
+
candidate, partial, err := frozenCandidate(workspace, wave)
|
|
103
|
+
if err != nil {
|
|
104
|
+
return fail(err)
|
|
105
|
+
}
|
|
106
|
+
finalPhase := strings.EqualFold(phase, "review") || strings.EqualFold(phase, "seal")
|
|
107
|
+
if candidate == "" && !wright && finalPhase {
|
|
108
|
+
return fail(fmt.Errorf("a %s reviewer packet needs a frozen candidate; run devrites-engine candidate freeze %s --wave %s first", phase, slug, wave))
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
var b strings.Builder
|
|
112
|
+
fmt.Fprintf(&b, "# Packet %s: %s\n\nFeature: %s\nPhase: %s\n", wave, role, slug, phase)
|
|
113
|
+
if slice != "" {
|
|
114
|
+
fmt.Fprintf(&b, "Slice: %s\n", slice)
|
|
115
|
+
}
|
|
116
|
+
if wright {
|
|
117
|
+
b.WriteString("Isolation: same-worktree\n")
|
|
118
|
+
b.WriteString("Authority: sole writer for this slice. Edit only the Allowlist paths; never edit .devrites/**, never commit or push, and ask the user nothing.\n")
|
|
119
|
+
} else {
|
|
120
|
+
b.WriteString("Authority: read-only reviewer. Edit nothing and ask the user nothing; judge the candidate against the bundle sources.\n")
|
|
121
|
+
}
|
|
122
|
+
fmt.Fprintf(&b, "\nRead first:\n- %s/%s\n", rel, bundle)
|
|
123
|
+
if candidate != "" {
|
|
124
|
+
fmt.Fprintf(&b, "- %s/packets/%s.diff\n", rel, wave)
|
|
125
|
+
}
|
|
126
|
+
if wright {
|
|
127
|
+
raw, err := readWorkspaceArtifact(root, slug, "tasks.md")
|
|
128
|
+
if err != nil {
|
|
129
|
+
return fail(err)
|
|
130
|
+
}
|
|
131
|
+
writes, _ := sliceWritePaths(raw, ParseTaskGraph(raw))
|
|
132
|
+
if len(writes[slice]) == 0 {
|
|
133
|
+
return fail(fmt.Errorf("slice %s names no Writer allowlist or Files likely touched in tasks.md", slice))
|
|
134
|
+
}
|
|
135
|
+
b.WriteString("\nAllowlist:\n")
|
|
136
|
+
for _, p := range writes[slice] {
|
|
137
|
+
fmt.Fprintf(&b, "- %s\n", p)
|
|
138
|
+
}
|
|
139
|
+
if checks != "" {
|
|
140
|
+
lines, err := writerSafeChecks(root, slug, checks)
|
|
141
|
+
if err != nil {
|
|
142
|
+
return fail(err)
|
|
143
|
+
}
|
|
144
|
+
b.WriteString("\n" + lines)
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
if candidate != "" {
|
|
148
|
+
source := "verbatim from"
|
|
149
|
+
if partial {
|
|
150
|
+
source = "header rows verbatim; per-file rows in"
|
|
151
|
+
}
|
|
152
|
+
fmt.Fprintf(&b, "\nCandidate (%s %s/packets/%s.sha256):\n```text\n%s```\n", source, rel, wave, candidate)
|
|
153
|
+
}
|
|
154
|
+
if focus != "" {
|
|
155
|
+
rows, err := focusRows(workspace, focus)
|
|
156
|
+
if err != nil {
|
|
157
|
+
return fail(err)
|
|
158
|
+
}
|
|
159
|
+
heading := "Open findings:"
|
|
160
|
+
switch {
|
|
161
|
+
case wright:
|
|
162
|
+
heading = "Focus (defects to fix, carry-forward constraints to honor):"
|
|
163
|
+
case doubt:
|
|
164
|
+
heading = "Claim to attack:"
|
|
165
|
+
if rows == "" || strings.Count(rows, "\n") > 3 {
|
|
166
|
+
return fail(fmt.Errorf("--focus %s must hold the 1-3 row claim the doubt-reviewer attacks", focus))
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
if rows != "" {
|
|
170
|
+
b.WriteString("\n" + heading + "\n" + rows)
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
if wright {
|
|
174
|
+
b.WriteString("\nReturn: every field of your role's return block, with each Writer-safe check's command and exit status.\n")
|
|
175
|
+
} else {
|
|
176
|
+
b.WriteString("\nReturn (lines 1-2 exactly, then your role's rows):\nOutcome: <findings|no-findings|gap>\nCounts:")
|
|
177
|
+
for _, key := range countKeys(role) {
|
|
178
|
+
fmt.Fprintf(&b, " %s=<n>", key)
|
|
179
|
+
}
|
|
180
|
+
b.WriteString("\n")
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
name := wave + "." + role + ".md"
|
|
184
|
+
if wright {
|
|
185
|
+
name = wave + ".contract.md"
|
|
186
|
+
}
|
|
187
|
+
out := filepath.Join(workspace, "packets", name)
|
|
188
|
+
if err := os.MkdirAll(filepath.Dir(out), 0o755); err != nil {
|
|
189
|
+
return fail(err)
|
|
190
|
+
}
|
|
191
|
+
// Lint a sibling draft so a refused re-render keeps the packet already on disk.
|
|
192
|
+
draft := filepath.Join(workspace, "packets", "."+name+".draft")
|
|
193
|
+
if err := state.AtomicWrite(draft, []byte(b.String()), 0o600); err != nil {
|
|
194
|
+
return fail(err)
|
|
195
|
+
}
|
|
196
|
+
if err := lintRenderedPacket(root, slug, draft, role, wright, finalPhase); err != nil {
|
|
197
|
+
_ = os.Remove(draft)
|
|
198
|
+
return fail(fmt.Errorf("BLOCKED: %w", err))
|
|
199
|
+
}
|
|
200
|
+
if err := os.Rename(draft, out); err != nil {
|
|
201
|
+
_ = os.Remove(draft)
|
|
202
|
+
return fail(err)
|
|
203
|
+
}
|
|
204
|
+
fmt.Fprintf(stdout, "packet: %s/packets/%s (%s, %d bytes)\n", rel, name, role, b.Len())
|
|
205
|
+
return 0
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
// lintRenderedPacket runs the lints dispatch open runs for the role; a wright
|
|
209
|
+
// contract also gets the gates.md `RUN: writer` precheck lint.
|
|
210
|
+
func lintRenderedPacket(root, slug, path, role string, wright, finalPhase bool) error {
|
|
211
|
+
if wright {
|
|
212
|
+
return lintWrightContractFor(root, slug, path)
|
|
213
|
+
}
|
|
214
|
+
if err := lintReviewerWavePacket(path, []string{role}); err != nil {
|
|
215
|
+
return err
|
|
216
|
+
}
|
|
217
|
+
if finalPhase {
|
|
218
|
+
return lintReviewCandidate(root, slug, path)
|
|
219
|
+
}
|
|
220
|
+
return nil
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
// frozenCandidate returns packets/<wave>.sha256 when candidate freeze wrote
|
|
224
|
+
// both it and a non-empty diff, or "" when the wave has no frozen candidate.
|
|
225
|
+
// partial reports that only the header rows were kept: the per-file rows of a
|
|
226
|
+
// large candidate would push the packet past the dispatch lints' read bound.
|
|
227
|
+
func frozenCandidate(workspace, wave string) (sums string, partial bool, err error) {
|
|
228
|
+
raw, err := readBoundedRegularFile(filepath.Join(workspace, "packets", wave+".sha256"), workspaceArtifactLimit)
|
|
229
|
+
if errors.Is(err, os.ErrNotExist) {
|
|
230
|
+
return "", false, nil
|
|
231
|
+
}
|
|
232
|
+
if err != nil {
|
|
233
|
+
return "", false, fmt.Errorf("packets/%s.sha256: %w", wave, err)
|
|
234
|
+
}
|
|
235
|
+
if info, err := os.Stat(filepath.Join(workspace, "packets", wave+".diff")); err != nil || !info.Mode().IsRegular() || info.Size() == 0 {
|
|
236
|
+
return "", false, fmt.Errorf("packets/%s.sha256 has no non-empty packets/%s.diff beside it; rerun candidate freeze under a new wave", wave, wave)
|
|
237
|
+
}
|
|
238
|
+
if len(raw) <= maxContractBytes/2 {
|
|
239
|
+
return string(raw), false, nil
|
|
240
|
+
}
|
|
241
|
+
var head strings.Builder
|
|
242
|
+
for _, line := range strings.SplitAfter(string(raw), "\n") {
|
|
243
|
+
if !strings.HasPrefix(line, "file ") {
|
|
244
|
+
head.WriteString(line)
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
return head.String(), true, nil
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
// writerSafeChecks resolves each named gates.md gate to its CHECK, refusing an
|
|
251
|
+
// unknown gate or a CHECK no approved test-plan.md preflight row vets, and adds
|
|
252
|
+
// `gates precheck` when the ledger marks a gate `RUN: writer`.
|
|
253
|
+
func writerSafeChecks(root, slug, ids string) (string, error) {
|
|
254
|
+
ledger, err := readWorkspaceArtifact(root, slug, acceptance.GatesFile)
|
|
255
|
+
if err != nil {
|
|
256
|
+
return "", fmt.Errorf("--checks: %w", err)
|
|
257
|
+
}
|
|
258
|
+
plan, err := readWorkspaceArtifact(root, slug, "test-plan.md")
|
|
259
|
+
if err != nil {
|
|
260
|
+
return "", fmt.Errorf("--checks: %w", err)
|
|
261
|
+
}
|
|
262
|
+
doc := acceptance.ParseLedger(string(ledger))
|
|
263
|
+
approved := acceptance.ApprovedCommands(plan)
|
|
264
|
+
var names []string
|
|
265
|
+
var rows strings.Builder
|
|
266
|
+
for _, id := range strings.Split(ids, ",") {
|
|
267
|
+
id = strings.TrimSpace(id)
|
|
268
|
+
var gate *acceptance.Gate
|
|
269
|
+
for _, g := range doc.Gates {
|
|
270
|
+
if g.ID == id {
|
|
271
|
+
gate = g
|
|
272
|
+
break
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
switch {
|
|
276
|
+
case gate == nil:
|
|
277
|
+
return "", fmt.Errorf("--checks: gate %q is not in %s", id, acceptance.GatesFile)
|
|
278
|
+
case gate.Check == "":
|
|
279
|
+
return "", fmt.Errorf("--checks: gate %s has no CHECK", id)
|
|
280
|
+
case !acceptance.Approved(gate.Check, gate.Cwd, approved):
|
|
281
|
+
return "", fmt.Errorf("--checks: gate %s CHECK is not an approved test-plan.md Build-entry preflight row", id)
|
|
282
|
+
}
|
|
283
|
+
names = append(names, id)
|
|
284
|
+
cwd := gate.Cwd
|
|
285
|
+
if cwd == "" {
|
|
286
|
+
cwd = "repository root"
|
|
287
|
+
}
|
|
288
|
+
fmt.Fprintf(&rows, "- %s (cwd %s): `%s`\n", id, cwd, gate.Check)
|
|
289
|
+
}
|
|
290
|
+
if len(doc.WriterGates()) > 0 {
|
|
291
|
+
fmt.Fprintf(&rows, "- gates precheck (cwd repository root): `devrites-engine gates precheck %s --worktree .`\n", slug)
|
|
292
|
+
}
|
|
293
|
+
return "Writer-safe checks: " + strings.Join(names, ", ") + "\n" + rows.String(), nil
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
// focusRows reads the --focus file (relative to the workspace) and returns its
|
|
297
|
+
// open-finding rows, refusing any non-blank line of another shape.
|
|
298
|
+
func focusRows(workspace, focus string) (string, error) {
|
|
299
|
+
path := focus
|
|
300
|
+
if !filepath.IsAbs(path) {
|
|
301
|
+
path = filepath.Join(workspace, filepath.FromSlash(focus))
|
|
302
|
+
}
|
|
303
|
+
raw, err := readBoundedRegularFile(path, maxContractBytes)
|
|
304
|
+
if err != nil {
|
|
305
|
+
return "", fmt.Errorf("--focus %s: %w", focus, err)
|
|
306
|
+
}
|
|
307
|
+
var rows strings.Builder
|
|
308
|
+
for i, line := range strings.Split(string(raw), "\n") {
|
|
309
|
+
line = strings.TrimRight(line, "\r")
|
|
310
|
+
if strings.TrimSpace(line) == "" {
|
|
311
|
+
continue
|
|
312
|
+
}
|
|
313
|
+
if !focusRowRE.MatchString(line) {
|
|
314
|
+
return "", fmt.Errorf("--focus %s:%d is not an open-finding row \"- <finding-ID> <path:line> <text up to 240 characters>\"; a packet carries open findings only, never narrative or outcomes", focus, i+1)
|
|
315
|
+
}
|
|
316
|
+
rows.WriteString(line + "\n")
|
|
317
|
+
}
|
|
318
|
+
return rows.String(), nil
|
|
319
|
+
}
|
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
package lib
|
|
2
|
+
|
|
3
|
+
import (
|
|
4
|
+
"crypto/sha256"
|
|
5
|
+
"errors"
|
|
6
|
+
"fmt"
|
|
7
|
+
"io"
|
|
8
|
+
"os"
|
|
9
|
+
"path/filepath"
|
|
10
|
+
"regexp"
|
|
11
|
+
"sort"
|
|
12
|
+
"strings"
|
|
13
|
+
|
|
14
|
+
"github.com/devrites/devrites/internal/devritespaths"
|
|
15
|
+
"github.com/devrites/devrites/internal/state"
|
|
16
|
+
)
|
|
17
|
+
|
|
18
|
+
// CandidateFreezeUsage is the help and usage-error text for `candidate freeze`.
|
|
19
|
+
const CandidateFreezeUsage = `usage: devrites-engine candidate freeze <slug> --wave <w> (--slice <SLICE-ID> | --paths <path>...) [--base <ref>]
|
|
20
|
+
|
|
21
|
+
Freezes one review candidate. It writes packets/<w>.diff (the path set's
|
|
22
|
+
tracked changes against --base, default HEAD, plus each untracked file as a
|
|
23
|
+
/dev/null diff) and packets/<w>.sha256 (base commit, diff digest, per-file
|
|
24
|
+
sha256, and the aggregate candidate digest under the check candidate domain
|
|
25
|
+
and bounds). --slice takes that slice's Writer allowlist (else Files likely
|
|
26
|
+
touched) from tasks.md. A wave's frozen candidate is never replaced by a
|
|
27
|
+
different one; freeze a changed candidate under a new wave.
|
|
28
|
+
`
|
|
29
|
+
|
|
30
|
+
// packetNameRE bounds a wave, role, phase, or slice used in a packets/ or
|
|
31
|
+
// ctx/ file name: one path component, no traversal.
|
|
32
|
+
var packetNameRE = regexp.MustCompile(`^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$`)
|
|
33
|
+
|
|
34
|
+
// RunCandidateFreeze implements `candidate freeze`: the producer of the frozen
|
|
35
|
+
// .diff a Review or Seal reviewer packet must name.
|
|
36
|
+
func RunCandidateFreeze(root string, args []string, stdout, stderr io.Writer) int {
|
|
37
|
+
var wave, slice, base string
|
|
38
|
+
var paths, positional []string
|
|
39
|
+
for i := 0; i < len(args); i++ {
|
|
40
|
+
value := argAt(args, i+1)
|
|
41
|
+
switch args[i] {
|
|
42
|
+
case "--wave":
|
|
43
|
+
wave = value
|
|
44
|
+
case "--slice":
|
|
45
|
+
slice = value
|
|
46
|
+
case "--base":
|
|
47
|
+
base = value
|
|
48
|
+
case "--paths":
|
|
49
|
+
for i+1 < len(args) && !strings.HasPrefix(args[i+1], "-") {
|
|
50
|
+
i++
|
|
51
|
+
paths = append(paths, args[i])
|
|
52
|
+
}
|
|
53
|
+
continue
|
|
54
|
+
default:
|
|
55
|
+
if strings.HasPrefix(args[i], "-") {
|
|
56
|
+
fmt.Fprintf(stderr, "candidate freeze: unknown flag %q\n", args[i])
|
|
57
|
+
return 2
|
|
58
|
+
}
|
|
59
|
+
positional = append(positional, args[i])
|
|
60
|
+
continue
|
|
61
|
+
}
|
|
62
|
+
i++
|
|
63
|
+
}
|
|
64
|
+
if len(positional) != 1 || !packetNameRE.MatchString(wave) || (slice == "") == (len(paths) == 0) {
|
|
65
|
+
fmt.Fprint(stderr, CandidateFreezeUsage)
|
|
66
|
+
return 2
|
|
67
|
+
}
|
|
68
|
+
slug := positional[0]
|
|
69
|
+
fail := func(err error) int {
|
|
70
|
+
fmt.Fprintf(stderr, "candidate freeze: %v\n", err)
|
|
71
|
+
return 3
|
|
72
|
+
}
|
|
73
|
+
workspace, err := devritespaths.ExistingFeatureDirChecked(root, slug)
|
|
74
|
+
if err != nil {
|
|
75
|
+
return fail(err)
|
|
76
|
+
}
|
|
77
|
+
if slice != "" {
|
|
78
|
+
raw, err := readWorkspaceArtifact(root, slug, "tasks.md")
|
|
79
|
+
if err != nil {
|
|
80
|
+
return fail(err)
|
|
81
|
+
}
|
|
82
|
+
writes, _ := sliceWritePaths(raw, ParseTaskGraph(raw))
|
|
83
|
+
if paths = writes[slice]; len(paths) == 0 {
|
|
84
|
+
return fail(fmt.Errorf("slice %s names no Writer allowlist or Files likely touched in tasks.md", slice))
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
project := projectDir(root)
|
|
88
|
+
rows, err := freezeRows(project, paths)
|
|
89
|
+
if err != nil {
|
|
90
|
+
return fail(err)
|
|
91
|
+
}
|
|
92
|
+
if err := validateCandidateRows(project, rows); err != nil {
|
|
93
|
+
return fail(err)
|
|
94
|
+
}
|
|
95
|
+
diff, baseCommit, err := freezeDiff(project, base, rows)
|
|
96
|
+
if err != nil {
|
|
97
|
+
return fail(err)
|
|
98
|
+
}
|
|
99
|
+
if len(diff) == 0 {
|
|
100
|
+
return fail(errors.New("the path set has no change against the base; there is no candidate to freeze"))
|
|
101
|
+
}
|
|
102
|
+
digest, err := hashCandidate(project, rows)
|
|
103
|
+
if err != nil {
|
|
104
|
+
return fail(err)
|
|
105
|
+
}
|
|
106
|
+
var sums strings.Builder
|
|
107
|
+
fmt.Fprintf(&sums, "%s %s\nbase %s\ndiff %x packets/%s.diff\n", candidateDigestDomain, candidateDigestVersion, baseCommit, sha256.Sum256(diff), wave)
|
|
108
|
+
for _, row := range rows {
|
|
109
|
+
if row.state != "present" {
|
|
110
|
+
fmt.Fprintf(&sums, "file absent %s\n", row.path)
|
|
111
|
+
continue
|
|
112
|
+
}
|
|
113
|
+
file := sha256.New()
|
|
114
|
+
if err := hashCandidateFile(file, project, row); err != nil {
|
|
115
|
+
return fail(fmt.Errorf("candidate %q: %w", row.path, err))
|
|
116
|
+
}
|
|
117
|
+
fmt.Fprintf(&sums, "file %x %s\n", file.Sum(nil), row.path)
|
|
118
|
+
}
|
|
119
|
+
fmt.Fprintf(&sums, "aggregate %s\n", digest)
|
|
120
|
+
|
|
121
|
+
dir := filepath.Join(workspace, "packets")
|
|
122
|
+
diffPath, sumPath := filepath.Join(dir, wave+".diff"), filepath.Join(dir, wave+".sha256")
|
|
123
|
+
if prev, err := readBoundedRegularFile(sumPath, workspaceArtifactLimit); err == nil && string(prev) != sums.String() {
|
|
124
|
+
return fail(fmt.Errorf("packets/%s.sha256 already freezes a different candidate; a frozen candidate is never replaced, so freeze this one under a new wave", wave))
|
|
125
|
+
} else if err != nil && !errors.Is(err, os.ErrNotExist) {
|
|
126
|
+
return fail(err)
|
|
127
|
+
}
|
|
128
|
+
if err := os.MkdirAll(dir, 0o755); err != nil {
|
|
129
|
+
return fail(err)
|
|
130
|
+
}
|
|
131
|
+
if err := state.AtomicWrite(diffPath, diff, 0o600); err != nil {
|
|
132
|
+
return fail(err)
|
|
133
|
+
}
|
|
134
|
+
if err := state.AtomicWrite(sumPath, []byte(sums.String()), 0o600); err != nil {
|
|
135
|
+
return fail(err)
|
|
136
|
+
}
|
|
137
|
+
rel := workspaceRel(root, workspace)
|
|
138
|
+
fmt.Fprintf(stdout, "candidate: %s (%d paths, base %s)\ndiff: %s/packets/%s.diff\nsha256: %s/packets/%s.sha256\n", digest, len(rows), baseCommit, rel, wave, rel, wave)
|
|
139
|
+
return 0
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
// freezeRows normalizes, deduplicates, and sorts the path set, marking each
|
|
143
|
+
// row present or deleted (absent) as hashCandidate expects.
|
|
144
|
+
func freezeRows(project string, paths []string) ([]candidateRow, error) {
|
|
145
|
+
seen := map[string]bool{}
|
|
146
|
+
var rows []candidateRow
|
|
147
|
+
for _, p := range paths {
|
|
148
|
+
name, err := normalizeCandidatePath(p)
|
|
149
|
+
if err != nil {
|
|
150
|
+
return nil, fmt.Errorf("path %q: %w", p, err)
|
|
151
|
+
}
|
|
152
|
+
if seen[name] {
|
|
153
|
+
continue
|
|
154
|
+
}
|
|
155
|
+
seen[name] = true
|
|
156
|
+
_, exists, err := candidatePathInfo(project, name)
|
|
157
|
+
if err != nil {
|
|
158
|
+
return nil, fmt.Errorf("candidate %q: %w", name, err)
|
|
159
|
+
}
|
|
160
|
+
row := candidateRow{state: "deleted", path: name}
|
|
161
|
+
if exists {
|
|
162
|
+
row.state = "present"
|
|
163
|
+
}
|
|
164
|
+
rows = append(rows, row)
|
|
165
|
+
}
|
|
166
|
+
if len(rows) > maxCandidateRows {
|
|
167
|
+
return nil, errors.New("path set exceeds 4096 rows")
|
|
168
|
+
}
|
|
169
|
+
sort.Slice(rows, func(i, j int) bool { return rows[i].path < rows[j].path })
|
|
170
|
+
return rows, nil
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
// freezeDiff renders the path set's tracked changes against base, then each
|
|
174
|
+
// untracked file as a /dev/null diff, with fixed prefixes so git apply takes it
|
|
175
|
+
// whatever the user's diff config.
|
|
176
|
+
func freezeDiff(project, base string, rows []candidateRow) ([]byte, string, error) {
|
|
177
|
+
if base == "" {
|
|
178
|
+
base = "HEAD"
|
|
179
|
+
}
|
|
180
|
+
if strings.HasPrefix(base, "-") {
|
|
181
|
+
return nil, "", fmt.Errorf("--base %q is not a revision", base)
|
|
182
|
+
}
|
|
183
|
+
out, err := runGitCommand(project, nil, "rev-parse", "--verify", "--quiet", base+"^{commit}")
|
|
184
|
+
if err != nil {
|
|
185
|
+
return nil, "", fmt.Errorf("--base %q is not a commit: %w", base, err)
|
|
186
|
+
}
|
|
187
|
+
commit := strings.TrimSpace(string(out))
|
|
188
|
+
names := make([]string, len(rows))
|
|
189
|
+
for i, row := range rows {
|
|
190
|
+
names[i] = row.path
|
|
191
|
+
}
|
|
192
|
+
flags := []string{"--binary", "--no-color", "--no-ext-diff", "--no-textconv", "--no-renames", "--src-prefix=a/", "--dst-prefix=b/"}
|
|
193
|
+
diff, err := runGitCommand(project, nil, append(append(append([]string{"--literal-pathspecs", "diff"}, flags...), "--relative", commit, "--"), names...)...)
|
|
194
|
+
if err != nil {
|
|
195
|
+
return nil, "", err
|
|
196
|
+
}
|
|
197
|
+
diff = append([]byte(nil), diff...)
|
|
198
|
+
untracked, err := runGitCommand(project, nil, append([]string{"--literal-pathspecs", "ls-files", "--others", "-z", "--"}, names...)...)
|
|
199
|
+
if err != nil {
|
|
200
|
+
return nil, "", err
|
|
201
|
+
}
|
|
202
|
+
for _, name := range strings.Split(string(untracked), "\x00") {
|
|
203
|
+
if name == "" {
|
|
204
|
+
continue
|
|
205
|
+
}
|
|
206
|
+
var part cappedGitOutput
|
|
207
|
+
_, err := runGitCommandIO(project, nil, nil, &part, append(append([]string{"diff", "--no-index"}, flags...), "--", "/dev/null", name)...)
|
|
208
|
+
var gitErr *gitCommandError
|
|
209
|
+
if err != nil && !(errors.As(err, &gitErr) && gitErr.exitCode == 1) {
|
|
210
|
+
return nil, "", err // --no-index exits 1 when the files differ
|
|
211
|
+
}
|
|
212
|
+
if part.truncated || len(diff)+part.Len() > gitOutputLimit {
|
|
213
|
+
return nil, "", errors.New("candidate diff exceeds the git output limit")
|
|
214
|
+
}
|
|
215
|
+
diff = append(diff, part.Bytes()...)
|
|
216
|
+
}
|
|
217
|
+
return diff, commit, nil
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
// workspaceRel is the feature workspace as a slash path relative to the
|
|
221
|
+
// project, the form packets hand agents; it falls back to the absolute path.
|
|
222
|
+
func workspaceRel(root, workspace string) string {
|
|
223
|
+
if rel, err := filepath.Rel(projectDir(root), workspace); err == nil {
|
|
224
|
+
return filepath.ToSlash(rel)
|
|
225
|
+
}
|
|
226
|
+
return filepath.ToSlash(workspace)
|
|
227
|
+
}
|