A record becomes a knowledge entry, graded, or it does not become one at all

Finding::knowledge() renders a probe result as a FunctionKnowledge entry, and orbistoun probe <path> --as-knowledge prints what would be written. Printed rather than written: a corpus is evidence, and evidence being read is not evidence being believed. Merging stays a separate deliberate act.

The conversion is held to the knowledge base's own validator - provenance_faults(), the same function that fails the build for a hand-written entry - so a generated entry meets exactly the standard a person's would.

End to end, from a session transcript:

[[function]]
name = "sceKernelOpen"
edge_cases = ["returns 0x80020002 (pass)"]
known_by = "measured"
cites = "conformance probe, check 010-fs/open-missing on console firmware 13.520.001"

The identical records with target|deck produce known_by = "assumed", no citation, and the origin moved into an assumption reading "observed on deck, which is not the target".

Surprises

A assumed grade may not carry a citation, and that rule bites exactly where it should. The knowledge base refuses a citation beside a guess, because one reads as evidence at a glance. So a demoted stand-in measurement cannot cite the run it came from - even though that run is known precisely. The information goes into the note and an explicit assumption instead, where it reads as why this is not settled rather than as the authority for it. Being able to say where a guess came from is useful; saying it in the field reserved for established facts is how a guess becomes one.

A report has no session, and therefore cannot be graded at all. A committed report carries no hello and no part - negotiation is a protocol thing. Its build record names the binary kind, module, payload or host, not the machine. So nothing in a report says which hardware produced it, and --as-knowledge refuses rather than inventing an origin or omitting one. Found by running it and getting silence, which is its own small lesson: printing nothing was indistinguishable from having nothing to say.

The heredoc mangled Rust string continuations for the fourth time today. Same trap, same fix, and at this point the rule is simply: no multi-line Rust strings through a heredoc, use the Write tool.