Skip to content

fix(issues): preserve assignment diagnostics and safe retries - #878

Merged
efraespada merged 4 commits into
developfrom
bugfix/849-issue-assignment-loses-organization-lookup-diagnostics-behind-opaque-retryable-provider-unavailable
Nov 4, 2026
Merged

efraespada merged 4 commits into
developfrom
bugfix/849-issue-assignment-loses-organization-lookup-diagnostics-behind-opaque-retryable-provider-unavailable

Conversation

@efraespada

@efraespada efraespada commented Nov 3, 2026 •

Copy link
Copy Markdown
Member

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.

…ind-opaque-retryable-provider-unavailable: retain assignment diagnostics and safe retries
@docs-page

docs-page Bot commented Nov 3, 2026

Copy link
Copy Markdown

To preview the documentation for this pull request, visit the following URL:

docs.page/vypdev/copilot~878

Documentation is deployed and generated using docs.page

@vypbot
vypbot self-requested a review November 3, 2026 22:18
@vypbot vypbot added this to vypdev Nov 3, 2026
@vypbot vypbot added the size: XXL Indicates an extremely large task or issue that requires significant time and effort to complete. label Nov 3, 2026
@vypbot vypbot moved this to In Progress in vypdev Nov 3, 2026
@vypbot
vypbot changed the base branch from develop to master November 3, 2026 22:18
@vypbot
vypbot changed the base branch from master to develop November 3, 2026 22:18
@vypbot vypbot added the 80% Progress: 80% label Nov 3, 2026

@vypbot vypbot left a comment •

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Current status: All findings originating in this review are resolved.
Last reconciled on c226222. 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

@vypbot

vypbot commented Nov 3, 2026 •

Copy link
Copy Markdown
Contributor

Bugbot: review complete

Current status: No active findings on c226222.

Pull request · Verified commit · Workflow run

@vypbot

vypbot commented Nov 3, 2026 •

Copy link
Copy Markdown
Contributor

Copilot approval · Human review needed

Status: A protected workflow, policy, or trust-boundary file changed.
Completed: 1/1 observed checks succeeded; Bugbot complete.
Action required: Ask a human reviewer to decide.
Impact: No new approval is confirmed for this revision.
See checks

Technical evidence

Revision: c2262229e3ce; base: 7d1e8d3bdc1e; reason: protected-path.

@codecov-commenter

codecov-commenter commented Nov 3, 2026 •

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 95.45%. Comparing base (7d1e8d3) to head (c226222).

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     
Files with missing lines Coverage Δ
src/application/errors/issue_assignment_failure.ts 100.00% <100.00%> (ø)
...tion/policies/application_error_message_catalog.ts 100.00% <100.00%> (ø)
.../policies/application_error_presentation_policy.ts 100.00% <100.00%> (ø)
...application/policies/assignee_assignment_policy.ts 100.00% <100.00%> (ø)
...licies/issue_assignment_diagnostic_presentation.ts 100.00% <100.00%> (ø)
.../application/policies/issue_assignment_messages.ts 100.00% <100.00%> (ø)
src/application/ports/assignment_provider_error.ts 100.00% <100.00%> (ø)
...on/usecases/steps/issue/assign_members_workflow.ts 100.00% <100.00%> (+5.12%) ⬆️
src/data/model/application_error.ts 100.00% <100.00%> (ø)
...a/repository/github/assignment_provider_failure.ts 100.00% <100.00%> (ø)
... and 4 more

... and 1 file with indirect coverage changes

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

…ind-opaque-retryable-provider-unavailable: recognize secondary limits in response bodies
…ind-opaque-retryable-provider-unavailable: retain lifecycle state through completion and retry

@vypbot vypbot left a comment •

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Current status: All findings originating in this review are resolved.
Last reconciled on c226222. 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
@efraespada
efraespada merged commit 6bd590d into develop Nov 4, 2026
16 checks passed
@github-project-automation github-project-automation Bot moved this from In Progress to Done in vypdev Nov 4, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

70% Progress: 70% size: XXL Indicates an extremely large task or issue that requires significant time and effort to complete. state:verified

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

🐛🧑‍💻 - Issue assignment loses organization lookup diagnostics behind opaque retryable provider.unavailable

3 participants