Goal
Create one shared transport-error predicate or marker set with an explicit GraphQL-only extension. Retain transport-specific authentication classification and duplicate-item handling.
Background
Repository-wide duplication review against f9c18f3294873cbbcda9acc7af7f1bc6b17eed45 (2026-09-17).
GraphQL and REST each maintain their own transport-error marker tuple and nearly identical lowercase/any logic (97% token similarity). All REST transport markers appear in the GraphQL copy; GraphQL additionally handles unknown owner type. Live pure-function probes confirmed the common classifications and that deliberate difference. These decisions control fallback and fail-closed behavior.
Verified source locations:
Closed #2230 added local REST recovery. No open issue covers the duplicate transport predicates introduced by the two adapters.
This is a maintainability refactor. Similarity alone is not evidence of a production failure; any demonstrated differences are called out above.
Scope
Create one shared transport-error predicate or marker set with an explicit GraphQL-only extension. Retain transport-specific authentication classification and duplicate-item handling.
Acceptance Criteria
- Common network/rate-limit/server markers are maintained once.
- Preserve the GraphQL-only
unknown owner type recovery trigger.
- Authentication and permission failures do not become generic retryable transport failures.
- Preserve current exception classes, fallback routing and request timeout behavior.
Validation
Run project_graphql/project_rest tests; parameterize every current marker plus benign text, auth failures and GraphQL-only owner errors through both callers.
Run focused checks first, then the repository-required broader checks for the actual implementation. Preserve public command contracts and review .ai-context/ impact in the PR.
Non-Goals
No merger of REST and GraphQL response parsing; no new retries, quota bypasses or network behavior.
Project Fields
- Status: Ready
- Priority: P2
- Area: CLI
- Initiative: Contract Hardening
- Size: S
- Milestone: Unscheduled; no release commitment is implied by this audit.
Agent Assignment
Implementation-ready scoped follow-up, assigned to codeforester. Follow AGENTS.md and docs/github-workflow.md: start through basectl gh issue start, use the canonical issue worktree, characterize current behavior before extraction, and open an issue-linked PR. Keep each refactor independently reviewable.
Goal
Create one shared transport-error predicate or marker set with an explicit GraphQL-only extension. Retain transport-specific authentication classification and duplicate-item handling.
Background
Repository-wide duplication review against
f9c18f3294873cbbcda9acc7af7f1bc6b17eed45(2026-09-17).GraphQL and REST each maintain their own transport-error marker tuple and nearly identical lowercase/any logic (97% token similarity). All REST transport markers appear in the GraphQL copy; GraphQL additionally handles
unknown owner type. Live pure-function probes confirmed the common classifications and that deliberate difference. These decisions control fallback and fail-closed behavior.Verified source locations:
cli/python/base_github_projects/project_graphql.py:48-77cli/python/base_github_projects/project_rest.py:102-138Closed #2230 added local REST recovery. No open issue covers the duplicate transport predicates introduced by the two adapters.
This is a maintainability refactor. Similarity alone is not evidence of a production failure; any demonstrated differences are called out above.
Scope
Create one shared transport-error predicate or marker set with an explicit GraphQL-only extension. Retain transport-specific authentication classification and duplicate-item handling.
Acceptance Criteria
unknown owner typerecovery trigger.Validation
Run project_graphql/project_rest tests; parameterize every current marker plus benign text, auth failures and GraphQL-only owner errors through both callers.
Run focused checks first, then the repository-required broader checks for the actual implementation. Preserve public command contracts and review
.ai-context/impact in the PR.Non-Goals
No merger of REST and GraphQL response parsing; no new retries, quota bypasses or network behavior.
Project Fields
Agent Assignment
Implementation-ready scoped follow-up, assigned to
codeforester. FollowAGENTS.mdanddocs/github-workflow.md: start throughbasectl gh issue start, use the canonical issue worktree, characterize current behavior before extraction, and open an issue-linked PR. Keep each refactor independently reviewable.