Skip to content

Commit e34b6cf

Browse files
Usernameclaude
authored andcommitted
rfc(0015): docs repair — sync vendored spec with RFC narrative
Addresses the two P2 review findings: - spec preamble: base-contract path repointed to the in-tree sidecar; stale 'F5 catalogue pending' superseded (completed 2026-06-18) - §7 tier taxonomy unified on the RFC's T0/T1/T2 (legacy A→T1, B→T2, C→T2-with-declared-clamp, D→T0; truth table, worked projections, glossary relabeled; the unrelated 'RATIFIED at T2' decision label disambiguated) Reasoning archival boundary unchanged. Sync delta recorded in the vendoring provenance header. Co-Authored-By: Claude Fable 5 <[email protected]>
1 parent e599900 commit e34b6cf

2 files changed

Lines changed: 33 additions & 19 deletions

File tree

rfcs/0015-provider-stream-grammar.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -193,6 +193,11 @@ capability metadata; conformance checks a channel only against its declared
193193
tier. Discord and Telegram (T1) are the shipped references; this table is
194194
proposed for maintainer amendment rather than left as an open question.
195195

196+
This taxonomy supersedes the legacy A/B/C/D surface letters in the vendored
197+
spec's §7 (mapped there: A→T1, B→T2, C→T2 with a declared clamp, D→T0; the
198+
spec's worked projections are relabeled accordingly — see its vendoring-sync
199+
note).
200+
196201
### Reasoning privacy & archival boundary
197202

198203
Model thinking is privacy-sensitive, and this contract deliberately changes

rfcs/0015/stream-grammar-spec.md

Lines changed: 28 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,24 @@ previously pinned as normative), vendored 2026-07-06 in response to review feedb
66
personal companion repository should not be the normative source for an accepted RFC.
77
THIS COPY IS NOW THE NORMATIVE TEXT; the companion repo remains the home of the evidence
88
files (golden wire captures) and the executable conformance harness it references.
9+
10+
Vendoring sync (2026-07-07, addressing review findings): (1) base-contract reference
11+
repointed to the in-tree sidecar agent-event-io-contract.md; (2) stale F5 "catalogue
12+
pending" evidence status superseded (completed 2026-06-18); (3) §7 channel tier taxonomy
13+
unified with the RFC's T0/T1/T2 table — legacy letters map A→T1, B→T2, C→T2 with a
14+
declared clamp, D→T0. The reasoning archival boundary is UNCHANGED from the pinned text.
915
-->
1016

1117
# Provider Content Pipeline — Normalized Stream Specification
1218

