The rule became code, and a convenience script nearly corrupted the fixtures
D225 was a document. It is now Use,
usable() and Asked::knowledge(): a live answer
becomes a knowledge entry carrying the arguments it was asked with, the
grade, and the caveat that it was asked under the probe's state rather
than the guest's.
The carve-out keys on the return kind.
Returns::Status passes to the guest; everything else - a
handle, a pointer, and anything unknown - is recorded and
withheld. Unknown is not permission: not knowing what a function returns
is exactly when handing its value over is most dangerous.
A death records the death and never a value. No
edge_cases, no grade, and an assumption saying the call did
not answer. That is the shape of most first attempts and it is a fact
about the function worth keeping.
orbistoun ask --as-knowledge renders it. Only for
call: a read establishes what memory holds and
a report establishes a suite's results, and filing either
as a return value would put a byte count where a function's answer
belongs.
The GUI is built at target/release/orbistoun-gui.exe for
testing. It has never been run by this thread, and that remains the
limit of what can be said about it.
Surprises
The repository's own check caught me five continuations
deep. cargo fmt collapses a line-continued string
literal and bakes the source indentation into the rendered
text, so a message reading correctly in the editor prints with twenty
spaces mid-sentence. That had happened repeatedly before the check
existed; this time it failed the gate instead, and twelve literals in
this crate were converted to concat!.
The script written to fix them introduced a worse bug than
the one it fixed. It appended a separator space to every piece
- correct for prose, corrupting for wire data, because a fixture line
ending \n puts a stray space at the start of the next
record. Seven fixtures were silently altered. The compiler caught an
unrelated problem first, which is the only reason it was noticed at all:
a test fixture that still parses but no longer says what it said is not
a failure anybody sees.
Four literals were safe and were changed anyway.
let text = "\ with content at column zero has no
indentation to bake, so cargo fmt could not have mangled it
- but the check is a regex over source lines and cannot tell the two
apart. Folding them was cheaper than arguing, and a rule needing
case-by-case reasoning is one that eventually gets reasoned about
wrongly.
concat! cannot carry inline format
captures. {name} resolves at parse time against a
literal, and a concatenated literal is not one. Three call sites needed
positional arguments - a small thing, and not obvious until the compiler
says so.