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
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
package lib
|
|
2
2
|
|
|
3
|
-
import
|
|
3
|
+
import (
|
|
4
|
+
"fmt"
|
|
5
|
+
"strings"
|
|
6
|
+
|
|
7
|
+
"github.com/devrites/devrites/internal/state"
|
|
8
|
+
)
|
|
4
9
|
|
|
5
10
|
// TaskSlice is one SLICE-### block parsed from tasks.md.
|
|
6
11
|
type TaskSlice = state.TaskSlice
|
|
@@ -21,3 +26,28 @@ func CheckTaskGraph(root, slug string) (TaskGraphResult, error) {
|
|
|
21
26
|
}
|
|
22
27
|
return ParseTaskGraph(raw), nil
|
|
23
28
|
}
|
|
29
|
+
|
|
30
|
+
// edgeAdvisories names each dependency edge that does not say what crosses it:
|
|
31
|
+
// no `(via <interface>)`, or a via the dependency's Consumes / Produces lacks.
|
|
32
|
+
// An edge the dependent reads nothing across only serializes work.
|
|
33
|
+
func edgeAdvisories(graph TaskGraphResult) []string {
|
|
34
|
+
produces := make(map[string]string, len(graph.Slices))
|
|
35
|
+
for _, s := range graph.Slices {
|
|
36
|
+
produces[s.ID] = s.ConsumesProduces
|
|
37
|
+
}
|
|
38
|
+
var lines []string
|
|
39
|
+
for _, s := range graph.Slices {
|
|
40
|
+
for _, dep := range s.Dependencies {
|
|
41
|
+
via := s.Via[dep]
|
|
42
|
+
switch {
|
|
43
|
+
case via == "":
|
|
44
|
+
lines = append(lines, fmt.Sprintf(`ADVISORY edge: %s -> %s names no crossing interface (add "(via <interface>)" or drop the edge)`, s.ID, dep))
|
|
45
|
+
case produces[dep] == "":
|
|
46
|
+
lines = append(lines, fmt.Sprintf("ADVISORY edge: %s -> %s via %q but %s declares no Consumes / Produces", s.ID, dep, via, dep))
|
|
47
|
+
case !strings.Contains(strings.ToLower(produces[dep]), strings.ToLower(via)):
|
|
48
|
+
lines = append(lines, fmt.Sprintf("ADVISORY edge: %s -> %s via %q is not in %s Consumes / Produces", s.ID, dep, via, dep))
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
return lines
|
|
53
|
+
}
|
|
@@ -94,13 +94,15 @@ func runGitCommandIO(dir string, env []string, input []byte, stdout io.Writer, a
|
|
|
94
94
|
"PAGER=cat",
|
|
95
95
|
"LC_ALL=C",
|
|
96
96
|
)
|
|
97
|
-
|
|
97
|
+
// stderr gets its own buffer: git warnings (e.g. core.autocrlf) must never
|
|
98
|
+
// be parsed as output, only reported when the command fails.
|
|
99
|
+
var output, errOutput cappedGitOutput
|
|
98
100
|
if stdout == nil {
|
|
99
101
|
cmd.Stdout = &output
|
|
100
102
|
} else {
|
|
101
103
|
cmd.Stdout = stdout
|
|
102
104
|
}
|
|
103
|
-
cmd.Stderr = &
|
|
105
|
+
cmd.Stderr = &errOutput
|
|
104
106
|
err := cmd.Run()
|
|
105
107
|
if err == nil {
|
|
106
108
|
if output.truncated {
|
|
@@ -116,8 +118,8 @@ func runGitCommandIO(dir string, env []string, input []byte, stdout io.Writer, a
|
|
|
116
118
|
if ctx.Err() != nil {
|
|
117
119
|
err = ctx.Err()
|
|
118
120
|
}
|
|
119
|
-
detail :=
|
|
120
|
-
if
|
|
121
|
+
detail := errOutput.String()
|
|
122
|
+
if errOutput.truncated {
|
|
121
123
|
detail += "\n[git output truncated]"
|
|
122
124
|
}
|
|
123
125
|
return nil, &gitCommandError{
|
|
@@ -130,13 +132,21 @@ func runGitCommandIO(dir string, env []string, input []byte, stdout io.Writer, a
|
|
|
130
132
|
|
|
131
133
|
// gitDiffNames lists the paths that differ, relative to gitRoot. With one ref it
|
|
132
134
|
// diffs the working tree against that ref; with two it diffs the two tree objects.
|
|
135
|
+
// Renames are split into their deletion and addition so both names surface, and
|
|
136
|
+
// -z keeps non-ASCII paths unquoted.
|
|
133
137
|
func gitDiffNames(gitRoot string, refs ...string) ([]string, error) {
|
|
134
|
-
args := append([]string{"diff", "--name-only"}, refs...)
|
|
138
|
+
args := append([]string{"diff", "--name-only", "--no-renames", "-z"}, refs...)
|
|
135
139
|
out, err := runGitCommand(gitRoot, nil, args...)
|
|
136
140
|
if err != nil {
|
|
137
141
|
return nil, err
|
|
138
142
|
}
|
|
139
|
-
|
|
143
|
+
var paths []string
|
|
144
|
+
for _, path := range strings.Split(string(out), "\x00") {
|
|
145
|
+
if path != "" {
|
|
146
|
+
paths = append(paths, path)
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
return paths, nil
|
|
140
150
|
}
|
|
141
151
|
|
|
142
152
|
// argAt returns args[i] or "": the Go analogue of bash's ${N:-} positional reads.
|
|
@@ -159,8 +169,9 @@ func activeSlug(root string) string {
|
|
|
159
169
|
return slug
|
|
160
170
|
}
|
|
161
171
|
|
|
172
|
+
// splitLinesNoTrailing splits data into lines, treating CRLF as LF.
|
|
162
173
|
func splitLinesNoTrailing(data []byte) []string {
|
|
163
|
-
value := strings.TrimSuffix(string(data), "\n")
|
|
174
|
+
value := strings.TrimSuffix(strings.ReplaceAll(string(data), "\r\n", "\n"), "\n")
|
|
164
175
|
if value == "" {
|
|
165
176
|
return nil
|
|
166
177
|
}
|
|
@@ -50,12 +50,14 @@ Exit 0 clean or fully waived, 3 unwaived markers or blocked.`
|
|
|
50
50
|
// deferralTokenRe catches uppercase comment markers: TODO, FIXME, XXX, HACK.
|
|
51
51
|
var deferralTokenRe = regexp.MustCompile(`(?:^|[^A-Za-z0-9_])(TODO|FIXME|XXX|HACK)(?:[^A-Za-z0-9_]|$)`)
|
|
52
52
|
|
|
53
|
-
// deferralIdioms are
|
|
53
|
+
// deferralIdioms are signals for skipped tests and stub bodies. An idiom that
|
|
54
|
+
// starts with an identifier character matches only at a word start, so
|
|
55
|
+
// os.Exit( is not xit( and benefit( is not fit(.
|
|
54
56
|
var deferralIdioms = []string{
|
|
55
57
|
"t.Skip(", "t.Skipf(",
|
|
56
58
|
"test.skip(", "it.skip(", "describe.skip(", "context.skip(",
|
|
57
59
|
"xit(", "xdescribe(", "xtest(", "xcontext(", "fit(", "fdescribe(",
|
|
58
|
-
"pytest.mark.skip", "unittest.skip", "SkipTest",
|
|
60
|
+
"pytest.mark.skip", "pytest.skip(", "pytest.xfail(", "unittest.skip", "SkipTest",
|
|
59
61
|
"@Disabled", "#[ignore]",
|
|
60
62
|
"todo!(", "unimplemented!(",
|
|
61
63
|
"NotImplementedError",
|
|
@@ -104,7 +106,7 @@ type windowWaiver struct {
|
|
|
104
106
|
func windowsMarkers(line string) []string {
|
|
105
107
|
var idioms []string
|
|
106
108
|
for _, idiom := range deferralIdioms {
|
|
107
|
-
if
|
|
109
|
+
if containsIdiom(line, idiom) {
|
|
108
110
|
idioms = append(idioms, idiom)
|
|
109
111
|
}
|
|
110
112
|
}
|
|
@@ -128,6 +130,37 @@ func windowsMarkers(line string) []string {
|
|
|
128
130
|
return out
|
|
129
131
|
}
|
|
130
132
|
|
|
133
|
+
// containsIdiom reports whether idiom occurs in line at a word start.
|
|
134
|
+
func containsIdiom(line, idiom string) bool {
|
|
135
|
+
for i := 0; ; {
|
|
136
|
+
j := strings.Index(line[i:], idiom)
|
|
137
|
+
if j < 0 {
|
|
138
|
+
return false
|
|
139
|
+
}
|
|
140
|
+
at := i + j
|
|
141
|
+
if at == 0 || !isIdentByte(idiom[0]) || !isIdentByte(line[at-1]) {
|
|
142
|
+
return true
|
|
143
|
+
}
|
|
144
|
+
i = at + 1
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
func isIdentByte(b byte) bool {
|
|
149
|
+
return b == '_' || b >= '0' && b <= '9' || b >= 'a' && b <= 'z' || b >= 'A' && b <= 'Z'
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
// diffHeaderPath decodes a `--- `/`+++ ` header path, unquoting git's C-style
|
|
153
|
+
// quoting of non-ASCII and special characters.
|
|
154
|
+
func diffHeaderPath(raw string) string {
|
|
155
|
+
p := strings.TrimSpace(raw)
|
|
156
|
+
if strings.HasPrefix(p, `"`) {
|
|
157
|
+
if decoded, err := strconv.Unquote(p); err == nil {
|
|
158
|
+
return decoded
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
return p
|
|
162
|
+
}
|
|
163
|
+
|
|
131
164
|
// isTestPath reports whether a project-relative path names a test source file.
|
|
132
165
|
func isTestPath(p string) bool {
|
|
133
166
|
base := path.Base(p)
|
|
@@ -157,9 +190,9 @@ func removedTestHits(diff string) []windowHit {
|
|
|
157
190
|
case strings.HasPrefix(line, "diff --git "):
|
|
158
191
|
inHeader, deleted, file = true, false, ""
|
|
159
192
|
case inHeader && strings.HasPrefix(line, "--- "):
|
|
160
|
-
oldPath = strings.TrimPrefix(
|
|
193
|
+
oldPath = strings.TrimPrefix(diffHeaderPath(line[4:]), "a/")
|
|
161
194
|
case inHeader && strings.HasPrefix(line, "+++ "):
|
|
162
|
-
newPath :=
|
|
195
|
+
newPath := diffHeaderPath(line[4:])
|
|
163
196
|
if newPath == "/dev/null" {
|
|
164
197
|
deleted = true
|
|
165
198
|
if isTestPath(oldPath) {
|
|
@@ -203,8 +236,7 @@ func addedLinesFromDiff(diff string) ([]windowHit, map[string]bool) {
|
|
|
203
236
|
for _, line := range strings.Split(diff, "\n") {
|
|
204
237
|
switch {
|
|
205
238
|
case strings.HasPrefix(line, "+++ "):
|
|
206
|
-
p :=
|
|
207
|
-
p = strings.Trim(p, `"`)
|
|
239
|
+
p := diffHeaderPath(strings.TrimPrefix(line, "+++ "))
|
|
208
240
|
if p == "/dev/null" {
|
|
209
241
|
path = ""
|
|
210
242
|
continue
|
|
@@ -272,14 +304,16 @@ func windowsHits(opts diffScopeOpts) ([]windowHit, error) {
|
|
|
272
304
|
dir = opts.root
|
|
273
305
|
}
|
|
274
306
|
var hits []windowHit
|
|
275
|
-
|
|
307
|
+
// Repository diff config (color, external diff, textconv, mnemonic or no
|
|
308
|
+
// prefixes) must not reshape the patch this parser reads.
|
|
309
|
+
diffArgs := []string{"diff", "--no-ext-diff", "--no-textconv", "--no-color", "--src-prefix=a/", "--dst-prefix=b/"}
|
|
276
310
|
switch opts.mode {
|
|
277
311
|
case "staged":
|
|
278
|
-
diffArgs =
|
|
312
|
+
diffArgs = append(diffArgs, "--cached", "-M", "-U0", "--")
|
|
279
313
|
case "base":
|
|
280
|
-
diffArgs =
|
|
314
|
+
diffArgs = append(diffArgs, opts.base, "-M", "-U0", "--")
|
|
281
315
|
default:
|
|
282
|
-
diffArgs =
|
|
316
|
+
diffArgs = append(diffArgs, "HEAD", "-M", "-U0", "--")
|
|
283
317
|
}
|
|
284
318
|
diff, err := runGitCommand(dir, nil, diffArgs...)
|
|
285
319
|
var diffPaths map[string]bool
|
|
@@ -293,6 +327,9 @@ func windowsHits(opts diffScopeOpts) ([]windowHit, error) {
|
|
|
293
327
|
default:
|
|
294
328
|
return nil, err
|
|
295
329
|
}
|
|
330
|
+
// Git paths are repo-root-relative; the project's own workspace may sit
|
|
331
|
+
// in a subdirectory ("sub/.devrites") when the project is nested.
|
|
332
|
+
control := devritesRepoPrefix(dir, opts.root)
|
|
296
333
|
if opts.mode == "worktree" {
|
|
297
334
|
// Whole files whose diff produced no hunks: staged additions land in
|
|
298
335
|
// `git diff HEAD`, untracked files never do — scan those in full.
|
|
@@ -307,17 +344,26 @@ func windowsHits(opts diffScopeOpts) ([]windowHit, error) {
|
|
|
307
344
|
}
|
|
308
345
|
repo := strings.TrimSpace(string(repoRoot))
|
|
309
346
|
for _, p := range status {
|
|
310
|
-
if diffPaths[p] || strings.HasPrefix(p, "
|
|
347
|
+
if diffPaths[p] || strings.HasPrefix(p, control+"/") {
|
|
311
348
|
continue
|
|
312
349
|
}
|
|
313
350
|
hits = scanWholeFile(repo, p, hits)
|
|
314
351
|
}
|
|
315
352
|
}
|
|
353
|
+
// windows.md rows name project-relative paths, so hits are rebased from
|
|
354
|
+
// the repository root onto the project directory that holds control.
|
|
355
|
+
project := path.Dir(control)
|
|
316
356
|
var kept []windowHit
|
|
317
357
|
for _, h := range hits {
|
|
318
|
-
if
|
|
319
|
-
|
|
358
|
+
if strings.HasPrefix(h.Path, control+"/") {
|
|
359
|
+
continue
|
|
320
360
|
}
|
|
361
|
+
if project != "." {
|
|
362
|
+
if rel, err := filepath.Rel(filepath.FromSlash(project), filepath.FromSlash(h.Path)); err == nil {
|
|
363
|
+
h.Path = filepath.ToSlash(rel)
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
kept = append(kept, h)
|
|
321
367
|
}
|
|
322
368
|
return kept, nil
|
|
323
369
|
}
|
|
@@ -362,7 +408,7 @@ func parseWindowsWaivers(raw string) (map[windowWaiver]int, []string) {
|
|
|
362
408
|
// parseWindowsArgs accepts the diff-scope mode flags plus a slug; the allowlist
|
|
363
409
|
// flags do not apply to marker scanning.
|
|
364
410
|
func parseWindowsArgs(root string, args []string, stderr io.Writer) (diffScopeOpts, int) {
|
|
365
|
-
opts := diffScopeOpts{mode: "worktree",
|
|
411
|
+
opts := diffScopeOpts{mode: "worktree", root: root}
|
|
366
412
|
var positional []string
|
|
367
413
|
for i := 0; i < len(args); i++ {
|
|
368
414
|
switch args[i] {
|
|
@@ -376,6 +422,10 @@ func parseWindowsArgs(root string, args []string, stderr io.Writer) (diffScopeOp
|
|
|
376
422
|
case "--base":
|
|
377
423
|
opts.mode = "base"
|
|
378
424
|
opts.base = argAt(args, i+1)
|
|
425
|
+
if strings.HasPrefix(opts.base, "-") {
|
|
426
|
+
fmt.Fprintln(stderr, "windows: --base requires a ref (not a flag)")
|
|
427
|
+
return opts, 2
|
|
428
|
+
}
|
|
379
429
|
i++
|
|
380
430
|
case "--cwd":
|
|
381
431
|
opts.cwd = argAt(args, i+1)
|
|
@@ -393,6 +443,9 @@ func parseWindowsArgs(root string, args []string, stderr io.Writer) (diffScopeOp
|
|
|
393
443
|
return opts, 2
|
|
394
444
|
}
|
|
395
445
|
opts.slug = positional[0]
|
|
446
|
+
if opts.phase == "" {
|
|
447
|
+
opts.phase = cursorPhase(root, opts.slug)
|
|
448
|
+
}
|
|
396
449
|
return opts, 0
|
|
397
450
|
}
|
|
398
451
|
|
|
@@ -54,6 +54,16 @@ func Structural(input []byte) ([]byte, error) {
|
|
|
54
54
|
start = closeEnd + 1
|
|
55
55
|
continue
|
|
56
56
|
}
|
|
57
|
+
} else if fence, closeEnd := markerLineFence(input, line, lineEnd, afterBlank || anchor >= 0); closeEnd >= 0 {
|
|
58
|
+
anchor, afterBlank = -1, false
|
|
59
|
+
if !loneCR(input[start:closeEnd]) {
|
|
60
|
+
mask(out[start+fence : closeEnd])
|
|
61
|
+
}
|
|
62
|
+
if closeEnd == len(input) {
|
|
63
|
+
break
|
|
64
|
+
}
|
|
65
|
+
start = closeEnd + 1
|
|
66
|
+
continue
|
|
57
67
|
} else {
|
|
58
68
|
column, ok := topLevelItem(line)
|
|
59
69
|
if ok && (afterBlank || anchor >= 0) {
|
|
@@ -167,23 +177,52 @@ func fenceStart(line []byte, limit int) (int, bool) {
|
|
|
167
177
|
return start, columns <= limit && start < len(line) && (line[start] == '`' || line[start] == '~')
|
|
168
178
|
}
|
|
169
179
|
|
|
180
|
+
// markerLineFence handles a top-level list item whose content opens a fence
|
|
181
|
+
// (`- ```bash`). It returns the fence's byte offset in line and the end offset
|
|
182
|
+
// of the closer, or -1 unless a closer at the item's content column follows
|
|
183
|
+
// and every line before it stays inside the item. Without this, an indented
|
|
184
|
+
// closer would reopen a top-level fence and mask the rest of the file.
|
|
185
|
+
// Ordered items other than 1 cannot interrupt a paragraph, so they need
|
|
186
|
+
// separated (a preceding blank line or list item).
|
|
187
|
+
func markerLineFence(input, line []byte, lineEnd int, separated bool) (int, int) {
|
|
188
|
+
column, next, ok := itemContent(line)
|
|
189
|
+
if !ok || (!separated && line[0] >= '2' && line[0] <= '9') {
|
|
190
|
+
return 0, -1
|
|
191
|
+
}
|
|
192
|
+
marker, width, ok := openingFence(line[next:], 0)
|
|
193
|
+
if !ok {
|
|
194
|
+
return 0, -1
|
|
195
|
+
}
|
|
196
|
+
return next, listFenceEnd(input, lineEnd, marker, width, column, column)
|
|
197
|
+
}
|
|
198
|
+
|
|
170
199
|
// topLevelItem returns the content column of a list item whose marker sits at
|
|
171
200
|
// column 0 and whose content is neither another list marker, a heading marker,
|
|
172
201
|
// a fence nor part of a thematic break.
|
|
173
202
|
func topLevelItem(line []byte) (int, bool) {
|
|
174
|
-
|
|
203
|
+
column, next, ok := itemContent(line)
|
|
204
|
+
if !ok || startsBlock(line[next:]) {
|
|
175
205
|
return 0, false
|
|
176
206
|
}
|
|
207
|
+
return column, true
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
// itemContent returns the content column and byte offset of a list item whose
|
|
211
|
+
// marker sits at column 0.
|
|
212
|
+
func itemContent(line []byte) (int, int, bool) {
|
|
213
|
+
if len(line) < 2 || isThematicBreak(line) {
|
|
214
|
+
return 0, 0, false
|
|
215
|
+
}
|
|
177
216
|
markerEnd := 1
|
|
178
217
|
switch c := line[0]; {
|
|
179
218
|
case c == '-' || c == '*' || c == '+':
|
|
180
219
|
case c >= '1' && c <= '9' && line[1] == '.':
|
|
181
220
|
markerEnd = 2
|
|
182
221
|
default:
|
|
183
|
-
return 0, false
|
|
222
|
+
return 0, 0, false
|
|
184
223
|
}
|
|
185
224
|
if markerEnd >= len(line) || (line[markerEnd] != ' ' && line[markerEnd] != '\t') {
|
|
186
|
-
return 0, false
|
|
225
|
+
return 0, 0, false
|
|
187
226
|
}
|
|
188
227
|
column, next := markerEnd, markerEnd
|
|
189
228
|
for next < len(line) && (line[next] == ' ' || line[next] == '\t') {
|
|
@@ -194,10 +233,10 @@ func topLevelItem(line []byte) (int, bool) {
|
|
|
194
233
|
}
|
|
195
234
|
next++
|
|
196
235
|
}
|
|
197
|
-
if next == len(line) || column-markerEnd > 4
|
|
198
|
-
return 0, false
|
|
236
|
+
if next == len(line) || column-markerEnd > 4 {
|
|
237
|
+
return 0, 0, false
|
|
199
238
|
}
|
|
200
|
-
return column, true
|
|
239
|
+
return column, next, true
|
|
201
240
|
}
|
|
202
241
|
|
|
203
242
|
// startsBlock reports content that opens a list marker, heading or fence.
|
|
@@ -93,11 +93,13 @@ func cmdAdd(root string, args []string, stdout, stderr io.Writer) int {
|
|
|
93
93
|
}
|
|
94
94
|
slug := args[0]
|
|
95
95
|
subject := filepath.ToSlash(oneLine(args[1]))
|
|
96
|
-
|
|
97
|
-
|
|
96
|
+
// ParseNotes trims attribute values, so a value is stored trimmed and a
|
|
97
|
+
// whitespace-only one is blank.
|
|
98
|
+
quote := strings.TrimSpace(oneLine(args[2]))
|
|
99
|
+
title := strings.TrimSpace(oneLine(args[3]))
|
|
98
100
|
body := ""
|
|
99
101
|
if len(args) == 5 {
|
|
100
|
-
body = oneLine(args[4])
|
|
102
|
+
body = strings.TrimSpace(oneLine(args[4]))
|
|
101
103
|
}
|
|
102
104
|
if err := ValidateSubject(subject); err != nil {
|
|
103
105
|
fmt.Fprintf(stderr, "note add: %v\n", err)
|
|
@@ -550,12 +550,17 @@ func Render(text, newline, id, summary, subject, quote, body string) string {
|
|
|
550
550
|
}
|
|
551
551
|
|
|
552
552
|
// RemoveEntry deletes one note block (its `- NOTE-` row through its last
|
|
553
|
-
//
|
|
553
|
+
// attribute row) from the source text. Like ParseNotes, blank lines do not end
|
|
554
|
+
// the block; trailing blank lines stay.
|
|
554
555
|
func RemoveEntry(text, newline string, note *Note) string {
|
|
555
556
|
lines := strings.Split(strings.ReplaceAll(text, "\r\n", "\n"), "\n")
|
|
556
557
|
end := note.Line
|
|
557
|
-
for end < len(lines)
|
|
558
|
-
|
|
558
|
+
for i := end; i < len(lines); i++ {
|
|
559
|
+
if attrLineRE.MatchString(lines[i]) {
|
|
560
|
+
end = i + 1
|
|
561
|
+
} else if strings.TrimSpace(lines[i]) != "" {
|
|
562
|
+
break
|
|
563
|
+
}
|
|
559
564
|
}
|
|
560
565
|
kept := append([]string{}, lines[:note.Line-1]...)
|
|
561
566
|
kept = append(kept, lines[end:]...)
|
|
@@ -25,6 +25,7 @@ import (
|
|
|
25
25
|
"unicode/utf8"
|
|
26
26
|
|
|
27
27
|
"github.com/devrites/devrites/internal/overhaul/ovio"
|
|
28
|
+
"github.com/devrites/devrites/internal/overhaul/packet"
|
|
28
29
|
"github.com/devrites/devrites/internal/overhaul/records"
|
|
29
30
|
)
|
|
30
31
|
|
|
@@ -46,22 +47,15 @@ func Run(args []string, stdout, stderr io.Writer) int {
|
|
|
46
47
|
var code int
|
|
47
48
|
var err error
|
|
48
49
|
switch {
|
|
49
|
-
case len(args) >= 3 && args[0] == "receipt":
|
|
50
|
-
observed, hasObserved := "",
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
if i+1 >= len(args) {
|
|
54
|
-
fmt.Fprint(stderr, usage)
|
|
55
|
-
return 2
|
|
56
|
-
}
|
|
57
|
-
observed, hasObserved = args[i+1], true
|
|
58
|
-
break
|
|
59
|
-
}
|
|
50
|
+
case len(args) >= 3 && args[0] == "receipt" && (len(args) == 3 || len(args) == 5 && args[3] == "--observed"):
|
|
51
|
+
observed, hasObserved := "", len(args) == 5
|
|
52
|
+
if hasObserved {
|
|
53
|
+
observed = args[4]
|
|
60
54
|
}
|
|
61
55
|
code, err = receipt(args[1], args[2], observed, hasObserved, stdout)
|
|
62
56
|
case len(args) == 3 && args[0] == "packet":
|
|
63
57
|
code, err = packetAdmit(args[1], args[2], stdout)
|
|
64
|
-
case len(args)
|
|
58
|
+
case len(args) == 3 && args[0] == "anchor":
|
|
65
59
|
code, err = anchor(args[1], args[2], stdout, stderr)
|
|
66
60
|
default:
|
|
67
61
|
fmt.Fprint(stderr, usage)
|
|
@@ -228,6 +222,16 @@ func receipt(run, path, observed string, hasObserved bool, stdout io.Writer) (in
|
|
|
228
222
|
verdict(stdout, "DUPLICATE_OR_LATE", "attempt_status", x["status"])
|
|
229
223
|
return 3, nil
|
|
230
224
|
}
|
|
225
|
+
// Only the attempt's own receipt file counts: not a copy elsewhere (such
|
|
226
|
+
// as in the target repository) and not a symlink to one.
|
|
227
|
+
canon := filepath.Join(realpath(run), "receipts", packet.Name(map[string]any{"run_id": rj["run_id"],
|
|
228
|
+
"task_id": x["task_id"], "attempt_id": x["attempt_id"], "role": x["role"]})+".json")
|
|
229
|
+
if realpath(path) != canon {
|
|
230
|
+
why = append(why, "receipt must be the attempt's file <run>/receipts/<run_id>__<task_id>__<attempt_id>__<role>.json")
|
|
231
|
+
}
|
|
232
|
+
if r := ovio.Str(x["receipt"]); r != "" && realpath(join(run, r)) != canon {
|
|
233
|
+
why = append(why, "receipt differs from the dispatched attempt's receipt")
|
|
234
|
+
}
|
|
231
235
|
for _, k := range []string{"role", "lane", "snapshot"} {
|
|
232
236
|
if !eq(rc[k], x[k]) {
|
|
233
237
|
why = append(why, k+" differs from the dispatch packet")
|
|
@@ -25,6 +25,7 @@ const Usage = `usage: devrites-engine overhaul <tool> ...
|
|
|
25
25
|
overhaul records stage <run>
|
|
26
26
|
overhaul records publish <run>
|
|
27
27
|
overhaul records validate <run>
|
|
28
|
+
overhaul records prune <run> [--keep K]
|
|
28
29
|
overhaul admit receipt <run> <receipt.json> [--observed <paths.txt>]
|
|
29
30
|
overhaul admit packet <run> <packet.json>
|
|
30
31
|
overhaul admit anchor <tree> <proposals.json>
|
|
@@ -13,6 +13,7 @@ import (
|
|
|
13
13
|
"strings"
|
|
14
14
|
|
|
15
15
|
"github.com/devrites/devrites/internal/overhaul/ovio"
|
|
16
|
+
"github.com/devrites/devrites/internal/overhaul/score"
|
|
16
17
|
"github.com/devrites/devrites/internal/overhaul/snapshot"
|
|
17
18
|
)
|
|
18
19
|
|
|
@@ -65,6 +66,9 @@ var (
|
|
|
65
66
|
required = []string{"run.json", "coverage.json", "findings.json", "evidence.json", "dispatch.json",
|
|
66
67
|
"approval.json", "cycles.json"}
|
|
67
68
|
channels = set("conversation", "host-structured-action")
|
|
69
|
+
// finishedVerdict is the readiness verdict each finished-repair outcome requires.
|
|
70
|
+
finishedVerdict = map[string]string{"READY_FOR_USER_REVIEW": "MEETS_TARGETS",
|
|
71
|
+
"COMPLETED_WITH_APPROVED_DEGRADATION": "MEETS_TARGETS_WITH_APPROVED_DEGRADATION"}
|
|
68
72
|
)
|
|
69
73
|
|
|
70
74
|
// Repr renders a decoded JSON value the way Python's repr() does, so rule
|
|
@@ -198,13 +202,8 @@ func BadPath(p any, repo string) string {
|
|
|
198
202
|
if path.Clean(s) != s || strings.Split(s, "/")[0] == ".." {
|
|
199
203
|
return "not normalized or escapes the repository"
|
|
200
204
|
}
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
return "names a directory or git metadata"
|
|
204
|
-
}
|
|
205
|
-
}
|
|
206
|
-
if strings.HasPrefix(s, snapshot.RunAreaDir) {
|
|
207
|
-
return "names the overhaul run area"
|
|
205
|
+
if why := reserved(s); why != "" {
|
|
206
|
+
return why
|
|
208
207
|
}
|
|
209
208
|
if isDir(join(repo, s)) {
|
|
210
209
|
return "names a directory or git metadata"
|
|
@@ -212,6 +211,30 @@ func BadPath(p any, repo string) string {
|
|
|
212
211
|
if !inside(repo, s) {
|
|
213
212
|
return "resolves outside the repository (symlink or traversal)"
|
|
214
213
|
}
|
|
214
|
+
// A symlink alias must not reach git metadata or the run area either.
|
|
215
|
+
root := realpath(repo)
|
|
216
|
+
full := realpath(join(root, s))
|
|
217
|
+
if why := reserved(filepath.ToSlash(strings.TrimPrefix(full, root+string(os.PathSeparator)))); why != "" {
|
|
218
|
+
return why
|
|
219
|
+
}
|
|
220
|
+
if area := realpath(join(root, snapshot.RunAreaDir)); strings.HasPrefix(strings.ToLower(full), strings.ToLower(area)+string(os.PathSeparator)) {
|
|
221
|
+
return "names the overhaul run area"
|
|
222
|
+
}
|
|
223
|
+
return ""
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
// reserved names why a repository-relative path is off limits: any .git
|
|
227
|
+
// component or the run area, compared case-folded for case-insensitive filesystems.
|
|
228
|
+
func reserved(rel string) string {
|
|
229
|
+
l := strings.ToLower(rel)
|
|
230
|
+
for _, part := range strings.Split(l, "/") {
|
|
231
|
+
if part == ".git" {
|
|
232
|
+
return "names a directory or git metadata"
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
if strings.HasPrefix(l, snapshot.RunAreaDir) {
|
|
236
|
+
return "names the overhaul run area"
|
|
237
|
+
}
|
|
215
238
|
return ""
|
|
216
239
|
}
|
|
217
240
|
|
|
@@ -586,6 +609,27 @@ func Check(run, genDir, prevDir string) ([]string, error) {
|
|
|
586
609
|
add("run.json: readiness_verdict differs from scorecard.json")
|
|
587
610
|
}
|
|
588
611
|
}
|
|
612
|
+
// A finished repair claims readiness only on a complete, passing scorecard.
|
|
613
|
+
outcome := str(rj, "execution_outcome")
|
|
614
|
+
if want := finishedVerdict[outcome]; want != "" {
|
|
615
|
+
if !isFile(scp) {
|
|
616
|
+
add("run.json: %s needs scorecard.json", outcome)
|
|
617
|
+
} else if sc, err := ovio.LoadObject(scp); err != nil {
|
|
618
|
+
return nil, err
|
|
619
|
+
} else {
|
|
620
|
+
if !eq(sc["readiness_verdict"], want) || !eq(rj["readiness_verdict"], want) {
|
|
621
|
+
add("run.json: %s needs readiness_verdict %s in run.json and scorecard.json", outcome, want)
|
|
622
|
+
}
|
|
623
|
+
gates := ovio.Obj(sc["gates"])
|
|
624
|
+
for _, g := range score.GateIDs(!ovio.Truthy(rj["assessment_only"])) {
|
|
625
|
+
st := str(gates, g)
|
|
626
|
+
waived := g == "G-CONCURRENCY" && st == "WAIVED_OPERATIONAL" && want == "MEETS_TARGETS_WITH_APPROVED_DEGRADATION"
|
|
627
|
+
if st != "PASS" && st != "NOT_APPLICABLE" && !waived {
|
|
628
|
+
add("run.json: %s needs gate %s to pass in scorecard.json (got %s)", outcome, g, Repr(gates[g]))
|
|
629
|
+
}
|
|
630
|
+
}
|
|
631
|
+
}
|
|
632
|
+
}
|
|
589
633
|
if err := consistency(run, genDir, R, add); err != nil {
|
|
590
634
|
return nil, err
|
|
591
635
|
}
|
|
@@ -686,7 +730,7 @@ func Check(run, genDir, prevDir string) ([]string, error) {
|
|
|
686
730
|
if set("returned", "admitted", "rejected")[status] && !(str(x, "receipt") != "" && isFile(join(run, str(x, "receipt")))) {
|
|
687
731
|
add("attempt %s: receipt file missing", xid)
|
|
688
732
|
}
|
|
689
|
-
if set("
|
|
733
|
+
if !set("admitted", "rejected", "cancelled")[status] {
|
|
690
734
|
unsettled = append(unsettled, xid)
|
|
691
735
|
}
|
|
692
736
|
if !writers[str(x, "role")] {
|
|
@@ -721,7 +765,6 @@ func Check(run, genDir, prevDir string) ([]string, error) {
|
|
|
721
765
|
}
|
|
722
766
|
}
|
|
723
767
|
}
|
|
724
|
-
outcome := str(rj, "execution_outcome")
|
|
725
768
|
if outcome != "RUNNING" && len(unsettled) > 0 {
|
|
726
769
|
add("attempts must be admitted, rejected or cancelled before the run leaves RUNNING: %s", Repr(unsettled[:min(5, len(unsettled))]))
|
|
727
770
|
}
|
|
@@ -530,6 +530,7 @@ type built struct {
|
|
|
530
530
|
laneCov map[string][2]int // lane -> reviewed, eligible ranges
|
|
531
531
|
secs []section
|
|
532
532
|
approve, stamp string
|
|
533
|
+
hasPlan bool // run.json names a plan revision
|
|
533
534
|
finds []map[string]any
|
|
534
535
|
lanes []string
|
|
535
536
|
cards map[string][]map[string]any // section anchor -> findings drawn as cards in HTML
|
|
@@ -787,7 +788,7 @@ func build(run, gen string) (*built, error) {
|
|
|
787
788
|
}
|
|
788
789
|
stamp := sf("overhaul-stamp run=%s generation=%s plan=%s", rj["run_id"],
|
|
789
790
|
strings.ReplaceAll(filepath.Base(strings.TrimRight(gen, "/")), ".tmp", ""), planStamp)
|
|
790
|
-
return &built{rj: rj, sc: sc, base: base, rubric: rubric, domains: domains, tasks: tasks, laneCov: laneCov, secs: S, approve: approve, stamp: stamp, finds: finds, lanes: lanes,
|
|
791
|
+
return &built{rj: rj, sc: sc, base: base, rubric: rubric, domains: domains, tasks: tasks, laneCov: laneCov, secs: S, approve: approve, stamp: stamp, hasPlan: len(pr) > 0, finds: finds, lanes: lanes,
|
|
791
792
|
cards: map[string][]map[string]any{"findings": confirmed, "opportunities": opps}, byF: byF}, nil
|
|
792
793
|
}
|
|
793
794
|
|
|
@@ -816,7 +817,7 @@ func render(run, gen, kind, home string) (string, error) {
|
|
|
816
817
|
runID := pyStr(b.rj["run_id"])
|
|
817
818
|
if kind == "review" {
|
|
818
819
|
for _, s := range b.secs {
|
|
819
|
-
if s.anchor != "plan" ||
|
|
820
|
+
if s.anchor != "plan" || !b.hasPlan { // a zero-task plan still gets plan.md
|
|
820
821
|
continue
|
|
821
822
|
}
|
|
822
823
|
lines := append([]string{"<!-- " + b.stamp + " -->", "# Overhaul plan " + runID, ""}, mdTable(v, s.cols, s.body)...)
|
|
@@ -239,7 +239,7 @@ func dirty(root string, tracked []string) (map[string]bool, error) {
|
|
|
239
239
|
return set, nil
|
|
240
240
|
}
|
|
241
241
|
b, err := git(root, "-c", "diff.autoRefreshIndex=false", "diff", "--no-ext-diff", "--no-textconv", "--no-renames",
|
|
242
|
-
"--name-only", "-z", "HEAD")
|
|
242
|
+
"--relative", "--name-only", "-z", "HEAD") // --relative: same base as ls-files when root is a subdirectory
|
|
243
243
|
if err != nil {
|
|
244
244
|
return nil, err
|
|
245
245
|
}
|
|
@@ -465,7 +465,7 @@ func capture(root, out string, stdout io.Writer) error {
|
|
|
465
465
|
safe := []string{"--", "."}
|
|
466
466
|
for p, v := range st {
|
|
467
467
|
if v.Sensitive {
|
|
468
|
-
safe = append(safe, ":(
|
|
468
|
+
safe = append(safe, ":(exclude,literal)"+p) // cwd-relative, like p, when root is a subdirectory
|
|
469
469
|
}
|
|
470
470
|
}
|
|
471
471
|
for _, o := range []struct {
|
|
@@ -108,18 +108,17 @@ func isAncestor(repo, ancestor, descendant string) (bool, error) {
|
|
|
108
108
|
}
|
|
109
109
|
|
|
110
110
|
func diffNames(repo, a, b string) ([]string, error) {
|
|
111
|
-
|
|
111
|
+
// --no-renames reports a rename's source as a deletion; -z keeps paths raw
|
|
112
|
+
// instead of C-quoted.
|
|
113
|
+
out, err := git(repo, "diff", "--name-only", "--no-renames", "-z", a, b)
|
|
112
114
|
if err != nil {
|
|
113
115
|
return nil, err
|
|
114
116
|
}
|
|
117
|
+
out = strings.TrimSuffix(out, "\x00")
|
|
115
118
|
if out == "" {
|
|
116
119
|
return nil, nil
|
|
117
120
|
}
|
|
118
|
-
|
|
119
|
-
for i := range lines {
|
|
120
|
-
lines[i] = strings.TrimSpace(lines[i])
|
|
121
|
-
}
|
|
122
|
-
return lines, nil
|
|
121
|
+
return strings.Split(out, "\x00"), nil
|
|
123
122
|
}
|
|
124
123
|
|
|
125
124
|
func headSHA(repo string) (string, error) {
|
|
@@ -584,6 +584,9 @@ func cleanupLocked(repoRoot, slug string, force bool) ([]Salvage, error) {
|
|
|
584
584
|
inScratch := sl.WorktreePath != "" && ownedWorktreePath(repoRoot, lease.BatchID, sl)
|
|
585
585
|
owned := inScratch && createdWorktree(registered, sl.WorktreePath)
|
|
586
586
|
if sl.WorktreePath != "" && !owned {
|
|
587
|
+
// Never salvaged, so the batch sweep must not delete this slice's
|
|
588
|
+
// scratch entry either (e.g. a --root spelled through a symlink).
|
|
589
|
+
keptWorktrees[sl.ID] = true
|
|
587
590
|
if inScratch {
|
|
588
591
|
warnf("slice %s worktree_path %q is not a worktree git registered; leaving it untouched",
|
|
589
592
|
sl.ID, sl.WorktreePath)
|