feat(opcore): support nested body schema and raw JSON body fields in ParseInline #212
Labels
No labels
burndown-2026-06
sunday-sprint
coherence-core
consult
headless
interactive
P0
P1
P2
P3
P4
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
coilyco-flight-deck/cli-guard#212
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?
Summary
ward-mcpneeds a truthful way to describe and carry complex HTTP request bodies from inline KDL, without forcing bespoke per-service MCP servers.The immediate consumer is
coilyco-flight-deck/ward-mcpissue#16, surfaced by the SigNozquery_rangebody shape. That consumer is downstream of this issue. ward-mcp cannot fix this cleanly until opcore grows a richer neutral input model.Problem
Today
http/opcore/inline.goonly accepts flat body declarations like:Those fields are always promoted as flat string fields.
http/opcore/schema.golikewise models inputs as a flatmap[string]Property, so object-valued body fields cannot be represented truthfully in the derived schema.ward-mcp already forwards arbitrary JSON body values at runtime, but the generated schema is lossy, so MCP clients lose discoverability or infer the wrong types.
Requested change
Extend
opcoreso the inline source can express richer body shapes while staying transport-neutral.Recommended minimum scope:
body "a" "b"syntax unchanged as shorthand.string|boolean|integer|numberrequired=trueraw=trueon an object/array field as an escape hatch for arbitrary JSON subtreesA representative target shape is:
Constraints
opcore, not as MCP-only special handling.Suggested implementation areas
http/opcore/schema.gohttp/opcore/inline.gohttp/opcore/descriptor.goif the body-field representation must grow beyond flatFieldraw=truefield emissionDownstream dependency
coilyco-flight-deck/ward-mcpshould pick this up after it lands, to expose the richer schema through MCP and migrate the SigNoz-style spec without custom server code.Filed by
ward agent advisorcross-repo fan-out from coilyco-flight-deck/ward-mcp#16 (part 1 of 2, ward#424).— Codex, via
ward agentWARD-RESERVATION: held 🔒
reservation details
Holder: container
engineer-codex-cli-guard-212on hostkais-macbook-pro-2.local.Reserved by
ward agent --harness codex(reserved 2026-07-09T22:40:47Z). Concurrentward agentruns are blocked until it finishes or the reservation goes stale (1h TTL).--forceoverrides.Do not comment on or edit this issue to steer the run while it is reserved. The engineer seeded the body once at launch and never re-reads it, so a comment or edit reaches only human readers, never the running engineer. A correction goes to a new issue, dispatched fresh. That is the only channel that reaches a run in flight. Where the forge supports it, ward locks this conversation to make that a road-block rather than a convention (ward#494).
run seed context — what this run is carrying (ward#609)
coilyco-flight-deck/cli-guard#212· branchissue-212· harnesscodex· workflowdirect-mainengineer-codex-cli-guard-212· wardv0.540.0· dispatched2026-07-09T22:40:47ZStatic container doctrine and seed boilerplate are identical every run and omitted here (they ride ward v0.540.0).
— Codex, via
ward agentWARD-OUTCOME: done
details
workflow: direct-main; review summary: review gate skipped by ~/.ward/config.yaml default
retrospective: the change felt surgical once the body field tree was split out from the flat flag path.
confidence: high
surprises: KDL needed boolean shims so the new
required=trueandraw=trueexamples could parse as written.follow-ups: ward-mcp can now consume nested and raw body shapes from opcore without bespoke server code.