mirror of
https://github.com/MobileGL-Dev/MobileGL
synced 2026-11-07 01:53:24 +09:00
Exit gate S7, and the precondition for CONTRACT-P6 5.2's funnel rather than
its replacement.
S7 says "a bare abort() added outside Session::Fail -> the census gate goes
red". Session::Fail does not exist: it is the 93-site refactor 5.2 describes,
and it is not in this commit. What IS checkable today is the property that
funnel exists to guarantee and that every consumer already depends on - every
death under MG_Remote/ names a FAMILY, in a Fatal{Word} marker a grep can
find. run_trace_case.cmake reds a split retrace on any `Fatal{` line, the
retrace lane's refusal census counts them by name, and MEASUREMENTS quotes
the distinct words. A death with no word is invisible to all three.
TWO RULES, BECAUSE ONE WOULD LAUNDER THE OTHER. An abort must carry a marker
within twelve lines; and every WireLogFatal call must carry one in its format
string. WireLog.cpp's own abort is exempt from the first rule ONLY because its
five callers satisfy the second - a funnel that accepted an unmarked string
would be a hole shaped exactly like the rule.
THE BASELINE BOUNDS SILENCE, NOT DEATHS. Abort sites may grow freely; a new
family word may not appear unrecorded. Freezing the total would make every new
guard a gate change, which is how a gate stops being run. The wire's FatalCode
has seven values and the internal vocabulary is thirty-two, which is the
divergence D2 exists to bound - so growing it has to be an act, not an
accident.
THE CENSUS ALSO CORRECTS ITSELF. Its first run reported WireLog.h's own PROSE
as an unmarked death: the comment explaining why the stderr echo exists
contains the words std::abort(). So the scanner strips comments before
matching, with a character-level pass rather than a regex - a `"http://"`
inside a string literal is not a comment - while KEEPING string literals,
because the markers it looks for live in them. Real numbers after that fix:
93 abort sites, 32 family words, 0 unmarked. a6 had counted 92 and 30 from a
scan that did not make the distinction.
AND THE ONE REAL FINDING. a6 named two aborts with no marker at all;
WireLog.cpp's is the sanctioned funnel, so the genuine one is
PersistentMapTracker's invalid-MOBILEGL_IPC_ADOPT_TIER death. It now carries
Fatal{UnimplementedAdoptTier}, which is what makes the census zero.
R-16 both ways, run: a bare std::abort() reds it naming the file and line, and
a new family word reds it naming the word and how to record it.
38 lines
842 B
JSON
38 lines
842 B
JSON
{
|
|
"abort_sites": 93,
|
|
"families": [
|
|
"AbiMismatch",
|
|
"ApplyThreadJoinTimeout",
|
|
"ApplyThreadNotRunning",
|
|
"ArchiveEmpty",
|
|
"ArtefactsMissing",
|
|
"BarrierTimeout",
|
|
"BarrierViolation",
|
|
"BlobMissing",
|
|
"ClientTablesUninstalled",
|
|
"EventRingOverflow",
|
|
"NoClientSession",
|
|
"PresentCreditTimeout",
|
|
"ProtocolCorruption",
|
|
"ReadbackDeclined",
|
|
"ReadbackReplyShort",
|
|
"ReplyError",
|
|
"ReplyMissing",
|
|
"ReplyStatusInvalid",
|
|
"ReplyTooLarge",
|
|
"RetirementWaitFailed",
|
|
"RingOverrun",
|
|
"RoleViolation",
|
|
"StageSnapshotTooNarrow",
|
|
"UncarriedInitialBytes",
|
|
"UnexpectedMapAccept",
|
|
"UnimplementedAdoptTier",
|
|
"UnimplementedClientSession",
|
|
"UnimplementedWritebackWait",
|
|
"UnmigratedSurface",
|
|
"UnmigratedVerb",
|
|
"UnsetCallMask",
|
|
"UnsizedReadback"
|
|
]
|
|
}
|