You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Found while fixing #608, which refreshed and gated the structured entries in scripts/mutation_survivors.json. This is the other half of that file, which
the new gate structurally cannot see. Filed rather than folded in: it needs a
different mechanism, not a bigger version of the one #608 asked for.
Summary
Besides its 7 structured {file, line, mutator, source, reason} entries, scripts/mutation_survivors.json cites source locations as prose — inside representative_sites lists, site fields, and the runs / classification
narrative. scripts/check_mutation_survivors.py (added by the #608 fix) counts 31 such citations and audits none of them, because they carry no
verbatim source text to resolve against: the text after the -- is a
paraphrase ("backend.hpp:613 -- emitMetric(Metric::registerCount, 1.0)"), and
several use a bare filename with no directory ("bridge.hpp:1683", "payload_schema.hpp:169").
At least 10 of the 31 are stale today.
Verification status
Reproduced by measurement, on this lane's branch off master @ a020e69c
(the citations and the headers are both unmodified by that branch, except the
five structured line hints #608 refreshed). Method: print the current text of
each cited line and compare it against what the citation claims is there. Not
an exhaustive pass — I measured the 18 citations that name a resolvable path,
not all 31.
Real output (<file> <line> -> current text at that line):
remote.hpp:718 -- false_positive_finding.results[0].site }
remote.hpp:818 -- same entry return;
forms.hpp:1981 -- results[1].site /// how many decimals the derivation itself produced (a product of two 2-decimal
registry.hpp:709 -- results[2].site
remote.hpp:1031 -- samples[].site // re-test under the insert lock further below.
bridge.hpp:1683 -- samples[].site // entry to fire later and find nothing (setValue/
forms.hpp:1794 -- samples[].site
bridge.hpp:584 -- samples[].site auto primaryCopy = primary;
forms.hpp:2356 -- classification narrative annotateNestedAggregateRef<Member, Ancestors...>(dom, property);
wire.hpp:514 -- classification narrative // why, and for how a test covers this arm anyway.
instance_constraints.hpp:156 if (places > math::kMaxDecimalPlaces) {
payload_schema.hpp:218 hash ^= static_cast<std::uint64_t>(static_cast<unsigned char>(byte));
remote.hpp:142 auto hi = static_cast<uint32_t>(counter >> 32);
remote.hpp:145 lo = hi ^ mix(lo, roundKey);
remote.hpp:148 return (static_cast<uint64_t>(hi) << 32) | static_cast<uint64_t>(lo);
backend.hpp:613 -- representative_sites ///
backend.hpp:807 -- representative_sites /// "Where does the blocking happen" is the only question this class exists to
remote.hpp:1038 -- representative_sites // sharing is worth the most. `acquireSharedInstance` re-tests the
Read against what each citation claims:
Stale (10):
classes.side_channel_metrics.representative_sites: "include/morph/core/backend.hpp:613 -- emitMetric(Metric::registerCount, 1.0)"
and ":807 -- emitMetric(Metric::executeInFlight, ...)". Line 613 is ///
and 807 is a doc comment. The substring emitMetric(Metric::registerCount
does not occur anywhere in the file — every call site is written fully
qualified now:
So this pair is stale in two ways at once: wrong line, and quoting a spelling
the code no longer uses.
classes.side_channel_logging.representative_sites: remote.hpp:1031 -- logError on an undecodable envelope and :1038. Both now land on comments;
the only logError in the file is at line 975.
false_positive_finding.results[*].site: remote.hpp:718 and :818 (now }
and return;), forms.hpp:1981 (a doc comment), registry.hpp:709 (blank).
The classification narrative's wire.hpp:514 (the kMaxEnvelopeBytes cap):
now a comment; kMaxEnvelopeBytes occurs at 29, 522, 525, 537, 540, 542.
Its forms.hpp:2356 ("the offender-list separator") is now annotateNestedAggregateRef<Member, Ancestors...>(dom, property);.
Still correct (6):remote.hpp:142, :145, :148 (the Feistel round), registry.hpp:54, payload_schema.hpp:218, instance_constraints.hpp:156.
Unresolvable as written (1): the narrative's payload_schema.hpp:169 names
no directory, and there is no include/morph/forms/payload_schema.hpp — the
file is include/morph/core/payload_schema.hpp. A reader has to guess before
they can even check it.
Also worth recording, because it is the same rot in the other direction: the
prose at classification_2026_09_09 cited core/bridge.hpp:121 for the
HandlerKey hash-combine — which was correct — while the structured entry for
the same site said 119, which was wrong. #608's refresh has now made them agree
at 121.
What I did not verify: whether any of the stale citations' dispositions
are wrong. I only checked coordinates. I also did not attempt to find the
current line for every stale one — for several (the samples[].site rows) the
mutant description is too paraphrased to search for reliably, which is itself
part of this issue.
Why it matters, and why it is minor
Same cost as #608's, one step further out: no gate reads these, so nothing in
CI is wrong. The cost lands on a human who follows one during a future triage
pass and reads unrelated code — and, unlike the structured entries, they cannot
be mechanically re-resolved, so that human has to re-derive the site from
scratch.
It also narrows a claim that now looks broader than it is. scripts/check_mutation_survivors.py prints note: 31 further citation(s) in this file are free text ... NOT audited here on every run precisely so this
gap is visible, but a green drift-guard tick still reads as "this file's
citations are fine" to anyone who does not read that line.
Options, none of them obviously right
Give the prose citations the structured shape — a source field with
the verbatim line — so check_mutation_survivors.py audits them with no new
mechanism. Most durable; also the most editing, and some of these are
genuinely narrative sentences rather than records.
Delete the line numbers from the prose and keep the file/symbol name
only. A citation that cannot rot is better than one that does, and for a
historical narrative ("this survivor was sampled from remote.hpp's OpaqueIdGenerator::mix") the line number was never carrying much.
Close it if these citations are deliberately historical — a record of
where the code was when the run was taken, not a pointer into current code.
That is a defensible reading for runs and false_positive_finding, which
describe a specific dated campaign. If so, say it in the file's _comment
next to the note ci: mutation_survivors.json's line hints are unaudited and 5 of 7 are already stale #608 added, because the structured entries in the same file
now use line the opposite way and nothing distinguishes them to a reader.
Raise it if someone is actually misled by one during a triage pass, or if
option 1 is taken and the prose becomes gate-covered.
Related: #608 (the structured half, fixed). Same defect class as #605 (a
hand-maintained list with nothing auditing it), different fix site.
Found while fixing #608, which refreshed and gated the structured entries in
scripts/mutation_survivors.json. This is the other half of that file, whichthe new gate structurally cannot see. Filed rather than folded in: it needs a
different mechanism, not a bigger version of the one #608 asked for.
Summary
Besides its 7 structured
{file, line, mutator, source, reason}entries,scripts/mutation_survivors.jsoncites source locations as prose — insiderepresentative_siteslists,sitefields, and theruns/classificationnarrative.
scripts/check_mutation_survivors.py(added by the #608 fix) counts31 such citations and audits none of them, because they carry no
verbatim source text to resolve against: the text after the
--is aparaphrase (
"backend.hpp:613 -- emitMetric(Metric::registerCount, 1.0)"), andseveral use a bare filename with no directory (
"bridge.hpp:1683","payload_schema.hpp:169").At least 10 of the 31 are stale today.
Verification status
Reproduced by measurement, on this lane's branch off
master@a020e69c(the citations and the headers are both unmodified by that branch, except the
five structured
linehints #608 refreshed). Method: print the current text ofeach cited line and compare it against what the citation claims is there. Not
an exhaustive pass — I measured the 18 citations that name a resolvable path,
not all 31.
Real output (
<file> <line> -> current text at that line):Read against what each citation claims:
Stale (10):
classes.side_channel_metrics.representative_sites:"include/morph/core/backend.hpp:613 -- emitMetric(Metric::registerCount, 1.0)"and
":807 -- emitMetric(Metric::executeInFlight, ...)". Line 613 is///and 807 is a doc comment. The substring
emitMetric(Metric::registerCountdoes not occur anywhere in the file — every call site is written fully
qualified now:
the code no longer uses.
classes.side_channel_logging.representative_sites:remote.hpp:1031 -- logError on an undecodable envelopeand:1038. Both now land on comments;the only
logErrorin the file is at line 975.false_positive_finding.results[*].site:remote.hpp:718 and :818(now}and
return;),forms.hpp:1981(a doc comment),registry.hpp:709(blank).classification_2026_09_09.survivor_list_unreliable.samples[*].site:remote.hpp:1031,bridge.hpp:1683,forms.hpp:1794(blank),bridge.hpp:584.wire.hpp:514(thekMaxEnvelopeBytescap):now a comment;
kMaxEnvelopeBytesoccurs at 29, 522, 525, 537, 540, 542.Its
forms.hpp:2356("the offender-list separator") is nowannotateNestedAggregateRef<Member, Ancestors...>(dom, property);.Still correct (6):
remote.hpp:142,:145,:148(the Feistel round),registry.hpp:54,payload_schema.hpp:218,instance_constraints.hpp:156.Unresolvable as written (1): the narrative's
payload_schema.hpp:169namesno directory, and there is no
include/morph/forms/payload_schema.hpp— thefile is
include/morph/core/payload_schema.hpp. A reader has to guess beforethey can even check it.
Also worth recording, because it is the same rot in the other direction: the
prose at
classification_2026_09_09citedcore/bridge.hpp:121for theHandlerKey hash-combine — which was correct — while the structured entry for
the same site said 119, which was wrong. #608's refresh has now made them agree
at 121.
What I did not verify: whether any of the stale citations' dispositions
are wrong. I only checked coordinates. I also did not attempt to find the
current line for every stale one — for several (the
samples[].siterows) themutant description is too paraphrased to search for reliably, which is itself
part of this issue.
Why it matters, and why it is minor
Same cost as #608's, one step further out: no gate reads these, so nothing in
CI is wrong. The cost lands on a human who follows one during a future triage
pass and reads unrelated code — and, unlike the structured entries, they cannot
be mechanically re-resolved, so that human has to re-derive the site from
scratch.
It also narrows a claim that now looks broader than it is.
scripts/check_mutation_survivors.pyprintsnote: 31 further citation(s) in this file are free text ... NOT audited hereon every run precisely so thisgap is visible, but a green drift-guard tick still reads as "this file's
citations are fine" to anyone who does not read that line.
Options, none of them obviously right
sourcefield withthe verbatim line — so
check_mutation_survivors.pyaudits them with no newmechanism. Most durable; also the most editing, and some of these are
genuinely narrative sentences rather than records.
only. A citation that cannot rot is better than one that does, and for a
historical narrative ("this survivor was sampled from
remote.hpp'sOpaqueIdGenerator::mix") the line number was never carrying much.thing ci: mutation_survivors.json's
linehints are unaudited and 5 of 7 are already stale #608 argued against on the structured half.What would change the verdict
where the code was when the run was taken, not a pointer into current code.
That is a defensible reading for
runsandfalse_positive_finding, whichdescribe a specific dated campaign. If so, say it in the file's
_commentnext to the note ci: mutation_survivors.json's
linehints are unaudited and 5 of 7 are already stale #608 added, because the structured entries in the same filenow use
linethe opposite way and nothing distinguishes them to a reader.option 1 is taken and the prose becomes gate-covered.
Related: #608 (the structured half, fixed). Same defect class as #605 (a
hand-maintained list with nothing auditing it), different fix site.