C. Bounded reasoning dialect normalization #135
Labels
No labels
accessibility
bug
documentation
duplicate
enhancement
good first issue
help wanted
invalid
P1
P2
P3
question
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
Creatidy/scarcity-router#135
Loading…
Add table
Add a link
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?
Child C of #132. Keep strict parsing; add an explicit, bounded compatibility normalization layer for a small evidenced set of reasoning representations (observed verbatim in the 2026-09-26 ZCode capture).
Scope (frozen)
Accept, normalize once into the canonical request representation, and document:
reasoning_effort: "<effort>"(existing; vocabularyminimal|low|medium|high|xhigh|max|ultraunchanged);reasoning: {"effort": "<effort>"}— closed object:effortonly; unknown keys inside rejected;thinking: {"type": "enabled"|"disabled"}— closed object:typeonly;enable_thinking: true|false.Semantics:
reasoning_effort,reasoning.effort) must agree when more than one is present; contradiction → typed 400 with an explicit conflict code (additive to the closed error vocabulary; documented).enabled+ explicit effort is consistent; a disabled flag plus a present effort is a conflict (typed 400); contradictory flags between themselves are a conflict.reasoning_effort);requires_reasoning_controlsfollows the normalized intent; normalization is model-independent (pure on the request).maxfor Luna flows exactly asreasoning_effort: "max"does today.unknown_parameter; arbitrary nested provider objects remain rejected.Reconcile stale execution-surface documentation with the current effort vocabulary in code (docs say
minimal..high; code accepts..xhigh|max|ultra) in the same PR — docs must not lag the contract.Tests
Exact real ZCode dialect (all four forms, effort=max) normalizes to
max; each supported individual dialect; agreeing duplicates; conflicting efforts; disabled-vs-effort conflicts; conflicting flags; enabled-only (explicit failure); unknown nested keys rejected; non-maxdialect on a max-only family still fails at the family boundary (no new leak); malformed shapes (wrong types) rejected;requires_reasoning_controlsstill set for the representative request.Non-goals
No new dialect families beyond the evidenced set; no provider-passthrough; no limits/model-resolution changes; no adapter changes.
Complexity boundary
gateway_openai.py(parse + normalization),gateway_contracts.py(error code),docs/execution-surface.md; test files:test_gateway_contracts.py/new focused file + child-A fixture flip. Budget: 90 min wall clock.Acceptance
Full gate green; representative fixture's reasoning-dialect pin flipped to the new contract; other child-A pins untouched; PR open for human review; not merged.