2026-08-21 - Behavioural provenance (D180)
The knowledge base recorded seventy-two functions' behaviour and
could not say how it knew any of it. found_by covers the
name, and CI re-derives every committed name from this
repository's own inputs; nothing did the same for an arity, a return
kind, or an edge case - which are the facts that change what the
emulator does.
Why now. The stated goal is an unattended loop where agents read a run's findings and fix what they name. Facts then arrive by way of something that has read the public internet, including the other projects in this space, so "this is what the function does" can be recalled and dressed as reasoning - the convergence problem principle 1 exists to prevent, with no reading step to point at. Abstinence is unenforceable and unprovable. Accounting is neither.
known_by takes published,
measured, guest-observed,
assumed, with cites for the two that claim
outside support and assumptions for whatever the entry's
own provenance does not cover. There is deliberately no value
meaning "I already knew it", and a test holds that property:
every value must be either citable or probeable, so a hypothetical
recalled could not be added without failing it.
Refused rather than defaulted. learn rejects an entry
that does not account for itself, because every available default is a
lie in one direction or the other.
The backfill was the interesting part - 42
published (libc genuinely is: ISO C, POSIX and the Itanium
C++ ABI specify these by name), 20 guest-observed (vendor
interfaces a real title established by experiment), 10
assumed (entries whose purpose is read off the name). 60
open questions, which is now the probe worklist for hardware.
snprintf_s is the worked example and the reason
provenance is per-claim: the base interface is ISO C 7.21.6.5 and
citable, the bounds-checked variant is Annex K - optional, and both its
truncation return and whether it terminates the buffer are unverified.
One field per function would have had to round that up, and rounding up
is how a guess becomes a fact.
Also folded learn's ten arguments into a
Learned struct - the field list was declared, destructured
and re-passed, which is three places to forget the new one.