The vault cell's params.inject_map push at unlock never reaches its target: the emission is a params-only body, and the UBF body schema requires one of system / messages / attachments. The debug-build validation in the colony's outputs arm therefore rejects it as InvalidUbfBody and it goes to the dead-letter queue — before a message_log row is written.
Measured on a booted flat topology with a vault whose inject_map names a live llm cell:
DLQ InvalidUbfBody Path("/brain") ... body: Inline(Object {"params": Object {"http_referer": String("<the secret>")}})
So the one documented path by which a plaintext credential leaves the vault does not work at all. The unlock still reports which name went where under which key, so the answer says a delivery happened that did not.
Found while building the no-plaintext pin for #421, where this path was going to serve as the counter-proof — a test that asserts the grep WOULD find a plaintext if one were there. It could not, because nothing plaintext ever lands in the log on this path. The counter-proof now uses vault.put over the user channel instead, which is a real plaintext path and also explains why the pin fills the vault straight into its cell.db rather than by message.
Note on priority: inject_map is deprecated as of #421 (the sealed delivery replaces it) and is empty on a fresh instance, so nothing shipped depends on it. docs/roadmap.md carries its removal with a trigger. Two honest options: fix the emission shape, or bring the removal forward. Either is a decision rather than a patch, which is why this is a report and not a fix.
The
vaultcell'sparams.inject_mappush at unlock never reaches its target: the emission is a params-only body, and the UBF body schema requires one ofsystem/messages/attachments. The debug-build validation in the colony's outputs arm therefore rejects it asInvalidUbfBodyand it goes to the dead-letter queue — before amessage_logrow is written.Measured on a booted flat topology with a vault whose
inject_mapnames a livellmcell:So the one documented path by which a plaintext credential leaves the vault does not work at all. The unlock still reports which name went where under which key, so the answer says a delivery happened that did not.
Found while building the no-plaintext pin for #421, where this path was going to serve as the counter-proof — a test that asserts the grep WOULD find a plaintext if one were there. It could not, because nothing plaintext ever lands in the log on this path. The counter-proof now uses
vault.putover the user channel instead, which is a real plaintext path and also explains why the pin fills the vault straight into itscell.dbrather than by message.Note on priority:
inject_mapis deprecated as of #421 (the sealed delivery replaces it) and is empty on a fresh instance, so nothing shipped depends on it.docs/roadmap.mdcarries its removal with a trigger. Two honest options: fix the emission shape, or bring the removal forward. Either is a decision rather than a patch, which is why this is a report and not a fix.