1319
**Version:** 0.4-draft (2026-06-12) · **Status:** Phase 1, post-red-team-2 + full capture reconciliation (all families golden-verified; 6 reconciliation contradictions folded)
14-
**Base:** extends `docs/channels/agent-event-io-contract.md` (ragesaq, PR #92216).
20+
**Base:** extends [`agent-event-io-contract.md`](agent-event-io-contract.md) (ragesaq, from openclaw/openclaw#92216 — vendored alongside this spec in the RFC 0015 tree, its four amendments folded inline).
1521
Explicit amendments to the base contract are marked **[AMENDS BASE]** — there are four
1622
(§3.2, §3.3, §5.1, §7.3). Everything else is additive.
1723
**Evidence:** all wire-format claims trace to `evidence/*.md`; golden captures exist for
18-
F1/F1e/F2 (pioneer, OpenRouter, deepseek-direct, moonshot)/F3 and gemini (F5, catalogue
19-
pending). Red-team passes: `RED-TEAM-claude.md` (27 findings → v0.2),
24+
F1/F1e/F2 (pioneer, OpenRouter, deepseek-direct, moonshot)/F3 and gemini (F5) — the F5
25+
catalogue, marked pending in the 0.4 original, was completed 2026-06-18 (see the RFC's
26+
Resolved-since-draft list). Red-team passes: `RED-TEAM-claude.md` (27 findings → v0.2),
2027
`RED-TEAM-codex.md` (16 findings → v0.3).
2128

2229
---
@@ -328,10 +335,10 @@ flowchart TB
328335

329336
(The 13 before-sites are enumerated with file:line in `evidence/openclaw-internals.md` §1.)
330337

331-
### 4.3 Behavior truth table (normative, Tier A)
338+
### 4.3 Behavior truth table (normative, T1)
332339

333340
Path-independence (primary == queued) is a **requirement on channels**, not an observed
334-
property: a Tier A channel MUST maintain an active draft for queued/followup turns
341+
property: a T1 channel MUST maintain an active draft for queued/followup turns
335342
exactly as for primary turns (red-team AS3-01 — today followup turns may run without an
336343
in-progress draft, silently degrading `/reasoning stream`; migration item 13).
337344

@@ -432,19 +439,21 @@ conformance §8.1 counts them as covered.
432439

433440
### 7.1 Capability tiers
434441

435-
| Tier | Capabilities | Examples |
436-
|------|--------------|----------|
437-
| A | editable draft + durable messages | Discord, Telegram, ClickClack |
438-
| B | full event UI (cards, live panes, collapse) | Control UI / GUI |
439-
| C | status line / single pane | TUI status, CLI |
440-
| D | append-only plain text | minimal bridges |
442+
| Tier | Capabilities | Examples | Legacy id |
443+
|------|--------------|----------|-----------|
444+
| **T0 persist-only** | append-only / send-once messages, no edits | minimal bridges, webhook sinks | D |
445+
| **T1 editable-draft** | editable draft + durable messages | Discord, Telegram, ClickClack | A |
446+
| **T2 native-stream** | owned rendering surface — full event UI or status pane | Control UI / GUI; TUI status = T2 with a declared clamp | B, C |
441447

442448
Required for every tier: final answer exactly once; errors surfaced; "agent is working"
443-
backed by real events. Settings clamp to tier ceiling **declaredly, not silently**.
449+
backed by real events. Settings clamp to tier ceiling **declaredly, not silently** — a
450+
status-line TUI is a T2 surface with a clamped ceiling, not a separate tier. Minimum
451+
per-tier obligations are normative in RFC 0015 §"Proposed channel capability tiers".
452+
*[RFC 0015 vendoring sync, 2026-07-07]*
444453

445454
### 7.2 Worked projections
446455

447-
**Tier A — Discord (reference).** UX policy RATIFIED at T2 (Peter, 2026-06-12):
456+
**T1 — Discord (reference).** UX policy RATIFIED (Peter, 2026-06-12):
448457
🧠-blockquote thinking, collapse-to-summary settle, truncation suffix line, Reject
449458
placeholder — these are decisions, not suggestions. Liveness: native typing indicator
450459
from first event to settle (§11); the activity draft is created lazily by the first
@@ -463,15 +472,15 @@ routeReply/dispatch drops are **deleted**; rendering policy is the truth table,
463472
identical on primary and followup paths (which requires followup turns to carry an
464473
active draft — migration item 13).
465474

466-
**Tier B — Control UI.** Closest to spec today; gains redacted markers, variant labels,
475+
**T2 — Control UI.** Closest to spec today; gains redacted markers, variant labels,
467476
truncation indicators, unified item rows. `response.incomplete`-style ends render as
468477
"incomplete" state, not error (§3.4).
469478

470-
**Tier C — TUI.** Status line: spinner + current item title + last commentary line;
479+
**T2 (clamped) — TUI.** Status line: spinner + current item title + last commentary line;
471480
`/reasoning stream` clamps to `on` (declared); thinking renders as a dim block post-
472481
segment. Final answer printed normally.
473482

474-
**Tier D — minimal text.** Single "working…" notice or nothing; final answer + errors
483+
**T0 — minimal text.** Single "working…" notice or nothing; final answer + errors
475484
only; clamping declared on settings change.
476485

477486
### 7.3 Idempotency, ordering, reconnect
@@ -541,7 +550,7 @@ it — they see server re-exposures, which ARE captured.
541550
| 14 | finality edge paths unhandled anywhere (refusal/content_filter delivered as final; pause_turn; stream death) | §3.5 dispatch table INCLUDING channel draft retraction on Reject and F3 `incomplete_details.reason` classification; conformance §8.1+§8.3 cases | adapter + channel |
542551

543552
Sequencing unchanged (PROPOSAL.md): adapter+gateway upstream, coordinated with ragesaq
544-
post-#92216; Discord (Tier A reference) local-first on ga-build.
553+
post-#92216; Discord (T1 reference) local-first on ga-build.
545554

546555
## 10. Assumptions and open risks
547556

@@ -562,7 +571,7 @@ post-#92216; Discord (Tier A reference) local-first on ga-build.
562571
5. **Privacy stance on raw thinking display**: rendered only on explicit `/reasoning`;
563572
channels MAY summarize-before-show for F4 `analysis` (cookbook recommendation);
564573
variant labels make raw vs summary distinguishable.
565-
6. **Rate limits**: Tier A edit cadence respects channel limits via existing gateway
574+
6. **Rate limits**: T1 edit cadence respects channel limits via existing gateway
566575
throttle lanes (assistant + thinking); overflow handled by §7.2 elision.
567576
7. **Archive privacy** (red-team AS5-01): the archive holds raw thinking for all turns
568577
by design. Until a dedicated access-control spec exists, the archive is
@@ -582,6 +591,6 @@ post-#92216; Discord (Tier A reference) local-first on ga-build.
582591
- **settle** — final state transition of a draft: collapse, summarize, paused/error state, or dismissal (when content-free)
583592
- **marker** — a content-free event recording that something happened (redacted thinking)
584593
- **archive tap** — settings-independent persistence of the normalized event sequence; operator/audit-only
585-
- **liveness indicator** — the minimum honest signal that work is in progress, backed by real events. Tier A: the channel's **native typing indicator** (Discord typing, Telegram chat action), triggered on the first event of the turn and refreshed on activity until settle — the draft is NOT created for liveness alone (resolves red-team COD-AS3-01: no empty-draft contradiction; the draft is created lazily by the first event that actually renders). Channels without a typing primitive fall back to a one-line status draft. Tier B: native progress state. Tier C/D: spinner or static "working…" line. Must not be absent while work is ongoing
594+
- **liveness indicator** — the minimum honest signal that work is in progress, backed by real events. T1: the channel's **native typing indicator** (Discord typing, Telegram chat action), triggered on the first event of the turn and refreshed on activity until settle — the draft is NOT created for liveness alone (resolves red-team COD-AS3-01: no empty-draft contradiction; the draft is created lazily by the first event that actually renders). Channels without a typing primitive fall back to a one-line status draft. T2: native progress state. Clamped-T2 / T0: spinner or static "working…" line. Must not be absent while work is ongoing
586595
- **destructive settle** — the Reject-path settle (§3.5): already-rendered text of the rejected segment is replaced with an error/redacted placeholder; the text survives only in the archive
587596
- **adapter provider-native transcript** — byte-stable provider blocks for API replay (signatures, encrypted content); never leaves the adapter

0 commit comments

Comments
 (0)