Repository navigation
fix(issues): preserve assignment diagnostics and safe retries - #878
Conversation
…ind-opaque-retryable-provider-unavailable: retain assignment diagnostics and safe retries
|
To preview the documentation for this pull request, visit the following URL:
|
There was a problem hiding this comment.
Current status: All findings originating in this review are resolved.
Last reconciled onc226222. See aggregate Bugbot status.
🤖 Bugbot review snapshot
Bugbot reported 1 potential problem when commit 5d3fa66 was analyzed. This snapshot is historical; use the status block above for current state. 1 finding is linked to changed code.
Findings
- medium: Secondary rate limits in the response body are misclassified —
src/data/repository/github/assignment_provider_failure.ts:14
Bugbot: review complete
|
Copilot approval · Human review neededStatus: A protected workflow, policy, or trust-boundary file changed. Technical evidenceRevision: |
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## develop #878 +/- ##
===========================================
+ Coverage 95.40% 95.45% +0.05%
===========================================
Files 1149 1155 +6
Lines 37992 38098 +106
Branches 11309 11357 +48
===========================================
+ Hits 36246 36368 +122
+ Misses 672 665 -7
+ Partials 1074 1065 -9
🚀 New features to boost your workflow:
|
…ind-opaque-retryable-provider-unavailable: recognize secondary limits in response bodies
…ind-opaque-retryable-provider-unavailable: retain lifecycle state through completion and retry
There was a problem hiding this comment.
Current status: All findings originating in this review are resolved.
Last reconciled onc226222. See aggregate Bugbot status.
🤖 Bugbot review snapshot
Bugbot reported 1 potential problem when commit c62a0fb was analyzed. This snapshot is historical; use the status block above for current state. 1 finding is linked to changed code.
Findings
- medium: Out-of-range assignee counts make assignment failures escape their handler —
src/domain/issue_assignment_diagnostic.ts:26
…ind-opaque-retryable-provider-unavailable: validate assignee counts before provider access
Fixes #849.
Issue assignment hid lookup failures behind an opaque, retryable provider.unavailable error. It now retains a validated stage, safe provider operation, known HTTP category and correlation, with truthful retryability and confirmed/remaining assignment facts. Raw provider messages, bodies, credentials and membership lists are discarded. The original consumer failure's HTTP status and cause remain unknown; no outage or permission cause is retroactively inferred.
The workflow reads current assignees before membership, retains an already satisfied target, confirms requested identities in assignment responses and excludes a confirmed creator from additional selection. Confirmed partial results survive a later failure. A write whose response failed may have applied; retries reread native assignees and avoid repeating satisfied writes. Independent type, Project, priority and configuration effects retain their own result/state ownership.
The focused SDD, managed lifecycle/catalog, assignment recovery and error-reference docs are aligned. Existing bound port signatures, permissions, configuration and provider-free application boundaries remain. Catalog content and typed presentation are separate; the existing raw-log guard uses the canonical semantic mapper without exceptions or relaxed rules.
Local acceptance passes: 887 Jest suites / 17,346 tests (35 existing skips), 162 new distinct cases against a 60-case risk budget, and 267 extension tests at 100% in all four metrics. All eleven affected assignment modules reach 100% statements/branches/functions/lines. Full-suite LCOV hits 155/155 modified coverable lines, with zero misses or partials against 7d1e8d3. Types, lint, architecture, documentation/navigation, specs/catalog, workflow contracts, the existing Bugbot evaluator and Graphify pass. Existing setup human acceptances remain unchanged.
Three completion regressions exercise the actual issue completion/configuration storage path after HTTP 503 and HTTP 403 lookup failures or invalid configured counts. Type, Project and configuration are retained together; fresh retries create no duplicate type entity, Project item or configuration block. The existing type setter may repeat the same idempotent field assignment. The first review finding is corrected: HTTP 403 secondary limits detected only in response.data.message remain retryable provider limits; two regressions failed before the fix and now pass without retaining that response body.
The second review finding is also corrected: the shared assignment workflow validates the integer 0–10 count before provider access. Invalid runtime values return nonretryable configuration.invalid with a parameter-free localized recovery that names the setting without echoing the raw value. Nine regressions failed before this fix; boundary, pure-policy and localized/public-contract cases now pass. Invalid configuration also preserves independently completed type, Project and stored configuration.
All four SDK bundles and the public declaration closure are regenerated. The 97-file npm package passes CLI, typed Bugbot API and isolated local web smoke. A separate actual-tarball check verifies the new descriptor's valid/unread states, TypeScript rejection of invented stages and credential fields, and runtime serialization/denial retryability. These package observations are not counted as extra Jest cases. Temporary package SDKs and regenerable coverage HTML are retired; source, full LCOV/JSON, failure evidence and the approved rollback remain.
Remote delivery gates are still required for the exact published head c226222 against base 7d1e8d3: all applicable checks/platforms, complete current-head review with zero open findings/threads, and official Codecov 100% modified lines with zero misses or partials. One base coverage refresh was dispatched as run 41726443761; do not substitute local LCOV for the official head comparison.