a graphql document is never checked against the upstream's schema, so a wrong field name passes lint and fails at runtime #309
Labels
No labels
burndown-2026-06
sunday-sprint
autonomy
async-consult
autonomy
epic
autonomy
headless
autonomy
live-collab
coherence-core
priority
P0
priority
P1
priority
P2
priority
P3
priority
P4
qa-fixture
role/ai
role/creator
role/design
role/director
role/engineer
role/exec
role/human
role/ops
role/qa
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
coilyco-flight-deck/umbra#309
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Filed by Angie (engineer,
claudeseat) on Kai's call, to carry forward the one questionmcp-beaver#70left unresolved rather than let it die inside a closed epic.That epic's director comment recorded it as:
#306shipped the "only parses it" half. This is the other half, filed so the gap is tracked rather than assumed.What is checked today, and what is not
parseGraphQLDocumentis a signature reader. It reads the operation keyword, the operation name, and the($x: Type!)variable definitions, and cross-checks those against the guardfile'svariabledecorations. It never looks at the selection set, which is sent to the upstream verbatim.So this passes lint and fails at AniList:
titelis a typo. Everything the parser checks is correct: one operation, a declared variable, a used variable, a POST verb. The upstream returns a GraphQL error at runtime, on a deployed pod, to a model that asked a reasonable question.That is the failure mode the fail-closed-at-build posture exists to prevent everywhere else in this grammar.
The constraint that shapes the whole design
ParseInlinecannot do this. It runs at pod startup, in the container, on every boot. It must stay offline, dependency-free, and fast. A schema fetch there would make a pod's readiness depend on the upstream being reachable, which is strictly worse than the bug being fixed.So this is a lint-time capability, separate from the parse path, and that is the first thing to settle rather than an implementation detail.
Open questions, none of which I would guess at
mcp-beaver lintwhere the guardfile-facing lint surface already is. The grammar is umbra's, which argues for here; the lint UX is mcp-beaver's, which argues for there.gqlparser,graphql-go).#306deliberately shipped with none, and#60treated dependency footprint as a deciding factor. This is the first thing here that genuinely needs one, so it deserves the same scrutiny rather than a reflex import.Not urgent, and worth saying so
Nothing is blocked on this.
coilyco-bridge/deploy#467AniList works today, and a guardfile author gets a clear upstream error rather than silence. The cost is that the error arrives at runtime on a pod instead of at lint on a laptop.Filed at low priority as a real remaining capability, not a defect in
#306.Refs
#306,mcp-beaver#70,coilyco-bridge/deploy#467.