diff --git a/apps/claude-code/unic-pr-review/.claude-plugin/marketplace.json b/apps/claude-code/unic-pr-review/.claude-plugin/marketplace.json index a664ff0a..6f2739b1 100644 --- a/apps/claude-code/unic-pr-review/.claude-plugin/marketplace.json +++ b/apps/claude-code/unic-pr-review/.claude-plugin/marketplace.json @@ -21,7 +21,7 @@ "name": "unic-pr-review", "source": "./", "tags": ["productivity", "code-review", "azure-devops"], - "version": "2.1.2" + "version": "2.1.3" } ] } diff --git a/apps/claude-code/unic-pr-review/.claude-plugin/plugin.json b/apps/claude-code/unic-pr-review/.claude-plugin/plugin.json index 27a9363a..6a2223f6 100644 --- a/apps/claude-code/unic-pr-review/.claude-plugin/plugin.json +++ b/apps/claude-code/unic-pr-review/.claude-plugin/plugin.json @@ -15,5 +15,5 @@ "keywords": ["pr-review", "azure-devops", "jira", "confluence", "code-review", "unic"], "license": "LGPL-3.0-or-later", "name": "unic-pr-review", - "version": "2.1.2" + "version": "2.1.3" } diff --git a/apps/claude-code/unic-pr-review/CHANGELOG.md b/apps/claude-code/unic-pr-review/CHANGELOG.md index fc9eb241..1f23a74f 100644 --- a/apps/claude-code/unic-pr-review/CHANGELOG.md +++ b/apps/claude-code/unic-pr-review/CHANGELOG.md @@ -16,6 +16,20 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed - (none) +## [2.1.3] — 2026-06-05 + +### Breaking +- (none) + +### Added +- `silent-failure-hunter` agent now detects lost-signal / observability gaps: fallback branches, early-return guards, and cancellation handlers that exit without emitting the analytics event, telemetry call, structured log, or Sentry capture that the normal execution path emits (issue #217) +- `silent-failure-hunter` agent recognises missing event-emission APIs (`trackEvent`, `analytics.page`, `reportError`, APM spans, Sentry breadcrumbs) on non-success paths (issue #217) +- `silent-failure-hunter` agent flags logging or diagnostic calls unconditionally gated on a development / debug flag, making them invisible in production (issue #217) +- False-positive guards: symmetric exclusions prevent over-flagging intentional conditional telemetry, different-event traces on error paths, and telemetry disabled by design (issue #217) + +### Fixed +- (none) + ## [2.1.2] — 2026-06-04 ### Breaking diff --git a/apps/claude-code/unic-pr-review/agents/silent-failure-hunter.md b/apps/claude-code/unic-pr-review/agents/silent-failure-hunter.md index c9801b8f..69e3a7ec 100644 --- a/apps/claude-code/unic-pr-review/agents/silent-failure-hunter.md +++ b/apps/claude-code/unic-pr-review/agents/silent-failure-hunter.md @@ -39,12 +39,17 @@ Apply the rubric strictly. If you are unsure whether a Finding reaches 60, it do - Fallback chains (try A, then B, then C) that switch approaches without recording or explaining why the prior attempt failed - Retry logic that exhausts all attempts and then proceeds or returns a default without surfacing the final failure to the caller or the logs - Errors caught locally that should propagate to a higher-level handler — catching here prevents proper cleanup, resource release, or centralised handling +- Lost-signal / observability gaps: a fallback branch, early-return guard, or cancellation handler exits without emitting the analytics event, telemetry call, structured log, or Sentry capture that the normal execution path emits — leaving the outcome invisible in production observability tools +- Event emission (`trackEvent`, `analytics.page`, `reportError`, APM spans, Sentry breadcrumbs) that appears only on the success/normal path; an early-exit guard or exception branch skips it without firing a corresponding trace to record what actually happened +- Logging or diagnostic calls unconditionally gated on a development flag (`process.env.NODE_ENV !== 'production'`, `__DEV__`, `IS_TEST`) with no production-observable fallback — production gets silence where developers see output ## What NOT to look for - Formatting or whitespace (handled by Biome) - Error-handling that is deliberately suppressive and clearly documented as such (e.g. fire-and-forget telemetry) - Handling patterns outside the diff scope +- A fallback or early-return that deliberately fires a **different** matching event to record the outcome (e.g. a `navigation_cancelled` event in place of `page_view`) — the outcome is still traced under a different name; this is deliberate traced suppression, not a gap +- Analytics / telemetry emission that is intentionally disabled in specific environments when the omission is explicit and documented (e.g. a guarding comment, a feature flag, or a dedicated `isAnalyticsEnabled()` / `isTelemetryEnabled()` wrapper) ## Output format diff --git a/apps/claude-code/unic-pr-review/package.json b/apps/claude-code/unic-pr-review/package.json index 9286f360..9eb8dc93 100644 --- a/apps/claude-code/unic-pr-review/package.json +++ b/apps/claude-code/unic-pr-review/package.json @@ -22,5 +22,5 @@ "verify:changelog": "unic-verify-changelog" }, "type": "module", - "version": "2.1.2" + "version": "2.1.3" }