Full spec: docs/hardening-roadmap-2026-04-16.md#h-11
Description
GitHubClient, HunterClient, XClient, ExaClient declare response interfaces and cast await response.json() to that type. Field renames (e.g., public_repos → repo_count) silently produce undefined and corrupt downstream scoring. The "API field renames" pattern flagged in rules/debugging.md.
Current State
packages/adapters/adapter-github/src/github-client.ts
packages/adapters/adapter-hunter/src/hunter-client.ts
packages/adapters/adapter-x/src/x-client.ts
packages/adapters/adapter-exa/ (identify HTTP call site)
Suggested Fix
Verification
Automation Hints
scope: packages/adapters
do-not-touch: packages/core, packages/scoring
approach: add-validation
risk: medium
max-files-changed: 10
blocked-by: #9
bail-if: any adapter integration test fails
Priority
Medium
Full spec:
docs/hardening-roadmap-2026-04-16.md#h-11Description
GitHubClient,HunterClient,XClient,ExaClientdeclare response interfaces and castawait response.json()to that type. Field renames (e.g.,public_repos→repo_count) silently produceundefinedand corrupt downstream scoring. The "API field renames" pattern flagged inrules/debugging.md.Current State
packages/adapters/adapter-github/src/github-client.tspackages/adapters/adapter-hunter/src/hunter-client.tspackages/adapters/adapter-x/src/x-client.tspackages/adapters/adapter-exa/(identify HTTP call site)Suggested Fix
const user = GitHubUserSchema.parse(await res.json()).ApiContractErrorwith field path + truncated payload.Verification
pnpm buildpassespnpm testpassespnpm typecheckcleanApiContractErrorwith field pathAutomation Hints
scope: packages/adapters
do-not-touch: packages/core, packages/scoring
approach: add-validation
risk: medium
max-files-changed: 10
blocked-by: #9
bail-if: any adapter integration test fails
Priority
Medium