devrites 6.0.3 → 6.1.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 +12 -0
- package/README.md +24 -9
- package/SECURITY.md +9 -6
- package/bin/devrites.mjs +28 -12
- package/docs/adr/0035-claude-root-leaves-plan-mode.md +33 -0
- package/docs/adr/0036-archive-recall-is-a-read-time-query.md +32 -0
- package/docs/adr/README.md +4 -2
- package/docs/cli.md +25 -2
- package/docs/command-map.md +10 -8
- package/docs/engine/commands.md +10 -7
- package/docs/harness-compliance.md +2 -2
- package/docs/orchestration.md +5 -4
- package/docs/release.md +4 -4
- package/docs/skills.md +2 -2
- package/engine/commands.go +1 -1
- package/engine/help.go +10 -6
- package/engine/internal/acceptance/cli.go +4 -1
- package/engine/internal/acceptance/exec.go +11 -11
- package/engine/internal/devritespaths/paths.go +5 -0
- package/engine/internal/hostpack/hostpack.go +48 -3
- package/engine/internal/install/apply.go +68 -1
- package/engine/internal/install/binary.go +4 -0
- package/engine/internal/install/install.go +25 -15
- package/engine/internal/install/merge.go +287 -123
- package/engine/internal/install/preflight.go +71 -1
- package/engine/internal/install/uninstall.go +7 -1
- package/engine/internal/install/update.go +7 -3
- package/engine/internal/lib/claims.go +30 -14
- package/engine/internal/lib/cli_observe.go +6 -0
- package/engine/internal/lib/context.go +35 -12
- package/engine/internal/lib/diffscope.go +79 -3
- package/engine/internal/lib/dispatch.go +78 -12
- package/engine/internal/lib/drift.go +9 -2
- package/engine/internal/lib/handoff.go +14 -5
- package/engine/internal/lib/metrics.go +103 -10
- package/engine/internal/lib/migrate.go +30 -12
- package/engine/internal/lib/next.go +22 -2
- package/engine/internal/lib/observe_summary.go +8 -0
- package/engine/internal/lib/open_visual.go +3 -1
- package/engine/internal/lib/recall.go +355 -0
- package/engine/internal/lib/regression.go +20 -0
- package/engine/internal/lib/resolve.go +96 -53
- package/engine/internal/lib/secretscan.go +24 -1
- package/engine/internal/lib/taskgraph.go +31 -1
- package/engine/internal/lib/util.go +18 -7
- package/engine/internal/lib/windows.go +68 -15
- package/engine/internal/markdowntext/markdowntext.go +45 -6
- package/engine/internal/notes/cli.go +5 -3
- package/engine/internal/notes/notes.go +8 -3
- package/engine/internal/overhaul/admit/run.go +16 -12
- package/engine/internal/overhaul/overhaul.go +1 -0
- package/engine/internal/overhaul/records/check.go +52 -9
- package/engine/internal/overhaul/render/run.go +3 -2
- package/engine/internal/overhaul/snapshot/run.go +2 -2
- package/engine/internal/parallel/git.go +5 -6
- package/engine/internal/parallel/ops.go +3 -0
- package/engine/internal/parallel/pathdisjoint.go +9 -4
- package/engine/internal/release/release.go +11 -9
- package/engine/internal/safepath/safepath.go +17 -1
- package/engine/internal/state/budgets.go +8 -4
- package/engine/internal/state/feature.go +3 -1
- package/engine/internal/state/observation.go +12 -7
- package/engine/internal/state/taskgraph.go +67 -12
- package/engine/internal/state/write.go +7 -1
- package/engine/main.go +6 -2
- package/pack/.claude/agents/_shared/composition-overhaul.md +2 -0
- package/pack/.claude/agents/devrites-devex-reviewer.md +5 -0
- package/pack/.claude/agents/devrites-evidence-scout.md +4 -0
- package/pack/.claude/agents/devrites-plan-reviewer.md +4 -1
- package/pack/.claude/agents/devrites-slice-wright.md +4 -1
- package/pack/.claude/agents/overhaul-implementer.md +1 -0
- package/pack/.claude/settings.json +4 -4
- 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 +1 -1
- package/pack/.claude/skills/devrites-debug-recovery/SKILL.md +3 -2
- package/pack/.claude/skills/devrites-doubt/SKILL.md +1 -1
- package/pack/.claude/skills/devrites-frontend-craft/SKILL.md +1 -1
- package/pack/.claude/skills/devrites-interview/SKILL.md +1 -1
- package/pack/.claude/skills/devrites-lib/reference/intent-map.md +3 -3
- package/pack/.claude/skills/devrites-lib/reference/parallel-dispatch.md +4 -3
- package/pack/.claude/skills/devrites-lib/reference/standards/afk-hitl.md +5 -4
- package/pack/.claude/skills/devrites-lib/reference/standards/ci-cd.md +2 -1
- package/pack/.claude/skills/devrites-lib/reference/standards/code-review.md +1 -1
- package/pack/.claude/skills/devrites-lib/reference/standards/data-integrity.md +4 -0
- package/pack/.claude/skills/devrites-lib/reference/standards/developer-experience.md +5 -0
- package/pack/.claude/skills/devrites-lib/reference/standards/loop-operations.md +3 -0
- package/pack/.claude/skills/devrites-lib/reference/standards/performance.md +2 -0
- package/pack/.claude/skills/devrites-lib/reference/standards/skill-authoring.md +13 -1
- package/pack/.claude/skills/devrites-lib/reference/standards/testing.md +13 -0
- package/pack/.claude/skills/devrites-lib/reference/workspace-artifact-schema.md +10 -6
- package/pack/.claude/skills/devrites-prose-craft/SKILL.md +1 -1
- package/pack/.claude/skills/devrites-source-driven/SKILL.md +1 -1
- package/pack/.claude/skills/devrites-ux-shape/SKILL.md +1 -1
- package/pack/.claude/skills/overhaul/references/orchestration.md +6 -2
- package/pack/.claude/skills/overhaul/references/records.md +8 -3
- package/pack/.claude/skills/rite/SKILL.md +4 -3
- package/pack/.claude/skills/rite/reference/menu.md +6 -5
- package/pack/.claude/skills/rite-adopt/SKILL.md +4 -3
- package/pack/.claude/skills/rite-autocomplete/SKILL.md +6 -5
- package/pack/.claude/skills/rite-autocomplete/reference/loop.md +2 -1
- package/pack/.claude/skills/rite-autocomplete/reference/stop-conditions.md +2 -1
- package/pack/.claude/skills/rite-build/reference/afk-discipline.md +3 -1
- package/pack/.claude/skills/rite-build/reference/output.md +1 -1
- package/pack/.claude/skills/rite-build/reference/phase-contract.md +2 -0
- package/pack/.claude/skills/rite-build/reference/wright-dispatch.md +19 -0
- package/pack/.claude/skills/rite-converge/SKILL.md +4 -3
- package/pack/.claude/skills/rite-customize/SKILL.md +1 -1
- package/pack/.claude/skills/rite-define/SKILL.md +3 -2
- package/pack/.claude/skills/rite-doctor/SKILL.md +12 -6
- package/pack/.claude/skills/rite-dogfood/SKILL.md +2 -2
- package/pack/.claude/skills/rite-explain/SKILL.md +1 -1
- package/pack/.claude/skills/rite-fast/SKILL.md +3 -1
- package/pack/.claude/skills/rite-handoff/SKILL.md +4 -3
- package/pack/.claude/skills/rite-learn/SKILL.md +2 -2
- package/pack/.claude/skills/rite-plan/reference/replan-and-repair.md +2 -0
- package/pack/.claude/skills/rite-plan/reference/slicing.md +3 -1
- package/pack/.claude/skills/rite-pov/SKILL.md +1 -1
- package/pack/.claude/skills/rite-pr-feedback/SKILL.md +5 -4
- package/pack/.claude/skills/rite-pressure-test/SKILL.md +7 -5
- package/pack/.claude/skills/rite-prototype/SKILL.md +1 -1
- package/pack/.claude/skills/rite-quick/SKILL.md +10 -5
- package/pack/.claude/skills/rite-resolve/SKILL.md +3 -3
- package/pack/.claude/skills/rite-resolve/reference/answer-protocol.md +4 -5
- package/pack/.claude/skills/rite-review/SKILL.md +2 -1
- package/pack/.claude/skills/rite-seal/SKILL.md +3 -3
- package/pack/.claude/skills/rite-seal/reference/go-no-go.md +2 -0
- package/pack/.claude/skills/rite-seal/reference/seal-template.md +5 -2
- package/pack/.claude/skills/rite-ship/reference/close-out.md +3 -2
- package/pack/.claude/skills/rite-spec/SKILL.md +4 -1
- package/pack/.claude/skills/rite-status/SKILL.md +1 -1
- package/pack/.claude/skills/rite-temper/reference/significance.md +2 -0
- package/pack/.claude/skills/rite-upgrade/SKILL.md +4 -2
- package/pack/.claude/skills/rite-vet/SKILL.md +3 -2
- package/pack/.claude/skills/rite-vet/reference/artifacts.md +1 -1
- package/pack/.claude/skills/rite-watch-pr/SKILL.md +1 -1
- package/pack/.claude/skills/rite-zoom-out/SKILL.md +1 -1
- package/pack/generated/claude/agents/devrites-devex-reviewer.md +5 -0
- package/pack/generated/claude/agents/devrites-evidence-scout.md +4 -0
- package/pack/generated/claude/agents/devrites-plan-reviewer.md +4 -1
- package/pack/generated/claude/agents/devrites-slice-wright.md +4 -1
- package/pack/generated/claude/agents/overhaul-backend-engineer.md +2 -0
- package/pack/generated/claude/agents/overhaul-boundary.md +2 -0
- package/pack/generated/claude/agents/overhaul-craft.md +2 -0
- package/pack/generated/claude/agents/overhaul-frontend-engineer.md +2 -0
- package/pack/generated/claude/agents/overhaul-implementer.md +3 -0
- package/pack/generated/claude/agents/overhaul-recon.md +2 -0
- package/pack/generated/claude/agents/overhaul-specialist.md +2 -0
- package/pack/generated/claude/agents/overhaul-verifier.md +2 -0
- package/pack/generated/claude/settings.json +4 -4
- 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 +1 -1
- package/pack/generated/claude/skills/devrites-debug-recovery/SKILL.md +3 -2
- package/pack/generated/claude/skills/devrites-doubt/SKILL.md +1 -1
- package/pack/generated/claude/skills/devrites-frontend-craft/SKILL.md +1 -1
- package/pack/generated/claude/skills/devrites-interview/SKILL.md +1 -1
- package/pack/generated/claude/skills/devrites-lib/reference/intent-map.md +3 -3
- package/pack/generated/claude/skills/devrites-lib/reference/parallel-dispatch.md +4 -3
- package/pack/generated/claude/skills/devrites-lib/reference/standards/afk-hitl.md +5 -4
- package/pack/generated/claude/skills/devrites-lib/reference/standards/ci-cd.md +2 -1
- package/pack/generated/claude/skills/devrites-lib/reference/standards/code-review.md +1 -1
- package/pack/generated/claude/skills/devrites-lib/reference/standards/data-integrity.md +4 -0
- package/pack/generated/claude/skills/devrites-lib/reference/standards/developer-experience.md +5 -0
- package/pack/generated/claude/skills/devrites-lib/reference/standards/loop-operations.md +3 -0
- package/pack/generated/claude/skills/devrites-lib/reference/standards/performance.md +2 -0
- package/pack/generated/claude/skills/devrites-lib/reference/standards/skill-authoring.md +13 -1
- package/pack/generated/claude/skills/devrites-lib/reference/standards/testing.md +13 -0
- package/pack/generated/claude/skills/devrites-lib/reference/workspace-artifact-schema.md +10 -6
- package/pack/generated/claude/skills/devrites-prose-craft/SKILL.md +1 -1
- package/pack/generated/claude/skills/devrites-source-driven/SKILL.md +1 -1
- package/pack/generated/claude/skills/devrites-ux-shape/SKILL.md +1 -1
- package/pack/generated/claude/skills/overhaul/references/orchestration.md +6 -2
- package/pack/generated/claude/skills/overhaul/references/records.md +8 -3
- package/pack/generated/claude/skills/rite/SKILL.md +4 -3
- package/pack/generated/claude/skills/rite/reference/menu.md +6 -5
- package/pack/generated/claude/skills/rite-adopt/SKILL.md +4 -3
- package/pack/generated/claude/skills/rite-autocomplete/SKILL.md +6 -5
- package/pack/generated/claude/skills/rite-autocomplete/reference/loop.md +2 -1
- package/pack/generated/claude/skills/rite-autocomplete/reference/stop-conditions.md +2 -1
- package/pack/generated/claude/skills/rite-build/reference/afk-discipline.md +3 -1
- package/pack/generated/claude/skills/rite-build/reference/output.md +1 -1
- package/pack/generated/claude/skills/rite-build/reference/phase-contract.md +2 -0
- package/pack/generated/claude/skills/rite-build/reference/wright-dispatch.md +19 -0
- package/pack/generated/claude/skills/rite-converge/SKILL.md +4 -3
- package/pack/generated/claude/skills/rite-customize/SKILL.md +1 -1
- package/pack/generated/claude/skills/rite-define/SKILL.md +3 -2
- package/pack/generated/claude/skills/rite-doctor/SKILL.md +12 -6
- package/pack/generated/claude/skills/rite-dogfood/SKILL.md +2 -2
- package/pack/generated/claude/skills/rite-explain/SKILL.md +1 -1
- package/pack/generated/claude/skills/rite-fast/SKILL.md +3 -1
- package/pack/generated/claude/skills/rite-handoff/SKILL.md +4 -3
- package/pack/generated/claude/skills/rite-learn/SKILL.md +2 -2
- package/pack/generated/claude/skills/rite-plan/reference/replan-and-repair.md +2 -0
- package/pack/generated/claude/skills/rite-plan/reference/slicing.md +3 -1
- package/pack/generated/claude/skills/rite-pov/SKILL.md +1 -1
- package/pack/generated/claude/skills/rite-pr-feedback/SKILL.md +5 -4
- package/pack/generated/claude/skills/rite-pressure-test/SKILL.md +7 -5
- package/pack/generated/claude/skills/rite-prototype/SKILL.md +1 -1
- package/pack/generated/claude/skills/rite-quick/SKILL.md +10 -5
- package/pack/generated/claude/skills/rite-resolve/SKILL.md +3 -3
- package/pack/generated/claude/skills/rite-resolve/reference/answer-protocol.md +4 -5
- package/pack/generated/claude/skills/rite-review/SKILL.md +2 -1
- package/pack/generated/claude/skills/rite-seal/SKILL.md +3 -3
- package/pack/generated/claude/skills/rite-seal/reference/go-no-go.md +2 -0
- package/pack/generated/claude/skills/rite-seal/reference/seal-template.md +5 -2
- package/pack/generated/claude/skills/rite-ship/reference/close-out.md +3 -2
- package/pack/generated/claude/skills/rite-spec/SKILL.md +4 -1
- package/pack/generated/claude/skills/rite-status/SKILL.md +1 -1
- package/pack/generated/claude/skills/rite-temper/reference/significance.md +2 -0
- package/pack/generated/claude/skills/rite-upgrade/SKILL.md +4 -2
- package/pack/generated/claude/skills/rite-vet/SKILL.md +3 -2
- package/pack/generated/claude/skills/rite-vet/reference/artifacts.md +1 -1
- package/pack/generated/claude/skills/rite-watch-pr/SKILL.md +1 -1
- package/pack/generated/claude/skills/rite-zoom-out/SKILL.md +1 -1
- package/pack/generated/codex/agents/devrites-code-reviewer.toml +7 -7
- package/pack/generated/codex/agents/devrites-devex-reviewer.toml +6 -1
- package/pack/generated/codex/agents/devrites-evidence-scout.toml +4 -0
- package/pack/generated/codex/agents/devrites-frontend-reviewer.toml +1 -1
- package/pack/generated/codex/agents/devrites-plan-drafter.toml +3 -3
- package/pack/generated/codex/agents/devrites-plan-reviewer.toml +5 -2
- package/pack/generated/codex/agents/devrites-proof-runner.toml +2 -2
- package/pack/generated/codex/agents/devrites-security-auditor.toml +1 -1
- package/pack/generated/codex/agents/devrites-simplifier-reviewer.toml +1 -1
- package/pack/generated/codex/agents/devrites-slice-wright.toml +8 -5
- package/pack/generated/codex/agents/devrites-test-analyst.toml +5 -5
- package/pack/generated/codex/agents/devrites-upgrade-planner.toml +1 -1
- package/pack/generated/codex/agents/fast-builder.toml +3 -3
- package/pack/generated/codex/agents/fast-critic.toml +3 -3
- package/pack/generated/codex/agents/overhaul-backend-engineer.toml +2 -0
- package/pack/generated/codex/agents/overhaul-boundary.toml +2 -0
- package/pack/generated/codex/agents/overhaul-craft.toml +2 -0
- package/pack/generated/codex/agents/overhaul-frontend-engineer.toml +2 -0
- package/pack/generated/codex/agents/overhaul-implementer.toml +2 -0
- package/pack/generated/codex/agents/overhaul-recon.toml +2 -0
- package/pack/generated/codex/agents/overhaul-specialist.toml +2 -0
- package/pack/generated/codex/agents/overhaul-verifier.toml +2 -0
- 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 +1 -1
- package/pack/generated/codex/skills/devrites-debug-recovery/SKILL.md +3 -2
- package/pack/generated/codex/skills/devrites-doubt/SKILL.md +1 -1
- package/pack/generated/codex/skills/devrites-frontend-craft/SKILL.md +1 -1
- package/pack/generated/codex/skills/devrites-interview/SKILL.md +1 -1
- package/pack/generated/codex/skills/devrites-lib/reference/intent-map.md +3 -3
- package/pack/generated/codex/skills/devrites-lib/reference/parallel-dispatch.md +6 -5
- package/pack/generated/codex/skills/devrites-lib/reference/standards/afk-hitl.md +5 -4
- package/pack/generated/codex/skills/devrites-lib/reference/standards/agents.md +1 -1
- package/pack/generated/codex/skills/devrites-lib/reference/standards/ci-cd.md +2 -1
- package/pack/generated/codex/skills/devrites-lib/reference/standards/code-review.md +1 -1
- package/pack/generated/codex/skills/devrites-lib/reference/standards/core.md +1 -1
- package/pack/generated/codex/skills/devrites-lib/reference/standards/data-integrity.md +4 -0
- package/pack/generated/codex/skills/devrites-lib/reference/standards/developer-experience.md +5 -0
- package/pack/generated/codex/skills/devrites-lib/reference/standards/loop-operations.md +3 -0
- package/pack/generated/codex/skills/devrites-lib/reference/standards/performance.md +2 -0
- package/pack/generated/codex/skills/devrites-lib/reference/standards/skill-authoring.md +13 -1
- package/pack/generated/codex/skills/devrites-lib/reference/standards/testing.md +13 -0
- package/pack/generated/codex/skills/devrites-lib/reference/workspace-artifact-schema.md +11 -7
- package/pack/generated/codex/skills/devrites-prose-craft/SKILL.md +1 -1
- package/pack/generated/codex/skills/devrites-source-driven/SKILL.md +1 -1
- package/pack/generated/codex/skills/devrites-ux-shape/SKILL.md +1 -1
- package/pack/generated/codex/skills/overhaul/SKILL.md +15 -15
- package/pack/generated/codex/skills/overhaul/references/audit-domains.md +2 -2
- package/pack/generated/codex/skills/overhaul/references/orchestration.md +11 -7
- package/pack/generated/codex/skills/overhaul/references/records.md +8 -3
- package/pack/generated/codex/skills/rite/SKILL.md +4 -3
- package/pack/generated/codex/skills/rite/reference/menu.md +6 -5
- package/pack/generated/codex/skills/rite-adopt/SKILL.md +4 -3
- package/pack/generated/codex/skills/rite-autocomplete/SKILL.md +7 -6
- package/pack/generated/codex/skills/rite-autocomplete/reference/loop.md +2 -1
- package/pack/generated/codex/skills/rite-autocomplete/reference/stop-conditions.md +2 -1
- package/pack/generated/codex/skills/rite-build/SKILL.md +2 -2
- package/pack/generated/codex/skills/rite-build/reference/afk-discipline.md +3 -1
- package/pack/generated/codex/skills/rite-build/reference/output.md +1 -1
- package/pack/generated/codex/skills/rite-build/reference/parallel-batch.md +1 -1
- package/pack/generated/codex/skills/rite-build/reference/phase-contract.md +2 -0
- package/pack/generated/codex/skills/rite-build/reference/wright-dispatch.md +20 -1
- package/pack/generated/codex/skills/rite-clarify/SKILL.md +1 -1
- package/pack/generated/codex/skills/rite-converge/SKILL.md +5 -4
- package/pack/generated/codex/skills/rite-customize/SKILL.md +1 -1
- package/pack/generated/codex/skills/rite-define/SKILL.md +4 -3
- package/pack/generated/codex/skills/rite-doctor/SKILL.md +12 -6
- package/pack/generated/codex/skills/rite-dogfood/SKILL.md +2 -2
- package/pack/generated/codex/skills/rite-explain/SKILL.md +1 -1
- package/pack/generated/codex/skills/rite-fast/SKILL.md +8 -6
- package/pack/generated/codex/skills/rite-frame/SKILL.md +1 -1
- package/pack/generated/codex/skills/rite-handoff/SKILL.md +4 -3
- package/pack/generated/codex/skills/rite-learn/SKILL.md +2 -2
- package/pack/generated/codex/skills/rite-plan/SKILL.md +1 -1
- package/pack/generated/codex/skills/rite-plan/reference/replan-and-repair.md +2 -0
- package/pack/generated/codex/skills/rite-plan/reference/slicing.md +3 -1
- package/pack/generated/codex/skills/rite-polish/SKILL.md +2 -2
- package/pack/generated/codex/skills/rite-pov/SKILL.md +1 -1
- package/pack/generated/codex/skills/rite-pr-feedback/SKILL.md +5 -4
- package/pack/generated/codex/skills/rite-pressure-test/SKILL.md +7 -5
- package/pack/generated/codex/skills/rite-prototype/SKILL.md +1 -1
- package/pack/generated/codex/skills/rite-prove/SKILL.md +1 -1
- package/pack/generated/codex/skills/rite-quick/SKILL.md +11 -6
- package/pack/generated/codex/skills/rite-resolve/SKILL.md +3 -3
- package/pack/generated/codex/skills/rite-resolve/reference/answer-protocol.md +4 -5
- package/pack/generated/codex/skills/rite-review/SKILL.md +3 -2
- package/pack/generated/codex/skills/rite-seal/SKILL.md +4 -4
- package/pack/generated/codex/skills/rite-seal/reference/go-no-go.md +2 -0
- package/pack/generated/codex/skills/rite-seal/reference/seal-template.md +5 -2
- package/pack/generated/codex/skills/rite-ship/SKILL.md +1 -1
- package/pack/generated/codex/skills/rite-ship/reference/close-out.md +3 -2
- package/pack/generated/codex/skills/rite-spec/SKILL.md +5 -2
- package/pack/generated/codex/skills/rite-status/SKILL.md +1 -1
- package/pack/generated/codex/skills/rite-temper/SKILL.md +2 -2
- package/pack/generated/codex/skills/rite-temper/reference/significance.md +2 -0
- package/pack/generated/codex/skills/rite-upgrade/SKILL.md +4 -2
- package/pack/generated/codex/skills/rite-vet/SKILL.md +4 -3
- package/pack/generated/codex/skills/rite-vet/reference/artifacts.md +1 -1
- package/pack/generated/codex/skills/rite-watch-pr/SKILL.md +1 -1
- package/pack/generated/codex/skills/rite-zoom-out/SKILL.md +1 -1
- package/pack/generated/devin/AGENTS.md +1 -1
- package/pack/generated/devin/agents/devrites-devex-reviewer.md +5 -0
- package/pack/generated/devin/agents/devrites-evidence-scout.md +4 -0
- package/pack/generated/devin/agents/devrites-plan-reviewer.md +4 -1
- package/pack/generated/devin/agents/devrites-slice-wright.md +4 -1
- package/pack/generated/devin/agents/overhaul-backend-engineer.md +2 -0
- package/pack/generated/devin/agents/overhaul-boundary.md +2 -0
- package/pack/generated/devin/agents/overhaul-craft.md +2 -0
- package/pack/generated/devin/agents/overhaul-frontend-engineer.md +2 -0
- package/pack/generated/devin/agents/overhaul-implementer.md +2 -0
- package/pack/generated/devin/agents/overhaul-recon.md +2 -0
- package/pack/generated/devin/agents/overhaul-specialist.md +2 -0
- package/pack/generated/devin/agents/overhaul-verifier.md +2 -0
- 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 +1 -1
- package/pack/generated/devin/skills/devrites-debug-recovery/SKILL.md +3 -2
- package/pack/generated/devin/skills/devrites-doubt/SKILL.md +1 -1
- package/pack/generated/devin/skills/devrites-frontend-craft/SKILL.md +1 -1
- package/pack/generated/devin/skills/devrites-interview/SKILL.md +2 -2
- package/pack/generated/devin/skills/devrites-lib/reference/intent-map.md +3 -3
- package/pack/generated/devin/skills/devrites-lib/reference/parallel-dispatch.md +6 -5
- package/pack/generated/devin/skills/devrites-lib/reference/standards/afk-hitl.md +8 -7
- package/pack/generated/devin/skills/devrites-lib/reference/standards/agents.md +1 -1
- package/pack/generated/devin/skills/devrites-lib/reference/standards/ci-cd.md +2 -1
- package/pack/generated/devin/skills/devrites-lib/reference/standards/code-review.md +1 -1
- package/pack/generated/devin/skills/devrites-lib/reference/standards/core.md +1 -1
- package/pack/generated/devin/skills/devrites-lib/reference/standards/data-integrity.md +4 -0
- package/pack/generated/devin/skills/devrites-lib/reference/standards/developer-experience.md +5 -0
- package/pack/generated/devin/skills/devrites-lib/reference/standards/loop-operations.md +3 -0
- package/pack/generated/devin/skills/devrites-lib/reference/standards/performance.md +2 -0
- package/pack/generated/devin/skills/devrites-lib/reference/standards/skill-authoring.md +13 -1
- package/pack/generated/devin/skills/devrites-lib/reference/standards/testing.md +13 -0
- package/pack/generated/devin/skills/devrites-lib/reference/workspace-artifact-schema.md +11 -7
- package/pack/generated/devin/skills/devrites-prose-craft/SKILL.md +1 -1
- package/pack/generated/devin/skills/devrites-source-driven/SKILL.md +1 -1
- package/pack/generated/devin/skills/devrites-ux-shape/SKILL.md +1 -1
- package/pack/generated/devin/skills/overhaul/SKILL.md +15 -15
- package/pack/generated/devin/skills/overhaul/references/audit-domains.md +2 -2
- package/pack/generated/devin/skills/overhaul/references/orchestration.md +11 -7
- package/pack/generated/devin/skills/overhaul/references/records.md +8 -3
- package/pack/generated/devin/skills/rite/SKILL.md +4 -3
- package/pack/generated/devin/skills/rite/reference/menu.md +6 -5
- package/pack/generated/devin/skills/rite-adopt/SKILL.md +4 -3
- package/pack/generated/devin/skills/rite-autocomplete/SKILL.md +8 -7
- package/pack/generated/devin/skills/rite-autocomplete/reference/decision-policy.md +1 -1
- package/pack/generated/devin/skills/rite-autocomplete/reference/loop.md +2 -1
- package/pack/generated/devin/skills/rite-autocomplete/reference/stop-conditions.md +3 -2
- package/pack/generated/devin/skills/rite-build/SKILL.md +2 -2
- package/pack/generated/devin/skills/rite-build/reference/afk-discipline.md +3 -1
- package/pack/generated/devin/skills/rite-build/reference/checkpoint-protocol.md +2 -2
- package/pack/generated/devin/skills/rite-build/reference/output.md +1 -1
- package/pack/generated/devin/skills/rite-build/reference/parallel-batch.md +1 -1
- package/pack/generated/devin/skills/rite-build/reference/phase-contract.md +2 -0
- package/pack/generated/devin/skills/rite-build/reference/wright-dispatch.md +20 -1
- package/pack/generated/devin/skills/rite-clarify/SKILL.md +1 -1
- package/pack/generated/devin/skills/rite-converge/SKILL.md +5 -4
- package/pack/generated/devin/skills/rite-customize/SKILL.md +1 -1
- package/pack/generated/devin/skills/rite-define/SKILL.md +4 -3
- package/pack/generated/devin/skills/rite-doctor/SKILL.md +12 -6
- package/pack/generated/devin/skills/rite-dogfood/SKILL.md +2 -2
- package/pack/generated/devin/skills/rite-explain/SKILL.md +3 -3
- package/pack/generated/devin/skills/rite-explain/reference/intake.md +1 -1
- package/pack/generated/devin/skills/rite-fast/SKILL.md +8 -6
- package/pack/generated/devin/skills/rite-frame/SKILL.md +1 -1
- package/pack/generated/devin/skills/rite-handoff/SKILL.md +4 -3
- package/pack/generated/devin/skills/rite-learn/SKILL.md +2 -2
- package/pack/generated/devin/skills/rite-plan/SKILL.md +1 -1
- package/pack/generated/devin/skills/rite-plan/reference/replan-and-repair.md +2 -0
- package/pack/generated/devin/skills/rite-plan/reference/slicing.md +3 -1
- package/pack/generated/devin/skills/rite-polish/SKILL.md +2 -2
- package/pack/generated/devin/skills/rite-pov/SKILL.md +1 -1
- package/pack/generated/devin/skills/rite-pr-feedback/SKILL.md +5 -4
- package/pack/generated/devin/skills/rite-pressure-test/SKILL.md +7 -5
- package/pack/generated/devin/skills/rite-prototype/SKILL.md +1 -1
- package/pack/generated/devin/skills/rite-prove/SKILL.md +1 -1
- package/pack/generated/devin/skills/rite-quick/SKILL.md +11 -6
- package/pack/generated/devin/skills/rite-resolve/SKILL.md +4 -4
- package/pack/generated/devin/skills/rite-resolve/reference/answer-protocol.md +4 -5
- package/pack/generated/devin/skills/rite-review/SKILL.md +3 -2
- package/pack/generated/devin/skills/rite-seal/SKILL.md +4 -4
- package/pack/generated/devin/skills/rite-seal/reference/go-no-go.md +2 -0
- package/pack/generated/devin/skills/rite-seal/reference/seal-template.md +5 -2
- package/pack/generated/devin/skills/rite-ship/SKILL.md +1 -1
- package/pack/generated/devin/skills/rite-ship/reference/close-out.md +3 -2
- package/pack/generated/devin/skills/rite-spec/SKILL.md +5 -2
- package/pack/generated/devin/skills/rite-spec/reference/investigation.md +1 -1
- package/pack/generated/devin/skills/rite-status/SKILL.md +1 -1
- package/pack/generated/devin/skills/rite-temper/SKILL.md +3 -3
- package/pack/generated/devin/skills/rite-temper/reference/scope-modes.md +1 -1
- package/pack/generated/devin/skills/rite-temper/reference/significance.md +3 -1
- package/pack/generated/devin/skills/rite-upgrade/SKILL.md +4 -2
- package/pack/generated/devin/skills/rite-vet/SKILL.md +4 -3
- package/pack/generated/devin/skills/rite-vet/reference/artifacts.md +1 -1
- package/pack/generated/devin/skills/rite-vet/reference/review-axes.md +2 -2
- package/pack/generated/devin/skills/rite-watch-pr/SKILL.md +1 -1
- package/pack/generated/devin/skills/rite-zoom-out/SKILL.md +1 -1
- package/pack/generated/omp/agents/devrites-code-reviewer.md +7 -7
- package/pack/generated/omp/agents/devrites-devex-reviewer.md +6 -1
- package/pack/generated/omp/agents/devrites-evidence-scout.md +4 -0
- package/pack/generated/omp/agents/devrites-frontend-reviewer.md +1 -1
- package/pack/generated/omp/agents/devrites-plan-drafter.md +3 -3
- package/pack/generated/omp/agents/devrites-plan-reviewer.md +5 -2
- package/pack/generated/omp/agents/devrites-proof-runner.md +2 -2
- package/pack/generated/omp/agents/devrites-security-auditor.md +1 -1
- package/pack/generated/omp/agents/devrites-simplifier-reviewer.md +1 -1
- package/pack/generated/omp/agents/devrites-slice-wright.md +8 -5
- package/pack/generated/omp/agents/devrites-test-analyst.md +5 -5
- package/pack/generated/omp/agents/devrites-upgrade-planner.md +1 -1
- package/pack/generated/omp/agents/fast-builder.md +3 -3
- package/pack/generated/omp/agents/fast-critic.md +3 -3
- package/pack/generated/omp/agents/overhaul-backend-engineer.md +2 -0
- package/pack/generated/omp/agents/overhaul-boundary.md +2 -0
- package/pack/generated/omp/agents/overhaul-craft.md +2 -0
- package/pack/generated/omp/agents/overhaul-frontend-engineer.md +2 -0
- package/pack/generated/omp/agents/overhaul-implementer.md +2 -0
- package/pack/generated/omp/agents/overhaul-recon.md +2 -0
- package/pack/generated/omp/agents/overhaul-specialist.md +2 -0
- package/pack/generated/omp/agents/overhaul-verifier.md +2 -0
- package/pack/generated/omp/commands/rite-resolve.md +1 -1
- package/pack/generated/omp/skills/devrites-api-interface/SKILL.md +4 -4
- package/pack/generated/omp/skills/devrites-audit/SKILL.md +5 -5
- package/pack/generated/omp/skills/devrites-browser-proof/SKILL.md +5 -5
- package/pack/generated/omp/skills/devrites-browser-proof/reference/browser-performance.md +1 -1
- package/pack/generated/omp/skills/devrites-browser-proof/reference/visual-verdict.md +1 -1
- package/pack/generated/omp/skills/devrites-debug-recovery/SKILL.md +7 -6
- package/pack/generated/omp/skills/devrites-debug-recovery/reference/cleanup-and-classify.md +1 -1
- package/pack/generated/omp/skills/devrites-doubt/SKILL.md +6 -6
- package/pack/generated/omp/skills/devrites-frontend-craft/SKILL.md +3 -3
- package/pack/generated/omp/skills/devrites-frontend-craft/reference/craft.md +1 -1
- package/pack/generated/omp/skills/devrites-frontend-craft/reference/design-references.md +4 -4
- package/pack/generated/omp/skills/devrites-frontend-craft/reference/fullstack.md +1 -1
- package/pack/generated/omp/skills/devrites-frontend-craft/reference/quality-standards.md +8 -8
- package/pack/generated/omp/skills/devrites-frontend-craft/reference/reuse-first.md +2 -2
- package/pack/generated/omp/skills/devrites-frontend-craft/reference/shape.md +2 -2
- package/pack/generated/omp/skills/devrites-interview/SKILL.md +3 -3
- package/pack/generated/omp/skills/devrites-lib/reference/intent-map.md +4 -4
- package/pack/generated/omp/skills/devrites-lib/reference/parallel-dispatch.md +8 -7
- package/pack/generated/omp/skills/devrites-lib/reference/standards/afk-hitl.md +13 -12
- package/pack/generated/omp/skills/devrites-lib/reference/standards/agents.md +6 -6
- package/pack/generated/omp/skills/devrites-lib/reference/standards/browser-proof-checklist.md +2 -2
- package/pack/generated/omp/skills/devrites-lib/reference/standards/ci-cd.md +2 -1
- package/pack/generated/omp/skills/devrites-lib/reference/standards/code-review.md +3 -3
- package/pack/generated/omp/skills/devrites-lib/reference/standards/coding-style.md +1 -1
- package/pack/generated/omp/skills/devrites-lib/reference/standards/context-hygiene.md +2 -2
- package/pack/generated/omp/skills/devrites-lib/reference/standards/core.md +3 -3
- package/pack/generated/omp/skills/devrites-lib/reference/standards/data-integrity.md +4 -0
- package/pack/generated/omp/skills/devrites-lib/reference/standards/debug-recovery.md +1 -1
- package/pack/generated/omp/skills/devrites-lib/reference/standards/definition-of-done.md +1 -1
- package/pack/generated/omp/skills/devrites-lib/reference/standards/developer-experience.md +8 -3
- package/pack/generated/omp/skills/devrites-lib/reference/standards/glossary.md +3 -3
- package/pack/generated/omp/skills/devrites-lib/reference/standards/loop-operations.md +3 -0
- package/pack/generated/omp/skills/devrites-lib/reference/standards/performance.md +3 -1
- package/pack/generated/omp/skills/devrites-lib/reference/standards/prose-style.md +4 -4
- package/pack/generated/omp/skills/devrites-lib/reference/standards/release/ship-checklist.md +1 -1
- package/pack/generated/omp/skills/devrites-lib/reference/standards/review/README.md +1 -1
- package/pack/generated/omp/skills/devrites-lib/reference/standards/review/ci-workflows.md +1 -1
- package/pack/generated/omp/skills/devrites-lib/reference/standards/review/react.md +1 -1
- package/pack/generated/omp/skills/devrites-lib/reference/standards/review/stack-profile.md +5 -5
- package/pack/generated/omp/skills/devrites-lib/reference/standards/skill-authoring.md +15 -3
- package/pack/generated/omp/skills/devrites-lib/reference/standards/spec-grammar.md +3 -3
- package/pack/generated/omp/skills/devrites-lib/reference/standards/testing.md +14 -1
- package/pack/generated/omp/skills/devrites-lib/reference/standards/tooling.md +1 -1
- package/pack/generated/omp/skills/devrites-lib/reference/standards/verification-methods.md +1 -1
- package/pack/generated/omp/skills/devrites-lib/reference/visual-playbooks/index.md +2 -2
- package/pack/generated/omp/skills/devrites-lib/reference/workspace-artifact-schema.md +12 -8
- package/pack/generated/omp/skills/devrites-prose-craft/SKILL.md +4 -4
- package/pack/generated/omp/skills/devrites-prose-craft/reference/examples.md +1 -1
- package/pack/generated/omp/skills/devrites-source-driven/SKILL.md +3 -3
- package/pack/generated/omp/skills/devrites-ux-shape/SKILL.md +10 -10
- package/pack/generated/omp/skills/devrites-ux-shape/reference/brief-template.md +3 -3
- package/pack/generated/omp/skills/devrites-ux-shape/reference/visual-direction-probe.md +1 -1
- package/pack/generated/omp/skills/overhaul/references/orchestration.md +6 -2
- package/pack/generated/omp/skills/overhaul/references/records.md +8 -3
- package/pack/generated/omp/skills/rite/SKILL.md +8 -7
- package/pack/generated/omp/skills/rite/reference/menu.md +6 -5
- package/pack/generated/omp/skills/rite-adopt/SKILL.md +6 -5
- package/pack/generated/omp/skills/rite-adopt/reference/anti-patterns.md +1 -1
- package/pack/generated/omp/skills/rite-autocomplete/SKILL.md +11 -10
- package/pack/generated/omp/skills/rite-autocomplete/reference/decision-policy.md +1 -1
- package/pack/generated/omp/skills/rite-autocomplete/reference/loop.md +4 -3
- package/pack/generated/omp/skills/rite-autocomplete/reference/stop-conditions.md +2 -1
- package/pack/generated/omp/skills/rite-build/SKILL.md +7 -7
- package/pack/generated/omp/skills/rite-build/reference/afk-discipline.md +4 -2
- package/pack/generated/omp/skills/rite-build/reference/anti-patterns.md +1 -1
- package/pack/generated/omp/skills/rite-build/reference/checkpoint-protocol.md +2 -2
- package/pack/generated/omp/skills/rite-build/reference/checkpoint.md +2 -2
- package/pack/generated/omp/skills/rite-build/reference/frontend-trigger.md +1 -1
- package/pack/generated/omp/skills/rite-build/reference/output.md +1 -1
- package/pack/generated/omp/skills/rite-build/reference/parallel-batch.md +4 -4
- package/pack/generated/omp/skills/rite-build/reference/phase-contract.md +8 -6
- package/pack/generated/omp/skills/rite-build/reference/tdd.md +1 -1
- package/pack/generated/omp/skills/rite-build/reference/wright-dispatch.md +27 -8
- package/pack/generated/omp/skills/rite-clarify/SKILL.md +4 -4
- package/pack/generated/omp/skills/rite-clarify/reference/anti-patterns.md +1 -1
- package/pack/generated/omp/skills/rite-converge/SKILL.md +16 -15
- package/pack/generated/omp/skills/rite-converge/reference/convergence-assessment.md +4 -4
- package/pack/generated/omp/skills/rite-customize/SKILL.md +2 -2
- package/pack/generated/omp/skills/rite-define/SKILL.md +25 -24
- package/pack/generated/omp/skills/rite-define/reference/anti-patterns.md +2 -2
- package/pack/generated/omp/skills/rite-define/reference/gates.md +2 -2
- package/pack/generated/omp/skills/rite-doctor/SKILL.md +12 -6
- package/pack/generated/omp/skills/rite-dogfood/SKILL.md +5 -5
- package/pack/generated/omp/skills/rite-explain/SKILL.md +7 -7
- package/pack/generated/omp/skills/rite-explain/reference/intake.md +1 -1
- package/pack/generated/omp/skills/rite-fast/SKILL.md +12 -10
- package/pack/generated/omp/skills/rite-fast/reference/artifacts.md +1 -1
- package/pack/generated/omp/skills/rite-frame/SKILL.md +6 -6
- package/pack/generated/omp/skills/rite-frame/reference/failure-modes.md +4 -4
- package/pack/generated/omp/skills/rite-handoff/SKILL.md +7 -6
- package/pack/generated/omp/skills/rite-learn/SKILL.md +6 -6
- package/pack/generated/omp/skills/rite-plan/SKILL.md +8 -8
- package/pack/generated/omp/skills/rite-plan/reference/anti-patterns.md +1 -1
- package/pack/generated/omp/skills/rite-plan/reference/replan-and-repair.md +3 -1
- package/pack/generated/omp/skills/rite-plan/reference/slicing.md +6 -4
- package/pack/generated/omp/skills/rite-plan/reference/task-breakdown.md +1 -1
- package/pack/generated/omp/skills/rite-polish/SKILL.md +6 -6
- package/pack/generated/omp/skills/rite-polish/reference/anti-ai-slop.md +9 -9
- package/pack/generated/omp/skills/rite-polish/reference/anti-patterns.md +1 -1
- package/pack/generated/omp/skills/rite-polish/reference/backend-polish.md +2 -2
- package/pack/generated/omp/skills/rite-polish/reference/browser-polish-evidence.md +1 -1
- package/pack/generated/omp/skills/rite-polish/reference/code.md +8 -8
- package/pack/generated/omp/skills/rite-polish/reference/design-memory.md +3 -3
- package/pack/generated/omp/skills/rite-polish/reference/design-system-discovery.md +1 -1
- package/pack/generated/omp/skills/rite-polish/reference/harden-checklist.md +1 -1
- package/pack/generated/omp/skills/rite-polish/reference/ledger.md +3 -3
- package/pack/generated/omp/skills/rite-polish/reference/ui.md +1 -1
- package/pack/generated/omp/skills/rite-pov/SKILL.md +2 -2
- package/pack/generated/omp/skills/rite-pr-feedback/SKILL.md +6 -5
- package/pack/generated/omp/skills/rite-pressure-test/SKILL.md +9 -7
- package/pack/generated/omp/skills/rite-prototype/SKILL.md +1 -1
- package/pack/generated/omp/skills/rite-prove/SKILL.md +13 -13
- package/pack/generated/omp/skills/rite-prove/reference/acceptance-proof.md +7 -7
- package/pack/generated/omp/skills/rite-prove/reference/anti-patterns.md +1 -1
- package/pack/generated/omp/skills/rite-prove/reference/browser-proof.md +3 -3
- package/pack/generated/omp/skills/rite-prove/reference/failure-triage.md +2 -2
- package/pack/generated/omp/skills/rite-quick/SKILL.md +19 -14
- package/pack/generated/omp/skills/rite-resolve/SKILL.md +6 -6
- package/pack/generated/omp/skills/rite-resolve/reference/answer-protocol.md +4 -5
- package/pack/generated/omp/skills/rite-review/SKILL.md +23 -22
- package/pack/generated/omp/skills/rite-review/reference/anti-patterns.md +1 -1
- package/pack/generated/omp/skills/rite-review/reference/cognitive-load.md +2 -2
- package/pack/generated/omp/skills/rite-review/reference/nielsen-heuristics.md +1 -1
- package/pack/generated/omp/skills/rite-review/reference/performance-checklist.md +1 -1
- package/pack/generated/omp/skills/rite-review/reference/performance-review.md +1 -1
- package/pack/generated/omp/skills/rite-review/reference/security-review.md +2 -2
- package/pack/generated/omp/skills/rite-seal/SKILL.md +11 -11
- package/pack/generated/omp/skills/rite-seal/reference/anti-patterns.md +1 -1
- package/pack/generated/omp/skills/rite-seal/reference/final-evidence.md +3 -3
- package/pack/generated/omp/skills/rite-seal/reference/go-no-go.md +3 -1
- package/pack/generated/omp/skills/rite-seal/reference/output.md +1 -1
- package/pack/generated/omp/skills/rite-seal/reference/phase-contract.md +4 -4
- package/pack/generated/omp/skills/rite-seal/reference/seal-template.md +5 -2
- package/pack/generated/omp/skills/rite-ship/SKILL.md +7 -7
- package/pack/generated/omp/skills/rite-ship/reference/anti-patterns.md +1 -1
- package/pack/generated/omp/skills/rite-ship/reference/close-out.md +5 -4
- package/pack/generated/omp/skills/rite-ship/reference/git-ship.md +2 -2
- package/pack/generated/omp/skills/rite-ship/reference/rollout.md +3 -3
- package/pack/generated/omp/skills/rite-spec/SKILL.md +17 -14
- package/pack/generated/omp/skills/rite-spec/reference/anti-patterns.md +1 -1
- package/pack/generated/omp/skills/rite-spec/reference/investigation.md +3 -3
- package/pack/generated/omp/skills/rite-spec/reference/question-protocol.md +1 -1
- package/pack/generated/omp/skills/rite-spec/reference/spec-template.md +2 -2
- package/pack/generated/omp/skills/rite-spec/reference/state-workspace.md +8 -8
- package/pack/generated/omp/skills/rite-status/SKILL.md +2 -2
- package/pack/generated/omp/skills/rite-temper/SKILL.md +13 -13
- package/pack/generated/omp/skills/rite-temper/reference/anti-patterns.md +2 -2
- package/pack/generated/omp/skills/rite-temper/reference/review-dimensions.md +3 -3
- package/pack/generated/omp/skills/rite-temper/reference/scope-modes.md +3 -3
- package/pack/generated/omp/skills/rite-temper/reference/significance.md +4 -2
- package/pack/generated/omp/skills/rite-upgrade/SKILL.md +7 -5
- package/pack/generated/omp/skills/rite-vet/SKILL.md +14 -13
- package/pack/generated/omp/skills/rite-vet/reference/anti-patterns.md +2 -2
- package/pack/generated/omp/skills/rite-vet/reference/artifacts.md +3 -3
- package/pack/generated/omp/skills/rite-vet/reference/depth.md +3 -3
- package/pack/generated/omp/skills/rite-vet/reference/review-axes.md +5 -5
- package/pack/generated/omp/skills/rite-watch-pr/SKILL.md +2 -2
- package/pack/generated/omp/skills/rite-zoom-out/SKILL.md +1 -1
- package/pack/generated/pi/agents/devrites-devex-reviewer.md +5 -0
- package/pack/generated/pi/agents/devrites-evidence-scout.md +4 -0
- package/pack/generated/pi/agents/devrites-plan-reviewer.md +4 -1
- package/pack/generated/pi/agents/devrites-slice-wright.md +4 -1
- package/pack/generated/pi/agents/overhaul-backend-engineer.md +2 -0
- package/pack/generated/pi/agents/overhaul-boundary.md +2 -0
- package/pack/generated/pi/agents/overhaul-craft.md +2 -0
- package/pack/generated/pi/agents/overhaul-frontend-engineer.md +2 -0
- package/pack/generated/pi/agents/overhaul-implementer.md +2 -0
- package/pack/generated/pi/agents/overhaul-recon.md +2 -0
- package/pack/generated/pi/agents/overhaul-specialist.md +2 -0
- package/pack/generated/pi/agents/overhaul-verifier.md +2 -0
- package/pack/generated/pi/prompts/rite-resolve.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 +1 -1
- package/pack/generated/pi/skills/devrites-debug-recovery/SKILL.md +3 -2
- package/pack/generated/pi/skills/devrites-doubt/SKILL.md +1 -1
- package/pack/generated/pi/skills/devrites-frontend-craft/SKILL.md +1 -1
- package/pack/generated/pi/skills/devrites-interview/SKILL.md +1 -1
- package/pack/generated/pi/skills/devrites-lib/reference/intent-map.md +3 -3
- package/pack/generated/pi/skills/devrites-lib/reference/parallel-dispatch.md +6 -5
- package/pack/generated/pi/skills/devrites-lib/reference/standards/afk-hitl.md +5 -4
- package/pack/generated/pi/skills/devrites-lib/reference/standards/agents.md +1 -1
- package/pack/generated/pi/skills/devrites-lib/reference/standards/ci-cd.md +2 -1
- package/pack/generated/pi/skills/devrites-lib/reference/standards/code-review.md +1 -1
- package/pack/generated/pi/skills/devrites-lib/reference/standards/core.md +1 -1
- package/pack/generated/pi/skills/devrites-lib/reference/standards/data-integrity.md +4 -0
- package/pack/generated/pi/skills/devrites-lib/reference/standards/developer-experience.md +5 -0
- package/pack/generated/pi/skills/devrites-lib/reference/standards/loop-operations.md +3 -0
- package/pack/generated/pi/skills/devrites-lib/reference/standards/performance.md +2 -0
- package/pack/generated/pi/skills/devrites-lib/reference/standards/skill-authoring.md +13 -1
- package/pack/generated/pi/skills/devrites-lib/reference/standards/testing.md +13 -0
- package/pack/generated/pi/skills/devrites-lib/reference/workspace-artifact-schema.md +11 -7
- package/pack/generated/pi/skills/devrites-prose-craft/SKILL.md +1 -1
- package/pack/generated/pi/skills/devrites-source-driven/SKILL.md +1 -1
- package/pack/generated/pi/skills/devrites-ux-shape/SKILL.md +1 -1
- package/pack/generated/pi/skills/overhaul/SKILL.md +15 -15
- package/pack/generated/pi/skills/overhaul/references/audit-domains.md +2 -2
- package/pack/generated/pi/skills/overhaul/references/orchestration.md +11 -7
- package/pack/generated/pi/skills/overhaul/references/records.md +8 -3
- package/pack/generated/pi/skills/rite/SKILL.md +4 -3
- package/pack/generated/pi/skills/rite/reference/menu.md +6 -5
- package/pack/generated/pi/skills/rite-adopt/SKILL.md +4 -3
- package/pack/generated/pi/skills/rite-autocomplete/SKILL.md +7 -6
- package/pack/generated/pi/skills/rite-autocomplete/reference/loop.md +2 -1
- package/pack/generated/pi/skills/rite-autocomplete/reference/stop-conditions.md +2 -1
- package/pack/generated/pi/skills/rite-build/SKILL.md +2 -2
- package/pack/generated/pi/skills/rite-build/reference/afk-discipline.md +3 -1
- package/pack/generated/pi/skills/rite-build/reference/output.md +1 -1
- package/pack/generated/pi/skills/rite-build/reference/parallel-batch.md +1 -1
- package/pack/generated/pi/skills/rite-build/reference/phase-contract.md +2 -0
- package/pack/generated/pi/skills/rite-build/reference/wright-dispatch.md +20 -1
- package/pack/generated/pi/skills/rite-clarify/SKILL.md +1 -1
- package/pack/generated/pi/skills/rite-converge/SKILL.md +5 -4
- package/pack/generated/pi/skills/rite-customize/SKILL.md +1 -1
- package/pack/generated/pi/skills/rite-define/SKILL.md +4 -3
- package/pack/generated/pi/skills/rite-doctor/SKILL.md +12 -6
- package/pack/generated/pi/skills/rite-dogfood/SKILL.md +2 -2
- package/pack/generated/pi/skills/rite-explain/SKILL.md +1 -1
- package/pack/generated/pi/skills/rite-fast/SKILL.md +8 -6
- package/pack/generated/pi/skills/rite-frame/SKILL.md +1 -1
- package/pack/generated/pi/skills/rite-handoff/SKILL.md +4 -3
- package/pack/generated/pi/skills/rite-learn/SKILL.md +2 -2
- package/pack/generated/pi/skills/rite-plan/SKILL.md +1 -1
- package/pack/generated/pi/skills/rite-plan/reference/replan-and-repair.md +2 -0
- package/pack/generated/pi/skills/rite-plan/reference/slicing.md +3 -1
- package/pack/generated/pi/skills/rite-polish/SKILL.md +2 -2
- package/pack/generated/pi/skills/rite-pov/SKILL.md +1 -1
- package/pack/generated/pi/skills/rite-pr-feedback/SKILL.md +5 -4
- package/pack/generated/pi/skills/rite-pressure-test/SKILL.md +7 -5
- package/pack/generated/pi/skills/rite-prototype/SKILL.md +1 -1
- package/pack/generated/pi/skills/rite-prove/SKILL.md +1 -1
- package/pack/generated/pi/skills/rite-quick/SKILL.md +11 -6
- package/pack/generated/pi/skills/rite-resolve/SKILL.md +3 -3
- package/pack/generated/pi/skills/rite-resolve/reference/answer-protocol.md +4 -5
- package/pack/generated/pi/skills/rite-review/SKILL.md +3 -2
- package/pack/generated/pi/skills/rite-seal/SKILL.md +4 -4
- package/pack/generated/pi/skills/rite-seal/reference/go-no-go.md +2 -0
- package/pack/generated/pi/skills/rite-seal/reference/seal-template.md +5 -2
- package/pack/generated/pi/skills/rite-ship/SKILL.md +1 -1
- package/pack/generated/pi/skills/rite-ship/reference/close-out.md +3 -2
- package/pack/generated/pi/skills/rite-spec/SKILL.md +5 -2
- package/pack/generated/pi/skills/rite-status/SKILL.md +1 -1
- package/pack/generated/pi/skills/rite-temper/SKILL.md +2 -2
- package/pack/generated/pi/skills/rite-temper/reference/significance.md +2 -0
- package/pack/generated/pi/skills/rite-upgrade/SKILL.md +4 -2
- package/pack/generated/pi/skills/rite-vet/SKILL.md +4 -3
- package/pack/generated/pi/skills/rite-vet/reference/artifacts.md +1 -1
- package/pack/generated/pi/skills/rite-watch-pr/SKILL.md +1 -1
- package/pack/generated/pi/skills/rite-zoom-out/SKILL.md +1 -1
- package/package.json +3 -2
- package/scripts/build-host-artifacts.sh +13 -0
- package/scripts/codex-generate.sh +5 -1
- package/scripts/devin-generate.sh +4 -3
- package/scripts/install-lib.sh +5 -0
- package/scripts/omp-generate.sh +23 -1
- package/scripts/pi-generate.sh +2 -2
- package/engine/cmd/releasepack/main_test.go +0 -239
- package/engine/harnessmatrix_test.go +0 -46
- package/engine/help_test.go +0 -241
- package/engine/internal/acceptance/acceptance_test.go +0 -946
- package/engine/internal/devritespaths/paths_test.go +0 -128
- package/engine/internal/fsutil/copy_test.go +0 -154
- package/engine/internal/gate/gate_test.go +0 -865
- package/engine/internal/gate/readiness_binding_test.go +0 -443
- package/engine/internal/gitenv/env_test.go +0 -48
- package/engine/internal/hostpack/hostpack_test.go +0 -269
- package/engine/internal/install/install_test.go +0 -1741
- package/engine/internal/install/workspace_advisory_test.go +0 -54
- package/engine/internal/lib/candidate_test.go +0 -506
- package/engine/internal/lib/claims_test.go +0 -267
- package/engine/internal/lib/closeout_test.go +0 -266
- package/engine/internal/lib/context_next_test.go +0 -860
- package/engine/internal/lib/cursor_compat_test.go +0 -65
- package/engine/internal/lib/detect_test.go +0 -118
- package/engine/internal/lib/drift_test.go +0 -135
- package/engine/internal/lib/dup_test.go +0 -666
- package/engine/internal/lib/environment_report_test.go +0 -54
- package/engine/internal/lib/evidencefresh_test.go +0 -120
- package/engine/internal/lib/handoff_test.go +0 -83
- package/engine/internal/lib/manifest_union_test.go +0 -251
- package/engine/internal/lib/metrics_test.go +0 -28
- package/engine/internal/lib/migrate_test.go +0 -213
- package/engine/internal/lib/observe_budgets_test.go +0 -396
- package/engine/internal/lib/open_visual_test.go +0 -291
- package/engine/internal/lib/regression_test.go +0 -282
- package/engine/internal/lib/resolve_remediation_test.go +0 -192
- package/engine/internal/lib/secretscan_test.go +0 -556
- package/engine/internal/lib/slicecheck_test.go +0 -170
- package/engine/internal/lib/taskgraph_test.go +0 -353
- package/engine/internal/lib/triggers_test.go +0 -23
- package/engine/internal/lib/util_test.go +0 -148
- package/engine/internal/lib/visual_outline_test.go +0 -189
- package/engine/internal/lib/windows_test.go +0 -420
- package/engine/internal/lib/workspace_read_test.go +0 -102
- package/engine/internal/markdowntext/markdowntext_fuzz_test.go +0 -36
- package/engine/internal/markdowntext/markdowntext_test.go +0 -58
- package/engine/internal/markdowntext/testdata/structural.json +0 -277
- package/engine/internal/notes/notes_test.go +0 -545
- package/engine/internal/overhaul/admit/admit_test.go +0 -204
- package/engine/internal/overhaul/admit/packet_test.go +0 -223
- package/engine/internal/overhaul/bench/run_test.go +0 -316
- package/engine/internal/overhaul/ovio/ovio_test.go +0 -75
- package/engine/internal/overhaul/packet/packet_test.go +0 -263
- package/engine/internal/overhaul/records/init_test.go +0 -96
- package/engine/internal/overhaul/records/records_test.go +0 -696
- package/engine/internal/overhaul/records/run_test.go +0 -77
- package/engine/internal/overhaul/render/run_test.go +0 -928
- package/engine/internal/overhaul/score/run_test.go +0 -636
- package/engine/internal/overhaul/snapshot/run_test.go +0 -718
- package/engine/internal/parallel/cli_test.go +0 -91
- package/engine/internal/parallel/ops_test.go +0 -939
- package/engine/internal/parallel/parallel_test.go +0 -645
- package/engine/internal/parallel/pathdisjoint_fuzz_test.go +0 -43
- package/engine/internal/parallel/pathdisjoint_test.go +0 -193
- package/engine/internal/parallel/select_test.go +0 -95
- package/engine/internal/parallel/testdata/fuzz/FuzzPathDisjoint/a449b81b4711b7b4 +0 -3
- package/engine/internal/reason/reason_test.go +0 -37
- package/engine/internal/release/release_test.go +0 -181
- package/engine/internal/rootfacts/facts_test.go +0 -364
- package/engine/internal/safepath/safepath_fuzz_test.go +0 -21
- package/engine/internal/safepath/safepath_test.go +0 -69
- package/engine/internal/safepath/safepath_windows_test.go +0 -26
- package/engine/internal/state/acceptance_test.go +0 -57
- package/engine/internal/state/budgets_test.go +0 -135
- package/engine/internal/state/cmd/workflowmanifest/main_test.go +0 -96
- package/engine/internal/state/concurrency_test.go +0 -184
- package/engine/internal/state/cursor_fuzz_test.go +0 -80
- package/engine/internal/state/cursor_test.go +0 -276
- package/engine/internal/state/observation_test.go +0 -961
- package/engine/internal/state/observation_unix_test.go +0 -68
- package/engine/internal/state/state_test.go +0 -986
- package/engine/internal/state/taskgraph_fuzz_test.go +0 -38
- package/engine/internal/state/taskgraph_test.go +0 -43
- package/engine/internal/state/testdata/fuzz/FuzzCursorRoundTrip/114b28f68c1fa4db +0 -4
- package/engine/internal/state/testdata/fuzz/FuzzCursorRoundTrip/378a0f2218e812ea +0 -4
- package/engine/internal/state/testdata/fuzz/FuzzCursorRoundTrip/39eaa26fcb481e3c +0 -4
- package/engine/internal/state/testdata/fuzz/FuzzCursorRoundTrip/776ca1dc0143acf0 +0 -4
- package/engine/internal/state/testdata/fuzz/FuzzCursorRoundTrip/9295930c1ebb81df +0 -4
- package/engine/internal/state/testdata/fuzz/FuzzCursorRoundTrip/a60de309dc33be0d +0 -4
- package/engine/internal/state/testdata/fuzz/FuzzCursorRoundTrip/f04dc7b06ef7c99f +0 -4
- package/engine/internal/state/testdata/fuzz/FuzzCursorRoundTrip/f3000ac510878bd6 +0 -4
- package/engine/internal/state/testdata/fuzz/FuzzWorkspaceSchemaRow/a75aabb9f2a847d5 +0 -2
- package/engine/internal/state/workspaceschema_fuzz_test.go +0 -27
- package/engine/internal/state/workspaceschema_test.go +0 -101
- package/engine/internal/state/write_test.go +0 -136
- package/engine/internal/version/version_test.go +0 -29
- package/engine/internal/workflow/commands_test.go +0 -18
- package/engine/note_routing_test.go +0 -95
- package/engine/observation_contract_test.go +0 -175
- package/engine/root_routing_test.go +0 -340
|
@@ -8,6 +8,7 @@ import (
|
|
|
8
8
|
"io/fs"
|
|
9
9
|
"os"
|
|
10
10
|
"path/filepath"
|
|
11
|
+
"slices"
|
|
11
12
|
"sort"
|
|
12
13
|
"strings"
|
|
13
14
|
|
|
@@ -41,6 +42,13 @@ func (r *runner) preflightInstall() error {
|
|
|
41
42
|
if err != nil {
|
|
42
43
|
return err
|
|
43
44
|
}
|
|
45
|
+
if !snapshot.missing && r.isPinnedAlias(rel) {
|
|
46
|
+
// scripts/pin.sh aliases are not in the payload; carry them
|
|
47
|
+
// forward (hashed) so prune keeps them and uninstall removes them.
|
|
48
|
+
r.addManifest(rel)
|
|
49
|
+
r.addInstallRecord(rel, snapshot.hash)
|
|
50
|
+
continue
|
|
51
|
+
}
|
|
44
52
|
if !snapshot.missing {
|
|
45
53
|
if kind := managedConflict(record, snapshot); kind != "" && !r.opts.Force {
|
|
46
54
|
conflicts = append(conflicts, fmt.Sprintf("%s: %s", kind, rel))
|
|
@@ -50,6 +58,9 @@ func (r *runner) preflightInstall() error {
|
|
|
50
58
|
if _, err := r.rememberPath(merge.TargetRel); err != nil {
|
|
51
59
|
return err
|
|
52
60
|
}
|
|
61
|
+
if err := dryRunStripMarker(map[string][]byte{}, r.target, merge); err != nil {
|
|
62
|
+
return err
|
|
63
|
+
}
|
|
53
64
|
}
|
|
54
65
|
}
|
|
55
66
|
for _, rel := range r.installMergeTargets() {
|
|
@@ -60,7 +71,42 @@ func (r *runner) preflightInstall() error {
|
|
|
60
71
|
if _, err := r.rememberPath(ManifestName); err != nil {
|
|
61
72
|
return err
|
|
62
73
|
}
|
|
63
|
-
|
|
74
|
+
if err := managedConflictError(conflicts); err != nil {
|
|
75
|
+
return err
|
|
76
|
+
}
|
|
77
|
+
return r.preflightMerges()
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
// preflightMerges computes every config merge against the current files, so
|
|
81
|
+
// a merge the installer would reject fails before anything is written.
|
|
82
|
+
func (r *runner) preflightMerges() error {
|
|
83
|
+
if !r.opts.WithSkills {
|
|
84
|
+
return nil
|
|
85
|
+
}
|
|
86
|
+
for _, m := range []struct {
|
|
87
|
+
enabled bool
|
|
88
|
+
merge hostpack.MarkerMerge
|
|
89
|
+
}{
|
|
90
|
+
{r.opts.WithCodex, hostpack.CodexAgentsMerge},
|
|
91
|
+
{r.opts.WithPi, hostpack.PiAgentsMerge},
|
|
92
|
+
{r.opts.WithDevin, hostpack.DevinAgentsMerge},
|
|
93
|
+
} {
|
|
94
|
+
if !m.enabled {
|
|
95
|
+
continue
|
|
96
|
+
}
|
|
97
|
+
if _, _, err := r.markerMergeNext(m.merge); err != nil {
|
|
98
|
+
return fmt.Errorf("merge %s: %w", m.merge.TargetRel, err)
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
if r.opts.WithCodex {
|
|
102
|
+
if _, err := r.codexConfigNext(); err != nil {
|
|
103
|
+
return fmt.Errorf("merge %s: %w", hostpack.CodexConfigMerge.TargetRel, err)
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
if _, _, err := r.claudeSettingsNext(); err != nil {
|
|
107
|
+
return fmt.Errorf("seed claude settings: %w", err)
|
|
108
|
+
}
|
|
109
|
+
return nil
|
|
64
110
|
}
|
|
65
111
|
|
|
66
112
|
func (r *runner) preflightUninstall(entries []string) error {
|
|
@@ -91,6 +137,27 @@ func (r *runner) preflightUninstall(entries []string) error {
|
|
|
91
137
|
return managedConflictError(conflicts)
|
|
92
138
|
}
|
|
93
139
|
|
|
140
|
+
// isPinnedAlias reports whether a dropped manifest entry is a scripts/pin.sh
|
|
141
|
+
// alias wrapper: <skills>/<name>/SKILL.md for a name that is not a built-in
|
|
142
|
+
// alias, delegating with the alias description.
|
|
143
|
+
func (r *runner) isPinnedAlias(rel string) bool {
|
|
144
|
+
var name string
|
|
145
|
+
for _, prefix := range []string{hostpack.ClaudeSkillsTarget, hostpack.CodexSkillsTarget} {
|
|
146
|
+
if rest, ok := strings.CutPrefix(rel, prefix+"/"); ok {
|
|
147
|
+
name, ok = strings.CutSuffix(rest, "/SKILL.md")
|
|
148
|
+
if !ok || strings.Contains(name, "/") {
|
|
149
|
+
return false
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
if name == "" || slices.ContainsFunc(hostpack.Aliases, func(a hostpack.Alias) bool { return a.Name == name }) {
|
|
154
|
+
return false
|
|
155
|
+
}
|
|
156
|
+
// #nosec G304 -- manifest entry under the operator target, path-checked by rememberPath
|
|
157
|
+
data, err := os.ReadFile(filepath.Join(r.target, filepath.FromSlash(rel)))
|
|
158
|
+
return err == nil && strings.Contains(string(data), "\ndescription: Alias of DevRites /")
|
|
159
|
+
}
|
|
160
|
+
|
|
94
161
|
func (r *runner) desiredInstallPaths() (map[string]bool, error) {
|
|
95
162
|
out := map[string]bool{".devrites/README.md": true}
|
|
96
163
|
for _, tree := range hostpack.InstallTrees(r.opts.WithSkills, r.opts.WithAgents, r.opts.WithCodex, r.opts.WithOmp, r.opts.WithPi, r.opts.WithDevin) {
|
|
@@ -132,6 +199,9 @@ func (r *runner) desiredInstallPaths() (map[string]bool, error) {
|
|
|
132
199
|
if r.opts.WithSkills {
|
|
133
200
|
out[hostpack.ClaudeSettingsMerge.MarkerRel] = true
|
|
134
201
|
}
|
|
202
|
+
for _, config := range r.hostConfigs() {
|
|
203
|
+
out[config.Rel] = true
|
|
204
|
+
}
|
|
135
205
|
return out, nil
|
|
136
206
|
}
|
|
137
207
|
|
|
@@ -4,6 +4,7 @@ import (
|
|
|
4
4
|
"fmt"
|
|
5
5
|
"os"
|
|
6
6
|
"path/filepath"
|
|
7
|
+
"slices"
|
|
7
8
|
"strings"
|
|
8
9
|
|
|
9
10
|
"github.com/devrites/devrites/internal/hostpack"
|
|
@@ -25,6 +26,11 @@ func (r *runner) uninstall() error {
|
|
|
25
26
|
fmt.Fprintln(r.opts.Stdout, " (dry run - no changes)")
|
|
26
27
|
}
|
|
27
28
|
fmt.Fprintln(r.opts.Stdout)
|
|
29
|
+
kept, err := r.relinquishEditedHostConfigs()
|
|
30
|
+
if err != nil {
|
|
31
|
+
return err
|
|
32
|
+
}
|
|
33
|
+
entries = slices.DeleteFunc(entries, func(rel string) bool { return kept[rel] })
|
|
28
34
|
if err := r.preflightUninstall(entries); err != nil {
|
|
29
35
|
return err
|
|
30
36
|
}
|
|
@@ -57,7 +63,7 @@ func (r *runner) uninstall() error {
|
|
|
57
63
|
continue
|
|
58
64
|
}
|
|
59
65
|
if merge.TargetRel == hostpack.ClaudeSettingsMerge.TargetRel {
|
|
60
|
-
if err := r.stripClaudeSettings(filepath.Join(r.target, filepath.FromSlash(merge.TargetRel))
|
|
66
|
+
if err := r.stripClaudeSettings(filepath.Join(r.target, filepath.FromSlash(merge.TargetRel))); err != nil {
|
|
61
67
|
return fmt.Errorf("strip DevRites settings from %s: %w", merge.TargetRel, err)
|
|
62
68
|
}
|
|
63
69
|
continue
|
|
@@ -77,6 +77,9 @@ func runUpdate(opts Options) error {
|
|
|
77
77
|
return fmt.Errorf("parse manifest install flags: %w", err)
|
|
78
78
|
}
|
|
79
79
|
}
|
|
80
|
+
if err := parseArgs(opts.args, &next); err != nil {
|
|
81
|
+
return fmt.Errorf("parse update flags: %w", err)
|
|
82
|
+
}
|
|
80
83
|
next.Target = target
|
|
81
84
|
next.PayloadDir = payload
|
|
82
85
|
next.SourceDir = source
|
|
@@ -147,12 +150,13 @@ func runRemoteUpdate(opts Options, target, installed string) error {
|
|
|
147
150
|
if _, err := verifyEngineBinary(candidate.EnginePath, tag, 30*time.Second); err != nil {
|
|
148
151
|
return fmt.Errorf("verify update engine: %w", err)
|
|
149
152
|
}
|
|
150
|
-
|
|
151
|
-
|
|
153
|
+
// Explicit flags first so the fixed handoff arguments below win.
|
|
154
|
+
args := append([]string{"update"}, opts.args...)
|
|
155
|
+
args = append(args,
|
|
152
156
|
"--target", target,
|
|
153
157
|
"--source-dir", candidate.SourceDir,
|
|
154
158
|
"--payload-dir", candidate.PayloadDir,
|
|
155
|
-
|
|
159
|
+
)
|
|
156
160
|
if opts.DryRun {
|
|
157
161
|
args = append(args, "--dry-run")
|
|
158
162
|
}
|
|
@@ -9,6 +9,7 @@ import (
|
|
|
9
9
|
"io"
|
|
10
10
|
"os"
|
|
11
11
|
"path/filepath"
|
|
12
|
+
"slices"
|
|
12
13
|
"sort"
|
|
13
14
|
"strconv"
|
|
14
15
|
"strings"
|
|
@@ -159,14 +160,17 @@ func normalizeClaimPaths(raw []string) ([]string, error) {
|
|
|
159
160
|
if err != nil {
|
|
160
161
|
return nil, err
|
|
161
162
|
}
|
|
162
|
-
|
|
163
|
-
|
|
163
|
+
// Fold case: on a case-insensitive filesystem .DEVRITES is the control
|
|
164
|
+
// tree and A.go and a.go are one file.
|
|
165
|
+
folded := strings.ToLower(norm)
|
|
166
|
+
if folded == ".devrites" || strings.HasPrefix(folded, ".devrites/") ||
|
|
167
|
+
folded == ".git" || strings.HasPrefix(folded, ".git/") {
|
|
164
168
|
return nil, fmt.Errorf("path must not claim control-tree or git internals: %q", norm)
|
|
165
169
|
}
|
|
166
|
-
if _, dup := seen[
|
|
170
|
+
if _, dup := seen[folded]; dup {
|
|
167
171
|
return nil, fmt.Errorf("duplicate path %q", norm)
|
|
168
172
|
}
|
|
169
|
-
seen[
|
|
173
|
+
seen[folded] = struct{}{}
|
|
170
174
|
out = append(out, norm)
|
|
171
175
|
}
|
|
172
176
|
sort.Strings(out)
|
|
@@ -186,27 +190,31 @@ func validSession(s string) bool {
|
|
|
186
190
|
return true
|
|
187
191
|
}
|
|
188
192
|
|
|
189
|
-
// claimConflicts returns live claims by other sessions
|
|
193
|
+
// claimConflicts returns live claims by other sessions overlapping any path: a
|
|
194
|
+
// claimed directory covers every path beneath it, and vice versa.
|
|
190
195
|
func claimConflicts(live []*claimRecord, session string, paths []string) []*claimRecord {
|
|
191
|
-
want := map[string]struct{}{}
|
|
192
|
-
for _, p := range paths {
|
|
193
|
-
want[p] = struct{}{}
|
|
194
|
-
}
|
|
195
196
|
var out []*claimRecord
|
|
196
197
|
for _, rec := range live {
|
|
197
198
|
if rec.Session == session {
|
|
198
199
|
continue
|
|
199
200
|
}
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
}
|
|
201
|
+
if slices.ContainsFunc(rec.Paths, func(held string) bool {
|
|
202
|
+
return slices.ContainsFunc(paths, func(p string) bool { return claimPathsOverlap(held, p) })
|
|
203
|
+
}) {
|
|
204
|
+
out = append(out, rec)
|
|
205
205
|
}
|
|
206
206
|
}
|
|
207
207
|
return out
|
|
208
208
|
}
|
|
209
209
|
|
|
210
|
+
// claimPathsOverlap folds case always: on a case-sensitive filesystem a false
|
|
211
|
+
// overlap only serializes two writers, while a missed one on macOS/Windows
|
|
212
|
+
// lets both edit the same file.
|
|
213
|
+
func claimPathsOverlap(a, b string) bool {
|
|
214
|
+
a, b = strings.ToLower(a), strings.ToLower(b)
|
|
215
|
+
return a == b || strings.HasPrefix(a, b+"/") || strings.HasPrefix(b, a+"/")
|
|
216
|
+
}
|
|
217
|
+
|
|
210
218
|
// An unreadable line may be a live claim, so the conflict gates refuse to
|
|
211
219
|
// answer rather than report a path free.
|
|
212
220
|
const unparsedLedgerMsg = "claim: %d unparsed ledger line(s); cannot rule out a conflict, repair the claims ledger\n"
|
|
@@ -250,6 +258,10 @@ func claimAdd(root string, args []string, stdout, stderr io.Writer) int {
|
|
|
250
258
|
ttl = min(max(n, claimMinTTL), claimMaxTTL)
|
|
251
259
|
i++
|
|
252
260
|
default:
|
|
261
|
+
if strings.HasPrefix(args[i], "-") {
|
|
262
|
+
fmt.Fprintf(stderr, "claim: unknown flag %q\n", args[i])
|
|
263
|
+
return 2
|
|
264
|
+
}
|
|
253
265
|
raw = append(raw, args[i])
|
|
254
266
|
}
|
|
255
267
|
}
|
|
@@ -420,6 +432,10 @@ func claimCheck(root string, args []string, stdout, stderr io.Writer) int {
|
|
|
420
432
|
session = argAt(args, i+1)
|
|
421
433
|
i++
|
|
422
434
|
default:
|
|
435
|
+
if strings.HasPrefix(args[i], "-") {
|
|
436
|
+
fmt.Fprintf(stderr, "claim: unknown flag %q\n", args[i])
|
|
437
|
+
return 2
|
|
438
|
+
}
|
|
423
439
|
raw = append(raw, args[i])
|
|
424
440
|
}
|
|
425
441
|
}
|
|
@@ -37,6 +37,12 @@ func RunTaskGraphCheck(root, slug string, stdout, stderr io.Writer) int {
|
|
|
37
37
|
recordMetric(root, slug, "define", "size-advisory", "", int64(over))
|
|
38
38
|
}
|
|
39
39
|
}
|
|
40
|
+
if edges := edgeAdvisories(graph); len(edges) > 0 {
|
|
41
|
+
for _, line := range edges {
|
|
42
|
+
fmt.Fprintf(stdout, "task-graph: %s\n", line)
|
|
43
|
+
}
|
|
44
|
+
recordMetric(root, slug, "define", "edge-advisory", "", int64(len(edges)))
|
|
45
|
+
}
|
|
40
46
|
return 0
|
|
41
47
|
}
|
|
42
48
|
|
|
@@ -157,8 +157,17 @@ func RunContext(root string, args []string, stdout, stderr io.Writer) int {
|
|
|
157
157
|
// reference text.
|
|
158
158
|
if opts.role != "" {
|
|
159
159
|
rel := roleAgentPath(manifest, opts.role)
|
|
160
|
-
|
|
161
|
-
|
|
160
|
+
abs, label := filepath.Join(skillsRoot, "..", "agents", filepath.FromSlash(rel)), "agents/"+rel
|
|
161
|
+
// A Codex install has skills in .agents/skills but role agents at
|
|
162
|
+
// <project>/.codex/agents/<name>.toml, with no Markdown sibling.
|
|
163
|
+
if _, err := os.Stat(abs); err != nil {
|
|
164
|
+
codex := strings.TrimSuffix(filepath.Base(filepath.FromSlash(rel)), ".md") + ".toml"
|
|
165
|
+
candidate := filepath.Join(filepath.Dir(root), ".codex", "agents", codex)
|
|
166
|
+
if info, err := os.Stat(candidate); err == nil && info.Mode().IsRegular() {
|
|
167
|
+
abs, label = candidate, ".codex/agents/"+codex
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
if writeContextEntry(&bundle, abs, label, seen, true) {
|
|
162
171
|
loaded++
|
|
163
172
|
} else {
|
|
164
173
|
// The agent contract is a pack file, not a workspace artifact: a
|
|
@@ -204,7 +213,10 @@ func RunContext(root string, args []string, stdout, stderr io.Writer) int {
|
|
|
204
213
|
}
|
|
205
214
|
for _, rel := range workspaceList {
|
|
206
215
|
abs := filepath.Join(featureDir, filepath.FromSlash(rel))
|
|
207
|
-
|
|
216
|
+
// Role bundles without --slice (full Vet, Review, Seal) read
|
|
217
|
+
// everything; root and --slice bundles take over-budget
|
|
218
|
+
// artifacts by anchor.
|
|
219
|
+
if opts.slice == "" && opts.role != "" {
|
|
208
220
|
if writeContextEntry(&bundle, abs, "workspace/"+rel, seen, false) {
|
|
209
221
|
loaded++
|
|
210
222
|
}
|
|
@@ -269,6 +281,8 @@ func RunContext(root string, args []string, stdout, stderr io.Writer) int {
|
|
|
269
281
|
fmt.Fprintln(stdout, ")")
|
|
270
282
|
if opts.slice != "" {
|
|
271
283
|
fmt.Fprintf(stdout, "scope: slice %s (%d whole, %d by-reference)\n", opts.slice, whole, byReference)
|
|
284
|
+
} else if byReference > 0 {
|
|
285
|
+
fmt.Fprintf(stdout, "scope: root (%d whole, %d by-reference over budget)\n", whole, byReference)
|
|
272
286
|
}
|
|
273
287
|
if workspaceScoped {
|
|
274
288
|
fmt.Fprintf(stdout, "workspace: role-scoped for %s (%d of %d declared artifacts)\n",
|
|
@@ -334,16 +348,17 @@ func expandIncludes(abs string, data []byte) []byte {
|
|
|
334
348
|
})
|
|
335
349
|
}
|
|
336
350
|
|
|
337
|
-
// writeSliceEntry writes one workspace artifact of a --slice bundle:
|
|
338
|
-
// as the slice block plus a by-reference index
|
|
339
|
-
// over its line/byte budget as a by-reference index
|
|
351
|
+
// writeSliceEntry writes one workspace artifact of a --slice or root bundle:
|
|
352
|
+
// with a slice, tasks.md as the slice block plus a by-reference index; any
|
|
353
|
+
// canonical artifact over its line/byte budget as a by-reference index;
|
|
354
|
+
// everything else whole.
|
|
340
355
|
func writeSliceEntry(bundle *strings.Builder, project, abs, label, slice, block string, ids []citedID, seen map[string]bool) (loaded, byRef bool) {
|
|
341
356
|
if seen[abs] {
|
|
342
357
|
return false, false
|
|
343
358
|
}
|
|
344
359
|
data, err := os.ReadFile(abs) // #nosec G304 -- abs is resolved from the validated feature workspace
|
|
345
360
|
name := filepath.Base(abs)
|
|
346
|
-
if err == nil && name == "tasks.md" {
|
|
361
|
+
if err == nil && name == "tasks.md" && slice != "" {
|
|
347
362
|
seen[abs] = true
|
|
348
363
|
fmt.Fprintf(bundle, "===== %s (%s block) =====\n%s\n", label, slice, block)
|
|
349
364
|
} else if status, ok := state.ArtifactBudget(name, data); err != nil || !ok || !status.Over {
|
|
@@ -537,15 +552,23 @@ func parseContextArgs(args []string, stderr io.Writer) (contextOpts, int) {
|
|
|
537
552
|
// canonical pack (this repo), a project-level install, then the user-global
|
|
538
553
|
// install.
|
|
539
554
|
func resolveSkillsRoot(root, explicit string) (string, error) {
|
|
555
|
+
// root is the .devrites directory; its parent is the project root that
|
|
556
|
+
// holds pack/ and host skill installs.
|
|
557
|
+
project := filepath.Dir(root)
|
|
540
558
|
if explicit != "" {
|
|
541
|
-
|
|
542
|
-
|
|
559
|
+
candidates := []string{explicit}
|
|
560
|
+
// Host guidance passes a project-relative root (.omp/skills); keep it
|
|
561
|
+
// working when the engine runs from a subdirectory.
|
|
562
|
+
if !filepath.IsAbs(explicit) {
|
|
563
|
+
candidates = append(candidates, filepath.Join(project, explicit))
|
|
564
|
+
}
|
|
565
|
+
for _, candidate := range candidates {
|
|
566
|
+
if info, err := os.Stat(candidate); err == nil && info.IsDir() {
|
|
567
|
+
return candidate, nil
|
|
568
|
+
}
|
|
543
569
|
}
|
|
544
570
|
return "", fmt.Errorf("skills root %q is not a directory", explicit)
|
|
545
571
|
}
|
|
546
|
-
// root is the .devrites directory; its parent is the project root that
|
|
547
|
-
// holds pack/ and host skill installs.
|
|
548
|
-
project := filepath.Dir(root)
|
|
549
572
|
candidates := []string{
|
|
550
573
|
filepath.Join(project, "pack", ".claude", "skills"),
|
|
551
574
|
filepath.Join(root, "pack", ".claude", "skills"),
|
|
@@ -6,6 +6,8 @@ import (
|
|
|
6
6
|
"os"
|
|
7
7
|
"path/filepath"
|
|
8
8
|
"strings"
|
|
9
|
+
|
|
10
|
+
"github.com/devrites/devrites/internal/devritespaths"
|
|
9
11
|
)
|
|
10
12
|
|
|
11
13
|
const diffScopeUsage = `usage: devrites-engine check diff-scope <slug> --allow <csv> | --allow-file <path> [--worktree|--staged|--base <ref>] [--allow-empty] [--cwd <dir>]
|
|
@@ -15,6 +17,9 @@ Verifies the changed-path set stays inside the declared allowlist. Modes:
|
|
|
15
17
|
--staged git diff --name-only --cached
|
|
16
18
|
--base ref git diff --name-only <ref> (tracked only)
|
|
17
19
|
Allowlist entries match exactly or as directory prefixes ("dir" covers "dir/...").
|
|
20
|
+
A rename counts as both its old and new path. Engine-written .devrites machine
|
|
21
|
+
files (claims ledger, dispatch/metrics/baseline/lease/lock files, ctx/ bundles)
|
|
22
|
+
are ignored; every other .devrites path is reported.
|
|
18
23
|
Exit 0 clean, 3 a path escaped the allowlist or the diff is empty without --allow-empty.`
|
|
19
24
|
|
|
20
25
|
// RunCheckDiffScope is the mechanical post-return contract gate: a writer's
|
|
@@ -97,6 +102,10 @@ func parseDiffScopeArgs(root string, args []string, stderr io.Writer) (diffScope
|
|
|
97
102
|
case "--base":
|
|
98
103
|
opts.mode = "base"
|
|
99
104
|
opts.base = argAt(args, i+1)
|
|
105
|
+
if strings.HasPrefix(opts.base, "-") {
|
|
106
|
+
fmt.Fprintln(stderr, "diff-scope: --base requires a ref (not a flag)")
|
|
107
|
+
return opts, 2
|
|
108
|
+
}
|
|
100
109
|
i++
|
|
101
110
|
case "--allow-empty":
|
|
102
111
|
opts.allowEmpty = true
|
|
@@ -142,14 +151,81 @@ func (o diffScopeOpts) changedPaths() ([]string, error) {
|
|
|
142
151
|
if dir == "" {
|
|
143
152
|
dir = o.root
|
|
144
153
|
}
|
|
154
|
+
var paths []string
|
|
155
|
+
var err error
|
|
145
156
|
switch o.mode {
|
|
146
157
|
case "staged":
|
|
147
|
-
|
|
158
|
+
paths, err = gitDiffNames(dir, "--cached")
|
|
148
159
|
case "base":
|
|
149
|
-
|
|
160
|
+
paths, err = gitDiffNames(dir, o.base)
|
|
150
161
|
default:
|
|
151
|
-
|
|
162
|
+
paths, err = gitStatusPaths(dir)
|
|
163
|
+
}
|
|
164
|
+
if err != nil {
|
|
165
|
+
return nil, err
|
|
166
|
+
}
|
|
167
|
+
// The engine's own machine files are never task paths.
|
|
168
|
+
control := devritesRepoPrefix(dir, o.root)
|
|
169
|
+
kept := paths[:0]
|
|
170
|
+
for _, path := range paths {
|
|
171
|
+
if rel, ok := strings.CutPrefix(path, control+"/"); !ok || !engineMachineFile(rel) {
|
|
172
|
+
kept = append(kept, path)
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
return kept, nil
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
// engineMachineFiles are the feature-root files the engine itself writes:
|
|
179
|
+
// the dispatch ledger, metrics ledger, drift and regression baselines, the
|
|
180
|
+
// parallel lease, and the feature lock.
|
|
181
|
+
var engineMachineFiles = map[string]bool{
|
|
182
|
+
"dispatch.json": true,
|
|
183
|
+
MetricsFile: true,
|
|
184
|
+
driftBaselineFile: true,
|
|
185
|
+
regressionBaselineFile: true,
|
|
186
|
+
"parallel-lease.md": true,
|
|
187
|
+
".lock": true,
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
// engineMachineFile reports whether rel, relative to the .devrites tree, is
|
|
191
|
+
// engine-written: the claims ledger and its lock, a feature's machine files,
|
|
192
|
+
// or its ctx/ context bundles. Every other .devrites path stays reported.
|
|
193
|
+
func engineMachineFile(rel string) bool {
|
|
194
|
+
if rel == ClaimsFile || rel == ClaimsFile+".lock" {
|
|
195
|
+
return true
|
|
196
|
+
}
|
|
197
|
+
rest, ok := strings.CutPrefix(rel, "work/")
|
|
198
|
+
if !ok {
|
|
199
|
+
return false
|
|
200
|
+
}
|
|
201
|
+
slug, name, ok := strings.Cut(rest, "/")
|
|
202
|
+
return ok && devritespaths.ValidSlug(slug) && (engineMachineFiles[name] || strings.HasPrefix(name, "ctx/"))
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
// devritesRepoPrefix returns the project's control tree as a path relative to
|
|
206
|
+
// dir's repository root: normally ".devrites", or "sub/.devrites" when the
|
|
207
|
+
// project lives in a subdirectory of the repository.
|
|
208
|
+
func devritesRepoPrefix(dir, root string) string {
|
|
209
|
+
if filepath.Base(root) != ".devrites" {
|
|
210
|
+
return ".devrites"
|
|
211
|
+
}
|
|
212
|
+
top, err := runGitCommand(dir, nil, "rev-parse", "--show-toplevel")
|
|
213
|
+
if err != nil {
|
|
214
|
+
return ".devrites"
|
|
215
|
+
}
|
|
216
|
+
physicalTop, err := filepath.EvalSymlinks(strings.TrimSpace(string(top)))
|
|
217
|
+
if err != nil {
|
|
218
|
+
return ".devrites"
|
|
219
|
+
}
|
|
220
|
+
physicalRoot, err := filepath.EvalSymlinks(root)
|
|
221
|
+
if err != nil {
|
|
222
|
+
return ".devrites"
|
|
223
|
+
}
|
|
224
|
+
rel, err := filepath.Rel(physicalTop, physicalRoot)
|
|
225
|
+
if err != nil || !filepath.IsLocal(rel) {
|
|
226
|
+
return ".devrites"
|
|
152
227
|
}
|
|
228
|
+
return filepath.ToSlash(rel)
|
|
153
229
|
}
|
|
154
230
|
|
|
155
231
|
// gitStatusPaths lists every path the writer touched: tracked modifications,
|
|
@@ -26,8 +26,10 @@ import (
|
|
|
26
26
|
const dispatchUsage = `usage: devrites-engine dispatch <slug> <open|start|seal|return|status|abandon> [--phase p] [--wave w] [--role r] [--handle h] [--reason s] [--slice SLICE-###] [--reslice-review <DRIFT-ID>]
|
|
27
27
|
|
|
28
28
|
Wave barrier for parallel agent dispatch: seal fails until every declared
|
|
29
|
-
role has a distinct handle; return fails before seal
|
|
30
|
-
|
|
29
|
+
role has a distinct handle; return fails before seal. status --wave exits
|
|
30
|
+
nonzero until that wave is complete; bare status lists every wave and exits
|
|
31
|
+
nonzero while any wave is open or sealed (abandoned waves are listed only).
|
|
32
|
+
A complete wave cannot be abandoned.
|
|
31
33
|
|
|
32
34
|
A build wave with a wright role must name its slice(s) with --slice; a vet
|
|
33
35
|
wave may (slice-bound recheck). Every 5 rounds of one kind on one slice, the
|
|
@@ -55,10 +57,20 @@ type dispatchWave struct {
|
|
|
55
57
|
ResliceReviewed []string `json:"reslice_reviewed,omitempty"`
|
|
56
58
|
}
|
|
57
59
|
|
|
60
|
+
func waveStarted(w *dispatchWave) bool {
|
|
61
|
+
for _, r := range w.Roles {
|
|
62
|
+
if r != nil && r.StartedAt != "" {
|
|
63
|
+
return true
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return false
|
|
67
|
+
}
|
|
68
|
+
|
|
58
69
|
type dispatchRole struct {
|
|
59
|
-
Handle
|
|
60
|
-
StartedAt
|
|
61
|
-
Returned
|
|
70
|
+
Handle string `json:"handle,omitempty"`
|
|
71
|
+
StartedAt string `json:"started,omitempty"`
|
|
72
|
+
Returned bool `json:"returned,omitempty"`
|
|
73
|
+
ReturnedAt string `json:"returned_at,omitempty"`
|
|
62
74
|
}
|
|
63
75
|
|
|
64
76
|
func dispatchPath(root, slug string) string {
|
|
@@ -270,7 +282,7 @@ func dispatchLocked(root, slug, sub, phase, wave, role, handle, reason string, r
|
|
|
270
282
|
if r.Returned {
|
|
271
283
|
return fail("role %q already returned", role)
|
|
272
284
|
}
|
|
273
|
-
r.Returned = true
|
|
285
|
+
r.Returned, r.ReturnedAt = true, nowStamp()
|
|
274
286
|
all := true
|
|
275
287
|
for _, o := range w.Roles {
|
|
276
288
|
if !o.Returned {
|
|
@@ -293,7 +305,7 @@ func dispatchLocked(root, slug, sub, phase, wave, role, handle, reason string, r
|
|
|
293
305
|
for _, name := range sortedKeys(f.Waves) {
|
|
294
306
|
w := f.Waves[name]
|
|
295
307
|
fmt.Fprintf(stdout, "dispatch: wave %s state=%s roles=%d\n", name, w.State, len(w.Roles))
|
|
296
|
-
if w.State
|
|
308
|
+
if w.State == "open" || w.State == "sealed" {
|
|
297
309
|
incomplete = append(incomplete, name)
|
|
298
310
|
}
|
|
299
311
|
}
|
|
@@ -334,6 +346,9 @@ func dispatchLocked(root, slug, sub, phase, wave, role, handle, reason string, r
|
|
|
334
346
|
if w == nil {
|
|
335
347
|
return fail("no wave %q", wave)
|
|
336
348
|
}
|
|
349
|
+
if w.State == "complete" {
|
|
350
|
+
return fail("wave %q is complete; a complete wave cannot be abandoned", wave)
|
|
351
|
+
}
|
|
337
352
|
if strings.TrimSpace(reason) == "" {
|
|
338
353
|
return fail("--reason is required (non-empty, recorded in dispatch.json)")
|
|
339
354
|
}
|
|
@@ -362,7 +377,7 @@ func roundKind(w *dispatchWave) string {
|
|
|
362
377
|
}
|
|
363
378
|
|
|
364
379
|
func isBuildWrightWave(w *dispatchWave) bool {
|
|
365
|
-
if w.Phase
|
|
380
|
+
if !strings.EqualFold(w.Phase, "build") {
|
|
366
381
|
return false
|
|
367
382
|
}
|
|
368
383
|
for r := range w.Roles {
|
|
@@ -400,14 +415,19 @@ func admitWrightRounds(root, slug string, f *dispatchFile, w *dispatchWave, revi
|
|
|
400
415
|
var lines, overCap []string
|
|
401
416
|
for _, id := range w.Slices {
|
|
402
417
|
prior, reviews := 0, 0
|
|
403
|
-
|
|
404
|
-
|
|
418
|
+
var unreturned []string
|
|
419
|
+
for name, other := range f.Waves {
|
|
420
|
+
// An abandoned wave spends its round once any role started.
|
|
421
|
+
if (other.State == "abandoned" && !waveStarted(other)) || roundKind(other) != kind {
|
|
405
422
|
continue
|
|
406
423
|
}
|
|
407
|
-
if
|
|
424
|
+
if containsSlice(other.Slices, id) {
|
|
408
425
|
prior++
|
|
426
|
+
if other.State == "open" || other.State == "sealed" {
|
|
427
|
+
unreturned = append(unreturned, name)
|
|
428
|
+
}
|
|
409
429
|
}
|
|
410
|
-
if
|
|
430
|
+
if containsSlice(other.ResliceReviewed, id) {
|
|
411
431
|
reviews++
|
|
412
432
|
}
|
|
413
433
|
}
|
|
@@ -416,6 +436,10 @@ func admitWrightRounds(root, slug string, f *dispatchFile, w *dispatchWave, revi
|
|
|
416
436
|
overCap = append(overCap, id)
|
|
417
437
|
}
|
|
418
438
|
lines = append(lines, fmt.Sprintf("dispatch: %s %s round %d (reslice review every %d)", id, kind, round, wrightRoundsPerReview))
|
|
439
|
+
if len(unreturned) > 0 {
|
|
440
|
+
sort.Strings(unreturned)
|
|
441
|
+
lines = append(lines, fmt.Sprintf("dispatch: WARNING: %s earlier wave(s) %s never returned; record `dispatch return` or `dispatch abandon --reason`", id, strings.Join(unreturned, ",")))
|
|
442
|
+
}
|
|
419
443
|
}
|
|
420
444
|
if len(overCap) == 0 {
|
|
421
445
|
if review != "" {
|
|
@@ -451,12 +475,54 @@ func admitWrightRounds(root, slug string, f *dispatchFile, w *dispatchWave, revi
|
|
|
451
475
|
return lines, 0
|
|
452
476
|
}
|
|
453
477
|
|
|
478
|
+
// containsSlice reports whether ids names the same slice as id, ignoring
|
|
479
|
+
// zero padding (SLICE-1 == SLICE-001) so a respelling cannot reset the cap.
|
|
480
|
+
func containsSlice(ids []string, id string) bool {
|
|
481
|
+
return slices.ContainsFunc(ids, func(other string) bool {
|
|
482
|
+
return sliceNumber(other) == sliceNumber(id)
|
|
483
|
+
})
|
|
484
|
+
}
|
|
485
|
+
|
|
486
|
+
func sliceNumber(id string) string {
|
|
487
|
+
return strings.TrimLeft(strings.TrimPrefix(id, "SLICE-"), "0")
|
|
488
|
+
}
|
|
489
|
+
|
|
454
490
|
// driftHeading returns the drift.md level-2 heading line for id, or "".
|
|
455
491
|
func driftHeading(drift, id string) string {
|
|
456
492
|
re := regexp.MustCompile(`(?m)^## ` + regexp.QuoteMeta(id) + `\b.*$`)
|
|
457
493
|
return re.FindString(drift)
|
|
458
494
|
}
|
|
459
495
|
|
|
496
|
+
// InflightWave is a dispatch wave whose agents have not all returned.
|
|
497
|
+
type InflightWave struct {
|
|
498
|
+
Wave string `json:"wave"`
|
|
499
|
+
Phase string `json:"phase"`
|
|
500
|
+
State string `json:"state"`
|
|
501
|
+
Pending []string `json:"pending"`
|
|
502
|
+
Slices []string `json:"slices,omitempty"`
|
|
503
|
+
}
|
|
504
|
+
|
|
505
|
+
// inflightWaves lists open or sealed waves with the roles still awaiting a
|
|
506
|
+
// return, sorted by wave name.
|
|
507
|
+
func inflightWaves(f *dispatchFile) []InflightWave {
|
|
508
|
+
var out []InflightWave
|
|
509
|
+
for name, w := range f.Waves {
|
|
510
|
+
if w.State != "open" && w.State != "sealed" {
|
|
511
|
+
continue
|
|
512
|
+
}
|
|
513
|
+
var pending []string
|
|
514
|
+
for role, r := range w.Roles {
|
|
515
|
+
if !r.Returned {
|
|
516
|
+
pending = append(pending, role)
|
|
517
|
+
}
|
|
518
|
+
}
|
|
519
|
+
sort.Strings(pending)
|
|
520
|
+
out = append(out, InflightWave{Wave: name, Phase: w.Phase, State: w.State, Pending: pending, Slices: w.Slices})
|
|
521
|
+
}
|
|
522
|
+
sort.Slice(out, func(i, j int) bool { return out[i].Wave < out[j].Wave })
|
|
523
|
+
return out
|
|
524
|
+
}
|
|
525
|
+
|
|
460
526
|
func waveState(w *dispatchWave) string {
|
|
461
527
|
if w == nil {
|
|
462
528
|
return "absent"
|
|
@@ -12,6 +12,7 @@ import (
|
|
|
12
12
|
|
|
13
13
|
"github.com/devrites/devrites/internal/devritespaths"
|
|
14
14
|
"github.com/devrites/devrites/internal/gate"
|
|
15
|
+
"github.com/devrites/devrites/internal/markdowntext"
|
|
15
16
|
"github.com/devrites/devrites/internal/state"
|
|
16
17
|
)
|
|
17
18
|
|
|
@@ -104,7 +105,7 @@ func recordDriftBaseline(root, slug, baselinePath string, digests []gate.Readine
|
|
|
104
105
|
return 2
|
|
105
106
|
}
|
|
106
107
|
fmt.Fprintf(stdout, "check drift: baseline recorded (%d inputs, %s)\n", len(digests), binding)
|
|
107
|
-
recordMetric(root, slug,
|
|
108
|
+
recordMetric(root, slug, cursorPhase(root, slug), "drift-baseline", "", 0)
|
|
108
109
|
return 0
|
|
109
110
|
}
|
|
110
111
|
|
|
@@ -147,8 +148,14 @@ func compareDriftFallback(workspace, binding string, stdout io.Writer) int {
|
|
|
147
148
|
fmt.Fprintf(stdout, "check drift: unproven — no %s baseline and no readable eng-review.md; run `check drift <slug> --record` after Vet writes the binding\n", driftBaselineFile)
|
|
148
149
|
return 0
|
|
149
150
|
}
|
|
151
|
+
// Fenced examples of the binding line are documentation, not the record.
|
|
152
|
+
masked, err := markdowntext.Structural(raw)
|
|
153
|
+
if err != nil {
|
|
154
|
+
fmt.Fprintf(stdout, "check drift: unproven — eng-review.md unreadable: %v\n", err)
|
|
155
|
+
return 0
|
|
156
|
+
}
|
|
150
157
|
recorded := ""
|
|
151
|
-
for _, line := range strings.Split(string(
|
|
158
|
+
for _, line := range strings.Split(string(masked), "\n") {
|
|
152
159
|
if strings.Contains(line, "Readiness inputs SHA-256: ") {
|
|
153
160
|
recorded = strings.TrimSpace(line)
|
|
154
161
|
}
|