A fence reading as the JSON body a control-plane read answers with.
Beside executionFencedResponse and for the same reason: the published
GET /admin/execution-fence route and the spike's local control probe both
project a reading into this exact shape, and a projection written twice is
one an operator's tooling can watch drift. Absent fields are OMITTED rather
than sent as null — proofKey/proofRunId exist only in proof-only, and a
null would invite a caller to read "no proof run yet" out of a state that has
no proof at all.
A fence reading as the JSON body a control-plane read answers with.
Beside
executionFencedResponseand for the same reason: the publishedGET /admin/execution-fenceroute and the spike's local control probe both project a reading into this exact shape, and a projection written twice is one an operator's tooling can watch drift. Absent fields are OMITTED rather than sent as null —proofKey/proofRunIdexist only in proof-only, and a null would invite a caller to read "no proof run yet" out of a state that has no proof at all.