devrites 6.9.6 → 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 +25 -0
- package/README.md +10 -5
- package/SECURITY.md +3 -3
- 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/skills.md +1 -1
- 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-browser-proof/SKILL.md +33 -13
- package/pack/.claude/skills/devrites-browser-proof/reference/browser-performance.md +2 -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-harness/SKILL.md +2 -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-polish/reference/harden-checklist.md +1 -1
- package/pack/.claude/skills/rite-prove/SKILL.md +1 -1
- package/pack/.claude/skills/rite-prove/reference/anti-patterns.md +1 -1
- package/pack/.claude/skills/rite-prove/reference/proof-ladder.md +16 -5
- 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-browser-proof/SKILL.md +33 -13
- package/pack/generated/claude/skills/devrites-browser-proof/reference/browser-performance.md +2 -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-harness/SKILL.md +2 -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-polish/reference/harden-checklist.md +1 -1
- package/pack/generated/claude/skills/rite-prove/SKILL.md +1 -1
- package/pack/generated/claude/skills/rite-prove/reference/anti-patterns.md +1 -1
- package/pack/generated/claude/skills/rite-prove/reference/proof-ladder.md +16 -5
- 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-browser-proof/SKILL.md +33 -13
- package/pack/generated/codex/skills/devrites-browser-proof/reference/browser-performance.md +2 -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-harness/SKILL.md +2 -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-polish/reference/harden-checklist.md +1 -1
- package/pack/generated/codex/skills/rite-prove/SKILL.md +1 -1
- package/pack/generated/codex/skills/rite-prove/reference/anti-patterns.md +1 -1
- package/pack/generated/codex/skills/rite-prove/reference/proof-ladder.md +16 -5
- 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-browser-proof/SKILL.md +33 -13
- package/pack/generated/devin/skills/devrites-browser-proof/reference/browser-performance.md +2 -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-harness/SKILL.md +2 -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-polish/reference/harden-checklist.md +1 -1
- package/pack/generated/devin/skills/rite-prove/SKILL.md +1 -1
- package/pack/generated/devin/skills/rite-prove/reference/anti-patterns.md +1 -1
- package/pack/generated/devin/skills/rite-prove/reference/proof-ladder.md +16 -5
- 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-browser-proof/SKILL.md +33 -13
- package/pack/generated/omp/skills/devrites-browser-proof/reference/browser-performance.md +2 -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-harness/SKILL.md +2 -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-polish/reference/harden-checklist.md +1 -1
- package/pack/generated/omp/skills/rite-prove/SKILL.md +1 -1
- package/pack/generated/omp/skills/rite-prove/reference/anti-patterns.md +1 -1
- package/pack/generated/omp/skills/rite-prove/reference/proof-ladder.md +16 -5
- 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-browser-proof/SKILL.md +33 -13
- package/pack/generated/pi/skills/devrites-browser-proof/reference/browser-performance.md +2 -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-harness/SKILL.md +2 -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-polish/reference/harden-checklist.md +1 -1
- package/pack/generated/pi/skills/rite-prove/SKILL.md +1 -1
- package/pack/generated/pi/skills/rite-prove/reference/anti-patterns.md +1 -1
- package/pack/generated/pi/skills/rite-prove/reference/proof-ladder.md +16 -5
- 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
|
@@ -1,9 +1,13 @@
|
|
|
1
1
|
package lib
|
|
2
2
|
|
|
3
3
|
import (
|
|
4
|
+
"errors"
|
|
4
5
|
"fmt"
|
|
6
|
+
"os"
|
|
5
7
|
"regexp"
|
|
6
8
|
"strings"
|
|
9
|
+
|
|
10
|
+
"github.com/devrites/devrites/internal/acceptance"
|
|
7
11
|
)
|
|
8
12
|
|
|
9
13
|
// maxContractBytes bounds a wright contract read; packets stay <= 64 KiB.
|
|
@@ -22,11 +26,43 @@ var (
|
|
|
22
26
|
// allowedAfterRE marks a forbid match that is about not weakening tests,
|
|
23
27
|
// not about skipping their execution ("no tests weakened or deleted").
|
|
24
28
|
allowedAfterRE = regexp.MustCompile(`(?i)^[\s/,a-z-]{0,24}\b(?:weaken|delet|remov|disabl|skipp|xfail|loosen)`)
|
|
29
|
+
// agentContractRE names an installed DevRites role contract on any host.
|
|
30
|
+
agentContractRE = regexp.MustCompile(`[\w./~-]*agents/devrites-[a-z0-9-]+\.(?:md|toml)\b`)
|
|
31
|
+
// readWordRE is a read instruction ("Read first", "read:"), not "read-only".
|
|
32
|
+
readWordRE = regexp.MustCompile(`(?i)\bread(?:\s|:|$)`)
|
|
33
|
+
// blankLineRE ends the `Writer-safe checks:` block.
|
|
34
|
+
blankLineRE = regexp.MustCompile(`\n[ \t]*\r?\n`)
|
|
35
|
+
// sectionHeadRE is a Markdown heading or a "Label:" line opening a list.
|
|
36
|
+
sectionHeadRE = regexp.MustCompile(`^\s*(?:#{1,6}\s.*|[^:]*:[\s*]*)$`)
|
|
25
37
|
)
|
|
26
38
|
|
|
39
|
+
// lintContractRead refuses a packet line that tells the agent to read an
|
|
40
|
+
// installed role contract, on the line itself or under a "Read ..." heading or
|
|
41
|
+
// label: a named agent already has it as its system prompt. Canonical sources
|
|
42
|
+
// under pack/ are reviewable files, not the agent's own contract.
|
|
43
|
+
func lintContractRead(kind, path string, raw []byte) error {
|
|
44
|
+
inRead := false
|
|
45
|
+
for i, line := range strings.Split(string(raw), "\n") {
|
|
46
|
+
if sectionHeadRE.MatchString(line) {
|
|
47
|
+
inRead = readWordRE.MatchString(line)
|
|
48
|
+
}
|
|
49
|
+
if !inRead && !readWordRE.MatchString(line) {
|
|
50
|
+
continue
|
|
51
|
+
}
|
|
52
|
+
for _, ref := range agentContractRE.FindAllString(line, -1) {
|
|
53
|
+
if !strings.Contains(ref, "pack/") {
|
|
54
|
+
return fmt.Errorf("%s %s:%d tells the agent to read a role contract (%q); a named agent already has its contract as its system prompt, and context --role names it in the bundle — drop the line",
|
|
55
|
+
kind, path, i+1, ref)
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
return nil
|
|
60
|
+
}
|
|
61
|
+
|
|
27
62
|
// lintWrightContract refuses a build wright contract that forbids the wright's
|
|
28
|
-
// own writer-safe verification
|
|
29
|
-
//
|
|
63
|
+
// own writer-safe verification, names none, or tells the wright to read its
|
|
64
|
+
// installed role contract, so a blind round is rejected before launch rather
|
|
65
|
+
// than discovered after the wright returns.
|
|
30
66
|
func lintWrightContract(path string) error {
|
|
31
67
|
if path == "" {
|
|
32
68
|
return fmt.Errorf("a build wright wave needs --contract <file> holding the exact wright contract (with a `Writer-safe checks:` line)")
|
|
@@ -44,8 +80,52 @@ func lintWrightContract(path string) error {
|
|
|
44
80
|
path, i+1, strings.TrimSpace(line[loc[0]:loc[1]]))
|
|
45
81
|
}
|
|
46
82
|
}
|
|
83
|
+
if err := lintContractRead("wright contract", path, raw); err != nil {
|
|
84
|
+
return err
|
|
85
|
+
}
|
|
47
86
|
if !writerSafeLineRE.Match(raw) {
|
|
48
87
|
return fmt.Errorf("wright contract %s names no `Writer-safe checks:` line; list the syntax/type/lint, unit/self-check and narrow smoke commands the wright runs before returning", path)
|
|
49
88
|
}
|
|
50
89
|
return nil
|
|
51
90
|
}
|
|
91
|
+
|
|
92
|
+
// lintWrightContractFor is lintWrightContract plus the feature's gates.md: when
|
|
93
|
+
// the ledger has a live `RUN: writer` row, the contract's `Writer-safe checks:`
|
|
94
|
+
// block must name `gates precheck`, so the wright runs those rows and `check
|
|
95
|
+
// windows` before returning instead of a repair round finding them after. An
|
|
96
|
+
// absent gates.md requires nothing.
|
|
97
|
+
func lintWrightContractFor(root, slug, path string) error {
|
|
98
|
+
if err := lintWrightContract(path); err != nil {
|
|
99
|
+
return err
|
|
100
|
+
}
|
|
101
|
+
ledger, err := readWorkspaceArtifact(root, slug, acceptance.GatesFile)
|
|
102
|
+
if errors.Is(err, os.ErrNotExist) {
|
|
103
|
+
return nil
|
|
104
|
+
}
|
|
105
|
+
if err != nil {
|
|
106
|
+
return fmt.Errorf("wright contract %s: %w", path, err)
|
|
107
|
+
}
|
|
108
|
+
writers := acceptance.ParseLedger(string(ledger)).WriterGates()
|
|
109
|
+
if len(writers) == 0 {
|
|
110
|
+
return nil
|
|
111
|
+
}
|
|
112
|
+
raw, err := readBoundedRegularFile(path, maxContractBytes)
|
|
113
|
+
if err != nil {
|
|
114
|
+
return fmt.Errorf("wright contract %s: %w", path, err)
|
|
115
|
+
}
|
|
116
|
+
// The block runs from the `Writer-safe checks:` line to the first blank
|
|
117
|
+
// line after its first listed check.
|
|
118
|
+
loc := writerSafeLineRE.FindIndex(raw)
|
|
119
|
+
if loc == nil {
|
|
120
|
+
return fmt.Errorf("wright contract %s changed while it was linted", path)
|
|
121
|
+
}
|
|
122
|
+
block := raw[loc[0]:]
|
|
123
|
+
if end := blankLineRE.FindIndex(block[loc[1]-1-loc[0]:]); end != nil {
|
|
124
|
+
block = block[:loc[1]-1-loc[0]+end[0]]
|
|
125
|
+
}
|
|
126
|
+
if !strings.Contains(string(block), "gates precheck") {
|
|
127
|
+
return fmt.Errorf("wright contract %s: %s marks %s `RUN: writer`, so its `Writer-safe checks:` must include `devrites-engine gates precheck %s --worktree <path>`; the wright runs those rows and `check windows` and fixes failures before returning",
|
|
128
|
+
path, acceptance.GatesFile, writers[0].ID, slug)
|
|
129
|
+
}
|
|
130
|
+
return nil
|
|
131
|
+
}
|
|
@@ -1,9 +1,16 @@
|
|
|
1
1
|
package lib
|
|
2
2
|
|
|
3
3
|
import (
|
|
4
|
+
"errors"
|
|
4
5
|
"fmt"
|
|
6
|
+
"os"
|
|
7
|
+
"path/filepath"
|
|
5
8
|
"regexp"
|
|
9
|
+
"slices"
|
|
10
|
+
"strconv"
|
|
6
11
|
"strings"
|
|
12
|
+
|
|
13
|
+
"github.com/devrites/devrites/internal/devritespaths"
|
|
7
14
|
)
|
|
8
15
|
|
|
9
16
|
// seedingRE matches packet text that hands a reviewer a conclusion instead of
|
|
@@ -12,20 +19,105 @@ import (
|
|
|
12
19
|
var seedingRE = regexp.MustCompile(`\b[A-Z][A-Z0-9]*(?:-[A-Z0-9]+)+-PASS\b` +
|
|
13
20
|
`|(?i:\bno-findings\b)` +
|
|
14
21
|
`|(?i:^\s*(?:outcome|counts|verdict)\s*:\s*[^<\s])` +
|
|
15
|
-
`|(?i:\b(?:already|previously)\s+(?:passed|passes|green|printed|verified|approved|clean)\b)` +
|
|
16
|
-
`|(?i:\b(?:critical|important)\s*[:=]?\s*0\b)`
|
|
22
|
+
`|(?i:\b(?:already|previously)\s+(?:passed|passes|green|printed|verified|approved|clean|fixed|closed|resolved)\b)` +
|
|
23
|
+
`|(?i:\b(?:critical|important)\s*[:=]?\s*0\b)` +
|
|
24
|
+
// Phrasings observed in voided reviews: a parent/sibling report, a passed
|
|
25
|
+
// check, a returned severity or finding, a green outcome, a return file.
|
|
26
|
+
`|(?i:\b(?:parent|root|sibling|drafter|wright|implementer)(?:\s+self-attack)?\s+(?:observed|reports?|reported|concluded|confirmed|exposes|exposed)\b)` +
|
|
27
|
+
`|(?i:\b(?:check|gate|scope|tests?)\s+passed\b)` +
|
|
28
|
+
`|(?i:\breturned\s+(?:critical|important|minor|findings|no-findings)\b)` +
|
|
29
|
+
`|(?i:\b(?:critical|important|minor)\s+F\d+\b)` +
|
|
30
|
+
`|(?i:\bclosed\s+by\b)` +
|
|
31
|
+
`|(?i:\b(?:makes|made|turned|went)\s+[\w/-]*\s*green\b)` +
|
|
32
|
+
`|packets/\S+\.return\.md`)
|
|
33
|
+
|
|
34
|
+
// roleTagRE matches a role-tagged finding fingerprint ("Plan F1", "DevEx S2").
|
|
35
|
+
// The tag is a reviewer role's leading word: Perf for performance-reviewer.
|
|
36
|
+
var roleTagRE = regexp.MustCompile(`\b(Plan|Doubt|Code|DevEx|Test|Security|Spec|Strategy|Perf|Frontend|Simplifier)\s+[FS]\d+\b`)
|
|
37
|
+
|
|
38
|
+
// countsTemplateRE matches a Counts line whose every value is a placeholder
|
|
39
|
+
// (the return template), which names keys but no conclusion.
|
|
40
|
+
var countsTemplateRE = regexp.MustCompile(`(?i)^\s*counts\s*:(?:\s+[a-z]+=<[^<>]*>)+\s*$`)
|
|
41
|
+
|
|
42
|
+
// roleBase is the canonical role a --role names: an optional "devrites-"
|
|
43
|
+
// agent-name prefix and ".lane" suffix dropped.
|
|
44
|
+
func roleBase(role string) string {
|
|
45
|
+
base, _, _ := strings.Cut(strings.TrimPrefix(role, "devrites-"), ".")
|
|
46
|
+
return base
|
|
47
|
+
}
|
|
17
48
|
|
|
18
49
|
// isReviewerRole reports whether role is an independent read-only reviewer:
|
|
19
|
-
// a *-reviewer, *-auditor, or test-analyst
|
|
50
|
+
// a *-reviewer, *-auditor, or test-analyst.
|
|
20
51
|
func isReviewerRole(role string) bool {
|
|
21
|
-
base
|
|
52
|
+
base := roleBase(role)
|
|
22
53
|
return strings.HasSuffix(base, "-reviewer") || strings.HasSuffix(base, "-auditor") || base == "test-analyst"
|
|
23
54
|
}
|
|
24
55
|
|
|
25
|
-
//
|
|
26
|
-
//
|
|
56
|
+
// lintKnownRoles refuses a --role that names no pack agent, so a free-form
|
|
57
|
+
// label ("test-analyst-022-r5") cannot skip the reviewer lints. The agent path
|
|
58
|
+
// resolves as context --role does: the phase skill's loads manifest, else the
|
|
59
|
+
// devrites-<role> convention, in any project-level host install; a Codex
|
|
60
|
+
// install keeps role agents at .codex/agents/<name>.toml.
|
|
61
|
+
// shortcut: only project-level installs are checked (a global-only install or
|
|
62
|
+
// none skips the check); check the user install too if free-form roles recur there.
|
|
63
|
+
func lintKnownRoles(root, phase string, roles []string) error {
|
|
64
|
+
project := filepath.Dir(root)
|
|
65
|
+
var skillsRoots []string
|
|
66
|
+
if dir, err := resolveSkillsRoot(root, ""); err == nil {
|
|
67
|
+
if rel, err := filepath.Rel(project, dir); err == nil && rel != ".." && !strings.HasPrefix(rel, ".."+string(filepath.Separator)) {
|
|
68
|
+
skillsRoots = append(skillsRoots, dir)
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
for _, rel := range []string{".omp/skills", ".agents/skills", ".pi/skills", ".devin/skills"} {
|
|
72
|
+
dir := filepath.Join(project, filepath.FromSlash(rel))
|
|
73
|
+
if info, err := os.Stat(filepath.Join(dir, "devrites-lib")); err == nil && info.IsDir() {
|
|
74
|
+
skillsRoots = append(skillsRoots, dir)
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
manifests := make([]loadsManifest, len(skillsRoots))
|
|
78
|
+
for i, dir := range skillsRoots {
|
|
79
|
+
if raw, err := os.ReadFile(filepath.Join(dir, "rite-"+strings.ToLower(phase), "SKILL.md")); err == nil { // #nosec G304 -- resolved under a project skills root
|
|
80
|
+
manifests[i], _, _ = parseLoadsManifest(string(raw))
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
isRegular := func(path string) bool {
|
|
84
|
+
info, err := os.Stat(path)
|
|
85
|
+
return err == nil && info.Mode().IsRegular()
|
|
86
|
+
}
|
|
87
|
+
for _, role := range roles {
|
|
88
|
+
base := roleBase(role)
|
|
89
|
+
known := len(skillsRoots) == 0
|
|
90
|
+
for i, dir := range skillsRoots {
|
|
91
|
+
if !devritespaths.ValidSlug(base) {
|
|
92
|
+
break
|
|
93
|
+
}
|
|
94
|
+
rel := filepath.FromSlash(roleAgentPath(manifests[i], base))
|
|
95
|
+
if isRegular(filepath.Join(dir, "..", "agents", rel)) ||
|
|
96
|
+
isRegular(filepath.Join(project, ".codex", "agents", strings.TrimSuffix(filepath.Base(rel), ".md")+".toml")) {
|
|
97
|
+
known = true
|
|
98
|
+
break
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
if !known {
|
|
102
|
+
return fmt.Errorf("role %q names no pack agent; use a canonical role, optionally with a .<lane> suffix", role)
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
return nil
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
// lintReviewerPacket refuses a reviewer packet that seeds a conclusion or
|
|
109
|
+
// tells the reviewer to read its installed role contract, so a voided review
|
|
110
|
+
// is rejected before launch rather than discovered after it.
|
|
27
111
|
// Placeholder text inside <...> (an output template) is not a conclusion.
|
|
112
|
+
// With no wave roles, every role-tagged fingerprint is refused.
|
|
28
113
|
func lintReviewerPacket(path string) error {
|
|
114
|
+
return lintReviewerWavePacket(path, nil)
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
// lintReviewerWavePacket is lintReviewerPacket for a wave: a role-tagged
|
|
118
|
+
// fingerprint passes only when roles hold exactly one reviewer role and the
|
|
119
|
+
// tag names it.
|
|
120
|
+
func lintReviewerWavePacket(path string, roles []string) error {
|
|
29
121
|
if path == "" {
|
|
30
122
|
return fmt.Errorf("a reviewer wave needs --packet <file> holding the exact packet the reviewers receive")
|
|
31
123
|
}
|
|
@@ -33,19 +125,143 @@ func lintReviewerPacket(path string) error {
|
|
|
33
125
|
if err != nil {
|
|
34
126
|
return fmt.Errorf("reviewer packet %s: %w", path, err)
|
|
35
127
|
}
|
|
128
|
+
var reviewers []string
|
|
129
|
+
for _, role := range roles {
|
|
130
|
+
if base := roleBase(role); isReviewerRole(base) && !slices.Contains(reviewers, base) {
|
|
131
|
+
reviewers = append(reviewers, base)
|
|
132
|
+
}
|
|
133
|
+
}
|
|
36
134
|
for i, line := range strings.Split(string(raw), "\n") {
|
|
135
|
+
if countsTemplateRE.MatchString(line) {
|
|
136
|
+
continue
|
|
137
|
+
}
|
|
37
138
|
for _, loc := range seedingRE.FindAllStringIndex(line, -1) {
|
|
38
139
|
if insidePlaceholder(line, loc[0], loc[1]) {
|
|
39
140
|
continue
|
|
40
141
|
}
|
|
41
|
-
return fmt.Errorf("reviewer packet %s:%d seeds a conclusion (%q); a packet carries scope, paths, diff and rubric only — never a gate result, a reviewer outcome or count, or a claim that something already passed. Weigh root proof at reconciliation instead",
|
|
142
|
+
return fmt.Errorf("reviewer packet %s:%d seeds a conclusion (%q); a packet carries scope, paths, diff and rubric only — never a gate result, a reviewer outcome or count, or a claim that something already passed (agents.md § Independence). Weigh root proof at reconciliation instead",
|
|
42
143
|
path, i+1, strings.TrimSpace(line[loc[0]:loc[1]]))
|
|
43
144
|
}
|
|
145
|
+
for _, m := range roleTagRE.FindAllStringSubmatchIndex(line, -1) {
|
|
146
|
+
tag := strings.ToLower(line[m[2]:m[3]])
|
|
147
|
+
if insidePlaceholder(line, m[0], m[1]) || (len(reviewers) == 1 && strings.HasPrefix(reviewers[0], tag)) {
|
|
148
|
+
continue
|
|
149
|
+
}
|
|
150
|
+
return fmt.Errorf("reviewer packet %s:%d carries fingerprint %q from another role; a recheck packet lists only fingerprints that same role raised, so send it to that role's recheck alone (agents.md § Independence)",
|
|
151
|
+
path, i+1, line[m[0]:m[1]])
|
|
152
|
+
}
|
|
44
153
|
}
|
|
45
|
-
return
|
|
154
|
+
return lintContractRead("reviewer packet", path, raw)
|
|
46
155
|
}
|
|
47
156
|
|
|
48
157
|
func insidePlaceholder(line string, start, end int) bool {
|
|
49
158
|
open := strings.LastIndex(line[:start], "<")
|
|
50
159
|
return open >= 0 && open > strings.LastIndex(line[:start], ">") && strings.Contains(line[end:], ">")
|
|
51
160
|
}
|
|
161
|
+
|
|
162
|
+
// severityCountKeys is the Counts vocabulary of a reviewer role that
|
|
163
|
+
// returnCountKeys does not list.
|
|
164
|
+
var severityCountKeys = []string{"critical", "important", "suggestion", "nit", "fyi", "gap"}
|
|
165
|
+
|
|
166
|
+
// returnCountKeys is the closed, ordered Counts vocabulary of the reviewer
|
|
167
|
+
// roles that differ from severityCountKeys. The agent-template head test reads
|
|
168
|
+
// this table, so the engine and the templates share one source.
|
|
169
|
+
var returnCountKeys = map[string][]string{
|
|
170
|
+
"plan-reviewer": {"critical", "important", "suggestion", "nit", "fyi", "gap", "contract", "mechanism"},
|
|
171
|
+
"simplifier-reviewer": {"suggestion", "nit", "fyi", "gap"},
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
func countKeys(role string) []string {
|
|
175
|
+
if keys, ok := returnCountKeys[roleBase(role)]; ok {
|
|
176
|
+
return keys
|
|
177
|
+
}
|
|
178
|
+
return severityCountKeys
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
var countRE = regexp.MustCompile(`^([a-z]+)=([0-9]{1,6})$`)
|
|
182
|
+
|
|
183
|
+
// parseReturnHead reads a reviewer return's strict head: line 1
|
|
184
|
+
// "Outcome: findings|no-findings|gap", line 2 "Counts: key=N ..." with keys
|
|
185
|
+
// from the role's vocabulary. findings needs a non-gap count above 0 and
|
|
186
|
+
// no-findings needs every count at 0. It returns the outcome and the counts as
|
|
187
|
+
// "key=N,key=N"; an error means the head is malformed.
|
|
188
|
+
func parseReturnHead(role, text string) (outcome, counts string, err error) {
|
|
189
|
+
lines := strings.SplitN(strings.TrimLeft(text, "\r\n"), "\n", 3)
|
|
190
|
+
if len(lines) < 2 {
|
|
191
|
+
return "", "", errors.New("no Outcome/Counts head on lines 1-2")
|
|
192
|
+
}
|
|
193
|
+
outcome, ok := strings.CutPrefix(strings.TrimSpace(lines[0]), "Outcome: ")
|
|
194
|
+
if !ok || (outcome != "findings" && outcome != "no-findings" && outcome != "gap") {
|
|
195
|
+
return "", "", fmt.Errorf("line 1 is not \"Outcome: findings|no-findings|gap\": %q", strings.TrimSpace(lines[0]))
|
|
196
|
+
}
|
|
197
|
+
rest, ok := strings.CutPrefix(strings.TrimSpace(lines[1]), "Counts:")
|
|
198
|
+
fields := strings.Fields(rest)
|
|
199
|
+
if !ok || len(fields) == 0 {
|
|
200
|
+
return "", "", fmt.Errorf("line 2 is not \"Counts: key=N ...\": %q", strings.TrimSpace(lines[1]))
|
|
201
|
+
}
|
|
202
|
+
allowed := countKeys(role)
|
|
203
|
+
seen := map[string]bool{}
|
|
204
|
+
total, nonGap := 0, 0
|
|
205
|
+
for _, field := range fields {
|
|
206
|
+
m := countRE.FindStringSubmatch(field)
|
|
207
|
+
if m == nil || !slices.Contains(allowed, m[1]) || seen[m[1]] {
|
|
208
|
+
return "", "", fmt.Errorf("line 2 has Counts entry %q, which is not a distinct key=N with key in %s", field, strings.Join(allowed, ","))
|
|
209
|
+
}
|
|
210
|
+
seen[m[1]] = true
|
|
211
|
+
n, _ := strconv.Atoi(m[2])
|
|
212
|
+
total += n
|
|
213
|
+
if m[1] != "gap" {
|
|
214
|
+
nonGap += n
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
if outcome == "findings" && nonGap == 0 {
|
|
218
|
+
return "", "", errors.New("line 1 says findings but no non-gap count is above 0")
|
|
219
|
+
}
|
|
220
|
+
if outcome == "no-findings" && total > 0 {
|
|
221
|
+
return "", "", errors.New("line 1 says no-findings but a count is above 0")
|
|
222
|
+
}
|
|
223
|
+
return outcome, strings.Join(fields, ","), nil
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
var siteLineRE = regexp.MustCompile(`(?::[0-9]+)+(?:-[0-9]+)?$`)
|
|
227
|
+
|
|
228
|
+
// findingKeys returns one role|slice|file|section|severity key per "Finding:"
|
|
229
|
+
// row and the number of "Late:" lines. The site drops its line number so a
|
|
230
|
+
// re-raise after an edit still matches, and spaces become "_" so each key is
|
|
231
|
+
// one note token.
|
|
232
|
+
// shortcut: cells split on every "|", so a quoted "|" shifts the cells; parse
|
|
233
|
+
// the quote if keys come out wrong.
|
|
234
|
+
func findingKeys(role, slice, text string) (keys []string, late int) {
|
|
235
|
+
for _, line := range strings.Split(text, "\n") {
|
|
236
|
+
line = strings.TrimSpace(line)
|
|
237
|
+
if strings.HasPrefix(line, "Late:") {
|
|
238
|
+
late++
|
|
239
|
+
continue
|
|
240
|
+
}
|
|
241
|
+
row, ok := strings.CutPrefix(line, "Finding:")
|
|
242
|
+
if !ok {
|
|
243
|
+
continue
|
|
244
|
+
}
|
|
245
|
+
cells := strings.Split(row, "|")
|
|
246
|
+
file, section := "", ""
|
|
247
|
+
if len(cells) > 1 {
|
|
248
|
+
file = siteLineRE.ReplaceAllString(strings.TrimSpace(cells[1]), "")
|
|
249
|
+
}
|
|
250
|
+
for _, cell := range cells[min(2, len(cells)):] {
|
|
251
|
+
if cited, ok := strings.CutPrefix(strings.TrimSpace(cell), "breaks "); ok {
|
|
252
|
+
section, _, _ = strings.Cut(cited, `"`)
|
|
253
|
+
break
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
severity, _, _ := strings.Cut(strings.TrimSpace(cells[0]), " ")
|
|
257
|
+
keys = append(keys, strings.Join([]string{role, slice, keyToken(file), keyToken(section), keyToken(strings.ToLower(severity))}, "|"))
|
|
258
|
+
}
|
|
259
|
+
return keys, late
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
func keyToken(s string) string {
|
|
263
|
+
if fields := strings.Fields(s); len(fields) > 0 {
|
|
264
|
+
return strings.Join(fields, "_")
|
|
265
|
+
}
|
|
266
|
+
return "-"
|
|
267
|
+
}
|
|
@@ -59,11 +59,10 @@ func EnvironmentReportFor(devritesRoot, projectRoot string) (EnvironmentReport,
|
|
|
59
59
|
EngineVersion: version.Version,
|
|
60
60
|
ProjectRoot: abs,
|
|
61
61
|
Manifest: probePath(abs, devritespaths.ManifestName),
|
|
62
|
+
// codebase-memory-mcp keeps its index in a central store; only its
|
|
63
|
+
// optional persisted artifact lives in the repository.
|
|
62
64
|
Indexes: []PathProbe{
|
|
63
|
-
probePath(abs, ".codegraph"),
|
|
64
|
-
probePath(abs, ".code-review-graph"),
|
|
65
65
|
probePath(abs, ".codebase-memory"),
|
|
66
|
-
probePath(abs, "graph.json"),
|
|
67
66
|
},
|
|
68
67
|
}
|
|
69
68
|
if devritesRoot != "" {
|
|
@@ -5,6 +5,7 @@ import (
|
|
|
5
5
|
"io"
|
|
6
6
|
"os"
|
|
7
7
|
"path/filepath"
|
|
8
|
+
"slices"
|
|
8
9
|
"strings"
|
|
9
10
|
|
|
10
11
|
"github.com/devrites/devrites/internal/acceptance"
|
|
@@ -32,10 +33,14 @@ var readNextOrder = []string{
|
|
|
32
33
|
|
|
33
34
|
// RunHandoff emits the deterministic resume record for one feature workspace:
|
|
34
35
|
// cursor fields, blocking question gates, the acceptance-ledger reduction,
|
|
35
|
-
// recorded dead ends, and the canonical read-next
|
|
36
|
-
// record is a faithful reduction of durable artifacts so a fresh
|
|
37
|
-
// handoff writer) does not depend on transcript memory to resume.
|
|
36
|
+
// recorded dead ends, in-flight dispatch waves, and the canonical read-next
|
|
37
|
+
// order. The record is a faithful reduction of durable artifacts so a fresh
|
|
38
|
+
// agent (or a handoff writer) does not depend on transcript memory to resume.
|
|
39
|
+
// It writes nothing unless --resume is given: then it appends one resume
|
|
40
|
+
// metric so `metrics summary` can time each resume to the next dispatch.
|
|
38
41
|
func RunHandoff(root string, args []string, stdout, stderr io.Writer) int {
|
|
42
|
+
resume := slices.Contains(args, "--resume")
|
|
43
|
+
args = slices.DeleteFunc(slices.Clone(args), func(a string) bool { return a == "--resume" })
|
|
39
44
|
slug, code, err := ActiveSlug(root, args)
|
|
40
45
|
if err != nil {
|
|
41
46
|
fmt.Fprintf(stderr, "handoff: %v\n", err)
|
|
@@ -76,6 +81,7 @@ func RunHandoff(root string, args []string, stdout, stderr io.Writer) int {
|
|
|
76
81
|
writeHandoffQuestions(featureDir, stdout)
|
|
77
82
|
writeHandoffLedger(featureDir, stdout)
|
|
78
83
|
writeHandoffDeadEnds(featureDir, stdout)
|
|
84
|
+
writeHandoffWaves(root, slug, stdout)
|
|
79
85
|
|
|
80
86
|
if report.Complete() {
|
|
81
87
|
fmt.Fprintln(stdout, "missing_required: none")
|
|
@@ -83,6 +89,9 @@ func RunHandoff(root string, args []string, stdout, stderr io.Writer) int {
|
|
|
83
89
|
fmt.Fprintf(stdout, "missing_required: %s\n", strings.Join(report.MissingFiles, ", "))
|
|
84
90
|
}
|
|
85
91
|
fmt.Fprintf(stdout, "read_next: %s\n", strings.Join(readNext(featureDir), ", "))
|
|
92
|
+
if resume {
|
|
93
|
+
recordMetric(root, slug, string(report.Phase), "resume", "root", 0)
|
|
94
|
+
}
|
|
86
95
|
return 0
|
|
87
96
|
}
|
|
88
97
|
|
|
@@ -161,6 +170,27 @@ func writeHandoffDeadEnds(featureDir string, stdout io.Writer) {
|
|
|
161
170
|
}
|
|
162
171
|
}
|
|
163
172
|
|
|
173
|
+
// writeHandoffWaves lists dispatch waves whose agents have not all returned,
|
|
174
|
+
// with the reduction observe uses, so a resume reconciles a running cohort
|
|
175
|
+
// instead of re-dispatching it.
|
|
176
|
+
func writeHandoffWaves(root, slug string, stdout io.Writer) {
|
|
177
|
+
f, _, err := loadDispatch(root, slug)
|
|
178
|
+
if err != nil {
|
|
179
|
+
fmt.Fprintf(stdout, "inflight_waves: unreadable (%v)\n", err)
|
|
180
|
+
return
|
|
181
|
+
}
|
|
182
|
+
waves := inflightWaves(f)
|
|
183
|
+
if len(waves) == 0 {
|
|
184
|
+
fmt.Fprintln(stdout, "inflight_waves: none")
|
|
185
|
+
return
|
|
186
|
+
}
|
|
187
|
+
fmt.Fprintf(stdout, "inflight_waves: %d\n", len(waves))
|
|
188
|
+
for _, w := range waves {
|
|
189
|
+
fmt.Fprintf(stdout, "inflight_wave: %s phase=%s state=%s pending=%s slices=%s\n",
|
|
190
|
+
w.Wave, w.Phase, w.State, orDash(strings.Join(w.Pending, ",")), orDash(strings.Join(w.Slices, ",")))
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
|
|
164
194
|
func deadEnds(data []byte) []string {
|
|
165
195
|
var ends []string
|
|
166
196
|
inSection := false
|
|
@@ -127,17 +127,21 @@ func metricsRecord(root string, args []string, stdout, stderr io.Writer) int {
|
|
|
127
127
|
// bundle emission). It never fails the caller: a metrics write is observability,
|
|
128
128
|
// not a gate.
|
|
129
129
|
func recordMetric(root, slug, phase, event, role string, bytes int64) {
|
|
130
|
+
appendMetric(root, slug, metricEvent{Phase: phase, Event: event, Role: role, Bytes: bytes})
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
// recordMetricNote is recordMetric for an event that carries a note, such as a
|
|
134
|
+
// return's reviewer outcome or an abandon reason.
|
|
135
|
+
func recordMetricNote(root, slug, phase, event, role, note string) {
|
|
136
|
+
appendMetric(root, slug, metricEvent{Phase: phase, Event: event, Role: role, Note: note})
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
func appendMetric(root, slug string, entry metricEvent) {
|
|
130
140
|
dir, err := devritespaths.ExistingFeatureDirChecked(root, slug)
|
|
131
141
|
if err != nil {
|
|
132
142
|
return
|
|
133
143
|
}
|
|
134
|
-
entry
|
|
135
|
-
TS: time.Now().UTC().Format(time.RFC3339),
|
|
136
|
-
Phase: phase,
|
|
137
|
-
Event: event,
|
|
138
|
-
Role: role,
|
|
139
|
-
Bytes: bytes,
|
|
140
|
-
}
|
|
144
|
+
entry.TS = time.Now().UTC().Format(time.RFC3339)
|
|
141
145
|
line, err := json.Marshal(entry)
|
|
142
146
|
if err != nil {
|
|
143
147
|
return
|
|
@@ -197,14 +201,20 @@ func metricsSummary(root string, args []string, stdout, stderr io.Writer) int {
|
|
|
197
201
|
byKind map[string]int
|
|
198
202
|
}
|
|
199
203
|
type roleAgg struct {
|
|
200
|
-
events
|
|
201
|
-
bytes
|
|
204
|
+
events int
|
|
205
|
+
bytes int64
|
|
206
|
+
outcomes map[string]int
|
|
207
|
+
returns []storedReturn
|
|
202
208
|
}
|
|
203
209
|
phases := map[string]*phaseAgg{}
|
|
204
210
|
roles := map[string]*roleAgg{}
|
|
205
211
|
totalBytes := int64(0)
|
|
206
212
|
totalEvents := 0
|
|
207
213
|
bad := 0
|
|
214
|
+
// Each resume's minutes to the next dispatch, in ledger (append) order:
|
|
215
|
+
// "none" when another resume came first, "open" when no dispatch followed.
|
|
216
|
+
var resumeGaps []string
|
|
217
|
+
var pendingResume *time.Time
|
|
208
218
|
// A reader, not a Scanner: one event line carries an unbounded --note. A
|
|
209
219
|
// final line without a newline is handled, then the next read is ("", EOF).
|
|
210
220
|
reader := bufio.NewReader(f)
|
|
@@ -234,14 +244,36 @@ func metricsSummary(root string, args []string, stdout, stderr io.Writer) int {
|
|
|
234
244
|
agg.events++
|
|
235
245
|
agg.bytes += ev.Bytes
|
|
236
246
|
agg.byKind[ev.Event]++
|
|
247
|
+
if ts, err := time.Parse(time.RFC3339, ev.TS); err == nil && (ev.Event == "resume" || ev.Event == "dispatch") {
|
|
248
|
+
if ev.Event == "resume" {
|
|
249
|
+
if pendingResume != nil {
|
|
250
|
+
resumeGaps = append(resumeGaps, "none")
|
|
251
|
+
}
|
|
252
|
+
pendingResume = &ts
|
|
253
|
+
} else if pendingResume != nil {
|
|
254
|
+
resumeGaps = append(resumeGaps, strconv.FormatFloat(ts.Sub(*pendingResume).Minutes(), 'f', 0, 64))
|
|
255
|
+
pendingResume = nil
|
|
256
|
+
}
|
|
257
|
+
}
|
|
237
258
|
if ev.Role != "" {
|
|
238
259
|
ragg, ok := roles[ev.Role]
|
|
239
260
|
if !ok {
|
|
240
|
-
ragg = &roleAgg{}
|
|
261
|
+
ragg = &roleAgg{outcomes: map[string]int{}}
|
|
241
262
|
roles[ev.Role] = ragg
|
|
242
263
|
}
|
|
243
264
|
ragg.events++
|
|
244
265
|
ragg.bytes += ev.Bytes
|
|
266
|
+
if ev.Event == "return" {
|
|
267
|
+
fields := strings.Fields(ev.Note)
|
|
268
|
+
if len(fields) > 0 {
|
|
269
|
+
if outcome, ok := strings.CutPrefix(fields[0], "outcome="); ok {
|
|
270
|
+
ragg.outcomes[outcome]++
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
if rec, ok := parseStoredReturn(fields); ok {
|
|
274
|
+
ragg.returns = append(ragg.returns, rec)
|
|
275
|
+
}
|
|
276
|
+
}
|
|
245
277
|
}
|
|
246
278
|
totalEvents++
|
|
247
279
|
totalBytes += ev.Bytes
|
|
@@ -274,9 +306,28 @@ func metricsSummary(root string, args []string, stdout, stderr io.Writer) int {
|
|
|
274
306
|
fmt.Fprintln(stdout, " roles:")
|
|
275
307
|
for _, role := range orderedRoles {
|
|
276
308
|
agg := roles[role]
|
|
277
|
-
fmt.Fprintf(stdout, " %-24s events=%d bytes=%d
|
|
309
|
+
fmt.Fprintf(stdout, " %-24s events=%d bytes=%d", role, agg.events, agg.bytes)
|
|
310
|
+
if len(agg.outcomes) > 0 {
|
|
311
|
+
tally := make([]string, 0, len(agg.outcomes))
|
|
312
|
+
for outcome, n := range agg.outcomes {
|
|
313
|
+
tally = append(tally, fmt.Sprintf("%s=%d", outcome, n))
|
|
314
|
+
}
|
|
315
|
+
sort.Strings(tally)
|
|
316
|
+
fmt.Fprintf(stdout, " outcomes: %s", strings.Join(tally, " "))
|
|
317
|
+
}
|
|
318
|
+
if len(agg.returns) > 0 {
|
|
319
|
+
resolved, reraised, open, late := findingResolution(agg.returns)
|
|
320
|
+
fmt.Fprintf(stdout, " resolution: resolved=%d re-raised=%d open=%d late=%d", resolved, reraised, open, late)
|
|
321
|
+
}
|
|
322
|
+
fmt.Fprintln(stdout)
|
|
278
323
|
}
|
|
279
324
|
}
|
|
325
|
+
if pendingResume != nil {
|
|
326
|
+
resumeGaps = append(resumeGaps, "open")
|
|
327
|
+
}
|
|
328
|
+
if len(resumeGaps) > 0 {
|
|
329
|
+
fmt.Fprintf(stdout, " resumes count=%d minutes_to_dispatch=%s\n", len(resumeGaps), strings.Join(resumeGaps, ","))
|
|
330
|
+
}
|
|
280
331
|
fmt.Fprintf(stdout, " total events=%d bytes=%d", totalEvents, totalBytes)
|
|
281
332
|
if bad > 0 {
|
|
282
333
|
fmt.Fprintf(stdout, " unparsed=%d", bad)
|
|
@@ -285,6 +336,63 @@ func metricsSummary(root string, args []string, stdout, stderr io.Writer) int {
|
|
|
285
336
|
return 0
|
|
286
337
|
}
|
|
287
338
|
|
|
339
|
+
// storedReturn is one return recorded with dispatch return --result: its
|
|
340
|
+
// slice, Finding: keys, and Late: line count.
|
|
341
|
+
type storedReturn struct {
|
|
342
|
+
slice string
|
|
343
|
+
keys []string
|
|
344
|
+
late int
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
// parseStoredReturn reads the slice=, late= and finding= tokens of a return
|
|
348
|
+
// note; a note without slice= was not recorded with --result.
|
|
349
|
+
func parseStoredReturn(fields []string) (storedReturn, bool) {
|
|
350
|
+
var rec storedReturn
|
|
351
|
+
found := false
|
|
352
|
+
for _, field := range fields {
|
|
353
|
+
if v, ok := strings.CutPrefix(field, "slice="); ok {
|
|
354
|
+
rec.slice, found = v, true
|
|
355
|
+
} else if v, ok := strings.CutPrefix(field, "late="); ok {
|
|
356
|
+
rec.late, _ = strconv.Atoi(v)
|
|
357
|
+
} else if v, ok := strings.CutPrefix(field, "finding="); ok {
|
|
358
|
+
rec.keys = append(rec.keys, v)
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
return rec, found
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
// findingResolution classifies each raised finding key of one role, in ledger
|
|
365
|
+
// order: re-raised when a later return on the same slice raises it again,
|
|
366
|
+
// resolved when a later return on that slice does not, open when no later
|
|
367
|
+
// return on that slice exists yet.
|
|
368
|
+
func findingResolution(returns []storedReturn) (resolved, reraised, open, late int) {
|
|
369
|
+
for i, rec := range returns {
|
|
370
|
+
late += rec.late
|
|
371
|
+
for _, key := range rec.keys {
|
|
372
|
+
rechecked, again := false, false
|
|
373
|
+
for _, next := range returns[i+1:] {
|
|
374
|
+
if next.slice != rec.slice {
|
|
375
|
+
continue
|
|
376
|
+
}
|
|
377
|
+
rechecked = true
|
|
378
|
+
if slices.Contains(next.keys, key) {
|
|
379
|
+
again = true
|
|
380
|
+
break
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
switch {
|
|
384
|
+
case again:
|
|
385
|
+
reraised++
|
|
386
|
+
case rechecked:
|
|
387
|
+
resolved++
|
|
388
|
+
default:
|
|
389
|
+
open++
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
return resolved, reraised, open, late
|
|
394
|
+
}
|
|
395
|
+
|
|
288
396
|
// sliceCostSummary reports, per slice named on dispatch waves, the build wright
|
|
289
397
|
// rounds, slice-bound Vet rechecks, and agent-minutes (role start to return; a
|
|
290
398
|
// wave naming several slices splits its minutes evenly). Abandoned waves are
|