You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
V48 Gate 3 (specification-implementation): withhold raw llm/response in synthesis telemetry; fix log x-overflow (F18)
During /deposit "Synthesize options", the Synthesis run telemetry leaked the raw model response line-by-line (```json / { / "analysis": ... / "steps": [ each a row) and the long unwrapped lines x-overflowed the whole page.
Root cause (source-safety): the formal Thricified substeps store LLM content under llm/input|prompt|output|parsedOutput, but AgentLLMsRegistry/PipelineLLMRegistry (direct getLLM calls, used by the setup-plan agent) store the raw prompt under llm/messages and the raw response under llm/response (output.content). sourceSafeStreamEvent withheld only the substep key names, so llm/response passed through as a status-event message into execution_events unredacted — and the renderer (splits output on \n) fragmented that multi-line payload into one row per line.
Fix, three layers:
- pipeline-stream-integration.ts: sourceSafeStreamEvent now withholds by metadata ALLOWLIST — every llm store is content-withheld except a fixed source-safe set (startTime/endTime/duration/usage/status/provider/model/configKey/stopReason/error). Robust to content-key drift across the two LLM-call paths; llm/response + llm/messages now withheld (message -> [content withheld - source-safe], data -> structural summary). Regression test added (5/5 pass).
- terminal-run-activity.ts: every event line collapsed to a single bounded line (toSafeSingleLine, 280 chars) so one streamed event = exactly one accordion row and the outputDetails key lookup stays intact (defense-in-depth).
- pipeline-execution-log.tsx + DepositPageClient.tsx: min-w-0 on the compact/desktop title spans and the telemetry panel section/wrapper (+ overflow-hidden on the panel) so a long line truncates within its row instead of x-overflowing the page.
Spec (BITCODE_SPEC_V48_NOTES.md) records the allowlist gate + single-line/no-overflow telemetry invariant; QA ledger records F18 (incl. the read-lens setup-plan-agent-in-deposit observation queued separately). pipelines-generics tsc + uapi tsc 0; pipeline-stream-integration, terminalTransactionActivity, depositPageClient, conversation/reading pipeline-log tests green; spec checker green.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Copy file name to clipboardExpand all lines: BITCODE_V48_QA.md
+12Lines changed: 12 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -178,6 +178,18 @@ Track 3-4 scripts (BTD ledger, settlement, pack journaling) get added when those
178
178
- Cause: the option `<article>` (a grid item in the `xl:grid-cols-3` options grid) lacked `min-w-0`, and the `font-mono` covered-source-paths list lacked `break-all`, so a card with long unbreakable mono content refused to shrink below its content's min-content width and overflowed the `minmax(0,1.45fr)` left column.
179
179
- Repair (2026-06-26, `DepositPageClient.tsx`): `min-w-0` on the option card + `break-all` on the covered-paths list (the Option-roots `<dd>` already wrapped). The card now shrinks to its grid column and long paths/roots wrap rather than forcing overflow.
180
180
181
+
### F18 — Synthesis run telemetry leaks the raw model response and x-overflows the page (one accordion row per content line)
182
+
183
+
- Severity: high (source-safety law) + low (layout). Telemetry must never expose raw prompts/responses (`rawProviderResponseVisible=false`).
184
+
- Observed (2026-06-26): during `/deposit` "Synthesize options", the Synthesis run telemetry accordion rendered the raw model output line-by-line — ` ```json `, `{`, `"analysis": "…"`, `"steps": [`, `"1. ANCHOR IDENTITY: …"` each became their own row — and the long unwrapped `"analysis"`/step lines x-overflowed the entire page (page shifted right, panel toggle clipped). The raw content was the setup-plan agent's plan prose (a provider response).
185
+
- Cause (root, source-safety): the formal Thricified substeps store LLM content under `llm/input|prompt|output|parsedOutput`, but `AgentLLMsRegistry`/`PipelineLLMRegistry` (direct `getLLM` calls, used by the setup-plan agent) store the raw prompt under `llm/messages` and the raw response under **`llm/response`** (`output.content`). The universal streaming filter `sourceSafeStreamEvent` withheld only the substep key names, so `llm/response` (a raw string) passed through as a `status`-event `message` and reached `execution_events` unredacted.
186
+
- Cause (display): `buildTerminalRunActivityFromEvents` joins event messages with `\n` and `PipelineExecutionLog` splits `output` on `\n` (one row per line), so the multi-line leak fragmented into many rows; the compact/desktop title spans lacked `min-w-0`, so a long line's min-content width escaped the `overflow-auto` log container and widened the page.
187
+
- Repair (2026-06-26):
188
+
-`pipeline-stream-integration.ts` — `sourceSafeStreamEvent` now withholds by **metadata allowlist**: every `llm` store is content-withheld except a fixed source-safe set (`startTime/endTime/duration/usage/status/provider/model/configKey/stopReason/error`). Robust to content-key drift between the two LLM-call paths; `llm/response` + `llm/messages` are now withheld (message → `[content withheld — source-safe]`, `data` → structural summary). Regression test added.
189
+
-`terminal-run-activity.ts` — every event line is collapsed to a single bounded line (`toSafeSingleLine`, 280 chars) so one event = exactly one row and the `outputDetails` key lookup stays intact (defense-in-depth).
190
+
-`pipeline-execution-log.tsx` + `DepositPageClient.tsx` — `min-w-0` on the compact/desktop title spans and on the telemetry panel section/wrapper (+ `overflow-hidden` on the panel) so a long line truncates within its row instead of x-overflowing the page.
191
+
- Related observation (not yet filed): the deposit run executes `ReadFitsFindingSynthesisSetupPlanAgent` planning a "Read-Need" — a read-lens setup agent running under the deposit lens. Telemetry is now source-safe regardless, but the deposit setup-plan agent identity should be confirmed/queued as a separate correctness finding.
192
+
181
193
## Track 1 — Identity / Authentication / Auxillaries — COMPLETE 2026-06-12 (email deferred by decision; F2/F9 and legacy eradication queued for gates)
182
194
183
195
-[x] Sign up / sign in via Connect Wallet (nav CTA → SignUpWindow → wallet signature on testnet4 → `custom:bitcode-bitcoin` session → `/tps/supabase/callback`) — verified 2026-06-12 after F5 fix; lands on `/packs`. Re-verified from fully nuked state (purged user + cleared site data): created 19:29:21 → session 19:29:25 → binding auto-written 19:29:29 by the bridge on `/packs` mount with no Auxillaries visit; UI consistent across nav, Wallet, and Profile panes.
0 commit comments