D180 - Behavioural provenance, because abstinence is not enforceable
decided ยท 2026-08-21
found_by recorded how a name was
arrived at, and CI re-derives every committed name from this
repository's own inputs (D119). Nothing did the same for
behaviour - an arity, a return kind, what happens at an
edge - and those are the facts that change what the emulator does.
Seventy-two entries recorded behaviour; none said how any of it was
known.
The route principle 1 does not name
Principle 1 forbids code written while reading vendor binaries, and forbids lifting from other projects. Both describe a reading step that can be pointed at.
Facts now arrive by way of a model that has read the public internet, including the other projects in this space and the databases they ship. "This is what the function does" can be recalled and then dressed as reasoning, which is the same convergence with no reading step to point at. The stated goal is an unattended loop of exactly this shape, so it stops being a hypothetical the moment it runs.
Abstinence cannot be the mechanism: it is unenforceable and, worse, unprovable. The defensible claim was never "I never saw it" - it is "here is how each fact was derived", which happens to answer three separate worries with one field. A licence question (did this come from someone else's source?), a quality one (is this reasoned or generated?), and an operational one (which of our facts are actually guesses?).
The vocabulary is the enforcement, not the field
known_by takes published,
measured, guest-observed, or
assumed. Every value is falsifiable, and there is
deliberately none meaning "I already knew it." Recording a fact
therefore means committing to a checkable claim about its source, which
is a different act from absorbing one silently - and a wrong claim is
auditable later against hardware, where a silent absorption never
was.
published and measured claim outside
support, so they must cite where. An uncheckable claim of external
support is worth strictly less than an honest
assumed, because it reads as evidence.
A fifth value for "by analogy to a published interface" was
considered and rejected. It is how most of libkernel is actually
understood, but it would have become the comfortable default that
absorbs precisely the recalled-knowledge cases this exists to catch.
Analogies go in assumptions, where hardware can settle
them.
Per-claim, because the mixed entry is the normal one
One provenance per function would have to round a mixed entry up or
down, and rounding up is how a guess becomes a fact.
assumptions lists what known_by does not
cover. snprintf_s is the worked example: the base interface
is ISO C 7.21.6.5 and citable, while the bounds-checked variant is Annex
K - optional, implementations differ, and both its truncation
return and whether it terminates the buffer are unverified.
Refused, not defaulted
learn rejects an entry that does not account for itself.
Every available default is a lie: assumed understates work
really done, anything stronger overstates it. Refusing costs one retry
and is the only option that cannot record something untrue.
assumed is not a failure state and 10 of 72 entries are
there. The open-question count is expected to rise as
more is written down - an assumption only appears once somebody notices
it - and to fall as hardware answers them. A number that only ever falls
is measuring candour rather than knowledge, which is why it is reported
next to the breakdown rather than alone.
What the backfill showed
| resting on | entries |
|---|---|
published |
42 - libc, genuinely: ISO C, POSIX, and the Itanium C++ ABI all specify these by name |
guest-observed |
20 - vendor interfaces a real title established by experiment |
assumed |
10 - entries whose stated purpose is read off the name and nothing else |
60 open questions, each one a thing a conformance probe on real hardware could settle. That list is the probe worklist, ranked by how often a guest actually touches it.