@ritualai/cli 0.36.28 → 0.36.36
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/package.json +1 -1
- package/skills/claude-code/ritual/.ritual-bundle.json +3 -3
- package/skills/claude-code/ritual/SKILL.md +7 -3
- package/skills/claude-code/ritual/references/build-flow.md +130 -88
- package/skills/claude-code/ritual/references/cli-output-contract.md +4 -4
- package/skills/claude-code/ritual/references/lite-flow.md +131 -89
- package/skills/codex/ritual/.ritual-bundle.json +3 -3
- package/skills/codex/ritual/SKILL.md +7 -3
- package/skills/codex/ritual/references/build-flow.md +130 -88
- package/skills/codex/ritual/references/cli-output-contract.md +4 -4
- package/skills/codex/ritual/references/lite-flow.md +131 -89
- package/skills/cursor/ritual/.ritual-bundle.json +3 -3
- package/skills/cursor/ritual/SKILL.md +7 -3
- package/skills/cursor/ritual/references/build-flow.md +130 -88
- package/skills/cursor/ritual/references/cli-output-contract.md +4 -4
- package/skills/cursor/ritual/references/lite-flow.md +131 -89
- package/skills/gemini/ritual/.ritual-bundle.json +3 -3
- package/skills/gemini/ritual/SKILL.md +7 -3
- package/skills/gemini/ritual/references/build-flow.md +130 -88
- package/skills/gemini/ritual/references/cli-output-contract.md +4 -4
- package/skills/gemini/ritual/references/lite-flow.md +131 -89
- package/skills/kiro/ritual/.ritual-bundle.json +3 -3
- package/skills/kiro/ritual/SKILL.md +7 -3
- package/skills/kiro/ritual/references/build-flow.md +130 -88
- package/skills/kiro/ritual/references/cli-output-contract.md +4 -4
- package/skills/kiro/ritual/references/lite-flow.md +131 -89
- package/skills/vscode/ritual/.ritual-bundle.json +3 -3
- package/skills/vscode/ritual/SKILL.md +7 -3
- package/skills/vscode/ritual/references/build-flow.md +130 -88
- package/skills/vscode/ritual/references/cli-output-contract.md +4 -4
- package/skills/vscode/ritual/references/lite-flow.md +131 -89
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ritualai/cli",
|
|
3
|
-
"version": "0.36.
|
|
3
|
+
"version": "0.36.36",
|
|
4
4
|
"description": "Ritual CLI — scaffold AI coding agent skills + register MCP servers. Connects Claude Code, Cursor, Windsurf, Kiro, Gemini CLI, VS Code/Copilot, and Codex to Ritual Cloud.",
|
|
5
5
|
"private": false,
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -3,7 +3,8 @@ name: ritual
|
|
|
3
3
|
description: "Use when an engineer wants a coding agent to plan or build a feature, refactor, or implementation-heavy change that depends on context the agent can't infer on its own — strategic intent, constraints, prior decisions, and trade-offs that live in the user's head. Ritual runs a structured exploration to surface that context through targeted discovery questions, combines it with codebase signals and prior explorations, and delivers a validated build brief (sub-problems, recommendations, dependencies) — additional context to fold into plan mode before the agent writes code. Prefer this over jumping straight to implementation or plan mode when the problem is ambiguous, cross-cutting, or has non-obvious constraints. Subcommands: build (full planning-to-sync cycle — default for new features), resume (continue an in-flight exploration), lineage (file-path KG history — what decisions shaped this code), context-pulse (readiness and context-debt scoring — is this safe to build yet?)."
|
|
4
4
|
argument-hint: "[subcommand] <args> (e.g. 'build Reduce T2 churn in Q3', 'resume', 'lineage src/checkout/views.py', 'context-pulse Add billing export')"
|
|
5
5
|
user-invocable: true
|
|
6
|
-
stamp:
|
|
6
|
+
stamp: c082a0648fbd
|
|
7
|
+
cli_version: 0.36.36
|
|
7
8
|
---
|
|
8
9
|
|
|
9
10
|
# /ritual
|
|
@@ -24,8 +25,11 @@ Do not reintroduce `/ritual recon`. Use plain-language repo inspection, `/ritual
|
|
|
24
25
|
<!-- skill-options:no-gate-change: grounding rule adds no [USER PAUSE] gate or options; read-before-claim discipline only -->
|
|
25
26
|
|
|
26
27
|
**Skill freshness (once per session, silent unless stale):** this file's frontmatter may carry a
|
|
27
|
-
`stamp:` value (injected when the bundle was built — absent on
|
|
28
|
-
`mcp__ritual__ping` of a session, pass
|
|
28
|
+
`stamp:` value and a `cli_version:` value (both injected when the bundle was built — absent on
|
|
29
|
+
dev/source copies). On the FIRST `mcp__ritual__ping` of a session, pass the stamp as `skill_stamp`
|
|
30
|
+
and, when present, the `cli_version:` value as `cli_version`. This is a silent provenance handshake:
|
|
31
|
+
it lets the server record which skill content + CLI version is driving the session, so support can
|
|
32
|
+
later tell a stale-skill issue from an old-CLI issue from a current-code bug. If the response says
|
|
29
33
|
`skillFreshness: "stale"`, relay its one-line hint ("Skill update available — run
|
|
30
34
|
`ritual init --skills-only` to refresh") exactly once, no pause, and continue with the current flow.
|
|
31
35
|
No stamp, or `in-sync`/`unknown` → say nothing. Never block on this.
|
|
@@ -73,6 +73,41 @@ Pausing discipline is still load-bearing — every `[USER PAUSE]` later in the f
|
|
|
73
73
|
|
|
74
74
|
Every message should be the prescribed gate copy (rail + content + CTA) — terse, plain, no preamble, no sign-off commentary.
|
|
75
75
|
|
|
76
|
+
<!-- skill-options:no-gate-change: 2026-06-16 voice/copy polish — adds the Copy rules block, plainer overlap/workspace/verification/discovery render copy, and a causal pulse gloss. No tracked pause gate, option token, or Step header is added, removed, or renamed (structural baseline unchanged: 22 pauses / 26 steps). -->
|
|
77
|
+
|
|
78
|
+
**Copy rules (the calm-CLI-wizard contract — every gate obeys these):**
|
|
79
|
+
1. **Never print process/eval labels.** No `GATE N`, no `Step N`, no `Auto-decision: …`, no `LLM confidence`, no async-polling-contract talk. The rail already shows where we are — use the rail or a compact header (`Ritual build · 2/6 Scope`), never both, and never a `GATE N` banner.
|
|
80
|
+
2. **One decision per message.** Never bundle two gates (e.g. workspace-bind + overlap check) into one visible block. Render one gate, take the reply, then the next.
|
|
81
|
+
3. **End every decision gate with one clear CTA line.** A single `Reply …` / `Next: …` line, not a paragraph of options.
|
|
82
|
+
4. **Lead with "Recommended: …"** instead of multi-line justification. State the recommendation; don't explain why across several lines.
|
|
83
|
+
5. **Status updates are one sentence, no rail** (unless the stage changed). "Still preparing the brief — retrying safely." — never "Timeout on generate call — polling status (per async-polling contract)."
|
|
84
|
+
6. **Use user nouns, not internal shorthand:** workspace history (not KG), build requirements (not RB list), follow-ups (not deferrals), recommendations (not recs), signed-in user (not principal), "saves this selection" (not "commits the set"), strong/likely/possible match (not a confidence %).
|
|
85
|
+
7. **Hide mechanism unless it changes what the user should do.** Names of engine internals, scoring tiers, citation ids, and contracts stay out of gate copy.
|
|
86
|
+
8. **Only three kinds of message may be user-visible — nothing else (allowlist, load-bearing).** Between gates you output EITHER nothing, OR exactly one approved status line, OR the next gate (which OPENS with its rail — no preamble before it). Never narrate machinery: no "I'll read the reference files…", no "Classifying the job…", no "Running silent recon…", no "Polling / Fetching / Computing / Committing / Submitting / Triggering …", no "skipping … silently", no step numbers, no tool / schema / phase names. The **only** status lines that may appear between gates — render one of these verbatim, or stay silent:
|
|
87
|
+
- `Generating discovery questions…`
|
|
88
|
+
- `Saving selected questions…`
|
|
89
|
+
- `Answering {N} questions from the codebase…`
|
|
90
|
+
- `{N} answers saved. Generating recommendations…`
|
|
91
|
+
- `Generating recommendations…`
|
|
92
|
+
- `Recommendations ready.`
|
|
93
|
+
- `Requirements ready.`
|
|
94
|
+
- `Still generating…` / `Still preparing…` (while a slow step runs)
|
|
95
|
+
- `No related prior runs in this workspace — starting a new run.` (empty-overlap case only)
|
|
96
|
+
|
|
97
|
+
A gate must OPEN with its rail. Do **not** print "Computing the suggested 12…", "Rendering the landing", or any "here's what I'm about to show you" line before the rail. And never advance the rail to a stage that hasn't started — mark a stage active (●) only once its work is actually running. (Anything outside these three shapes is caught by the behavioral eval's `no_render_leaks` allowlist.)
|
|
98
|
+
|
|
99
|
+
**Render-allowlist precedence (load-bearing — this rule outranks every example below).** This allowlist overrides every local example in the rest of this file. If a later section says to "tell the user", "emit one line", "print", "surface", or "render" a status that is **not** in the list above, treat that instruction as **stale** and do not render it — unless it is a full gate template that begins with the rail. **Never render transition narration after a user reply.** After any reply, the next visible message is exactly one of: the next gate, one approved status line, or nothing. A line that announces what you just did or are about to do ("Workspace selected. Now checking…", "Moving to scope", "Job confirmed. Now…") is forbidden even though no example prescribes it — the rail already shows where we are.
|
|
100
|
+
|
|
101
|
+
(These are enforced on authored copy by `scripts/check-skill-voice.mjs`; agent-invented violations — like the ones above — are caught by the behavioral eval's `no_render_leaks` linter reading the rendered snapshots.)
|
|
102
|
+
|
|
103
|
+
<!-- skill-options:no-gate-change: 2026-06-16 round-2 leak polish — adds voice rule #8 (no machinery narration between gates), plainer job-gate CTA + brief-handoff copy, tightened ordering-barrier wording. No tracked pause gate, option token, or Step header is added, removed, or renamed (structural baseline unchanged: 22 pauses / 26 steps). -->
|
|
104
|
+
|
|
105
|
+
<!-- skill-options:no-gate-change: 2026-06-16 round-3 leak polish — turns voice rule #8 into a render allowlist (gate | approved status | nothing) with the verbatim status list; compacts the Job gate to one validation sentence; plainer workspace/overlap/rec-CTA copy; accept-recs screen keeps the next stage ○ not ●. Copy + behavioral rules only — no tracked pause gate, option token, or Step header is added, removed, or renamed (structural baseline unchanged: 22 pauses / 26 steps). -->
|
|
106
|
+
|
|
107
|
+
<!-- skill-options:no-gate-change: 2026-06-16 vocab cleanup — de-jargons internal labels the agent was parroting ("ordering barrier" → "before the Job gate is confirmed"; "silent recon" / "codebase recon" → "reading the codebase"). Wording only — no tracked pause gate, option token, or Step header is added, removed, or renamed (structural baseline unchanged: 22 pauses / 26 steps). -->
|
|
108
|
+
|
|
109
|
+
<!-- skill-options:no-gate-change: 2026-06-16 allowlist-precedence pass — adds the render-allowlist precedence clause + no-transition-narration rule to voice rule #8, expands the approved-status list (Saving selected questions / Requirements ready / empty-overlap line), and normalizes conflicting local examples (Step 4 prior-work callout, Step 5.7 internal-only heading, discovery-landing copy, sub-problem parenthetical removed, categoryName grouping key, "skip silently" → "no user-visible output", resume picker "explorations" → "prior runs"). Copy + behavioral only — no tracked pause gate, option token, or Step header is added, removed, or renamed (structural baseline unchanged: 22 pauses / 26 steps). -->
|
|
110
|
+
|
|
76
111
|
**Per-agent indicators** (informational, for the SKILL's own awareness — NOT to gate behavior):
|
|
77
112
|
|
|
78
113
|
| Agent | Where the mode shows up |
|
|
@@ -106,7 +141,7 @@ If the user types `always audit for this build` mid-flow at the Step 9.6 prompt,
|
|
|
106
141
|
Persist `auditMode` to `Exploration.metadata.auditMode` at `create_exploration` time (additive JSONB key — no schema migration) so `/ritual resume <exploration-id>` picks up the same mode the original build started with, and `/ritual lineage <exploration-id>` can render which gates ran + their outcomes.
|
|
107
142
|
|
|
108
143
|
<!-- lite:keep-start -->
|
|
109
|
-
<!-- skill-options:no-gate-change: 2b (clarifying question) + 2c (generic
|
|
144
|
+
<!-- skill-options:no-gate-change: 2b (low-confidence clarifying question — server sets clarifyingQuestion only when confidence <20% or it defaulted) + 2c (confident generic — accept and proceed) are COPY variants of the same gate; options are unchanged (proceed | name-the-job; 2b adds answer-the-question, which is a name-the-job correction) -->
|
|
110
145
|
#### Step 0.7 — The Job gate: classify the job to be done
|
|
111
146
|
|
|
112
147
|
**The FIRST tool call of a fresh build.** The server — not you — classifies the user's raw ask into
|
|
@@ -120,16 +155,24 @@ When this gate runs:
|
|
|
120
155
|
(the user describes what they want to build), run this gate before continuing.
|
|
121
156
|
- Resume paths (Step 1.5 → resume) → skip this gate entirely; the exploration's job is already set.
|
|
122
157
|
|
|
158
|
+
<!-- skill-options:no-gate-change: ordering barrier + overlap-render copy cleanup — adds a behavioral rule and rewrites prescribed render copy; adds/removes no tracked pause gate, option token, or Step header -->
|
|
159
|
+
|
|
160
|
+
**Before the Job gate is confirmed (load-bearing, forbidden behavior — this rule is internal; never name it to the user).** For `/ritual build <ask>`, `classify_work_item` is the FIRST tool call, and **until the Job gate is confirmed you must NOT**: read `.ritual/config.json`, call `list_workspaces`, or mention workspace/config state. Workspace selection (Step 1) begins ONLY after the Job gate is confirmed. Narrating the upcoming step — e.g. *"Now I have the classification. No `.ritual/config.json` found, so I'll list workspaces next…"* — is a forbidden process-leak: render the Job gate's prescribed copy and nothing else (no plan narration, no "I'll … next"). (The classifier needs no workspace context; passing one is unnecessary.) This rule only constrains what you may inspect and say *before* confirmation — the normal gate rules govern pausing/turn-handling, unchanged.
|
|
161
|
+
|
|
123
162
|
1. **Call `mcp__ritual__classify_work_item`** with `raw_input` = the user's ask, verbatim. Do NOT
|
|
124
163
|
classify yourself, do NOT pre-filter to development jobs. It returns
|
|
125
|
-
`{ jtbd, workItemLabel, deliverableTemplate, why, confidence, isGenericFallback, personaCoverage }`.
|
|
164
|
+
`{ jtbd, workItemLabel, deliverableTemplate, why, confidence, isGenericFallback, clarifyingQuestion?, personaCoverage }`.
|
|
126
165
|
`isGenericFallback` (and `confidence`) are the typed-uncertainty signal: when it's `true`, the
|
|
127
166
|
result is the catch-all (`build-feature` / `produce-deliverable`) or the classifier wasn't sure —
|
|
128
|
-
it is NOT a confident match, and which render variant you use in step 2 depends on it.
|
|
167
|
+
it is NOT a confident match, and which render variant you use in step 2 depends on it. On that
|
|
168
|
+
generic path the response also carries `clarifyingQuestion` — a plain-language question generated
|
|
169
|
+
from the user's ask, which step 2b renders verbatim to disambiguate toward a specific job.
|
|
129
170
|
|
|
130
171
|
2. **Render the validation prompt** (rail stage `Job`). This gate is a plain-language VALIDATION of
|
|
131
172
|
what you're about to build: restate the ask + the matched job in the user's words, then let them
|
|
132
|
-
confirm or correct.
|
|
173
|
+
confirm or correct. Route to a variant by the response: a **`clarifyingQuestion`** present → **2b**
|
|
174
|
+
(we're genuinely unsure — ask, but let them proceed); else `isGenericFallback` true → **2c** (a
|
|
175
|
+
confident generic build — accept and proceed); else → **2a** (a confident specific match).
|
|
133
176
|
|
|
134
177
|
**2a — Confident match** (`isGenericFallback` is `false`): the classifier matched a specific job.
|
|
135
178
|
|
|
@@ -137,23 +180,22 @@ When this gate runs:
|
|
|
137
180
|
Ritual build
|
|
138
181
|
● Job ○ Scope ○ Discovery ○ Recommendations ○ {Deliverable} ○ Implementation (Your agent)
|
|
139
182
|
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
Once you run the exploration and review recommendations, a {deliverableTemplate} will be
|
|
143
|
-
created as context for your coding agent.
|
|
183
|
+
Ritual will produce a {deliverableTemplate} for {restate the ask in one short clause}.
|
|
144
184
|
|
|
145
|
-
Reply `proceed`
|
|
146
|
-
job actually is.
|
|
185
|
+
Reply `proceed` if that's right, or tell me what to adjust.
|
|
147
186
|
```
|
|
148
187
|
|
|
149
|
-
**2b —
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
188
|
+
**2b — Genuinely unsure: ask, but let them proceed** (the response carries a **`clarifyingQuestion`**
|
|
189
|
+
— the server sets it ONLY when it was essentially guessing: numeric confidence below 20, or it
|
|
190
|
+
failed to classify and defaulted). A generic result alone does NOT land here — only a *low-confidence*
|
|
191
|
+
one does; a confident generic build goes to **2c**. The clarifying question is a single plain-language
|
|
192
|
+
question the server generated FROM the user's specific ask. **Render it verbatim** — it is grounded in
|
|
193
|
+
their words and leak-free. Do not rephrase it, do not append a menu, do not mention classification /
|
|
194
|
+
jobs / categories / confidence. The user has TWO ways out: answer to focus it, OR reply `proceed` to
|
|
195
|
+
continue with the deliverable. **Leak rule (load-bearing):** the rendered copy must NEVER say
|
|
196
|
+
"generic", "I couldn't classify", "fallback", "catch-all", or otherwise reveal that classification was
|
|
197
|
+
uncertain — that is internal state. Present it as a normal question about their ask. (See
|
|
198
|
+
`loud-fallback-escalation.md`.)
|
|
157
199
|
|
|
158
200
|
```text
|
|
159
201
|
Ritual build
|
|
@@ -161,34 +203,35 @@ When this gate runs:
|
|
|
161
203
|
|
|
162
204
|
You're looking to: {restate the ask in one short clause}
|
|
163
205
|
|
|
164
|
-
|
|
165
|
-
better when I know what KIND of work it is. Which is closest (or say it in your own words)?
|
|
166
|
-
• A coding-agent / MCP / skill capability — tooling the agent itself uses
|
|
167
|
-
• A backend service or API
|
|
168
|
-
• A frontend / UI feature
|
|
169
|
-
• A refactor, migration, or infra / platform change
|
|
170
|
-
• Something else — tell me in a sentence
|
|
206
|
+
{clarifyingQuestion — verbatim}
|
|
171
207
|
|
|
172
|
-
|
|
208
|
+
Answer in a sentence — or reply `proceed` and I'll continue with a {Deliverable}.
|
|
173
209
|
```
|
|
174
210
|
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
211
|
+
(Rare degraded case — you reached 2b but `clarifyingQuestion` is missing: ask which KIND of work it
|
|
212
|
+
is, with the same `proceed` option — • a coding-agent / MCP / skill capability • a backend service
|
|
213
|
+
or API • a frontend / UI feature • a refactor, migration, or infra change • something else, in your
|
|
214
|
+
own words.)
|
|
215
|
+
|
|
216
|
+
If the user ANSWERS, call `mcp__ritual__classify_work_item` AGAIN with the same `raw_input` plus
|
|
217
|
+
`correction` = their reply (and `previous_jtbd`), then re-render: **2a** if it now matched a specific
|
|
218
|
+
job, otherwise **2c**. If the user replies `proceed`, go straight to **2c** (accept the generic).
|
|
178
219
|
|
|
179
|
-
**2c —
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
220
|
+
**2c — Accept and proceed** (`isGenericFallback` is `true` with NO `clarifyingQuestion` — a
|
|
221
|
+
confident-enough generic build — OR the user chose to proceed from 2b, OR a re-classification is still
|
|
222
|
+
generic): do NOT interrogate. Present the deliverable as a normal accept-and-proceed — **same clean
|
|
223
|
+
shape as 2a**. Internally the job stays generic and is renamable later, but **the rendered copy must
|
|
224
|
+
NEVER say "generic", "couldn't classify", "fallback", or otherwise reveal that** — that is internal
|
|
225
|
+
state. Just name what Ritual will produce for their ask. (Never show a function-specific deliverable
|
|
226
|
+
like "Frontend Web" for an unclassified build — only the function-agnostic `Feature Brief`.)
|
|
183
227
|
|
|
184
228
|
```text
|
|
185
229
|
Ritual build
|
|
186
230
|
● Job ○ Scope ○ Discovery ○ Recommendations ○ Feature Brief
|
|
187
231
|
|
|
188
|
-
|
|
189
|
-
I'll treat this as a generic build — deliverable: Feature Brief. You can rename the job later.
|
|
232
|
+
Ritual will produce a {Deliverable} for {restate the ask in one short clause}.
|
|
190
233
|
|
|
191
|
-
Reply `proceed` to
|
|
234
|
+
Reply `proceed` if that's right, or tell me what to focus on.
|
|
192
235
|
```
|
|
193
236
|
|
|
194
237
|
Do not render `personaCoverage` — persona representation is handled server-side now; only surface
|
|
@@ -245,10 +288,10 @@ Resolution order:
|
|
|
245
288
|
|
|
246
289
|
<!-- skill-options:no-gate-change: adds explainer prose to the existing workspace-pick gate; options and pause unchanged -->
|
|
247
290
|
|
|
248
|
-
>
|
|
249
|
-
> A workspace
|
|
291
|
+
> This repo isn't connected to a workspace yet.
|
|
292
|
+
> A workspace keeps the context and reasoning Ritual needs for future runs.
|
|
250
293
|
>
|
|
251
|
-
>
|
|
294
|
+
> Where should Ritual save this run?
|
|
252
295
|
> {numbered list}
|
|
253
296
|
|
|
254
297
|
**[USER PAUSE]** for selection.
|
|
@@ -348,7 +391,7 @@ Steps:
|
|
|
348
391
|
|
|
349
392
|
If `raw_input` is present, frame this as an overlap/continuation check before starting fresh:
|
|
350
393
|
|
|
351
|
-
> I see {N}
|
|
394
|
+
> I see {N} prior run{s} in this workspace:
|
|
352
395
|
>
|
|
353
396
|
> **{state_glyph} {state_label}** ({count})
|
|
354
397
|
>
|
|
@@ -605,25 +648,27 @@ Steps:
|
|
|
605
648
|
|
|
606
649
|
- **If `candidates.length === 0`**: silently proceed to Step 2. Don't mention the overlap check happened. The whole point of the two-tier filter is silence in the common case.
|
|
607
650
|
|
|
608
|
-
|
|
651
|
+
<!-- skill-options:no-gate-change: 2026-06-16 overlap-gate copy — disambiguates it from the workspace picker (anchors "Using workspace:", drops "exploration"/"overlap" headline, names continue/inspect/new). Displayed start-fresh verb changes proceed→`new` but `proceed` stays an accepted silent alias; the pause, the three semantic options (resume/details/start-fresh), and the structural baseline (22 pauses / 26 steps) are unchanged. -->
|
|
609
652
|
|
|
610
|
-
|
|
653
|
+
- **If `candidates.length > 0`**: surface a COMPACT callout BEFORE moving to Step 2 — a match list + one recommendation + one CTA. No URLs, no per-candidate "why it overlaps" essay, no future field names:
|
|
654
|
+
|
|
655
|
+
> Using workspace: {workspace.name}.
|
|
656
|
+
>
|
|
657
|
+
> I found related prior runs in this workspace. You can continue one, inspect one, or start a new run.
|
|
611
658
|
>
|
|
612
|
-
> {for each candidate (in order, strongest first):}
|
|
613
|
-
> **{candidate.name}**
|
|
614
|
-
>
|
|
615
|
-
> - Why I think it overlaps: {candidate.llmRationale}
|
|
616
|
-
> - URL: `https://app.ritualapp.cloud/e/{candidate.explorationId}`
|
|
659
|
+
> {for each candidate (in order, strongest first), numbered from 1:}
|
|
660
|
+
> {N}. **{candidate.name}** — {candidate.matchLabel}
|
|
661
|
+
> {candidate.problemStatement, first ~100 chars, one line}
|
|
617
662
|
> {endfor}
|
|
618
663
|
>
|
|
619
|
-
>
|
|
620
|
-
>
|
|
621
|
-
|
|
622
|
-
|
|
664
|
+
> Recommended: continue one if it's the work you meant.
|
|
665
|
+
> Reply `resume 1`, `details 1`, or `new` to start a new run.
|
|
666
|
+
|
|
667
|
+
This gate looks like the workspace picker but isn't — the workspace is already chosen (anchor it with the `Using workspace:` line), and this screen is only about reusing related prior work vs. starting fresh. Do NOT headline it with "exploration" or "overlap". `check_exploration_overlap` returns `matchLabel` as plain language (`strong match` / `likely match` / `possible match`) — render it verbatim; the raw model confidence is projected out, so there is no number to surface. The model's `whyOverlaps` rationale and the exploration URL are NOT rendered at the gate — they live behind `details {N}`.
|
|
623
668
|
|
|
624
|
-
-
|
|
625
|
-
-
|
|
626
|
-
-
|
|
669
|
+
- `resume {N}`: treat the chosen one as the resumed exploration (same as Step 1.5 step 5 — jump to the right downstream step based on its state badge).
|
|
670
|
+
- `new` (display this verb; accept `proceed` as a silent alias): continue to Step 2 (a new exploration; the relationship to the candidates is captured automatically server-side — do not narrate that).
|
|
671
|
+
- `details {N}`: show the chosen exploration's full state via `mcp__ritual__get_exploration` (+ `get_recommendations` if any), including `whyOverlaps` and the URL, then re-render the compact callout above.
|
|
627
672
|
|
|
628
673
|
**Calibration:** the threshold for surfacing is conservative — the agent is biased toward "miss not false-flag" (you'd rather silently skip a real overlap than noisily prompt the user when there isn't one). If you DO see this prompt, take it seriously — it's likely there's real overlap.
|
|
629
674
|
|
|
@@ -782,12 +827,12 @@ LLM call, ~5–10s. Returns 5–6 sub-problems — different framing axes the sy
|
|
|
782
827
|
|
|
783
828
|
**If the response includes `kg_context_used` with `implementationCount > 0`:** surface this to the user BEFORE presenting the considerations. It's the visible signal that prior shipped work shaped this draft.
|
|
784
829
|
|
|
785
|
-
>
|
|
830
|
+
> Prior Ritual work on these files may shape this draft:
|
|
786
831
|
> - **"Anonymous checkout opt-in"** (shipped 2026-04-12) · 1 open deferral
|
|
787
832
|
> - **"Payment-method routing"** (shipped 2026-03-22)
|
|
788
833
|
> - **"Session-data persistence"** (shipped 2026-02-08)
|
|
789
834
|
>
|
|
790
|
-
>
|
|
835
|
+
> The sub-problems below account for them.
|
|
791
836
|
|
|
792
837
|
(Drop the per-exploration decision count from this listing — recommendations + ship status are the user-facing signals, not decision counts. Keep `· N open deferral{s}` when `deferrals > 0` since open deferrals are scope-warning notes the user cares about. If `deferrals === 0`, just show `(shipped {date})` with no trailing segment.)
|
|
793
838
|
|
|
@@ -806,9 +851,6 @@ Solving for these sub-problems
|
|
|
806
851
|
|
|
807
852
|
2. {Title}
|
|
808
853
|
{Short explanation, wrapped for terminal width.}
|
|
809
|
-
|
|
810
|
-
(Refine scope at the problem-frame step — say "drop {N}", "add {angle}",
|
|
811
|
-
or "focus on {N},{M}" when you see the problem statement.)
|
|
812
854
|
```
|
|
813
855
|
|
|
814
856
|
Only the title line gets the number. Put a blank line between candidates. Do not show version labels like `(v1)` in CLI output. Do NOT include a "Reply with…" prompt or a `[USER PAUSE]` here — the next user-facing gate is the problem statement (Step 5).
|
|
@@ -910,7 +952,9 @@ When the user locks the frame, store the final text as `problem_statement` for S
|
|
|
910
952
|
|
|
911
953
|
**No pulse here.** The context pulse appears only from the curate-questions step onward (cli-output-contract § Inline pulses) — early on the score is low/noisy and the line clutters the gate. The first pulse is at Step 7.4.
|
|
912
954
|
|
|
913
|
-
#### Step 5.7 —
|
|
955
|
+
#### Step 5.7 — Context grounding (internal only — runs AFTER the frame locks)
|
|
956
|
+
|
|
957
|
+
**Never render this section's title, its step number, or the word "recon" to the user.** This step produces ZERO user-visible output — no "running…", no "grounding…", no "reading the codebase…". It happens between the problem-frame gate and the first product output; the user sees nothing until the next gate or an approved status line.
|
|
914
958
|
|
|
915
959
|
**Skip only if the user explicitly asks ("just generate, don't read the code") OR if you're operating outside a codebase context.**
|
|
916
960
|
|
|
@@ -1140,7 +1184,7 @@ Keep the list focused. 5–10 is the sweet spot; >20 dilutes the KG signal.
|
|
|
1140
1184
|
|
|
1141
1185
|
Generate a short name (≤60 chars) from the scope — typically the noun phrase, not the full HMW. E.g. "Reduce T2 customer churn in Q3" → name `T2 churn reduction (Q3)`.
|
|
1142
1186
|
|
|
1143
|
-
|
|
1187
|
+
Read the codebase silently (Step 5.7) first, then create the exploration — the job was already confirmed at the Step 0.7 Job gate, so do not add a *further* confirmation here. If a name is ambiguous, **choose the shortest clear noun phrase and continue without pausing** — the name is editable later and shouldn't become a decision gate. Do NOT rely on "proceed on Enter" or empty input in agent chat (see `references/cli-output-contract.md` § Surface-aware continuation prompts).
|
|
1144
1188
|
|
|
1145
1189
|
User-visible before the call, if needed:
|
|
1146
1190
|
|
|
@@ -1277,9 +1321,9 @@ Call `mcp__ritual__suggest_discovery_questions(exploration_id)`. Returns immedia
|
|
|
1277
1321
|
|
|
1278
1322
|
```text
|
|
1279
1323
|
Ritual build
|
|
1280
|
-
✓ Job ✓ Scope ● Discovery ○ Recommendations ○
|
|
1324
|
+
✓ Job ✓ Scope ● Discovery ○ Recommendations ○ {Deliverable} ○ Implementation (Your agent)
|
|
1281
1325
|
|
|
1282
|
-
Generating discovery questions
|
|
1326
|
+
Generating discovery questions…
|
|
1283
1327
|
```
|
|
1284
1328
|
|
|
1285
1329
|
##### 7.2 — Poll until ready
|
|
@@ -1314,7 +1358,7 @@ The user always confirms; nothing is committed without their reply.
|
|
|
1314
1358
|
|
|
1315
1359
|
**Per-Area recommended set** (the ★ set, for the Area currently shown):
|
|
1316
1360
|
|
|
1317
|
-
- Pick the top 3–4 questions per Area most likely to shape the recommendations, based on the problem statement, locked sub-problems from Step 4, and the codebase
|
|
1361
|
+
- Pick the top 3–4 questions per Area most likely to shape the recommendations, based on the problem statement, locked sub-problems from Step 4, and the codebase context read at Step 3. Bias toward questions whose absence would force later stages to invent consequential facts.
|
|
1318
1362
|
- Area has **< 4 questions**: all are recommended.
|
|
1319
1363
|
- Area has **4–7 questions**: top 3 are recommended.
|
|
1320
1364
|
- Area has **8+ questions**: top 4 are recommended.
|
|
@@ -1331,9 +1375,7 @@ Ritual build
|
|
|
1331
1375
|
|
|
1332
1376
|
Discovery questions ready — {M} generated across {N} areas.
|
|
1333
1377
|
|
|
1334
|
-
These 12 questions target
|
|
1335
|
-
constraints, and unknowns that decide the design. Next, agents will develop
|
|
1336
|
-
answers and generate recommendations.
|
|
1378
|
+
These 12 questions target the tradeoffs and unknowns most likely to change the plan.
|
|
1337
1379
|
|
|
1338
1380
|
{Area name 1}
|
|
1339
1381
|
✓ 1. {question, full text, wrapped readably}
|
|
@@ -1345,9 +1387,7 @@ answers and generate recommendations.
|
|
|
1345
1387
|
|
|
1346
1388
|
{…every suggested question, grouped by Area, all 12 visible…}
|
|
1347
1389
|
|
|
1348
|
-
|
|
1349
|
-
the run confirmation follows) · `expert` to review all {M} questions and
|
|
1350
|
-
adjust the selection · `pause` to stop here.
|
|
1390
|
+
Reply `proceed` to use these 12, `expert` to adjust, or `pause`.
|
|
1351
1391
|
```
|
|
1352
1392
|
|
|
1353
1393
|
Branch on reply:
|
|
@@ -1461,7 +1501,7 @@ Question picking · Summary {T} picked
|
|
|
1461
1501
|
|
|
1462
1502
|
###### 7.3.5 — What NOT to say
|
|
1463
1503
|
|
|
1464
|
-
- DO NOT add machinery copy like *"The answer engine will then investigate them
|
|
1504
|
+
- DO NOT add machinery copy like *"The answer engine will then investigate them by reading the codebase and surface clarifying questions for you to review."* The user only needs to know that picking them triggers investigation.
|
|
1465
1505
|
- DO NOT use `Press Enter` anywhere in this picker (see § Surface-aware continuation prompts).
|
|
1466
1506
|
- DO NOT say `lock` for the picking confirmation; use `done` (to the Summary) then `commit`.
|
|
1467
1507
|
- DO NOT number Areas and questions in the same view — one numbering stream (the current Area's questions). The breadcrumb `Area i of N` carries position; it is not a pickable number.
|
|
@@ -1503,10 +1543,10 @@ exactly one Area. If for some reason you must use it across several Areas
|
|
|
1503
1543
|
(e.g. the batch tool is unavailable), call it **sequentially** (`await` each
|
|
1504
1544
|
in turn) — never in parallel.
|
|
1505
1545
|
|
|
1506
|
-
User-facing: emit ONE status line for the whole
|
|
1546
|
+
User-facing: emit the ONE approved status line for the whole save, not one per Area (verbatim — it's in the rule #8 allowlist):
|
|
1507
1547
|
|
|
1508
1548
|
```text
|
|
1509
|
-
Saving
|
|
1549
|
+
Saving selected questions…
|
|
1510
1550
|
```
|
|
1511
1551
|
|
|
1512
1552
|
The batch call is all-or-nothing — validation fails the whole request if any
|
|
@@ -1549,7 +1589,7 @@ If the user mentioned things they DON'T want investigated ("don't touch enterpri
|
|
|
1549
1589
|
|
|
1550
1590
|
Call `mcp__ritual__set_anti_goals(exploration_id, [{ text, reason? }, ...])`.
|
|
1551
1591
|
|
|
1552
|
-
|
|
1592
|
+
If no anti-goals were mentioned, skip this with NO user-visible output. (No mention = nothing to confirm; the pre-flight only runs when the user actually states out-of-scope items.)
|
|
1553
1593
|
|
|
1554
1594
|
**Pulse (Step 7.4 done — and again after 7.5 if anti-goals were set):** Emit a pulse — decision resolution and (if 7.5 ran) assumption safety just moved. Compact format unless this crosses Under-specified → Exploration-safe.
|
|
1555
1595
|
|
|
@@ -1592,7 +1632,7 @@ Visible CTA is `run`. Accept `r`, `go`, `continue`, or `next` as aliases. Per `r
|
|
|
1592
1632
|
|
|
1593
1633
|
On `run`, **if you're genuinely repo-linked (per the check above), answer the questions yourself** (BYO-answerer; do NOT call `start_agentic_run`):
|
|
1594
1634
|
1. The Step 7.4 accept (`accept_discovery_questions_batch`) returned `materialized[]` — the committed questions with their row `id`s. (If you didn't keep them, the same ids are what you passed to accept.)
|
|
1595
|
-
2. For each
|
|
1635
|
+
2. For each saved question, call `mcp__ritual__write_answer_context(question_id, content)` with an answer grounded in your reading of the codebase — the files you read at Step 5.7, the actual code, real constraints. Answer in PARALLEL where your agent supports it (e.g. one subagent per Area). The content is provisional + provenance-tagged agentic until saved; only the final saved set drives recommendations.
|
|
1596
1636
|
- **Length:** keep each answer to **~300–600 words by default** — tight and grounded, not an essay. Go longer only when the question genuinely needs it.
|
|
1597
1637
|
- **Code:** the answer itself is **prose** — keep it that way. Code is **optional reference, not part of the answer**: attach a snippet only when it would help a future reader or agent reason about your answer (a key type, contract, or call site worth pointing back to), never to complete the answer. When you do, `content` is **markdown** — add it as a **fenced code block with a language tag** (e.g. ` ```ts `) with the `file/path` and the minimal illustrative lines, never a whole-file paste. Spark lifts these fences out of the prose into a collapsed "View details" reference beside the answer, and markdown keeps them portable to the `.ritual/` projection.
|
|
1598
1638
|
- **Never leak secrets or sensitive data.** A snippet is **illustrative, not a verbatim copy** — it only has to convey the shape/idea, so simplify and elide freely. **NEVER** include API keys, tokens, passwords, connection strings, credentials, `.env` values, real customer data, or PII — even if they're literally in the file you read. Replace them with obvious placeholders (`process.env.X`, `"<api-key>"`, `"user@example.com"`). The same goes for the prose: describe constraints without pasting secret values.
|
|
@@ -1809,7 +1849,7 @@ This is the most-read screen in the build flow, and — as of 2026-06-08 — a *
|
|
|
1809
1849
|
**Data source.** Use `mcp__ritual__get_recommendations(exploration_id)` (the raw array) — the walk shows full per-rec content, so you need the fields a titles-only preview omits:
|
|
1810
1850
|
|
|
1811
1851
|
- top-level: `id`, `title`, `content` (the description / summary), `status`, `priority`, `points`, `confidence`
|
|
1812
|
-
- `
|
|
1852
|
+
- `categoryName` — **the load-bearing grouping key** (one rec → one category; `get_recommendations` exposes it top-level so you never reach into raw metadata for it)
|
|
1813
1853
|
- `metadata.explainability` — `rationale` (chained `→` arrow string), `faq_references[]`, `problem_alignment`, `inferred_elements`
|
|
1814
1854
|
- `metadata.acceptance_criteria[]` — concrete pass conditions (optional to surface; see § 9.1)
|
|
1815
1855
|
|
|
@@ -1817,7 +1857,7 @@ Assign stable `R1..RN` IDs **globally across all categories** in page order (NOT
|
|
|
1817
1857
|
|
|
1818
1858
|
**Vocabulary — load-bearing:**
|
|
1819
1859
|
|
|
1820
|
-
- Recommendations are grouped by **category** (`
|
|
1860
|
+
- Recommendations are grouped by **category** (the `categoryName` field). They are **NEVER** grouped by `matter` or by `Area` — those are discovery-phase concepts. `matter_id` must never appear in user-facing copy. Anti-pattern observed in agent output: *"44 recs grouped by matter"* — the right framing is *"44 recs across K categories."*
|
|
1821
1861
|
- Do NOT use "Reasoning chain" / "reasoning_chain" in user-facing copy. The user-visible label is **"Why this"** — a short Problem / Discovery / Tradeoff distillation derived from the `rationale` field, NOT the literal `→` arrow chain (that's the model's internal scratchpad shape).
|
|
1822
1862
|
|
|
1823
1863
|
**Action set — load-bearing (exactly three, no freelancing):**
|
|
@@ -1854,10 +1894,10 @@ or proceed to your {Deliverable}.
|
|
|
1854
1894
|
|
|
1855
1895
|
{…every category, every rec, one line each…}
|
|
1856
1896
|
|
|
1857
|
-
Pulse: Reasoning Readiness
|
|
1897
|
+
Pulse: Reasoning Readiness 88% · Context Debt 12% ↓16% (answering discovery dropped it 16%)
|
|
1858
1898
|
|
|
1859
|
-
A few assumptions are still unverified — the
|
|
1860
|
-
Reply
|
|
1899
|
+
A few assumptions are still unverified — the {Deliverable} is what locks them down.
|
|
1900
|
+
Reply `drill R1`, `edit R1 <change>`, or `proceed` to generate the {Deliverable}.
|
|
1861
1901
|
```
|
|
1862
1902
|
|
|
1863
1903
|
Notes:
|
|
@@ -1925,15 +1965,17 @@ Editing is non-destructive and does not advance the flow — the user can `edit`
|
|
|
1925
1965
|
|
|
1926
1966
|
```text
|
|
1927
1967
|
Ritual build
|
|
1928
|
-
✓ Job ✓ Scope ✓ Discovery ✓ Recommendations
|
|
1968
|
+
✓ Job ✓ Scope ✓ Discovery ✓ Recommendations ○ {Deliverable} ○ Implementation (Your agent)
|
|
1929
1969
|
|
|
1930
1970
|
Reviewed {N} recommendations.
|
|
1931
1971
|
|
|
1932
1972
|
View: https://app.ritualapp.cloud/e/{exploration_id}
|
|
1933
1973
|
|
|
1934
|
-
Next:
|
|
1974
|
+
Next: generate the {Deliverable}.
|
|
1935
1975
|
```
|
|
1936
1976
|
|
|
1977
|
+
(The `{Deliverable}` stage stays `○`, not `●` — this screen records the review and names what's next; the stage flips to `●` only when brief generation actually starts. Render `{Deliverable}` as the job's `deliverableTemplate`, e.g. `Frontend Feature Brief`, never the literal "Build brief".)
|
|
1978
|
+
|
|
1937
1979
|
**Pulse (recommendations reviewed):** emit a pulse — this is almost always a state-tier crossing into **Recommendation-ready**. Render full.
|
|
1938
1980
|
|
|
1939
1981
|
Continue to Step 9.5 (`Wait for requirements`).
|
|
@@ -1976,7 +2018,7 @@ Steps:
|
|
|
1976
2018
|
|
|
1977
2019
|
4. **Special case — `proceed` not yet called (accept_recommendations hasn't run):** if the user jumped ahead without the rec-review `proceed`, there's no fire-and-forget auto-trigger from that path. Skip the polling entirely and let Step 10's auto-trigger handle requirement generation inline. The brief call will take ~30s longer than it otherwise would. (Note: auto-finalize at rec-gen completion usually already queued requirements, so this case is rare.)
|
|
1978
2020
|
|
|
1979
|
-
5. When `status === 'READY'`,
|
|
2021
|
+
5. When `status === 'READY'`, render the approved status line `Requirements ready.` and continue to Step 9.6 (if anti-goals exist) OR directly to Step 10 (if no anti-goals, the audit step runs with NO user-visible output).
|
|
1980
2022
|
|
|
1981
2023
|
#### Step 9.6 — Audit the recommendations + requirements against declared anti-goals (load-bearing — audit-repair loop)
|
|
1982
2024
|
|
|
@@ -1984,7 +2026,7 @@ Run a constraint-survival audit on the typed Recommendation + Requirement substr
|
|
|
1984
2026
|
|
|
1985
2027
|
**Why this is load-bearing**: an inert anti-goal — declared but not actually constraining anything in the recs+reqs — propagates downstream as an unconstrained brief. By Step 11 (implementation) it's too late; the agent codes against a substrate whose forbidden states were never enforced. The audit catches inert directives at the upstream typed substrate where the fix is cheap (rec content edit), not at the brief markdown where the fix is expensive (full regen).
|
|
1986
2028
|
|
|
1987
|
-
**Skip condition**: if the exploration has zero anti-goals (`set_anti_goals` was never called OR all anti-goals are `confidence < 0.4`) OR no APPROVED recommendations exist OR the latest RequirementSet isn't READY, skip this step
|
|
2029
|
+
**Skip condition**: if the exploration has zero anti-goals (`set_anti_goals` was never called OR all anti-goals are `confidence < 0.4`) OR no APPROVED recommendations exist OR the latest RequirementSet isn't READY, skip this step with NO user-visible output and continue to Step 10. The audit tool returns 404 in any of those cases; check the substrate state first if unsure.
|
|
1988
2030
|
|
|
1989
2031
|
**Build modes** (per `documents/architecture/audit-suite.md` § 7a) — the gate prompt below renders differently depending on which mode flag the user invoked:
|
|
1990
2032
|
|
|
@@ -2164,7 +2206,7 @@ The Build Brief is the markdown document the engineer reads RIGHT BEFORE writing
|
|
|
2164
2206
|
Call `mcp__ritual__generate_build_brief` with:
|
|
2165
2207
|
|
|
2166
2208
|
- `exploration_id`
|
|
2167
|
-
- `icp` (
|
|
2209
|
+
- `icp` — **omit this.** The brief sources from the requirement set the flow already generated (on accept), whose ICP the server resolves from the exploration's persona/template. Passing a different ICP here forces a redundant requirement regeneration and a slow cold start. The engineering flavor is already baked into the server-resolved template — you do not need to (and should not) pass `TECH_PM` or any other ICP.
|
|
2168
2210
|
- `recon_context` — the Step 3 `codebase_context_packet` plus any explicit phase/later candidates from discovery. Do not pass raw recon notes. This grounds "Codebase Anchors" in real file paths while keeping agent hypotheses auditable and non-authoritative.
|
|
2169
2211
|
- `sources` — the **same** file-path array passed to `generate_considerations` and `generate_problem_statement` in Steps 4–5. Critical for KG consistency: the brief's "Previously Deferred" section only populates when overlapping prior implementations exist on these files.
|
|
2170
2212
|
|
|
@@ -2235,7 +2277,7 @@ Steps:
|
|
|
2235
2277
|
7. **Print a compact CLI summary** (≤ 8 lines, CLI Tenet #1, #6):
|
|
2236
2278
|
|
|
2237
2279
|
```text
|
|
2238
|
-
✓ Verification complete — `BUILD-BRIEF-VERIFICATION.md
|
|
2280
|
+
✓ Verification complete — saved `BUILD-BRIEF-VERIFICATION.md`.
|
|
2239
2281
|
|
|
2240
2282
|
Verified: {N} · Contradicted: {M} · Not found: {K}
|
|
2241
2283
|
|
|
@@ -2468,7 +2510,7 @@ Ritual build
|
|
|
2468
2510
|
Implementation (Your agent)
|
|
2469
2511
|
|
|
2470
2512
|
The build brief is on disk. From here, your agent codes against the
|
|
2471
|
-
|
|
2513
|
+
build requirements. Ritual will track commits via the `Ritual-Exploration:` trailer
|
|
2472
2514
|
so they link back to this exploration when you sync.
|
|
2473
2515
|
|
|
2474
2516
|
Next: I'll do a quick branch / dirty-worktree safety check, then hand
|
|
@@ -2800,7 +2842,7 @@ I'm about to log this implementation into the workspace's knowledge graph. After
|
|
|
2800
2842
|
· The implementation gets linked back to the recommendations it
|
|
2801
2843
|
implements — so future `/ritual build` calls touching
|
|
2802
2844
|
`{first 2 of filesChanged}` will see this implementation as priorContext.
|
|
2803
|
-
· The {M}
|
|
2845
|
+
· The {M} follow-ups you intentionally punted get logged with
|
|
2804
2846
|
their reasons — peers can see them in `/ritual lineage` on these
|
|
2805
2847
|
files later.
|
|
2806
2848
|
|
|
@@ -71,10 +71,10 @@ Default dense-list shape:
|
|
|
71
71
|
{1-3 sentence description, wrapped for terminal width.}
|
|
72
72
|
|
|
73
73
|
Why high-leverage:
|
|
74
|
-
{specific signal:
|
|
74
|
+
{specific signal: build-requirement id, prior decision, open follow-up, shipped PR, or file-level pattern.}
|
|
75
75
|
|
|
76
76
|
Touches:
|
|
77
|
-
{exploration / PR /
|
|
77
|
+
{exploration / PR / follow-up references, comma-separated only if short; otherwise wrap.}
|
|
78
78
|
```
|
|
79
79
|
|
|
80
80
|
Use this format for high-leverage problem candidates, recommendation lists with rationale, lineage summaries with multiple events, and any other CLI section where each item has more than one sentence of explanation.
|
|
@@ -320,11 +320,11 @@ The pulse rule and visual specs live in the [§ /ritual context-pulse](#ritual-c
|
|
|
320
320
|
```text
|
|
321
321
|
{…the step's content…}
|
|
322
322
|
|
|
323
|
-
Pulse: Reasoning Readiness 58% · Context Debt 42% ↓3% (scope
|
|
323
|
+
Pulse: Reasoning Readiness 58% · Context Debt 42% ↓3% (locking scope cut it 3%)
|
|
324
324
|
Reply proceed (run discovery → recommendations) · expert · pause
|
|
325
325
|
```
|
|
326
326
|
|
|
327
|
-
- **Score line** (top of the message). Full capitalized labels — `Reasoning Readiness` and `Context Debt`, NOT lowercase. The progress delta attaches to **Context Debt as a directional drop** — `Context Debt 42% ↓3%` — so the movement reads unambiguously as debt going DOWN. (A bare `· +3%` sitting next to the debt figure reads like debt went UP by 3, the opposite of progress — that's the confusion this avoids.) The delta is **MANDATORY** on every pulse after the first (the first pulse has no prior → just the baseline + reason). Use `↓N%` when debt drops (the normal, good case), `↑N%` on a regression (rare; render full then), and `±0%` when a step didn't move the score. Never drop it — it's the visible-progress signal. (Readiness climbing and debt dropping are the same move — `Reasoning Readiness + Context Debt = 100%` — so the debt-drop arrow IS the readiness-gain signal, just framed the way users read it.)
|
|
327
|
+
- **Score line** (top of the message). Full capitalized labels — `Reasoning Readiness` and `Context Debt`, NOT lowercase. The progress delta attaches to **Context Debt as a directional drop** — `Context Debt 42% ↓3%` — so the movement reads unambiguously as debt going DOWN. (A bare `· +3%` sitting next to the debt figure reads like debt went UP by 3, the opposite of progress — that's the confusion this avoids.) The delta is **MANDATORY** on every pulse after the first (the first pulse has no prior → just the baseline + reason). Use `↓N%` when debt drops (the normal, good case), `↑N%` on a regression (rare; render full then), and `±0%` when a step didn't move the score. Never drop it — it's the visible-progress signal. (Readiness climbing and debt dropping are the same move — `Reasoning Readiness + Context Debt = 100%` — so the debt-drop arrow IS the readiness-gain signal, just framed the way users read it.) **The trailing parenthetical is a plain CAUSAL gloss — it attributes the drop to the step the user just took, in everyday words: `(locking scope cut it 3%)`, `(answering discovery dropped it 16%)`, `(grounding in your code cut it 9%)`. Not a bare state label like `(scope locked)` — the user should read what they DID and how much debt it removed. Keep the branded `Context Debt` term; the gloss makes the number mean something.** (The first pulse has no prior, so its parenthetical names the open gap instead — e.g. `(repo boundary unresolved)`.)
|
|
328
328
|
- **Lift bridge** (ONE sentence, immediately ABOVE the action/CTA line — NOT under the score). This is the load-bearing piece: it turns the score into a reason to proceed. Three requirements:
|
|
329
329
|
1. **Plain language for the gap — NEVER the internal dimension name.** The lowest dimension from `score_context_pulse`'s breakdown picks the message, but the user sees what it MEANS, not the label:
|
|
330
330
|
| lowest dimension (internal) | what the user reads (plain) |
|