Path: P2 | access-security(read audit) | 北极星「优先级」4
PLACEHOLDER
content/docs/permissions/record-view-auditing.mdx:221 says 「Both degradations are reported once per process」 and that is now half false: one of the two was re-keyed per cause by #18247, the other is still a process-wide boolean.
Filed by the domain:devx execution PM seat (session session_017ef78bLdybu3AffehKkhfk) as the discharge of a fence carried by #17451. ⛔ Not graded, no domain:* — that is triage's. Expected landing point: content/docs/** ⇒ domain:devx.
The sentence
content/docs/permissions/record-view-auditing.mdx:221, verbatim on origin/main 0046a41b4:
Both degradations are reported once per process and never retried — a retry
storm against an unreachable table turns a degradation into an outage:
It then names the two: buffer overflow and a failed ledger write.
Measured — the two halves no longer agree, read at 0046a41b4
| the page's two degradations |
its implementation today |
verdict |
| buffer overflow |
packages/plugins/plugin-audit/src/read-audit.ts:240 let overflowReported = false; — a process-wide boolean |
✅ the sentence is TRUE for this one |
| a failed ledger write |
same file :542 const reportedReadAuditFailureCauses = new Set<string>();, and the docblock at :499 reads 「once per CAUSE, not once per failed flush」 |
⛔ the sentence is FALSE for this one |
⇒ The word doing the work is 「Both」. A reader who takes the page at its word will expect a second, unrelated ledger fault to be silent for the life of the process; it is not — it gets its own error line, once.
⭐ Why this was not filed until now, and why the earlier exclusion was not wrong
#17451 fenced this page explicitly: 「record-view-auditing.mdx … is NOT falsified: it documents the record-view (read) audit buffer, implemented in read-audit.ts, which PR #17450 does not touch. ⇒ Leave it alone.」
⚠️ That reasoning is still true today — PR #17450 genuinely does not touch read-audit.ts. What happened is that a third card did: #18247 (closed completed) found a third copy of #15166's defect living in read-audit.ts and re-keyed it. The exclusion's premise survived; its conclusion did not.
⇒ ⭐ This is the 「control passed ≠ the right question was asked」 shape. The exclusion asked 「does the PR that falsifies the sibling page touch this file?」 when the load-bearing question was 「does anything still make this sentence true?」. Recorded because the shape is reusable, ⛔ not to reopen #17451's scope decision, which was correct and was honoured — PR #19212 did not touch this page and its description does not claim the page was verified.
What a fix looks like (⛔ not prescribed)
The sentence needs to stop saying 「Both」 in one breath. The two bullets below it already separate the cases, so the repair is plausibly confined to the lead-in sentence plus whichever bullet asserts the granularity. ⛔ This card does not prescribe the wording and does not ask for the implementation to change.
Independently corroborated
Two seats measured this separately and agreed: the PM seat while writing #17451's dispatch, and #17451's implementing dev in its reverse-read. Both landed on the same two line readings.
⚠️ One line-number correction for whoever takes it: #17451's card cites :217 for this page; it is :221 today.
Refs: #17451 · #18247 · #15166 · #17452 · PR #19212
Generated by Claude Code
Path: P2 | access-security(read audit) | 北极星「优先级」4
PLACEHOLDER
content/docs/permissions/record-view-auditing.mdx:221says 「Both degradations are reported once per process」 and that is now half false: one of the two was re-keyed per cause by #18247, the other is still a process-wide boolean.Filed by the
domain:devxexecution PM seat (sessionsession_017ef78bLdybu3AffehKkhfk) as the discharge of a fence carried by #17451. ⛔ Not graded, nodomain:*— that is triage's. Expected landing point:content/docs/**⇒domain:devx.The sentence
content/docs/permissions/record-view-auditing.mdx:221, verbatim onorigin/main0046a41b4:It then names the two: buffer overflow and a failed ledger write.
Measured — the two halves no longer agree, read at
0046a41b4packages/plugins/plugin-audit/src/read-audit.ts:240let overflowReported = false;— a process-wide boolean:542const reportedReadAuditFailureCauses = new Set<string>();, and the docblock at:499reads 「once per CAUSE, not once per failed flush」⇒ The word doing the work is 「Both」. A reader who takes the page at its word will expect a second, unrelated ledger fault to be silent for the life of the process; it is not — it gets its own
errorline, once.⭐ Why this was not filed until now, and why the earlier exclusion was not wrong
#17451 fenced this page explicitly: 「
record-view-auditing.mdx… is NOT falsified: it documents the record-view (read) audit buffer, implemented inread-audit.ts, which PR #17450 does not touch. ⇒ Leave it alone.」read-audit.ts. What happened is that a third card did: #18247 (closedcompleted) found a third copy of #15166's defect living inread-audit.tsand re-keyed it. The exclusion's premise survived; its conclusion did not.⇒ ⭐ This is the 「control passed ≠ the right question was asked」 shape. The exclusion asked 「does the PR that falsifies the sibling page touch this file?」 when the load-bearing question was 「does anything still make this sentence true?」. Recorded because the shape is reusable, ⛔ not to reopen #17451's scope decision, which was correct and was honoured — PR #19212 did not touch this page and its description does not claim the page was verified.
What a fix looks like (⛔ not prescribed)
The sentence needs to stop saying 「Both」 in one breath. The two bullets below it already separate the cases, so the repair is plausibly confined to the lead-in sentence plus whichever bullet asserts the granularity. ⛔ This card does not prescribe the wording and does not ask for the implementation to change.
Independently corroborated
Two seats measured this separately and agreed: the PM seat while writing #17451's dispatch, and #17451's implementing dev in its reverse-read. Both landed on the same two line readings.
:217for this page; it is:221today.Refs: #17451 · #18247 · #15166 · #17452 · PR #19212
Generated by Claude Code