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,21 +8,22 @@ import (
|
|
|
8
8
|
"io/fs"
|
|
9
9
|
"os"
|
|
10
10
|
"path/filepath"
|
|
11
|
+
"regexp"
|
|
12
|
+
"slices"
|
|
11
13
|
"sort"
|
|
12
14
|
"strings"
|
|
13
15
|
|
|
14
16
|
"github.com/devrites/devrites/internal/hostpack"
|
|
15
17
|
)
|
|
16
18
|
|
|
17
|
-
func (r *runner) installClaudeSettingsMarker(
|
|
18
|
-
ownership := "preexisting"
|
|
19
|
-
if ownsDefaultMode {
|
|
20
|
-
ownership = "added"
|
|
21
|
-
}
|
|
19
|
+
func (r *runner) installClaudeSettingsMarker(state claudeSettingsMerge) error {
|
|
22
20
|
var b strings.Builder
|
|
23
|
-
b.WriteString(hostpack.ClaudeSettingsMerge.MarkerText + "\
|
|
24
|
-
|
|
25
|
-
|
|
21
|
+
b.WriteString(hostpack.ClaudeSettingsMerge.MarkerText + "\n" + claudeRulesAddedLine)
|
|
22
|
+
if state.created {
|
|
23
|
+
b.WriteString("\n" + claudeSettingsCreatedLine)
|
|
24
|
+
}
|
|
25
|
+
rules := make([]string, 0, len(state.added))
|
|
26
|
+
for rule := range state.added {
|
|
26
27
|
rules = append(rules, rule)
|
|
27
28
|
}
|
|
28
29
|
sort.Strings(rules)
|
|
@@ -32,26 +33,55 @@ func (r *runner) installClaudeSettingsMarker(ownsDefaultMode bool, managed map[s
|
|
|
32
33
|
return r.installMarker(hostpack.ClaudeSettingsMerge.MarkerRel, b.String())
|
|
33
34
|
}
|
|
34
35
|
|
|
35
|
-
|
|
36
|
+
const (
|
|
37
|
+
// claudeRulesAddedLine marks a settings marker whose rule: lines list only
|
|
38
|
+
// the rules DevRites added; older markers listed every payload rule.
|
|
39
|
+
claudeRulesAddedLine = "rules=added"
|
|
40
|
+
// claudeSettingsCreatedLine records that DevRites created settings.json,
|
|
41
|
+
// so uninstall removes it once nothing else is left.
|
|
42
|
+
claudeSettingsCreatedLine = "settings=created"
|
|
43
|
+
)
|
|
44
|
+
|
|
45
|
+
func (r *runner) claudeSettingsMarkerLines() []string {
|
|
36
46
|
data, err := os.ReadFile(filepath.Join(r.target, filepath.FromSlash(hostpack.ClaudeSettingsMerge.MarkerRel)))
|
|
37
|
-
|
|
47
|
+
if err != nil {
|
|
48
|
+
return nil
|
|
49
|
+
}
|
|
50
|
+
return strings.Split(strings.ReplaceAll(string(data), "\r\n", "\n"), "\n")
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
// claudeDefaultModeOwned reports a marker from an install that set
|
|
54
|
+
// permissions.defaultMode=plan itself; DevRites no longer sets a mode, so
|
|
55
|
+
// update and uninstall remove that plan mode.
|
|
56
|
+
func (r *runner) claudeDefaultModeOwned() bool {
|
|
57
|
+
return slices.Contains(r.claudeSettingsMarkerLines(), "default-mode=added")
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
// claudeSettingsCreated reports whether DevRites created settings.json. A
|
|
61
|
+
// legacy marker (no rules=added line) predates the settings=created record,
|
|
62
|
+
// so its file is treated as created: uninstall still removes it only when
|
|
63
|
+
// stripping leaves nothing.
|
|
64
|
+
func (r *runner) claudeSettingsCreated() bool {
|
|
65
|
+
lines := r.claudeSettingsMarkerLines()
|
|
66
|
+
return slices.Contains(lines, claudeSettingsCreatedLine) || (lines != nil && !slices.Contains(lines, claudeRulesAddedLine))
|
|
38
67
|
}
|
|
39
68
|
|
|
40
69
|
// managedClaudePermissionRules returns the exact non-engine allow rules
|
|
41
|
-
// DevRites manages in .claude/settings.json: rules
|
|
42
|
-
//
|
|
43
|
-
//
|
|
44
|
-
// command rules are matched by prefix and never need listing
|
|
70
|
+
// DevRites manages in .claude/settings.json: the rules the merge marker
|
|
71
|
+
// records as DevRites-added (none before the first install). A legacy marker
|
|
72
|
+
// that predates added-only recording is unioned with the current payload's non-engine rules, as
|
|
73
|
+
// before. Engine command rules are matched by prefix and never need listing.
|
|
45
74
|
func (r *runner) managedClaudePermissionRules() map[string]bool {
|
|
46
75
|
managed := map[string]bool{}
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
managed[strings.TrimSpace(rule)] = true
|
|
52
|
-
}
|
|
76
|
+
lines := r.claudeSettingsMarkerLines()
|
|
77
|
+
for _, line := range lines {
|
|
78
|
+
if rule, ok := strings.CutPrefix(line, "rule:"); ok {
|
|
79
|
+
managed[strings.TrimSpace(rule)] = true
|
|
53
80
|
}
|
|
54
81
|
}
|
|
82
|
+
if lines == nil || slices.Contains(lines, claudeRulesAddedLine) {
|
|
83
|
+
return managed
|
|
84
|
+
}
|
|
55
85
|
payload, err := readJSONFS(r.payloadFS, hostpack.ClaudeSettingsMerge.PayloadRel)
|
|
56
86
|
if err == nil {
|
|
57
87
|
for rule := range managedRulesFromPayload(payload) {
|
|
@@ -79,50 +109,26 @@ func managedRulesFromPayload(payload map[string]any) map[string]bool {
|
|
|
79
109
|
}
|
|
80
110
|
|
|
81
111
|
func (r *runner) mergeMarkerFile(merge hostpack.MarkerMerge) error {
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
}
|
|
86
|
-
dest := filepath.Join(r.target, filepath.FromSlash(merge.TargetRel))
|
|
87
|
-
// #nosec G304 -- dest joins the operator target with a fixed manifest-relative record
|
|
88
|
-
if current, readErr := os.ReadFile(dest); readErr == nil {
|
|
89
|
-
if err := hostpack.ValidateMarkerBlocks(current, r.sharedMarkerMerges(merge)...); err != nil {
|
|
90
|
-
return fmt.Errorf("%w in %s; fix it and rerun", err, merge.TargetRel)
|
|
112
|
+
if !r.opts.DryRun {
|
|
113
|
+
if err := r.recheckPath(merge.TargetRel); err != nil {
|
|
114
|
+
return err
|
|
91
115
|
}
|
|
92
116
|
}
|
|
117
|
+
next, current, err := r.markerMergeNext(merge)
|
|
118
|
+
if err != nil {
|
|
119
|
+
return err
|
|
120
|
+
}
|
|
93
121
|
if r.opts.DryRun {
|
|
94
122
|
verb := "create DevRites block"
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
if readErr == nil {
|
|
98
|
-
if _, mergeErr := hostpack.MergeMarkerBlock(current, block, merge.Begin, merge.End); mergeErr != nil {
|
|
99
|
-
return fmt.Errorf("%w in %s; fix it and rerun", mergeErr, merge.TargetRel)
|
|
100
|
-
}
|
|
123
|
+
if current != nil {
|
|
124
|
+
verb = "append DevRites block"
|
|
101
125
|
if bytes.Contains(current, []byte(merge.Begin)) {
|
|
102
126
|
verb = "refresh DevRites block"
|
|
103
|
-
} else {
|
|
104
|
-
verb = "append DevRites block"
|
|
105
127
|
}
|
|
106
|
-
} else if !errors.Is(readErr, fs.ErrNotExist) {
|
|
107
|
-
return fmt.Errorf("cannot read %s: %w", merge.TargetRel, readErr)
|
|
108
128
|
}
|
|
109
129
|
fmt.Fprintf(r.opts.Stdout, " [merge] %s (%s)\n", merge.TargetRel, verb)
|
|
110
130
|
} else {
|
|
111
|
-
|
|
112
|
-
return err
|
|
113
|
-
}
|
|
114
|
-
next := block
|
|
115
|
-
// #nosec G304 -- dest joins the operator target with a fixed manifest-relative record
|
|
116
|
-
current, readErr := os.ReadFile(dest)
|
|
117
|
-
if readErr == nil {
|
|
118
|
-
var mergeErr error
|
|
119
|
-
next, mergeErr = hostpack.MergeMarkerBlock(current, block, merge.Begin, merge.End)
|
|
120
|
-
if mergeErr != nil {
|
|
121
|
-
return fmt.Errorf("%w in %s; fix it and rerun", mergeErr, merge.TargetRel)
|
|
122
|
-
}
|
|
123
|
-
} else if !errors.Is(readErr, fs.ErrNotExist) {
|
|
124
|
-
return fmt.Errorf("cannot read %s: %w", merge.TargetRel, readErr)
|
|
125
|
-
}
|
|
131
|
+
dest := filepath.Join(r.target, filepath.FromSlash(merge.TargetRel))
|
|
126
132
|
if err := r.writeConfined(dest, next, 0o644); err != nil {
|
|
127
133
|
return fmt.Errorf("cannot write %s: %w", merge.TargetRel, err)
|
|
128
134
|
}
|
|
@@ -135,6 +141,32 @@ func (r *runner) mergeMarkerFile(merge hostpack.MarkerMerge) error {
|
|
|
135
141
|
return r.installMarker(merge.MarkerRel, merge.MarkerText)
|
|
136
142
|
}
|
|
137
143
|
|
|
144
|
+
// markerMergeNext returns the merged target bytes and the current bytes
|
|
145
|
+
// (nil when the target is absent) without writing anything.
|
|
146
|
+
func (r *runner) markerMergeNext(merge hostpack.MarkerMerge) ([]byte, []byte, error) {
|
|
147
|
+
block, err := fs.ReadFile(r.payloadFS, merge.PayloadRel)
|
|
148
|
+
if err != nil {
|
|
149
|
+
return nil, nil, fmt.Errorf("read payload %s: %w", merge.PayloadRel, err)
|
|
150
|
+
}
|
|
151
|
+
dest := filepath.Join(r.target, filepath.FromSlash(merge.TargetRel))
|
|
152
|
+
// #nosec G304 -- dest joins the operator target with a fixed manifest-relative record
|
|
153
|
+
current, readErr := os.ReadFile(dest)
|
|
154
|
+
if errors.Is(readErr, fs.ErrNotExist) {
|
|
155
|
+
return block, nil, nil
|
|
156
|
+
}
|
|
157
|
+
if readErr != nil {
|
|
158
|
+
return nil, nil, fmt.Errorf("cannot read %s: %w", merge.TargetRel, readErr)
|
|
159
|
+
}
|
|
160
|
+
if err := hostpack.ValidateMarkerBlocks(current, r.sharedMarkerMerges(merge)...); err != nil {
|
|
161
|
+
return nil, nil, fmt.Errorf("%w in %s; fix it and rerun", err, merge.TargetRel)
|
|
162
|
+
}
|
|
163
|
+
next, err := hostpack.MergeMarkerBlock(current, block, merge.Begin, merge.End)
|
|
164
|
+
if err != nil {
|
|
165
|
+
return nil, nil, fmt.Errorf("%w in %s; fix it and rerun", err, merge.TargetRel)
|
|
166
|
+
}
|
|
167
|
+
return next, current, nil
|
|
168
|
+
}
|
|
169
|
+
|
|
138
170
|
func (r *runner) sharedMarkerMerges(merge hostpack.MarkerMerge) []hostpack.MarkerMerge {
|
|
139
171
|
merges := []hostpack.MarkerMerge{merge}
|
|
140
172
|
for _, other := range []struct {
|
|
@@ -154,71 +186,174 @@ func (r *runner) sharedMarkerMerges(merge hostpack.MarkerMerge) []hostpack.Marke
|
|
|
154
186
|
|
|
155
187
|
func (r *runner) mergeCodexConfig() error {
|
|
156
188
|
merge := hostpack.CodexConfigMerge
|
|
157
|
-
block, err := fs.ReadFile(r.payloadFS, merge.PayloadRel)
|
|
158
|
-
if err != nil {
|
|
159
|
-
return fmt.Errorf("read payload %s: %w", merge.PayloadRel, err)
|
|
160
|
-
}
|
|
161
|
-
dest := filepath.Join(r.target, filepath.FromSlash(merge.TargetRel))
|
|
162
189
|
if r.opts.DryRun {
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
if _, stripErr := hostpack.StripCodexConfigBlocks(data); stripErr != nil {
|
|
166
|
-
return fmt.Errorf("%w in %s; fix it and rerun", stripErr, merge.TargetRel)
|
|
167
|
-
}
|
|
190
|
+
if _, err := r.codexConfigNext(); err != nil {
|
|
191
|
+
return err
|
|
168
192
|
}
|
|
169
|
-
fmt.Fprintf(r.opts.Stdout, " [merge] %s (
|
|
193
|
+
fmt.Fprintf(r.opts.Stdout, " [merge] %s (insert DevRites permission block)\n", merge.TargetRel)
|
|
170
194
|
return r.installMarker(merge.MarkerRel, merge.MarkerText)
|
|
171
195
|
}
|
|
172
196
|
if err := r.recheckPath(merge.TargetRel); err != nil {
|
|
173
197
|
return err
|
|
174
198
|
}
|
|
199
|
+
next, err := r.codexConfigNext()
|
|
200
|
+
if err != nil {
|
|
201
|
+
return err
|
|
202
|
+
}
|
|
203
|
+
dest := filepath.Join(r.target, filepath.FromSlash(merge.TargetRel))
|
|
204
|
+
if err := r.writeConfined(dest, next, 0o644); err != nil {
|
|
205
|
+
return fmt.Errorf("cannot write %s: %w", merge.TargetRel, err)
|
|
206
|
+
}
|
|
207
|
+
return r.installMarker(merge.MarkerRel, merge.MarkerText)
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
// codexConfigNext returns the merged .codex/config.toml without writing it.
|
|
211
|
+
// The DevRites block ends inside its [permissions.*] table, so it goes after
|
|
212
|
+
// the user's top-level keys and before their first table header; anywhere
|
|
213
|
+
// earlier would re-scope those keys into the DevRites table.
|
|
214
|
+
func (r *runner) codexConfigNext() ([]byte, error) {
|
|
215
|
+
merge := hostpack.CodexConfigMerge
|
|
216
|
+
block, err := fs.ReadFile(r.payloadFS, merge.PayloadRel)
|
|
217
|
+
if err != nil {
|
|
218
|
+
return nil, fmt.Errorf("read payload %s: %w", merge.PayloadRel, err)
|
|
219
|
+
}
|
|
220
|
+
dest := filepath.Join(r.target, filepath.FromSlash(merge.TargetRel))
|
|
175
221
|
var current []byte
|
|
176
222
|
// #nosec G304 -- dest joins the operator target with a fixed manifest-relative record
|
|
177
223
|
if data, readErr := os.ReadFile(dest); readErr == nil {
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
224
|
+
// Drop a UTF-8 BOM: the block may go at offset 0, and a BOM after
|
|
225
|
+
// it is invalid TOML.
|
|
226
|
+
data = bytes.TrimPrefix(data, utf8BOM)
|
|
227
|
+
if current, err = hostpack.StripCodexConfigBlocks(data); err != nil {
|
|
228
|
+
return nil, fmt.Errorf("%w in %s; fix it and rerun", err, merge.TargetRel)
|
|
181
229
|
}
|
|
182
|
-
current = data
|
|
183
230
|
if hasTopLevelTOMLKey(current, "default_permissions") {
|
|
184
|
-
return fmt.Errorf("%s already sets top-level default_permissions; remove that project override before installing the DevRites read-only-root profile", merge.TargetRel)
|
|
231
|
+
return nil, fmt.Errorf("%s already sets top-level default_permissions; remove that project override before installing the DevRites read-only-root profile", merge.TargetRel)
|
|
185
232
|
}
|
|
186
233
|
} else if !errors.Is(readErr, fs.ErrNotExist) {
|
|
187
|
-
return fmt.Errorf("cannot read %s: %w", merge.TargetRel, readErr)
|
|
234
|
+
return nil, fmt.Errorf("cannot read %s: %w", merge.TargetRel, readErr)
|
|
188
235
|
}
|
|
189
|
-
|
|
190
|
-
|
|
236
|
+
if len(bytes.TrimSpace(current)) == 0 {
|
|
237
|
+
current = nil
|
|
238
|
+
}
|
|
239
|
+
split := firstTOMLTableHeader(current)
|
|
240
|
+
var next []byte
|
|
241
|
+
if split > 0 {
|
|
242
|
+
next = append(next, current[:split]...)
|
|
243
|
+
if next[len(next)-1] != '\n' {
|
|
244
|
+
next = append(next, '\n')
|
|
245
|
+
}
|
|
246
|
+
// Blank separator; StripMarkerBlock removes it with the block.
|
|
191
247
|
next = append(next, '\n')
|
|
192
248
|
}
|
|
193
|
-
|
|
249
|
+
next = append(next, block...)
|
|
250
|
+
if len(next) == 0 || next[len(next)-1] != '\n' {
|
|
194
251
|
next = append(next, '\n')
|
|
195
|
-
next = append(next, current...)
|
|
196
252
|
}
|
|
197
|
-
|
|
198
|
-
|
|
253
|
+
return append(next, current[split:]...), nil
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
var utf8BOM = []byte("\xef\xbb\xbf")
|
|
257
|
+
|
|
258
|
+
// firstTOMLTableHeader returns the byte offset of the first [table] or
|
|
259
|
+
// [[array]] header line, or len(data) when there is none.
|
|
260
|
+
func firstTOMLTableHeader(data []byte) int {
|
|
261
|
+
split := len(data)
|
|
262
|
+
scanTOMLTopLevel(data, func(offset int, line string) bool {
|
|
263
|
+
if tomlTableHeader.MatchString(line) {
|
|
264
|
+
split = offset
|
|
265
|
+
return false
|
|
266
|
+
}
|
|
267
|
+
return true
|
|
268
|
+
})
|
|
269
|
+
return split
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
// scanTOMLTopLevel calls visit with the byte offset and trimmed text of each
|
|
273
|
+
// line that starts outside any multi-line string or array/inline-table value
|
|
274
|
+
// (a leading UTF-8 BOM is ignored), until visit returns false. Only such lines
|
|
275
|
+
// can hold a table header or a key.
|
|
276
|
+
func scanTOMLTopLevel(data []byte, visit func(offset int, line string) bool) {
|
|
277
|
+
depth, inString, offset := 0, "", 0
|
|
278
|
+
for i, raw := range strings.SplitAfter(string(data), "\n") {
|
|
279
|
+
line := raw
|
|
280
|
+
if i == 0 {
|
|
281
|
+
line = strings.TrimPrefix(line, string(utf8BOM))
|
|
282
|
+
}
|
|
283
|
+
lineOffset := offset
|
|
284
|
+
offset += len(raw)
|
|
285
|
+
if depth == 0 && inString == "" {
|
|
286
|
+
trimmed := strings.TrimSpace(line)
|
|
287
|
+
if !visit(lineOffset, trimmed) {
|
|
288
|
+
return
|
|
289
|
+
}
|
|
290
|
+
if tomlTableHeader.MatchString(trimmed) {
|
|
291
|
+
continue
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
depth, inString = scanTOMLLine(line, depth, inString)
|
|
199
295
|
}
|
|
200
|
-
return r.installMarker(merge.MarkerRel, merge.MarkerText)
|
|
201
296
|
}
|
|
202
297
|
|
|
298
|
+
// scanTOMLLine carries the open [ / { depth and any open multi-line string
|
|
299
|
+
// delimiter (""" or ”') across one line, skipping strings and comments.
|
|
300
|
+
func scanTOMLLine(line string, depth int, inString string) (int, string) {
|
|
301
|
+
for i := 0; i < len(line); i++ {
|
|
302
|
+
if inString != "" {
|
|
303
|
+
if inString == `"""` && line[i] == '\\' {
|
|
304
|
+
i++
|
|
305
|
+
} else if strings.HasPrefix(line[i:], inString) {
|
|
306
|
+
i += 2
|
|
307
|
+
// Up to two extra quotes still belong to the content.
|
|
308
|
+
for i+1 < len(line) && line[i+1] == inString[0] {
|
|
309
|
+
i++
|
|
310
|
+
}
|
|
311
|
+
inString = ""
|
|
312
|
+
}
|
|
313
|
+
continue
|
|
314
|
+
}
|
|
315
|
+
switch c := line[i]; c {
|
|
316
|
+
case '#':
|
|
317
|
+
return depth, ""
|
|
318
|
+
case '[', '{':
|
|
319
|
+
depth++
|
|
320
|
+
case ']', '}':
|
|
321
|
+
if depth > 0 {
|
|
322
|
+
depth--
|
|
323
|
+
}
|
|
324
|
+
case '"', '\'':
|
|
325
|
+
if delim := strings.Repeat(string(c), 3); strings.HasPrefix(line[i:], delim) {
|
|
326
|
+
inString = delim
|
|
327
|
+
i += 2
|
|
328
|
+
continue
|
|
329
|
+
}
|
|
330
|
+
for i++; i < len(line) && line[i] != c; i++ {
|
|
331
|
+
if c == '"' && line[i] == '\\' {
|
|
332
|
+
i++
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
return depth, inString
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
// tomlTableHeader matches a trimmed [table] or [[array]] header line. Quoted
|
|
341
|
+
// key parts may hold any character; a bare part stops at brackets, quotes,
|
|
342
|
+
// '#', '=' and ',', so array and inline-table value lines never match.
|
|
343
|
+
var tomlTableHeader = regexp.MustCompile(`^\[\[?(?:[^\[\]"'#=,]|"(?:[^"\\]|\\.)*"|'[^']*')+\]\]?\s*(#.*)?$`)
|
|
344
|
+
|
|
203
345
|
func (r *runner) mergeClaudeSettings(merge hostpack.JSONMerge) error {
|
|
204
346
|
dest := filepath.Join(r.target, filepath.FromSlash(merge.TargetRel))
|
|
205
|
-
|
|
206
|
-
if err != nil {
|
|
207
|
-
return fmt.Errorf("load Claude settings payload: %w", err)
|
|
208
|
-
}
|
|
209
|
-
current := map[string]any{}
|
|
210
|
-
if data, readErr := readJSON(dest); readErr == nil {
|
|
211
|
-
current = data
|
|
212
|
-
} else if !errors.Is(readErr, fs.ErrNotExist) {
|
|
213
|
-
return fmt.Errorf("load existing Claude settings: %w", readErr)
|
|
214
|
-
}
|
|
215
|
-
next, ownsDefaultMode, err := mergeClaudeSettingsConfig(current, devrites, r.claudeDefaultModeOwned(), r.managedClaudePermissionRules())
|
|
347
|
+
next, state, err := r.claudeSettingsNext()
|
|
216
348
|
if err != nil {
|
|
217
349
|
return err
|
|
218
350
|
}
|
|
351
|
+
if permissions, _ := next["permissions"].(map[string]any); permissions["defaultMode"] == "plan" {
|
|
352
|
+
fmt.Fprintf(r.opts.Stderr, "warning: %s: permissions.defaultMode is plan, which blocks the root's .devrites writes every rite needs (ADR-0035); remove it to run the lifecycle\n", merge.TargetRel)
|
|
353
|
+
}
|
|
219
354
|
if r.opts.DryRun {
|
|
220
355
|
fmt.Fprintf(r.opts.Stdout, " [merge] %s\n", merge.DryRunText)
|
|
221
|
-
return r.installClaudeSettingsMarker(
|
|
356
|
+
return r.installClaudeSettingsMarker(state)
|
|
222
357
|
}
|
|
223
358
|
if err := r.recheckPath(merge.TargetRel); err != nil {
|
|
224
359
|
return err
|
|
@@ -231,7 +366,39 @@ func (r *runner) mergeClaudeSettings(merge hostpack.JSONMerge) error {
|
|
|
231
366
|
if err := r.writeConfined(dest, data, 0o644); err != nil {
|
|
232
367
|
return fmt.Errorf("cannot write %s: %w", merge.TargetRel, err)
|
|
233
368
|
}
|
|
234
|
-
return r.installClaudeSettingsMarker(
|
|
369
|
+
return r.installClaudeSettingsMarker(state)
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
// claudeSettingsMerge is what the settings marker records about a merge.
|
|
373
|
+
type claudeSettingsMerge struct {
|
|
374
|
+
created bool
|
|
375
|
+
added map[string]bool
|
|
376
|
+
}
|
|
377
|
+
|
|
378
|
+
// claudeSettingsNext returns the merged .claude/settings.json without
|
|
379
|
+
// writing it.
|
|
380
|
+
func (r *runner) claudeSettingsNext() (map[string]any, claudeSettingsMerge, error) {
|
|
381
|
+
merge := hostpack.ClaudeSettingsMerge
|
|
382
|
+
dest := filepath.Join(r.target, filepath.FromSlash(merge.TargetRel))
|
|
383
|
+
devrites, err := readJSONFS(r.payloadFS, merge.PayloadRel)
|
|
384
|
+
if err != nil {
|
|
385
|
+
return nil, claudeSettingsMerge{}, fmt.Errorf("load Claude settings payload: %w", err)
|
|
386
|
+
}
|
|
387
|
+
current := map[string]any{}
|
|
388
|
+
state := claudeSettingsMerge{created: r.claudeSettingsCreated()}
|
|
389
|
+
if data, readErr := readJSON(dest); readErr == nil {
|
|
390
|
+
current = data
|
|
391
|
+
} else if errors.Is(readErr, fs.ErrNotExist) {
|
|
392
|
+
state.created = true
|
|
393
|
+
} else {
|
|
394
|
+
return nil, claudeSettingsMerge{}, fmt.Errorf("load existing Claude settings: %w", readErr)
|
|
395
|
+
}
|
|
396
|
+
next, added, err := mergeClaudeSettingsConfig(current, devrites, r.claudeDefaultModeOwned(), r.managedClaudePermissionRules())
|
|
397
|
+
if err != nil {
|
|
398
|
+
return nil, claudeSettingsMerge{}, err
|
|
399
|
+
}
|
|
400
|
+
state.added = added
|
|
401
|
+
return next, state, nil
|
|
235
402
|
}
|
|
236
403
|
|
|
237
404
|
func (r *runner) seedClaudeSettings() error {
|
|
@@ -264,7 +431,7 @@ func stripHooksWith(path string, write func([]byte) error, remove func() error)
|
|
|
264
431
|
return write(data)
|
|
265
432
|
}
|
|
266
433
|
|
|
267
|
-
func (r *runner) stripClaudeSettings(path string
|
|
434
|
+
func (r *runner) stripClaudeSettings(path string) error {
|
|
268
435
|
current, err := readJSON(path)
|
|
269
436
|
if err != nil {
|
|
270
437
|
if errors.Is(err, fs.ErrNotExist) {
|
|
@@ -273,7 +440,7 @@ func (r *runner) stripClaudeSettings(path string, preserveEmpty bool) error {
|
|
|
273
440
|
return fmt.Errorf("load Claude settings: %w", err)
|
|
274
441
|
}
|
|
275
442
|
next := stripDevritesSettings(current, r.claudeDefaultModeOwned(), r.managedClaudePermissionRules())
|
|
276
|
-
if len(next) == 0 &&
|
|
443
|
+
if len(next) == 0 && r.claudeSettingsCreated() {
|
|
277
444
|
return r.removeConfined(path)
|
|
278
445
|
}
|
|
279
446
|
data, err := json.MarshalIndent(next, "", " ")
|
|
@@ -310,20 +477,20 @@ func stripMarkerWith(path, begin, end string, write func([]byte) error, remove f
|
|
|
310
477
|
}
|
|
311
478
|
|
|
312
479
|
func hasTopLevelTOMLKey(data []byte, key string) bool {
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
if
|
|
316
|
-
continue
|
|
317
|
-
}
|
|
318
|
-
if strings.HasPrefix(line, "[") {
|
|
480
|
+
found := false
|
|
481
|
+
scanTOMLTopLevel(data, func(_ int, line string) bool {
|
|
482
|
+
if tomlTableHeader.MatchString(line) {
|
|
319
483
|
return false
|
|
320
484
|
}
|
|
321
485
|
name, _, ok := strings.Cut(line, "=")
|
|
322
|
-
|
|
323
|
-
|
|
486
|
+
name = strings.TrimSpace(name)
|
|
487
|
+
if len(name) >= 2 && (name[0] == '"' || name[0] == '\'') && name[len(name)-1] == name[0] {
|
|
488
|
+
name = name[1 : len(name)-1]
|
|
324
489
|
}
|
|
325
|
-
|
|
326
|
-
|
|
490
|
+
found = ok && name == key
|
|
491
|
+
return !found
|
|
492
|
+
})
|
|
493
|
+
return found
|
|
327
494
|
}
|
|
328
495
|
|
|
329
496
|
func readJSON(path string) (map[string]any, error) {
|
|
@@ -374,7 +541,7 @@ func isDevritesHooksComment(comment string) bool {
|
|
|
374
541
|
|
|
375
542
|
func isDevritesSettingsComment(comment string) bool {
|
|
376
543
|
return isDevritesHooksComment(comment) ||
|
|
377
|
-
strings.HasPrefix(comment, "DevRites keeps the root orchestration context source-read-only
|
|
544
|
+
strings.HasPrefix(comment, "DevRites keeps the root orchestration context source-read-only")
|
|
378
545
|
}
|
|
379
546
|
|
|
380
547
|
func stripDevritesHooks(config map[string]any) map[string]any {
|
|
@@ -493,41 +660,35 @@ func stripDevritesSettings(config map[string]any, removeOwnedDefaultMode bool, m
|
|
|
493
660
|
return next
|
|
494
661
|
}
|
|
495
662
|
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
663
|
+
// mergeClaudeSettingsConfig also returns the non-engine payload rules the
|
|
664
|
+
// merge added, i.e. those the user did not already grant themselves. It never
|
|
665
|
+
// sets permissions.defaultMode; removeOwnedPlan drops a plan mode an older
|
|
666
|
+
// DevRites install wrote.
|
|
667
|
+
func mergeClaudeSettingsConfig(current, desired map[string]any, removeOwnedPlan bool, managed map[string]bool) (map[string]any, map[string]bool, error) {
|
|
668
|
+
desiredPermissions, _ := desired["permissions"].(map[string]any)
|
|
501
669
|
desiredAllow, ok := desiredPermissions["allow"].([]any)
|
|
502
670
|
if !ok {
|
|
503
|
-
return nil,
|
|
671
|
+
return nil, nil, fmt.Errorf("DevRites Claude settings payload permissions.allow must be an array")
|
|
504
672
|
}
|
|
505
673
|
|
|
506
|
-
next := stripDevritesSettings(current,
|
|
674
|
+
next := stripDevritesSettings(current, removeOwnedPlan, managed)
|
|
507
675
|
permissions := map[string]any{}
|
|
508
676
|
if raw, exists := next["permissions"]; exists {
|
|
509
677
|
var ok bool
|
|
510
678
|
permissions, ok = raw.(map[string]any)
|
|
511
679
|
if !ok {
|
|
512
|
-
return nil,
|
|
680
|
+
return nil, nil, fmt.Errorf("existing Claude permissions must be a JSON object")
|
|
513
681
|
}
|
|
514
682
|
}
|
|
515
683
|
|
|
516
|
-
switch mode, exists := permissions["defaultMode"]; {
|
|
517
|
-
case !exists:
|
|
518
|
-
defaultModeOwned = true
|
|
519
|
-
case mode == "plan":
|
|
520
|
-
case mode != "plan":
|
|
521
|
-
return nil, false, fmt.Errorf("existing Claude permissions.defaultMode is %q; DevRites requires plan mode for the read-only root orchestrator", mode)
|
|
522
|
-
}
|
|
523
|
-
permissions["defaultMode"] = "plan"
|
|
524
684
|
var allow []any
|
|
525
685
|
if existingAllow, exists := permissions["allow"]; exists {
|
|
526
686
|
allow, ok = existingAllow.([]any)
|
|
527
687
|
if !ok {
|
|
528
|
-
return nil,
|
|
688
|
+
return nil, nil, fmt.Errorf("existing Claude permissions.allow must be an array")
|
|
529
689
|
}
|
|
530
690
|
}
|
|
691
|
+
added := map[string]bool{}
|
|
531
692
|
seen := map[string]bool{}
|
|
532
693
|
for _, rule := range allow {
|
|
533
694
|
if value, ok := rule.(string); ok {
|
|
@@ -537,11 +698,14 @@ func mergeClaudeSettingsConfig(current, desired map[string]any, defaultModeOwned
|
|
|
537
698
|
for _, rule := range desiredAllow {
|
|
538
699
|
value, ok := rule.(string)
|
|
539
700
|
if !ok {
|
|
540
|
-
return nil,
|
|
701
|
+
return nil, nil, fmt.Errorf("DevRites Claude permission rules must be strings")
|
|
541
702
|
}
|
|
542
703
|
if !seen[value] {
|
|
543
704
|
allow = append(allow, value)
|
|
544
705
|
seen[value] = true
|
|
706
|
+
if !strings.HasPrefix(value, "Bash(devrites-engine ") {
|
|
707
|
+
added[value] = true
|
|
708
|
+
}
|
|
545
709
|
}
|
|
546
710
|
}
|
|
547
711
|
permissions["allow"] = allow
|
|
@@ -551,7 +715,7 @@ func mergeClaudeSettingsConfig(current, desired map[string]any, defaultModeOwned
|
|
|
551
715
|
next["$comment"] = comment
|
|
552
716
|
}
|
|
553
717
|
}
|
|
554
|
-
return next,
|
|
718
|
+
return next, added, nil
|
|
555
719
|
}
|
|
556
720
|
|
|
557
721
|
// isDevritesPermissionRule reports whether a permissions.allow rule is
|