Skip to content

vault inject_map emits a params-only body that fails UBF validation and dead-letters #428

Description

@mmeyerlein

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions