devrites 6.10.0 → 7.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +29 -0
- package/README.md +8 -4
- package/SECURITY.md +1 -1
- package/docs/adr/0038-engine-flags-unattributed-root-edits.md +67 -0
- package/docs/adr/README.md +2 -1
- package/docs/cli.md +19 -6
- package/docs/command-map.md +22 -20
- package/docs/engine/commands.md +22 -15
- package/docs/usage.md +10 -5
- package/engine/commands.go +8 -3
- package/engine/help.go +43 -16
- package/engine/internal/acceptance/approve.go +46 -7
- package/engine/internal/acceptance/cli.go +102 -0
- package/engine/internal/acceptance/exec.go +8 -6
- package/engine/internal/acceptance/ledger.go +16 -1
- package/engine/internal/acceptance/lint.go +9 -1
- package/engine/internal/acceptance/preconditions.go +201 -0
- package/engine/internal/anchor/anchor.go +76 -0
- package/engine/internal/gate/drivers.go +144 -0
- package/engine/internal/gate/gate.go +56 -13
- package/engine/internal/gate/preconditions.go +121 -0
- package/engine/internal/gate/predecessor.go +67 -0
- package/engine/internal/lib/anchors.go +270 -0
- package/engine/internal/lib/apply_bundle.go +2 -1
- package/engine/internal/lib/candidate.go +17 -8
- package/engine/internal/lib/claims.go +104 -39
- package/engine/internal/lib/context.go +337 -22
- package/engine/internal/lib/diffscope.go +201 -12
- package/engine/internal/lib/dispatch.go +393 -21
- package/engine/internal/lib/dispatch_contract.go +82 -2
- package/engine/internal/lib/dispatch_packet.go +224 -8
- package/engine/internal/lib/environment_report.go +2 -3
- package/engine/internal/lib/handoff.go +33 -3
- package/engine/internal/lib/metrics.go +119 -11
- package/engine/internal/lib/next.go +45 -5
- package/engine/internal/lib/observe_summary.go +2 -4
- package/engine/internal/lib/packet.go +319 -0
- package/engine/internal/lib/packet_freeze.go +227 -0
- package/engine/internal/lib/perturb.go +403 -0
- package/engine/internal/lib/questions_lint.go +99 -0
- package/engine/internal/lib/state_edit.go +396 -0
- package/engine/internal/lib/taskgraph.go +166 -0
- package/engine/internal/lib/treebaseline.go +331 -0
- package/engine/internal/lib/triggers.go +19 -0
- package/engine/internal/lib/windows.go +110 -5
- package/engine/internal/overhaul/admit/run.go +7 -30
- package/engine/internal/parallel/cli.go +27 -33
- package/engine/internal/parallel/git.go +10 -0
- package/engine/internal/parallel/select.go +36 -0
- package/engine/internal/state/budgets.go +60 -13
- package/engine/internal/state/observation.go +1 -1
- package/engine/main.go +61 -14
- package/pack/.claude/agents/devrites-code-reviewer.md +9 -5
- package/pack/.claude/agents/devrites-devex-reviewer.md +5 -4
- package/pack/.claude/agents/devrites-doubt-reviewer.md +4 -4
- package/pack/.claude/agents/devrites-evidence-scout.md +3 -2
- package/pack/.claude/agents/devrites-frontend-reviewer.md +5 -4
- package/pack/.claude/agents/devrites-performance-reviewer.md +5 -5
- package/pack/.claude/agents/devrites-plan-drafter.md +4 -2
- package/pack/.claude/agents/devrites-plan-reviewer.md +5 -5
- package/pack/.claude/agents/devrites-proof-runner.md +1 -1
- package/pack/.claude/agents/devrites-retrospector.md +1 -1
- package/pack/.claude/agents/devrites-security-auditor.md +4 -4
- package/pack/.claude/agents/devrites-simplifier-reviewer.md +5 -4
- package/pack/.claude/agents/devrites-slice-wright.md +18 -9
- package/pack/.claude/agents/devrites-spec-reviewer.md +4 -4
- package/pack/.claude/agents/devrites-strategy-reviewer.md +5 -6
- package/pack/.claude/agents/devrites-test-analyst.md +7 -4
- package/pack/.claude/agents/devrites-upgrade-planner.md +1 -1
- package/pack/.claude/agents/fast-builder.md +4 -2
- package/pack/.claude/agents/fast-checker.md +3 -2
- package/pack/.claude/agents/fast-critic.md +3 -2
- package/pack/.claude/agents/fast-planner.md +3 -3
- package/pack/.claude/agents/overhaul-recon.md +5 -4
- package/pack/.claude/settings.json +19 -7
- package/pack/.claude/skills/devrites-api-interface/SKILL.md +1 -1
- package/pack/.claude/skills/devrites-audit/SKILL.md +1 -1
- package/pack/.claude/skills/devrites-debug-recovery/SKILL.md +1 -1
- package/pack/.claude/skills/devrites-doubt/SKILL.md +5 -5
- package/pack/.claude/skills/devrites-frontend-craft/reference/reuse-first.md +3 -3
- package/pack/.claude/skills/devrites-interview/SKILL.md +1 -1
- package/pack/.claude/skills/devrites-lib/SKILL.md +11 -6
- package/pack/.claude/skills/devrites-lib/reference/orchestration-profiles.md +2 -0
- package/pack/.claude/skills/devrites-lib/reference/parallel-dispatch.md +25 -14
- package/pack/.claude/skills/devrites-lib/reference/standards/README.md +2 -1
- package/pack/.claude/skills/devrites-lib/reference/standards/afk-hitl.md +11 -3
- package/pack/.claude/skills/devrites-lib/reference/standards/agents.md +43 -19
- package/pack/.claude/skills/devrites-lib/reference/standards/architecture-health.md +1 -1
- package/pack/.claude/skills/devrites-lib/reference/standards/code-index.md +111 -0
- package/pack/.claude/skills/devrites-lib/reference/standards/code-navigation.md +13 -63
- package/pack/.claude/skills/devrites-lib/reference/standards/context-hygiene.md +8 -9
- package/pack/.claude/skills/devrites-lib/reference/standards/core.md +14 -1
- package/pack/.claude/skills/devrites-lib/reference/standards/deprecation.md +1 -1
- package/pack/.claude/skills/devrites-lib/reference/standards/gates.md +10 -1
- package/pack/.claude/skills/devrites-lib/reference/standards/performance.md +14 -0
- package/pack/.claude/skills/devrites-lib/reference/standards/security.md +4 -0
- package/pack/.claude/skills/devrites-lib/reference/standards/testing.md +3 -1
- package/pack/.claude/skills/devrites-lib/reference/standards/tooling.md +9 -8
- package/pack/.claude/skills/devrites-lib/reference/standards/windows.md +3 -2
- package/pack/.claude/skills/devrites-lib/reference/standards/workflow-artifacts.md +2 -0
- package/pack/.claude/skills/devrites-lib/reference/workspace-artifact-schema.md +16 -16
- package/pack/.claude/skills/devrites-ux-shape/SKILL.md +1 -1
- package/pack/.claude/skills/overhaul/references/orchestration.md +3 -2
- package/pack/.claude/skills/rite/SKILL.md +1 -1
- package/pack/.claude/skills/rite-adopt/SKILL.md +1 -1
- package/pack/.claude/skills/rite-adopt/reference/adoption.md +1 -1
- package/pack/.claude/skills/rite-autocomplete/SKILL.md +11 -6
- package/pack/.claude/skills/rite-autocomplete/reference/lookahead.md +50 -0
- package/pack/.claude/skills/rite-autocomplete/reference/loop.md +7 -0
- package/pack/.claude/skills/rite-build/SKILL.md +4 -3
- package/pack/.claude/skills/rite-build/reference/afk-discipline.md +2 -0
- package/pack/.claude/skills/rite-build/reference/checkpoint-protocol.md +4 -1
- package/pack/.claude/skills/rite-build/reference/checkpoint.md +2 -0
- package/pack/.claude/skills/rite-build/reference/one-slice-cycle.md +1 -1
- package/pack/.claude/skills/rite-build/reference/output.md +2 -0
- package/pack/.claude/skills/rite-build/reference/parallel-batch.md +22 -12
- package/pack/.claude/skills/rite-build/reference/phase-contract.md +13 -3
- package/pack/.claude/skills/rite-build/reference/spec-drift-guard.md +4 -0
- package/pack/.claude/skills/rite-build/reference/wright-dispatch.md +42 -25
- package/pack/.claude/skills/rite-clarify/SKILL.md +1 -1
- package/pack/.claude/skills/rite-converge/SKILL.md +4 -4
- package/pack/.claude/skills/rite-converge/reference/convergence-assessment.md +3 -3
- package/pack/.claude/skills/rite-define/SKILL.md +10 -5
- package/pack/.claude/skills/rite-doctor/SKILL.md +17 -2
- package/pack/.claude/skills/rite-dogfood/SKILL.md +1 -1
- package/pack/.claude/skills/rite-explain/SKILL.md +1 -1
- package/pack/.claude/skills/rite-explain/reference/intake.md +1 -1
- package/pack/.claude/skills/rite-fast/SKILL.md +1 -1
- package/pack/.claude/skills/rite-handoff/SKILL.md +3 -3
- package/pack/.claude/skills/rite-handoff/reference/handoff-template.md +1 -1
- package/pack/.claude/skills/rite-plan/SKILL.md +4 -4
- package/pack/.claude/skills/rite-plan/reference/slicing.md +3 -2
- package/pack/.claude/skills/rite-polish/SKILL.md +6 -3
- package/pack/.claude/skills/rite-prove/SKILL.md +1 -1
- package/pack/.claude/skills/rite-quick/SKILL.md +1 -1
- package/pack/.claude/skills/rite-resolve/SKILL.md +1 -1
- package/pack/.claude/skills/rite-review/SKILL.md +4 -4
- package/pack/.claude/skills/rite-seal/SKILL.md +2 -2
- package/pack/.claude/skills/rite-ship/SKILL.md +1 -1
- package/pack/.claude/skills/rite-spec/SKILL.md +3 -2
- package/pack/.claude/skills/rite-spec/reference/investigation.md +5 -5
- package/pack/.claude/skills/rite-spec/reference/spec-template.md +1 -1
- package/pack/.claude/skills/rite-spec/reference/state-workspace.md +6 -4
- package/pack/.claude/skills/rite-status/SKILL.md +1 -1
- package/pack/.claude/skills/rite-temper/SKILL.md +1 -1
- package/pack/.claude/skills/rite-temper/reference/review-dimensions.md +2 -2
- package/pack/.claude/skills/rite-temper/reference/scope-modes.md +2 -2
- package/pack/.claude/skills/rite-temper/reference/significance.md +2 -2
- package/pack/.claude/skills/rite-vet/SKILL.md +11 -5
- package/pack/.claude/skills/rite-vet/reference/artifacts.md +10 -3
- package/pack/.claude/skills/rite-vet/reference/depth.md +2 -2
- package/pack/.claude/skills/rite-vet/reference/review-axes.md +2 -2
- package/pack/.claude/skills/rite-zoom-out/SKILL.md +6 -6
- package/pack/generated/claude/agents/devrites-code-reviewer.md +9 -5
- package/pack/generated/claude/agents/devrites-devex-reviewer.md +5 -4
- package/pack/generated/claude/agents/devrites-doubt-reviewer.md +4 -4
- package/pack/generated/claude/agents/devrites-evidence-scout.md +3 -2
- package/pack/generated/claude/agents/devrites-frontend-reviewer.md +5 -4
- package/pack/generated/claude/agents/devrites-performance-reviewer.md +5 -5
- package/pack/generated/claude/agents/devrites-plan-drafter.md +4 -2
- package/pack/generated/claude/agents/devrites-plan-reviewer.md +5 -5
- package/pack/generated/claude/agents/devrites-proof-runner.md +1 -1
- package/pack/generated/claude/agents/devrites-retrospector.md +1 -1
- package/pack/generated/claude/agents/devrites-security-auditor.md +4 -4
- package/pack/generated/claude/agents/devrites-simplifier-reviewer.md +5 -4
- package/pack/generated/claude/agents/devrites-slice-wright.md +18 -9
- package/pack/generated/claude/agents/devrites-spec-reviewer.md +4 -4
- package/pack/generated/claude/agents/devrites-strategy-reviewer.md +5 -6
- package/pack/generated/claude/agents/devrites-test-analyst.md +7 -4
- package/pack/generated/claude/agents/devrites-upgrade-planner.md +1 -1
- package/pack/generated/claude/agents/fast-builder.md +4 -2
- package/pack/generated/claude/agents/fast-checker.md +3 -2
- package/pack/generated/claude/agents/fast-critic.md +3 -2
- package/pack/generated/claude/agents/fast-planner.md +3 -3
- package/pack/generated/claude/agents/overhaul-recon.md +5 -4
- package/pack/generated/claude/settings.json +19 -7
- package/pack/generated/claude/skills/devrites-api-interface/SKILL.md +1 -1
- package/pack/generated/claude/skills/devrites-audit/SKILL.md +1 -1
- package/pack/generated/claude/skills/devrites-debug-recovery/SKILL.md +1 -1
- package/pack/generated/claude/skills/devrites-doubt/SKILL.md +5 -5
- package/pack/generated/claude/skills/devrites-frontend-craft/reference/reuse-first.md +3 -3
- package/pack/generated/claude/skills/devrites-interview/SKILL.md +1 -1
- package/pack/generated/claude/skills/devrites-lib/SKILL.md +11 -6
- package/pack/generated/claude/skills/devrites-lib/reference/orchestration-profiles.md +2 -0
- package/pack/generated/claude/skills/devrites-lib/reference/parallel-dispatch.md +25 -14
- package/pack/generated/claude/skills/devrites-lib/reference/standards/README.md +2 -1
- package/pack/generated/claude/skills/devrites-lib/reference/standards/afk-hitl.md +11 -3
- package/pack/generated/claude/skills/devrites-lib/reference/standards/agents.md +43 -19
- package/pack/generated/claude/skills/devrites-lib/reference/standards/architecture-health.md +1 -1
- package/pack/generated/claude/skills/devrites-lib/reference/standards/code-index.md +111 -0
- package/pack/generated/claude/skills/devrites-lib/reference/standards/code-navigation.md +13 -63
- package/pack/generated/claude/skills/devrites-lib/reference/standards/context-hygiene.md +8 -9
- package/pack/generated/claude/skills/devrites-lib/reference/standards/core.md +14 -1
- package/pack/generated/claude/skills/devrites-lib/reference/standards/deprecation.md +1 -1
- package/pack/generated/claude/skills/devrites-lib/reference/standards/gates.md +10 -1
- package/pack/generated/claude/skills/devrites-lib/reference/standards/performance.md +14 -0
- package/pack/generated/claude/skills/devrites-lib/reference/standards/security.md +4 -0
- package/pack/generated/claude/skills/devrites-lib/reference/standards/testing.md +3 -1
- package/pack/generated/claude/skills/devrites-lib/reference/standards/tooling.md +9 -8
- package/pack/generated/claude/skills/devrites-lib/reference/standards/windows.md +3 -2
- package/pack/generated/claude/skills/devrites-lib/reference/standards/workflow-artifacts.md +2 -0
- package/pack/generated/claude/skills/devrites-lib/reference/workspace-artifact-schema.md +16 -16
- package/pack/generated/claude/skills/devrites-ux-shape/SKILL.md +1 -1
- package/pack/generated/claude/skills/overhaul/references/orchestration.md +3 -2
- package/pack/generated/claude/skills/rite/SKILL.md +1 -1
- package/pack/generated/claude/skills/rite-adopt/SKILL.md +1 -1
- package/pack/generated/claude/skills/rite-adopt/reference/adoption.md +1 -1
- package/pack/generated/claude/skills/rite-autocomplete/SKILL.md +11 -6
- package/pack/generated/claude/skills/rite-autocomplete/reference/lookahead.md +50 -0
- package/pack/generated/claude/skills/rite-autocomplete/reference/loop.md +7 -0
- package/pack/generated/claude/skills/rite-build/SKILL.md +4 -3
- package/pack/generated/claude/skills/rite-build/reference/afk-discipline.md +2 -0
- package/pack/generated/claude/skills/rite-build/reference/checkpoint-protocol.md +4 -1
- package/pack/generated/claude/skills/rite-build/reference/checkpoint.md +2 -0
- package/pack/generated/claude/skills/rite-build/reference/one-slice-cycle.md +1 -1
- package/pack/generated/claude/skills/rite-build/reference/output.md +2 -0
- package/pack/generated/claude/skills/rite-build/reference/parallel-batch.md +22 -12
- package/pack/generated/claude/skills/rite-build/reference/phase-contract.md +13 -3
- package/pack/generated/claude/skills/rite-build/reference/spec-drift-guard.md +4 -0
- package/pack/generated/claude/skills/rite-build/reference/wright-dispatch.md +42 -25
- package/pack/generated/claude/skills/rite-clarify/SKILL.md +1 -1
- package/pack/generated/claude/skills/rite-converge/SKILL.md +4 -4
- package/pack/generated/claude/skills/rite-converge/reference/convergence-assessment.md +3 -3
- package/pack/generated/claude/skills/rite-define/SKILL.md +10 -5
- package/pack/generated/claude/skills/rite-doctor/SKILL.md +17 -2
- package/pack/generated/claude/skills/rite-dogfood/SKILL.md +1 -1
- package/pack/generated/claude/skills/rite-explain/SKILL.md +1 -1
- package/pack/generated/claude/skills/rite-explain/reference/intake.md +1 -1
- package/pack/generated/claude/skills/rite-fast/SKILL.md +1 -1
- package/pack/generated/claude/skills/rite-handoff/SKILL.md +3 -3
- package/pack/generated/claude/skills/rite-handoff/reference/handoff-template.md +1 -1
- package/pack/generated/claude/skills/rite-plan/SKILL.md +4 -4
- package/pack/generated/claude/skills/rite-plan/reference/slicing.md +3 -2
- package/pack/generated/claude/skills/rite-polish/SKILL.md +6 -3
- package/pack/generated/claude/skills/rite-prove/SKILL.md +1 -1
- package/pack/generated/claude/skills/rite-quick/SKILL.md +1 -1
- package/pack/generated/claude/skills/rite-resolve/SKILL.md +1 -1
- package/pack/generated/claude/skills/rite-review/SKILL.md +4 -4
- package/pack/generated/claude/skills/rite-seal/SKILL.md +2 -2
- package/pack/generated/claude/skills/rite-ship/SKILL.md +1 -1
- package/pack/generated/claude/skills/rite-spec/SKILL.md +3 -2
- package/pack/generated/claude/skills/rite-spec/reference/investigation.md +5 -5
- package/pack/generated/claude/skills/rite-spec/reference/spec-template.md +1 -1
- package/pack/generated/claude/skills/rite-spec/reference/state-workspace.md +6 -4
- package/pack/generated/claude/skills/rite-status/SKILL.md +1 -1
- package/pack/generated/claude/skills/rite-temper/SKILL.md +1 -1
- package/pack/generated/claude/skills/rite-temper/reference/review-dimensions.md +2 -2
- package/pack/generated/claude/skills/rite-temper/reference/scope-modes.md +2 -2
- package/pack/generated/claude/skills/rite-temper/reference/significance.md +2 -2
- package/pack/generated/claude/skills/rite-vet/SKILL.md +11 -5
- package/pack/generated/claude/skills/rite-vet/reference/artifacts.md +10 -3
- package/pack/generated/claude/skills/rite-vet/reference/depth.md +2 -2
- package/pack/generated/claude/skills/rite-vet/reference/review-axes.md +2 -2
- package/pack/generated/claude/skills/rite-zoom-out/SKILL.md +6 -6
- package/pack/generated/codex/agents/devrites-code-reviewer.toml +8 -4
- package/pack/generated/codex/agents/devrites-devex-reviewer.toml +4 -3
- package/pack/generated/codex/agents/devrites-doubt-reviewer.toml +3 -3
- package/pack/generated/codex/agents/devrites-evidence-scout.toml +2 -1
- package/pack/generated/codex/agents/devrites-frontend-reviewer.toml +4 -3
- package/pack/generated/codex/agents/devrites-performance-reviewer.toml +4 -4
- package/pack/generated/codex/agents/devrites-plan-drafter.toml +3 -1
- package/pack/generated/codex/agents/devrites-plan-reviewer.toml +4 -4
- package/pack/generated/codex/agents/devrites-security-auditor.toml +3 -3
- package/pack/generated/codex/agents/devrites-simplifier-reviewer.toml +4 -3
- package/pack/generated/codex/agents/devrites-slice-wright.toml +17 -8
- package/pack/generated/codex/agents/devrites-spec-reviewer.toml +3 -3
- package/pack/generated/codex/agents/devrites-strategy-reviewer.toml +4 -5
- package/pack/generated/codex/agents/devrites-test-analyst.toml +6 -3
- package/pack/generated/codex/agents/fast-builder.toml +3 -1
- package/pack/generated/codex/agents/fast-checker.toml +2 -1
- package/pack/generated/codex/agents/fast-critic.toml +2 -1
- package/pack/generated/codex/agents/fast-planner.toml +2 -2
- package/pack/generated/codex/agents/overhaul-recon.toml +5 -4
- package/pack/generated/codex/skills/devrites-api-interface/SKILL.md +1 -1
- package/pack/generated/codex/skills/devrites-audit/SKILL.md +1 -1
- package/pack/generated/codex/skills/devrites-debug-recovery/SKILL.md +1 -1
- package/pack/generated/codex/skills/devrites-doubt/SKILL.md +5 -5
- package/pack/generated/codex/skills/devrites-frontend-craft/reference/reuse-first.md +3 -3
- package/pack/generated/codex/skills/devrites-interview/SKILL.md +1 -1
- package/pack/generated/codex/skills/devrites-lib/SKILL.md +11 -6
- package/pack/generated/codex/skills/devrites-lib/reference/orchestration-profiles.md +2 -0
- package/pack/generated/codex/skills/devrites-lib/reference/parallel-dispatch.md +25 -14
- package/pack/generated/codex/skills/devrites-lib/reference/standards/README.md +2 -1
- package/pack/generated/codex/skills/devrites-lib/reference/standards/afk-hitl.md +11 -3
- package/pack/generated/codex/skills/devrites-lib/reference/standards/agents.md +43 -19
- package/pack/generated/codex/skills/devrites-lib/reference/standards/architecture-health.md +1 -1
- package/pack/generated/codex/skills/devrites-lib/reference/standards/code-index.md +111 -0
- package/pack/generated/codex/skills/devrites-lib/reference/standards/code-navigation.md +13 -63
- package/pack/generated/codex/skills/devrites-lib/reference/standards/context-hygiene.md +8 -9
- package/pack/generated/codex/skills/devrites-lib/reference/standards/core.md +14 -1
- package/pack/generated/codex/skills/devrites-lib/reference/standards/deprecation.md +1 -1
- package/pack/generated/codex/skills/devrites-lib/reference/standards/gates.md +10 -1
- package/pack/generated/codex/skills/devrites-lib/reference/standards/performance.md +14 -0
- package/pack/generated/codex/skills/devrites-lib/reference/standards/security.md +4 -0
- package/pack/generated/codex/skills/devrites-lib/reference/standards/testing.md +3 -1
- package/pack/generated/codex/skills/devrites-lib/reference/standards/tooling.md +9 -8
- package/pack/generated/codex/skills/devrites-lib/reference/standards/windows.md +3 -2
- package/pack/generated/codex/skills/devrites-lib/reference/standards/workflow-artifacts.md +2 -0
- package/pack/generated/codex/skills/devrites-lib/reference/workspace-artifact-schema.md +16 -16
- package/pack/generated/codex/skills/devrites-ux-shape/SKILL.md +1 -1
- package/pack/generated/codex/skills/overhaul/references/orchestration.md +3 -2
- package/pack/generated/codex/skills/rite/SKILL.md +1 -1
- package/pack/generated/codex/skills/rite-adopt/SKILL.md +1 -1
- package/pack/generated/codex/skills/rite-adopt/reference/adoption.md +1 -1
- package/pack/generated/codex/skills/rite-autocomplete/SKILL.md +11 -6
- package/pack/generated/codex/skills/rite-autocomplete/reference/lookahead.md +50 -0
- package/pack/generated/codex/skills/rite-autocomplete/reference/loop.md +7 -0
- package/pack/generated/codex/skills/rite-build/SKILL.md +4 -3
- package/pack/generated/codex/skills/rite-build/reference/afk-discipline.md +2 -0
- package/pack/generated/codex/skills/rite-build/reference/checkpoint-protocol.md +4 -1
- package/pack/generated/codex/skills/rite-build/reference/checkpoint.md +2 -0
- package/pack/generated/codex/skills/rite-build/reference/one-slice-cycle.md +1 -1
- package/pack/generated/codex/skills/rite-build/reference/output.md +2 -0
- package/pack/generated/codex/skills/rite-build/reference/parallel-batch.md +22 -12
- package/pack/generated/codex/skills/rite-build/reference/phase-contract.md +13 -3
- package/pack/generated/codex/skills/rite-build/reference/spec-drift-guard.md +4 -0
- package/pack/generated/codex/skills/rite-build/reference/wright-dispatch.md +42 -25
- package/pack/generated/codex/skills/rite-clarify/SKILL.md +1 -1
- package/pack/generated/codex/skills/rite-converge/SKILL.md +4 -4
- package/pack/generated/codex/skills/rite-converge/reference/convergence-assessment.md +3 -3
- package/pack/generated/codex/skills/rite-define/SKILL.md +10 -5
- package/pack/generated/codex/skills/rite-doctor/SKILL.md +17 -2
- package/pack/generated/codex/skills/rite-dogfood/SKILL.md +1 -1
- package/pack/generated/codex/skills/rite-explain/SKILL.md +1 -1
- package/pack/generated/codex/skills/rite-explain/reference/intake.md +1 -1
- package/pack/generated/codex/skills/rite-fast/SKILL.md +1 -1
- package/pack/generated/codex/skills/rite-handoff/SKILL.md +3 -3
- package/pack/generated/codex/skills/rite-handoff/reference/handoff-template.md +1 -1
- package/pack/generated/codex/skills/rite-plan/SKILL.md +4 -4
- package/pack/generated/codex/skills/rite-plan/reference/slicing.md +3 -2
- package/pack/generated/codex/skills/rite-polish/SKILL.md +6 -3
- package/pack/generated/codex/skills/rite-prove/SKILL.md +1 -1
- package/pack/generated/codex/skills/rite-quick/SKILL.md +1 -1
- package/pack/generated/codex/skills/rite-resolve/SKILL.md +1 -1
- package/pack/generated/codex/skills/rite-review/SKILL.md +4 -4
- package/pack/generated/codex/skills/rite-seal/SKILL.md +2 -2
- package/pack/generated/codex/skills/rite-ship/SKILL.md +1 -1
- package/pack/generated/codex/skills/rite-spec/SKILL.md +3 -2
- package/pack/generated/codex/skills/rite-spec/reference/investigation.md +5 -5
- package/pack/generated/codex/skills/rite-spec/reference/spec-template.md +1 -1
- package/pack/generated/codex/skills/rite-spec/reference/state-workspace.md +6 -4
- package/pack/generated/codex/skills/rite-status/SKILL.md +1 -1
- package/pack/generated/codex/skills/rite-temper/SKILL.md +1 -1
- package/pack/generated/codex/skills/rite-temper/reference/review-dimensions.md +2 -2
- package/pack/generated/codex/skills/rite-temper/reference/scope-modes.md +2 -2
- package/pack/generated/codex/skills/rite-temper/reference/significance.md +2 -2
- package/pack/generated/codex/skills/rite-vet/SKILL.md +11 -5
- package/pack/generated/codex/skills/rite-vet/reference/artifacts.md +10 -3
- package/pack/generated/codex/skills/rite-vet/reference/depth.md +2 -2
- package/pack/generated/codex/skills/rite-vet/reference/review-axes.md +2 -2
- package/pack/generated/codex/skills/rite-zoom-out/SKILL.md +6 -6
- package/pack/generated/devin/agents/devrites-code-reviewer.md +8 -4
- package/pack/generated/devin/agents/devrites-devex-reviewer.md +4 -3
- package/pack/generated/devin/agents/devrites-doubt-reviewer.md +3 -3
- package/pack/generated/devin/agents/devrites-evidence-scout.md +2 -1
- package/pack/generated/devin/agents/devrites-frontend-reviewer.md +4 -3
- package/pack/generated/devin/agents/devrites-performance-reviewer.md +4 -4
- package/pack/generated/devin/agents/devrites-plan-drafter.md +3 -1
- package/pack/generated/devin/agents/devrites-plan-reviewer.md +4 -4
- package/pack/generated/devin/agents/devrites-security-auditor.md +3 -3
- package/pack/generated/devin/agents/devrites-simplifier-reviewer.md +4 -3
- package/pack/generated/devin/agents/devrites-slice-wright.md +17 -8
- package/pack/generated/devin/agents/devrites-spec-reviewer.md +3 -3
- package/pack/generated/devin/agents/devrites-strategy-reviewer.md +4 -5
- package/pack/generated/devin/agents/devrites-test-analyst.md +6 -3
- package/pack/generated/devin/agents/fast-builder.md +3 -1
- package/pack/generated/devin/agents/fast-checker.md +2 -1
- package/pack/generated/devin/agents/fast-critic.md +2 -1
- package/pack/generated/devin/agents/fast-planner.md +2 -2
- package/pack/generated/devin/agents/overhaul-recon.md +5 -4
- package/pack/generated/devin/skills/devrites-api-interface/SKILL.md +1 -1
- package/pack/generated/devin/skills/devrites-audit/SKILL.md +1 -1
- package/pack/generated/devin/skills/devrites-debug-recovery/SKILL.md +1 -1
- package/pack/generated/devin/skills/devrites-doubt/SKILL.md +5 -5
- package/pack/generated/devin/skills/devrites-frontend-craft/reference/reuse-first.md +3 -3
- package/pack/generated/devin/skills/devrites-interview/SKILL.md +1 -1
- package/pack/generated/devin/skills/devrites-lib/SKILL.md +11 -6
- package/pack/generated/devin/skills/devrites-lib/reference/orchestration-profiles.md +2 -0
- package/pack/generated/devin/skills/devrites-lib/reference/parallel-dispatch.md +25 -14
- package/pack/generated/devin/skills/devrites-lib/reference/standards/README.md +2 -1
- package/pack/generated/devin/skills/devrites-lib/reference/standards/afk-hitl.md +11 -3
- package/pack/generated/devin/skills/devrites-lib/reference/standards/agents.md +43 -19
- package/pack/generated/devin/skills/devrites-lib/reference/standards/architecture-health.md +1 -1
- package/pack/generated/devin/skills/devrites-lib/reference/standards/code-index.md +111 -0
- package/pack/generated/devin/skills/devrites-lib/reference/standards/code-navigation.md +13 -63
- package/pack/generated/devin/skills/devrites-lib/reference/standards/context-hygiene.md +8 -9
- package/pack/generated/devin/skills/devrites-lib/reference/standards/core.md +14 -1
- package/pack/generated/devin/skills/devrites-lib/reference/standards/deprecation.md +1 -1
- package/pack/generated/devin/skills/devrites-lib/reference/standards/gates.md +10 -1
- package/pack/generated/devin/skills/devrites-lib/reference/standards/performance.md +14 -0
- package/pack/generated/devin/skills/devrites-lib/reference/standards/security.md +4 -0
- package/pack/generated/devin/skills/devrites-lib/reference/standards/testing.md +3 -1
- package/pack/generated/devin/skills/devrites-lib/reference/standards/tooling.md +9 -8
- package/pack/generated/devin/skills/devrites-lib/reference/standards/windows.md +3 -2
- package/pack/generated/devin/skills/devrites-lib/reference/standards/workflow-artifacts.md +2 -0
- package/pack/generated/devin/skills/devrites-lib/reference/workspace-artifact-schema.md +16 -16
- package/pack/generated/devin/skills/devrites-ux-shape/SKILL.md +1 -1
- package/pack/generated/devin/skills/overhaul/references/orchestration.md +3 -2
- package/pack/generated/devin/skills/rite/SKILL.md +1 -1
- package/pack/generated/devin/skills/rite-adopt/SKILL.md +1 -1
- package/pack/generated/devin/skills/rite-adopt/reference/adoption.md +1 -1
- package/pack/generated/devin/skills/rite-autocomplete/SKILL.md +11 -6
- package/pack/generated/devin/skills/rite-autocomplete/reference/lookahead.md +50 -0
- package/pack/generated/devin/skills/rite-autocomplete/reference/loop.md +7 -0
- package/pack/generated/devin/skills/rite-build/SKILL.md +4 -3
- package/pack/generated/devin/skills/rite-build/reference/afk-discipline.md +2 -0
- package/pack/generated/devin/skills/rite-build/reference/checkpoint-protocol.md +4 -1
- package/pack/generated/devin/skills/rite-build/reference/checkpoint.md +2 -0
- package/pack/generated/devin/skills/rite-build/reference/one-slice-cycle.md +1 -1
- package/pack/generated/devin/skills/rite-build/reference/output.md +2 -0
- package/pack/generated/devin/skills/rite-build/reference/parallel-batch.md +22 -12
- package/pack/generated/devin/skills/rite-build/reference/phase-contract.md +13 -3
- package/pack/generated/devin/skills/rite-build/reference/spec-drift-guard.md +4 -0
- package/pack/generated/devin/skills/rite-build/reference/wright-dispatch.md +42 -25
- package/pack/generated/devin/skills/rite-clarify/SKILL.md +1 -1
- package/pack/generated/devin/skills/rite-converge/SKILL.md +4 -4
- package/pack/generated/devin/skills/rite-converge/reference/convergence-assessment.md +3 -3
- package/pack/generated/devin/skills/rite-define/SKILL.md +10 -5
- package/pack/generated/devin/skills/rite-doctor/SKILL.md +17 -2
- package/pack/generated/devin/skills/rite-dogfood/SKILL.md +1 -1
- package/pack/generated/devin/skills/rite-explain/SKILL.md +1 -1
- package/pack/generated/devin/skills/rite-explain/reference/intake.md +1 -1
- package/pack/generated/devin/skills/rite-fast/SKILL.md +1 -1
- package/pack/generated/devin/skills/rite-handoff/SKILL.md +3 -3
- package/pack/generated/devin/skills/rite-handoff/reference/handoff-template.md +1 -1
- package/pack/generated/devin/skills/rite-plan/SKILL.md +4 -4
- package/pack/generated/devin/skills/rite-plan/reference/slicing.md +3 -2
- package/pack/generated/devin/skills/rite-polish/SKILL.md +6 -3
- package/pack/generated/devin/skills/rite-prove/SKILL.md +1 -1
- package/pack/generated/devin/skills/rite-quick/SKILL.md +1 -1
- package/pack/generated/devin/skills/rite-resolve/SKILL.md +1 -1
- package/pack/generated/devin/skills/rite-review/SKILL.md +4 -4
- package/pack/generated/devin/skills/rite-seal/SKILL.md +2 -2
- package/pack/generated/devin/skills/rite-ship/SKILL.md +1 -1
- package/pack/generated/devin/skills/rite-spec/SKILL.md +3 -2
- package/pack/generated/devin/skills/rite-spec/reference/investigation.md +5 -5
- package/pack/generated/devin/skills/rite-spec/reference/spec-template.md +1 -1
- package/pack/generated/devin/skills/rite-spec/reference/state-workspace.md +6 -4
- package/pack/generated/devin/skills/rite-status/SKILL.md +1 -1
- package/pack/generated/devin/skills/rite-temper/SKILL.md +1 -1
- package/pack/generated/devin/skills/rite-temper/reference/review-dimensions.md +2 -2
- package/pack/generated/devin/skills/rite-temper/reference/scope-modes.md +2 -2
- package/pack/generated/devin/skills/rite-temper/reference/significance.md +2 -2
- package/pack/generated/devin/skills/rite-vet/SKILL.md +11 -5
- package/pack/generated/devin/skills/rite-vet/reference/artifacts.md +10 -3
- package/pack/generated/devin/skills/rite-vet/reference/depth.md +2 -2
- package/pack/generated/devin/skills/rite-vet/reference/review-axes.md +2 -2
- package/pack/generated/devin/skills/rite-zoom-out/SKILL.md +6 -6
- package/pack/generated/omp/agents/devrites-code-reviewer.md +9 -5
- package/pack/generated/omp/agents/devrites-devex-reviewer.md +5 -4
- package/pack/generated/omp/agents/devrites-doubt-reviewer.md +4 -4
- package/pack/generated/omp/agents/devrites-evidence-scout.md +3 -2
- package/pack/generated/omp/agents/devrites-frontend-reviewer.md +5 -4
- package/pack/generated/omp/agents/devrites-performance-reviewer.md +5 -5
- package/pack/generated/omp/agents/devrites-plan-drafter.md +4 -2
- package/pack/generated/omp/agents/devrites-plan-reviewer.md +5 -5
- package/pack/generated/omp/agents/devrites-proof-runner.md +1 -1
- package/pack/generated/omp/agents/devrites-retrospector.md +1 -1
- package/pack/generated/omp/agents/devrites-security-auditor.md +4 -4
- package/pack/generated/omp/agents/devrites-simplifier-reviewer.md +5 -4
- package/pack/generated/omp/agents/devrites-slice-wright.md +18 -9
- package/pack/generated/omp/agents/devrites-spec-reviewer.md +4 -4
- package/pack/generated/omp/agents/devrites-strategy-reviewer.md +5 -6
- package/pack/generated/omp/agents/devrites-test-analyst.md +7 -4
- package/pack/generated/omp/agents/devrites-upgrade-planner.md +1 -1
- package/pack/generated/omp/agents/fast-builder.md +4 -2
- package/pack/generated/omp/agents/fast-checker.md +3 -2
- package/pack/generated/omp/agents/fast-critic.md +3 -2
- package/pack/generated/omp/agents/fast-planner.md +3 -3
- package/pack/generated/omp/agents/overhaul-backend-engineer.md +1 -1
- package/pack/generated/omp/agents/overhaul-boundary.md +1 -1
- package/pack/generated/omp/agents/overhaul-craft.md +1 -1
- package/pack/generated/omp/agents/overhaul-frontend-engineer.md +1 -1
- package/pack/generated/omp/agents/overhaul-implementer.md +1 -1
- package/pack/generated/omp/agents/overhaul-recon.md +6 -5
- package/pack/generated/omp/agents/overhaul-specialist.md +1 -1
- package/pack/generated/omp/agents/overhaul-verifier.md +1 -1
- package/pack/generated/omp/commands/rite-autocomplete.md +1 -1
- package/pack/generated/omp/skills/devrites-api-interface/SKILL.md +1 -1
- package/pack/generated/omp/skills/devrites-audit/SKILL.md +1 -1
- package/pack/generated/omp/skills/devrites-debug-recovery/SKILL.md +1 -1
- package/pack/generated/omp/skills/devrites-doubt/SKILL.md +5 -5
- package/pack/generated/omp/skills/devrites-frontend-craft/reference/reuse-first.md +3 -3
- package/pack/generated/omp/skills/devrites-interview/SKILL.md +1 -1
- package/pack/generated/omp/skills/devrites-lib/SKILL.md +11 -6
- package/pack/generated/omp/skills/devrites-lib/reference/orchestration-profiles.md +2 -0
- package/pack/generated/omp/skills/devrites-lib/reference/parallel-dispatch.md +25 -14
- package/pack/generated/omp/skills/devrites-lib/reference/standards/README.md +2 -1
- package/pack/generated/omp/skills/devrites-lib/reference/standards/afk-hitl.md +11 -3
- package/pack/generated/omp/skills/devrites-lib/reference/standards/agents.md +43 -19
- package/pack/generated/omp/skills/devrites-lib/reference/standards/architecture-health.md +1 -1
- package/pack/generated/omp/skills/devrites-lib/reference/standards/code-index.md +111 -0
- package/pack/generated/omp/skills/devrites-lib/reference/standards/code-navigation.md +13 -63
- package/pack/generated/omp/skills/devrites-lib/reference/standards/context-hygiene.md +8 -9
- package/pack/generated/omp/skills/devrites-lib/reference/standards/core.md +14 -1
- package/pack/generated/omp/skills/devrites-lib/reference/standards/deprecation.md +1 -1
- package/pack/generated/omp/skills/devrites-lib/reference/standards/gates.md +10 -1
- package/pack/generated/omp/skills/devrites-lib/reference/standards/performance.md +14 -0
- package/pack/generated/omp/skills/devrites-lib/reference/standards/security.md +4 -0
- package/pack/generated/omp/skills/devrites-lib/reference/standards/testing.md +3 -1
- package/pack/generated/omp/skills/devrites-lib/reference/standards/tooling.md +9 -8
- package/pack/generated/omp/skills/devrites-lib/reference/standards/windows.md +3 -2
- package/pack/generated/omp/skills/devrites-lib/reference/standards/workflow-artifacts.md +2 -0
- package/pack/generated/omp/skills/devrites-lib/reference/workspace-artifact-schema.md +16 -16
- package/pack/generated/omp/skills/devrites-ux-shape/SKILL.md +1 -1
- package/pack/generated/omp/skills/overhaul/references/orchestration.md +3 -2
- package/pack/generated/omp/skills/rite/SKILL.md +1 -1
- package/pack/generated/omp/skills/rite-adopt/SKILL.md +1 -1
- package/pack/generated/omp/skills/rite-adopt/reference/adoption.md +1 -1
- package/pack/generated/omp/skills/rite-autocomplete/SKILL.md +11 -6
- package/pack/generated/omp/skills/rite-autocomplete/reference/lookahead.md +50 -0
- package/pack/generated/omp/skills/rite-autocomplete/reference/loop.md +7 -0
- package/pack/generated/omp/skills/rite-build/SKILL.md +4 -3
- package/pack/generated/omp/skills/rite-build/reference/afk-discipline.md +2 -0
- package/pack/generated/omp/skills/rite-build/reference/checkpoint-protocol.md +4 -1
- package/pack/generated/omp/skills/rite-build/reference/checkpoint.md +2 -0
- package/pack/generated/omp/skills/rite-build/reference/one-slice-cycle.md +1 -1
- package/pack/generated/omp/skills/rite-build/reference/output.md +2 -0
- package/pack/generated/omp/skills/rite-build/reference/parallel-batch.md +22 -12
- package/pack/generated/omp/skills/rite-build/reference/phase-contract.md +13 -3
- package/pack/generated/omp/skills/rite-build/reference/spec-drift-guard.md +4 -0
- package/pack/generated/omp/skills/rite-build/reference/wright-dispatch.md +42 -25
- package/pack/generated/omp/skills/rite-clarify/SKILL.md +1 -1
- package/pack/generated/omp/skills/rite-converge/SKILL.md +4 -4
- package/pack/generated/omp/skills/rite-converge/reference/convergence-assessment.md +3 -3
- package/pack/generated/omp/skills/rite-define/SKILL.md +10 -5
- package/pack/generated/omp/skills/rite-doctor/SKILL.md +17 -2
- package/pack/generated/omp/skills/rite-dogfood/SKILL.md +1 -1
- package/pack/generated/omp/skills/rite-explain/SKILL.md +1 -1
- package/pack/generated/omp/skills/rite-explain/reference/intake.md +1 -1
- package/pack/generated/omp/skills/rite-fast/SKILL.md +1 -1
- package/pack/generated/omp/skills/rite-handoff/SKILL.md +3 -3
- package/pack/generated/omp/skills/rite-handoff/reference/handoff-template.md +1 -1
- package/pack/generated/omp/skills/rite-plan/SKILL.md +4 -4
- package/pack/generated/omp/skills/rite-plan/reference/slicing.md +3 -2
- package/pack/generated/omp/skills/rite-polish/SKILL.md +6 -3
- package/pack/generated/omp/skills/rite-prove/SKILL.md +1 -1
- package/pack/generated/omp/skills/rite-quick/SKILL.md +1 -1
- package/pack/generated/omp/skills/rite-resolve/SKILL.md +1 -1
- package/pack/generated/omp/skills/rite-review/SKILL.md +4 -4
- package/pack/generated/omp/skills/rite-seal/SKILL.md +2 -2
- package/pack/generated/omp/skills/rite-ship/SKILL.md +1 -1
- package/pack/generated/omp/skills/rite-spec/SKILL.md +3 -2
- package/pack/generated/omp/skills/rite-spec/reference/investigation.md +5 -5
- package/pack/generated/omp/skills/rite-spec/reference/spec-template.md +1 -1
- package/pack/generated/omp/skills/rite-spec/reference/state-workspace.md +6 -4
- package/pack/generated/omp/skills/rite-status/SKILL.md +1 -1
- package/pack/generated/omp/skills/rite-temper/SKILL.md +1 -1
- package/pack/generated/omp/skills/rite-temper/reference/review-dimensions.md +2 -2
- package/pack/generated/omp/skills/rite-temper/reference/scope-modes.md +2 -2
- package/pack/generated/omp/skills/rite-temper/reference/significance.md +2 -2
- package/pack/generated/omp/skills/rite-vet/SKILL.md +11 -5
- package/pack/generated/omp/skills/rite-vet/reference/artifacts.md +10 -3
- package/pack/generated/omp/skills/rite-vet/reference/depth.md +2 -2
- package/pack/generated/omp/skills/rite-vet/reference/review-axes.md +2 -2
- package/pack/generated/omp/skills/rite-zoom-out/SKILL.md +6 -6
- package/pack/generated/pi/agents/devrites-code-reviewer.md +9 -5
- package/pack/generated/pi/agents/devrites-devex-reviewer.md +5 -4
- package/pack/generated/pi/agents/devrites-doubt-reviewer.md +4 -4
- package/pack/generated/pi/agents/devrites-evidence-scout.md +3 -2
- package/pack/generated/pi/agents/devrites-frontend-reviewer.md +5 -4
- package/pack/generated/pi/agents/devrites-performance-reviewer.md +5 -5
- package/pack/generated/pi/agents/devrites-plan-drafter.md +4 -2
- package/pack/generated/pi/agents/devrites-plan-reviewer.md +5 -5
- package/pack/generated/pi/agents/devrites-proof-runner.md +1 -1
- package/pack/generated/pi/agents/devrites-retrospector.md +1 -1
- package/pack/generated/pi/agents/devrites-security-auditor.md +4 -4
- package/pack/generated/pi/agents/devrites-simplifier-reviewer.md +5 -4
- package/pack/generated/pi/agents/devrites-slice-wright.md +18 -9
- package/pack/generated/pi/agents/devrites-spec-reviewer.md +4 -4
- package/pack/generated/pi/agents/devrites-strategy-reviewer.md +5 -6
- package/pack/generated/pi/agents/devrites-test-analyst.md +7 -4
- package/pack/generated/pi/agents/devrites-upgrade-planner.md +1 -1
- package/pack/generated/pi/agents/fast-builder.md +4 -2
- package/pack/generated/pi/agents/fast-checker.md +3 -2
- package/pack/generated/pi/agents/fast-critic.md +3 -2
- package/pack/generated/pi/agents/fast-planner.md +3 -3
- package/pack/generated/pi/agents/overhaul-backend-engineer.md +1 -1
- package/pack/generated/pi/agents/overhaul-boundary.md +1 -1
- package/pack/generated/pi/agents/overhaul-craft.md +1 -1
- package/pack/generated/pi/agents/overhaul-frontend-engineer.md +1 -1
- package/pack/generated/pi/agents/overhaul-implementer.md +1 -1
- package/pack/generated/pi/agents/overhaul-recon.md +6 -5
- package/pack/generated/pi/agents/overhaul-specialist.md +1 -1
- package/pack/generated/pi/agents/overhaul-verifier.md +1 -1
- package/pack/generated/pi/prompts/rite-autocomplete.md +1 -1
- package/pack/generated/pi/skills/devrites-api-interface/SKILL.md +1 -1
- package/pack/generated/pi/skills/devrites-audit/SKILL.md +1 -1
- package/pack/generated/pi/skills/devrites-debug-recovery/SKILL.md +1 -1
- package/pack/generated/pi/skills/devrites-doubt/SKILL.md +5 -5
- package/pack/generated/pi/skills/devrites-frontend-craft/reference/reuse-first.md +3 -3
- package/pack/generated/pi/skills/devrites-interview/SKILL.md +1 -1
- package/pack/generated/pi/skills/devrites-lib/SKILL.md +11 -6
- package/pack/generated/pi/skills/devrites-lib/reference/orchestration-profiles.md +2 -0
- package/pack/generated/pi/skills/devrites-lib/reference/parallel-dispatch.md +25 -14
- package/pack/generated/pi/skills/devrites-lib/reference/standards/README.md +2 -1
- package/pack/generated/pi/skills/devrites-lib/reference/standards/afk-hitl.md +11 -3
- package/pack/generated/pi/skills/devrites-lib/reference/standards/agents.md +43 -19
- package/pack/generated/pi/skills/devrites-lib/reference/standards/architecture-health.md +1 -1
- package/pack/generated/pi/skills/devrites-lib/reference/standards/code-index.md +111 -0
- package/pack/generated/pi/skills/devrites-lib/reference/standards/code-navigation.md +13 -63
- package/pack/generated/pi/skills/devrites-lib/reference/standards/context-hygiene.md +8 -9
- package/pack/generated/pi/skills/devrites-lib/reference/standards/core.md +14 -1
- package/pack/generated/pi/skills/devrites-lib/reference/standards/deprecation.md +1 -1
- package/pack/generated/pi/skills/devrites-lib/reference/standards/gates.md +10 -1
- package/pack/generated/pi/skills/devrites-lib/reference/standards/performance.md +14 -0
- package/pack/generated/pi/skills/devrites-lib/reference/standards/security.md +4 -0
- package/pack/generated/pi/skills/devrites-lib/reference/standards/testing.md +3 -1
- package/pack/generated/pi/skills/devrites-lib/reference/standards/tooling.md +9 -8
- package/pack/generated/pi/skills/devrites-lib/reference/standards/windows.md +3 -2
- package/pack/generated/pi/skills/devrites-lib/reference/standards/workflow-artifacts.md +2 -0
- package/pack/generated/pi/skills/devrites-lib/reference/workspace-artifact-schema.md +16 -16
- package/pack/generated/pi/skills/devrites-ux-shape/SKILL.md +1 -1
- package/pack/generated/pi/skills/overhaul/references/orchestration.md +3 -2
- package/pack/generated/pi/skills/rite/SKILL.md +1 -1
- package/pack/generated/pi/skills/rite-adopt/SKILL.md +1 -1
- package/pack/generated/pi/skills/rite-adopt/reference/adoption.md +1 -1
- package/pack/generated/pi/skills/rite-autocomplete/SKILL.md +11 -6
- package/pack/generated/pi/skills/rite-autocomplete/reference/lookahead.md +50 -0
- package/pack/generated/pi/skills/rite-autocomplete/reference/loop.md +7 -0
- package/pack/generated/pi/skills/rite-build/SKILL.md +4 -3
- package/pack/generated/pi/skills/rite-build/reference/afk-discipline.md +2 -0
- package/pack/generated/pi/skills/rite-build/reference/checkpoint-protocol.md +4 -1
- package/pack/generated/pi/skills/rite-build/reference/checkpoint.md +2 -0
- package/pack/generated/pi/skills/rite-build/reference/one-slice-cycle.md +1 -1
- package/pack/generated/pi/skills/rite-build/reference/output.md +2 -0
- package/pack/generated/pi/skills/rite-build/reference/parallel-batch.md +22 -12
- package/pack/generated/pi/skills/rite-build/reference/phase-contract.md +13 -3
- package/pack/generated/pi/skills/rite-build/reference/spec-drift-guard.md +4 -0
- package/pack/generated/pi/skills/rite-build/reference/wright-dispatch.md +42 -25
- package/pack/generated/pi/skills/rite-clarify/SKILL.md +1 -1
- package/pack/generated/pi/skills/rite-converge/SKILL.md +4 -4
- package/pack/generated/pi/skills/rite-converge/reference/convergence-assessment.md +3 -3
- package/pack/generated/pi/skills/rite-define/SKILL.md +10 -5
- package/pack/generated/pi/skills/rite-doctor/SKILL.md +17 -2
- package/pack/generated/pi/skills/rite-dogfood/SKILL.md +1 -1
- package/pack/generated/pi/skills/rite-explain/SKILL.md +1 -1
- package/pack/generated/pi/skills/rite-explain/reference/intake.md +1 -1
- package/pack/generated/pi/skills/rite-fast/SKILL.md +1 -1
- package/pack/generated/pi/skills/rite-handoff/SKILL.md +3 -3
- package/pack/generated/pi/skills/rite-handoff/reference/handoff-template.md +1 -1
- package/pack/generated/pi/skills/rite-plan/SKILL.md +4 -4
- package/pack/generated/pi/skills/rite-plan/reference/slicing.md +3 -2
- package/pack/generated/pi/skills/rite-polish/SKILL.md +6 -3
- package/pack/generated/pi/skills/rite-prove/SKILL.md +1 -1
- package/pack/generated/pi/skills/rite-quick/SKILL.md +1 -1
- package/pack/generated/pi/skills/rite-resolve/SKILL.md +1 -1
- package/pack/generated/pi/skills/rite-review/SKILL.md +4 -4
- package/pack/generated/pi/skills/rite-seal/SKILL.md +2 -2
- package/pack/generated/pi/skills/rite-ship/SKILL.md +1 -1
- package/pack/generated/pi/skills/rite-spec/SKILL.md +3 -2
- package/pack/generated/pi/skills/rite-spec/reference/investigation.md +5 -5
- package/pack/generated/pi/skills/rite-spec/reference/spec-template.md +1 -1
- package/pack/generated/pi/skills/rite-spec/reference/state-workspace.md +6 -4
- package/pack/generated/pi/skills/rite-status/SKILL.md +1 -1
- package/pack/generated/pi/skills/rite-temper/SKILL.md +1 -1
- package/pack/generated/pi/skills/rite-temper/reference/review-dimensions.md +2 -2
- package/pack/generated/pi/skills/rite-temper/reference/scope-modes.md +2 -2
- package/pack/generated/pi/skills/rite-temper/reference/significance.md +2 -2
- package/pack/generated/pi/skills/rite-vet/SKILL.md +11 -5
- package/pack/generated/pi/skills/rite-vet/reference/artifacts.md +10 -3
- package/pack/generated/pi/skills/rite-vet/reference/depth.md +2 -2
- package/pack/generated/pi/skills/rite-vet/reference/review-axes.md +2 -2
- package/pack/generated/pi/skills/rite-zoom-out/SKILL.md +6 -6
- package/package.json +1 -1
- package/scripts/build-host-artifacts.sh +5 -4
- package/scripts/omp-generate.sh +3 -12
- package/scripts/pi-generate.sh +5 -51
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
package gate
|
|
2
|
+
|
|
3
|
+
import (
|
|
4
|
+
"fmt"
|
|
5
|
+
"regexp"
|
|
6
|
+
"strings"
|
|
7
|
+
|
|
8
|
+
"github.com/devrites/devrites/internal/markdowntext"
|
|
9
|
+
"github.com/devrites/devrites/internal/state"
|
|
10
|
+
)
|
|
11
|
+
|
|
12
|
+
// predecessorLabel opens the line a lookahead Vet records in eng-review.md: the
|
|
13
|
+
// predecessor workspace this plan was written against and that predecessor's
|
|
14
|
+
// readiness binding digest at the time.
|
|
15
|
+
const predecessorLabel = "Predecessor readiness: "
|
|
16
|
+
|
|
17
|
+
// The slug pattern keeps the predecessor a single workspace name; the gate
|
|
18
|
+
// package resolves no workspace path itself.
|
|
19
|
+
var predecessorLineRE = regexp.MustCompile(`^Predecessor readiness: ([A-Za-z0-9][A-Za-z0-9._-]*) ([0-9a-f]{64})$`)
|
|
20
|
+
|
|
21
|
+
// predecessorProblems blocks readiness when the predecessor a lookahead plan
|
|
22
|
+
// was written against has since changed its planning inputs, so this plan must
|
|
23
|
+
// be re-vetted against them. A workspace without the line is never checked.
|
|
24
|
+
func predecessorProblems(root string, observation *state.WorkspaceObservation) []string {
|
|
25
|
+
phase, err := observation.DeclaredPhase()
|
|
26
|
+
if err != nil {
|
|
27
|
+
return nil
|
|
28
|
+
}
|
|
29
|
+
policy, ok := state.PolicyFor(phase)
|
|
30
|
+
if !ok || !phaseRequiresReadinessBinding(policy) {
|
|
31
|
+
return nil
|
|
32
|
+
}
|
|
33
|
+
fact, ok := observation.Fact("eng-review.md")
|
|
34
|
+
if !ok || fact.State() != state.ArtifactPresent {
|
|
35
|
+
return nil
|
|
36
|
+
}
|
|
37
|
+
visible, err := markdowntext.Structural(fact.Bytes())
|
|
38
|
+
if err != nil {
|
|
39
|
+
return nil
|
|
40
|
+
}
|
|
41
|
+
var lines []string
|
|
42
|
+
for _, raw := range strings.Split(string(visible), "\n") {
|
|
43
|
+
if line := strings.TrimSuffix(raw, "\r"); strings.Contains(line, predecessorLabel) {
|
|
44
|
+
lines = append(lines, line)
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
switch {
|
|
48
|
+
case len(lines) == 0:
|
|
49
|
+
return nil
|
|
50
|
+
case len(lines) > 1:
|
|
51
|
+
return []string{"eng-review.md holds more than one Predecessor readiness line; rerun /rite-vet and record exactly one"}
|
|
52
|
+
}
|
|
53
|
+
match := predecessorLineRE.FindStringSubmatch(lines[0])
|
|
54
|
+
if match == nil {
|
|
55
|
+
return []string{fmt.Sprintf("malformed %q; rerun /rite-vet and record `%s<slug> <64-hex digest>`", lines[0], predecessorLabel)}
|
|
56
|
+
}
|
|
57
|
+
slug, recorded := match[1], match[2]
|
|
58
|
+
current, err := ReadinessBinding(root, slug)
|
|
59
|
+
if err != nil {
|
|
60
|
+
return []string{fmt.Sprintf("predecessor %s readiness cannot be computed (%v); rerun /rite-vet against its current plan", slug, err)}
|
|
61
|
+
}
|
|
62
|
+
if strings.TrimPrefix(current, readinessBindingLabel) != recorded {
|
|
63
|
+
return []string{fmt.Sprintf("predecessor %s changed its planning inputs since this plan was vetted; rerun /rite-vet to re-check this plan against them and record `%s%s %s`",
|
|
64
|
+
slug, predecessorLabel, slug, strings.TrimPrefix(current, readinessBindingLabel))}
|
|
65
|
+
}
|
|
66
|
+
return nil
|
|
67
|
+
}
|
|
@@ -0,0 +1,270 @@
|
|
|
1
|
+
package lib
|
|
2
|
+
|
|
3
|
+
import (
|
|
4
|
+
"fmt"
|
|
5
|
+
"io"
|
|
6
|
+
"path/filepath"
|
|
7
|
+
"regexp"
|
|
8
|
+
"strconv"
|
|
9
|
+
"strings"
|
|
10
|
+
"unicode/utf8"
|
|
11
|
+
|
|
12
|
+
"github.com/devrites/devrites/internal/anchor"
|
|
13
|
+
"github.com/devrites/devrites/internal/devritespaths"
|
|
14
|
+
"github.com/devrites/devrites/internal/safepath"
|
|
15
|
+
)
|
|
16
|
+
|
|
17
|
+
// anchors.go: deterministic quote anchoring for one reviewer return.
|
|
18
|
+
// agents.md § Result admission has root anchor each Critical/Important row's
|
|
19
|
+
// quote at its cited file:line and its `breaks` quote in the spec or standard it
|
|
20
|
+
// names before the row counts as a finding. This check does that with the same
|
|
21
|
+
// matcher /overhaul admit uses, so no row reaches a repair round on a quote
|
|
22
|
+
// nobody can find.
|
|
23
|
+
//
|
|
24
|
+
// devrites-engine check anchors <slug> <return-file> [--skills-root <dir>]
|
|
25
|
+
//
|
|
26
|
+
// 0 every Critical/Important row anchored (exact or relocated)
|
|
27
|
+
// 2 usage error, workspace or return unreadable
|
|
28
|
+
// 3 blocked: an Unverified or Deferred row, which never drives a repair round
|
|
29
|
+
//
|
|
30
|
+
// A row's site is the first `;`-separated location in its second cell
|
|
31
|
+
// (`path:line[-line]`, or a workspace .md file with no line); its quote is the
|
|
32
|
+
// first backticked span in its observed cell. Paths resolve in the workspace,
|
|
33
|
+
// then the project. Exact match at the cited lines anchors; a quote on exactly
|
|
34
|
+
// one other line relocates; otherwise the row is Unverified (anchor lost or
|
|
35
|
+
// ambiguous). The `breaks "<quote>"` cell must quote spec.md/decisions.md for a
|
|
36
|
+
// spec ID, or the named shipped standard (under --skills-root when a host passes
|
|
37
|
+
// it); with no quote the row is Deferred.
|
|
38
|
+
|
|
39
|
+
// AnchorsUsage is the help and usage-error text for `check anchors`.
|
|
40
|
+
const AnchorsUsage = "usage: devrites-engine check anchors <slug> <return-file> [--skills-root <dir>]"
|
|
41
|
+
|
|
42
|
+
var (
|
|
43
|
+
anchorSiteRE = regexp.MustCompile(`^(\S+?)(?::([0-9]+)(?::[0-9]+)?(?:[-–]([0-9]+))?)?$`)
|
|
44
|
+
anchorSeverityRE = regexp.MustCompile(`(?i)^\W*(critical|important)\b`)
|
|
45
|
+
)
|
|
46
|
+
|
|
47
|
+
type anchorer struct{ root, project, workspace, skillsRoot string }
|
|
48
|
+
|
|
49
|
+
// RunCheckAnchors implements `devrites-engine check anchors`.
|
|
50
|
+
func RunCheckAnchors(root string, args []string, stdout, stderr io.Writer) int {
|
|
51
|
+
var positional []string
|
|
52
|
+
skillsRoot := ""
|
|
53
|
+
for i := 0; i < len(args); i++ {
|
|
54
|
+
if args[i] == "--skills-root" && i+1 < len(args) {
|
|
55
|
+
skillsRoot = args[i+1]
|
|
56
|
+
i++
|
|
57
|
+
continue
|
|
58
|
+
}
|
|
59
|
+
positional = append(positional, args[i])
|
|
60
|
+
}
|
|
61
|
+
if len(positional) != 2 || strings.HasPrefix(positional[0], "-") || strings.HasPrefix(positional[1], "-") {
|
|
62
|
+
fmt.Fprintln(stderr, AnchorsUsage)
|
|
63
|
+
return 2
|
|
64
|
+
}
|
|
65
|
+
args = positional
|
|
66
|
+
slug := args[0]
|
|
67
|
+
workspace, err := devritespaths.ExistingFeatureDirChecked(root, slug)
|
|
68
|
+
if err != nil {
|
|
69
|
+
fmt.Fprintf(stderr, "check anchors: %v\n", err)
|
|
70
|
+
return 2
|
|
71
|
+
}
|
|
72
|
+
raw, err := readBoundedRegularFile(args[1], maxReturnBytes)
|
|
73
|
+
if err != nil {
|
|
74
|
+
fmt.Fprintf(stderr, "check anchors: %s: %v\n", args[1], err)
|
|
75
|
+
return 2
|
|
76
|
+
}
|
|
77
|
+
// The digest lets root confirm it anchored on the candidate the reviewer saw.
|
|
78
|
+
if digest, n, err := CandidateIdentity(root, slug); err == nil {
|
|
79
|
+
fmt.Fprintf(stdout, "check anchors: candidate %s (%d files)\n", digest, n)
|
|
80
|
+
} else {
|
|
81
|
+
fmt.Fprintf(stdout, "check anchors: no candidate (%v); quotes read the live tree\n", err)
|
|
82
|
+
}
|
|
83
|
+
a := anchorer{root: root, project: projectDir(root), workspace: workspace, skillsRoot: skillsRoot}
|
|
84
|
+
counts := map[string]int{}
|
|
85
|
+
rows := 0
|
|
86
|
+
for i, line := range strings.Split(string(raw), "\n") {
|
|
87
|
+
// Fail closed on format drift: a bulleted row or a bold/colon severity is still a blocker row.
|
|
88
|
+
row, ok := strings.CutPrefix(strings.TrimLeft(line, " \t-*•"), "Finding:")
|
|
89
|
+
if !ok {
|
|
90
|
+
continue
|
|
91
|
+
}
|
|
92
|
+
cells := splitFindingCells(row)
|
|
93
|
+
if !anchorSeverityRE.MatchString(cells[0]) {
|
|
94
|
+
continue
|
|
95
|
+
}
|
|
96
|
+
rows++
|
|
97
|
+
status, detail := a.row(cells)
|
|
98
|
+
counts[status]++
|
|
99
|
+
switch claim := strings.TrimSpace(row); status {
|
|
100
|
+
case "Unverified":
|
|
101
|
+
fmt.Fprintf(stdout, "%d: Unverified: %s — %s\n", i+1, claim, detail)
|
|
102
|
+
case "Deferred":
|
|
103
|
+
fmt.Fprintf(stdout, "%d: Deferred: %s — no spec anchor\n", i+1, claim)
|
|
104
|
+
default:
|
|
105
|
+
fmt.Fprintf(stdout, "%d: %s %s\n", i+1, status, detail)
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
summary := fmt.Sprintf("anchored=%d relocated=%d unverified=%d deferred=%d",
|
|
109
|
+
counts["anchored"], counts["relocated"], counts["Unverified"], counts["Deferred"])
|
|
110
|
+
recordMetricNote(root, slug, cursorPhase(root, slug), "anchors", "", summary)
|
|
111
|
+
if counts["Unverified"]+counts["Deferred"] > 0 {
|
|
112
|
+
fmt.Fprintf(stdout, "check anchors: BLOCKED: %d Critical/Important rows, %s; Unverified and Deferred rows never drive a repair round\n", rows, summary)
|
|
113
|
+
return 3
|
|
114
|
+
}
|
|
115
|
+
fmt.Fprintf(stdout, "check anchors: OK: %d Critical/Important rows, %s\n", rows, summary)
|
|
116
|
+
return 0
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
// row classifies one blocker row: anchored, relocated, Unverified or Deferred.
|
|
120
|
+
func (a anchorer) row(cells []string) (status, detail string) {
|
|
121
|
+
if len(cells) < 3 {
|
|
122
|
+
return "Unverified", "missing file:line"
|
|
123
|
+
}
|
|
124
|
+
status, detail = a.site(cells[1], cells[2])
|
|
125
|
+
if status == "Unverified" {
|
|
126
|
+
return status, detail
|
|
127
|
+
}
|
|
128
|
+
if bs, bd := a.breaks(cells[2:]); bs != "anchored" {
|
|
129
|
+
return bs, bd
|
|
130
|
+
}
|
|
131
|
+
return status, detail
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
// site anchors the observed quote at the row's cited location.
|
|
135
|
+
func (a anchorer) site(location, observed string) (status, detail string) {
|
|
136
|
+
cited := strings.TrimSpace(strings.Split(strings.ReplaceAll(location, "`", ""), ";")[0])
|
|
137
|
+
cited, _, _ = strings.Cut(cited, "§")
|
|
138
|
+
cited = strings.TrimSpace(cited)
|
|
139
|
+
m := anchorSiteRE.FindStringSubmatch(cited)
|
|
140
|
+
if m == nil || m[2] == "" && !strings.HasSuffix(m[1], ".md") {
|
|
141
|
+
return "Unverified", "missing file:line"
|
|
142
|
+
}
|
|
143
|
+
_, rest, hasQuote := strings.Cut(observed, "`")
|
|
144
|
+
quote, _, closed := strings.Cut(rest, "`")
|
|
145
|
+
if !hasQuote || !closed || strings.TrimSpace(quote) == "" {
|
|
146
|
+
return "Unverified", "missing quote"
|
|
147
|
+
}
|
|
148
|
+
lines, err := a.lines(m[1])
|
|
149
|
+
if err != nil {
|
|
150
|
+
return "Unverified", "anchor lost: " + err.Error()
|
|
151
|
+
}
|
|
152
|
+
if m[2] != "" {
|
|
153
|
+
s, _ := strconv.Atoi(m[2])
|
|
154
|
+
e := s
|
|
155
|
+
if m[3] != "" {
|
|
156
|
+
e, _ = strconv.Atoi(m[3])
|
|
157
|
+
}
|
|
158
|
+
if 1 <= s && s <= e && e <= len(lines) {
|
|
159
|
+
switch anchor.At(lines, s, e, quote) {
|
|
160
|
+
case anchor.Found:
|
|
161
|
+
return "anchored", cited
|
|
162
|
+
case anchor.TooShort:
|
|
163
|
+
return "Unverified", fmt.Sprintf("anchor ambiguous: quote under %d characters; quote the whole line", anchor.MinRunes)
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
// shortcut: relocation searches single lines; a quote spanning lines anchors only at its cited range.
|
|
168
|
+
switch hits := anchor.Find(lines, quote); {
|
|
169
|
+
case len(hits) == 1 && m[2] == "":
|
|
170
|
+
return "anchored", fmt.Sprintf("%s:%d", m[1], hits[0])
|
|
171
|
+
case len(hits) == 1:
|
|
172
|
+
return "relocated", fmt.Sprintf("%s -> %s:%d", cited, m[1], hits[0])
|
|
173
|
+
case len(hits) == 0:
|
|
174
|
+
return "Unverified", "anchor lost"
|
|
175
|
+
}
|
|
176
|
+
return "Unverified", "anchor ambiguous"
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
// breaks anchors the `breaks <anchor> "<quote>"` cell in the spec or standard it names.
|
|
180
|
+
func (a anchorer) breaks(cells []string) (status, detail string) {
|
|
181
|
+
for _, cell := range cells {
|
|
182
|
+
cited, ok := strings.CutPrefix(strings.TrimSpace(cell), "breaks ")
|
|
183
|
+
if !ok {
|
|
184
|
+
continue
|
|
185
|
+
}
|
|
186
|
+
open := strings.IndexAny(cited, "\"“")
|
|
187
|
+
closing := strings.LastIndexAny(cited, "\"”")
|
|
188
|
+
if open < 0 || closing <= open {
|
|
189
|
+
return "Deferred", ""
|
|
190
|
+
}
|
|
191
|
+
_, size := utf8.DecodeRuneInString(cited[open:])
|
|
192
|
+
name, quote := cited[:open], cited[open+size:closing]
|
|
193
|
+
var paths []string
|
|
194
|
+
switch base := mdName(name); base {
|
|
195
|
+
case "":
|
|
196
|
+
paths = []string{filepath.Join(a.workspace, "spec.md"), filepath.Join(a.workspace, "decisions.md")}
|
|
197
|
+
case "spec.md", "decisions.md":
|
|
198
|
+
paths = []string{filepath.Join(a.workspace, base)}
|
|
199
|
+
default:
|
|
200
|
+
if skills, err := resolveSkillsRoot(a.root, a.skillsRoot); err == nil {
|
|
201
|
+
paths = []string{filepath.Join(skills, "devrites-lib", "reference", "standards", base)}
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
var text []string
|
|
205
|
+
for _, p := range paths {
|
|
206
|
+
if raw, err := readBoundedRegularFile(p, workspaceArtifactLimit); err == nil {
|
|
207
|
+
text = append(text, anchor.Lines(raw)...)
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
if len(text) == 0 {
|
|
211
|
+
return "Unverified", fmt.Sprintf("breaks anchor lost: %s is unreadable", strings.TrimSpace(name))
|
|
212
|
+
}
|
|
213
|
+
// One window over the whole text, so a quote wrapped across lines matches.
|
|
214
|
+
switch anchor.At([]string{strings.Join(text, " ")}, 1, 1, quote) {
|
|
215
|
+
case anchor.NotFound:
|
|
216
|
+
return "Unverified", "breaks anchor lost"
|
|
217
|
+
case anchor.TooShort:
|
|
218
|
+
return "Unverified", fmt.Sprintf("breaks anchor ambiguous: quote under %d characters", anchor.MinRunes)
|
|
219
|
+
}
|
|
220
|
+
return "anchored", ""
|
|
221
|
+
}
|
|
222
|
+
return "Deferred", ""
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
// lines reads a cited file from the workspace, else the project, never outside them.
|
|
226
|
+
func (a anchorer) lines(rel string) ([]string, error) {
|
|
227
|
+
for _, base := range []string{a.workspace, a.project} {
|
|
228
|
+
full := rel
|
|
229
|
+
if !filepath.IsAbs(rel) {
|
|
230
|
+
full = filepath.Join(base, filepath.FromSlash(rel))
|
|
231
|
+
}
|
|
232
|
+
if !safepath.WithinResolved(full, base) {
|
|
233
|
+
continue
|
|
234
|
+
}
|
|
235
|
+
if raw, err := readBoundedRegularFile(full, maxCandidateFileBytes); err == nil {
|
|
236
|
+
return anchor.Lines(raw), nil
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
return nil, fmt.Errorf("%s is not a file under the workspace or project", rel)
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
// mdName is the base name of the first .md file a breaks anchor names, or "".
|
|
243
|
+
func mdName(name string) string {
|
|
244
|
+
for _, field := range strings.Fields(strings.ReplaceAll(name, "`", " ")) {
|
|
245
|
+
if field = strings.TrimRight(field, ",;:"); strings.HasSuffix(field, ".md") {
|
|
246
|
+
return filepath.Base(field)
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
return ""
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
// splitFindingCells splits a Finding: row on "|" outside backticked code, so a
|
|
253
|
+
// quoted `a || b` stays one cell.
|
|
254
|
+
func splitFindingCells(row string) []string {
|
|
255
|
+
var cells []string
|
|
256
|
+
var b strings.Builder
|
|
257
|
+
code := false
|
|
258
|
+
for _, r := range row {
|
|
259
|
+
switch {
|
|
260
|
+
case r == '`':
|
|
261
|
+
code = !code
|
|
262
|
+
case r == '|' && !code:
|
|
263
|
+
cells = append(cells, b.String())
|
|
264
|
+
b.Reset()
|
|
265
|
+
continue
|
|
266
|
+
}
|
|
267
|
+
b.WriteRune(r)
|
|
268
|
+
}
|
|
269
|
+
return append(cells, b.String())
|
|
270
|
+
}
|
|
@@ -361,7 +361,8 @@ func applyHunks(base string, hunks []candidateHunk) (string, []string) {
|
|
|
361
361
|
// checkBundleResult rejects an outcome the root would otherwise discover only
|
|
362
362
|
// at Vet: a tracked ID that vanished from every touched file without being
|
|
363
363
|
// listed in retired_ids, a new tasks.md graph problem, or a budgeted artifact
|
|
364
|
-
// that grew into material overshoot without a
|
|
364
|
+
// that grew into material overshoot without a covering
|
|
365
|
+
// `Budget override: <=N lines; <reason>` line.
|
|
365
366
|
func checkBundleResult(targets []*bundleTarget, retired map[string]bool) []string {
|
|
366
367
|
var problems []string
|
|
367
368
|
beforeIDs, afterIDs := map[string]bool{}, map[string]bool{}
|
|
@@ -69,29 +69,38 @@ func loadCandidateIdentity(root, slug string) (candidateIdentity, error) {
|
|
|
69
69
|
return candidateIdentity{}, fmt.Errorf("candidate manifest %s: %w; refresh touched-files.md", manifestPath, err)
|
|
70
70
|
}
|
|
71
71
|
project := projectDir(root)
|
|
72
|
+
if err := validateCandidateRows(project, rows); err != nil {
|
|
73
|
+
return candidateIdentity{}, err
|
|
74
|
+
}
|
|
75
|
+
digest, err := hashCandidate(project, rows)
|
|
76
|
+
if err != nil {
|
|
77
|
+
return candidateIdentity{}, err
|
|
78
|
+
}
|
|
79
|
+
return candidateIdentity{digest: digest, rows: rows}, nil
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
// validateCandidateRows checks every row against the filesystem and the
|
|
83
|
+
// per-file, aggregate, and distinct-object bounds before anything is hashed.
|
|
84
|
+
func validateCandidateRows(project string, rows []candidateRow) error {
|
|
72
85
|
var total int64
|
|
73
86
|
for i := range rows {
|
|
74
87
|
if err := validateCandidateRow(project, &rows[i]); err != nil {
|
|
75
|
-
return
|
|
88
|
+
return fmt.Errorf("candidate %q: %w", rows[i].path, err)
|
|
76
89
|
}
|
|
77
90
|
if rows[i].state == "present" {
|
|
78
91
|
// ponytail: the 4096-row cap bounds portable pairwise identity checks; index native file IDs if that cap grows.
|
|
79
92
|
for prior := range rows[:i] {
|
|
80
93
|
if rows[prior].state == "present" && os.SameFile(rows[prior].info, rows[i].info) {
|
|
81
|
-
return
|
|
94
|
+
return fmt.Errorf("candidate %q: same filesystem object as candidate %q", rows[i].path, rows[prior].path)
|
|
82
95
|
}
|
|
83
96
|
}
|
|
84
97
|
if rows[i].size > maxCandidateTotalBytes-total {
|
|
85
|
-
return
|
|
98
|
+
return errors.New("candidate present files exceed 256 MiB aggregate limit")
|
|
86
99
|
}
|
|
87
100
|
total += rows[i].size
|
|
88
101
|
}
|
|
89
102
|
}
|
|
90
|
-
|
|
91
|
-
if err != nil {
|
|
92
|
-
return candidateIdentity{}, err
|
|
93
|
-
}
|
|
94
|
-
return candidateIdentity{digest: digest, rows: rows}, nil
|
|
103
|
+
return nil
|
|
95
104
|
}
|
|
96
105
|
|
|
97
106
|
func readBoundedRegularFile(name string, limit int64) ([]byte, error) {
|
|
@@ -15,6 +15,7 @@ import (
|
|
|
15
15
|
"strings"
|
|
16
16
|
"time"
|
|
17
17
|
|
|
18
|
+
"github.com/devrites/devrites/internal/devritespaths"
|
|
18
19
|
"github.com/devrites/devrites/internal/parallel"
|
|
19
20
|
"github.com/devrites/devrites/internal/state"
|
|
20
21
|
)
|
|
@@ -37,10 +38,13 @@ const (
|
|
|
37
38
|
|
|
38
39
|
const claimUsage = `usage: devrites-engine claim <add|release|list|check> ...
|
|
39
40
|
|
|
40
|
-
claim add --session <id> [--ttl <minutes>] [--reason <s>] <path>...
|
|
41
|
+
claim add --session <id> [--ttl <minutes>] [--reason <s>] [--workspace <slug>] <path>...
|
|
41
42
|
claim release --session <id> --id <claim-id>
|
|
42
43
|
claim list [--session <id>] [--all]
|
|
43
|
-
claim check [--session <id>] <path>...
|
|
44
|
+
claim check [--session <id>] [--workspace <slug>] <path>...
|
|
45
|
+
|
|
46
|
+
--workspace leases a whole feature workspace, so two root sessions never work
|
|
47
|
+
one workspace at once (sequence lookahead).
|
|
44
48
|
`
|
|
45
49
|
|
|
46
50
|
type claimRecord struct {
|
|
@@ -184,6 +188,42 @@ func normalizeClaimPaths(raw []string) ([]string, error) {
|
|
|
184
188
|
return out, nil
|
|
185
189
|
}
|
|
186
190
|
|
|
191
|
+
// workspaceClaimPath is the lease path for one feature workspace. Only
|
|
192
|
+
// --workspace reaches it; a positional .devrites path stays refused.
|
|
193
|
+
func workspaceClaimPath(slug string) (string, error) {
|
|
194
|
+
if !devritespaths.ValidSlug(slug) {
|
|
195
|
+
return "", fmt.Errorf("--workspace expects a feature slug, got %q", slug)
|
|
196
|
+
}
|
|
197
|
+
return ".devrites/work/" + slug, nil
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
// claimTargets normalizes positional paths and adds each --workspace lease.
|
|
201
|
+
func claimTargets(raw, workspaces []string) ([]string, error) {
|
|
202
|
+
if len(workspaces) == 0 {
|
|
203
|
+
return normalizeClaimPaths(raw)
|
|
204
|
+
}
|
|
205
|
+
var out []string
|
|
206
|
+
if len(raw) > 0 {
|
|
207
|
+
paths, err := normalizeClaimPaths(raw)
|
|
208
|
+
if err != nil {
|
|
209
|
+
return nil, err
|
|
210
|
+
}
|
|
211
|
+
out = paths
|
|
212
|
+
}
|
|
213
|
+
for _, slug := range workspaces {
|
|
214
|
+
p, err := workspaceClaimPath(slug)
|
|
215
|
+
if err != nil {
|
|
216
|
+
return nil, err
|
|
217
|
+
}
|
|
218
|
+
if slices.Contains(out, p) {
|
|
219
|
+
return nil, fmt.Errorf("duplicate workspace %q", slug)
|
|
220
|
+
}
|
|
221
|
+
out = append(out, p)
|
|
222
|
+
}
|
|
223
|
+
sort.Strings(out)
|
|
224
|
+
return out, nil
|
|
225
|
+
}
|
|
226
|
+
|
|
187
227
|
func validSession(s string) bool {
|
|
188
228
|
if s == "" || len(s) > 128 {
|
|
189
229
|
return false
|
|
@@ -247,12 +287,15 @@ func newClaimID() string {
|
|
|
247
287
|
func claimAdd(root string, args []string, stdout, stderr io.Writer) int {
|
|
248
288
|
session, reason := "", ""
|
|
249
289
|
ttl := claimDefaultTTL
|
|
250
|
-
var raw []string
|
|
290
|
+
var raw, workspaces []string
|
|
251
291
|
for i := 0; i < len(args); i++ {
|
|
252
292
|
switch args[i] {
|
|
253
293
|
case "--session":
|
|
254
294
|
session = argAt(args, i+1)
|
|
255
295
|
i++
|
|
296
|
+
case "--workspace":
|
|
297
|
+
workspaces = append(workspaces, argAt(args, i+1))
|
|
298
|
+
i++
|
|
256
299
|
case "--reason":
|
|
257
300
|
reason = argAt(args, i+1)
|
|
258
301
|
i++
|
|
@@ -272,45 +315,56 @@ func claimAdd(root string, args []string, stdout, stderr io.Writer) int {
|
|
|
272
315
|
raw = append(raw, args[i])
|
|
273
316
|
}
|
|
274
317
|
}
|
|
318
|
+
_, code := addClaimTargets(root, session, reason, ttl, raw, workspaces, stdout, stderr)
|
|
319
|
+
return code
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
// addClaim records one claim and returns its id. It refuses, writing nothing,
|
|
323
|
+
// while a live foreign session holds an overlapping path.
|
|
324
|
+
func addClaim(root, session, reason string, ttl int, raw []string, stdout, stderr io.Writer) (string, int) {
|
|
325
|
+
return addClaimTargets(root, session, reason, ttl, raw, nil, stdout, stderr)
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
func addClaimTargets(root, session, reason string, ttl int, raw, workspaces []string, stdout, stderr io.Writer) (string, int) {
|
|
275
329
|
if !validSession(session) {
|
|
276
330
|
fmt.Fprintln(stderr, "claim: --session is required (1-128 chars: letters, digits, - _ . : /)")
|
|
277
|
-
return 2
|
|
331
|
+
return "", 2
|
|
278
332
|
}
|
|
279
|
-
paths, err :=
|
|
333
|
+
paths, err := claimTargets(raw, workspaces)
|
|
280
334
|
if err != nil {
|
|
281
335
|
fmt.Fprintf(stderr, "claim: %v\n", err)
|
|
282
|
-
return 2
|
|
336
|
+
return "", 2
|
|
283
337
|
}
|
|
284
338
|
path := claimsPath(root)
|
|
285
339
|
// Hold the ledger lock across read, conflict check, and append so two
|
|
286
340
|
// sessions cannot both pass the check and claim the same path.
|
|
287
|
-
code := 0
|
|
341
|
+
id, code := "", 0
|
|
288
342
|
if err := state.WithLock(path+".lock", func() error {
|
|
289
|
-
code = claimAddLocked(path, session, reason, ttl, paths, stdout, stderr)
|
|
343
|
+
id, code = claimAddLocked(path, session, reason, ttl, paths, stdout, stderr)
|
|
290
344
|
return nil
|
|
291
345
|
}); err != nil {
|
|
292
346
|
fmt.Fprintf(stderr, "claim: %v\n", err)
|
|
293
|
-
return 2
|
|
347
|
+
return "", 2
|
|
294
348
|
}
|
|
295
|
-
return code
|
|
349
|
+
return id, code
|
|
296
350
|
}
|
|
297
351
|
|
|
298
|
-
func claimAddLocked(path, session, reason string, ttl int, paths []string, stdout, stderr io.Writer) int {
|
|
352
|
+
func claimAddLocked(path, session, reason string, ttl int, paths []string, stdout, stderr io.Writer) (string, int) {
|
|
299
353
|
latest, order, bad, err := readClaims(path)
|
|
300
354
|
if err != nil {
|
|
301
355
|
fmt.Fprintf(stderr, "claim: %v\n", err)
|
|
302
|
-
return 2
|
|
356
|
+
return "", 2
|
|
303
357
|
}
|
|
304
358
|
if bad > 0 {
|
|
305
359
|
fmt.Fprintf(stderr, unparsedLedgerMsg, bad)
|
|
306
|
-
return 2
|
|
360
|
+
return "", 2
|
|
307
361
|
}
|
|
308
362
|
now := time.Now().UTC()
|
|
309
363
|
probe := newHolderProbe()
|
|
310
364
|
conflicts := claimConflicts(probe.withoutGone(liveClaims(latest, order, now)), session, paths)
|
|
311
365
|
if len(conflicts) > 0 {
|
|
312
366
|
printConflicts(stderr, conflicts)
|
|
313
|
-
return 3
|
|
367
|
+
return "", 3
|
|
314
368
|
}
|
|
315
369
|
rec := &claimRecord{
|
|
316
370
|
ID: newClaimID(),
|
|
@@ -325,10 +379,10 @@ func claimAddLocked(path, session, reason string, ttl int, paths []string, stdou
|
|
|
325
379
|
}
|
|
326
380
|
if err := appendClaim(path, rec); err != nil {
|
|
327
381
|
fmt.Fprintf(stderr, "claim: %v\n", err)
|
|
328
|
-
return 2
|
|
382
|
+
return "", 2
|
|
329
383
|
}
|
|
330
384
|
fmt.Fprintf(stdout, "claim: %s claimed %d path(s) until %s\n", rec.ID, len(paths), rec.ExpiresAt)
|
|
331
|
-
return 0
|
|
385
|
+
return rec.ID, 0
|
|
332
386
|
}
|
|
333
387
|
|
|
334
388
|
func claimRelease(root string, args []string, stdout, stderr io.Writer) int {
|
|
@@ -350,33 +404,38 @@ func claimRelease(root string, args []string, stdout, stderr io.Writer) int {
|
|
|
350
404
|
fmt.Fprintln(stderr, "claim: release requires --session and --id")
|
|
351
405
|
return 2
|
|
352
406
|
}
|
|
353
|
-
|
|
354
|
-
latest, _, _, err := readClaims(path)
|
|
407
|
+
n, err := releaseClaim(root, session, id)
|
|
355
408
|
if err != nil {
|
|
356
409
|
fmt.Fprintf(stderr, "claim: %v\n", err)
|
|
357
410
|
return 2
|
|
358
411
|
}
|
|
412
|
+
fmt.Fprintf(stdout, "claim: %s released %d path(s)\n", id, n)
|
|
413
|
+
return 0
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
// releaseClaim marks session's claim id released and returns its path count.
|
|
417
|
+
func releaseClaim(root, session, id string) (int, error) {
|
|
418
|
+
path := claimsPath(root)
|
|
419
|
+
latest, _, _, err := readClaims(path)
|
|
420
|
+
if err != nil {
|
|
421
|
+
return 0, err
|
|
422
|
+
}
|
|
359
423
|
rec, ok := latest[id]
|
|
360
424
|
if !ok {
|
|
361
|
-
fmt.
|
|
362
|
-
return 2
|
|
425
|
+
return 0, fmt.Errorf("unknown claim %q", id)
|
|
363
426
|
}
|
|
364
427
|
if rec.Session != session {
|
|
365
|
-
fmt.
|
|
366
|
-
return 2
|
|
428
|
+
return 0, fmt.Errorf("%q belongs to session %q, not %q", id, rec.Session, session)
|
|
367
429
|
}
|
|
368
430
|
if rec.Released {
|
|
369
|
-
fmt.
|
|
370
|
-
return 2
|
|
431
|
+
return 0, fmt.Errorf("%q already released", id)
|
|
371
432
|
}
|
|
372
433
|
released := *rec
|
|
373
434
|
released.Released = true
|
|
374
435
|
if err := appendClaim(path, &released); err != nil {
|
|
375
|
-
|
|
376
|
-
return 2
|
|
436
|
+
return 0, err
|
|
377
437
|
}
|
|
378
|
-
|
|
379
|
-
return 0
|
|
438
|
+
return len(rec.Paths), nil
|
|
380
439
|
}
|
|
381
440
|
|
|
382
441
|
func claimList(root string, args []string, stdout, stderr io.Writer) int {
|
|
@@ -401,18 +460,18 @@ func claimList(root string, args []string, stdout, stderr io.Writer) int {
|
|
|
401
460
|
}
|
|
402
461
|
now := time.Now().UTC()
|
|
403
462
|
probe := newHolderProbe()
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
}
|
|
410
|
-
}
|
|
411
|
-
printed := 0
|
|
412
|
-
for _, rec := range rows {
|
|
463
|
+
// Bare list keeps every unreleased claim (expired and dead rows decide
|
|
464
|
+
// who may take a path) and folds the released history into one count.
|
|
465
|
+
printed, released := 0, 0
|
|
466
|
+
for _, id := range order {
|
|
467
|
+
rec := latest[id]
|
|
413
468
|
if rec == nil || (session != "" && rec.Session != session) {
|
|
414
469
|
continue
|
|
415
470
|
}
|
|
471
|
+
if rec.Released && !all {
|
|
472
|
+
released++
|
|
473
|
+
continue
|
|
474
|
+
}
|
|
416
475
|
state := "live"
|
|
417
476
|
if rec.Released {
|
|
418
477
|
state = "released"
|
|
@@ -431,6 +490,9 @@ func claimList(root string, args []string, stdout, stderr io.Writer) int {
|
|
|
431
490
|
if printed == 0 {
|
|
432
491
|
fmt.Fprintln(stdout, "claim: no claims")
|
|
433
492
|
}
|
|
493
|
+
if released > 0 {
|
|
494
|
+
fmt.Fprintf(stdout, "claim: %d released (use --all)\n", released)
|
|
495
|
+
}
|
|
434
496
|
if bad > 0 {
|
|
435
497
|
fmt.Fprintf(stdout, "claim: %d unparsed ledger line(s)\n", bad)
|
|
436
498
|
}
|
|
@@ -439,12 +501,15 @@ func claimList(root string, args []string, stdout, stderr io.Writer) int {
|
|
|
439
501
|
|
|
440
502
|
func claimCheck(root string, args []string, stdout, stderr io.Writer) int {
|
|
441
503
|
session := ""
|
|
442
|
-
var raw []string
|
|
504
|
+
var raw, workspaces []string
|
|
443
505
|
for i := 0; i < len(args); i++ {
|
|
444
506
|
switch args[i] {
|
|
445
507
|
case "--session":
|
|
446
508
|
session = argAt(args, i+1)
|
|
447
509
|
i++
|
|
510
|
+
case "--workspace":
|
|
511
|
+
workspaces = append(workspaces, argAt(args, i+1))
|
|
512
|
+
i++
|
|
448
513
|
default:
|
|
449
514
|
if strings.HasPrefix(args[i], "-") {
|
|
450
515
|
fmt.Fprintf(stderr, "claim: unknown flag %q\n", args[i])
|
|
@@ -453,7 +518,7 @@ func claimCheck(root string, args []string, stdout, stderr io.Writer) int {
|
|
|
453
518
|
raw = append(raw, args[i])
|
|
454
519
|
}
|
|
455
520
|
}
|
|
456
|
-
paths, err :=
|
|
521
|
+
paths, err := claimTargets(raw, workspaces)
|
|
457
522
|
if err != nil {
|
|
458
523
|
fmt.Fprintf(stderr, "claim: %v\n", err)
|
|
459
524
|
return 2
|