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
After F18 the raw-content rows were gone, but the synthesis telemetry still rendered intermediate store values as standalone rows (`try`, `setup-plan`, `thricified-generation`, a cwd path, a bare agent name) and split the hierarchy across rows instead of consolidating it onto one rich log line.
Formal log-line contract (now enforced): the rich telemetry renders EXACTLY two formal kinds, plus a few terminal/high-level signals — nothing else.
- LLM call: the inference leaf (llm/output, stream type `generation`) carrying the full hierarchy Phase->Agent->Step->Failsafe->Thricified + source-safe content + provider/model/usage, each level its own pill.
- Tool use: tool|tools:result|error carrying Phase->Agent->Step + tool name/arguments (no Failsafe/Thricified).
Every other store event (step/agent/phase name stores, prompt-side llm keys, the llm/response registry copy, cwd paths, generation markers, tool sub-keys) is intermediate CONTEXT: it advances a rolling hierarchy but never becomes a row.
Implementation:
- terminal-run-activity.ts: buildTerminalRunActivityFromEvents maintains a rolling {phase, agent, step, failsafe, generation} context updated from every event, classifies each event, and emits a row ONLY for LLM calls / Tool uses / terminal signals. LLM rows stamp their own 5-field hierarchy; tool rows stamp Phase/Agent/Step from context + the tool name/args accumulated per tool-execution node (tool stores carry no hierarchy and use the singular `tool` namespace). Distinct calls that share withheld text stay distinct via a unique null-separated row key (TELEMETRY_ROW_KEY_SEP).
- pipeline-execution-log.tsx: derive displayText from the row key (text before the null separator), look up details by the full key, run text heuristics on displayText, and bypass message de-dup for uniquely-keyed rows so distinct LLM/tool calls never collapse.
Spec (BITCODE_SPEC_V48_NOTES.md) records the formal log-line contract; QA ledger records F19. uapi tsc 0; new F19 contract test (fragments suppressed; LLM row = 5-pill hierarchy; tool row = Phase/Agent/Step + tool) + 10-suite telemetry/terminal/deposit regression batch (38 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
+11Lines changed: 11 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -190,6 +190,17 @@ Track 3-4 scripts (BTD ledger, settlement, pack journaling) get added when those
190
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
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
192
193
+
### F19 — Rich telemetry fragments the hierarchy across rows; lock it to LLM calls + Tool uses only
194
+
195
+
- Severity: medium (telemetry correctness + pipeline↔UI contract stability).
196
+
- Observed (2026-06-26): after F18 the raw-content rows were gone, but the Synthesis run telemetry still rendered intermediate store values as standalone rows — `try`, `setup-plan`, `thricified-generation`, a cwd path, a bare agent name — and the hierarchy was split across rows (Phase on one, Step+Generation on another, Agent on a third) instead of consolidated onto one rich log line.
197
+
- Contract (decided 2026-06-26): the rich telemetry renders EXACTLY two formal log-line kinds, nothing else — (a) **LLM calls**, which carry the full hierarchy Phase→Agent→Step→Failsafe→Thricified + source-safe content + provider/model/usage; (b) **Tool uses**, which carry Phase→Agent→Step + tool name/arguments (no Failsafe/Thricified). Every other store event (step/agent/phase name stores, prompt-side llm keys, `llm/response` registry copies, paths, generation markers, tool sub-keys) is intermediate context that advances the rolling hierarchy but never becomes a row.
198
+
- Cause: `ExecutionStreamAdapter.onStore` emits one event per `execution.store(...)`, and `buildTerminalRunActivityFromEvents` turned any event with a non-empty message into a row. The canonical LLM-call event (`llm/output`, type `generation`) already carries the full hierarchy in its value, but tool stores use the singular `tool` namespace with no hierarchy (and `inferEventType` only recognized plural `tools`), so tool calls were mis-typed and hierarchy-less.
- The activity builder maintains a rolling `{phase, agent, step, failsafe, generation}` context updated from every event, and emits a row ONLY for LLM calls (`generation` / `llm:output`), Tool uses (`tool|tools:result|error`), and terminal/high-level signals (`completion`/`error`/no-namespace status). LLM rows stamp their own 5-field hierarchy; tool rows stamp Phase/Agent/Step from the rolling context + the tool name/args accumulated per tool-execution node.
201
+
- Distinct calls that share withheld text are kept distinct via a unique null-separated row key (`TELEMETRY_ROW_KEY_SEP`); the renderer displays only the text before the separator, looks up details by the full key, and bypasses message de-dup for uniquely-keyed rows.
## Track 1 — Identity / Authentication / Auxillaries — COMPLETE 2026-06-12 (email deferred by decision; F2/F9 and legacy eradication queued for gates)
194
205
195
206
-[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