devrites 6.0.4 → 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 +6 -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 +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 +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/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/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/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 +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 +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/parallel-batch.md +1 -1
- 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/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/checkpoint-protocol.md +2 -2
- package/pack/generated/devin/skills/rite-build/reference/parallel-batch.md +1 -1
- 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 +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 +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 +1 -1
- 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 +4 -4
- 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 +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/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/parallel-batch.md +1 -1
- 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 -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
|
@@ -14,6 +14,7 @@ import (
|
|
|
14
14
|
"time"
|
|
15
15
|
|
|
16
16
|
"github.com/devrites/devrites/internal/devritespaths"
|
|
17
|
+
"github.com/devrites/devrites/internal/state"
|
|
17
18
|
)
|
|
18
19
|
|
|
19
20
|
// MetricsFile is the per-feature append-only event ledger. One JSON object per
|
|
@@ -150,6 +151,16 @@ func recordMetric(root, slug, phase, event, role string, bytes int64) {
|
|
|
150
151
|
_ = f.Close()
|
|
151
152
|
}
|
|
152
153
|
|
|
154
|
+
// cursorPhase is the feature's recorded cursor phase, or "" when state.md is
|
|
155
|
+
// unreadable; engine checks label their metrics with it.
|
|
156
|
+
func cursorPhase(root, slug string) string {
|
|
157
|
+
report, err := state.Status(root, slug)
|
|
158
|
+
if err != nil {
|
|
159
|
+
return ""
|
|
160
|
+
}
|
|
161
|
+
return string(report.Phase)
|
|
162
|
+
}
|
|
163
|
+
|
|
153
164
|
func metricsSummary(root string, args []string, stdout, stderr io.Writer) int {
|
|
154
165
|
bySlice := slices.Contains(args, "--by-slice")
|
|
155
166
|
args = slices.DeleteFunc(slices.Clone(args), func(a string) bool { return a == "--by-slice" })
|
|
@@ -170,10 +181,14 @@ func metricsSummary(root string, args []string, stdout, stderr io.Writer) int {
|
|
|
170
181
|
return sliceCostSummary(root, slug, stdout, stderr)
|
|
171
182
|
}
|
|
172
183
|
f, err := os.Open(filepath.Join(dir, MetricsFile)) // #nosec G304 -- dir is a validated workspace and filename is fixed
|
|
173
|
-
if err
|
|
184
|
+
if os.IsNotExist(err) {
|
|
174
185
|
fmt.Fprintf(stdout, "metrics: no events recorded for %s\n", slug)
|
|
175
186
|
return 0
|
|
176
187
|
}
|
|
188
|
+
if err != nil {
|
|
189
|
+
fmt.Fprintf(stderr, "metrics: ledger unreadable: %v\n", err)
|
|
190
|
+
return 2
|
|
191
|
+
}
|
|
177
192
|
defer func() { _ = f.Close() }()
|
|
178
193
|
|
|
179
194
|
type phaseAgg struct {
|
|
@@ -190,11 +205,20 @@ func metricsSummary(root string, args []string, stdout, stderr io.Writer) int {
|
|
|
190
205
|
totalBytes := int64(0)
|
|
191
206
|
totalEvents := 0
|
|
192
207
|
bad := 0
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
208
|
+
// A reader, not a Scanner: one event line carries an unbounded --note. A
|
|
209
|
+
// final line without a newline is handled, then the next read is ("", EOF).
|
|
210
|
+
reader := bufio.NewReader(f)
|
|
211
|
+
for {
|
|
212
|
+
raw, readErr := reader.ReadString('\n')
|
|
213
|
+
if readErr != nil && readErr != io.EOF {
|
|
214
|
+
fmt.Fprintf(stderr, "metrics: ledger unreadable after %d events: %v\n", totalEvents, readErr)
|
|
215
|
+
return 2
|
|
216
|
+
}
|
|
217
|
+
line := strings.TrimSpace(raw)
|
|
197
218
|
if line == "" {
|
|
219
|
+
if readErr == io.EOF {
|
|
220
|
+
break
|
|
221
|
+
}
|
|
198
222
|
continue
|
|
199
223
|
}
|
|
200
224
|
var ev metricEvent
|
|
@@ -222,10 +246,6 @@ func metricsSummary(root string, args []string, stdout, stderr io.Writer) int {
|
|
|
222
246
|
totalEvents++
|
|
223
247
|
totalBytes += ev.Bytes
|
|
224
248
|
}
|
|
225
|
-
if err := scanner.Err(); err != nil {
|
|
226
|
-
fmt.Fprintf(stderr, "metrics: ledger unreadable after %d events: %v\n", totalEvents, err)
|
|
227
|
-
return 2
|
|
228
|
-
}
|
|
229
249
|
if len(phases) == 0 && bad == 0 {
|
|
230
250
|
fmt.Fprintf(stdout, "metrics: no events recorded for %s\n", slug)
|
|
231
251
|
return 0
|
|
@@ -31,7 +31,7 @@ type migratePlan struct {
|
|
|
31
31
|
questions []migrateQuestion
|
|
32
32
|
}
|
|
33
33
|
|
|
34
|
-
// Migrate normalizes
|
|
34
|
+
// Migrate normalizes an older-schema feature workspace to the current schema: it
|
|
35
35
|
// converts legacy bullet cursor fields into canonical table rows, records the
|
|
36
36
|
// schema row, and creates missing required artifacts as empty stubs. Bound
|
|
37
37
|
// proof files are preserved byte-exact; content is never synthesized. The
|
|
@@ -130,6 +130,23 @@ func Migrate(root string, args []string, stdout, stderr io.Writer) int {
|
|
|
130
130
|
return nil
|
|
131
131
|
}
|
|
132
132
|
|
|
133
|
+
next := lines
|
|
134
|
+
for _, step := range plan.steps {
|
|
135
|
+
if step.kind == "phase" {
|
|
136
|
+
next = state.UpsertCursorField(next, state.CursorPhase, plan.phase)
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
if converted, changed := state.ConvertCursorToTable(next); changed {
|
|
140
|
+
next = converted
|
|
141
|
+
}
|
|
142
|
+
next = state.UpsertCursorField(next, state.CursorSchema, fmt.Sprint(state.SchemaVersion))
|
|
143
|
+
// Upserts silently decline what they cannot write (for example after
|
|
144
|
+
// an unclosed fence), so confirm the schema row reads back before
|
|
145
|
+
// touching anything.
|
|
146
|
+
if value, ok := state.CursorField(next, state.CursorSchema); !ok || strings.TrimSpace(value) != fmt.Sprint(state.SchemaVersion) {
|
|
147
|
+
return fmt.Errorf("state.md cannot be normalized: the schema row does not read back (check for an unclosed fence or malformed cursor); nothing written")
|
|
148
|
+
}
|
|
149
|
+
|
|
133
150
|
// New stub files go first: they are idempotent, never bound, and
|
|
134
151
|
// state.md is the commit point written last.
|
|
135
152
|
for _, step := range plan.steps {
|
|
@@ -145,16 +162,6 @@ func Migrate(root string, args []string, stdout, stderr io.Writer) int {
|
|
|
145
162
|
}
|
|
146
163
|
applied++
|
|
147
164
|
}
|
|
148
|
-
next := lines
|
|
149
|
-
for _, step := range plan.steps {
|
|
150
|
-
if step.kind == "phase" {
|
|
151
|
-
next = state.UpsertCursorField(next, state.CursorPhase, plan.phase)
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
if converted, changed := state.ConvertCursorToTable(next); changed {
|
|
155
|
-
next = converted
|
|
156
|
-
}
|
|
157
|
-
next = state.UpsertCursorField(next, state.CursorSchema, fmt.Sprint(state.SchemaVersion))
|
|
158
165
|
if err := fsutil.WriteFileAtomic(ledger, []byte(strings.Join(next, "\n")), 0o644); err != nil {
|
|
159
166
|
return err
|
|
160
167
|
}
|
|
@@ -175,6 +182,7 @@ func buildMigratePlan(root, slug string, lines []string, answered map[string]str
|
|
|
175
182
|
phase, hasPhase := state.CursorField(lines, state.CursorPhase)
|
|
176
183
|
|
|
177
184
|
if value, ok := answered["phase"]; ok {
|
|
185
|
+
value = phaseWord(value)
|
|
178
186
|
plan.steps = append(plan.steps, migrateStep{kind: "phase", detail: "record phase " + value + " from answer"})
|
|
179
187
|
phase, hasPhase = value, true
|
|
180
188
|
}
|
|
@@ -183,11 +191,12 @@ func buildMigratePlan(root, slug string, lines []string, answered map[string]str
|
|
|
183
191
|
prompt: "state.md records no phase; re-run with --answer phase=<phase>"})
|
|
184
192
|
return plan
|
|
185
193
|
}
|
|
186
|
-
if _, ok := state.PolicyFor(state.Phase(phase)); !ok {
|
|
194
|
+
if _, ok := state.PolicyFor(state.Phase(phaseWord(phase))); !ok {
|
|
187
195
|
plan.questions = append(plan.questions, migrateQuestion{id: "phase",
|
|
188
196
|
prompt: "state.md records unknown phase " + phase + "; re-run with --answer phase=<phase>"})
|
|
189
197
|
return plan
|
|
190
198
|
}
|
|
199
|
+
phase = phaseWord(phase)
|
|
191
200
|
plan.phase = phase
|
|
192
201
|
|
|
193
202
|
if state.CursorForm(lines) == "legacy" {
|
|
@@ -209,6 +218,15 @@ func buildMigratePlan(root, slug string, lines []string, answered map[string]str
|
|
|
209
218
|
return plan
|
|
210
219
|
}
|
|
211
220
|
|
|
221
|
+
// phaseWord reads a cursor phase the way the engine does: lower-cased first
|
|
222
|
+
// word, so "Build" and "build (slice 2)" both mean build.
|
|
223
|
+
func phaseWord(value string) string {
|
|
224
|
+
if fields := strings.Fields(strings.ToLower(value)); len(fields) > 0 {
|
|
225
|
+
return fields[0]
|
|
226
|
+
}
|
|
227
|
+
return ""
|
|
228
|
+
}
|
|
229
|
+
|
|
212
230
|
// stringSlice collects repeated string flag values.
|
|
213
231
|
type stringSlice []string
|
|
214
232
|
|
|
@@ -6,9 +6,11 @@ import (
|
|
|
6
6
|
"os"
|
|
7
7
|
"path/filepath"
|
|
8
8
|
"regexp"
|
|
9
|
+
"slices"
|
|
9
10
|
"strings"
|
|
10
11
|
|
|
11
12
|
"github.com/devrites/devrites/internal/devritespaths"
|
|
13
|
+
"github.com/devrites/devrites/internal/markdowntext"
|
|
12
14
|
"github.com/devrites/devrites/internal/state"
|
|
13
15
|
"github.com/devrites/devrites/internal/workflow"
|
|
14
16
|
)
|
|
@@ -86,7 +88,11 @@ func RunNext(root string, args []string, stdout, stderr io.Writer) int {
|
|
|
86
88
|
continue
|
|
87
89
|
}
|
|
88
90
|
missing = missingArtifacts(featureDir, policy.RequiredArtifacts)
|
|
89
|
-
|
|
91
|
+
// A phase that adds no required artifact over the previous one
|
|
92
|
+
// (build after vet, polish after prove) cannot be proven done by
|
|
93
|
+
// artifact presence, so it is never skipped. Converge is the
|
|
94
|
+
// exception: a conditional recovery pass that build hands past.
|
|
95
|
+
if len(missing) == 0 && (addsArtifact(policies[i-1], policy) || policy.Target == state.PhaseConverge) {
|
|
90
96
|
skips = append(skips, fmt.Sprintf("%s (artifacts complete)", policy.Target))
|
|
91
97
|
continue
|
|
92
98
|
}
|
|
@@ -121,6 +127,15 @@ func printSkips(stdout io.Writer, skips []string) {
|
|
|
121
127
|
}
|
|
122
128
|
}
|
|
123
129
|
|
|
130
|
+
func addsArtifact(prev, policy state.PhasePolicy) bool {
|
|
131
|
+
for _, artifact := range policy.RequiredArtifacts {
|
|
132
|
+
if !slices.Contains(prev.RequiredArtifacts, artifact) {
|
|
133
|
+
return true
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
return false
|
|
137
|
+
}
|
|
138
|
+
|
|
124
139
|
func missingArtifacts(featureDir string, required []state.ArtifactPath) []string {
|
|
125
140
|
var missing []string
|
|
126
141
|
for _, artifact := range required {
|
|
@@ -139,12 +154,17 @@ var (
|
|
|
139
154
|
)
|
|
140
155
|
|
|
141
156
|
// countOpenQuestions tolerates both the block form ("status: open") and the
|
|
142
|
-
// register table form ("| Q-001 | open | ... |").
|
|
157
|
+
// register table form ("| Q-001 | open | ... |"), outside fenced blocks.
|
|
143
158
|
func countOpenQuestions(path string) int {
|
|
144
159
|
data, err := os.ReadFile(path) // #nosec G304 -- path is a validated workspace artifact
|
|
145
160
|
if err != nil {
|
|
146
161
|
return 0
|
|
147
162
|
}
|
|
163
|
+
// Fenced examples are not live questions. Text Structural rejects is
|
|
164
|
+
// counted raw, so an unreadable register over-counts rather than hides.
|
|
165
|
+
if visible, err := markdowntext.Structural(data); err == nil {
|
|
166
|
+
data = visible
|
|
167
|
+
}
|
|
148
168
|
count := 0
|
|
149
169
|
for _, line := range strings.Split(string(data), "\n") {
|
|
150
170
|
if openStatusLine.MatchString(line) || openTableCell.MatchString(line) {
|
|
@@ -63,7 +63,9 @@ func OpenVisual(root string, args []string, stdout, stderr io.Writer) int {
|
|
|
63
63
|
return 2
|
|
64
64
|
}
|
|
65
65
|
visualDir := filepath.Join(feature, "visual")
|
|
66
|
-
|
|
66
|
+
// visual/ itself may be a symlink: resolving both sides would then
|
|
67
|
+
// accept any file under its target.
|
|
68
|
+
if !safepath.WithinResolved(visualDir, feature) || !safepath.WithinResolved(htmlPath, visualDir) {
|
|
67
69
|
fmt.Fprintf(stderr, "open-visual: refused: resolved path escapes workspace visual/\n")
|
|
68
70
|
return 2
|
|
69
71
|
}
|
|
@@ -0,0 +1,355 @@
|
|
|
1
|
+
package lib
|
|
2
|
+
|
|
3
|
+
import (
|
|
4
|
+
"errors"
|
|
5
|
+
"fmt"
|
|
6
|
+
"io"
|
|
7
|
+
"io/fs"
|
|
8
|
+
"os"
|
|
9
|
+
"path/filepath"
|
|
10
|
+
"regexp"
|
|
11
|
+
"sort"
|
|
12
|
+
"strconv"
|
|
13
|
+
"strings"
|
|
14
|
+
"time"
|
|
15
|
+
"unicode"
|
|
16
|
+
|
|
17
|
+
"github.com/devrites/devrites/internal/devritespaths"
|
|
18
|
+
"github.com/devrites/devrites/internal/markdowntext"
|
|
19
|
+
"github.com/devrites/devrites/internal/parallel"
|
|
20
|
+
)
|
|
21
|
+
|
|
22
|
+
// RecallUsage is the help and usage-error text for `recall`.
|
|
23
|
+
const RecallUsage = `usage: devrites-engine recall --paths <p1,p2,...> [--paths <p>]... [--limit n]
|
|
24
|
+
|
|
25
|
+
Lists archived features (.devrites/archive/<slug>/) whose touched-files.md
|
|
26
|
+
candidate manifest covers a queried project-relative path: exact or as a
|
|
27
|
+
directory prefix, case-folded. Ranked by overlap count, then newest archive
|
|
28
|
+
directory mtime, then slug; --limit caps the features shown (default 10).
|
|
29
|
+
Each feature prints up to 8 pointers (then "+N more"): decisions.md DEC-###
|
|
30
|
+
entries and ## Carry-forward constraints bullets whose Files: overlap (or a
|
|
31
|
+
constraint naming no files), and review.md/seal.md/drift.md lines that mention
|
|
32
|
+
a queried path. Fenced examples are ignored. Pointer files are relative to
|
|
33
|
+
.devrites. Read-only: computed on every call; nothing is written, cached, or
|
|
34
|
+
indexed. An unreadable archive entry prints "unreadable:" and the scan goes on.
|
|
35
|
+
Exit 0 ok (including no archive or no match), 1 invalid archive directory, 2 usage.`
|
|
36
|
+
|
|
37
|
+
const (
|
|
38
|
+
recallDefaultLimit = 10
|
|
39
|
+
recallPointerCap = 8
|
|
40
|
+
recallClipRunes = 120
|
|
41
|
+
)
|
|
42
|
+
|
|
43
|
+
// recallPointerFiles are scanned in this order; decisions.md is structural,
|
|
44
|
+
// the rest are searched for path mentions.
|
|
45
|
+
var recallPointerFiles = []string{"decisions.md", "review.md", "seal.md", "drift.md"}
|
|
46
|
+
|
|
47
|
+
var recallDecisionHeading = regexp.MustCompile(`^#{1,6}[ \t]+DEC-[0-9]+`)
|
|
48
|
+
|
|
49
|
+
type recallFeature struct {
|
|
50
|
+
slug string
|
|
51
|
+
dir string
|
|
52
|
+
mtime time.Time
|
|
53
|
+
matched []string // queried paths the manifest covers, in query order
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
// RunRecall answers "what did earlier features decide or find about these
|
|
57
|
+
// paths" by reading the archive on every call (ADR-0014/ADR-0022 forbid an
|
|
58
|
+
// engine index or ledger). It never writes, not even a metric.
|
|
59
|
+
func RunRecall(root string, args []string, stdout, stderr io.Writer) int {
|
|
60
|
+
queries, limit, ok := parseRecallArgs(args, stderr)
|
|
61
|
+
if !ok {
|
|
62
|
+
return 2
|
|
63
|
+
}
|
|
64
|
+
archiveDir, err := devritespaths.ArchiveDirChecked(root)
|
|
65
|
+
if err != nil {
|
|
66
|
+
fmt.Fprintf(stderr, "recall: invalid archive directory: %v\n", err)
|
|
67
|
+
return 1
|
|
68
|
+
}
|
|
69
|
+
entries, err := os.ReadDir(archiveDir)
|
|
70
|
+
if errors.Is(err, fs.ErrNotExist) {
|
|
71
|
+
fmt.Fprintln(stdout, "recall: no archive")
|
|
72
|
+
return 0
|
|
73
|
+
}
|
|
74
|
+
if err != nil {
|
|
75
|
+
fmt.Fprintf(stderr, "recall: read archive: %v\n", err)
|
|
76
|
+
return 1
|
|
77
|
+
}
|
|
78
|
+
var features []recallFeature
|
|
79
|
+
var unreadable []string
|
|
80
|
+
for _, entry := range entries {
|
|
81
|
+
name := entry.Name()
|
|
82
|
+
// Hidden scratch dirs and stray files are not archived features.
|
|
83
|
+
if strings.HasPrefix(name, ".") || entry.Type().IsRegular() {
|
|
84
|
+
continue
|
|
85
|
+
}
|
|
86
|
+
label := "archive/" + name
|
|
87
|
+
dir, err := devritespaths.ExistingArchivedFeatureDirChecked(root, name)
|
|
88
|
+
if err != nil {
|
|
89
|
+
unreadable = append(unreadable, fmt.Sprintf("%s (%v)", label, err))
|
|
90
|
+
continue
|
|
91
|
+
}
|
|
92
|
+
raw, err := readBoundedRegularFile(filepath.Join(dir, "touched-files.md"), maxCandidateManifestBytes)
|
|
93
|
+
if errors.Is(err, fs.ErrNotExist) {
|
|
94
|
+
continue // never built: touched nothing
|
|
95
|
+
}
|
|
96
|
+
var rows []candidateRow
|
|
97
|
+
if err == nil {
|
|
98
|
+
rows, err = parseCandidateManifest(raw)
|
|
99
|
+
}
|
|
100
|
+
if err != nil {
|
|
101
|
+
unreadable = append(unreadable, fmt.Sprintf("%s/touched-files.md (%v)", label, err))
|
|
102
|
+
continue
|
|
103
|
+
}
|
|
104
|
+
matched := recallMatched(queries, rows)
|
|
105
|
+
if len(matched) == 0 {
|
|
106
|
+
continue
|
|
107
|
+
}
|
|
108
|
+
feature := recallFeature{slug: name, dir: dir, matched: matched}
|
|
109
|
+
if info, err := entry.Info(); err == nil {
|
|
110
|
+
feature.mtime = info.ModTime()
|
|
111
|
+
}
|
|
112
|
+
features = append(features, feature)
|
|
113
|
+
}
|
|
114
|
+
sort.SliceStable(features, func(i, j int) bool {
|
|
115
|
+
a, b := features[i], features[j]
|
|
116
|
+
if len(a.matched) != len(b.matched) {
|
|
117
|
+
return len(a.matched) > len(b.matched)
|
|
118
|
+
}
|
|
119
|
+
if !a.mtime.Equal(b.mtime) {
|
|
120
|
+
return a.mtime.After(b.mtime)
|
|
121
|
+
}
|
|
122
|
+
return a.slug < b.slug
|
|
123
|
+
})
|
|
124
|
+
if len(features) == 0 {
|
|
125
|
+
fmt.Fprintln(stdout, "recall: no archived feature touched these paths")
|
|
126
|
+
} else {
|
|
127
|
+
fmt.Fprintf(stdout, "recall: %d archived feature(s) touched these paths\n", len(features))
|
|
128
|
+
if len(features) > limit {
|
|
129
|
+
fmt.Fprintf(stdout, "recall: truncated to %d feature(s) (--limit)\n", limit)
|
|
130
|
+
features = features[:limit]
|
|
131
|
+
}
|
|
132
|
+
for _, f := range features {
|
|
133
|
+
fmt.Fprintf(stdout, "feature %s overlap=%d paths=%s\n", f.slug, len(f.matched), strings.Join(f.matched, ","))
|
|
134
|
+
writeRecallPointers(stdout, f.dir, "archive/"+f.slug, queries)
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
for _, line := range unreadable {
|
|
138
|
+
fmt.Fprintf(stdout, "unreadable: %s\n", line)
|
|
139
|
+
}
|
|
140
|
+
return 0
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
func parseRecallArgs(args []string, stderr io.Writer) ([]string, int, bool) {
|
|
144
|
+
limit := recallDefaultLimit
|
|
145
|
+
var queries []string
|
|
146
|
+
seen := map[string]bool{}
|
|
147
|
+
for i := 0; i < len(args); i++ {
|
|
148
|
+
switch args[i] {
|
|
149
|
+
case "--paths":
|
|
150
|
+
value := argAt(args, i+1)
|
|
151
|
+
i++
|
|
152
|
+
if strings.TrimSpace(value) == "" || strings.HasPrefix(value, "-") {
|
|
153
|
+
fmt.Fprintln(stderr, "recall: --paths requires a comma-separated path list (not a flag)")
|
|
154
|
+
return nil, 0, false
|
|
155
|
+
}
|
|
156
|
+
for _, raw := range strings.Split(value, ",") {
|
|
157
|
+
if strings.TrimSpace(raw) == "" {
|
|
158
|
+
continue
|
|
159
|
+
}
|
|
160
|
+
path, err := parallel.NormalizePath(raw)
|
|
161
|
+
if err == nil && strings.HasPrefix(path, "-") {
|
|
162
|
+
err = fmt.Errorf("path must not look like a flag: %q", raw)
|
|
163
|
+
}
|
|
164
|
+
if err != nil {
|
|
165
|
+
fmt.Fprintf(stderr, "recall: --paths: %v\n", err)
|
|
166
|
+
return nil, 0, false
|
|
167
|
+
}
|
|
168
|
+
if key := strings.ToLower(path); !seen[key] {
|
|
169
|
+
seen[key] = true
|
|
170
|
+
queries = append(queries, path)
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
case "--limit":
|
|
174
|
+
n, err := strconv.Atoi(argAt(args, i+1))
|
|
175
|
+
if err != nil || n < 1 {
|
|
176
|
+
fmt.Fprintf(stderr, "recall: --limit expects a positive integer, got %q\n", argAt(args, i+1))
|
|
177
|
+
return nil, 0, false
|
|
178
|
+
}
|
|
179
|
+
limit = n
|
|
180
|
+
i++
|
|
181
|
+
default:
|
|
182
|
+
fmt.Fprintf(stderr, "recall: unexpected argument %q\n%s\n", args[i], RecallUsage)
|
|
183
|
+
return nil, 0, false
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
if len(queries) == 0 {
|
|
187
|
+
fmt.Fprintln(stderr, RecallUsage)
|
|
188
|
+
return nil, 0, false
|
|
189
|
+
}
|
|
190
|
+
return queries, limit, true
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
// recallMatched returns the queries covered by a manifest row, folding case
|
|
194
|
+
// and matching directory prefixes with the claim-overlap rule.
|
|
195
|
+
func recallMatched(queries []string, rows []candidateRow) []string {
|
|
196
|
+
var matched []string
|
|
197
|
+
for _, q := range queries {
|
|
198
|
+
for _, row := range rows {
|
|
199
|
+
if claimPathsOverlap(row.path, q) {
|
|
200
|
+
matched = append(matched, q)
|
|
201
|
+
break
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
return matched
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
func writeRecallPointers(w io.Writer, dir, label string, queries []string) {
|
|
209
|
+
var pointers, unreadable []string
|
|
210
|
+
for _, name := range recallPointerFiles {
|
|
211
|
+
raw, err := readBoundedRegularFile(filepath.Join(dir, name), maxCandidateArtifactBytes)
|
|
212
|
+
if errors.Is(err, fs.ErrNotExist) {
|
|
213
|
+
continue
|
|
214
|
+
}
|
|
215
|
+
if err == nil {
|
|
216
|
+
raw, err = markdowntext.Structural(raw)
|
|
217
|
+
}
|
|
218
|
+
if err != nil {
|
|
219
|
+
unreadable = append(unreadable, fmt.Sprintf("%s/%s (%v)", label, name, err))
|
|
220
|
+
continue
|
|
221
|
+
}
|
|
222
|
+
lines := strings.Split(string(raw), "\n")
|
|
223
|
+
var hits []int
|
|
224
|
+
if name == "decisions.md" {
|
|
225
|
+
hits = recallDecisionHits(lines, queries)
|
|
226
|
+
} else {
|
|
227
|
+
for i, line := range lines {
|
|
228
|
+
if recallMentions(line, queries) {
|
|
229
|
+
hits = append(hits, i)
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
for _, i := range hits {
|
|
234
|
+
pointers = append(pointers, fmt.Sprintf("%s/%s:%d %s", label, name, i+1, clipRunes(strings.TrimSpace(lines[i]), recallClipRunes)))
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
for i, p := range pointers {
|
|
238
|
+
if i == recallPointerCap {
|
|
239
|
+
fmt.Fprintf(w, " +%d more\n", len(pointers)-recallPointerCap)
|
|
240
|
+
break
|
|
241
|
+
}
|
|
242
|
+
fmt.Fprintf(w, " %s\n", p)
|
|
243
|
+
}
|
|
244
|
+
for _, u := range unreadable {
|
|
245
|
+
fmt.Fprintf(w, " unreadable: %s\n", u)
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
// recallDecisionHits returns the line indexes of DEC-### headings whose
|
|
250
|
+
// Files: field overlaps the queries, and of carry-forward constraint bullets
|
|
251
|
+
// that overlap or name no files. Fenced lines arrive already blanked.
|
|
252
|
+
func recallDecisionHits(lines []string, queries []string) []int {
|
|
253
|
+
var hits []int
|
|
254
|
+
dec, decDone, carry := -1, false, false
|
|
255
|
+
for i, line := range lines {
|
|
256
|
+
trimmed := strings.TrimSpace(line)
|
|
257
|
+
rest := strings.TrimLeft(trimmed, "#")
|
|
258
|
+
if level := len(trimmed) - len(rest); level > 0 && (rest == "" || rest[0] == ' ' || rest[0] == '\t') {
|
|
259
|
+
dec, decDone = -1, false
|
|
260
|
+
if recallDecisionHeading.MatchString(trimmed) {
|
|
261
|
+
dec = i
|
|
262
|
+
}
|
|
263
|
+
// As in handoff's dead ends, a ### subheading stays in the section.
|
|
264
|
+
if level <= 2 {
|
|
265
|
+
carry = strings.EqualFold(trimmed, "## Carry-forward constraints")
|
|
266
|
+
}
|
|
267
|
+
continue
|
|
268
|
+
}
|
|
269
|
+
if dec >= 0 {
|
|
270
|
+
if files, ok := recallFilesField(trimmed); ok && !decDone && recallOverlaps(files, queries) {
|
|
271
|
+
hits = append(hits, dec)
|
|
272
|
+
decDone = true
|
|
273
|
+
}
|
|
274
|
+
continue
|
|
275
|
+
}
|
|
276
|
+
entry, ok := strings.CutPrefix(trimmed, "- ")
|
|
277
|
+
if !carry || !ok || strings.TrimSpace(entry) == "" {
|
|
278
|
+
continue
|
|
279
|
+
}
|
|
280
|
+
var files []string
|
|
281
|
+
if at := strings.LastIndex(entry, "Files:"); at >= 0 {
|
|
282
|
+
files = recallPathList(entry[at+len("Files:"):])
|
|
283
|
+
}
|
|
284
|
+
if len(files) == 0 || recallOverlaps(files, queries) {
|
|
285
|
+
hits = append(hits, i)
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
return hits
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
// recallFilesField parses a `Files:` field line such as "- Files: a, b" or
|
|
292
|
+
// "**Files:** `a` `b`".
|
|
293
|
+
func recallFilesField(trimmed string) ([]string, bool) {
|
|
294
|
+
s := strings.TrimLeft(trimmed, "-*+ \t")
|
|
295
|
+
if !strings.HasPrefix(strings.ToLower(s), "files:") {
|
|
296
|
+
return nil, false
|
|
297
|
+
}
|
|
298
|
+
return recallPathList(strings.TrimLeft(s[len("files:"):], "* \t")), true
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
func recallPathList(s string) []string {
|
|
302
|
+
switch strings.ToLower(strings.TrimSpace(s)) {
|
|
303
|
+
case "", "none", "n/a", "-", "—":
|
|
304
|
+
return nil
|
|
305
|
+
}
|
|
306
|
+
var out []string
|
|
307
|
+
for _, field := range strings.FieldsFunc(s, func(r rune) bool { return r == ',' || r == ';' || unicode.IsSpace(r) }) {
|
|
308
|
+
field = strings.TrimSuffix(strings.Trim(field, "`'\"()[]"), ".")
|
|
309
|
+
if path, err := parallel.NormalizePath(field); err == nil {
|
|
310
|
+
out = append(out, path)
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
return out
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
func recallOverlaps(files, queries []string) bool {
|
|
317
|
+
for _, f := range files {
|
|
318
|
+
for _, q := range queries {
|
|
319
|
+
if claimPathsOverlap(f, q) {
|
|
320
|
+
return true
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
return false
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
// recallMentions reports a case-folded occurrence of a queried path that is
|
|
328
|
+
// not part of a longer path: "src/a.go" matches "`src/a.go:12`" but not
|
|
329
|
+
// "mysrc/a.go", "lib/src/a.go", or "src/a.gox".
|
|
330
|
+
func recallMentions(line string, queries []string) bool {
|
|
331
|
+
lower := strings.ToLower(line)
|
|
332
|
+
for _, q := range queries {
|
|
333
|
+
q = strings.ToLower(q)
|
|
334
|
+
for from := 0; from < len(lower); {
|
|
335
|
+
at := strings.Index(lower[from:], q)
|
|
336
|
+
if at < 0 {
|
|
337
|
+
break
|
|
338
|
+
}
|
|
339
|
+
start, end := from+at, from+at+len(q)
|
|
340
|
+
before := start == 0 || !recallPathByte(lower[start-1])
|
|
341
|
+
after := end == len(lower) || lower[end] == '/' || !recallPathByte(lower[end]) ||
|
|
342
|
+
lower[end] == '.' && (end+1 == len(lower) || !recallPathByte(lower[end+1]))
|
|
343
|
+
if before && after {
|
|
344
|
+
return true
|
|
345
|
+
}
|
|
346
|
+
from = start + 1
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
return false
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
func recallPathByte(c byte) bool {
|
|
353
|
+
return c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z' || c >= '0' && c <= '9' ||
|
|
354
|
+
c == '_' || c == '-' || c == '.' || c == '/' || c >= 0x80
|
|
355
|
+
}
|
|
@@ -7,7 +7,9 @@ import (
|
|
|
7
7
|
"os"
|
|
8
8
|
"path/filepath"
|
|
9
9
|
"regexp"
|
|
10
|
+
"slices"
|
|
10
11
|
"sort"
|
|
12
|
+
"strconv"
|
|
11
13
|
"strings"
|
|
12
14
|
"time"
|
|
13
15
|
|
|
@@ -49,6 +51,8 @@ var doneSliceStates = map[string]bool{
|
|
|
49
51
|
var (
|
|
50
52
|
regressACRe = regexp.MustCompile(`(?im)^[ \t]*- \[([xX ])\] (AC-\d+)`)
|
|
51
53
|
regressSliceRe = regexp.MustCompile(`(?m)^## (SLICE-\d+)\b[^\n]*`)
|
|
54
|
+
regressBuiltRe = regexp.MustCompile(`(?m)^[ \t]*[-*] \[[xX]\][^\n]*`)
|
|
55
|
+
regressSliceIDRe = regexp.MustCompile(`(?i)\b(?:SLICE-|Slice )(\d+)\b`)
|
|
52
56
|
regressStatusRe = regexp.MustCompile(`(?im)^Status:[ \t]*([^\s]+)`)
|
|
53
57
|
regressQHeaderRe = regexp.MustCompile(`(?im)^## (q-\d{4}-\d{2}-\d{2}-\d+)\b`)
|
|
54
58
|
regressQStatusRe = regexp.MustCompile(`(?im)^status:[ \t]*([^\s]+)`)
|
|
@@ -170,6 +174,22 @@ func fingerprintWorkspace(root, slug, workspace string) (progressFingerprint, er
|
|
|
170
174
|
if err == nil {
|
|
171
175
|
fp.DoneSlices = doneSlices(masked)
|
|
172
176
|
}
|
|
177
|
+
// The canonical slice grammar has no Status field: Build records the
|
|
178
|
+
// built list in state.md as checked items naming the slice.
|
|
179
|
+
masked, err = maskedArtifact(workspace, "state.md")
|
|
180
|
+
note("state.md", err)
|
|
181
|
+
if err == nil {
|
|
182
|
+
for _, item := range regressBuiltRe.FindAllString(masked, -1) {
|
|
183
|
+
for _, m := range regressSliceIDRe.FindAllStringSubmatch(item, -1) {
|
|
184
|
+
// `SLICE-001` and `Slice 1` name the same slice.
|
|
185
|
+
n, _ := strconv.Atoi(m[1])
|
|
186
|
+
id := fmt.Sprintf("SLICE-%03d", n)
|
|
187
|
+
if !slices.Contains(fp.DoneSlices, id) {
|
|
188
|
+
fp.DoneSlices = append(fp.DoneSlices, id)
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
}
|
|
173
193
|
|
|
174
194
|
raw, err := os.ReadFile(filepath.Join(workspace, acceptance.GatesFile)) // #nosec G304 -- workspace artifact
|
|
175
195
|
note(acceptance.GatesFile, err)
|