[AI:Finding] F20260711-E601BBF5: Expired-lock reap in LocalIdempotencyGuard is a silent recovery — no logger, no WARN when a dead instance's lock is stolen - #48
Conversation
dzykovic
left a comment
There was a problem hiding this comment.
[AI-REVIEWER] PASS (high) — records-only planning PR, premise verified directly against master: LocalIdempotencyGuard's constructor takes only dbPath, acquire ignores its _ctx, the bulk DELETE of expired rows runs with no log line, and entry.ts:133 is the exact wiring point. The task's implementation analysis is notably precise: the bulk delete makes the same-key expired branch practically unreachable, so the WARN must capture reaped completed=0 rows BEFORE the delete — correct and exactly the kind of detail that prevents a useless fix. Correctly scoped out-of-scope twin (local-storage-bundle.ts acquire) keeps the change one-commit revertible. The finding applies the repo's own bounded-self-healing principle: recovery stays TTL-bounded, it just becomes observable.
There was a problem hiding this comment.
Pull request overview
Records and starts work on finding F20260711-E601BBF5 by adding an implementation task spec and moving the finding into an active (“in-progress”) state.
Changes:
- Added task T20260711-AFBAE9C0 documenting the planned logging/observability changes for
LocalIdempotencyGuardexpired-lock reaping. - Updated finding F20260711-E601BBF5 status to
in-progressand addedstarted_attimestamp.
Reviewed changes
Copilot reviewed 2 out of 2 changed files in this pull request and generated no comments.
| File | Description |
|---|---|
.operator/data/tasks/T20260711-AFBAE9C0.md |
New task/spec describing the intended code changes and acceptance criteria for logging expired-lock reaps. |
.operator/data/findings/F20260711-E601BBF5.md |
Marks the finding as in-progress and records the start timestamp. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Finding F20260711-E601BBF5
Type: finding | Priority: 4 | Source: resilience-boundaries#FINDING-001
Assumption
Severity: medium
Priority: 4
Files Affected: 2
Pattern: Bounded self-healing, never silent recovery (resilience-boundaries §"Every recovery path … must be bounded by TTL/attempt budget AND logged with what was recovered and why"). This is the exact silent-recovery case the v5 observability mandate forbids (
intelligence/rules/typescript.md§REQUIRED "every catch-and-continue / fallback path taken MUST warn with the reason";migration.mdobservability BLOCKER gate).Domain
Automated by AI Automation Pipeline. PR shape (plan / catch-up / rejected)
is set by the composer at the top of this body; current lifecycle state is
tracked via the PR label (
ai:processing,ai:in-review,ai:ready-to-merge,ai:failed,ai:rejected) and the PR comments — not this description.