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
docs(gate): record the measured triage that parks the parameterless-catch read-seam criterion (#12851)
Re-measures the proposed criterion's first-run red set on current `main` with
one instrument run over both trees (66 seams / 13 red @ c07d6e8 reproduced
site-for-site, 65 seams / 11 red @ 6f0fec3), names both departures against
the commits that caused them, and writes the per-site triage into the gate's
header: 9 of the 11 are correct-but-undeclared, a worse precision than the
15-red / 7-correct proposal this file already declined.
No criterion, no vocabulary entry, no baseline entry, no new script and no new
CI step — the negative result is recorded at the same length as a positive one,
which is what this header already does for the fall-through criterion.
Claude-Session: https://claude.ai/code/session_01PfaSTikked61BkcsB5Rn69
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
// | metadata history-cleanup.ts ×3 (runCleanup) | correct-but-undeclared — `errors++` into the returned `{ deleted, errors }`; #8901's already-named cohort |
988
+
// | metadata-protocol protocol.ts findData | correct-but-undeclared — `counted = pageOffset + records.length` is a COMPUTED degradation with its reasoning in-line, already this file's #9165 falsification control |
// | metadata-protocol seed-loader.ts resolveSoleOrganizationId | ⚠️ GENUINELY WRONG — comment names one benign cause, catch swallows every cause; seeds then land org-less |
991
+
// | metadata-protocol seed-loader.ts resolveFromDatabase | correct-but-undeclared — probe-chain `continue`; its expected failure is the driver's `INVALID_FILTER` refusal, NOT a missing table |
992
+
// | objectql engine.ts referenceExists | correct-but-undeclared — declared tri-state `Promise<boolean \| null>`; ALREADY in `durability-read-invention.baseline.json` as `reviewed-legitimate` |
993
+
// | objectql engine.ts readMigrationFlagVerified | correct-but-undeclared — returns `{ verified: false, conclusive: false }`; `conclusive` exists so the caller can tell "asked, and no" from "could not ask" |
994
+
// | objectql engine.ts announceOpenMigrationGates | correct-but-undeclared — void advisory; and it is the SAME read as the row above, one hop up |
995
+
// | objectql lifecycle-service.ts loadGovernance | ⚠️ GENUINELY WRONG — a failed `sys_organization` read silently drops every TENANT retention override, so a deletion policy runs on partial evidence |
996
+
//
997
+
// **9 of 11 are already correct.** That is a WORSE precision than the #8845
998
+
// proposal this file already declined — 15 red with 7 already correct (47%)
999
+
// against 11 red with 9 already correct (82%) — and #12753's own filing named
1000
+
// the precision advantage as the thing that was unproven. It is now measured,
1001
+
// and it went the other way. Net of the one existing baseline entry
1002
+
// (`referenceExists`) the landing cost is still 10 reds against a shrink-only
1003
+
// ledger holding one row.
1004
+
//
1005
+
// ## Why that parks it on #8901 specifically, and is not a taste call
1006
+
//
1007
+
// Read the nine "correct" mechanisms as a set: an `errors` field in a returned
1008
+
// envelope; a `conclusive` flag whose only job is to separate "asked" from
1009
+
// "could not ask"; a declared tri-state `boolean | null` with the distinction
1010
+
// written into the JSDoc; a documented computed degradation. Every one of them
1011
+
// DOES tell the caller — through a channel this rule has no vocabulary to name.
1012
+
// That is #8901's sentence exactly ("the read-seam rule has no declared
1013
+
// failure-propagation vocabulary, so 'the catch reported the failure' is
1014
+
// uncheckable"), reached from a different criterion and a different census.
1015
+
// ⛔ Baselining nine correct seams to land this is the "baselined into
1016
+
// uselessness" outcome #8901 already priced, in one PR.
1017
+
//
1018
+
// ## Two counterexamples to "the cheapest satisfaction is the correct fix"
1019
+
//
1020
+
// The argument is TRUE at most of the 11 and false at three, and the exceptions
1021
+
// are the load-bearing part because they are the ones a landing author meets:
1022
+
//
1023
+
// - `resolveFromDatabase` has NO declared predicate available. Its expected
1024
+
// benign failure is the driver's `INVALID_FILTER` refusal on a probe column
1025
+
// the object does not declare (see the #9071 note at the seam), and
1026
+
// `READ_FAILURE_DISCRIMINATORS` holds exactly one name, `isMissingTableError`.
1027
+
// Satisfying the criterion there needs a NEW declared discriminator — which
1028
+
// this criterion promised not to add — or a hand-rolled test, which
1029
+
// limitation 3 flags on purpose, or a baseline entry.
1030
+
// - `reportUnhydratableOrgScopedRows` and `announceOpenMigrationGates` are
1031
+
// void ADVISORIES whose stated contract is that they must never fail a boot.
1032
+
// "Propagate" is refused by design, and "discriminate, then rethrow the
1033
+
// rest" IS propagation on the non-benign branch — so the criterion's two
1034
+
// escapes are both the wrong fix, and the right one (say something) is not
1035
+
// what it asks for.
1036
+
//
1037
+
// ## Two smaller readings, recorded so they are not re-derived
1038
+
//
1039
+
// - `readMigrationFlagVerified` and `announceOpenMigrationGates` are ONE read
1040
+
// counted at two nesting levels (callee and caller). Fixing the inner seam
1041
+
// does not clear the outer, so the ledger carries two rows for one hazard.
1042
+
// - The three `history-cleanup` seams deliver `errors` into a returned
1043
+
// envelope, and BOTH production call sites are `void this.runCleanup()` —
1044
+
// so the count is correct by contract and read by nobody in-process. That
1045
+
// is a fact about #8901's cohort, not about this criterion.
1046
+
//
1047
+
// ## Reproduce it
1048
+
//
1049
+
// There is deliberately no flag for this: the criterion is not implemented, and
1050
+
// a selector shipped for a criterion that is not shipped is a name in a Map that
1051
+
// nothing consumes. Re-derive it by adding `catchParam`, `recovers` and the
1052
+
// catch's log set to the `seam` object in `analyzeReadSeams` and counting the
1053
+
// seams whose catch clause has no `variableDeclaration`. Calibrate first: the
1054
+
// unpatched gate must answer 65 read seams on 6f0fec3d0 and 66 on c07d6e8b9
1055
+
// before any derived number from it is quoted.
1056
+
//
1057
+
// ⛔ Do not land the criterion without re-running the triage. The count is not
1058
+
// the argument here — 13 → 11 moved the number and moved nothing else, and the
1059
+
// verdict rests on what the 11 catches DO, which no count reports.
0 commit comments