devrites 6.10.0 → 7.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +19 -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 +21 -19
- package/docs/engine/commands.md +22 -15
- package/docs/usage.md +3 -3
- 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 +49 -13
- package/engine/internal/gate/preconditions.go +121 -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 +48 -33
- 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/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 +5 -4
- 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/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 +1 -1
- 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 +8 -4
- 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/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 +5 -4
- 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/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 +1 -1
- 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 +8 -4
- 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/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 +5 -4
- 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/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 +1 -1
- 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 +8 -4
- 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/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 +5 -4
- 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/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 +1 -1
- 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 +8 -4
- 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/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/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 +5 -4
- 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/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 +1 -1
- 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 +8 -4
- 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/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/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 +5 -4
- 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/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 +1 -1
- 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 +8 -4
- 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
|
+
}
|