The Decisions tab's recommended option now names the session that suggested it. A hard-coded model name was false on every card, and with a ladder that falls through Fable → Astra → human, any single name would be wrong again next week.
10 Sept 2026 · branch fix/decisions-rec-provenance · captured against propflow-stage · at 559f3057f1
Data note. Every name and balance below comes from propflow-stage, which is anonymized by construction (ADR-0097/0110 — phones in the impossible +1000 NPA, emails @example.test). The identical capture against prod would carry real tenants' names and balances and is not safe to attach anywhere, which is why the generator refuses to run against one.
A real open question on the live ledger, raised by a session called holiday-policy. Its recommended option carries the flag Fable recommends. Nothing produced that attribution: rec is the --rec string the raising session wrote about its own preferred option, the relay forwards no model verdict of any kind, and the only model evidence blocked ever stores on a row is a receipt saying the model declined to choose. The label was asserted by the component, not read from the record.
The footer on the same card already says who raised it — the flag and the footer disagreed about the source of the recommendation, and the flag was the one that was wrong.
Asserted in the captured DOM — FABLE RECOMMENDS · Ask the two offices what they do · holiday-policy. The false byline is on screen beside the raiser's own name, so the contradiction is in the capture, not inferred.
Same row, same ledger, same relay. The flag now reads what the record says: the raiser's session label (falling back to its short session id — the same identity the footer's raised by prints, so the two can no longer disagree). The name is kept out of the uppercase so a session slug stays legible.
No model is named because the record names none. That is not a placeholder for a better label: a card can only say Astra recommends · medium confidence truthfully once the ledger row carries a recommendation-provenance field, the relay forwards it and publicBlock narrows it. Until every link exists, the pure helper behind this flag has no branch that can produce a model name — deliberately, because a branch fed by a fixture is exactly what produced the label above.
Asserted in the captured DOM — SUGGESTED BY · holiday-policy · Ask the two offices what they do. The byline names the raiser, and the raiser's name matches the footer.
The questions of a multi-question block carry their own rec but no identity of their own; the byline comes from the block's raiser, threaded through the stepper to each question's options. Here the block was raised by portfolio-arch, and its first question's recommended option says so.
Asserted in the captured DOM — SUGGESTED BY · portfolio-arch. The stepper path — the one every earlier More-details test went through, and the one an ordinary block once diverged from — carries the same byline.
The blocked CLI renders its own decision page with the same label; that surface is fixed separately (gera-propflow/local-bin#109) and is not in these captures. And no capture can show a model's real opinion on these questions, because on this path none reaches the browser — which is the finding.