Symptom: the login the store seat's query verb runs as is a member of pg_read_all_data, so it may read identity.signing_key.private (the key every node-engine trusts), the inventory's sealed secrets and operator keys, and every consumer's secrets. Confirmed by privileges and column names only; no value was read.
Cause: issue 193's fix chose pg_read_all_data to make the verb read-only; nothing said what it may read.
Was it read? Not knowable from the store: no statement log, no pg_stat_statements; since the server's last start the key table's sequential scans match the nightly dump exactly, but an index read would not show, and nothing before 2026-10-03 is recorded.
Rotation: recommended once the fix is taken; no mechanism exists (a node-engine trusts the one key its enrolment token carried; ADR 0004's overlapping rollover is unbuilt), so it needs a decision first. Nothing was rotated.
Fix: mesh-catalog PR 143 (deny by default, per-column grants a module declares as readable, secrets never granted, reconciled every minute, a probe that refuses queries while a secret is readable).
replay-none: is filled because the hole is a grant on a store; the module's live tests hold it fail-first.
Opens and diagnoses issue 337, status `located`.
- **Symptom:** the login the store seat's `query` verb runs as is a member of `pg_read_all_data`, so it may read `identity.signing_key.private` (the key every node-engine trusts), the inventory's sealed secrets and operator keys, and every consumer's secrets. Confirmed by privileges and column names only; no value was read.
- **Cause:** issue 193's fix chose `pg_read_all_data` to make the verb read-only; nothing said what it may read.
- **Was it read?** Not knowable from the store: no statement log, no `pg_stat_statements`; since the server's last start the key table's sequential scans match the nightly dump exactly, but an index read would not show, and nothing before 2026-10-03 is recorded.
- **Rotation:** recommended once the fix is taken; no mechanism exists (a node-engine trusts the one key its enrolment token carried; ADR 0004's overlapping rollover is unbuilt), so it needs a decision first. Nothing was rotated.
- **Fix:** mesh-catalog PR 143 (deny by default, per-column grants a module declares as `readable`, secrets never granted, reconciled every minute, a probe that refuses queries while a secret is readable).
`replay-none:` is filled because the hole is a grant on a store; the module's live tests hold it fail-first.
Opened and diagnosed: pg_read_all_data on the login the store seat's query
runs as. Says what the store can and cannot tell about whether the key was
read, why it should be rotated once the fix is taken, and that no rotation
mechanism exists yet. The fix is mesh-catalog PR 143.
Deliverynovox/hq@7f78016f0749 — delivered since 2026-10-08T20:16:36Z
Delivery plan — builds nothing: the change touches no module of the mesh's graph
Transitions
2026-10-08 20:11 (new) → proposed (announced): novox/hq#230's head announced
2026-10-08 20:12 proposed → checked (checked): the verdict names this commit
2026-10-08 20:12 checked → ready (accepted): the gate passed or warned, and the repository's own check did not fail
2026-10-08 20:16 ready → published (merged): on the trunk its modules follow: merged there, and its walk opened — or nothing for a walk to move
2026-10-08 20:16 published → delivered (done): nothing for a walk to move
The commit's note under refs/notes/mesh-plan keeps every transition: git log --notes=mesh-plan.
<!-- mesh-delivery:view -->
**Delivery** `novox/hq@7f78016f0749` — **delivered** since 2026-10-08T20:16:36Z
**Delivery plan** — builds nothing: the change touches no module of the mesh's graph
**Transitions**
- 2026-10-08 20:11 (new) → proposed (announced): novox/hq#230's head announced
- 2026-10-08 20:12 proposed → checked (checked): the verdict names this commit
- 2026-10-08 20:12 checked → ready (accepted): the gate passed or warned, and the repository's own check did not fail
- 2026-10-08 20:16 ready → published (merged): on the trunk its modules follow: merged there, and its walk opened — or nothing for a walk to move
- 2026-10-08 20:16 published → delivered (done): nothing for a walk to move
The commit's note under `refs/notes/mesh-plan` keeps every transition: `git log --notes=mesh-plan`.
Adds what the fix cannot see (definer functions and views; the name check
as a backstop) and, as a follow-up, that the reader's read-only session is a
default a statement can turn off, so the missing write grants are the guard.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Opens and diagnoses issue 337, status
located.queryverb runs as is a member ofpg_read_all_data, so it may readidentity.signing_key.private(the key every node-engine trusts), the inventory's sealed secrets and operator keys, and every consumer's secrets. Confirmed by privileges and column names only; no value was read.pg_read_all_datato make the verb read-only; nothing said what it may read.pg_stat_statements; since the server's last start the key table's sequential scans match the nightly dump exactly, but an index read would not show, and nothing before 2026-10-03 is recorded.readable, secrets never granted, reconciled every minute, a probe that refuses queries while a secret is readable).replay-none:is filled because the hole is a grant on a store; the module's live tests hold it fail-first.Delivery
novox/hq@7f78016f0749— delivered since 2026-10-08T20:16:36ZDelivery plan — builds nothing: the change touches no module of the mesh's graph
Transitions
The commit's note under
refs/notes/mesh-plankeeps every transition:git log --notes=mesh-plan.