devrites 7.1.2 → 7.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +12 -0
- package/README.md +9 -4
- package/docs/dsh.md +85 -0
- package/engine/internal/devritespaths/paths.go +2 -0
- package/engine/internal/hostpack/hostpack.go +29 -5
- package/engine/internal/install/apply.go +14 -2
- package/engine/internal/install/install.go +7 -3
- package/engine/internal/install/merge.go +1 -0
- package/engine/internal/install/preflight.go +9 -2
- package/engine/internal/install/update.go +1 -1
- package/engine/internal/lib/dispatch_packet.go +1 -1
- package/pack/generated/README.md +3 -1
- package/pack/generated/dsh/AGENTS.md +27 -0
- package/pack/generated/dsh/agents/devrites-code-reviewer.md +180 -0
- package/pack/generated/dsh/agents/devrites-devex-reviewer.md +137 -0
- package/pack/generated/dsh/agents/devrites-doubt-reviewer.md +100 -0
- package/pack/generated/dsh/agents/devrites-evidence-scout.md +93 -0
- package/pack/generated/dsh/agents/devrites-frontend-reviewer.md +139 -0
- package/pack/generated/dsh/agents/devrites-performance-reviewer.md +142 -0
- package/pack/generated/dsh/agents/devrites-plan-drafter.md +113 -0
- package/pack/generated/dsh/agents/devrites-plan-reviewer.md +167 -0
- package/pack/generated/dsh/agents/devrites-proof-runner.md +101 -0
- package/pack/generated/dsh/agents/devrites-retrospector.md +82 -0
- package/pack/generated/dsh/agents/devrites-security-auditor.md +146 -0
- package/pack/generated/dsh/agents/devrites-simplifier-reviewer.md +113 -0
- package/pack/generated/dsh/agents/devrites-slice-wright.md +240 -0
- package/pack/generated/dsh/agents/devrites-spec-reviewer.md +105 -0
- package/pack/generated/dsh/agents/devrites-strategy-reviewer.md +109 -0
- package/pack/generated/dsh/agents/devrites-test-analyst.md +110 -0
- package/pack/generated/dsh/agents/devrites-upgrade-planner.md +107 -0
- package/pack/generated/dsh/agents/fast-builder.md +92 -0
- package/pack/generated/dsh/agents/fast-checker.md +61 -0
- package/pack/generated/dsh/agents/fast-critic.md +71 -0
- package/pack/generated/dsh/agents/fast-planner.md +95 -0
- package/pack/generated/dsh/agents/overhaul-backend-engineer.md +70 -0
- package/pack/generated/dsh/agents/overhaul-boundary.md +64 -0
- package/pack/generated/dsh/agents/overhaul-craft.md +85 -0
- package/pack/generated/dsh/agents/overhaul-frontend-engineer.md +73 -0
- package/pack/generated/dsh/agents/overhaul-implementer.md +72 -0
- package/pack/generated/dsh/agents/overhaul-recon.md +77 -0
- package/pack/generated/dsh/agents/overhaul-specialist.md +67 -0
- package/pack/generated/dsh/agents/overhaul-verifier.md +73 -0
- package/pack/generated/dsh/runtime/codebase-memory.patch.yml +16 -0
- package/pack/generated/dsh/runtime/cordis.patch.yml +1762 -0
- package/pack/generated/dsh/runtime/specialist.mjs +85 -0
- package/pack/generated/dsh/skills/devrites-api-interface/SKILL.md +65 -0
- package/pack/generated/dsh/skills/devrites-audit/SKILL.md +60 -0
- package/pack/generated/dsh/skills/devrites-browser-proof/SKILL.md +109 -0
- package/pack/generated/dsh/skills/devrites-browser-proof/reference/browser-performance.md +19 -0
- package/pack/generated/dsh/skills/devrites-browser-proof/reference/visual-verdict.md +38 -0
- package/pack/generated/dsh/skills/devrites-debug-recovery/SKILL.md +119 -0
- package/pack/generated/dsh/skills/devrites-debug-recovery/reference/build-the-loop.md +58 -0
- package/pack/generated/dsh/skills/devrites-debug-recovery/reference/cleanup-and-classify.md +41 -0
- package/pack/generated/dsh/skills/devrites-debug-recovery/reference/hypotheses.md +23 -0
- package/pack/generated/dsh/skills/devrites-debug-recovery/reference/instrumentation.md +21 -0
- package/pack/generated/dsh/skills/devrites-debug-recovery/reference/regression-test.md +33 -0
- package/pack/generated/dsh/skills/devrites-debug-recovery/reference/trace.md +25 -0
- package/pack/generated/dsh/skills/devrites-doubt/SKILL.md +83 -0
- package/pack/generated/dsh/skills/devrites-frontend-craft/SKILL.md +89 -0
- package/pack/generated/dsh/skills/devrites-frontend-craft/reference/craft.md +63 -0
- package/pack/generated/dsh/skills/devrites-frontend-craft/reference/design-references.md +120 -0
- package/pack/generated/dsh/skills/devrites-frontend-craft/reference/fullstack.md +46 -0
- package/pack/generated/dsh/skills/devrites-frontend-craft/reference/quality-standards.md +286 -0
- package/pack/generated/dsh/skills/devrites-frontend-craft/reference/reuse-first.md +53 -0
- package/pack/generated/dsh/skills/devrites-frontend-craft/reference/shape.md +61 -0
- package/pack/generated/dsh/skills/devrites-interview/SKILL.md +107 -0
- package/pack/generated/dsh/skills/devrites-lib/SKILL.md +98 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/candidate-integrity.md +59 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/intent-map.md +86 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/orchestration-profiles.md +48 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/parallel-dispatch.md +184 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/reply-contract.md +123 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/standards/README.md +70 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/standards/acceptance-preserving-reslice.md +32 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/standards/afk-hitl.md +467 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/standards/agents.md +231 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/standards/anti-patterns.md +50 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/standards/architecture-health.md +64 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/standards/assumption-checkpoints.md +42 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/standards/audit-coverage.md +107 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/standards/browser-proof-checklist.md +37 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/standards/ci-cd.md +62 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/standards/code-index.md +111 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/standards/code-navigation.md +69 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/standards/code-review.md +178 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/standards/coding-style.md +53 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/standards/context-hygiene.md +136 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/standards/core.md +202 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/standards/data-integrity.md +144 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/standards/debug-recovery.md +42 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/standards/definition-of-done.md +25 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/standards/deprecation.md +49 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/standards/developer-experience.md +128 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/standards/development-workflow.md +31 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/standards/documentation.md +55 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/standards/duplicate-code.md +129 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/standards/edge-case-trace.md +94 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/standards/elicitation.md +114 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/standards/error-handling.md +49 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/standards/gates.md +159 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/standards/git-workflow.md +51 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/standards/glossary.md +40 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/standards/hooks.md +41 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/standards/integration-reliability.md +121 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/standards/loop-operations.md +123 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/standards/observability.md +90 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/standards/one-shot-actions.md +105 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/standards/patterns.md +70 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/standards/performance.md +88 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/standards/principles.md +56 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/standards/prose-style.md +127 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/standards/release/ship-checklist.md +12 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/standards/repository-topology.md +82 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/standards/review/README.md +28 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/standards/review/ci-workflows.md +50 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/standards/review/default.md +42 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/standards/review/go.md +47 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/standards/review/python.md +46 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/standards/review/react.md +55 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/standards/review/shell.md +40 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/standards/review/stack-profile.md +155 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/standards/review/ts-js.md +74 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/standards/review-checklist.md +14 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/standards/security-checklist.md +30 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/standards/security.md +283 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/standards/skill-authoring.md +269 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/standards/spec-grammar.md +214 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/standards/test-proof-checklist.md +18 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/standards/testing.md +295 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/standards/tooling.md +125 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/standards/verification-methods.md +143 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/standards/windows.md +60 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/standards/workflow-artifacts.md +435 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/visual-playbooks/code.md +44 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/visual-playbooks/comparison.md +42 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/visual-playbooks/diagram.md +51 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/visual-playbooks/index.md +66 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/visual-playbooks/input.md +46 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/visual-playbooks/outline-template.md +106 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/visual-playbooks/plan.md +48 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/visual-playbooks/slides.md +40 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/visual-playbooks/table.md +42 -0
- package/pack/generated/dsh/skills/devrites-lib/reference/workspace-artifact-schema.md +312 -0
- package/pack/generated/dsh/skills/devrites-prose-craft/SKILL.md +81 -0
- package/pack/generated/dsh/skills/devrites-prose-craft/reference/banned-phrases.md +132 -0
- package/pack/generated/dsh/skills/devrites-prose-craft/reference/examples.md +136 -0
- package/pack/generated/dsh/skills/devrites-prose-craft/reference/structures.md +196 -0
- package/pack/generated/dsh/skills/devrites-source-driven/SKILL.md +54 -0
- package/pack/generated/dsh/skills/devrites-ux-shape/SKILL.md +135 -0
- package/pack/generated/dsh/skills/devrites-ux-shape/reference/brief-template.md +108 -0
- package/pack/generated/dsh/skills/devrites-ux-shape/reference/visual-direction-probe.md +50 -0
- package/pack/generated/dsh/skills/overhaul/SKILL.md +221 -0
- package/pack/generated/dsh/skills/overhaul/references/audit-domains.md +390 -0
- package/pack/generated/dsh/skills/overhaul/references/lifecycle.md +314 -0
- package/pack/generated/dsh/skills/overhaul/references/orchestration.md +291 -0
- package/pack/generated/dsh/skills/overhaul/references/records.md +203 -0
- package/pack/generated/dsh/skills/overhaul/references/repair-and-measurement.md +310 -0
- package/pack/generated/dsh/skills/overhaul/references/review-and-report.md +139 -0
- package/pack/generated/dsh/skills/overhaul/references/scope-and-safety.md +233 -0
- package/pack/generated/dsh/skills/overhaul/references/scoring.md +261 -0
- package/pack/generated/dsh/skills/overhaul/references/stack-profiles.md +316 -0
- package/pack/generated/dsh/skills/rite/SKILL.md +157 -0
- package/pack/generated/dsh/skills/rite/reference/menu.md +49 -0
- package/pack/generated/dsh/skills/rite-adopt/SKILL.md +64 -0
- package/pack/generated/dsh/skills/rite-adopt/reference/adoption.md +25 -0
- package/pack/generated/dsh/skills/rite-adopt/reference/anti-patterns.md +19 -0
- package/pack/generated/dsh/skills/rite-autocomplete/SKILL.md +167 -0
- package/pack/generated/dsh/skills/rite-autocomplete/reference/decision-policy.md +44 -0
- package/pack/generated/dsh/skills/rite-autocomplete/reference/lookahead.md +50 -0
- package/pack/generated/dsh/skills/rite-autocomplete/reference/loop.md +164 -0
- package/pack/generated/dsh/skills/rite-autocomplete/reference/stop-conditions.md +118 -0
- package/pack/generated/dsh/skills/rite-build/SKILL.md +126 -0
- package/pack/generated/dsh/skills/rite-build/reference/afk-discipline.md +153 -0
- package/pack/generated/dsh/skills/rite-build/reference/anti-patterns.md +27 -0
- package/pack/generated/dsh/skills/rite-build/reference/checkpoint-protocol.md +115 -0
- package/pack/generated/dsh/skills/rite-build/reference/checkpoint.md +79 -0
- package/pack/generated/dsh/skills/rite-build/reference/frontend-trigger.md +39 -0
- package/pack/generated/dsh/skills/rite-build/reference/one-slice-cycle.md +57 -0
- package/pack/generated/dsh/skills/rite-build/reference/output.md +29 -0
- package/pack/generated/dsh/skills/rite-build/reference/parallel-batch.md +260 -0
- package/pack/generated/dsh/skills/rite-build/reference/phase-contract.md +130 -0
- package/pack/generated/dsh/skills/rite-build/reference/spec-drift-guard.md +91 -0
- package/pack/generated/dsh/skills/rite-build/reference/tdd.md +27 -0
- package/pack/generated/dsh/skills/rite-build/reference/wright-dispatch.md +198 -0
- package/pack/generated/dsh/skills/rite-clarify/SKILL.md +104 -0
- package/pack/generated/dsh/skills/rite-clarify/reference/anti-patterns.md +24 -0
- package/pack/generated/dsh/skills/rite-clarify/reference/decision-coverage.md +56 -0
- package/pack/generated/dsh/skills/rite-converge/SKILL.md +167 -0
- package/pack/generated/dsh/skills/rite-converge/reference/anti-patterns.md +35 -0
- package/pack/generated/dsh/skills/rite-converge/reference/convergence-assessment.md +70 -0
- package/pack/generated/dsh/skills/rite-customize/SKILL.md +64 -0
- package/pack/generated/dsh/skills/rite-define/SKILL.md +203 -0
- package/pack/generated/dsh/skills/rite-define/reference/anti-patterns.md +26 -0
- package/pack/generated/dsh/skills/rite-define/reference/gates.md +160 -0
- package/pack/generated/dsh/skills/rite-define/reference/plan-template.md +153 -0
- package/pack/generated/dsh/skills/rite-doctor/SKILL.md +107 -0
- package/pack/generated/dsh/skills/rite-dogfood/SKILL.md +57 -0
- package/pack/generated/dsh/skills/rite-explain/SKILL.md +154 -0
- package/pack/generated/dsh/skills/rite-explain/reference/intake.md +89 -0
- package/pack/generated/dsh/skills/rite-fast/SKILL.md +185 -0
- package/pack/generated/dsh/skills/rite-fast/reference/artifacts.md +107 -0
- package/pack/generated/dsh/skills/rite-fast/reference/check-and-triage.md +51 -0
- package/pack/generated/dsh/skills/rite-frame/SKILL.md +119 -0
- package/pack/generated/dsh/skills/rite-frame/reference/failure-modes.md +66 -0
- package/pack/generated/dsh/skills/rite-handoff/SKILL.md +117 -0
- package/pack/generated/dsh/skills/rite-handoff/reference/handoff-template.md +56 -0
- package/pack/generated/dsh/skills/rite-harness/SKILL.md +76 -0
- package/pack/generated/dsh/skills/rite-harness/reference/feature-map.md +60 -0
- package/pack/generated/dsh/skills/rite-learn/SKILL.md +107 -0
- package/pack/generated/dsh/skills/rite-plan/SKILL.md +215 -0
- package/pack/generated/dsh/skills/rite-plan/reference/anti-patterns.md +34 -0
- package/pack/generated/dsh/skills/rite-plan/reference/dependency-graph.md +48 -0
- package/pack/generated/dsh/skills/rite-plan/reference/replan-and-repair.md +114 -0
- package/pack/generated/dsh/skills/rite-plan/reference/slicing.md +187 -0
- package/pack/generated/dsh/skills/rite-plan/reference/task-breakdown.md +50 -0
- package/pack/generated/dsh/skills/rite-polish/SKILL.md +128 -0
- package/pack/generated/dsh/skills/rite-polish/reference/adr-promotion.md +11 -0
- package/pack/generated/dsh/skills/rite-polish/reference/anti-ai-slop.md +210 -0
- package/pack/generated/dsh/skills/rite-polish/reference/anti-patterns.md +30 -0
- package/pack/generated/dsh/skills/rite-polish/reference/backend-polish.md +80 -0
- package/pack/generated/dsh/skills/rite-polish/reference/browser-polish-evidence.md +33 -0
- package/pack/generated/dsh/skills/rite-polish/reference/code.md +87 -0
- package/pack/generated/dsh/skills/rite-polish/reference/design-memory.md +117 -0
- package/pack/generated/dsh/skills/rite-polish/reference/design-system-discovery.md +8 -0
- package/pack/generated/dsh/skills/rite-polish/reference/harden-checklist.md +110 -0
- package/pack/generated/dsh/skills/rite-polish/reference/ledger.md +67 -0
- package/pack/generated/dsh/skills/rite-polish/reference/ui.md +146 -0
- package/pack/generated/dsh/skills/rite-pov/SKILL.md +71 -0
- package/pack/generated/dsh/skills/rite-pr-feedback/SKILL.md +61 -0
- package/pack/generated/dsh/skills/rite-pressure-test/SKILL.md +76 -0
- package/pack/generated/dsh/skills/rite-prototype/SKILL.md +106 -0
- package/pack/generated/dsh/skills/rite-prove/SKILL.md +151 -0
- package/pack/generated/dsh/skills/rite-prove/reference/acceptance-proof.md +88 -0
- package/pack/generated/dsh/skills/rite-prove/reference/anti-patterns.md +25 -0
- package/pack/generated/dsh/skills/rite-prove/reference/browser-proof.md +51 -0
- package/pack/generated/dsh/skills/rite-prove/reference/failure-triage.md +53 -0
- package/pack/generated/dsh/skills/rite-prove/reference/proof-ladder.md +39 -0
- package/pack/generated/dsh/skills/rite-prove/reference/test-command-discovery.md +36 -0
- package/pack/generated/dsh/skills/rite-quick/SKILL.md +97 -0
- package/pack/generated/dsh/skills/rite-resolve/SKILL.md +113 -0
- package/pack/generated/dsh/skills/rite-resolve/reference/answer-protocol.md +129 -0
- package/pack/generated/dsh/skills/rite-review/SKILL.md +190 -0
- package/pack/generated/dsh/skills/rite-review/reference/anti-patterns.md +32 -0
- package/pack/generated/dsh/skills/rite-review/reference/cognitive-load.md +90 -0
- package/pack/generated/dsh/skills/rite-review/reference/feature-scoped-review.md +26 -0
- package/pack/generated/dsh/skills/rite-review/reference/five-axis-review.md +66 -0
- package/pack/generated/dsh/skills/rite-review/reference/nielsen-heuristics.md +126 -0
- package/pack/generated/dsh/skills/rite-review/reference/performance-checklist.md +99 -0
- package/pack/generated/dsh/skills/rite-review/reference/performance-review.md +14 -0
- package/pack/generated/dsh/skills/rite-review/reference/security-review.md +44 -0
- package/pack/generated/dsh/skills/rite-seal/SKILL.md +99 -0
- package/pack/generated/dsh/skills/rite-seal/reference/anti-patterns.md +29 -0
- package/pack/generated/dsh/skills/rite-seal/reference/final-evidence.md +41 -0
- package/pack/generated/dsh/skills/rite-seal/reference/go-no-go.md +32 -0
- package/pack/generated/dsh/skills/rite-seal/reference/output.md +5 -0
- package/pack/generated/dsh/skills/rite-seal/reference/phase-contract.md +56 -0
- package/pack/generated/dsh/skills/rite-seal/reference/risk-and-rollback.md +56 -0
- package/pack/generated/dsh/skills/rite-seal/reference/seal-template.md +32 -0
- package/pack/generated/dsh/skills/rite-ship/SKILL.md +101 -0
- package/pack/generated/dsh/skills/rite-ship/reference/anti-patterns.md +28 -0
- package/pack/generated/dsh/skills/rite-ship/reference/close-out.md +69 -0
- package/pack/generated/dsh/skills/rite-ship/reference/git-ship.md +128 -0
- package/pack/generated/dsh/skills/rite-ship/reference/rollout.md +62 -0
- package/pack/generated/dsh/skills/rite-ship/reference/ship-template.md +40 -0
- package/pack/generated/dsh/skills/rite-spec/SKILL.md +169 -0
- package/pack/generated/dsh/skills/rite-spec/reference/acceptance-criteria.md +31 -0
- package/pack/generated/dsh/skills/rite-spec/reference/ai-spec-template.md +40 -0
- package/pack/generated/dsh/skills/rite-spec/reference/anti-patterns.md +27 -0
- package/pack/generated/dsh/skills/rite-spec/reference/interview-patterns.md +56 -0
- package/pack/generated/dsh/skills/rite-spec/reference/investigation.md +83 -0
- package/pack/generated/dsh/skills/rite-spec/reference/question-protocol.md +36 -0
- package/pack/generated/dsh/skills/rite-spec/reference/references-intake.md +62 -0
- package/pack/generated/dsh/skills/rite-spec/reference/spec-checklists.md +89 -0
- package/pack/generated/dsh/skills/rite-spec/reference/spec-template.md +160 -0
- package/pack/generated/dsh/skills/rite-spec/reference/state-workspace.md +240 -0
- package/pack/generated/dsh/skills/rite-status/SKILL.md +74 -0
- package/pack/generated/dsh/skills/rite-temper/SKILL.md +137 -0
- package/pack/generated/dsh/skills/rite-temper/reference/anti-patterns.md +30 -0
- package/pack/generated/dsh/skills/rite-temper/reference/review-dimensions.md +66 -0
- package/pack/generated/dsh/skills/rite-temper/reference/scope-modes.md +52 -0
- package/pack/generated/dsh/skills/rite-temper/reference/significance.md +55 -0
- package/pack/generated/dsh/skills/rite-temper/reference/strategy-template.md +101 -0
- package/pack/generated/dsh/skills/rite-upgrade/SKILL.md +142 -0
- package/pack/generated/dsh/skills/rite-vet/SKILL.md +242 -0
- package/pack/generated/dsh/skills/rite-vet/reference/anti-patterns.md +43 -0
- package/pack/generated/dsh/skills/rite-vet/reference/artifacts.md +248 -0
- package/pack/generated/dsh/skills/rite-vet/reference/cross-model.md +19 -0
- package/pack/generated/dsh/skills/rite-vet/reference/depth.md +59 -0
- package/pack/generated/dsh/skills/rite-vet/reference/eng-lenses.md +48 -0
- package/pack/generated/dsh/skills/rite-vet/reference/review-axes.md +210 -0
- package/pack/generated/dsh/skills/rite-watch-pr/SKILL.md +87 -0
- package/pack/generated/dsh/skills/rite-zoom-out/SKILL.md +76 -0
- package/package.json +3 -1
- package/scripts/build-host-artifacts.sh +6 -2
- package/scripts/dsh-generate.py +165 -0
- package/scripts/dsh-specialist.mjs +85 -0
- package/scripts/install-lib.sh +3 -1
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
# Agent orchestration
|
|
2
|
+
|
|
3
|
+
> Applies when: dispatching or admitting any devrites-* role; the source-writing boundary.
|
|
4
|
+
|
|
5
|
+
Follow DevRites policy and [`depth profiles`](../orchestration-profiles.md).
|
|
6
|
+
|
|
7
|
+
## Authority
|
|
8
|
+
|
|
9
|
+
<!-- root-only -->
|
|
10
|
+
- Root owns scope, questions/decisions/results, `.devrites/**`, phase transitions — not product source/tests; vetted executable workflow artifacts follow [`workflow-artifacts.md`](workflow-artifacts.md).
|
|
11
|
+
- Every named role runs; unavailable → HITL, never skip/substitute.
|
|
12
|
+
<!-- /root-only -->
|
|
13
|
+
- Among lifecycle `devrites-*` specialists, only bounded wright writes product
|
|
14
|
+
source/tests; others inspect an immutable candidate. The independent `/rite-fast`
|
|
15
|
+
lane instead uses only its existing `fast-builder` as writer under its own roster;
|
|
16
|
+
never substitute a lifecycle role. Root remains source/test nonwriter.
|
|
17
|
+
- Leaves never invoke agents, ask humans, change phase, push, install/deploy, migrate live data, or act irreversibly; they return evidence/proposals for root acceptance. Sole exception: one local unpushed transfer commit by an eligible native-worktree `devrites-slice-wright` — transport, not shipping authority or a checkpoint.
|
|
18
|
+
|
|
19
|
+
<!-- root-only -->
|
|
20
|
+
## Agents
|
|
21
|
+
|
|
22
|
+
| Agent |
|
|
23
|
+
| --- |
|
|
24
|
+
| `devrites-evidence-scout` |
|
|
25
|
+
| `devrites-plan-drafter` |
|
|
26
|
+
| `devrites-upgrade-planner` |
|
|
27
|
+
| `devrites-proof-runner` |
|
|
28
|
+
| `devrites-strategy-reviewer` |
|
|
29
|
+
| `devrites-plan-reviewer` |
|
|
30
|
+
| `devrites-doubt-reviewer` |
|
|
31
|
+
| `devrites-spec-reviewer` |
|
|
32
|
+
| `devrites-code-reviewer` |
|
|
33
|
+
| `devrites-test-analyst` |
|
|
34
|
+
| `devrites-frontend-reviewer` |
|
|
35
|
+
| `devrites-security-auditor` |
|
|
36
|
+
| `devrites-performance-reviewer` |
|
|
37
|
+
| `devrites-devex-reviewer` |
|
|
38
|
+
| `devrites-simplifier-reviewer` |
|
|
39
|
+
| `devrites-retrospector` |
|
|
40
|
+
| `devrites-slice-wright` |
|
|
41
|
+
|
|
42
|
+
Files own briefs; [`parallel-dispatch.md`](../parallel-dispatch.md) owns rosters.
|
|
43
|
+
<!-- /root-only -->
|
|
44
|
+
|
|
45
|
+
<!-- root-only -->
|
|
46
|
+
## Native invocation
|
|
47
|
+
|
|
48
|
+
Skills name exact fresh roles, omit native fields;
|
|
49
|
+
hosts spawn/wait/deliver. Root MUST NOT advance/claim completion before admitting required results;
|
|
50
|
+
running/orphaned/unavailable = `gap` — no root/generic substitute.
|
|
51
|
+
Where a feature workspace exists, every fresh dispatch to a named `devrites-*`
|
|
52
|
+
role — wave or solo — builds its read-set with `devrites-engine context --skills-root .dsh/skills <slug>
|
|
53
|
+
--phase <p> --role <role>` and tracks the launch through `devrites-engine
|
|
54
|
+
dispatch <slug> open|start|seal|return` (a solo dispatch is a wave of one;
|
|
55
|
+
start/return auto-record metrics). Without a workspace the plain host dispatch
|
|
56
|
+
contract above applies and no engine tracking is required.
|
|
57
|
+
Workflow-named skills (e.g. devrites-source-driven) are invoked inline in the root context, never dispatched as agents.
|
|
58
|
+
<!-- /root-only -->
|
|
59
|
+
|
|
60
|
+
## Source-writing boundary
|
|
61
|
+
|
|
62
|
+
Among lifecycle `devrites-*` specialists only (independent Fast exception below):
|
|
63
|
+
Claude grants only wright `acceptEdits`; Codex root is workspace-capable (children cannot elevate). Wright alone `:workspace`; others `:read-only`. Wright gets the smallest exact project-relative source/test list — no directories/globs, traversal, or `.devrites/**`; no scope widening; root rejects `git diff --name-only` extras. Never patch product source/tests in root, bypass/substitute wright, accept drift, or recreate a dispatch bridge.
|
|
64
|
+
|
|
65
|
+
Independent Fast exception: `/rite-fast` uses its existing `fast-builder` write-capable
|
|
66
|
+
profile, not a `devrites-*` substitute, under the exact Fast roster and lane contract.
|
|
67
|
+
Only that bounded writer may edit its exact project-relative source/test paths; no
|
|
68
|
+
workspace writes, scope widening, or second writer. Root remains source/test nonwriter.
|
|
69
|
+
This exception grants no additional tools, permissions, phase, agent-launch, or Git authority.
|
|
70
|
+
|
|
71
|
+
Isolated-worktree pilot only under [`wright-dispatch.md`](../../../rite-build/reference/wright-dispatch.md#isolated-writer-worktree-pilot): one writer, committed/clean baseline, non-submodule parent, exact transfer commit, candidate reconciliation — never parallel writers nor weaker exact-path admission. Root may materialize only exact Vet-ready workflow-artifact paths per [`workflow-artifacts.md`](workflow-artifacts.md) — not a writer dispatch or candidate mutation.
|
|
72
|
+
|
|
73
|
+
Each job gets objective/exclusions, exact paths/immutable candidate, rubric/result shape, a **stop condition** (when to return), and the exact result shape; a dispatch missing them is malformed and re-issued. Briefs MUST NOT seed verdict/severity cap/conclusion/suppression. Results state status/scope, outcome, commands/escalation; wright adds paths, changed files, gates, stood decisions; results never widen scope.
|
|
74
|
+
|
|
75
|
+
**Same-tree concurrent sessions claim first.** Worktree dispatch isolates
|
|
76
|
+
parallel batch siblings, but two agent *sessions* (two hosts, two features, or
|
|
77
|
+
a human plus an agent) can share one working tree. Before a same-tree writer
|
|
78
|
+
starts, its `dispatch open` records an advisory claim with `--claim-session <id>
|
|
79
|
+
--claim <path>...` and fails, creating no wave, while a live foreign session holds
|
|
80
|
+
a path (without a wave: `claim add --session <id> <paths>`, keep its `<claim-id>`,
|
|
81
|
+
then `claim check`); a held claim from a
|
|
82
|
+
live foreign session is never merged later or overridden. Unattended, skip only
|
|
83
|
+
work that needs those paths, run independent work, and re-check `claim list`
|
|
84
|
+
before stopping; stop and report the holder only when nothing independent remains.
|
|
85
|
+
On every host-confirmed terminal path after `add` or a claimed `dispatch open` ([unknown outcomes keep it](../parallel-dispatch.md#cancellation-and-terminal-reconciliation)),
|
|
86
|
+
the wave's completing `return` releases its claim, `dispatch abandon --release`
|
|
87
|
+
releases it on any other (a stop or a refused launch), and a `claim add` claim runs
|
|
88
|
+
`devrites-engine claim release --session <id> --id <claim-id>`. Claims expire
|
|
89
|
+
by TTL only as crash recovery; `claim list` shows who holds what. Claims are
|
|
90
|
+
advisory coordination, never a substitute for the one-writer-per-worktree rule.
|
|
91
|
+
Claims cover product paths only; root-authored `.devrites/**` files use
|
|
92
|
+
[`workflow-artifacts.md`](workflow-artifacts.md) admission instead.
|
|
93
|
+
Expiry is not proof the holder stopped: size `--claim-ttl` or `claim add --ttl <minutes>` to the
|
|
94
|
+
expected write (engine max 240) and re-add before it lapses; before writing, also
|
|
95
|
+
read `claim list` — a foreign `expired` claim on overlapping paths whose
|
|
96
|
+
session is not proven terminal counts as held (stop and report). `dead` (engine-proven
|
|
97
|
+
exited holder) or `released` is terminal: reconcile per
|
|
98
|
+
[§ Cancellation](../parallel-dispatch.md#cancellation-and-terminal-reconciliation). **Failing case:**
|
|
99
|
+
session B's `claim check` passes at minute 35 over session A's still-running wright.
|
|
100
|
+
|
|
101
|
+
## Independence
|
|
102
|
+
|
|
103
|
+
- A fresh result sees scope/paths-diff/rubric only — never another result's or the root's conclusions, severities, expected verdicts, chosen verification methods, or edited context; seeding voids the packet. Canonical workspace artifacts in the engine-generated `--role` read-set (state cursor, decisions, `strategy.md` scores, prior review records) are inputs, not seeding: a verdict they record is a historical claim the reviewer re-verifies, never this pass's conclusion. The same holds for status, readiness-checklist, or gate lines inside a read-set artifact (e.g. a `spec.md` `Status:`/`Spec gate:` line from an older workspace). Never hand-edit installed read-sets or swap them for excerpts to strip that history.
|
|
104
|
+
- Never message a running read-only leaf: a mid-run note voids it like a seeded packet.
|
|
105
|
+
Root proof that lands after dispatch is weighed at reconciliation, not forwarded; a
|
|
106
|
+
leaf gap it would close (e.g. "no independent runtime run") closes there.
|
|
107
|
+
- A recheck packet lists only fingerprints that same role raised, plus the correction
|
|
108
|
+
diff. Another role's finding goes to that role's recheck, never a sibling's packet.
|
|
109
|
+
- **Verify the packet is clean before admitting the account.** Confirm the returned packet/trace carries no host-injected context: an automatic memory/summary banner naming an earlier phase verdict (e.g. `past Temper PASS … next is /rite-define`) or harness reminder text seeds the pass and voids it. Cancel that account — never admit it — name the lost coverage, and re-dispatch with the host's context injection disabled for that child. Tool config changes that do not stop native child auto-injection are not a fix; verify on the next spawn instead of assuming.
|
|
110
|
+
- A parent-context pass contributes attributed evidence but is not independent: exclude it from independent accounting and name the lost coverage.
|
|
111
|
+
- Final severity is set at reconciliation after re-verifying the claimed consequence at the cited site (reviewer severity advisory); dismissals record a reason, and true facts about neighboring code route elsewhere instead of being dismissed.
|
|
112
|
+
- Conflicting required results are arbitrated by re-verifying evidence at the site; the deciding evidence is recorded, truly unresolved conflicts stay open blockers. Two results describing the same defect merge only when both defect and fix path match; otherwise the more conservative classification stands, and severity never widens without new site evidence — an overridden or demoted finding stays visible with the reason, never silently merged away.
|
|
113
|
+
|
|
114
|
+
## Result admission
|
|
115
|
+
|
|
116
|
+
Each required reviewer/analyst/auditor starts with exactly one:
|
|
117
|
+
`Outcome: findings`, `Outcome: no-findings`, or `Outcome: gap`.
|
|
118
|
+
|
|
119
|
+
**Canonical finding shape (C2 — all `devrites-*-reviewer` / auditor agents):**
|
|
120
|
+
|
|
121
|
+
```text
|
|
122
|
+
Outcome: <findings | no-findings | gap>
|
|
123
|
+
Counts: critical=<n> important=<n> suggestion=<n> nit=<n> fyi=<n> gap=<n>
|
|
124
|
+
Finding: <severity> conf <n> | <file:line or artifact section> | `<quoted cited line>` <observed result> | when <input/state/sequence> → <effect> | breaks <ID or standard §> "<quoted line>" | <minimum fix>
|
|
125
|
+
Basis: <files read · commands run to reach this finding>
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
- **`findings`:** each row uses the shape above; confidence 1–10 on Critical/Important.
|
|
129
|
+
Critical/Important requires 7+, exact evidence, concrete impact, and a non-empty
|
|
130
|
+
`Basis` — a correct verdict reached by an unrecorded inspection path is unproven.
|
|
131
|
+
A Critical/Important row carries `conf <n>` in its severity cell, opens its observed
|
|
132
|
+
cell with the cited line's quote in backticks, and writes impact
|
|
133
|
+
as `when <input/state/sequence> → <effect>`; missing conf or trigger, root admits it as
|
|
134
|
+
`Unverified: <claim> — missing trigger` (stays `gap`).
|
|
135
|
+
- **Proportionality:** a Critical/Important row's `breaks` quotes the line it violates:
|
|
136
|
+
a spec ID (`AC`/`REQ`/`INV`/`PROH`/`DEC`/`EDGE`) or a shipped standard rule
|
|
137
|
+
(`<standard>.md § <section>`: security, regression, principles). Root anchors the
|
|
138
|
+
quote like the `file:line` quote. A repair contract, recheck packet, earlier
|
|
139
|
+
finding or plan item (`plan.md`, `tasks.md`, `architecture.md`, `test-plan.md`)
|
|
140
|
+
only restates root's own claim and is never an anchor; quote the spec ID or
|
|
141
|
+
standard rule it traces to. No anchor, or one
|
|
142
|
+
the defect does not break,
|
|
143
|
+
admits the row as Suggestion logged `Deferred: <claim> — no spec anchor` for an
|
|
144
|
+
optional follow-up slice; it never drives a repair round. Hardening no spec line
|
|
145
|
+
asks for is a Suggestion, however plausible. The `when` must also be reachable:
|
|
146
|
+
a hostile actor enters only through a trust boundary the feature really has
|
|
147
|
+
(users, network, external systems, untrusted files). A trigger that needs one it
|
|
148
|
+
never faces — the code under test forging its own evidence, a tampering second
|
|
149
|
+
user on a single-owner dev host, a swapped remote daemon under a local dev tool —
|
|
150
|
+
is a Suggestion too. So is an environment state the feature's declared
|
|
151
|
+
environment does not have (a mount option, kernel setting or daemon location
|
|
152
|
+
absent from the target host): guard against it only when the spec names it.
|
|
153
|
+
A finding never pulls a deferred slice's scope forward.
|
|
154
|
+
- **`no-findings`:** `No-findings:` names checks and inspected evidence. Bare
|
|
155
|
+
pass, empty list, or “looks good” is malformed.
|
|
156
|
+
- **`gap`:** names missing/unreadable/stale input; skipped/failed required check;
|
|
157
|
+
tool/reviewer failure; or another limit. Required gaps block. A reviewer gap
|
|
158
|
+
that asks for more evidence without showing a defect is required only when it
|
|
159
|
+
quotes the anchor that demands that evidence, as Proportionality does: a spec ID,
|
|
160
|
+
an owner decision, or a shipped standard rule. Without one, root logs it
|
|
161
|
+
`Deferred: <claim> — no anchor`. Advisory gaps follow
|
|
162
|
+
[security.md § Reachability sets severity](security.md#reachability-sets-severity).
|
|
163
|
+
- **Transport failure is not a finding.** A read-only leaf aborted, timed out, lost,
|
|
164
|
+
or with host-rejected output is `gap` quoting the host error. Re-dispatch one fresh
|
|
165
|
+
child with the same brief and read-set — never a resume of the failed child. The
|
|
166
|
+
retry spends any user-granted budget; ask only if it would exceed it. A second
|
|
167
|
+
transport failure of the same role is a host defect: stop for HITL with both errors
|
|
168
|
+
and `/rite-doctor`. Never design capture or retention machinery around it.
|
|
169
|
+
|
|
170
|
+
Root treats results as claims; verifies proposed Critical/Important blockers
|
|
171
|
+
against candidate, first running `devrites-engine check anchors --skills-root .dsh/skills <slug> <return-file>`,
|
|
172
|
+
which anchors each row's quote at its cited `file:line` on the live candidate and its
|
|
173
|
+
`breaks` quote, and prints the digest root confirms equals the reviewed packet's: exact → admit; found at exactly one other location → relocate,
|
|
174
|
+
keeping both locations; not found or found at several → `Unverified: <claim> —
|
|
175
|
+
anchor lost|ambiguous`, a gap that is never a finding, a dismissal or a repair-round
|
|
176
|
+
input (exit 3). A leaf result
|
|
177
|
+
produced by spawning a nested agent is `gap`, and each hidden child counts toward
|
|
178
|
+
the concurrent pool and `max_agents`. Missing fields become
|
|
179
|
+
`Unverified: <claim> — missing <proof>` and stay `gap` until verified/rejected
|
|
180
|
+
with evidence—never silently dropped/demoted. Null/timeout/failure/malformed
|
|
181
|
+
output is `gap`, never `no-findings`. Conditional `Not-applicable` must name the
|
|
182
|
+
inspected scope and why its trigger did not fire. **Failing case:** parent admits a
|
|
183
|
+
wright "done" with no `git diff --name-only` ⊆ path-contract (allowlist) observation.
|
|
184
|
+
|
|
185
|
+
### Return budget
|
|
186
|
+
|
|
187
|
+
Every read-only leaf returns rows, not prose, so the root keeps its context for
|
|
188
|
+
decisions and nothing is lost in a retelling. Exempt: `devrites-plan-drafter` (its
|
|
189
|
+
return is the bundle the root writes) and the wright's change evidence.
|
|
190
|
+
|
|
191
|
+
- Lead with the result line (`Outcome:` for reviewers, the role's own status line
|
|
192
|
+
otherwise), then `Counts:` with the number of rows per severity or kind.
|
|
193
|
+
- A reviewer, auditor or test-analyst head is strict: line 1 is
|
|
194
|
+
`Outcome: findings|no-findings|gap` (no title line above it), line 2 is
|
|
195
|
+
`Counts: key=N ...` with keys from the role's closed vocabulary:
|
|
196
|
+
`critical important suggestion nit fyi gap`, plus `contract mechanism` for
|
|
197
|
+
`devrites-plan-reviewer`, only `suggestion nit fyi gap` for
|
|
198
|
+
`devrites-simplifier-reviewer`. `findings` needs a non-`gap` count above 0;
|
|
199
|
+
`no-findings` needs every count at 0. `dispatch return --result <file>` stores
|
|
200
|
+
the return and records a malformed or inconsistent head as `gap`, never
|
|
201
|
+
`no-findings`.
|
|
202
|
+
- No restated task, preamble, approach narrative or closing summary. An optional
|
|
203
|
+
`Notes:` block carries at most five lines that no row can hold.
|
|
204
|
+
- Your last message is your return; the host delivers only that message. If a
|
|
205
|
+
hook, rule judge or system reminder arrives after your report, reply with the
|
|
206
|
+
complete report again, head first, with any correction inside it. Never end on a
|
|
207
|
+
reply that only answers the reminder. **Failing case:** a rule judge flagged a
|
|
208
|
+
simplifier's finished report; it answered the flag, and the host delivered that
|
|
209
|
+
answer instead of its rows.
|
|
210
|
+
- Point, don't paste: cite `file:line` with at most one quoted line (160
|
|
211
|
+
characters); for a command, give the exact command, its exit code and the one
|
|
212
|
+
decisive output line. Never paste whole files, diffs, logs or test output.
|
|
213
|
+
- Each row stands alone: a reader of that row alone can re-check it from its pointer.
|
|
214
|
+
- The root records admitted rows verbatim, adds its own verification beside them, and
|
|
215
|
+
never rewrites, merges or summarizes a row; deduplication references rows by
|
|
216
|
+
position or ID instead of rewording them.
|
|
217
|
+
|
|
218
|
+
<!-- root-only -->
|
|
219
|
+
## Reconciliation
|
|
220
|
+
|
|
221
|
+
Root rejects stale/out-of-scope work, dedupes by root cause, records
|
|
222
|
+
accepted conclusions, and reruns only affected proof/review. Reconciliation runs
|
|
223
|
+
only after every dispatch reaches a terminal classification
|
|
224
|
+
([parallel-dispatch.md](../parallel-dispatch.md)); findings that do not survive stay
|
|
225
|
+
visible as `withdrawn: <n> (<reason>)` in the account rather than being silently
|
|
226
|
+
dropped, so a later reader can audit what was discarded and why.
|
|
227
|
+
Route defects before correction: product/acceptance → Spec Drift Guard/Clarify;
|
|
228
|
+
architecture/slicing/proof → Plan/Vet; source/test → wright;
|
|
229
|
+
external/pre-existing → blocker/defer. Never patch downstream to hide an upstream
|
|
230
|
+
defect.
|
|
231
|
+
<!-- /root-only -->
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# DevRites: universal anti-patterns
|
|
2
|
+
|
|
3
|
+
> Applies when: universal rationalizations; load when tempted to shortcut any standard.
|
|
4
|
+
|
|
5
|
+
The pack-wide rationalizations the agent reaches for when discipline gets in
|
|
6
|
+
the way. Apply at every phase. Each `rite-*/reference/anti-patterns.md`
|
|
7
|
+
extends this with phase-specific items.
|
|
8
|
+
|
|
9
|
+
This file is the **single source** of the universal anti-rationalization table.
|
|
10
|
+
`core.md` points here when an excuse appears.
|
|
11
|
+
|
|
12
|
+
## Universal rationalizations
|
|
13
|
+
|
|
14
|
+
| Excuse | Rebuttal |
|
|
15
|
+
|---|---|
|
|
16
|
+
| "I'll add the tests later." | Tests written after the fact don't drive design and miss the boundary cases the act of writing exposes. Test now or the tests you eventually write are worse. |
|
|
17
|
+
| "Lint and build pass, that proves quality." | Automation proves syntax and style, not design or correctness. Never cite clean automation as evidence of good design. |
|
|
18
|
+
| "It's only a small refactor while I'm in here." | Feature scope only: drive-by cleanup balloons the diff, hides intent, and gets rejected at seal. Record as an FYI follow-up. |
|
|
19
|
+
| "This is a special case, the pattern doesn't apply." | Special cases multiply silently. Either they really are special (record *why* in `decisions.md`) or they're not (and the pattern wins). |
|
|
20
|
+
| "The user will tell me if something is wrong." | Drift detection is the workflow's job, not the user's QA. Surface assumptions; route material questions through the Spec Drift Guard. |
|
|
21
|
+
| "Generic name (`processData`, `handleItem`) is fine: the code is self-evident." | Generic AI naming is slop. Match the project's idiom; one concept gets one word across the codebase. |
|
|
22
|
+
| "Better safe than sorry: add the defensive null/length check." | Over-defensive guarding is slop. Validate at boundaries; trust the core. A check inside trusted code hides bugs in the boundary. |
|
|
23
|
+
| "It's faster to skip the small step." | Process shortcuts pay back later as drift, missed criteria, or unrecorded decisions. The step is the point. |
|
|
24
|
+
| "I observed it pass; recording is bureaucracy." | Un-recorded pass = unproven. The next phase reads `evidence.md`, not your memory. |
|
|
25
|
+
| "User clearly wants this, so I'll bypass the gate." | Gates exist for the failure modes asks miss. Honor the gate; the gate exists *because* of the ask. |
|
|
26
|
+
| "The test is failing. I'll just skip it / loosen the assertion to get green." | Faking green is reward-hacking, not progress. Never delete / skip / `xfail` / `.only` / loosen a failing test: a red test means fix the code or agree the change. Diff review and dedicated test analysis treat weakening as Critical. |
|
|
27
|
+
| "This project principle doesn't really apply to my case." | A declared invariant (`.devrites/principles.md`) is not advisory. Either it genuinely needs relaxing (record a scoped, dated exception a human approves) or it applies and the change is wrong. Silently routing around a principle is the defect the gate exists to catch (`principles.md`). |
|
|
28
|
+
|
|
29
|
+
## Pack-wide red flags
|
|
30
|
+
|
|
31
|
+
These show up at any phase and are equally damning regardless:
|
|
32
|
+
|
|
33
|
+
- Touching files that aren't in `touched-files.md` "while I'm here".
|
|
34
|
+
- A finding / decision / assumption recorded only in chat, not in the workspace files (it dies on `/clear`).
|
|
35
|
+
- Catching the broadest possible error and continuing past it.
|
|
36
|
+
- A test that asserts the implementation, not the behavior.
|
|
37
|
+
- A failing test deleted, skipped, `xfail`-ed, `.only`-narrowed, or loosened to make the suite pass.
|
|
38
|
+
- Commenting out code instead of deleting it.
|
|
39
|
+
- A `// TODO` left in shipped code.
|
|
40
|
+
- Adding a dependency or a second design system without rationale in `decisions.md`.
|
|
41
|
+
- A change that violates a declared project principle (`.devrites/principles.md`) with no recorded, human-approved exception.
|
|
42
|
+
- "I'll fix it in a follow-up PR" with no follow-up opened.
|
|
43
|
+
|
|
44
|
+
## Where this gets loaded
|
|
45
|
+
|
|
46
|
+
Phase-specific `rite-*/reference/anti-patterns.md` files extend this table with only their local cases. Load this file when the rationalization is broader than one phase.
|
|
47
|
+
|
|
48
|
+
## Behavioral coverage
|
|
49
|
+
|
|
50
|
+
A new behavior-shaping rebuttal needs a matching behavioral eval; prose alone does not prove the guard holds under pressure.
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# Architecture health
|
|
2
|
+
|
|
3
|
+
> Applies when: an audit, vet, or seal needs a structural read on the whole
|
|
4
|
+
> codebase — not the diff — and a dependency index is available.
|
|
5
|
+
|
|
6
|
+
A health score compresses six structural signals into one 0–100 number with a
|
|
7
|
+
letter grade. It is an *audit instrument*, not a gate: it ranks surfaces for
|
|
8
|
+
attention and tracks drift between milestones. It never proves a change safe
|
|
9
|
+
and never substitutes for review.
|
|
10
|
+
|
|
11
|
+
## When to measure
|
|
12
|
+
|
|
13
|
+
Compute a score only when a code index covers the repo (see
|
|
14
|
+
[`code-index.md`](code-index.md) § Preflight). With no index,
|
|
15
|
+
report `unmeasured` — a placeholder number presented as a measurement is a
|
|
16
|
+
false pass. **Failing case:** an audit reports "health: 100/100" on a repo the
|
|
17
|
+
instrument could not parse.
|
|
18
|
+
|
|
19
|
+
## Dimensions
|
|
20
|
+
|
|
21
|
+
Weight the dimensions exactly once; do not invent extra dimensions ad hoc —
|
|
22
|
+
record repo-specific signals as findings instead.
|
|
23
|
+
|
|
24
|
+
| Dimension | Weight | What it measures | Healthy | Warning |
|
|
25
|
+
| --- | --- | --- | --- | --- |
|
|
26
|
+
| Coupling | 25% | Cross-file edges per file; penalize god-file outliers (max ≫ 3× mean) and >70% cross-directory share | avg ≤3 connections | avg >10 |
|
|
27
|
+
| Cohesion | 20% | Share of a directory's edges that stay inside it | ≥70% internal | <30% |
|
|
28
|
+
| Circular deps | 20% | File-level dependency cycles per 100 files | 0 cycles | >5 per 100 |
|
|
29
|
+
| God files | 15% | Files with >3× mean connections | none | >6% of files |
|
|
30
|
+
| Orphans & dead exports | 10% | Unreferenced files; exported symbols with zero dependents (60/40 blend) | 0% orphans | >10% orphans or >5% dead exports |
|
|
31
|
+
| Depth | 10% | Longest dependency chain, cycles collapsed to one hop each (SCC-condensed DAG) | ≤4 levels | >8 |
|
|
32
|
+
|
|
33
|
+
Grade bands: ≥90 A · ≥80 B · ≥70 C · ≥60 D · below F.
|
|
34
|
+
|
|
35
|
+
## Rules
|
|
36
|
+
|
|
37
|
+
- **Measure before and after.** A score's value is the delta: record
|
|
38
|
+
before/after for structural work in `evidence.md`; a drop >3 points needs a
|
|
39
|
+
named cause, not a shrug.
|
|
40
|
+
- **Count runtime edges, not type-only edges.** `import type`-style
|
|
41
|
+
relationships inform dead-code analysis but do not execute; including them
|
|
42
|
+
overstates coupling.
|
|
43
|
+
- **Exclude fixtures and generated files** from orphan/dead counts — a
|
|
44
|
+
directory of test fixtures is not dead code.
|
|
45
|
+
- **Depth is computed on the condensed graph.** Collapse each cycle (strongly
|
|
46
|
+
connected component) to one node first; an exact longest-path search on a
|
|
47
|
+
cyclic graph is unbounded and returns no honest number.
|
|
48
|
+
- **Every recommendation names the dimension it moves.** "Improve the
|
|
49
|
+
architecture" is not an action; "extract `x/` → `y/` edge to cut cross-dir
|
|
50
|
+
coupling (Coupling, est. +8)" is.
|
|
51
|
+
- **Trend over snapshots.** Keep the score per milestone in `evidence.md` or
|
|
52
|
+
the feature's audit artifact; a single reading without a baseline is a
|
|
53
|
+
weather report, not a climate signal.
|
|
54
|
+
|
|
55
|
+
## Orphan and dead-export semantics
|
|
56
|
+
|
|
57
|
+
An orphan file has zero cross-file runtime edges. A dead export is an exported
|
|
58
|
+
top-level symbol (function/class/interface/type/enum/constant) with zero
|
|
59
|
+
incoming edges — member-level symbols (methods, properties) are excluded:
|
|
60
|
+
they are not meaningful architecture-level candidates and produce false
|
|
61
|
+
positives. Both counts feed only this dimension; the *removal decision* for a
|
|
62
|
+
dead export follows [`deprecation.md`](deprecation.md), including its
|
|
63
|
+
confidence rubric — a low-confidence dead lead is a watch item, never an
|
|
64
|
+
automatic deletion.
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# Assumption-delta checkpoints
|
|
2
|
+
|
|
3
|
+
> Applies when: planning or vetting a slice whose scope generalizes an existing
|
|
4
|
+
> boundary — the seam where a quiet assumption loses its monopoly.
|
|
5
|
+
|
|
6
|
+
Most quietly imported architectural debt comes from the seam: a later change adds a
|
|
7
|
+
*second case* — platform, auth method, tenant, region, source of truth — and nobody
|
|
8
|
+
re-asks whether the original abstraction still names the right thing. The change that
|
|
9
|
+
adds the second case is the cheap moment to ask.
|
|
10
|
+
|
|
11
|
+
## The detector
|
|
12
|
+
|
|
13
|
+
Scan the phase scope, spec delta, or task list for transition signals:
|
|
14
|
+
|
|
15
|
+
| Signal | Shape | The question it raises |
|
|
16
|
+
|---|---|---|
|
|
17
|
+
| `pluralization` | A second X where exactly one existed (platform, provider, tenant, region, source of truth) | Does the identity model still name the right noun? |
|
|
18
|
+
| `optionality` | A required or `only`-assumed field becomes optional | Is that field still the right anchor, or did the anchor move? |
|
|
19
|
+
| `choice` | A derived value becomes chosen; a constant becomes a parameter | Has a config decision silently become a modeling decision? |
|
|
20
|
+
|
|
21
|
+
Code blocks, comments, and prose that merely *mention* a trigger word do not count.
|
|
22
|
+
|
|
23
|
+
## Firing the checkpoint
|
|
24
|
+
|
|
25
|
+
A firing signal surfaces **one** question before the plan is finalized — not a
|
|
26
|
+
redesign, one question: *does the name/model chosen when N=1 still hold at N=2?*
|
|
27
|
+
|
|
28
|
+
- `detected:false` — skip the checkpoint; do not raise it.
|
|
29
|
+
- `skipped` — the scope was never examined. A skipped check asserts *nothing*: never
|
|
30
|
+
record "no assumption changed" from a skipped result; skipped ≠ negative.
|
|
31
|
+
- `detected:true` — ask the one question and record the answer in `decisions.md` or
|
|
32
|
+
`assumptions.md`; an answered checkpoint that leaves no trace re-fires next round.
|
|
33
|
+
|
|
34
|
+
## Promote, don't add alongside
|
|
35
|
+
|
|
36
|
+
When a generalization is real, the default-correct move is to **promote** the general
|
|
37
|
+
representation to primary and demote the old specific one to a detail of one variant —
|
|
38
|
+
not to add the new shape alongside the still-required old one, which silently
|
|
39
|
+
contradicts the generalized intent.
|
|
40
|
+
|
|
41
|
+
**Failing case:** `region` added as an optional column beside `primaryRegion`; every
|
|
42
|
+
write now guesses which is authoritative.
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
# Coverage-led auditing
|
|
2
|
+
|
|
3
|
+
> Applies when: auditing a surface larger than one feature diff — a repo, subsystem,
|
|
4
|
+
> or trust boundary — where "I looked at it" must become countable coverage.
|
|
5
|
+
|
|
6
|
+
A surface audit must answer *what the run covered and what it never examined* — with
|
|
7
|
+
a coverage ledger, not a summary paragraph.
|
|
8
|
+
|
|
9
|
+
## Coverage ledger
|
|
10
|
+
|
|
11
|
+
The coordinator alone maintains the ledger; a unit is one auditable cell — surface
|
|
12
|
+
(path/endpoint/command) × trust boundary × check class.
|
|
13
|
+
|
|
14
|
+
States: `planned` → `assigned` → `candidate` (produced a finding candidate) →
|
|
15
|
+
`covered` (evidence recorded); plus `deferred` (postponed, reason recorded),
|
|
16
|
+
`blocked` (exact blocker recorded), and `out_of_scope` (declared-scope exclusion —
|
|
17
|
+
never written as `covered`). `deferred` and `blocked` are honest states; a unit
|
|
18
|
+
silently dropped is a lie.
|
|
19
|
+
|
|
20
|
+
Instruments obey the same honesty rule: a scanner or metric that could not read
|
|
21
|
+
its target reports `unmeasured`/`no_data`, never a placeholder presented as a
|
|
22
|
+
measurement. A health score computed over zero parseable files is not a 100.
|
|
23
|
+
When the audit covers whole-repo structure, score it per
|
|
24
|
+
[`architecture-health.md`](architecture-health.md) and record before/after
|
|
25
|
+
deltas as ledger evidence.
|
|
26
|
+
|
|
27
|
+
## Findings carry three verdicts, not two
|
|
28
|
+
|
|
29
|
+
- **`confirmed`** — complete source trace plus a bounded observed or owner-observable
|
|
30
|
+
result; names the lower-trust principal, crossed boundary, affected
|
|
31
|
+
principal/resource, and concrete effect.
|
|
32
|
+
- **`needs_validation`** — a real lead blocked on one exact unresolved fact, which is
|
|
33
|
+
named. Carries **no severity**: severity without established impact is theater.
|
|
34
|
+
- **`rejected`** — a disproved candidate kept with its disproof; it suppresses
|
|
35
|
+
re-raising the same unchanged claim, never coverage of its unit.
|
|
36
|
+
|
|
37
|
+
Hardening notes are not findings: if one layer already prevents the attack, the
|
|
38
|
+
absent second layer is a depth observation, not a vulnerability.
|
|
39
|
+
|
|
40
|
+
## Finder never verifies its own find
|
|
41
|
+
|
|
42
|
+
Every surviving candidate goes to a fresh verifier that did not produce it and tries
|
|
43
|
+
to **disprove** it, per [`agents.md`](agents.md) § Independence — a seeded packet
|
|
44
|
+
voids the verification. Promotions to `confirmed` and material changes to root
|
|
45
|
+
cause, trace, reproduction, impact, or severity require fresh independent
|
|
46
|
+
verification. Without that independent evidence, keep the candidate unresolved;
|
|
47
|
+
a rewritten explanation is not verification.
|
|
48
|
+
|
|
49
|
+
## Critics between waves
|
|
50
|
+
|
|
51
|
+
After each hunting wave, a **coverage critic** — a fresh agent comparing the ledger
|
|
52
|
+
with targeted source and entry-point evidence — looks for holes: unseeded surfaces,
|
|
53
|
+
boundaries with no check class,
|
|
54
|
+
units stuck `assigned`, `rejected` patterns suggesting a hunter fires blanks.
|
|
55
|
+
Accepted discoveries become `planned` units. Coverage is `complete` only after a
|
|
56
|
+
critic returns no accepted missing or reassigned unit and no unit is `planned`;
|
|
57
|
+
otherwise the run is partial, and a wave or agent cap is never evidence of
|
|
58
|
+
completeness. A reassigned unit gets a fresh owner; the old attempt's evidence stays
|
|
59
|
+
attributed to it and is never merged into the new attempt. Reserve critic and verifier capacity
|
|
60
|
+
**before** spending on hunters; a wave launched with no verification reserve hunts
|
|
61
|
+
for findings nobody may claim.
|
|
62
|
+
|
|
63
|
+
## Re-runs are additive, never assumed
|
|
64
|
+
|
|
65
|
+
A prior ledger must be re-checked against current source — a prior commit ref is not
|
|
66
|
+
evidence a path is unchanged. Prior `confirmed` carries forward only when its source
|
|
67
|
+
is unchanged **and** it re-passes current verification; prior `needs_validation` /
|
|
68
|
+
`blocked` / `deferred` become current work and never suppress a unit. A partial prior
|
|
69
|
+
run contributes recorded evidence and gaps, never an implied "the rest is fine"; no
|
|
70
|
+
prior ledger → the report says so.
|
|
71
|
+
|
|
72
|
+
## Profiles scale breadth, never the bar
|
|
73
|
+
|
|
74
|
+
`quick` (one hunter wave + one critic pass, coarser units), `standard` (waves to
|
|
75
|
+
critic-clean, per-candidate fresh verifier), `deep` (units split per
|
|
76
|
+
subsystem/lifecycle; carried records re-verified). Profiles change granularity and
|
|
77
|
+
redundancy, never the evidence bar: boundary-plus-result, independent verification,
|
|
78
|
+
three verdicts, and honest `deferred`/`blocked` survive every profile. A scoped run
|
|
79
|
+
presents itself as partial coverage.
|
|
80
|
+
|
|
81
|
+
## Budget discipline
|
|
82
|
+
|
|
83
|
+
A budget counts agent invocations, not effort. Reserve critic and verifier capacity
|
|
84
|
+
before spending on hunters; a budget that cannot fund reconnaissance plus required
|
|
85
|
+
reserves funds nothing — narrow scope or profile instead of silently thinning
|
|
86
|
+
evidence. A run exhausted mid-verification ends `incomplete` with unvalidated
|
|
87
|
+
candidates still linked to `candidate` units — never relabeled, never reported
|
|
88
|
+
complete.
|
|
89
|
+
|
|
90
|
+
## Target execution is sandboxed
|
|
91
|
+
|
|
92
|
+
When a unit requires *running* the target — a build, a test, a probe — execute
|
|
93
|
+
it under containment, never in the operator's ambient environment:
|
|
94
|
+
|
|
95
|
+
- No external network and no live-service probing from the audit run.
|
|
96
|
+
- No credentials, tokens, or secrets visible to target-controlled processes.
|
|
97
|
+
- Only commands the repository or CI itself sanctions run verbatim; invented
|
|
98
|
+
commands are findings to propose, not actions to take.
|
|
99
|
+
- Output captured through the harness, not through target-written files the
|
|
100
|
+
run then trusts.
|
|
101
|
+
|
|
102
|
+
An audit that executed unaudited code with ambient privileges has crossed the
|
|
103
|
+
boundary it was measuring; that run's `confirmed` rows name the execution
|
|
104
|
+
context so reviewers can judge contamination.
|
|
105
|
+
|
|
106
|
+
**Failing case:** "no critical findings" reported while 40% of units sit `planned` —
|
|
107
|
+
the honest sentence was "60% of the surface was examined."
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# Browser proof checklist
|
|
2
|
+
|
|
3
|
+
> Applies when: UI proof: compact sweep before claiming a rendered/browser pass.
|
|
4
|
+
|
|
5
|
+
Compact sweep only. Numbers and failing cases live in
|
|
6
|
+
[`quality-standards.md`](../../../devrites-frontend-craft/reference/quality-standards.md)
|
|
7
|
+
§ Focus & states, § Responsive, and § Browser chrome — do not restate a shorter
|
|
8
|
+
viewport set here.
|
|
9
|
+
|
|
10
|
+
- Open the real UI (never screenshot-only); check console and network for errors.
|
|
11
|
+
- Before reading the builder's verdict, inventory the raw captures against the
|
|
12
|
+
required routes/states/viewports and candidate identity. Open each capture: a
|
|
13
|
+
wrong route, blank render, unexpected login wall, inconsistent dimensions, or
|
|
14
|
+
stale candidate is missing evidence. Recapture; until resolved, record
|
|
15
|
+
`cannot_verify` and block visual approval. A convincing narrative cannot repair it.
|
|
16
|
+
- **Evidence matrix.** Layout-bearing states (default, long content, and every
|
|
17
|
+
role-applicable surface state from [`quality-standards.md`](../../../devrites-frontend-craft/reference/quality-standards.md) § Focus & states) × every
|
|
18
|
+
canonical viewport; interaction states at ≥1 small and ≥1 large viewport (hover
|
|
19
|
+
only with a hover-capable pointer); one keyboard traversal; a `reduce` capture when
|
|
20
|
+
motion changed; every shipped theme. Each cell holds a capture, `cannot_verify`, or
|
|
21
|
+
`not-needed (<reason>)`; an empty cell is `cannot_verify`. States must exist in source
|
|
22
|
+
— an unreachable state's capture proves nothing.
|
|
23
|
+
- A capture counts only with fonts loaded, animations settled, the real route (a harness
|
|
24
|
+
or story capture is labelled and never fills a route cell) and matching candidate
|
|
25
|
+
identity. Hover, touch, iOS zoom or safe-area behaviour seen only in emulation is
|
|
26
|
+
`unverified (device)`, never a pass.
|
|
27
|
+
- A finding closes only with a capture of the same route, state and viewport class on the
|
|
28
|
+
corrected candidate; a failed or incomplete capture run never counts as gone.
|
|
29
|
+
**Failing case:** a 320 px overflow closed by a clean 1440 px screenshot.
|
|
30
|
+
- Browser-default chrome is judged by § Browser chrome; reflow, zoom and bounded
|
|
31
|
+
two-dimensional exceptions by § Responsive. Compare to `design-brief.md` → Visual Verdict.
|
|
32
|
+
- Tooling unavailable ⇒ record fallback + limitation. Backend-only changes record
|
|
33
|
+
that disposition instead of capturing quietly; UI copy follows
|
|
34
|
+
`devrites-frontend-craft`, long-form prose follows `devrites-prose-craft`
|
|
35
|
+
([`prose-style.md`](prose-style.md)).
|
|
36
|
+
|
|
37
|
+
Detailed skill: `devrites-browser-proof`.
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
# CI/CD & automation
|
|
2
|
+
|
|
3
|
+
> Applies when: creating or changing a build/deploy pipeline or CI config.
|
|
4
|
+
|
|
5
|
+
Read this only when creating or changing a build/deploy pipeline. [`hooks.md`](hooks.md) owns local checks, [`development-workflow.md`](development-workflow.md) owns trunk health, and [`deprecation.md`](deprecation.md) owns migrations.
|
|
6
|
+
|
|
7
|
+
## Pipeline gates
|
|
8
|
+
|
|
9
|
+
- Put each check at the earliest affordable stage: editor → pre-commit → pre-push → CI.
|
|
10
|
+
- Keep batches small so failures are attributable and releases remain reversible.
|
|
11
|
+
- Run lint → type-check → unit → build → integration → audit → E2E as applicable. A red gate stops the line; fix the defect rather than disabling the rule, weakening the test, or skipping the gate. CI is the source of truth for green.
|
|
12
|
+
|
|
13
|
+
## Failure loop and ownership
|
|
14
|
+
|
|
15
|
+
Read the specific failure, fix its root cause, verify locally, then push again. Do not blind-rerun a flaky pipeline. Use `devrites-debug-recovery` when a test or build failure needs reproduction.
|
|
16
|
+
|
|
17
|
+
A designated Build Cop (a human/team role, not a pack agent) owns restoring a broken trunk by fixing or reverting, whichever is faster. Restoring trunk outranks feature work.
|
|
18
|
+
|
|
19
|
+
## Verification economy
|
|
20
|
+
|
|
21
|
+
Paid or remote validation runs once per prepared state, not per attempt: batch repairs,
|
|
22
|
+
verify locally first, and never blind-retry an infra operation that already reported
|
|
23
|
+
failure (deploy, migrate, seed) — read the failure output, fix the cause, then re-run.
|
|
24
|
+
A green check the diff cannot affect is not re-run; an expected run that is deliberately
|
|
25
|
+
skipped is named in the report, not omitted. Capture failure output as an artifact so the
|
|
26
|
+
next attempt starts from evidence, not memory.
|
|
27
|
+
|
|
28
|
+
## Deploy versus release
|
|
29
|
+
|
|
30
|
+
Keep incomplete or risky behavior disabled behind a flag so deploy and release remain separate and rollback does not require a redeploy. Every flag has an owner and a removal trigger; remove it through the [`deprecation.md`](deprecation.md) expand/contract path.
|
|
31
|
+
|
|
32
|
+
## Deployment order and configuration
|
|
33
|
+
|
|
34
|
+
- Derive an explicit order for schema, application, worker, contract, config, and flag
|
|
35
|
+
changes. Prove the system remains safe at every intermediate old/new combination;
|
|
36
|
+
"deploy together" is not an atomicity guarantee across units.
|
|
37
|
+
- Validate required configuration at startup or the earliest safe boundary. Record names,
|
|
38
|
+
owners, environments, safe defaults, and rollback values without recording secrets.
|
|
39
|
+
A staging value copied by memory is not production evidence; a configuration mismatch
|
|
40
|
+
blocks exposure until the exact target value/owner is verified.
|
|
41
|
+
- Documentation drift in commands, configuration, migration order, or rollback steps is a
|
|
42
|
+
delivery defect: update the canonical doc and execute the documented path before exposure.
|
|
43
|
+
- Migration and destructive steps apply [`data-integrity.md`](data-integrity.md); service,
|
|
44
|
+
queue, webhook, and cache changes apply
|
|
45
|
+
[`integration-reliability.md`](integration-reliability.md). Their recovery/observability
|
|
46
|
+
gates precede exposure.
|
|
47
|
+
- Feature flags separate exposure only when both states are tested, the off path preserves
|
|
48
|
+
current behavior, and disabling the flag stops the risky effect. A flag cannot undo an
|
|
49
|
+
already destructive schema or data change. Each flag names its removal trigger (full
|
|
50
|
+
rollout or kill); a flag past its trigger is dead code ([`deprecation.md`](deprecation.md)).
|
|
51
|
+
|
|
52
|
+
## Secrets
|
|
53
|
+
|
|
54
|
+
Commit `.env.example` without values; never commit real `.env` files. Inject CI secrets from the platform store and scope them to the job. Build runners do not receive production credentials.
|
|
55
|
+
|
|
56
|
+
## Slow pipelines
|
|
57
|
+
|
|
58
|
+
When wall time exceeds roughly ten minutes, measure before and after. Improve in order: cache dependencies, parallelize independent jobs, path-filter, shard the slow suite, re-tier genuinely slow tests, then consider larger runners.
|
|
59
|
+
|
|
60
|
+
## Scope
|
|
61
|
+
|
|
62
|
+
Change only the pipeline surface in scope; record wider CI redesign as follow-up work.
|