devrites 5.10.2 → 5.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +6 -0
- package/README.md +24 -10
- package/bin/devrites.mjs +2 -0
- package/docs/command-map.md +5 -4
- package/docs/skills.md +10 -4
- package/engine/internal/devritespaths/paths.go +2 -0
- package/engine/internal/hostpack/hostpack.go +39 -5
- package/engine/internal/hostpack/hostpack_test.go +27 -13
- package/engine/internal/install/apply.go +17 -4
- package/engine/internal/install/install.go +9 -2
- package/engine/internal/install/install_test.go +15 -2
- package/engine/internal/install/preflight.go +8 -2
- package/engine/internal/install/update.go +1 -1
- package/install.sh +4 -1
- package/pack/generated/README.md +4 -2
- package/pack/generated/devin/AGENTS.md +23 -0
- package/pack/generated/devin/agents/devrites-code-reviewer.md +145 -0
- package/pack/generated/devin/agents/devrites-devex-reviewer.md +126 -0
- package/pack/generated/devin/agents/devrites-doubt-reviewer.md +91 -0
- package/pack/generated/devin/agents/devrites-evidence-scout.md +77 -0
- package/pack/generated/devin/agents/devrites-frontend-reviewer.md +119 -0
- package/pack/generated/devin/agents/devrites-performance-reviewer.md +117 -0
- package/pack/generated/devin/agents/devrites-plan-drafter.md +102 -0
- package/pack/generated/devin/agents/devrites-plan-reviewer.md +144 -0
- package/pack/generated/devin/agents/devrites-proof-runner.md +76 -0
- package/pack/generated/devin/agents/devrites-retrospector.md +64 -0
- package/pack/generated/devin/agents/devrites-security-auditor.md +112 -0
- package/pack/generated/devin/agents/devrites-simplifier-reviewer.md +97 -0
- package/pack/generated/devin/agents/devrites-slice-wright.md +219 -0
- package/pack/generated/devin/agents/devrites-spec-reviewer.md +99 -0
- package/pack/generated/devin/agents/devrites-strategy-reviewer.md +102 -0
- package/pack/generated/devin/agents/devrites-test-analyst.md +97 -0
- package/pack/generated/devin/agents/devrites-upgrade-planner.md +91 -0
- package/pack/generated/devin/skills/devrites-api-interface/SKILL.md +64 -0
- package/pack/generated/devin/skills/devrites-audit/SKILL.md +51 -0
- package/pack/generated/devin/skills/devrites-browser-proof/SKILL.md +77 -0
- package/pack/generated/devin/skills/devrites-browser-proof/reference/browser-performance.md +15 -0
- package/pack/generated/devin/skills/devrites-browser-proof/reference/visual-verdict.md +34 -0
- package/pack/generated/devin/skills/devrites-debug-recovery/SKILL.md +97 -0
- package/pack/generated/devin/skills/devrites-debug-recovery/reference/build-the-loop.md +58 -0
- package/pack/generated/devin/skills/devrites-debug-recovery/reference/cleanup-and-classify.md +34 -0
- package/pack/generated/devin/skills/devrites-debug-recovery/reference/hypotheses.md +17 -0
- package/pack/generated/devin/skills/devrites-debug-recovery/reference/instrumentation.md +21 -0
- package/pack/generated/devin/skills/devrites-debug-recovery/reference/regression-test.md +30 -0
- package/pack/generated/devin/skills/devrites-debug-recovery/reference/trace.md +25 -0
- package/pack/generated/devin/skills/devrites-doubt/SKILL.md +80 -0
- package/pack/generated/devin/skills/devrites-frontend-craft/SKILL.md +87 -0
- package/pack/generated/devin/skills/devrites-frontend-craft/reference/craft.md +63 -0
- package/pack/generated/devin/skills/devrites-frontend-craft/reference/design-references.md +116 -0
- package/pack/generated/devin/skills/devrites-frontend-craft/reference/fullstack.md +46 -0
- package/pack/generated/devin/skills/devrites-frontend-craft/reference/quality-standards.md +294 -0
- package/pack/generated/devin/skills/devrites-frontend-craft/reference/reuse-first.md +53 -0
- package/pack/generated/devin/skills/devrites-frontend-craft/reference/shape.md +56 -0
- package/pack/generated/devin/skills/devrites-interview/SKILL.md +103 -0
- package/pack/generated/devin/skills/devrites-lib/SKILL.md +57 -0
- package/pack/generated/devin/skills/devrites-lib/reference/candidate-integrity.md +42 -0
- package/pack/generated/devin/skills/devrites-lib/reference/intent-map.md +64 -0
- package/pack/generated/devin/skills/devrites-lib/reference/orchestration-profiles.md +27 -0
- package/pack/generated/devin/skills/devrites-lib/reference/parallel-dispatch.md +73 -0
- package/pack/generated/devin/skills/devrites-lib/reference/reply-contract.md +88 -0
- package/pack/generated/devin/skills/devrites-lib/reference/standards/README.md +60 -0
- package/pack/generated/devin/skills/devrites-lib/reference/standards/acceptance-preserving-reslice.md +30 -0
- package/pack/generated/devin/skills/devrites-lib/reference/standards/afk-hitl.md +415 -0
- package/pack/generated/devin/skills/devrites-lib/reference/standards/agents.md +99 -0
- package/pack/generated/devin/skills/devrites-lib/reference/standards/anti-patterns.md +48 -0
- package/pack/generated/devin/skills/devrites-lib/reference/standards/browser-proof-checklist.md +24 -0
- package/pack/generated/devin/skills/devrites-lib/reference/standards/ci-cd.md +50 -0
- package/pack/generated/devin/skills/devrites-lib/reference/standards/code-navigation.md +43 -0
- package/pack/generated/devin/skills/devrites-lib/reference/standards/code-review.md +108 -0
- package/pack/generated/devin/skills/devrites-lib/reference/standards/coding-style.md +48 -0
- package/pack/generated/devin/skills/devrites-lib/reference/standards/context-hygiene.md +109 -0
- package/pack/generated/devin/skills/devrites-lib/reference/standards/core.md +167 -0
- package/pack/generated/devin/skills/devrites-lib/reference/standards/data-integrity.md +118 -0
- package/pack/generated/devin/skills/devrites-lib/reference/standards/debug-recovery.md +28 -0
- package/pack/generated/devin/skills/devrites-lib/reference/standards/definition-of-done.md +19 -0
- package/pack/generated/devin/skills/devrites-lib/reference/standards/deprecation.md +31 -0
- package/pack/generated/devin/skills/devrites-lib/reference/standards/developer-experience.md +119 -0
- package/pack/generated/devin/skills/devrites-lib/reference/standards/development-workflow.md +29 -0
- package/pack/generated/devin/skills/devrites-lib/reference/standards/documentation.md +43 -0
- package/pack/generated/devin/skills/devrites-lib/reference/standards/edge-case-trace.md +92 -0
- package/pack/generated/devin/skills/devrites-lib/reference/standards/elicitation.md +85 -0
- package/pack/generated/devin/skills/devrites-lib/reference/standards/error-handling.md +47 -0
- package/pack/generated/devin/skills/devrites-lib/reference/standards/git-workflow.md +49 -0
- package/pack/generated/devin/skills/devrites-lib/reference/standards/hooks.md +25 -0
- package/pack/generated/devin/skills/devrites-lib/reference/standards/integration-reliability.md +102 -0
- package/pack/generated/devin/skills/devrites-lib/reference/standards/loop-operations.md +85 -0
- package/pack/generated/devin/skills/devrites-lib/reference/standards/observability.md +88 -0
- package/pack/generated/devin/skills/devrites-lib/reference/standards/one-shot-actions.md +97 -0
- package/pack/generated/devin/skills/devrites-lib/reference/standards/patterns.md +68 -0
- package/pack/generated/devin/skills/devrites-lib/reference/standards/performance.md +51 -0
- package/pack/generated/devin/skills/devrites-lib/reference/standards/principles.md +42 -0
- package/pack/generated/devin/skills/devrites-lib/reference/standards/prose-style.md +123 -0
- package/pack/generated/devin/skills/devrites-lib/reference/standards/release/ship-checklist.md +8 -0
- package/pack/generated/devin/skills/devrites-lib/reference/standards/repository-topology.md +80 -0
- package/pack/generated/devin/skills/devrites-lib/reference/standards/review-checklist.md +12 -0
- package/pack/generated/devin/skills/devrites-lib/reference/standards/security-checklist.md +25 -0
- package/pack/generated/devin/skills/devrites-lib/reference/standards/security.md +202 -0
- package/pack/generated/devin/skills/devrites-lib/reference/standards/skill-authoring.md +209 -0
- package/pack/generated/devin/skills/devrites-lib/reference/standards/spec-grammar.md +197 -0
- package/pack/generated/devin/skills/devrites-lib/reference/standards/test-proof-checklist.md +13 -0
- package/pack/generated/devin/skills/devrites-lib/reference/standards/testing.md +212 -0
- package/pack/generated/devin/skills/devrites-lib/reference/standards/tooling.md +92 -0
- package/pack/generated/devin/skills/devrites-lib/reference/standards/workflow-artifacts.md +427 -0
- package/pack/generated/devin/skills/devrites-lib/reference/visual-playbooks/code.md +44 -0
- package/pack/generated/devin/skills/devrites-lib/reference/visual-playbooks/comparison.md +42 -0
- package/pack/generated/devin/skills/devrites-lib/reference/visual-playbooks/diagram.md +51 -0
- package/pack/generated/devin/skills/devrites-lib/reference/visual-playbooks/index.md +66 -0
- package/pack/generated/devin/skills/devrites-lib/reference/visual-playbooks/input.md +46 -0
- package/pack/generated/devin/skills/devrites-lib/reference/visual-playbooks/outline-template.md +106 -0
- package/pack/generated/devin/skills/devrites-lib/reference/visual-playbooks/plan.md +48 -0
- package/pack/generated/devin/skills/devrites-lib/reference/visual-playbooks/slides.md +40 -0
- package/pack/generated/devin/skills/devrites-lib/reference/visual-playbooks/table.md +42 -0
- package/pack/generated/devin/skills/devrites-lib/reference/workspace-artifact-schema.md +267 -0
- package/pack/generated/devin/skills/devrites-prose-craft/SKILL.md +74 -0
- package/pack/generated/devin/skills/devrites-prose-craft/reference/banned-phrases.md +132 -0
- package/pack/generated/devin/skills/devrites-prose-craft/reference/examples.md +131 -0
- package/pack/generated/devin/skills/devrites-prose-craft/reference/structures.md +196 -0
- package/pack/generated/devin/skills/devrites-source-driven/SKILL.md +53 -0
- package/pack/generated/devin/skills/devrites-ux-shape/SKILL.md +135 -0
- package/pack/generated/devin/skills/devrites-ux-shape/reference/brief-template.md +108 -0
- package/pack/generated/devin/skills/devrites-ux-shape/reference/visual-direction-probe.md +48 -0
- package/pack/generated/devin/skills/rite/SKILL.md +148 -0
- package/pack/generated/devin/skills/rite/reference/menu.md +48 -0
- package/pack/generated/devin/skills/rite-adopt/SKILL.md +51 -0
- package/pack/generated/devin/skills/rite-adopt/reference/adoption.md +19 -0
- package/pack/generated/devin/skills/rite-adopt/reference/anti-patterns.md +19 -0
- package/pack/generated/devin/skills/rite-autocomplete/SKILL.md +142 -0
- package/pack/generated/devin/skills/rite-autocomplete/reference/decision-policy.md +43 -0
- package/pack/generated/devin/skills/rite-autocomplete/reference/loop.md +151 -0
- package/pack/generated/devin/skills/rite-autocomplete/reference/stop-conditions.md +97 -0
- package/pack/generated/devin/skills/rite-build/SKILL.md +102 -0
- package/pack/generated/devin/skills/rite-build/reference/afk-discipline.md +148 -0
- package/pack/generated/devin/skills/rite-build/reference/anti-patterns.md +27 -0
- package/pack/generated/devin/skills/rite-build/reference/checkpoint-protocol.md +120 -0
- package/pack/generated/devin/skills/rite-build/reference/checkpoint.md +56 -0
- package/pack/generated/devin/skills/rite-build/reference/frontend-trigger.md +39 -0
- package/pack/generated/devin/skills/rite-build/reference/one-slice-cycle.md +51 -0
- package/pack/generated/devin/skills/rite-build/reference/output.md +33 -0
- package/pack/generated/devin/skills/rite-build/reference/parallel-batch.md +214 -0
- package/pack/generated/devin/skills/rite-build/reference/phase-contract.md +89 -0
- package/pack/generated/devin/skills/rite-build/reference/spec-drift-guard.md +84 -0
- package/pack/generated/devin/skills/rite-build/reference/tdd.md +27 -0
- package/pack/generated/devin/skills/rite-build/reference/wright-dispatch.md +96 -0
- package/pack/generated/devin/skills/rite-clarify/SKILL.md +98 -0
- package/pack/generated/devin/skills/rite-clarify/reference/anti-patterns.md +24 -0
- package/pack/generated/devin/skills/rite-clarify/reference/decision-coverage.md +55 -0
- package/pack/generated/devin/skills/rite-converge/SKILL.md +144 -0
- package/pack/generated/devin/skills/rite-converge/reference/anti-patterns.md +35 -0
- package/pack/generated/devin/skills/rite-converge/reference/convergence-assessment.md +65 -0
- package/pack/generated/devin/skills/rite-customize/SKILL.md +60 -0
- package/pack/generated/devin/skills/rite-define/SKILL.md +168 -0
- package/pack/generated/devin/skills/rite-define/reference/anti-patterns.md +26 -0
- package/pack/generated/devin/skills/rite-define/reference/gates.md +159 -0
- package/pack/generated/devin/skills/rite-define/reference/plan-template.md +149 -0
- package/pack/generated/devin/skills/rite-doctor/SKILL.md +68 -0
- package/pack/generated/devin/skills/rite-dogfood/SKILL.md +55 -0
- package/pack/generated/devin/skills/rite-explain/SKILL.md +152 -0
- package/pack/generated/devin/skills/rite-explain/reference/intake.md +89 -0
- package/pack/generated/devin/skills/rite-frame/SKILL.md +114 -0
- package/pack/generated/devin/skills/rite-frame/reference/failure-modes.md +66 -0
- package/pack/generated/devin/skills/rite-handoff/SKILL.md +97 -0
- package/pack/generated/devin/skills/rite-handoff/reference/handoff-template.md +44 -0
- package/pack/generated/devin/skills/rite-learn/SKILL.md +72 -0
- package/pack/generated/devin/skills/rite-plan/SKILL.md +185 -0
- package/pack/generated/devin/skills/rite-plan/reference/anti-patterns.md +34 -0
- package/pack/generated/devin/skills/rite-plan/reference/dependency-graph.md +48 -0
- package/pack/generated/devin/skills/rite-plan/reference/replan-and-repair.md +105 -0
- package/pack/generated/devin/skills/rite-plan/reference/slicing.md +168 -0
- package/pack/generated/devin/skills/rite-plan/reference/task-breakdown.md +42 -0
- package/pack/generated/devin/skills/rite-polish/SKILL.md +105 -0
- package/pack/generated/devin/skills/rite-polish/reference/adr-promotion.md +11 -0
- package/pack/generated/devin/skills/rite-polish/reference/anti-ai-slop.md +187 -0
- package/pack/generated/devin/skills/rite-polish/reference/anti-patterns.md +30 -0
- package/pack/generated/devin/skills/rite-polish/reference/backend-polish.md +80 -0
- package/pack/generated/devin/skills/rite-polish/reference/browser-polish-evidence.md +33 -0
- package/pack/generated/devin/skills/rite-polish/reference/code.md +82 -0
- package/pack/generated/devin/skills/rite-polish/reference/design-memory.md +117 -0
- package/pack/generated/devin/skills/rite-polish/reference/design-system-discovery.md +8 -0
- package/pack/generated/devin/skills/rite-polish/reference/harden-checklist.md +109 -0
- package/pack/generated/devin/skills/rite-polish/reference/ledger.md +65 -0
- package/pack/generated/devin/skills/rite-polish/reference/ui.md +137 -0
- package/pack/generated/devin/skills/rite-pov/SKILL.md +57 -0
- package/pack/generated/devin/skills/rite-pr-feedback/SKILL.md +54 -0
- package/pack/generated/devin/skills/rite-pressure-test/SKILL.md +66 -0
- package/pack/generated/devin/skills/rite-prototype/SKILL.md +104 -0
- package/pack/generated/devin/skills/rite-prove/SKILL.md +122 -0
- package/pack/generated/devin/skills/rite-prove/reference/acceptance-proof.md +88 -0
- package/pack/generated/devin/skills/rite-prove/reference/anti-patterns.md +25 -0
- package/pack/generated/devin/skills/rite-prove/reference/browser-proof.md +51 -0
- package/pack/generated/devin/skills/rite-prove/reference/failure-triage.md +43 -0
- package/pack/generated/devin/skills/rite-prove/reference/proof-ladder.md +28 -0
- package/pack/generated/devin/skills/rite-prove/reference/test-command-discovery.md +30 -0
- package/pack/generated/devin/skills/rite-quick/SKILL.md +81 -0
- package/pack/generated/devin/skills/rite-resolve/SKILL.md +98 -0
- package/pack/generated/devin/skills/rite-resolve/reference/answer-protocol.md +118 -0
- package/pack/generated/devin/skills/rite-review/SKILL.md +171 -0
- package/pack/generated/devin/skills/rite-review/reference/anti-patterns.md +32 -0
- package/pack/generated/devin/skills/rite-review/reference/cognitive-load.md +90 -0
- package/pack/generated/devin/skills/rite-review/reference/feature-scoped-review.md +26 -0
- package/pack/generated/devin/skills/rite-review/reference/five-axis-review.md +66 -0
- package/pack/generated/devin/skills/rite-review/reference/nielsen-heuristics.md +126 -0
- package/pack/generated/devin/skills/rite-review/reference/performance-checklist.md +80 -0
- package/pack/generated/devin/skills/rite-review/reference/performance-review.md +14 -0
- package/pack/generated/devin/skills/rite-review/reference/security-review.md +42 -0
- package/pack/generated/devin/skills/rite-seal/SKILL.md +74 -0
- package/pack/generated/devin/skills/rite-seal/reference/anti-patterns.md +29 -0
- package/pack/generated/devin/skills/rite-seal/reference/final-evidence.md +41 -0
- package/pack/generated/devin/skills/rite-seal/reference/go-no-go.md +29 -0
- package/pack/generated/devin/skills/rite-seal/reference/output.md +5 -0
- package/pack/generated/devin/skills/rite-seal/reference/phase-contract.md +47 -0
- package/pack/generated/devin/skills/rite-seal/reference/risk-and-rollback.md +56 -0
- package/pack/generated/devin/skills/rite-seal/reference/seal-template.md +27 -0
- package/pack/generated/devin/skills/rite-ship/SKILL.md +87 -0
- package/pack/generated/devin/skills/rite-ship/reference/anti-patterns.md +28 -0
- package/pack/generated/devin/skills/rite-ship/reference/close-out.md +68 -0
- package/pack/generated/devin/skills/rite-ship/reference/git-ship.md +120 -0
- package/pack/generated/devin/skills/rite-ship/reference/rollout.md +62 -0
- package/pack/generated/devin/skills/rite-ship/reference/ship-template.md +39 -0
- package/pack/generated/devin/skills/rite-spec/SKILL.md +149 -0
- package/pack/generated/devin/skills/rite-spec/reference/acceptance-criteria.md +31 -0
- package/pack/generated/devin/skills/rite-spec/reference/ai-spec-template.md +40 -0
- package/pack/generated/devin/skills/rite-spec/reference/anti-patterns.md +27 -0
- package/pack/generated/devin/skills/rite-spec/reference/interview-patterns.md +56 -0
- package/pack/generated/devin/skills/rite-spec/reference/investigation.md +83 -0
- package/pack/generated/devin/skills/rite-spec/reference/question-protocol.md +36 -0
- package/pack/generated/devin/skills/rite-spec/reference/references-intake.md +62 -0
- package/pack/generated/devin/skills/rite-spec/reference/spec-checklists.md +89 -0
- package/pack/generated/devin/skills/rite-spec/reference/spec-template.md +154 -0
- package/pack/generated/devin/skills/rite-spec/reference/state-workspace.md +227 -0
- package/pack/generated/devin/skills/rite-status/SKILL.md +57 -0
- package/pack/generated/devin/skills/rite-temper/SKILL.md +129 -0
- package/pack/generated/devin/skills/rite-temper/reference/anti-patterns.md +30 -0
- package/pack/generated/devin/skills/rite-temper/reference/review-dimensions.md +66 -0
- package/pack/generated/devin/skills/rite-temper/reference/scope-modes.md +53 -0
- package/pack/generated/devin/skills/rite-temper/reference/significance.md +46 -0
- package/pack/generated/devin/skills/rite-temper/reference/strategy-template.md +90 -0
- package/pack/generated/devin/skills/rite-upgrade/SKILL.md +121 -0
- package/pack/generated/devin/skills/rite-vet/SKILL.md +192 -0
- package/pack/generated/devin/skills/rite-vet/reference/anti-patterns.md +43 -0
- package/pack/generated/devin/skills/rite-vet/reference/artifacts.md +202 -0
- package/pack/generated/devin/skills/rite-vet/reference/cross-model.md +19 -0
- package/pack/generated/devin/skills/rite-vet/reference/depth.md +59 -0
- package/pack/generated/devin/skills/rite-vet/reference/eng-lenses.md +48 -0
- package/pack/generated/devin/skills/rite-vet/reference/review-axes.md +201 -0
- package/pack/generated/devin/skills/rite-watch-pr/SKILL.md +84 -0
- package/pack/generated/devin/skills/rite-zoom-out/SKILL.md +69 -0
- package/package.json +4 -2
- package/scripts/build-host-artifacts.sh +48 -5
- package/scripts/devin-generate.sh +222 -0
- package/update.sh +2 -1
|
@@ -0,0 +1,415 @@
|
|
|
1
|
+
# AFK & HITL: the pause/resume contract
|
|
2
|
+
|
|
3
|
+
Defines two modes for `rite-*`/`devrites-*` skills that may pause; main
|
|
4
|
+
callers are `/rite-build`, `/rite-status`, `/rite-resolve`, and
|
|
5
|
+
`devrites-doubt`.
|
|
6
|
+
|
|
7
|
+
The contract uses one sentinel, one queue, and one resume verb.
|
|
8
|
+
|
|
9
|
+
## Contents
|
|
10
|
+
|
|
11
|
+
- [Run modes](#run-modes)
|
|
12
|
+
- [The sentinel: `.devrites/AFK`](#the-sentinel-devritesafk)
|
|
13
|
+
- [Unattended resource envelope](#unattended-resource-envelope)
|
|
14
|
+
- [The four gates](#the-four-gates)
|
|
15
|
+
- [Option set: how every gap is presented](#option-set-how-every-gap-is-presented)
|
|
16
|
+
- [Decision ownership: search before asking](#decision-ownership-search-before-asking)
|
|
17
|
+
- [Irreversible-risk list (always pause)](#irreversible-risk-list-always-pause)
|
|
18
|
+
- [`questions.md` schema](#questionsmd-schema)
|
|
19
|
+
- [`state.md` `Awaiting human` block](#statemd-awaiting-human-block)
|
|
20
|
+
- [The resume verb: `/rite-resolve`](#the-resume-verb-riteresolve)
|
|
21
|
+
- [AFK exception for discretionary pauses](#afk-exception-for-discretionary-pauses)
|
|
22
|
+
- [Retry cap, no-progress loops, and self-resolve](#retry-cap-no-progress-loops-and-self-resolve)
|
|
23
|
+
- [What the rule does NOT cover](#what-the-rule-does-not-cover)
|
|
24
|
+
- [Cross-reference](#cross-reference)
|
|
25
|
+
|
|
26
|
+
## Run modes
|
|
27
|
+
|
|
28
|
+
- **HITL (default):** human is present. At a gap/checkpoint the skill **asks inline** via
|
|
29
|
+
the harness `AskUserQuestion` tool: a ranked **option set** (recommended first, each with
|
|
30
|
+
dimension-tagged rationale; see [Option set](#option-set-how-every-gap-is-presented)). The
|
|
31
|
+
human picks; the skill records the pick to `questions.md` (`answered`) + `decisions.md` and
|
|
32
|
+
**continues in place: no `/rite-resolve` round-trip**. `/rite-resolve` is only for answering
|
|
33
|
+
**async** (a pause that already stopped the session) or in **batch**.
|
|
34
|
+
**If the current surface has no interactive question tool** (Codex outside Plan mode:
|
|
35
|
+
`request_user_input` is Plan-mode-only.) Render the same option set as a plain numbered
|
|
36
|
+
list in chat and **end the turn**. The human's reply is the selection. Auto-picking an option
|
|
37
|
+
is **AFK's contract, gated by the `.devrites/AFK` sentinel**: a missing tool never
|
|
38
|
+
converts a HITL gap into a self-answered one.
|
|
39
|
+
- **AFK:** `.devrites/AFK` is present. For any gate AFK may auto-handle (severity in
|
|
40
|
+
`allow_gates`), the skill **auto-picks the recommended option** (option 1 of the set), records
|
|
41
|
+
it (`gate: advisory` + a `decisions.md` ADR), and continues unattended. Gates above the
|
|
42
|
+
ceiling (and every irreversible-risk item) pause and queue a `questions.md` entry for
|
|
43
|
+
`/rite-resolve`.
|
|
44
|
+
|
|
45
|
+
`.devrites/AFK` presence is authoritative for run mode; gate-deciding skills re-read
|
|
46
|
+
it at decision time. There is no `state.md` run-mode field to drift out of sync.
|
|
47
|
+
|
|
48
|
+
## The sentinel: `.devrites/AFK`
|
|
49
|
+
|
|
50
|
+
Presence = AFK active. The file body is optional YAML:
|
|
51
|
+
|
|
52
|
+
```yaml
|
|
53
|
+
max_slices: 10 # whole-workspace writer budget; seeds state.md remaining count
|
|
54
|
+
max_agents: 32 # native agent dispatches in one host activation
|
|
55
|
+
max_minutes: 120 # wall-clock minutes in one host activation
|
|
56
|
+
max_review_queue: 8 # unresolved review/gate items admitted before fan-out stops
|
|
57
|
+
# max_tokens: 200000 # optional stricter host-observed token cap
|
|
58
|
+
# max_cost_usd: 10 # optional stricter host-observed cost cap
|
|
59
|
+
notify: "ntfy.sh/my-topic" # shell command; examples: .devin/skills/rite-build/reference/afk-discipline.md
|
|
60
|
+
allow_gates: [advisory, validating] # gate severities AFK auto-handles (auto-picks the recommended option)
|
|
61
|
+
continue_sequence: true # after Seal GO, open the next recorded continuation
|
|
62
|
+
max_workspaces: 5 # workspaces one armed sequence may open
|
|
63
|
+
max_parallel: 10 # unattended default cap; `--parallel N` on this invocation wins and may rewrite only this field
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
The file is **read-only config**: never rewritten in place, except `/rite-autocomplete --parallel N` writes or replaces only `max_parallel: N`. `max_slices` is the initial
|
|
67
|
+
budget; the mutable remaining count is the `state.md` cursor
|
|
68
|
+
`afk_slices_remaining` (`AFK slices remaining: <n>` in the released bullet
|
|
69
|
+
form), owned by the controlling root. Recognize either spelling and preserve
|
|
70
|
+
the existing table or bullet presentation. Before dispatch, a configured
|
|
71
|
+
`max_slices` and any existing remaining value must be decimal nonnegative
|
|
72
|
+
integers; malformed or negative values fail closed. The pending → built state transition spends
|
|
73
|
+
exactly one slice: on the first green slice write `max_slices - 1`, otherwise
|
|
74
|
+
write `remaining - 1`, never below zero. Re-reading an already built slice does
|
|
75
|
+
not spend again. At zero, stop before the next dispatch.
|
|
76
|
+
|
|
77
|
+
An orchestrator that can derive a stricter budget only after planning may pre-seed
|
|
78
|
+
`afk_slices_remaining` in `state.md` before the first dispatch instead of rewriting the
|
|
79
|
+
sentinel. It uses the minimum of pending work and every configured/explicit cap. An
|
|
80
|
+
existing counter may be lowered but never increased or reinitialized. Once present, that state
|
|
81
|
+
counter is the effective remaining budget even when the read-only sentinel omits
|
|
82
|
+
`max_slices`.
|
|
83
|
+
|
|
84
|
+
### Sequence continuation (`continue_sequence`, `max_workspaces`)
|
|
85
|
+
|
|
86
|
+
`continue_sequence: true` lets one armed run open the next **recorded** continuation
|
|
87
|
+
after a `Seal GO` instead of stopping. Absent means `1` — the current workspace only;
|
|
88
|
+
an existing sentinel never receives the default implicitly. `max_workspaces` is the
|
|
89
|
+
sequence budget (nonnegative decimal, fail closed): spend one when a new workspace is
|
|
90
|
+
opened, never when resuming the current one. `max_slices` stays **per workspace** —
|
|
91
|
+
each new workspace's `state.md` seeds its own `afk_slices_remaining`.
|
|
92
|
+
|
|
93
|
+
The chain lives in root-owned `state.md` cursor fields, not in chat:
|
|
94
|
+
`sequence_parent` (the immediately preceding workspace slug), `sequence_position`
|
|
95
|
+
(1-based ordinal), `sequence_workspaces_remaining` (slots the chain may still
|
|
96
|
+
open after this workspace), and — on the release milestone only —
|
|
97
|
+
`sequence_role: release`. Seeding is exactly-once because the values are
|
|
98
|
+
derived, not remembered: a continuation's fields are computed from its recorded
|
|
99
|
+
parent and the parent's counter at creation, and a resumed run that finds a
|
|
100
|
+
continuation workspace missing the fields re-derives the same values from its
|
|
101
|
+
`brief.md` parent/position plus the parent's counter — never a second charge. A
|
|
102
|
+
workspace without a recorded parent/position is not a sequence member; the
|
|
103
|
+
counter only decreases, malformed values fail closed, and `0` opens nothing.
|
|
104
|
+
`sequence_role: release` makes `check candidate` and `check seal` require the
|
|
105
|
+
candidate manifest to cover the whole recorded chain — run
|
|
106
|
+
`devrites-engine state merge-manifest <slug>` before Prove.
|
|
107
|
+
|
|
108
|
+
- Only continuations recorded in the parent's `decisions.md` sequence
|
|
109
|
+
([slicing.md § Continuation workspaces](../../../rite-plan/reference/slicing.md#continuation-workspaces))
|
|
110
|
+
qualify; no recorded next entry, or the cap/review-queue bound reached, stops
|
|
111
|
+
with the winning reason.
|
|
112
|
+
- Milestones are **not** shipped: they stay sealed and unarchived in `.devrites/work/`
|
|
113
|
+
with `Next step: /rite-ship` preserved. Local `WIP(<slug>):` checkpoints still
|
|
114
|
+
land ([checkpoint.md](../../../rite-build/reference/checkpoint.md)), so the tree
|
|
115
|
+
stays clean and crash-safe.
|
|
116
|
+
- Git stays human-gated. The release ship is one disclosed plan, one literal `GO`, and
|
|
117
|
+
one native approval; it collapses the sequence's `WIP` commits into the single
|
|
118
|
+
release commit and may archive the sealed predecessors.
|
|
119
|
+
- Every human-owned, safety, access, exhaustion, and `NO-GO` condition still stops the
|
|
120
|
+
run exactly as without this field.
|
|
121
|
+
|
|
122
|
+
`max_parallel` is the unattended default batch cap only when this invocation does
|
|
123
|
+
not contain `--parallel N`; `1` forces the serial cycle only in that default
|
|
124
|
+
case. An exact `--parallel N` on `/rite-autocomplete` or `/rite-build` is the
|
|
125
|
+
batch cap for this run: do not consult leftover sentinel `max_parallel`, and do
|
|
126
|
+
not treat `max_parallel: 1` as serial. `/rite-autocomplete --parallel N` writes
|
|
127
|
+
or replaces only that field so later ticks keep the cap; `/rite-build --parallel N`
|
|
128
|
+
wins for that invocation without rewriting the sentinel. Never write `max_slices`
|
|
129
|
+
from `--max-slices`. **Failing case:** `/rite-autocomplete --parallel 5` honors a
|
|
130
|
+
leftover `max_parallel: 1` and stays serial.
|
|
131
|
+
Unattended runs take the largest eligible set ≤ that cap and recompute after
|
|
132
|
+
every completed round (serial slice or parallel integrate)
|
|
133
|
+
([parallel-batch.md § Dynamic selection and re-batching](../../../rite-build/reference/parallel-batch.md#dynamic-selection-and-re-batching)).
|
|
134
|
+
|
|
135
|
+
## Unattended resource envelope
|
|
136
|
+
|
|
137
|
+
AFK writer admission needs a bounded input queue, effective slice cap, and valid
|
|
138
|
+
`max_agents`, `max_minutes`, and `max_review_queue`. Existing sentinels
|
|
139
|
+
that declare writer admission but miss/malform these fail closed; cold resume keeps the
|
|
140
|
+
state-owned slice counter. A leftover `expires_at` is ignored and never rewritten.
|
|
141
|
+
Read-only watchers use equivalent native caps from [`loop-operations.md`](loop-operations.md).
|
|
142
|
+
|
|
143
|
+
`max_agents` counts every leaf in the native activation, including failures and
|
|
144
|
+
parallel branches; do not add dispatch telemetry to `.devrites/`. `max_review_queue`
|
|
145
|
+
counts open validating questions plus unresolved admitted Critical/Important findings.
|
|
146
|
+
Above it stop; at it run only reconciliation that reduces the queue. Optional
|
|
147
|
+
`max_tokens`/`max_cost_usd` lower enforceable native caps; if declared but unobservable, stop.
|
|
148
|
+
|
|
149
|
+
Numeric limits are nonnegative decimals. Before costly checks, fan-out, or writing,
|
|
150
|
+
run cheap readiness, reject overlap, count queue, and confirm agent/time/token/cost
|
|
151
|
+
headroom; re-check after every result. Never start one call that can exceed remaining
|
|
152
|
+
headroom. Agent/time/token/cost counters are per native activation and start fresh only
|
|
153
|
+
for a genuinely new activation. Slices, recovery attempts, and current
|
|
154
|
+
review queue remain durable/recomputed across wakes. Persist each activation stop and
|
|
155
|
+
checkpoint before notification.
|
|
156
|
+
|
|
157
|
+
New sentinels write no `expires_at` and no notification/token/cost cap.
|
|
158
|
+
Post-Vet pending count may lower slices. Existing files
|
|
159
|
+
never receive missing defaults implicitly.
|
|
160
|
+
|
|
161
|
+
To leave AFK, delete the file. The next skill invocation reverts to HITL.
|
|
162
|
+
|
|
163
|
+
## The four gates
|
|
164
|
+
|
|
165
|
+
Every `Mode: HITL` slice declares a `Gate:` and an `SLA:`. See
|
|
166
|
+
[`.devin/skills/rite-define/reference/gates.md`](../../../rite-define/reference/gates.md)
|
|
167
|
+
for the full taxonomy. Summary:
|
|
168
|
+
|
|
169
|
+
| Gate | Stakes | Pause? | SLA | AFK auto-handle when in `allow_gates`? |
|
|
170
|
+
|---|---|---|---|---|
|
|
171
|
+
| advisory | low | no | none | yes (log + proceed) |
|
|
172
|
+
| validating | medium | async | 4h | yes (build + queue, no merge until resolved) |
|
|
173
|
+
| blocking | high | sync | 15m | **no** (always pauses) |
|
|
174
|
+
| escalating | novel pattern | sync to specialist | 24h | **no** (always pauses) |
|
|
175
|
+
|
|
176
|
+
`blocking` and `escalating` always pause for HITL and for AFK `/rite-build`,
|
|
177
|
+
regardless of `allow_gates`.
|
|
178
|
+
|
|
179
|
+
**Autocomplete exception.** While `/rite-autocomplete` is the controlling
|
|
180
|
+
caller, an open `gate: blocking` question that already carries a ranked
|
|
181
|
+
recommended option (`proposed:` or option 1 labelled `(Recommended)`) is not a
|
|
182
|
+
user handoff: the orchestrator auto-picks that option through
|
|
183
|
+
`devrites-engine state resolve` and continues, including internal Spec Drift
|
|
184
|
+
Guard when the answer changes ownership or acceptance. Escalating,
|
|
185
|
+
irreversible-risk, access, and blocking questions with no recommended option
|
|
186
|
+
still pause. Putting `blocking` in `allow_gates` does not replace this resolve
|
|
187
|
+
step: an unanswered blocking question still fails Seal.
|
|
188
|
+
|
|
189
|
+
An open `gate: validating` entry is **merge-blocking by definition**: at `/rite-seal` any
|
|
190
|
+
`questions.md` entry with `gate: validating` and `status: open` is a NO-GO, regardless of
|
|
191
|
+
its behavior impact. A slice marked `built (pending review)` is **not done** until that
|
|
192
|
+
validating gate resolves.
|
|
193
|
+
|
|
194
|
+
## Option set: how every gap is presented
|
|
195
|
+
|
|
196
|
+
Wherever a gap, checkpoint, or non-trivial decision surfaces (`/rite-spec`, `/rite-clarify`, `/rite-define`,
|
|
197
|
+
`/rite-build`, `/rite-temper`, `/rite-vet`, `devrites-doubt`, `devrites-interview`), present a
|
|
198
|
+
**ranked option set**, never a single bare guess:
|
|
199
|
+
|
|
200
|
+
- **2-4 concrete options**, the **recommended one first**, labelled `(Recommended)`.
|
|
201
|
+
- Each option has a **one-line, dimension-tagged rationale**: `logic · infra · business ·
|
|
202
|
+
architecture` (add `security` / `UX` / `risk` in scope) and trade-off.
|
|
203
|
+
- Always include an escape hatch (`Something else — describe it`).
|
|
204
|
+
- With more than four materially distinct choices, first ask a discriminating question or use
|
|
205
|
+
sequential packets, then obtain final confirmation. Materially distinct options MUST NOT
|
|
206
|
+
be silently dropped, merged, or preselected to fit the UI.
|
|
207
|
+
- Recommend for project conventions, stack, scale, and domain, not a generic default.
|
|
208
|
+
|
|
209
|
+
**HITL** renders the set via `AskUserQuestion`; the human's pick resolves the gate **in place**.
|
|
210
|
+
**AFK** auto-picks option 1 for gates it may auto-handle. Record the chosen option verbatim and
|
|
211
|
+
keep the **rejected options in `questions.md`**.
|
|
212
|
+
|
|
213
|
+
## Decision ownership: search before asking
|
|
214
|
+
|
|
215
|
+
A gate is human only when its remaining choice is human-owned. First search live code,
|
|
216
|
+
project/decision docs, and authoritative dependency sources; make and record reversible
|
|
217
|
+
implementation/test choices. Ask only about product, scope, acceptance, architecture policy,
|
|
218
|
+
irreversible risk, or human-only access/action.
|
|
219
|
+
|
|
220
|
+
Objective test/build/tool failure runs bounded `devrites-debug-recovery`; fix it or record a
|
|
221
|
+
technical blocker. Never ask permission for another attempt, test, parser repair, or probe.
|
|
222
|
+
Close decisions at the earliest informed phase: product in spec, coverage in clarify,
|
|
223
|
+
scope/risk in temper, architecture/dependencies in define, and proof/toolchain in vet. Build
|
|
224
|
+
keeps only unavailable-pre-code or mandatory action-time checkpoints.
|
|
225
|
+
|
|
226
|
+
## Irreversible-risk list (always pause)
|
|
227
|
+
|
|
228
|
+
The following always invoke the checkpoint protocol, regardless of `Mode`, `Gate`, or
|
|
229
|
+
`allow_gates`:
|
|
230
|
+
|
|
231
|
+
- Destructive data migration (drop column, drop table, irreversible backfill).
|
|
232
|
+
- Auth / authz boundary change.
|
|
233
|
+
- Public API break (response shape, removed endpoint, changed status code semantics).
|
|
234
|
+
- External-service contract change.
|
|
235
|
+
- Filesystem destruction outside the workspace.
|
|
236
|
+
|
|
237
|
+
When a pause clears and you proceed with a destructive migration, a removal, or a
|
|
238
|
+
public-API break, take the **safe path** the gate stopped you for: expand→contract,
|
|
239
|
+
prove the old path unused before removing it, and a rollback for every destructive step
|
|
240
|
+
([`deprecation.md`](deprecation.md)). The gate requires the safe path; it does not
|
|
241
|
+
cancel the work.
|
|
242
|
+
|
|
243
|
+
By default, AFK widens what's *automatic*; it never widens what's *irreversible*.
|
|
244
|
+
|
|
245
|
+
Red checks remain hard non-advance build gates, but are not inherently irreversible or
|
|
246
|
+
human-owned; bounded recovery owns them.
|
|
247
|
+
|
|
248
|
+
## `questions.md` schema
|
|
249
|
+
|
|
250
|
+
Append-only. One entry per qid. Format:
|
|
251
|
+
|
|
252
|
+
```markdown
|
|
253
|
+
## q-YYYY-MM-DD-NNN
|
|
254
|
+
status: open | answered | dropped
|
|
255
|
+
slice: <slice id, e.g. 03-list-endpoint, or "spec" / "plan">
|
|
256
|
+
gate: advisory | validating | blocking | escalating
|
|
257
|
+
question: <one crisp sentence>
|
|
258
|
+
options: | # ranked option set; recommended FIRST (see "Option set")
|
|
259
|
+
1. <recommended> (Recommended) — logic: … · infra: … · business: … · architecture: …
|
|
260
|
+
2. <alternative> — <dimension-tagged rationale + trade-off>
|
|
261
|
+
3. Something else — describe it
|
|
262
|
+
proposed: <the recommended option restated — the HITL default + the AFK auto-pick>
|
|
263
|
+
raised_at: <iso>
|
|
264
|
+
answered_at: <iso, when status flips off "open">
|
|
265
|
+
answer: <chosen option (or human's verbatim reply / drop reason)>
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
Rules:
|
|
269
|
+
- `NNN` is sequential per date: the next-available 3-digit integer.
|
|
270
|
+
- `status: open` is the only state `/rite-resolve` can mutate; `answered` and `dropped`
|
|
271
|
+
are terminal.
|
|
272
|
+
- The file is the audit trail. Don't edit answered/dropped entries: open a new qid that
|
|
273
|
+
references the old one (`supersedes: q-...-OLD`) and resolve it.
|
|
274
|
+
|
|
275
|
+
AFK never authorizes destructive Git. The native host permission/sandbox
|
|
276
|
+
boundary owns any such request and requires explicit user approval.
|
|
277
|
+
|
|
278
|
+
## `state.md` `Awaiting human` block
|
|
279
|
+
|
|
280
|
+
When a HITL gate fires, `/rite-build` writes:
|
|
281
|
+
|
|
282
|
+
```markdown
|
|
283
|
+
- Status: awaiting_human
|
|
284
|
+
- Next step: /rite-resolve <qid> "<answer>"
|
|
285
|
+
|
|
286
|
+
## Awaiting human
|
|
287
|
+
- qid: <q-...>
|
|
288
|
+
- gate: <gate>
|
|
289
|
+
- question: <crisp text>
|
|
290
|
+
- proposed: <agent's tentative answer>
|
|
291
|
+
- raised_at: <iso>
|
|
292
|
+
- blocking_slices: [<slice ids that cannot advance>]
|
|
293
|
+
```
|
|
294
|
+
|
|
295
|
+
`/rite-resolve` removes the block on success and flips `Status: running`.
|
|
296
|
+
|
|
297
|
+
## The resume verb: `/rite-resolve`
|
|
298
|
+
|
|
299
|
+
Three shapes:
|
|
300
|
+
|
|
301
|
+
```
|
|
302
|
+
/rite-resolve <qid> "<answer>"
|
|
303
|
+
/rite-resolve --drop <qid> ["<reason>"]
|
|
304
|
+
/rite-resolve --batch <path-to-yaml>
|
|
305
|
+
```
|
|
306
|
+
|
|
307
|
+
`/rite-resolve` is the canonical writer for **async** resume: a gate that already paused and
|
|
308
|
+
stopped the session (an AFK blocking/escalating/irreversible queue, or a HITL pause the human
|
|
309
|
+
walked away from), plus `--batch`. In an **interactive HITL** session the skill resolves the
|
|
310
|
+
`AskUserQuestion` pick **in place** (the same `questions.md` `answered` write + `state.md`
|
|
311
|
+
clear), so you don't type `/rite-resolve` for gaps you answer live. Both paths flip
|
|
312
|
+
`status: open → answered` and clear `Awaiting human` through the **same `devrites-engine state resolve` writer**:
|
|
313
|
+
one source of truth, two entry points (live pick vs typed verb). Use the writer;
|
|
314
|
+
manual edits are never destructive-operation authority.
|
|
315
|
+
|
|
316
|
+
When `/rite-resolve` does resume a stopped session, the skill does **not** auto-run the next
|
|
317
|
+
`/rite-build`. The user types the next command explicitly so:
|
|
318
|
+
- A `/rite-plan repair` can land first if the answer changes scope.
|
|
319
|
+
- The user sees the workspace state before resuming.
|
|
320
|
+
- Each verb has one mutation; chaining is a hidden side-effect.
|
|
321
|
+
|
|
322
|
+
## AFK exception for discretionary pauses
|
|
323
|
+
|
|
324
|
+
With `.devrites/AFK`, apply decision ownership first. Accepted in-scope technical
|
|
325
|
+
corrections return to the caller for repair/verification; severity blocks acceptance,
|
|
326
|
+
not authorized repair. Never silently accept a defect or broaden existing approval.
|
|
327
|
+
|
|
328
|
+
Discretionary ceilings apply only to
|
|
329
|
+
human-owned trade-off/risk decisions; accepted technical corrections do not enter
|
|
330
|
+
these branches. Compare Suggestion/Nit/FYI→advisory, Important→validating,
|
|
331
|
+
Critical→blocking against advisory < validating < blocking < escalating:
|
|
332
|
+
|
|
333
|
+
- Within the slice's `Gate:` and `.devrites/AFK` `allow_gates`: record advisory in
|
|
334
|
+
`questions.md`, trade-off in `decisions.md`, proceed.
|
|
335
|
+
- Above ceiling, missing authority, or unapproved irreversible risk: record blocking
|
|
336
|
+
question, `Status: awaiting_human`, fire `notify:`, STOP.
|
|
337
|
+
|
|
338
|
+
Recovery uses only the [retry contract](#retry-cap-no-progress-loops-and-self-resolve).
|
|
339
|
+
|
|
340
|
+
## Retry cap, no-progress loops, and self-resolve
|
|
341
|
+
|
|
342
|
+
Owns all phase recovery, including Doubt/Vet/serial/parallel Build. Resource,
|
|
343
|
+
access, safety and irreversible-action boundaries independently stop work.
|
|
344
|
+
|
|
345
|
+
- **Fingerprint the failed invariant, not the review round.** Identify owning
|
|
346
|
+
invariant + defect mechanism + minimal reproduction/decisive failure signal.
|
|
347
|
+
DEC/DRIFT IDs, line numbers, wording and splitting one cause create no new budget.
|
|
348
|
+
- **Cap no-progress retries:** three no-progress attempts per exact causal fingerprint
|
|
349
|
+
across wright/recovery. Only a correction whose narrow recheck leaves that cause
|
|
350
|
+
open or reproduces its failure consumes an attempt.
|
|
351
|
+
Closing a prior finding with discriminating evidence is progress: resolve it,
|
|
352
|
+
do not charge. A new Critical or Important finding gets its own budget only for
|
|
353
|
+
a distinct evidenced cause. The same invariant with a different evidenced mechanism qualifies;
|
|
354
|
+
renaming/splitting an unchanged cause does not. Suggestion/Nit/FYI cannot extend
|
|
355
|
+
recovery. Initial discovery and expected test-first RED are not corrections;
|
|
356
|
+
total rounds, re-batches and distinct-finding counts never exhaust recovery.
|
|
357
|
+
- **Rechecks are scoped; late findings never reopen the round.** *Late* applies only
|
|
358
|
+
from a phase's **second** review pass (Vet 1b, Build's recheck after the first repair,
|
|
359
|
+
Review step 7); an initial pass has no late findings and every supported finding is
|
|
360
|
+
folded normally. A recheck packet
|
|
361
|
+
names the open fingerprints, the correction diff, and the dependents of each
|
|
362
|
+
changed clause/hunk; the owning reviewer's verdict covers exactly that. A finding
|
|
363
|
+
on text/code unchanged since that role's previous pass is *late*: Critical with a
|
|
364
|
+
concrete failure path → new fingerprint under this budget; otherwise recorded
|
|
365
|
+
(Plan/Vet: `eng-review.md` `## Deferred findings`; Build: `touched-files.md`
|
|
366
|
+
`## Review trail`) with severity · site · role · kind · round, and consumed by the
|
|
367
|
+
next full-inventory gate (Vet `mechanism` → one `test-plan.md` proof row; Build →
|
|
368
|
+
the `/rite-review` roster) — never by another repair round in this phase. Review
|
|
369
|
+
closes every deferred row with a labeled verdict; Seal blocks on any without one.
|
|
370
|
+
**Failing case:** round 4 finds three Important items on clauses untouched since
|
|
371
|
+
round 1 and dispatches another repair.
|
|
372
|
+
- **Separate consumptive authority from recovery.** Spent one-shot authorization
|
|
373
|
+
blocks another execution, not offline recovery. Retained evidence starts caller-owned
|
|
374
|
+
diagnosis/correction immediately; the next consumptive execution needs fresh authority.
|
|
375
|
+
- **Persist existing records.** Put fingerprint, reproduction, correction,
|
|
376
|
+
`progress: resolved|no-progress` and decisive result in `drift.md` and `evidence.md`.
|
|
377
|
+
Cold resume derives counts there; no new counter file/command.
|
|
378
|
+
- **Reconcile terminal cursors.** Retained distinct Critical/Important evidence below
|
|
379
|
+
cap resumes despite stale `Next step: none`; age/spent action authority is not exhaustion.
|
|
380
|
+
<!-- workflow-artifact-adapter: {"module":"devrites-lib/reference/standards/workflow-artifacts.md","entry":"unattended root reaches current admitted Workflow Artifact work","action":"invoke classifier; execute returned route without wright/slice charge","return":"saved lifecycle phase/action; no intermediate reply"} -->
|
|
381
|
+
- **Classify exhaustion:** human-owned contract/risk/access gaps open their gate.
|
|
382
|
+
Otherwise preserve reproduction/dead ends, set `Status: blocked` and
|
|
383
|
+
`Next step: none — technical recovery exhausted; requires new evidence or changed failure conditions`.
|
|
384
|
+
Emit no phase command, retry-permission question or `/rite-resolve`.
|
|
385
|
+
Reinvocation with unchanged cause stays blocked; it never resets the cap.
|
|
386
|
+
- **Resolve agent-owned questions first** from code/docs/decisions. Human communication
|
|
387
|
+
is for blocked environment, handover, inaccessible critical information or missing
|
|
388
|
+
credentials/permission—not writing, testing or review. Blocking/escalating/
|
|
389
|
+
irreversible gates remain.
|
|
390
|
+
|
|
391
|
+
## What the rule does NOT cover
|
|
392
|
+
|
|
393
|
+
This contract is about **human pauses**. It does not weaken or replace:
|
|
394
|
+
|
|
395
|
+
- `/rite-prove`, `/rite-review`, `/rite-seal`: feature-scoped gates that always run.
|
|
396
|
+
- Spec Drift Guard: answer that changes acceptance criteria routes through
|
|
397
|
+
`/rite-plan repair`, not silently into the slice.
|
|
398
|
+
- `evidence.md` writes: every AFK iteration still records evidence; un-recorded passes
|
|
399
|
+
are unproven at `/rite-prove`.
|
|
400
|
+
- `/clear` / `/compact` advice: context-hygiene rules are unchanged.
|
|
401
|
+
|
|
402
|
+
AFK changes which decisions are automatic. It changes nothing else.
|
|
403
|
+
|
|
404
|
+
## Cross-reference
|
|
405
|
+
|
|
406
|
+
- Skill: `/rite-resolve` (`.devin/skills/rite-resolve/SKILL.md`).
|
|
407
|
+
- Workflow integration: `/rite-build` (`.devin/skills/rite-build/SKILL.md`),
|
|
408
|
+
the readiness / HITL pre-flight stages before dispatch, and the DOUBT → PROVE
|
|
409
|
+
(fail-on-red) → RECORD stages on the wright's return
|
|
410
|
+
([`one-slice-cycle.md`](../../../rite-build/reference/one-slice-cycle.md)).
|
|
411
|
+
- Render contract: `.devin/skills/rite-build/reference/checkpoint-protocol.md`.
|
|
412
|
+
- Loop discipline: `.devin/skills/rite-build/reference/afk-discipline.md`.
|
|
413
|
+
- Gate taxonomy: `.devin/skills/rite-define/reference/gates.md`.
|
|
414
|
+
- Schema: `.devin/skills/rite-spec/reference/state-workspace.md`.
|
|
415
|
+
- Doubt's AFK exception: `.devin/skills/devrites-doubt/SKILL.md` (AFK exception section).
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
# Agent orchestration
|
|
2
|
+
|
|
3
|
+
Follow DevRites policy and [`depth profiles`](../orchestration-profiles.md).
|
|
4
|
+
|
|
5
|
+
## Authority
|
|
6
|
+
|
|
7
|
+
- Root owns scope, questions/decisions/results, `.devrites/**`, phase transitions — not product source/tests; vetted executable workflow artifacts follow [`workflow-artifacts.md`](workflow-artifacts.md).
|
|
8
|
+
- Only bounded wright writes product source/tests; others inspect an immutable candidate.
|
|
9
|
+
- Every named role runs; unavailable → HITL, never skip/substitute.
|
|
10
|
+
- 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.
|
|
11
|
+
|
|
12
|
+
## Agents
|
|
13
|
+
|
|
14
|
+
| Agent |
|
|
15
|
+
| --- |
|
|
16
|
+
| `devrites-evidence-scout` |
|
|
17
|
+
| `devrites-plan-drafter` |
|
|
18
|
+
| `devrites-upgrade-planner` |
|
|
19
|
+
| `devrites-proof-runner` |
|
|
20
|
+
| `devrites-strategy-reviewer` |
|
|
21
|
+
| `devrites-plan-reviewer` |
|
|
22
|
+
| `devrites-doubt-reviewer` |
|
|
23
|
+
| `devrites-spec-reviewer` |
|
|
24
|
+
| `devrites-code-reviewer` |
|
|
25
|
+
| `devrites-test-analyst` |
|
|
26
|
+
| `devrites-frontend-reviewer` |
|
|
27
|
+
| `devrites-security-auditor` |
|
|
28
|
+
| `devrites-performance-reviewer` |
|
|
29
|
+
| `devrites-devex-reviewer` |
|
|
30
|
+
| `devrites-simplifier-reviewer` |
|
|
31
|
+
| `devrites-retrospector` |
|
|
32
|
+
| `devrites-slice-wright` |
|
|
33
|
+
|
|
34
|
+
Files own briefs; [`parallel-dispatch.md`](../parallel-dispatch.md) owns rosters.
|
|
35
|
+
|
|
36
|
+
## Native invocation
|
|
37
|
+
|
|
38
|
+
Skills name exact fresh roles, omit native fields;
|
|
39
|
+
hosts spawn/wait/deliver. Root MUST NOT advance/claim completion before admitting required results;
|
|
40
|
+
running/orphaned/unavailable = `gap` — no root/generic substitute.
|
|
41
|
+
Workflow-named skills (e.g. devrites-source-driven) are invoked inline in the root context, never dispatched as agents.
|
|
42
|
+
|
|
43
|
+
## Source-writing boundary
|
|
44
|
+
|
|
45
|
+
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.
|
|
46
|
+
|
|
47
|
+
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.
|
|
48
|
+
|
|
49
|
+
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.
|
|
50
|
+
|
|
51
|
+
## Independence
|
|
52
|
+
|
|
53
|
+
- A fresh result sees scope/paths-diff/rubric only — never another result's or the root's conclusions, severities, expected verdicts, or edited context; seeding voids the packet.
|
|
54
|
+
- **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.
|
|
55
|
+
- A parent-context pass contributes attributed evidence but is not independent: exclude it from independent accounting and name the lost coverage.
|
|
56
|
+
- 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.
|
|
57
|
+
- 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.
|
|
58
|
+
|
|
59
|
+
## Result admission
|
|
60
|
+
|
|
61
|
+
Each required reviewer/analyst/auditor starts with exactly one:
|
|
62
|
+
`Outcome: findings`, `Outcome: no-findings`, or `Outcome: gap`.
|
|
63
|
+
|
|
64
|
+
**Canonical finding shape (C2 — all `devrites-*-reviewer` / auditor agents):**
|
|
65
|
+
|
|
66
|
+
```text
|
|
67
|
+
Outcome: <findings | no-findings | gap>
|
|
68
|
+
Finding: <severity> | <file:line or artifact section> | <observed quote/result> | <impact> | <minimum fix>
|
|
69
|
+
Basis: <files read · commands run to reach this finding>
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
- **`findings`:** each row uses the shape above; confidence 1–10 on Critical/Important.
|
|
73
|
+
Critical/Important requires 7+, exact evidence, concrete impact, and a non-empty
|
|
74
|
+
`Basis` — a correct verdict reached by an unrecorded inspection path is unproven.
|
|
75
|
+
- **`no-findings`:** `No-findings:` names checks and inspected evidence. Bare
|
|
76
|
+
pass, empty list, or “looks good” is malformed.
|
|
77
|
+
- **`gap`:** names missing/unreadable/stale input; skipped/failed required check;
|
|
78
|
+
tool/reviewer failure; or another limit. Required gaps block.
|
|
79
|
+
|
|
80
|
+
Root treats results as claims; verifies proposed Critical/Important blockers
|
|
81
|
+
against candidate. Missing fields become
|
|
82
|
+
`Unverified: <claim> — missing <proof>` and stay `gap` until verified/rejected
|
|
83
|
+
with evidence—never silently dropped/demoted. Null/timeout/failure/malformed
|
|
84
|
+
output is `gap`, never `no-findings`. Conditional `Not-applicable` must name the
|
|
85
|
+
inspected scope and why its trigger did not fire. **Failing case:** parent admits a
|
|
86
|
+
wright "done" with no `git diff --name-only` ⊆ path-contract (allowlist) observation.
|
|
87
|
+
|
|
88
|
+
## Reconciliation
|
|
89
|
+
|
|
90
|
+
Root rejects stale/out-of-scope work, dedupes by root cause, records
|
|
91
|
+
accepted conclusions, and reruns only affected proof/review. Reconciliation runs
|
|
92
|
+
only after every dispatch reaches a terminal classification
|
|
93
|
+
([parallel-dispatch.md](../parallel-dispatch.md)); findings that do not survive stay
|
|
94
|
+
visible as `withdrawn: <n> (<reason>)` in the account rather than being silently
|
|
95
|
+
dropped, so a later reader can audit what was discarded and why.
|
|
96
|
+
Route defects before correction: product/acceptance → Spec Drift Guard/Clarify;
|
|
97
|
+
architecture/slicing/proof → Plan/Vet; source/test → wright;
|
|
98
|
+
external/pre-existing → blocker/defer. Never patch downstream to hide an upstream
|
|
99
|
+
defect.
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# DevRites: universal anti-patterns
|
|
2
|
+
|
|
3
|
+
The pack-wide rationalizations the agent reaches for when discipline gets in
|
|
4
|
+
the way. Apply at every phase. Each `rite-*/reference/anti-patterns.md`
|
|
5
|
+
extends this with phase-specific items.
|
|
6
|
+
|
|
7
|
+
This file is the **single source** of the universal anti-rationalization table.
|
|
8
|
+
`core.md` points here when an excuse appears.
|
|
9
|
+
|
|
10
|
+
## Universal rationalizations
|
|
11
|
+
|
|
12
|
+
| Excuse | Rebuttal |
|
|
13
|
+
|---|---|
|
|
14
|
+
| "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. |
|
|
15
|
+
| "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. |
|
|
16
|
+
| "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. |
|
|
17
|
+
| "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). |
|
|
18
|
+
| "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. |
|
|
19
|
+
| "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. |
|
|
20
|
+
| "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. |
|
|
21
|
+
| "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. |
|
|
22
|
+
| "I observed it pass; recording is bureaucracy." | Un-recorded pass = unproven. The next phase reads `evidence.md`, not your memory. |
|
|
23
|
+
| "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. |
|
|
24
|
+
| "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. |
|
|
25
|
+
| "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`). |
|
|
26
|
+
|
|
27
|
+
## Pack-wide red flags
|
|
28
|
+
|
|
29
|
+
These show up at any phase and are equally damning regardless:
|
|
30
|
+
|
|
31
|
+
- Touching files that aren't in `touched-files.md` "while I'm here".
|
|
32
|
+
- A finding / decision / assumption recorded only in chat, not in the workspace files (it dies on `/clear`).
|
|
33
|
+
- Catching the broadest possible error and continuing past it.
|
|
34
|
+
- A test that asserts the implementation, not the behavior.
|
|
35
|
+
- A failing test deleted, skipped, `xfail`-ed, `.only`-narrowed, or loosened to make the suite pass.
|
|
36
|
+
- Commenting out code instead of deleting it.
|
|
37
|
+
- A `// TODO` left in shipped code.
|
|
38
|
+
- Adding a dependency or a second design system without rationale in `decisions.md`.
|
|
39
|
+
- A change that violates a declared project principle (`.devrites/principles.md`) with no recorded, human-approved exception.
|
|
40
|
+
- "I'll fix it in a follow-up PR" with no follow-up opened.
|
|
41
|
+
|
|
42
|
+
## Where this gets loaded
|
|
43
|
+
|
|
44
|
+
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.
|
|
45
|
+
|
|
46
|
+
## Behavioral coverage
|
|
47
|
+
|
|
48
|
+
A new behavior-shaping rebuttal needs a matching behavioral eval; prose alone does not prove the guard holds under pressure.
|
package/pack/generated/devin/skills/devrites-lib/reference/standards/browser-proof-checklist.md
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# Browser proof checklist
|
|
2
|
+
|
|
3
|
+
Compact sweep only. Numbers and failing cases live in
|
|
4
|
+
[`quality-standards.md`](../../../devrites-frontend-craft/reference/quality-standards.md)
|
|
5
|
+
§ Focus & states, § Responsive, and § Browser chrome — do not restate a shorter
|
|
6
|
+
viewport set here.
|
|
7
|
+
|
|
8
|
+
- Open the real UI (never screenshot-only); check console and network for errors.
|
|
9
|
+
- Before reading the builder's verdict, inventory the raw captures against the
|
|
10
|
+
required routes/states/viewports and candidate identity. Open each capture: a
|
|
11
|
+
wrong route, blank render, unexpected login wall, inconsistent dimensions, or
|
|
12
|
+
stale candidate is missing evidence. Recapture; until resolved, record
|
|
13
|
+
`cannot_verify` and block visual approval. A convincing narrative cannot repair it.
|
|
14
|
+
- Interactive slices capture each relevant canonical state and the canonical
|
|
15
|
+
viewport set. Omission needs a one-line `not-needed` reason; states must exist
|
|
16
|
+
in source — an unreachable state's capture proves nothing.
|
|
17
|
+
- Browser-default chrome is judged by § Browser chrome; reflow, zoom and bounded
|
|
18
|
+
two-dimensional exceptions by § Responsive. Compare to `design-brief.md` → Visual Verdict.
|
|
19
|
+
- Tooling unavailable ⇒ record fallback + limitation. Backend-only changes record
|
|
20
|
+
that disposition instead of capturing quietly; UI copy follows
|
|
21
|
+
`devrites-frontend-craft`, long-form prose follows `devrites-prose-craft`
|
|
22
|
+
([`prose-style.md`](prose-style.md)).
|
|
23
|
+
|
|
24
|
+
Detailed skill: `devrites-browser-proof`.
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# CI/CD & automation
|
|
2
|
+
|
|
3
|
+
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.
|
|
4
|
+
|
|
5
|
+
## Pipeline gates
|
|
6
|
+
|
|
7
|
+
- Put each check at the earliest affordable stage: editor → pre-commit → pre-push → CI.
|
|
8
|
+
- Keep batches small so failures are attributable and releases remain reversible.
|
|
9
|
+
- 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.
|
|
10
|
+
|
|
11
|
+
## Failure loop and ownership
|
|
12
|
+
|
|
13
|
+
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.
|
|
14
|
+
|
|
15
|
+
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.
|
|
16
|
+
|
|
17
|
+
## Deploy versus release
|
|
18
|
+
|
|
19
|
+
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.
|
|
20
|
+
|
|
21
|
+
## Deployment order and configuration
|
|
22
|
+
|
|
23
|
+
- Derive an explicit order for schema, application, worker, contract, config, and flag
|
|
24
|
+
changes. Prove the system remains safe at every intermediate old/new combination;
|
|
25
|
+
"deploy together" is not an atomicity guarantee across units.
|
|
26
|
+
- Validate required configuration at startup or the earliest safe boundary. Record names,
|
|
27
|
+
owners, environments, safe defaults, and rollback values without recording secrets.
|
|
28
|
+
A staging value copied by memory is not production evidence; a configuration mismatch
|
|
29
|
+
blocks exposure until the exact target value/owner is verified.
|
|
30
|
+
- Documentation drift in commands, configuration, migration order, or rollback steps is a
|
|
31
|
+
delivery defect: update the canonical doc and execute the documented path before exposure.
|
|
32
|
+
- Migration and destructive steps apply [`data-integrity.md`](data-integrity.md); service,
|
|
33
|
+
queue, webhook, and cache changes apply
|
|
34
|
+
[`integration-reliability.md`](integration-reliability.md). Their recovery/observability
|
|
35
|
+
gates precede exposure.
|
|
36
|
+
- Feature flags separate exposure only when both states are tested, the off path preserves
|
|
37
|
+
current behavior, and disabling the flag stops the risky effect. A flag cannot undo an
|
|
38
|
+
already destructive schema or data change.
|
|
39
|
+
|
|
40
|
+
## Secrets
|
|
41
|
+
|
|
42
|
+
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.
|
|
43
|
+
|
|
44
|
+
## Slow pipelines
|
|
45
|
+
|
|
46
|
+
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.
|
|
47
|
+
|
|
48
|
+
## Scope
|
|
49
|
+
|
|
50
|
+
Change only the pipeline surface in scope; record wider CI redesign as follow-up work.
|