devrites 5.5.0 → 5.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +12 -0
- package/README.md +8 -6
- package/engine/internal/devritespaths/paths.go +3 -0
- package/engine/internal/hostpack/hostpack.go +45 -6
- package/engine/internal/hostpack/hostpack_test.go +29 -13
- package/engine/internal/install/apply.go +14 -5
- package/engine/internal/install/install.go +8 -2
- package/engine/internal/install/install_test.go +12 -5
- package/engine/internal/install/merge.go +5 -0
- package/engine/internal/install/preflight.go +20 -2
- package/engine/internal/install/uninstall.go +5 -0
- package/engine/internal/install/update.go +1 -1
- package/install.sh +107 -38
- package/pack/.claude/skills/rite-define/SKILL.md +1 -1
- package/pack/.claude/skills/rite-handoff/SKILL.md +1 -1
- package/pack/.claude/skills/rite-plan/SKILL.md +1 -1
- package/pack/.claude/skills/rite-pressure-test/SKILL.md +1 -1
- package/pack/.claude/skills/rite-quick/SKILL.md +1 -1
- package/pack/.claude/skills/rite-status/SKILL.md +1 -1
- package/pack/.claude/skills/rite-zoom-out/SKILL.md +1 -1
- package/pack/generated/README.md +5 -1
- package/pack/generated/claude/skills/rite-define/SKILL.md +1 -1
- package/pack/generated/claude/skills/rite-handoff/SKILL.md +1 -1
- package/pack/generated/claude/skills/rite-plan/SKILL.md +1 -1
- package/pack/generated/claude/skills/rite-pressure-test/SKILL.md +1 -1
- package/pack/generated/claude/skills/rite-quick/SKILL.md +1 -1
- package/pack/generated/claude/skills/rite-status/SKILL.md +1 -1
- package/pack/generated/claude/skills/rite-zoom-out/SKILL.md +1 -1
- package/pack/generated/codex/skills/rite-define/SKILL.md +1 -1
- package/pack/generated/codex/skills/rite-handoff/SKILL.md +1 -1
- package/pack/generated/codex/skills/rite-plan/SKILL.md +1 -1
- package/pack/generated/codex/skills/rite-pressure-test/SKILL.md +1 -1
- package/pack/generated/codex/skills/rite-quick/SKILL.md +1 -1
- package/pack/generated/codex/skills/rite-status/SKILL.md +1 -1
- package/pack/generated/codex/skills/rite-zoom-out/SKILL.md +1 -1
- package/pack/generated/omp/skills/rite-define/SKILL.md +1 -1
- package/pack/generated/omp/skills/rite-handoff/SKILL.md +1 -1
- package/pack/generated/omp/skills/rite-plan/SKILL.md +1 -1
- package/pack/generated/omp/skills/rite-pressure-test/SKILL.md +1 -1
- package/pack/generated/omp/skills/rite-quick/SKILL.md +1 -1
- package/pack/generated/omp/skills/rite-status/SKILL.md +1 -1
- package/pack/generated/omp/skills/rite-zoom-out/SKILL.md +1 -1
- package/pack/generated/pi/AGENTS.md +22 -0
- package/pack/generated/pi/agents/devrites-code-reviewer.md +142 -0
- package/pack/generated/pi/agents/devrites-devex-reviewer.md +124 -0
- package/pack/generated/pi/agents/devrites-doubt-reviewer.md +88 -0
- package/pack/generated/pi/agents/devrites-evidence-scout.md +72 -0
- package/pack/generated/pi/agents/devrites-frontend-reviewer.md +116 -0
- package/pack/generated/pi/agents/devrites-performance-reviewer.md +115 -0
- package/pack/generated/pi/agents/devrites-plan-drafter.md +99 -0
- package/pack/generated/pi/agents/devrites-plan-reviewer.md +142 -0
- package/pack/generated/pi/agents/devrites-proof-runner.md +74 -0
- package/pack/generated/pi/agents/devrites-retrospector.md +61 -0
- package/pack/generated/pi/agents/devrites-security-auditor.md +109 -0
- package/pack/generated/pi/agents/devrites-simplifier-reviewer.md +94 -0
- package/pack/generated/pi/agents/devrites-slice-wright.md +204 -0
- package/pack/generated/pi/agents/devrites-spec-reviewer.md +96 -0
- package/pack/generated/pi/agents/devrites-strategy-reviewer.md +100 -0
- package/pack/generated/pi/agents/devrites-test-analyst.md +94 -0
- package/pack/generated/pi/agents/devrites-upgrade-planner.md +89 -0
- package/pack/generated/pi/prompts/rite-adopt.md +5 -0
- package/pack/generated/pi/prompts/rite-autocomplete.md +5 -0
- package/pack/generated/pi/prompts/rite-build.md +5 -0
- package/pack/generated/pi/prompts/rite-clarify.md +5 -0
- package/pack/generated/pi/prompts/rite-converge.md +5 -0
- package/pack/generated/pi/prompts/rite-customize.md +5 -0
- package/pack/generated/pi/prompts/rite-define.md +5 -0
- package/pack/generated/pi/prompts/rite-doctor.md +5 -0
- package/pack/generated/pi/prompts/rite-dogfood.md +5 -0
- package/pack/generated/pi/prompts/rite-explain.md +5 -0
- package/pack/generated/pi/prompts/rite-frame.md +5 -0
- package/pack/generated/pi/prompts/rite-handoff.md +5 -0
- package/pack/generated/pi/prompts/rite-learn.md +5 -0
- package/pack/generated/pi/prompts/rite-plan.md +5 -0
- package/pack/generated/pi/prompts/rite-polish.md +5 -0
- package/pack/generated/pi/prompts/rite-pov.md +5 -0
- package/pack/generated/pi/prompts/rite-pr-feedback.md +5 -0
- package/pack/generated/pi/prompts/rite-pressure-test.md +5 -0
- package/pack/generated/pi/prompts/rite-prototype.md +5 -0
- package/pack/generated/pi/prompts/rite-prove.md +5 -0
- package/pack/generated/pi/prompts/rite-quick.md +5 -0
- package/pack/generated/pi/prompts/rite-resolve.md +5 -0
- package/pack/generated/pi/prompts/rite-review.md +5 -0
- package/pack/generated/pi/prompts/rite-seal.md +5 -0
- package/pack/generated/pi/prompts/rite-ship.md +5 -0
- package/pack/generated/pi/prompts/rite-spec.md +5 -0
- package/pack/generated/pi/prompts/rite-status.md +5 -0
- package/pack/generated/pi/prompts/rite-temper.md +5 -0
- package/pack/generated/pi/prompts/rite-upgrade.md +5 -0
- package/pack/generated/pi/prompts/rite-vet.md +5 -0
- package/pack/generated/pi/prompts/rite-watch-pr.md +5 -0
- package/pack/generated/pi/prompts/rite-zoom-out.md +5 -0
- package/pack/generated/pi/prompts/rite.md +5 -0
- package/pack/generated/pi/skills/devrites-api-interface/SKILL.md +63 -0
- package/pack/generated/pi/skills/devrites-audit/SKILL.md +50 -0
- package/pack/generated/pi/skills/devrites-browser-proof/SKILL.md +76 -0
- package/pack/generated/pi/skills/devrites-browser-proof/reference/browser-performance.md +15 -0
- package/pack/generated/pi/skills/devrites-browser-proof/reference/visual-verdict.md +34 -0
- package/pack/generated/pi/skills/devrites-debug-recovery/SKILL.md +96 -0
- package/pack/generated/pi/skills/devrites-debug-recovery/reference/build-the-loop.md +58 -0
- package/pack/generated/pi/skills/devrites-debug-recovery/reference/cleanup-and-classify.md +34 -0
- package/pack/generated/pi/skills/devrites-debug-recovery/reference/hypotheses.md +17 -0
- package/pack/generated/pi/skills/devrites-debug-recovery/reference/instrumentation.md +21 -0
- package/pack/generated/pi/skills/devrites-debug-recovery/reference/regression-test.md +30 -0
- package/pack/generated/pi/skills/devrites-debug-recovery/reference/trace.md +25 -0
- package/pack/generated/pi/skills/devrites-doubt/SKILL.md +79 -0
- package/pack/generated/pi/skills/devrites-frontend-craft/SKILL.md +86 -0
- package/pack/generated/pi/skills/devrites-frontend-craft/reference/craft.md +63 -0
- package/pack/generated/pi/skills/devrites-frontend-craft/reference/design-references.md +116 -0
- package/pack/generated/pi/skills/devrites-frontend-craft/reference/fullstack.md +46 -0
- package/pack/generated/pi/skills/devrites-frontend-craft/reference/quality-standards.md +294 -0
- package/pack/generated/pi/skills/devrites-frontend-craft/reference/reuse-first.md +53 -0
- package/pack/generated/pi/skills/devrites-frontend-craft/reference/shape.md +56 -0
- package/pack/generated/pi/skills/devrites-interview/SKILL.md +102 -0
- package/pack/generated/pi/skills/devrites-lib/SKILL.md +58 -0
- package/pack/generated/pi/skills/devrites-lib/reference/candidate-integrity.md +42 -0
- package/pack/generated/pi/skills/devrites-lib/reference/intent-map.md +64 -0
- package/pack/generated/pi/skills/devrites-lib/reference/orchestration-profiles.md +27 -0
- package/pack/generated/pi/skills/devrites-lib/reference/parallel-dispatch.md +73 -0
- package/pack/generated/pi/skills/devrites-lib/reference/reply-contract.md +88 -0
- package/pack/generated/pi/skills/devrites-lib/reference/standards/README.md +60 -0
- package/pack/generated/pi/skills/devrites-lib/reference/standards/acceptance-preserving-reslice.md +30 -0
- package/pack/generated/pi/skills/devrites-lib/reference/standards/afk-hitl.md +398 -0
- package/pack/generated/pi/skills/devrites-lib/reference/standards/agents.md +99 -0
- package/pack/generated/pi/skills/devrites-lib/reference/standards/anti-patterns.md +48 -0
- package/pack/generated/pi/skills/devrites-lib/reference/standards/browser-proof-checklist.md +24 -0
- package/pack/generated/pi/skills/devrites-lib/reference/standards/ci-cd.md +50 -0
- package/pack/generated/pi/skills/devrites-lib/reference/standards/code-navigation.md +43 -0
- package/pack/generated/pi/skills/devrites-lib/reference/standards/code-review.md +108 -0
- package/pack/generated/pi/skills/devrites-lib/reference/standards/coding-style.md +48 -0
- package/pack/generated/pi/skills/devrites-lib/reference/standards/context-hygiene.md +109 -0
- package/pack/generated/pi/skills/devrites-lib/reference/standards/core.md +167 -0
- package/pack/generated/pi/skills/devrites-lib/reference/standards/data-integrity.md +118 -0
- package/pack/generated/pi/skills/devrites-lib/reference/standards/debug-recovery.md +28 -0
- package/pack/generated/pi/skills/devrites-lib/reference/standards/definition-of-done.md +19 -0
- package/pack/generated/pi/skills/devrites-lib/reference/standards/deprecation.md +31 -0
- package/pack/generated/pi/skills/devrites-lib/reference/standards/developer-experience.md +119 -0
- package/pack/generated/pi/skills/devrites-lib/reference/standards/development-workflow.md +29 -0
- package/pack/generated/pi/skills/devrites-lib/reference/standards/documentation.md +43 -0
- package/pack/generated/pi/skills/devrites-lib/reference/standards/edge-case-trace.md +92 -0
- package/pack/generated/pi/skills/devrites-lib/reference/standards/elicitation.md +85 -0
- package/pack/generated/pi/skills/devrites-lib/reference/standards/error-handling.md +47 -0
- package/pack/generated/pi/skills/devrites-lib/reference/standards/git-workflow.md +49 -0
- package/pack/generated/pi/skills/devrites-lib/reference/standards/hooks.md +25 -0
- package/pack/generated/pi/skills/devrites-lib/reference/standards/integration-reliability.md +102 -0
- package/pack/generated/pi/skills/devrites-lib/reference/standards/loop-operations.md +85 -0
- package/pack/generated/pi/skills/devrites-lib/reference/standards/observability.md +88 -0
- package/pack/generated/pi/skills/devrites-lib/reference/standards/one-shot-actions.md +97 -0
- package/pack/generated/pi/skills/devrites-lib/reference/standards/patterns.md +68 -0
- package/pack/generated/pi/skills/devrites-lib/reference/standards/performance.md +51 -0
- package/pack/generated/pi/skills/devrites-lib/reference/standards/principles.md +42 -0
- package/pack/generated/pi/skills/devrites-lib/reference/standards/prose-style.md +123 -0
- package/pack/generated/pi/skills/devrites-lib/reference/standards/release/ship-checklist.md +8 -0
- package/pack/generated/pi/skills/devrites-lib/reference/standards/repository-topology.md +80 -0
- package/pack/generated/pi/skills/devrites-lib/reference/standards/review-checklist.md +12 -0
- package/pack/generated/pi/skills/devrites-lib/reference/standards/security-checklist.md +25 -0
- package/pack/generated/pi/skills/devrites-lib/reference/standards/security.md +202 -0
- package/pack/generated/pi/skills/devrites-lib/reference/standards/skill-authoring.md +209 -0
- package/pack/generated/pi/skills/devrites-lib/reference/standards/spec-grammar.md +197 -0
- package/pack/generated/pi/skills/devrites-lib/reference/standards/test-proof-checklist.md +13 -0
- package/pack/generated/pi/skills/devrites-lib/reference/standards/testing.md +212 -0
- package/pack/generated/pi/skills/devrites-lib/reference/standards/tooling.md +92 -0
- package/pack/generated/pi/skills/devrites-lib/reference/standards/workflow-artifacts.md +427 -0
- package/pack/generated/pi/skills/devrites-lib/reference/visual-playbooks/code.md +44 -0
- package/pack/generated/pi/skills/devrites-lib/reference/visual-playbooks/comparison.md +42 -0
- package/pack/generated/pi/skills/devrites-lib/reference/visual-playbooks/diagram.md +51 -0
- package/pack/generated/pi/skills/devrites-lib/reference/visual-playbooks/index.md +66 -0
- package/pack/generated/pi/skills/devrites-lib/reference/visual-playbooks/input.md +46 -0
- package/pack/generated/pi/skills/devrites-lib/reference/visual-playbooks/outline-template.md +106 -0
- package/pack/generated/pi/skills/devrites-lib/reference/visual-playbooks/plan.md +48 -0
- package/pack/generated/pi/skills/devrites-lib/reference/visual-playbooks/slides.md +40 -0
- package/pack/generated/pi/skills/devrites-lib/reference/visual-playbooks/table.md +42 -0
- package/pack/generated/pi/skills/devrites-lib/reference/workspace-artifact-schema.md +267 -0
- package/pack/generated/pi/skills/devrites-prose-craft/SKILL.md +73 -0
- package/pack/generated/pi/skills/devrites-prose-craft/reference/banned-phrases.md +132 -0
- package/pack/generated/pi/skills/devrites-prose-craft/reference/examples.md +131 -0
- package/pack/generated/pi/skills/devrites-prose-craft/reference/structures.md +196 -0
- package/pack/generated/pi/skills/devrites-source-driven/SKILL.md +52 -0
- package/pack/generated/pi/skills/devrites-ux-shape/SKILL.md +134 -0
- package/pack/generated/pi/skills/devrites-ux-shape/reference/brief-template.md +108 -0
- package/pack/generated/pi/skills/devrites-ux-shape/reference/visual-direction-probe.md +48 -0
- package/pack/generated/pi/skills/rite/SKILL.md +148 -0
- package/pack/generated/pi/skills/rite/reference/menu.md +48 -0
- package/pack/generated/pi/skills/rite-adopt/SKILL.md +52 -0
- package/pack/generated/pi/skills/rite-adopt/reference/adoption.md +19 -0
- package/pack/generated/pi/skills/rite-adopt/reference/anti-patterns.md +19 -0
- package/pack/generated/pi/skills/rite-autocomplete/SKILL.md +132 -0
- package/pack/generated/pi/skills/rite-autocomplete/reference/decision-policy.md +41 -0
- package/pack/generated/pi/skills/rite-autocomplete/reference/loop.md +148 -0
- package/pack/generated/pi/skills/rite-autocomplete/reference/stop-conditions.md +92 -0
- package/pack/generated/pi/skills/rite-build/SKILL.md +96 -0
- package/pack/generated/pi/skills/rite-build/reference/afk-discipline.md +145 -0
- package/pack/generated/pi/skills/rite-build/reference/anti-patterns.md +23 -0
- package/pack/generated/pi/skills/rite-build/reference/checkpoint-protocol.md +120 -0
- package/pack/generated/pi/skills/rite-build/reference/checkpoint.md +44 -0
- package/pack/generated/pi/skills/rite-build/reference/frontend-trigger.md +39 -0
- package/pack/generated/pi/skills/rite-build/reference/one-slice-cycle.md +50 -0
- package/pack/generated/pi/skills/rite-build/reference/output.md +33 -0
- package/pack/generated/pi/skills/rite-build/reference/parallel-batch.md +205 -0
- package/pack/generated/pi/skills/rite-build/reference/phase-contract.md +87 -0
- package/pack/generated/pi/skills/rite-build/reference/spec-drift-guard.md +84 -0
- package/pack/generated/pi/skills/rite-build/reference/tdd.md +27 -0
- package/pack/generated/pi/skills/rite-build/reference/wright-dispatch.md +89 -0
- package/pack/generated/pi/skills/rite-clarify/SKILL.md +99 -0
- package/pack/generated/pi/skills/rite-clarify/reference/anti-patterns.md +24 -0
- package/pack/generated/pi/skills/rite-clarify/reference/decision-coverage.md +55 -0
- package/pack/generated/pi/skills/rite-converge/SKILL.md +145 -0
- package/pack/generated/pi/skills/rite-converge/reference/anti-patterns.md +35 -0
- package/pack/generated/pi/skills/rite-converge/reference/convergence-assessment.md +65 -0
- package/pack/generated/pi/skills/rite-customize/SKILL.md +60 -0
- package/pack/generated/pi/skills/rite-define/SKILL.md +169 -0
- package/pack/generated/pi/skills/rite-define/reference/anti-patterns.md +26 -0
- package/pack/generated/pi/skills/rite-define/reference/gates.md +154 -0
- package/pack/generated/pi/skills/rite-define/reference/plan-template.md +149 -0
- package/pack/generated/pi/skills/rite-doctor/SKILL.md +69 -0
- package/pack/generated/pi/skills/rite-dogfood/SKILL.md +55 -0
- package/pack/generated/pi/skills/rite-explain/SKILL.md +152 -0
- package/pack/generated/pi/skills/rite-explain/reference/intake.md +89 -0
- package/pack/generated/pi/skills/rite-frame/SKILL.md +115 -0
- package/pack/generated/pi/skills/rite-frame/reference/failure-modes.md +66 -0
- package/pack/generated/pi/skills/rite-handoff/SKILL.md +97 -0
- package/pack/generated/pi/skills/rite-handoff/reference/handoff-template.md +44 -0
- package/pack/generated/pi/skills/rite-learn/SKILL.md +72 -0
- package/pack/generated/pi/skills/rite-plan/SKILL.md +186 -0
- package/pack/generated/pi/skills/rite-plan/reference/anti-patterns.md +34 -0
- package/pack/generated/pi/skills/rite-plan/reference/dependency-graph.md +48 -0
- package/pack/generated/pi/skills/rite-plan/reference/replan-and-repair.md +105 -0
- package/pack/generated/pi/skills/rite-plan/reference/slicing.md +167 -0
- package/pack/generated/pi/skills/rite-plan/reference/task-breakdown.md +42 -0
- package/pack/generated/pi/skills/rite-polish/SKILL.md +104 -0
- package/pack/generated/pi/skills/rite-polish/reference/adr-promotion.md +11 -0
- package/pack/generated/pi/skills/rite-polish/reference/anti-ai-slop.md +187 -0
- package/pack/generated/pi/skills/rite-polish/reference/anti-patterns.md +30 -0
- package/pack/generated/pi/skills/rite-polish/reference/backend-polish.md +80 -0
- package/pack/generated/pi/skills/rite-polish/reference/browser-polish-evidence.md +33 -0
- package/pack/generated/pi/skills/rite-polish/reference/code.md +82 -0
- package/pack/generated/pi/skills/rite-polish/reference/design-memory.md +117 -0
- package/pack/generated/pi/skills/rite-polish/reference/design-system-discovery.md +8 -0
- package/pack/generated/pi/skills/rite-polish/reference/harden-checklist.md +109 -0
- package/pack/generated/pi/skills/rite-polish/reference/ledger.md +65 -0
- package/pack/generated/pi/skills/rite-polish/reference/ui.md +137 -0
- package/pack/generated/pi/skills/rite-pov/SKILL.md +58 -0
- package/pack/generated/pi/skills/rite-pr-feedback/SKILL.md +54 -0
- package/pack/generated/pi/skills/rite-pressure-test/SKILL.md +67 -0
- package/pack/generated/pi/skills/rite-prototype/SKILL.md +104 -0
- package/pack/generated/pi/skills/rite-prove/SKILL.md +120 -0
- package/pack/generated/pi/skills/rite-prove/reference/acceptance-proof.md +88 -0
- package/pack/generated/pi/skills/rite-prove/reference/anti-patterns.md +25 -0
- package/pack/generated/pi/skills/rite-prove/reference/browser-proof.md +51 -0
- package/pack/generated/pi/skills/rite-prove/reference/failure-triage.md +43 -0
- package/pack/generated/pi/skills/rite-prove/reference/proof-ladder.md +28 -0
- package/pack/generated/pi/skills/rite-prove/reference/test-command-discovery.md +30 -0
- package/pack/generated/pi/skills/rite-quick/SKILL.md +82 -0
- package/pack/generated/pi/skills/rite-resolve/SKILL.md +95 -0
- package/pack/generated/pi/skills/rite-resolve/reference/answer-protocol.md +118 -0
- package/pack/generated/pi/skills/rite-review/SKILL.md +170 -0
- package/pack/generated/pi/skills/rite-review/reference/anti-patterns.md +32 -0
- package/pack/generated/pi/skills/rite-review/reference/cognitive-load.md +90 -0
- package/pack/generated/pi/skills/rite-review/reference/feature-scoped-review.md +26 -0
- package/pack/generated/pi/skills/rite-review/reference/five-axis-review.md +66 -0
- package/pack/generated/pi/skills/rite-review/reference/nielsen-heuristics.md +126 -0
- package/pack/generated/pi/skills/rite-review/reference/performance-checklist.md +80 -0
- package/pack/generated/pi/skills/rite-review/reference/performance-review.md +14 -0
- package/pack/generated/pi/skills/rite-review/reference/security-review.md +42 -0
- package/pack/generated/pi/skills/rite-seal/SKILL.md +75 -0
- package/pack/generated/pi/skills/rite-seal/reference/anti-patterns.md +29 -0
- package/pack/generated/pi/skills/rite-seal/reference/final-evidence.md +41 -0
- package/pack/generated/pi/skills/rite-seal/reference/go-no-go.md +29 -0
- package/pack/generated/pi/skills/rite-seal/reference/output.md +5 -0
- package/pack/generated/pi/skills/rite-seal/reference/phase-contract.md +47 -0
- package/pack/generated/pi/skills/rite-seal/reference/risk-and-rollback.md +56 -0
- package/pack/generated/pi/skills/rite-seal/reference/seal-template.md +27 -0
- package/pack/generated/pi/skills/rite-ship/SKILL.md +88 -0
- package/pack/generated/pi/skills/rite-ship/reference/anti-patterns.md +28 -0
- package/pack/generated/pi/skills/rite-ship/reference/close-out.md +68 -0
- package/pack/generated/pi/skills/rite-ship/reference/git-ship.md +120 -0
- package/pack/generated/pi/skills/rite-ship/reference/rollout.md +62 -0
- package/pack/generated/pi/skills/rite-ship/reference/ship-template.md +39 -0
- package/pack/generated/pi/skills/rite-spec/SKILL.md +150 -0
- package/pack/generated/pi/skills/rite-spec/reference/acceptance-criteria.md +31 -0
- package/pack/generated/pi/skills/rite-spec/reference/ai-spec-template.md +40 -0
- package/pack/generated/pi/skills/rite-spec/reference/anti-patterns.md +27 -0
- package/pack/generated/pi/skills/rite-spec/reference/interview-patterns.md +56 -0
- package/pack/generated/pi/skills/rite-spec/reference/investigation.md +83 -0
- package/pack/generated/pi/skills/rite-spec/reference/question-protocol.md +36 -0
- package/pack/generated/pi/skills/rite-spec/reference/references-intake.md +62 -0
- package/pack/generated/pi/skills/rite-spec/reference/spec-checklists.md +89 -0
- package/pack/generated/pi/skills/rite-spec/reference/spec-template.md +154 -0
- package/pack/generated/pi/skills/rite-spec/reference/state-workspace.md +227 -0
- package/pack/generated/pi/skills/rite-status/SKILL.md +57 -0
- package/pack/generated/pi/skills/rite-temper/SKILL.md +130 -0
- package/pack/generated/pi/skills/rite-temper/reference/anti-patterns.md +30 -0
- package/pack/generated/pi/skills/rite-temper/reference/review-dimensions.md +66 -0
- package/pack/generated/pi/skills/rite-temper/reference/scope-modes.md +53 -0
- package/pack/generated/pi/skills/rite-temper/reference/significance.md +46 -0
- package/pack/generated/pi/skills/rite-temper/reference/strategy-template.md +90 -0
- package/pack/generated/pi/skills/rite-upgrade/SKILL.md +121 -0
- package/pack/generated/pi/skills/rite-vet/SKILL.md +193 -0
- package/pack/generated/pi/skills/rite-vet/reference/anti-patterns.md +43 -0
- package/pack/generated/pi/skills/rite-vet/reference/artifacts.md +202 -0
- package/pack/generated/pi/skills/rite-vet/reference/cross-model.md +19 -0
- package/pack/generated/pi/skills/rite-vet/reference/depth.md +59 -0
- package/pack/generated/pi/skills/rite-vet/reference/eng-lenses.md +48 -0
- package/pack/generated/pi/skills/rite-vet/reference/review-axes.md +201 -0
- package/pack/generated/pi/skills/rite-watch-pr/SKILL.md +85 -0
- package/pack/generated/pi/skills/rite-zoom-out/SKILL.md +69 -0
- package/package.json +3 -2
- package/scripts/build-host-artifacts.sh +100 -37
- package/scripts/pi-generate.sh +198 -0
|
@@ -0,0 +1,294 @@
|
|
|
1
|
+
# Frontend quality standards (2026)
|
|
2
|
+
|
|
3
|
+
The measurable bar UI work is held to. Project conventions win where they're stricter;
|
|
4
|
+
these are the floor, not the ceiling.
|
|
5
|
+
|
|
6
|
+
## Performance: Core Web Vitals (field/p75 targets)
|
|
7
|
+
- **LCP** (Largest Contentful Paint) ≤ **2.5 s**
|
|
8
|
+
- **INP** (Interaction to Next Paint: the current responsiveness metric, replaced FID)
|
|
9
|
+
≤ **200 ms**
|
|
10
|
+
- **CLS** (Cumulative Layout Shift) ≤ **0.1**
|
|
11
|
+
- Keep an interactive page's shipped JS lean (a budget around **≤400 KB gzipped** is a
|
|
12
|
+
good default); lazy-load below-the-fold and heavy/optional code; minimize hydration;
|
|
13
|
+
size and reserve space for images/media to avoid layout shift.
|
|
14
|
+
|
|
15
|
+
## Accessibility: WCAG 2.2 AA
|
|
16
|
+
- **Semantic HTML first:** real `<button>`/`<nav>`/`<label>`/headings; ARIA only to fill
|
|
17
|
+
gaps semantics can't.
|
|
18
|
+
- **Keyboard**: every interactive element operable by keyboard; logical tab order; **focus
|
|
19
|
+
visible** with ≥ **3:1** contrast against its background (never remove the outline
|
|
20
|
+
without an equal replacement).
|
|
21
|
+
- **Contrast**: text ≥ **4.5:1** (≥ 3:1 for large text and UI/graphics).
|
|
22
|
+
- **Target size**: ≥ **24×24** CSS px (WCAG 2.2 AA, SC 2.5.8); prefer **44×44** for primary
|
|
23
|
+
touch targets.
|
|
24
|
+
- **No drag-only** interactions: provide a single-pointer alternative (SC 2.5.7).
|
|
25
|
+
- Labels/names on all controls; errors announced; respects `prefers-reduced-motion`.
|
|
26
|
+
- **Test** with keyboard, a screen reader, and an automated checker (e.g. axe): early.
|
|
27
|
+
|
|
28
|
+
## Motion
|
|
29
|
+
- Purposeful only (class table below). Never animate to mask slow loading; honor
|
|
30
|
+
`prefers-reduced-motion`.
|
|
31
|
+
|
|
32
|
+
## Responsive
|
|
33
|
+
- Fluid layouts; no fixed widths that break. Verify at **320 / 768 / 1024 / 1440** px;
|
|
34
|
+
preserve content and controls at **200% text zoom** and **400% browser zoom from
|
|
35
|
+
1280 px** (320 CSS px). This is the canonical viewport set for UI evidence: `rite-polish/reference/ui.md`, `browser-proof-checklist.md`, and
|
|
36
|
+
`browser-polish-evidence.md` cite it rather than restating it.
|
|
37
|
+
- **No page-level horizontal scroll anywhere in 320–1920.** Sweep between checkpoints:
|
|
38
|
+
a `1fr` track given a 1024 px image can overflow at 900 px. Fix intrinsic sizing
|
|
39
|
+
(for example `minmax(0, 1fr)`), wrapping and media constraints; root clipping is
|
|
40
|
+
not a reflow fix. Clip decoration only, never text, controls or focus indicators.
|
|
41
|
+
A necessary two-dimensional table/map may scroll inside a named, bounded,
|
|
42
|
+
keyboard-accessible region; surrounding headings, text and pagination must reflow.
|
|
43
|
+
Record and test that exception. **Failing case:** a localized CTA disappears behind
|
|
44
|
+
`overflow-x: clip`; the missing scrollbar does not prove accessible reflow.
|
|
45
|
+
- **`dvh`, not `vh`**, for full-height surfaces (`min-height: 100dvh`, never `h-screen` /
|
|
46
|
+
`100vh`: mobile address bars break them). A hero fits the *initial* viewport: headline
|
|
47
|
+
≤2 lines, primary CTA above the fold.
|
|
48
|
+
|
|
49
|
+
## Design system
|
|
50
|
+
- Use the project's **tokens** (spacing/type/color roles): never hard-code a value a
|
|
51
|
+
token covers. Compose from existing components; one icon set.
|
|
52
|
+
|
|
53
|
+
### Consistency locks (one per surface)
|
|
54
|
+
Lock these in `design-brief.md` and hold them page-wide: mid-scroll drift ("a different
|
|
55
|
+
website by section 7") is a tell: **one declared color strategy and role budget**
|
|
56
|
+
(§ Color commitment; no unbriefed accent appearing later), **one radius scale**, **one theme** (light or dark, not both).
|
|
57
|
+
|
|
58
|
+
## Numerical bar (enforceable specifics)
|
|
59
|
+
|
|
60
|
+
These are the hard numbers that move "good UI" from opinion to checkable.
|
|
61
|
+
Project tokens win when stricter; these are the floor.
|
|
62
|
+
|
|
63
|
+
### Color
|
|
64
|
+
- **OKLCH-only** for new tokens: perceptually uniform, predictable lightness
|
|
65
|
+
steps across hues. Stop reaching for HSL; the lightness lies.
|
|
66
|
+
- Example: `oklch(0.62 0.18 264)` for a saturated primary.
|
|
67
|
+
- **Never `#000` / `#fff`** as raw values. Pure black/white are too harsh and
|
|
68
|
+
too clinical; use a near-black (`oklch(0.18 0 0)`) and near-white
|
|
69
|
+
(`oklch(0.98 0 0)`) or the project's surface tokens.
|
|
70
|
+
- Contrast follows WCAG 2.2: text ≥ 4.5:1, UI/graphics ≥ 3:1. Verify
|
|
71
|
+
against the *rendered* background, not the theoretical one. Procedure: pair every
|
|
72
|
+
`color` declaration with its computed background; a button whose text and fill sit
|
|
73
|
+
within 5% lightness and 0.05 chroma of each other fails regardless of the palette.
|
|
74
|
+
- **Restrained accent, capped:** one accent covers **≤5% of the viewport** at rest
|
|
75
|
+
(3–5 placements above the fold). Accent-filled panels fail this strategy; another strategy requires the explicit brief and role budgets below.
|
|
76
|
+
- **Tint neutrals toward the brand hue:** pure-grey neutrals look sterile.
|
|
77
|
+
Nudge every grey 0.005-0.01 chroma toward the brand colour: invisible at
|
|
78
|
+
a glance, but the surface stops feeling generic.
|
|
79
|
+
- **Alpha is a smell:** heavy translucency usually means an incomplete palette.
|
|
80
|
+
Define explicit overlay/hover tokens; transparency is for focus rings and scrims.
|
|
81
|
+
- **Every colored surface token ships its `on-` pair** (`primary`/`on-primary`,
|
|
82
|
+
`destructive`/`on-destructive`, …) so contrast is designed in, not patched after.
|
|
83
|
+
|
|
84
|
+
#### Color commitment: pick the strategy before the palette
|
|
85
|
+
Decide *how committed* the surface is to colour before opening the picker. Four positions on a single axis; pick one, then design within it:
|
|
86
|
+
|
|
87
|
+
| Strategy | Rough coverage | Use for |
|
|
88
|
+
|---|---|---|
|
|
89
|
+
| **Restrained** | tinted neutrals + 1 accent ≤5% of the viewport at rest | Most product UI; brand surfaces that want to look quiet. |
|
|
90
|
+
| **Committed** | one saturated colour carries 30-60% of the surface | Brand pages with a strong identity; product feature surfaces that need a hero colour. |
|
|
91
|
+
| **Multi-role** | 3-4 named colour roles, each used deliberately | Brand campaigns; product data-viz with distinct meanings. |
|
|
92
|
+
| **Saturated** | the surface *is* the colour: full-bleed colour ground | Brand heroes, campaign pages, splash moments. |
|
|
93
|
+
|
|
94
|
+
Two corollaries:
|
|
95
|
+
- The ≤5% accent cap belongs to **Restrained only**. For Committed / Multi-role /
|
|
96
|
+
Saturated, the brief must name the strategy, purpose, tokens and measured coverage
|
|
97
|
+
budget per role and viewport. No blanket waiver: an unbudgeted colored panel fails.
|
|
98
|
+
Preserve distinct success/warning/error meanings; semantic states do not authorize decorative accents. Check rendered captures against the declared budgets.
|
|
99
|
+
- *Register* (brand vs product) doesn't pick the strategy by itself: brand
|
|
100
|
+
surfaces aren't always Saturated, product surfaces aren't always Restrained. Pick from the scene, not the category.
|
|
101
|
+
|
|
102
|
+
### Calibration: density & motion
|
|
103
|
+
Colour commitment fixes *how much colour*; two more axes fix *how much space* and
|
|
104
|
+
*how much movement*. Set one position on each (from the **scene sentence**, the same
|
|
105
|
+
way colour is picked) and carry both in `design-brief.md` so the build targets a
|
|
106
|
+
calibration instead of re-deciding it per slice.
|
|
107
|
+
|
|
108
|
+
**Density**: information per viewport; drives which spacing steps dominate:
|
|
109
|
+
|
|
110
|
+
| Position | Feels like | Spacing steps that dominate | Use for |
|
|
111
|
+
|---|---|---|---|
|
|
112
|
+
| **Airy** | gallery / calm / room to breathe | `32 / 48 / 64 / 80 / 96` | brand pages, onboarding, focus moments, low-data surfaces |
|
|
113
|
+
| **Balanced** | most product UI | `16 / 20 / 24 / 32` | dashboards, forms, settings: the default |
|
|
114
|
+
| **Dense** | cockpit / data-rich / power tool | `4 / 8 / 12 / 16` | tables, monitors, terminals, pro tools lived in all day |
|
|
115
|
+
|
|
116
|
+
**Motion**: how much the surface moves; drives which motion classes (table below) are in play:
|
|
117
|
+
|
|
118
|
+
| Position | Feels like | Motion classes in play | Use for |
|
|
119
|
+
|---|---|---|---|
|
|
120
|
+
| **Minimal** | crisp, almost still | Instant + State | dense tools, regulated/trust surfaces, reduced-motion-leaning |
|
|
121
|
+
| **Standard** | responsive, purposeful | Instant + State + Layout | most product + brand UI: the default |
|
|
122
|
+
| **Expressive** | choreographed, scroll-aware | + Entrance, deliberate sequencing | brand heroes, launch/campaign moments, story scroll |
|
|
123
|
+
|
|
124
|
+
Corollaries (same shape as colour commitment):
|
|
125
|
+
- Pick from the **scene sentence**, not the category: "an on-call SRE at 2am" → Dense +
|
|
126
|
+
Minimal; "a launch hero in afternoon light" → Airy + Expressive. Register doesn't decide
|
|
127
|
+
it by itself.
|
|
128
|
+
- `prefers-reduced-motion` overrides Motion **downward at runtime** regardless of position:
|
|
129
|
+
an Expressive surface still ships a Minimal path.
|
|
130
|
+
- The position is a target, not a straitjacket: a surface may break density locally for
|
|
131
|
+
emphasis: name the exception in the brief, don't let the whole page drift off it.
|
|
132
|
+
|
|
133
|
+
### Spacing
|
|
134
|
+
- **4pt base scale** (`4 / 8 / 12 / 16 / 20 / 24 / 32 / 40 / 48 / 64 / 80 /
|
|
135
|
+
96`). Project tokens may use a multiplier; never hardcode in-between
|
|
136
|
+
values.
|
|
137
|
+
- Inline spacing rhythms in multiples of 4 px. Optical alignments may need a
|
|
138
|
+
1 - 2 px nudge: record the *why* in a comment.
|
|
139
|
+
|
|
140
|
+
### Typography scale
|
|
141
|
+
- **Brand surfaces**: fluid `clamp()` headings (e.g.,
|
|
142
|
+
`clamp(2rem, 1rem + 3vw, 3.5rem)`). Display/body pairing OK.
|
|
143
|
+
- **Product surfaces**: **fixed rem scale** (1.125 - 1.2 ratio). One family
|
|
144
|
+
usually carries headings, body, labels, data.
|
|
145
|
+
- Body line-height ~1.5; headings ~1.1 - 1.25. Prose width ~ 65-75 ch.
|
|
146
|
+
- Adjacent hierarchy levels differ by **≥1.5× in at least one signal** (size, weight,
|
|
147
|
+
or color); verified under a blur(8px) squint — a flat field means the hierarchy is
|
|
148
|
+
decorative. **Failing case:** label and helper text differ only by 0.05rem.
|
|
149
|
+
- All-caps display text sets **line-height ≥1.0**; tighter collides cap heights.
|
|
150
|
+
- **Hero font-scale attribution:** a hero headline that wraps past its planned lines at
|
|
151
|
+
the target viewport is a font-size error first — fix the scale, don't shorten the
|
|
152
|
+
copy. **Failing case:** a four-line hero headline "fixed" by cutting the sentence.
|
|
153
|
+
- Display ceiling: `clamp()` max ≤ ~6rem: larger is shouting. Display
|
|
154
|
+
letter-spacing floor **≥ −0.04em**; tighter and the letters touch.
|
|
155
|
+
- `text-wrap: balance` on h1-h3; `text-wrap: pretty` on long prose.
|
|
156
|
+
|
|
157
|
+
### Motion
|
|
158
|
+
| Class | Duration | Use |
|
|
159
|
+
|---|---|---|
|
|
160
|
+
| Instant | 100 - 150 ms | Hover/press, tooltip enter, color shifts |
|
|
161
|
+
| State | 200 - 300 ms | Toggle, focus ring, dropdown |
|
|
162
|
+
| Layout | 300 - 500 ms | Modal/drawer enter, route transitions |
|
|
163
|
+
| Entrance | 500 - 800 ms | Page entrance, hero animation |
|
|
164
|
+
|
|
165
|
+
- **Exit at ~75 % of enter.** A 300 ms enter pairs with a 225 ms exit.
|
|
166
|
+
- **Bounce / elastic easing banned** unless the project's design system
|
|
167
|
+
explicitly uses it.
|
|
168
|
+
- Honor `prefers-reduced-motion`: reduce or remove non-essential motion
|
|
169
|
+
entirely. Reduced means fewer and gentler, never zero feedback.
|
|
170
|
+
- **Loading feedback appears by ~200 ms**: skeletons/spinners replace stillness
|
|
171
|
+
after that threshold; below it, feedback flicker reads as jank. Hover intents
|
|
172
|
+
may delay 150–300 ms; focus indication never fades in — the ring is instant.
|
|
173
|
+
|
|
174
|
+
### Forms
|
|
175
|
+
- Inputs match button height (44 px floor); visual targets under 24 px expand
|
|
176
|
+
their hit area with a pseudo-element to the 44 px minimum.
|
|
177
|
+
- Helper/error text reserves **`min-height: 1lh`** so messages never shift layout.
|
|
178
|
+
- Border width is pinned across states (state changes recolor, never resize).
|
|
179
|
+
- Disabled is visible through **three channels**: muted color, `not-allowed`
|
|
180
|
+
cursor, and blocked interaction — color alone fails.
|
|
181
|
+
- Mobile inputs set **≥16 px** font (smaller triggers iOS zoom-on-focus).
|
|
182
|
+
- Numeric/data columns set **`font-variant-numeric: tabular-nums`**; columns of
|
|
183
|
+
figures align or the surface reads broken.
|
|
184
|
+
|
|
185
|
+
### Dark mode (three-axis compensation)
|
|
186
|
+
A token-flip dark mode is sterile. When the project ships dark, compensate
|
|
187
|
+
three axes from light:
|
|
188
|
+
- **Line-height** `+0.05 – 0.10` (text breathes more on dark surfaces).
|
|
189
|
+
- **Letter-spacing** `+0.01 – 0.02 em` (perceived spacing tightens on dark).
|
|
190
|
+
- **Weight** `+1 step` for very small or low-contrast text.
|
|
191
|
+
|
|
192
|
+
If the project has dark tokens already, follow them. If not and dark is in
|
|
193
|
+
scope, propose the compensation rather than ship a flat invert.
|
|
194
|
+
|
|
195
|
+
### Focus & states (8 required, 3 conditional)
|
|
196
|
+
Every interactive element ships **8 visual/interaction states**:
|
|
197
|
+
`default`, `hover`, `active`, `focus-visible`, `disabled`, `loading`,
|
|
198
|
+
`selected`, and an error/invalid surface (required wherever the element can be invalid). Data surfaces add the
|
|
199
|
+
conditional three whenever the data can produce them: **partial** (a missing field
|
|
200
|
+
renders an explicit em-dash/placeholder — never `null` or `0`), **conflict** (a
|
|
201
|
+
concurrent-edit/version-mismatch surface), and **offline/unreachable** (stale-data
|
|
202
|
+
banner with retry, not a silently cached render). **Failing case:** a row with a
|
|
203
|
+
missing value renders `0` or blank and the review reads it as real data.
|
|
204
|
+
- `:focus-visible` ring: **2 - 3 px**, **≥ 3:1** contrast against the
|
|
205
|
+
background, **offset 2 px** so the focus is unambiguous on dense layouts.
|
|
206
|
+
|
|
207
|
+
### Browser chrome
|
|
208
|
+
User-agent defaults are unfinished craft. Per UI slice, theme or explicitly
|
|
209
|
+
decline (briefed) each of: `::selection` (token colors, not UA blue),
|
|
210
|
+
`caret-color` on editable fields, scrollbar styling or a recorded
|
|
211
|
+
`scrollbar-width` decision, and the project focus-ring token in place of the
|
|
212
|
+
unstyled UA outline. **Failing case:** layout, type, and the 8+3 states pass
|
|
213
|
+
while the UA blue focus ring and default selection remain.
|
|
214
|
+
|
|
215
|
+
### Container queries vs viewport queries
|
|
216
|
+
- **Component breakpoints:** use **container queries** (`@container`). The
|
|
217
|
+
same card adapts to its column whether the viewport is 320 or 1920.
|
|
218
|
+
- **Page-level layout:** use viewport queries
|
|
219
|
+
(`@media (min-width: ...)`) for sidebar collapses, header reflows.
|
|
220
|
+
- Mixing the two is normal; using only one is usually a code smell.
|
|
221
|
+
|
|
222
|
+
### Semantic z-index scale
|
|
223
|
+
Pick a scale per surface role; never use raw `z-index: 9999`. Suggested
|
|
224
|
+
floor:
|
|
225
|
+
|
|
226
|
+
| Role | z |
|
|
227
|
+
|---|---|
|
|
228
|
+
| Base content | `auto` / `0` |
|
|
229
|
+
| Sticky header | `50` |
|
|
230
|
+
| Dropdown / popover | `100` |
|
|
231
|
+
| Drawer / sheet | `200` |
|
|
232
|
+
| Modal | `300` |
|
|
233
|
+
| Toast | `400` |
|
|
234
|
+
| System dialog / debug overlay | `500` |
|
|
235
|
+
|
|
236
|
+
### Materiality (elevation & surface)
|
|
237
|
+
Depth is earned, not defaulted. Reach **down** this ladder in order; stop at the first
|
|
238
|
+
rung that carries the structure.
|
|
239
|
+
- **Hairline first.** A **1 px border / divider** (a hairline in a near-neutral token)
|
|
240
|
+
defines structure before any shadow does. Borders separate; shadows lift. Most "cards"
|
|
241
|
+
want a hairline, not elevation.
|
|
242
|
+
- **Elevation is a token scale, not an ad-hoc value.** When a surface genuinely lifts
|
|
243
|
+
(menu, popover, dragged item), use a **small shadow set from the design system** with one
|
|
244
|
+
consistent light source: never a one-off `box-shadow`. The elevation step and the
|
|
245
|
+
semantic z-index role move together.
|
|
246
|
+
- **Texture needs contrast.** Grain / noise / pattern earns its place only when it reads
|
|
247
|
+
against the surface. Invisible texture is bytes with no signal: drop it.
|
|
248
|
+
- **Asset-led material.** Rich material (photographic grain, real product imagery,
|
|
249
|
+
generated art) comes from a **real raster / generated asset**, not an SVG/CSS
|
|
250
|
+
approximation of one. Don't fake a photo with gradients; ship the asset or use a flat
|
|
251
|
+
token.
|
|
252
|
+
- **No decorative glass.** `backdrop-filter: blur(...)` is for a fixed/sticky surface over
|
|
253
|
+
moving content (a sticky header, a sheet over scroll), never a default panel look
|
|
254
|
+
(`rite-polish/reference/anti-ai-slop.md`).
|
|
255
|
+
|
|
256
|
+
### NEVER (UI numerical bar)
|
|
257
|
+
- Never reintroduce anything [`rite-polish` anti-ai-slop](../../rite-polish/reference/anti-ai-slop.md) bans.
|
|
258
|
+
- Never hard-code a spacing value the 4 pt scale or project tokens cover.
|
|
259
|
+
- Never animate an exit at 100 % of enter duration (feels uncontrolled).
|
|
260
|
+
- Never use raw `z-index` numbers outside the semantic scale.
|
|
261
|
+
- Never use viewport queries for component-internal reflows when the
|
|
262
|
+
component is reused at different widths.
|
|
263
|
+
- Never ship dark mode as a flat token invert (compensate three axes).
|
|
264
|
+
- Never reach for a shadow where a 1 px hairline carries the structure.
|
|
265
|
+
- Never invent a one-off `box-shadow` outside the elevation token set.
|
|
266
|
+
- Never ship texture / grain that doesn't read against its surface.
|
|
267
|
+
|
|
268
|
+
## Verification gate (a UI slice isn't done until all pass)
|
|
269
|
+
- [ ] Renders with **no console errors/warnings**
|
|
270
|
+
- [ ] **Keyboard**: tab through reaches everything; focus visible; Esc/Enter behave
|
|
271
|
+
- [ ] **Screen reader** conveys content + structure
|
|
272
|
+
- [ ] **All states**: the canonical 8 + 3 lattice above (§ Focus & states), not a
|
|
273
|
+
shorter local list
|
|
274
|
+
- [ ] **Responsive** at the canonical viewport set (§ Responsive); no lost content or
|
|
275
|
+
controls, no page overflow; bounded exceptions tested; zoom-safe
|
|
276
|
+
- [ ] **No accessibility violations** (axe or equivalent)
|
|
277
|
+
- [ ] Meets the **CWV budget** above (measure, don't assume)
|
|
278
|
+
- [ ] Aligned to the **design system** (tokens, components, type, spacing)
|
|
279
|
+
- [ ] **Browser chrome** themed or declined in the brief (§ Browser chrome)
|
|
280
|
+
- [ ] Clickables show `cursor: pointer` + a hover state; icons are SVG from the one set
|
|
281
|
+
(no emoji); nothing trapped under fixed/sticky bars
|
|
282
|
+
- [ ] **Consistency locks hold** (declared color strategy/roles / one radius scale / one theme) and the
|
|
283
|
+
mechanical pre-flight passes (`rite-polish/reference/anti-ai-slop.md`)
|
|
284
|
+
|
|
285
|
+
## Craft convergence bar
|
|
286
|
+
|
|
287
|
+
Craft work terminates; it does not loop. Findings classify as **Critical /
|
|
288
|
+
Major / Minor**: done means zero Critical, zero Major, and every remaining Minor
|
|
289
|
+
accepted **in writing** (owner + reason) in `polish-report.md` — an unwritten
|
|
290
|
+
minor is an ignored finding, not an accepted one. Re-running the full bar after a
|
|
291
|
+
fix pass happens only on an explicit opt-in ("re-run the full bar"); "keep going"
|
|
292
|
+
is not opt-in. Each pass captures every supported viewport, not only the one that
|
|
293
|
+
failed. **Failing case:** the 375 px overflow is fixed, 320 px still overflows,
|
|
294
|
+
and the report reads clean.
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# Reuse first: frontend application
|
|
2
|
+
|
|
3
|
+
Frontend application of the canonical rule in
|
|
4
|
+
[`coding-style.md`](../../devrites-lib/reference/standards/coding-style.md#reuse-before-you-write):
|
|
5
|
+
reuse → extend → build new, AHA caveat below. Before creating any new component, style,
|
|
6
|
+
token, icon, hook, util, or helper, search the project first.
|
|
7
|
+
|
|
8
|
+
This applies to UI **and** non-UI code: utilities, helpers, types, validators, schemas,
|
|
9
|
+
formatters, hooks, query helpers: anything that might already exist.
|
|
10
|
+
|
|
11
|
+
## The decision (in order)
|
|
12
|
+
1. **Search first.** Apply `../../devrites-lib/reference/standards/tooling.md`: use the
|
|
13
|
+
primary available code index to find similar definitions, cross-check only a named
|
|
14
|
+
unresolved predicate, then fall back to grep/glob over `components/`, design tokens, hooks/,
|
|
15
|
+
utils/, lib/. Look for things doing the *same job*, not just the same name.
|
|
16
|
+
2. **Exact fit → REUSE.** Compose / import the existing thing. No copy, no fork.
|
|
17
|
+
3. **Close fit → EXTEND.** Add a variant/prop/option that the existing component or util
|
|
18
|
+
can carry without distortion. Adding a prop to a button is fine; adding ten props that
|
|
19
|
+
each branch the internals is not.
|
|
20
|
+
4. **No fit → BUILD NEW**, in the project's idiom. If a similar need is likely to recur,
|
|
21
|
+
propose adding it to the shared system (component library / utils module). If it's
|
|
22
|
+
truly one-off, build it locally: don't pre-abstract.
|
|
23
|
+
|
|
24
|
+
## When to *avoid* reuse (the AHA caveat)
|
|
25
|
+
Reuse is good; **forcing** it isn't. **Avoid Hasty Abstractions**: if making the existing
|
|
26
|
+
thing fit means warping its API or breaking its contract for one caller, **don't**.
|
|
27
|
+
Duplication is cheaper than the wrong abstraction. Build a sibling component/util and let
|
|
28
|
+
a real pattern emerge from two or three callers before consolidating.
|
|
29
|
+
|
|
30
|
+
## Record the decision (per slice)
|
|
31
|
+
On each slice, note what was reused / extended / created new, so the seal can see the
|
|
32
|
+
consistency story and reviewers can spot silent duplication.
|
|
33
|
+
|
|
34
|
+
```
|
|
35
|
+
Existing reused: <Button, useToast, formatCents>
|
|
36
|
+
Extended: <Card — added variant="elevated">
|
|
37
|
+
Created new: <ExportProgress (no prior equivalent; propose for shared lib)>
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## Anti-patterns to name
|
|
41
|
+
- Silently re-implementing an existing component / hook / util because it was easier than
|
|
42
|
+
finding it. Search first.
|
|
43
|
+
- Copy-pasting a component from `components/` into the feature folder. That's a fork.
|
|
44
|
+
- Adding a second icon set / second toast library / second date util because the existing
|
|
45
|
+
one didn't quite fit: almost always extend the existing or ask first.
|
|
46
|
+
- Forcing reuse via 8 boolean props that branch the internals. That's an abstraction
|
|
47
|
+
collapsing under its own weight. Split it.
|
|
48
|
+
|
|
49
|
+
## Search hints
|
|
50
|
+
- **UI**: `components/ui/`, design-system package imports neighboring features use,
|
|
51
|
+
`tokens.*` / Tailwind config / theme files, icon barrel files, layout primitives.
|
|
52
|
+
- **Non-UI**: `lib/`, `utils/`, `helpers/`, `services/`, `validators/`, `schemas/`,
|
|
53
|
+
`hooks/`, language stdlib equivalents.
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# Shape before code
|
|
2
|
+
|
|
3
|
+
Decide what the UI *is* before how it looks. Aesthetics follow structure; structure
|
|
4
|
+
follows the user's goal. Skipping this is how you get pretty UI that doesn't work.
|
|
5
|
+
|
|
6
|
+
**The feature-level shape already exists.** `/rite-spec` ran `devrites-ux-shape` and wrote
|
|
7
|
+
`design-brief.md` (design direction, key states, interaction model). In `/rite-build` this
|
|
8
|
+
is a **per-slice refinement of that brief for the surface you're about to code**: confirm
|
|
9
|
+
the answers below against the brief and fill any slice-specific gaps; don't re-derive the
|
|
10
|
+
design. **Only shape from scratch here** when a UI slice has no `design-brief.md` (a spec
|
|
11
|
+
written before shaping), then run `devrites-ux-shape` first; only if it cannot run, answer
|
|
12
|
+
these and write the brief per `../../devrites-ux-shape/reference/brief-template.md`, and
|
|
13
|
+
return through `/rite-vet` before code.
|
|
14
|
+
|
|
15
|
+
## Answer these before writing markup
|
|
16
|
+
1. **User goal:** what is the user here to accomplish? One sentence.
|
|
17
|
+
2. **Primary action:** the single most important thing on this surface. It must be
|
|
18
|
+
visually obvious. Everything else is secondary.
|
|
19
|
+
3. **Information hierarchy:** what must be seen first, second, third. Rank content;
|
|
20
|
+
the layout expresses the ranking.
|
|
21
|
+
4. **States:** design all of them, not just the happy path:
|
|
22
|
+
- default / populated
|
|
23
|
+
- loading (initial + subsequent)
|
|
24
|
+
- empty (with a clear next action: welcoming, not a dead end)
|
|
25
|
+
- error (what happened + how to recover)
|
|
26
|
+
- success
|
|
27
|
+
- disabled / read-only / no-permission
|
|
28
|
+
- long content / overflow / many items
|
|
29
|
+
5. **Responsive:** how it reflows from small (320) to large (1440). What collapses,
|
|
30
|
+
stacks, hides, or scrolls.
|
|
31
|
+
6. **Accessibility:** focus order, labels, contrast, keyboard operability, semantics.
|
|
32
|
+
7. **Interaction model:** what's inline vs. navigated vs. (rarely) a modal; optimistic
|
|
33
|
+
vs. pending; how feedback is given.
|
|
34
|
+
|
|
35
|
+
## Output
|
|
36
|
+
The answers live in the feature's `design-brief.md` (shaped at spec by `devrites-ux-shape`).
|
|
37
|
+
In build, append any slice-specific refinement to its **Build-time refinements** section;
|
|
38
|
+
if you shaped from scratch (no brief existed), write the brief now per
|
|
39
|
+
`../../devrites-ux-shape/reference/brief-template.md`. This drives the build and the polish
|
|
40
|
+
checklist.
|
|
41
|
+
|
|
42
|
+
## NEVER (shape)
|
|
43
|
+
|
|
44
|
+
- Never start coding markup without naming the **primary action** for the
|
|
45
|
+
surface.
|
|
46
|
+
- Never design only the populated/happy state. Empty / loading / error /
|
|
47
|
+
disabled / long-content are not optional.
|
|
48
|
+
- Never decide the visual direction by personal taste when the project has
|
|
49
|
+
an existing system. Discover first (`design-references.md`).
|
|
50
|
+
- Never invent a new flow when a neighboring feature already has one: match
|
|
51
|
+
the neighbor, then deviate only with a recorded reason.
|
|
52
|
+
- Never paper over an ambiguous spec with a "reasonable guess". Ask the user
|
|
53
|
+
with 2 - 3 concrete options.
|
|
54
|
+
- Never name a state for the *technical* condition (`isLoadingTrue`) when
|
|
55
|
+
the *user-facing* name (`Loading your invoices…`) tells the user what's
|
|
56
|
+
happening.
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: devrites-interview
|
|
3
|
+
description: Interview the user one question at a time to extract intent. Use when the user says "interview me", "I am not sure what I want", or the ask is underspecified. Not for casual clarification.
|
|
4
|
+
user-invocable: false
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# devrites-interview: extract intent
|
|
8
|
+
|
|
9
|
+
Resolve the difference between the request and the user's intent before writing a
|
|
10
|
+
spec, plan, or code.
|
|
11
|
+
|
|
12
|
+
## Protocol
|
|
13
|
+
- **Open with a working hypothesis.** State in one line what the user wants, then ask about the
|
|
14
|
+
highest-value unresolved human-owned material decision.
|
|
15
|
+
- **One question per turn.** Multiple questions get one answered and the rest ignored.
|
|
16
|
+
- **Attach an explicit recommendation** and its reason to every question:
|
|
17
|
+
> "I recommend CSV only because it covers the use case. Choose CSV, CSV + XLSX,
|
|
18
|
+
> or something else?"
|
|
19
|
+
This is a concrete candidate for the user's decision, not an assumption or confirmation.
|
|
20
|
+
- **Highest-value question first:** order by how much the answer changes the build. A
|
|
21
|
+
question that moves the data model or acceptance criteria beats a cosmetic one.
|
|
22
|
+
- **Prioritize impact and bound each pass.** Order unknowns **scope > security/privacy > UX >
|
|
23
|
+
technical**. A pass MAY contain at most **3 questions** for cognitive load. After each pass,
|
|
24
|
+
rescan the decision tree and continue in later turns until every human-owned material decision
|
|
25
|
+
is explicitly selected or explicitly deferred by the user. A cap MUST NOT move a blocker to
|
|
26
|
+
`assumptions.md`. Own and log reversible, low-impact technical details instead of asking.
|
|
27
|
+
- **Structured options** when the space is enumerable: present them as the standard ranked
|
|
28
|
+
**option set** ([`afk-hitl.md` → "Option set"](../devrites-lib/reference/standards/afk-hitl.md#option-set-how-every-gap-is-presented)): recommended **first**, labelled
|
|
29
|
+
`(Recommended)`, each with a dimension-tagged rationale (`logic · infra · business ·
|
|
30
|
+
architecture`, + `security`/`UX`/`risk` when in scope), plus the escape hatch. Render via
|
|
31
|
+
`AskUserQuestion` when the harness has it:
|
|
32
|
+
```
|
|
33
|
+
1. <recommended> (Recommended) — logic: … · infra: … · business: … · architecture: …
|
|
34
|
+
2. <alternative> — <rationale + the trade-off it accepts>
|
|
35
|
+
3. Something else — I'll describe it
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## Completion condition
|
|
39
|
+
Complete only when a topology and decision-tree rescan finds no unresolved human-owned
|
|
40
|
+
material decision. Such a decision closes only through the user's option selection,
|
|
41
|
+
free-form answer, or explicit deferral. A recommendation is not confirmation. If the user
|
|
42
|
+
stops early, persist every visible blocker and MUST NOT claim readiness or advance.
|
|
43
|
+
|
|
44
|
+
Ask fewer, deeper questions. If answers stop converging around one area, **reframe once**
|
|
45
|
+
instead of asking another version of the same question.
|
|
46
|
+
|
|
47
|
+
## Want vs. should-want
|
|
48
|
+
Users sometimes name the convention or best practice they think they should want instead
|
|
49
|
+
of their actual preference. Signals include abstract virtues ("scalable", "clean",
|
|
50
|
+
"modern"), deference to convention, or an answer that fits any project. Ask: *"if you
|
|
51
|
+
didn't have to justify this to anyone, what would you want?"* Record that answer rather
|
|
52
|
+
than designing to the generic one.
|
|
53
|
+
|
|
54
|
+
## What counts as a yes
|
|
55
|
+
Approval requires an **explicit** yes. Treat these replies differently:
|
|
56
|
+
- *"Whatever you think is best"* / *"you decide"*: **delegation, not approval.** Offer two
|
|
57
|
+
concrete options so the user chooses the substance or explicitly defers it.
|
|
58
|
+
- *"Sounds good"* / *"sure, let's go"*: confirm once for a material decision rather than
|
|
59
|
+
treating a polite exit as approval.
|
|
60
|
+
- **Silence:** not consent. State what is out of scope and get explicit approval for it.
|
|
61
|
+
|
|
62
|
+
## Don't ask
|
|
63
|
+
- Things the codebase answers (read it first).
|
|
64
|
+
- Reversible, low-impact technical details (decide and log as agent-owned assumptions).
|
|
65
|
+
- Everything at once "to be thorough."
|
|
66
|
+
|
|
67
|
+
## When the ask is vague: map the decision tree first
|
|
68
|
+
For a short or vague request (`"design a contact page"`), do not ask isolated questions.
|
|
69
|
+
Sketch the **decision tree** first, then resolve each branch **depth-first** with the
|
|
70
|
+
protocol above. Domain branches per area:
|
|
71
|
+
[`../rite-spec/reference/interview-patterns.md`](../rite-spec/reference/interview-patterns.md).
|
|
72
|
+
|
|
73
|
+
## Reframe (once, when stuck)
|
|
74
|
+
If the interview is not converging, use **one** turn to challenge the premise:
|
|
75
|
+
*"is a form even the right answer here, or a mailto / booking link?"* Then resume the
|
|
76
|
+
protocol with the revised premise.
|
|
77
|
+
|
|
78
|
+
## /clarify mode: coverage scan of an existing spec
|
|
79
|
+
When clarifying a written spec rather than extracting intent from scratch, first enumerate
|
|
80
|
+
its actors, journeys/components, states, data boundaries, interfaces/integrations, and
|
|
81
|
+
operational/proof surfaces. Scan every material surface against that taxonomy and mark
|
|
82
|
+
**Clear / Partial / Missing** with evidence. Ask at most **3 prioritized decision packets per
|
|
83
|
+
pass**, targeting Missing before Partial, one per turn with an explicit recommendation and reason.
|
|
84
|
+
A packet may close
|
|
85
|
+
several cells only when they share one owner and trade-off.
|
|
86
|
+
|
|
87
|
+
**Integrate each answer into the relevant spec section** immediately. A Q&A log alone is
|
|
88
|
+
insufficient.
|
|
89
|
+
Record each question and resolution in `decision-coverage.md` as scan evidence, not a
|
|
90
|
+
transcript block in `spec.md`.
|
|
91
|
+
Re-run the scan after each pass. Packet limits control cognitive load, never readiness. Continue
|
|
92
|
+
later passes while human-owned blockers remain, and stop only when every row is clear, agent-owned,
|
|
93
|
+
not applicable, or explicitly deferred by the user with a nonblocking reason, owner, and validation
|
|
94
|
+
gate. Then re-score the affected
|
|
95
|
+
`checklists/<domain>.md`.
|
|
96
|
+
|
|
97
|
+
## Output
|
|
98
|
+
A short summary for the caller: objective in one sentence, confirmed decisions,
|
|
99
|
+
open non-blocking items, and the recommended next step. If a workspace is active, write
|
|
100
|
+
Q&A to `questions.md`, confirmed calls to `decisions.md`, and only agent-owned reversible,
|
|
101
|
+
low-impact technical details to `assumptions.md`. If not, return the summary without creating
|
|
102
|
+
a workspace.
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: devrites-lib
|
|
3
|
+
description: Internal shared DevRites helper library. Documents cross-cutting engine commands and references; not a user workflow. Do not invoke directly.
|
|
4
|
+
user-invocable: false
|
|
5
|
+
disable-model-invocation: true
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# devrites-lib: shared workflow contracts
|
|
9
|
+
|
|
10
|
+
Do **not** invoke this skill directly.
|
|
11
|
+
|
|
12
|
+
## Ownership boundary
|
|
13
|
+
|
|
14
|
+
- The host owns instruction loading, exact-agent dispatch, scheduling, waiting,
|
|
15
|
+
follow-up, results, and history. Skills state the role/result, never native
|
|
16
|
+
fields or dispatch receipts.
|
|
17
|
+
- Dispatch every workflow-required role fresh. A missing role stops for HITL;
|
|
18
|
+
never skip, substitute, or perform its work in the root.
|
|
19
|
+
- The root owns DevRites state/artifacts but never source/tests. Codex grants it
|
|
20
|
+
workspace permission only because children cannot elevate; writing follows
|
|
21
|
+
[`reference/standards/agents.md`](reference/standards/agents.md).
|
|
22
|
+
- The engine owns the retained deterministic structure, atomic-write, install,
|
|
23
|
+
evidence-freshness, and safety primitives only.
|
|
24
|
+
|
|
25
|
+
## Workspace orientation
|
|
26
|
+
|
|
27
|
+
Use the supplied slug or read `.devrites/ACTIVE`. Require its authoritative
|
|
28
|
+
`state.md`; read it directly, then only needed phase artifacts. Never infer
|
|
29
|
+
lifecycle state from chat or optional `README.md`.
|
|
30
|
+
|
|
31
|
+
## Shared references
|
|
32
|
+
|
|
33
|
+
- [`reference/standards/agents.md`](reference/standards/agents.md): native custom-agent roles,
|
|
34
|
+
immutable inputs, result contracts, and source-boundary review.
|
|
35
|
+
- [`reference/candidate-integrity.md`](reference/candidate-integrity.md): the
|
|
36
|
+
content-bound candidate lifecycle from Build through Ship
|
|
37
|
+
([`workspace-artifact-schema.md`](reference/workspace-artifact-schema.md)).
|
|
38
|
+
- [`reference/reply-contract.md`](reference/reply-contract.md): compact user-facing
|
|
39
|
+
completion states. The host renders the response normally.
|
|
40
|
+
- [`reference/visual-playbooks/index.md`](reference/visual-playbooks/index.md): progressive
|
|
41
|
+
visual HTML playbook router (load matching ids only; dual-read outline).
|
|
42
|
+
|
|
43
|
+
## Deterministic engine surface
|
|
44
|
+
|
|
45
|
+
The engine is limited to:
|
|
46
|
+
|
|
47
|
+
- `check readiness` for structure, `check candidate` for content-bound identity,
|
|
48
|
+
and `check seal` for structure plus exact artifact bindings; `secret-scan` and
|
|
49
|
+
`version` remain read-only helpers.
|
|
50
|
+
- Atomic state: `state resolve` for answer/drop/batch and transactional
|
|
51
|
+
`state close`.
|
|
52
|
+
- Offline, local `install`, `update`, and `uninstall`; their shell/npm callers
|
|
53
|
+
acquire the candidate bundle, source, and binary before invoking the engine.
|
|
54
|
+
|
|
55
|
+
Exact native agents/checklists own semantics; the host filesystem owns ledger
|
|
56
|
+
reads/preview/confirmed no-clobber writes, spec grammar re-reading, question-id
|
|
57
|
+
allocation, clarify cursor edits, AFK accounting, recovery accounting, and
|
|
58
|
+
read-only diagnostics. Repository scripts and CI own gates.
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# Candidate integrity
|
|
2
|
+
|
|
3
|
+
Manifest and binding grammar remain in
|
|
4
|
+
[`workspace-artifact-schema.md`](workspace-artifact-schema.md).
|
|
5
|
+
`devrites-engine check candidate <slug>` alone hashes candidates.
|
|
6
|
+
Missing/duplicate/malformed/mismatched bindings block.
|
|
7
|
+
|
|
8
|
+
## Lifecycle
|
|
9
|
+
|
|
10
|
+
- Build maintains actual scoped `present`/`deleted` manifest rows.
|
|
11
|
+
- Prove binds approved real proof in evidence/browser artifacts; candidate checks
|
|
12
|
+
before/after commands match; no source mutation.
|
|
13
|
+
- Polish closes only after code/UI corrections, capability folds, design-memory
|
|
14
|
+
updates and ADR promotion; update manifest/affected proof for every path.
|
|
15
|
+
- Review binds reconciled coverage to that closed digest; corrections return
|
|
16
|
+
through affected Prove and fresh affected reviewers.
|
|
17
|
+
- Seal binds the reviewed digest, rechecks bindings, runs `devrites-engine check seal <slug>`.
|
|
18
|
+
- Ship is candidate-read-only; bookkeeping only; source/manifest changes return through Prove,
|
|
19
|
+
Review, Seal. No alternate hash implementation.
|
|
20
|
+
|
|
21
|
+
## Evidence validity
|
|
22
|
+
|
|
23
|
+
Verify evidence, scope/criterion, source, dependencies, configuration, environment, toolchain, command/cwd,
|
|
24
|
+
prerequisites, and decisive result as applicable. Unknown provenance blocks; source
|
|
25
|
+
hash alone is insufficient. External or time-sensitive observations rerun under
|
|
26
|
+
current authority. Required feature proof cannot substitute slice results.
|
|
27
|
+
|
|
28
|
+
Same-candidate accounts may be cited when permitted. Corrections require
|
|
29
|
+
new candidate checks, affected real proof and fresh affected exact reviewers for
|
|
30
|
+
all open findings and dependency/regression closure, including newly triggered roles.
|
|
31
|
+
Changed contracts or uncertain closure require a full applicable pass.
|
|
32
|
+
Unchanged sub-scope needs explicit unchanged-input/dependency justification and a
|
|
33
|
+
link to original evidence. Never relabel an old candidate-bound account.
|
|
34
|
+
Keep one current aggregate binding; never copy a historical binding line, even quoted. Root reconciles complete coverage and binds
|
|
35
|
+
it anew. Missing coverage blocks; required roles, criteria, proof and authority remain.
|
|
36
|
+
|
|
37
|
+
## Existing workspaces
|
|
38
|
+
|
|
39
|
+
Upgrade routes a released-workspace candidate defect to Prove with a cited
|
|
40
|
+
current-contract defect and unambiguous legacy scope/bytes: refresh the manifest and rerun real proof.
|
|
41
|
+
Never synthesize a historical pass or bytes; no legacy fallback. Unknown bindings
|
|
42
|
+
require full refresh. Apply Polish/Review/Seal; Upgrade re-audits. Failed gates block.
|