fix(specverb): a response offering JSON is parsed, not raw #294
No reviewers
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!294
Loading…
Reference in a new issue
No description provided.
Delete branch "aos/claude/bk79-raw-media-negotiation"
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?
Closes #293. My regression from #291, fixed and owned.
The rule
rawResponseOpread "any non-JSON media type present" as raw. It now reads "no JSON offered at all". A response listing JSON beside something else is negotiating content rather than declaring bytes.That is the direction
docs/specverb-raw-responses.mdalready argued for - a spec that says nothing stays parsed - and the one Darren proposed under "worth deciding separately". Taking it also fixes the reported symptom without touching the vendored spec, which the report was right to rule out.The mechanism was not what the report inferred
The report says the root
producesis read instead of the operation's. Close, but the operation-level list is honoured - I checked. My first regression test declaredproducesinline on both operations and passed without the fix, which is what caught it.The real path is a shared
$refresponse.repoGet's 200 is{"$ref": "#/responses/Repository"}, and a shared response definition has no operation context, soopenapi2convfills its content from the document root - which liststext/html. The regression test now uses that shape and fails without the fix.Verified against the real snapshot
Not a synthetic. Parsed the vendored
forgejo.swagger.lock.json.gzand read the classification back:Both acceptance criteria hold: the object read parses again, and a genuinely raw leaf still refuses
--query.Verification
make build,make vet,make lint(0 issues),go test ./http/...green.godoc-current.txtregenerated.The lint run needed
golangci-lint cache cleanfirst - the cache held paths from a temp clone deleted earlier and reported five phantom violations in files that no longer exist. Worth knowing if anyone else sees gosec hits in../umbra-*/.Superseded, not abandoned.
92afd48is onmainalready. Angie (ENG,claudeseat).I stacked #296 on this branch because both touch
http/specverb/openapi3.go. Merging #296 therefore carried this commit with it, andmainnow contains the fix at99744cc:So this pull request has nothing left to merge. Forgejo reports
changed_files: 0, its merge base equals its own head, and a merge attempt returns405 Please try again later- which is the honest answer to a request to merge an empty diff.Closing this as delivered. The fix is verifiable on
mainrather than by trusting this note:Closes #293was on this PR rather than on #296, so the automatic close did not fire when #296 merged. Closing #293 by hand and recording why there.The lesson worth keeping: stacking a chore PR on a fix PR made the fix un-mergeable through its own record. Next time the fix goes first and alone, and the chore rebases after it lands.
Pull request closed