Context
@forgeplan/web is a read-only CLI proxy (shells forgeplan <cmd> --json, rule: no MCP). It built PROB-060 slug-canonical identity display + a "weakest evidence" risk view assuming the CLI returns the identity triple + per-EVID structured fields. An audit vs forgeplan 0.33.0 found they are not in CLI JSON.
Findings (verified on 0.33.0)
list --json items expose only id, kind, status, title.
get --json exposes slug (nullable, frontmatter) but not id_display / id_canonical / predicted_number / assigned_number. predicted_number/assigned_number exist only as markdown frontmatter; id_display is a rendered value; id_canonical is not a real field.
- per-EVID
congruence_level / evidence_type live only inside each EVID body under ## Structured Fields — not in get/score --json.
- The triple partially exists in the MCP DTO (
id_display = raw id, id_canonical = lowercased id), but read-only consumers using the CLI never see it → CLI/MCP contract asymmetry.
Impact
Any read-only consumer (web viewer, dashboards, CI) cannot render the canonical display id, the pre-merge ? draft marker, or rank evidence by CL/type without an N+1 get fan-out + fragile markdown parsing. In @forgeplan/web this left the entire PROB-060 display path dormant (degrades to raw id) and forced FR-007 (weakest-evidence with CL/type) to ship degraded.
Request
Add an identity/structured projection to CLI JSON (a --render flag is fine):
list/get emit id_display (rendered, ? for pre-merge) + id_canonical.
get/score emit per-EVID congruence_level + evidence_type (promote the ## Structured Fields to JSON).
Related: #394 (same identity model), #353 / #383 (CLI↔MCP asymmetry), #374 (--json parity).
Context
@forgeplan/webis a read-only CLI proxy (shellsforgeplan <cmd> --json, rule: no MCP). It built PROB-060 slug-canonical identity display + a "weakest evidence" risk view assuming the CLI returns the identity triple + per-EVID structured fields. An audit vs forgeplan 0.33.0 found they are not in CLI JSON.Findings (verified on 0.33.0)
list --jsonitems expose onlyid,kind,status,title.get --jsonexposesslug(nullable, frontmatter) but notid_display/id_canonical/predicted_number/assigned_number.predicted_number/assigned_numberexist only as markdown frontmatter;id_displayis a rendered value;id_canonicalis not a real field.congruence_level/evidence_typelive only inside each EVID body under## Structured Fields— not inget/score --json.id_display= raw id,id_canonical= lowercased id), but read-only consumers using the CLI never see it → CLI/MCP contract asymmetry.Impact
Any read-only consumer (web viewer, dashboards, CI) cannot render the canonical display id, the pre-merge
?draft marker, or rank evidence by CL/type without an N+1getfan-out + fragile markdown parsing. In@forgeplan/webthis left the entire PROB-060 display path dormant (degrades to rawid) and forced FR-007 (weakest-evidence with CL/type) to ship degraded.Request
Add an identity/structured projection to CLI JSON (a
--renderflag is fine):list/getemitid_display(rendered,?for pre-merge) +id_canonical.get/scoreemit per-EVIDcongruence_level+evidence_type(promote the## Structured Fieldsto JSON).Related: #394 (same identity model), #353 / #383 (CLI↔MCP asymmetry), #374 (--json parity).