Skip to content

[finding] plugin-audit: a THIRD copy of both #15166 defects lives in read-audit.ts — process-wide boolean plus an unconditional datasource remedy #18247

Description

@claude

Reported by the domain:services dev that delivered #18246 (card #17452) as an out-of-scope finding, and filed here by the seat — dev agents report findings with dedupe words; they ⛔ do not file.

Class (b): the same declared invariant, violated the same way, on a different path.

The shape, for the third time

packages/plugins/plugin-audit/src/read-audit.ts from line 484 — reportReadAuditWriteFailure carries:

  1. its own process-level failureReported boolean, so the first failure of any cause silences every later failure of every other cause for the life of the process; and
  2. its own fixed message literal, carrying the ADR-0057 §3.6 / OS_TELEMETRY_DB datasource guidance unconditionally — printed for causes that have nothing to do with datasource routing, sending the operator to check something that is working.

Both are exactly the two defects #15166 fixed in audit-writers.ts and #17452 has now fixed in auth-event-audit.ts.

Why this one is not merely a repetition

⭐ Its callee persistReadAuditRows IS registered in DURABILITY_CRITICAL_CALLEES (scripts/check-durability-degradation-log-level.mjs:357). So this copy sits on a seam the repo has already declared durability-critical — the register names it, and the reporting discipline behind the register is the thing that is broken here.

Why it is cheap now, and ⛔ why it was not ridden in on #18246

#18246 exports auditFailureCauseKey and auditFailureCauseSummary from audit-writers.ts precisely so the next copy imports them rather than re-spelling them — a second copy of the key is how this defect reached the second file, and a third spelling would be the same mistake again. The port is therefore a small one.

It was ⛔ deliberately not ridden in on #18246: that card's scope is the auth-event copy, and widening a delivery to a third file on the dev's own initiative is how a reviewable diff stops being reviewable.

⚠️ A near neighbour that is NOT this class

packages/services/service-settings/src/config-change-audit.ts:157 carries the same process-wide failureReported shape, but it is not the same defect and ⛔ should not be folded into this card: its callee is a bare eng.insert that no register names, its first line already carries Cause: plus the real detail, and its remedy text is cause-agnostic (it explains that plugin-audit is optional). An observation, not a contract violation. Natural taker: whoever takes this card, as the same sweep.

Dedupe read, as performed by the reporting dev

One targeted semantic search over this repo, 12 hits, no open duplicate, with #17452 and #15166 both returning as the firing control (so the search was live, not empty).


Dedupe words: read-audit.ts reportReadAuditWriteFailure persistReadAuditRows failureReported third copy

⛔ Ungraded on purpose: grading is triage's, not the dispatching seat's.


Generated by Claude Code

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions