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
security(flows): move a flow's inbound-hook secret out of flow metadata into the write-only secret seam #7799 established — no read, the generic data door included, returns it #20790
Ruled: 5910098951 · letter 17.x — the secret seam ships in the 17.x train (Q1 B · Q2 A · Q3 A · Q4 A per 5909514730); re-claim after PR #20830 lands, after #20761 on the access axis · 2026-09-30T11:21Z
Filed by the triage seat (objectstack-wide, seat post #6015, session_01AavokzJ5DndAwitDXvKy4U) on the maintainer's ruling. ⛔ Not a claim, ⛔ not a dispatch. Graded here: enhancement · security · priority:p2 · domain:services · area:access · pm:queue.
⚠️Disclosure discipline: this card and every comment and PR on it carry no request body, header or field path. The measurements stay in the dev's private scratch space.
The ruling
The maintainer answered 「同意」 in the live PM chat with the triage seat, 2026-09-30, to triage's proposal: move the flow inbound-hook secret into a write-only seam, the way #7799 moved the outbound webhook signing secret. The proposal was parked in triage's grade of #20552 (5882728818: "the durable answer, but it is a new authoring surface, so it goes to the maintainer as a decision after this lands").
Migration. Existing flows whose definition still carries the value are moved into the seam once, with an ADR-0087 disposition. The value never appears in any log or report.
Pins:
no read surface returns the value, including the generic data door as an administrator;
the inbound door still verifies with the original secret after a move and after an edit-and-republish;
Why p2. The residual reach is an administrator reading an at-rest row, a least-privilege gap. It is not reached below administrator as measured, and #20552 already closed the member-level reads.
Ruled: 5910098951 · letter 17.x — the secret seam ships in the 17.x train (Q1 B · Q2 A · Q3 A · Q4 A per 5909514730); re-claim after PR #20830 lands, after #20761 on the access axis · 2026-09-30T11:21Z
Filed by the triage seat (objectstack-wide, seat post #6015,
session_01AavokzJ5DndAwitDXvKy4U) on the maintainer's ruling. ⛔ Not a claim, ⛔ not a dispatch. Graded here:enhancement·security·priority:p2·domain:services·area:access·pm:queue.The ruling
The maintainer answered 「同意」 in the live PM chat with the triage seat, 2026-09-30, to triage's proposal: move the flow inbound-hook secret into a write-only seam, the way #7799 moved the outbound webhook signing secret. The proposal was parked in triage's grade of #20552 (
5882728818: "the durable answer, but it is a new authoring surface, so it goes to the maintainer as a decision after this lands").Why it is still needed after #20552
config.secreton the start node) is served in cleartext by the flow-definition read; after #20529 every armed hook carries one #20552 (p0, closed with PR fix(service-automation,metadata-protocol,metadata,runtime): withhold a flow's inbound-hook secret from every served definition, and keep it on a round trip (#20552) #20585) projects the secret out of every definition read, and keeps it across a read-edit-republish.domain:servicesseat's landing record measured that an administrator reads the at-rest row through the generic data door.Direction
sys_webhook.definition_json#7799 introduced (PR fix(webhooks): stop storing the subscriber signing secret in cleartext (#7799) #7901,ObjectQL.resolveSecretField). It is written or replaced on authoring, resolved only at verification time inside the inbound door, and returned by no read: definition reads,/meta, export, and the generic data door alike.config.secreton the start node) is served in cleartext by the flow-definition read; after #20529 every armed hook carries one #20552 defined) keeps the stored secret. Only an explicit new value rotates it. [security] a flow's inbound-hook secret (config.secreton the start node) is served in cleartext by the flow-definition read; after #20529 every armed hook carries one #20552's round-trip rule is kept.Why p2. The residual reach is an administrator reading an at-rest row, a least-privilege gap. It is not reached below administrator as measured, and #20552 already closed the member-level reads.