devrites 6.0.4 → 6.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +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/architecture.md +3 -1
- package/docs/cli.md +25 -2
- package/docs/command-map.md +10 -8
- package/docs/engine/commands.md +6 -3
- 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 +24 -7
- package/engine/internal/lib/diffscope.go +79 -3
- package/engine/internal/lib/dispatch.go +34 -7
- package/engine/internal/lib/drift.go +9 -2
- package/engine/internal/lib/handoff.go +14 -5
- package/engine/internal/lib/metrics.go +29 -9
- package/engine/internal/lib/migrate.go +30 -12
- package/engine/internal/lib/next.go +22 -2
- 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 +5 -1
- 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/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 +8 -6
- 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/reply-contract.md +12 -15
- package/pack/.claude/skills/devrites-lib/reference/standards/afk-hitl.md +30 -10
- 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/core.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/one-shot-actions.md +7 -6
- 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 +17 -14
- package/pack/.claude/skills/rite-autocomplete/reference/loop.md +9 -6
- package/pack/.claude/skills/rite-autocomplete/reference/stop-conditions.md +25 -21
- package/pack/.claude/skills/rite-build/reference/afk-discipline.md +6 -3
- package/pack/.claude/skills/rite-build/reference/parallel-batch.md +5 -5
- 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/SKILL.md +1 -1
- 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-prove/SKILL.md +4 -2
- package/pack/.claude/skills/rite-prove/reference/failure-triage.md +2 -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-spec/reference/state-workspace.md +2 -2
- 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/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 +8 -6
- 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/reply-contract.md +12 -15
- package/pack/generated/claude/skills/devrites-lib/reference/standards/afk-hitl.md +30 -10
- 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/core.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/one-shot-actions.md +7 -6
- 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 +17 -14
- package/pack/generated/claude/skills/rite-autocomplete/reference/loop.md +9 -6
- package/pack/generated/claude/skills/rite-autocomplete/reference/stop-conditions.md +25 -21
- package/pack/generated/claude/skills/rite-build/reference/afk-discipline.md +6 -3
- package/pack/generated/claude/skills/rite-build/reference/parallel-batch.md +5 -5
- 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/SKILL.md +1 -1
- 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-prove/SKILL.md +4 -2
- package/pack/generated/claude/skills/rite-prove/reference/failure-triage.md +2 -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-spec/reference/state-workspace.md +2 -2
- 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 +5 -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 +8 -6
- 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/reply-contract.md +12 -15
- package/pack/generated/codex/skills/devrites-lib/reference/standards/afk-hitl.md +30 -10
- 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 +2 -2
- 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/one-shot-actions.md +7 -6
- 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 +18 -15
- package/pack/generated/codex/skills/rite-autocomplete/reference/loop.md +9 -6
- package/pack/generated/codex/skills/rite-autocomplete/reference/stop-conditions.md +25 -21
- package/pack/generated/codex/skills/rite-build/SKILL.md +2 -2
- package/pack/generated/codex/skills/rite-build/reference/afk-discipline.md +6 -3
- package/pack/generated/codex/skills/rite-build/reference/parallel-batch.md +6 -6
- 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 +2 -2
- 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 +5 -3
- package/pack/generated/codex/skills/rite-prove/reference/failure-triage.md +2 -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-spec/reference/state-workspace.md +2 -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/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 +8 -6
- 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/reply-contract.md +12 -15
- package/pack/generated/devin/skills/devrites-lib/reference/standards/afk-hitl.md +33 -13
- 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 +2 -2
- 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/one-shot-actions.md +7 -6
- 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 +19 -16
- package/pack/generated/devin/skills/rite-autocomplete/reference/decision-policy.md +1 -1
- package/pack/generated/devin/skills/rite-autocomplete/reference/loop.md +9 -6
- package/pack/generated/devin/skills/rite-autocomplete/reference/stop-conditions.md +26 -22
- package/pack/generated/devin/skills/rite-build/SKILL.md +2 -2
- package/pack/generated/devin/skills/rite-build/reference/afk-discipline.md +6 -3
- package/pack/generated/devin/skills/rite-build/reference/checkpoint-protocol.md +2 -2
- package/pack/generated/devin/skills/rite-build/reference/parallel-batch.md +6 -6
- 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 +2 -2
- 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 +5 -3
- package/pack/generated/devin/skills/rite-prove/reference/failure-triage.md +2 -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-spec/reference/state-workspace.md +2 -2
- 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 +5 -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 +12 -10
- 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/reply-contract.md +12 -15
- package/pack/generated/omp/skills/devrites-lib/reference/standards/afk-hitl.md +38 -18
- 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 +4 -4
- 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/one-shot-actions.md +7 -6
- 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 +22 -19
- package/pack/generated/omp/skills/rite-autocomplete/reference/decision-policy.md +1 -1
- package/pack/generated/omp/skills/rite-autocomplete/reference/loop.md +11 -8
- package/pack/generated/omp/skills/rite-autocomplete/reference/stop-conditions.md +25 -21
- package/pack/generated/omp/skills/rite-build/SKILL.md +7 -7
- package/pack/generated/omp/skills/rite-build/reference/afk-discipline.md +7 -4
- 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/parallel-batch.md +9 -9
- package/pack/generated/omp/skills/rite-build/reference/phase-contract.md +6 -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 +9 -9
- 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 +17 -15
- 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 +4 -3
- 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 +10 -10
- 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/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 +8 -6
- 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/reply-contract.md +12 -15
- package/pack/generated/pi/skills/devrites-lib/reference/standards/afk-hitl.md +30 -10
- 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 +2 -2
- 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/one-shot-actions.md +7 -6
- 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 +18 -15
- package/pack/generated/pi/skills/rite-autocomplete/reference/loop.md +9 -6
- package/pack/generated/pi/skills/rite-autocomplete/reference/stop-conditions.md +25 -21
- package/pack/generated/pi/skills/rite-build/SKILL.md +2 -2
- package/pack/generated/pi/skills/rite-build/reference/afk-discipline.md +6 -3
- package/pack/generated/pi/skills/rite-build/reference/parallel-batch.md +6 -6
- 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 +2 -2
- 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 +5 -3
- package/pack/generated/pi/skills/rite-prove/reference/failure-triage.md +2 -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-spec/reference/state-workspace.md +2 -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 -912
- 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 -428
- 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
|
@@ -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)
|
|
@@ -67,21 +67,25 @@ func validateSlicePaths(paths []string, label, root string) ([]string, error) {
|
|
|
67
67
|
if err != nil {
|
|
68
68
|
return nil, fmt.Errorf("%s: %w", label, err)
|
|
69
69
|
}
|
|
70
|
+
// Comparisons fold case always: on a case-insensitive filesystem
|
|
71
|
+
// (macOS, Windows) .DEVRITES is the control tree and A.go is a.go; on a
|
|
72
|
+
// case-sensitive one a false overlap only serializes the slices.
|
|
73
|
+
folded := strings.ToLower(path)
|
|
70
74
|
// Parallel eligibility must reject workspace control metadata so slices
|
|
71
75
|
// cannot claim control-tree / SSOT files (docs: ".devrites/**").
|
|
72
|
-
if
|
|
76
|
+
if folded == ".devrites" || strings.HasPrefix(folded, ".devrites/") {
|
|
73
77
|
return nil, fmt.Errorf("%s: path must not include .devrites: %q", label, path)
|
|
74
78
|
}
|
|
75
79
|
// Same for git internals: a transfer commit can never carry .git/**
|
|
76
80
|
// anyway, and inside a worktree .git is a file, so claiming it is
|
|
77
81
|
// pure footgun.
|
|
78
|
-
if
|
|
82
|
+
if folded == ".git" || strings.HasPrefix(folded, ".git/") {
|
|
79
83
|
return nil, fmt.Errorf("%s: path must not include .git: %q", label, path)
|
|
80
84
|
}
|
|
81
|
-
if _, ok := seen[
|
|
85
|
+
if _, ok := seen[folded]; ok {
|
|
82
86
|
return nil, fmt.Errorf("%s: duplicate path %q", label, path)
|
|
83
87
|
}
|
|
84
|
-
seen[
|
|
88
|
+
seen[folded] = struct{}{}
|
|
85
89
|
normalized = append(normalized, path)
|
|
86
90
|
if root != "" {
|
|
87
91
|
// Check every component, not just the leaf: a symlinked directory
|
|
@@ -122,6 +126,7 @@ func CheckPathDisjoint(slices []SlicePaths, root string) ([]string, error) {
|
|
|
122
126
|
return nil, err
|
|
123
127
|
}
|
|
124
128
|
for _, path := range paths {
|
|
129
|
+
path = strings.ToLower(path) // see validateSlicePaths: overlap folds case
|
|
125
130
|
owners[path] = append(owners[path], label)
|
|
126
131
|
}
|
|
127
132
|
}
|
|
@@ -145,15 +145,17 @@ func validTag(tag string) bool {
|
|
|
145
145
|
}
|
|
146
146
|
|
|
147
147
|
func platformBinaryName() (string, error) {
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
148
|
+
return binaryNameFor(runtime.GOOS, runtime.GOARCH)
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
// binaryNameFor names the release asset; CI publishes darwin, linux and
|
|
152
|
+
// windows for both amd64 and arm64.
|
|
153
|
+
func binaryNameFor(goos, goarch string) (string, error) {
|
|
154
|
+
if (goos != "darwin" && goos != "linux" && goos != "windows") || (goarch != "amd64" && goarch != "arm64") {
|
|
155
|
+
return "", fmt.Errorf("no DevRites engine release for %s/%s", goos, goarch)
|
|
156
|
+
}
|
|
157
|
+
name := "devrites-" + goos + "-" + goarch
|
|
158
|
+
if goos == "windows" {
|
|
157
159
|
name += ".exe"
|
|
158
160
|
}
|
|
159
161
|
return name, nil
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
package safepath
|
|
2
2
|
|
|
3
3
|
import (
|
|
4
|
+
"errors"
|
|
4
5
|
"os"
|
|
5
6
|
"path/filepath"
|
|
6
7
|
)
|
|
@@ -28,9 +29,10 @@ func WithinResolved(candidate, parent string) bool {
|
|
|
28
29
|
|
|
29
30
|
// ResolveExisting resolves symlinks in the longest existing path prefix, then
|
|
30
31
|
// appends any missing tail without allowing it to change the resolved parent.
|
|
32
|
+
// A dangling symlink is followed to its target: creating through it writes there.
|
|
31
33
|
func ResolveExisting(filename string) (string, error) {
|
|
32
34
|
var tail []string
|
|
33
|
-
for {
|
|
35
|
+
for hops := 0; ; {
|
|
34
36
|
resolved, err := filepath.EvalSymlinks(filename)
|
|
35
37
|
if err == nil {
|
|
36
38
|
for i := len(tail) - 1; i >= 0; i-- {
|
|
@@ -41,6 +43,20 @@ func ResolveExisting(filename string) (string, error) {
|
|
|
41
43
|
if !os.IsNotExist(err) {
|
|
42
44
|
return "", err
|
|
43
45
|
}
|
|
46
|
+
if info, lerr := os.Lstat(filename); lerr == nil && info.Mode()&os.ModeSymlink != 0 {
|
|
47
|
+
target, rerr := os.Readlink(filename)
|
|
48
|
+
if rerr != nil {
|
|
49
|
+
return "", rerr
|
|
50
|
+
}
|
|
51
|
+
if hops++; hops > 255 {
|
|
52
|
+
return "", &os.PathError{Op: "resolve", Path: filename, Err: errors.New("too many symlinks")}
|
|
53
|
+
}
|
|
54
|
+
if !filepath.IsAbs(target) {
|
|
55
|
+
target = filepath.Join(filepath.Dir(filename), target)
|
|
56
|
+
}
|
|
57
|
+
filename = target
|
|
58
|
+
continue
|
|
59
|
+
}
|
|
44
60
|
parent := filepath.Dir(filename)
|
|
45
61
|
if parent == filename {
|
|
46
62
|
return "", err
|
|
@@ -78,17 +78,21 @@ func ArtifactLineBudget(name string) (int, bool) {
|
|
|
78
78
|
|
|
79
79
|
// sanctionedRootFiles are workspace-root files the schema places there without a
|
|
80
80
|
// line budget: conditional artifacts (`references.md`, `investigation-map.md`,
|
|
81
|
-
// `dogfood.md`) and engine-owned machine files (the parallel lease,
|
|
82
|
-
// ledger, the regression baseline
|
|
83
|
-
//
|
|
84
|
-
//
|
|
81
|
+
// `dogfood.md`, `devex.md`) and engine-owned machine files (the parallel lease,
|
|
82
|
+
// the metrics ledger, the regression baseline, the dispatch ledger, the drift
|
|
83
|
+
// baseline). Anything else in the root is unsanctioned placement — `packets/`
|
|
84
|
+
// and `history/` own by-reference packets and relocated narrative
|
|
85
|
+
// (workspace-artifact-schema.md "Required by phase").
|
|
85
86
|
var sanctionedRootFiles = map[string]bool{
|
|
86
87
|
"references.md": true,
|
|
87
88
|
"investigation-map.md": true,
|
|
88
89
|
"dogfood.md": true,
|
|
90
|
+
"devex.md": true,
|
|
89
91
|
"parallel-lease.md": true,
|
|
90
92
|
"metrics.jsonl": true,
|
|
91
93
|
"regression-baseline.json": true,
|
|
94
|
+
"dispatch.json": true,
|
|
95
|
+
"readiness-inputs.json": true,
|
|
92
96
|
}
|
|
93
97
|
|
|
94
98
|
// SanctionedRootFile reports whether name is a legitimate workspace-root file:
|
|
@@ -15,12 +15,14 @@ import (
|
|
|
15
15
|
// ResolveRoot returns the .devrites directory to operate on. A non-empty
|
|
16
16
|
// override (e.g. from DEVRITES_ROOT) may name either the project root or its
|
|
17
17
|
// .devrites directory; otherwise the nearest ancestor .devrites is used.
|
|
18
|
+
// Callers take Dir(root) as the project, so a symlinked .devrites (which
|
|
19
|
+
// rootfacts proves resolves inside the project) keeps its project-side name.
|
|
18
20
|
func ResolveRoot(override string) (string, error) {
|
|
19
21
|
facts, err := rootfacts.Resolve(override)
|
|
20
22
|
if err != nil {
|
|
21
23
|
return "", err
|
|
22
24
|
}
|
|
23
|
-
return facts.
|
|
25
|
+
return filepath.Join(facts.PhysicalProject, devritespaths.DevritesRootName), nil
|
|
24
26
|
}
|
|
25
27
|
|
|
26
28
|
// featureDir is the canonical per-feature state directory under root.
|
|
@@ -8,6 +8,7 @@ import (
|
|
|
8
8
|
"os"
|
|
9
9
|
"path"
|
|
10
10
|
"path/filepath"
|
|
11
|
+
"slices"
|
|
11
12
|
"sort"
|
|
12
13
|
"strings"
|
|
13
14
|
|
|
@@ -350,10 +351,12 @@ func observationWorkspaceOverrideValid(root, slug string) bool {
|
|
|
350
351
|
if raw == "" {
|
|
351
352
|
return true
|
|
352
353
|
}
|
|
353
|
-
if strings.TrimSpace(raw) != raw
|
|
354
|
+
if strings.TrimSpace(raw) != raw {
|
|
354
355
|
return false
|
|
355
356
|
}
|
|
356
|
-
|
|
357
|
+
// A ".." hop could route through a symlinked alias, so it is never
|
|
358
|
+
// cleaned away; "./" and trailing separators are harmless spellings.
|
|
359
|
+
if slices.Contains(strings.FieldsFunc(raw, func(r rune) bool { return r == '/' || r == filepath.Separator }), "..") {
|
|
357
360
|
return false
|
|
358
361
|
}
|
|
359
362
|
physicalRoot, err := filepath.EvalSymlinks(root)
|
|
@@ -364,16 +367,18 @@ func observationWorkspaceOverrideValid(root, slug string) bool {
|
|
|
364
367
|
if err != nil {
|
|
365
368
|
return false
|
|
366
369
|
}
|
|
367
|
-
override := raw
|
|
370
|
+
override := filepath.Clean(raw)
|
|
368
371
|
if !filepath.IsAbs(override) {
|
|
369
372
|
override = filepath.Join(filepath.Dir(physicalRoot), override)
|
|
370
373
|
}
|
|
371
|
-
|
|
372
|
-
|
|
374
|
+
// Only the selected root may be spelled through a symlink (/tmp versus
|
|
375
|
+
// /private/tmp); work/<slug> must match literally so an alias of the
|
|
376
|
+
// workspace itself never does.
|
|
377
|
+
if filepath.Base(override) != slug || filepath.Base(filepath.Dir(override)) != "work" {
|
|
373
378
|
return false
|
|
374
379
|
}
|
|
375
|
-
|
|
376
|
-
return
|
|
380
|
+
overrideRoot, err := filepath.EvalSymlinks(filepath.Dir(filepath.Dir(override)))
|
|
381
|
+
return err == nil && overrideRoot == physicalRoot
|
|
377
382
|
}
|
|
378
383
|
|
|
379
384
|
func observationInventory() []ArtifactPath {
|
|
@@ -3,16 +3,20 @@ package state
|
|
|
3
3
|
import (
|
|
4
4
|
"fmt"
|
|
5
5
|
"regexp"
|
|
6
|
+
"slices"
|
|
6
7
|
"strings"
|
|
7
8
|
"unicode"
|
|
8
9
|
|
|
9
10
|
"github.com/devrites/devrites/internal/markdowntext"
|
|
10
11
|
)
|
|
11
12
|
|
|
12
|
-
// TaskSlice is one SLICE-### block parsed from tasks.md.
|
|
13
|
+
// TaskSlice is one SLICE-### block parsed from tasks.md. Via maps a dependency
|
|
14
|
+
// ID to the interface its `(via <text>)` suffix names; bare edges are absent.
|
|
13
15
|
type TaskSlice struct {
|
|
14
|
-
ID
|
|
15
|
-
Dependencies
|
|
16
|
+
ID string
|
|
17
|
+
Dependencies []string
|
|
18
|
+
Via map[string]string
|
|
19
|
+
ConsumesProduces string
|
|
16
20
|
}
|
|
17
21
|
|
|
18
22
|
// TaskGraphResult is the deterministic outcome of parsing a tasks.md slice graph.
|
|
@@ -26,8 +30,12 @@ type TaskGraphResult struct {
|
|
|
26
30
|
var (
|
|
27
31
|
sliceHeaderRE = regexp.MustCompile(`(?m)^##\s+(SLICE-\d+)\b`)
|
|
28
32
|
anyH2HeaderRE = regexp.MustCompile(`(?m)^##\s`)
|
|
29
|
-
dependenciesRE = regexp.MustCompile(`(?m)^Dependencies
|
|
30
|
-
dependsOnRE = regexp.MustCompile(`(?m)^depends_on
|
|
33
|
+
dependenciesRE = regexp.MustCompile(`(?m)^Dependencies:[ \t]*(.+)[ \t]*$`)
|
|
34
|
+
dependsOnRE = regexp.MustCompile(`(?m)^depends_on:[ \t]*(.+)[ \t]*$`)
|
|
35
|
+
consumesRE = regexp.MustCompile(`(?m)^Consumes / Produces:[ \t]*(.+)[ \t]*$`)
|
|
36
|
+
// viaSuffixRE matches a Dependencies `(via <text>)` suffix; group 2 is
|
|
37
|
+
// empty when the parenthetical is unclosed. Nested parentheses are unsupported.
|
|
38
|
+
viaSuffixRE = regexp.MustCompile(`\([ \t]*via\b([^()]*)(\))?`)
|
|
31
39
|
sliceIDValidRE = regexp.MustCompile(`^SLICE-\d+$`)
|
|
32
40
|
)
|
|
33
41
|
|
|
@@ -92,10 +100,10 @@ func ParseTaskGraph(tasksMarkdown []byte) TaskGraphResult {
|
|
|
92
100
|
end = headers[i+1][0]
|
|
93
101
|
}
|
|
94
102
|
block := text[start:end]
|
|
95
|
-
|
|
103
|
+
slice, problems := parseSliceGraph(id, block)
|
|
96
104
|
result.Problems = append(result.Problems, problems...)
|
|
97
|
-
result.Slices = append(result.Slices,
|
|
98
|
-
for _, dep := range
|
|
105
|
+
result.Slices = append(result.Slices, slice)
|
|
106
|
+
for _, dep := range slice.Dependencies {
|
|
99
107
|
if !known[dep] {
|
|
100
108
|
result.Unknown = append(result.Unknown, dep)
|
|
101
109
|
result.Problems = append(result.Problems, fmt.Sprintf("%s depends on unknown slice %s", id, dep))
|
|
@@ -121,14 +129,20 @@ func structuralTaskText(tasksMarkdown []byte) string {
|
|
|
121
129
|
return string(masked)
|
|
122
130
|
}
|
|
123
131
|
|
|
124
|
-
func parseSliceGraph(id, block string) (
|
|
132
|
+
func parseSliceGraph(id, block string) (TaskSlice, []string) {
|
|
125
133
|
var problems []string
|
|
126
134
|
depsLine := firstLineValue(dependenciesRE, block)
|
|
127
135
|
mirrorLine := firstLineValue(dependsOnRE, block)
|
|
128
|
-
|
|
129
|
-
|
|
136
|
+
bare, via, malformed := splitDependencyVia(depsLine)
|
|
137
|
+
deps, malformedIDs := parseIDList(bare)
|
|
138
|
+
for _, token := range append(malformed, malformedIDs...) {
|
|
130
139
|
problems = append(problems, fmt.Sprintf("%s has malformed dependency %q", id, token))
|
|
131
140
|
}
|
|
141
|
+
for dep := range via {
|
|
142
|
+
if !slices.Contains(deps, dep) {
|
|
143
|
+
delete(via, dep) // its ID token is already reported malformed
|
|
144
|
+
}
|
|
145
|
+
}
|
|
132
146
|
mirror, mirrorMalformed := parseIDList(mirrorLine)
|
|
133
147
|
for _, token := range mirrorMalformed {
|
|
134
148
|
problems = append(problems, fmt.Sprintf("%s has malformed depends_on %q", id, token))
|
|
@@ -142,7 +156,48 @@ func parseSliceGraph(id, block string) ([]string, []string) {
|
|
|
142
156
|
if depsLine == "" {
|
|
143
157
|
deps = mirror
|
|
144
158
|
}
|
|
145
|
-
return deps, problems
|
|
159
|
+
return TaskSlice{ID: id, Dependencies: deps, Via: via, ConsumesProduces: firstLineValue(consumesRE, block)}, problems
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
// splitDependencyVia strips each `(via <text>)` suffix from a Dependencies
|
|
163
|
+
// value, returning the bare ID list, the via text keyed by the ID it follows,
|
|
164
|
+
// and any suffix that is empty, unclosed, or not directly after an ID.
|
|
165
|
+
func splitDependencyVia(raw string) (string, map[string]string, []string) {
|
|
166
|
+
var bare strings.Builder
|
|
167
|
+
var via map[string]string
|
|
168
|
+
var malformed []string
|
|
169
|
+
last := 0
|
|
170
|
+
for _, m := range viaSuffixRE.FindAllStringSubmatchIndex(raw, -1) {
|
|
171
|
+
before := raw[last:m[0]]
|
|
172
|
+
bare.WriteString(before)
|
|
173
|
+
last = m[1]
|
|
174
|
+
text := strings.TrimSpace(raw[m[2]:m[3]])
|
|
175
|
+
dep := precedingSliceID(before)
|
|
176
|
+
if m[4] < 0 || text == "" || dep == "" {
|
|
177
|
+
malformed = append(malformed, strings.TrimSpace(raw[m[0]:m[1]]))
|
|
178
|
+
continue
|
|
179
|
+
}
|
|
180
|
+
if via == nil {
|
|
181
|
+
via = make(map[string]string)
|
|
182
|
+
}
|
|
183
|
+
if _, seen := via[dep]; !seen {
|
|
184
|
+
via[dep] = text
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
bare.WriteString(raw[last:])
|
|
188
|
+
return bare.String(), via, malformed
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
// precedingSliceID returns the SLICE-### token that ends s, separated from what
|
|
192
|
+
// follows only by blanks, or "" when s ends in a separator or a non-ID token.
|
|
193
|
+
func precedingSliceID(s string) string {
|
|
194
|
+
s = strings.TrimRight(s, " \t")
|
|
195
|
+
start := strings.LastIndexAny(s, ",; \t") + 1
|
|
196
|
+
id := strings.Trim(s[start:], "`'\"(){}[]")
|
|
197
|
+
if !sliceIDValidRE.MatchString(id) {
|
|
198
|
+
return ""
|
|
199
|
+
}
|
|
200
|
+
return id
|
|
146
201
|
}
|
|
147
202
|
|
|
148
203
|
func firstLineValue(re *regexp.Regexp, block string) string {
|
|
@@ -103,12 +103,18 @@ func WithFeatureLockRelease(root, slug string, fn func(release func()) error) er
|
|
|
103
103
|
}
|
|
104
104
|
|
|
105
105
|
// featureLockPath validates slug and creates the feature directory, returning
|
|
106
|
-
// the lock file path inside it.
|
|
106
|
+
// the lock file path inside it. A closed workspace (work/<slug> gone, archive/<slug>
|
|
107
|
+
// present) is refused rather than resurrected by a late lock.
|
|
107
108
|
func featureLockPath(root, slug string) (string, error) {
|
|
108
109
|
if !devritespaths.ValidSlug(slug) {
|
|
109
110
|
return "", fmt.Errorf("lock feature %q: not a feature slug", slug)
|
|
110
111
|
}
|
|
111
112
|
dir := featureDir(root, slug)
|
|
113
|
+
if _, err := os.Lstat(dir); errors.Is(err, fs.ErrNotExist) {
|
|
114
|
+
if _, archErr := os.Lstat(filepath.Join(root, "archive", slug)); archErr == nil {
|
|
115
|
+
return "", fmt.Errorf("lock feature %q: workspace is closed (archived)", slug)
|
|
116
|
+
}
|
|
117
|
+
}
|
|
112
118
|
if err := os.MkdirAll(dir, 0o755); err != nil {
|
|
113
119
|
return "", fmt.Errorf("lock feature %q: %w", slug, err)
|
|
114
120
|
}
|
package/engine/main.go
CHANGED
|
@@ -48,6 +48,8 @@ Usage:
|
|
|
48
48
|
devrites-engine orient <slug> Alias for observe summary
|
|
49
49
|
devrites-engine next [slug] Print the minimal remaining lifecycle path with advisory skips
|
|
50
50
|
devrites-engine handoff [slug] Emit the deterministic resume record (cursor, blocking gates, ledger, dead ends)
|
|
51
|
+
devrites-engine recall --paths <csv> [--limit n]
|
|
52
|
+
Point at archived features that touched these paths: decisions, constraints, findings (read-only)
|
|
51
53
|
devrites-engine context [slug] (--phase <p> | --skill <name>) [--role <r>] [--slice <id>] [--trigger a,b]
|
|
52
54
|
Emit one deduplicated read-set bundle for a phase, skill, or dispatch role
|
|
53
55
|
devrites-engine metrics record <slug> --phase <p> --event <e> [--role r] [--bytes n] [--note s]
|
|
@@ -64,7 +66,7 @@ Usage:
|
|
|
64
66
|
devrites-engine state resolve <qid> "<ans>" Resolve an open question and update state atomically
|
|
65
67
|
devrites-engine state merge-manifest <slug> [pred...] Fold the recorded predecessor chain's manifests into the release candidate manifest
|
|
66
68
|
devrites-engine state close <slug> Archive a shipped feature and clear ACTIVE
|
|
67
|
-
devrites-engine migrate <slug> [--dry-run] Normalize
|
|
69
|
+
devrites-engine migrate <slug> [--dry-run] [--answer id=choice] Normalize an older-schema workspace to the current schema
|
|
68
70
|
devrites-engine secret-scan [--staged] [--stdin] [slug] Scan exact staged blobs, stdin, or touched files; HIGH blocks
|
|
69
71
|
devrites-engine open-visual <path-or-name> [--slug <slug>] [--no-open]
|
|
70
72
|
Resolve a visual HTML file, optionally open it locally, print agent paths
|
|
@@ -134,6 +136,8 @@ func run(args []string, stdin io.Reader, stdout, stderr io.Writer) int {
|
|
|
134
136
|
return lib.RunNext(root, args[1:], stdout, stderr)
|
|
135
137
|
case "handoff":
|
|
136
138
|
return lib.RunHandoff(root, args[1:], stdout, stderr)
|
|
139
|
+
case "recall":
|
|
140
|
+
return lib.RunRecall(root, args[1:], stdout, stderr)
|
|
137
141
|
case "context":
|
|
138
142
|
return lib.RunContext(root, args[1:], stdout, stderr)
|
|
139
143
|
case "metrics":
|
|
@@ -1 +1,3 @@
|
|
|
1
1
|
Do not invoke another agent. You are called by `/overhaul` and return your result to that orchestrator.
|
|
2
|
+
|
|
3
|
+
Write your receipt (`schema` `overhaul.receipt/1`) to the packet's `receipt_path`, copying `run_id`, `task_id`, `attempt_id`, `lane` and `snapshot` verbatim from the packet and setting `role` to the unprefixed role name (`verifier`, not `overhaul-verifier`); follow `.claude/skills/overhaul/references/orchestration.md` § Receipts, since admission rejects any mismatch.
|