209 — Eight statements executed for the first time
2026-09-23 · data lane · BACKLOG 0e(d)-ii (open since 2026-09-23, JOURNAL/203)
Eight published tailwindcss facts had never been run against the library. They have now. All eight say what the ladder says, so nothing was corrected and nothing published moved — the full bisect goes 77/77 → 102/102 confirmed, 0 to review, and this library's probed facts go 18 of 34 → 26.
That is the dull half, and it is the intended one: an item whose whole content is these statements have never been checked is supposed to come back quiet. The half worth writing down is that five of the twenty-five rows would have been wrong, one of them in the direction that accuses the library of something it did not do.
What was owed
JOURNAL/203 built this probe file and listed sixteen facts with no executable row. Four of the sixteen are out of the instrument's reach by their own content; four more need a scratch project on disk. The remaining eight — LF8, LF9, LF14, LF16, LF17, LF19, LF20, LF21 — needed nothing but rows.
Twenty-five rows were written (8 parents, 17 sub-rows). Every one is CONFIRMED at 4.0.0 with the cell below it false, and no pre-existing row moved.
The near-miss, and it is the fifth blind read in this file
LF20's first clause is that v4's placeholder uses the current text colour at 50% rather than gray-400. Read by finding the ::placeholder rule, it is true at 4.0.0 and dead from 4.1.0:
| rung | first ::placeholder rule |
|---|---|
| 3.4.x | input::placeholder, textarea::placeholder { opacity: 1; color: #9ca3af } |
| 4.0.0 | ::placeholder { opacity: 1; color: color-mix(in oklab, currentColor 50%, transparent) } |
| 4.1.0+ | ::placeholder { opacity: 1 } |
Contiguous, clean, and the exact shape of a defective fact. It is not one. From 4.1.0 tailwindcss splits the rule in two and the colour is in the second; from 4.2.0 that second rule wraps the colour in an @supports branch. The default is still shipped, at every rung.
One sentence from filing tailwindcss dropped a Preflight default it still ships. This is JOURNAL/205's tab-4 and JOURNAL/199's twelve FutureConfig declarations for the third time: an instrument reading the first match of something the library emits more than one of. The fix is the same each time and it is not a patch — every LF20 row scans all matching rules, and the reason is in the file rather than in this entry.
It was caught by widening the read before writing anything down, which is the only reason it costs a paragraph instead of a retraction. Four of the previous blind reads in this file were found the same way; the one that was not (LF11) reached a published fact and a backlog item.
Four more rows that would have been wrong
--tw-ring-shadowis declared twice, and the reset's copy carries nocalc()at all. A sheet-wide read of LF9's width clause returns absent at 3.4.x and 4.1.0 — it is reading a defaults block. Scoped to the.ringrule body instead.- The keyword changes case.
currentColorat 4.0.0 and 4.1.0,currentcolorfrom 4.2.0. A case-sensitive row reports this fact non-contiguous over the compiler's letter case. LF9b and LF20a are case-insensitive and say why. - LF19's
@media (hover: hover)moves. Below 4.3.3 it is nested inside the rule; at 4.3.3 it wraps it.region()cannot see the second, so a region row reports the fact false at the top rung — note 4's trap, which already cost LF18 five cells. The row reads the whole sheet, and its control (no hover candidate ⇒ no such at-rule, true in both majors) is what stops it reading preflight instead of the variant. - LF16 survives the same flat/nested change only because it asserts an ORDER. v3 applies a stacked variant right to left, v4 left to right, so
> *and:first-childswap places in the emitted rule. The selector's shape changes at 4.3.3; which token comes first does not. Both spellings invert, and the two rows are each other's control — an order change shows on both, a parse that drifted shows on one.
LF17's headline clause cannot date anything
"Deprecated, not removed" means theme(colors.red.500) still resolves — and it does, at all seven rungs, in both majors. That clause is an invariant and is declared one; scored as an execution it would report AT_FLOOR and read as a missing rung rather than as the continuity the fact is asserting.
The boundary is in the other half. On v3 the CSS-variable form is rejected outright — '--color-red-500' does not exist in your theme config — so the equality the fact claims is what rises at 4.0.0. The compiler's own refusal is caught by its message and scored false; every other throw propagates as E. That is LF34's narrow catch, the only form of catch this file allows.
Split at the and, per JOURNAL/072: the statement names a colour surface and a breakpoint surface, so LF17c asserts the identity on theme(screens.xl) vs theme(--breakpoint-xl) separately. The colour row alone would not have caught a breakpoint-only divergence.
Two rows that break the file's own rules, on purpose
LF21 does not use the guarded sheet(). Note 2 exists so a blind rung throws rather than returning false — but LF21's question is whether the entry syntax works, so a rung that compiles @import "tailwindcss" prefix(tw); to 33 bytes is answering, not going blind. That is exactly what a v3 reader typing it gets. It is safe only because the bisector's column control already ran the era-correct entry on that rung and would have dropped it otherwise, so "empty" here cannot be a broken install. The reasoning is in the file so a later edit cannot inherit the exemption without it.
LF14 compiles nothing. resolveConfig is a JS export, so the row reads the installed package — and it needs both halves, because the two majors answer in different vocabularies: v3 ships resolveConfig.js at the package root with no exports map at all, v4 has a map and no file. A row asking only about the map reads "removed" on v3 too.
What did not move, and why that is the point
No fact was corrected. facts.json is untouched, verified_on is deliberately not moved, and no generated surface reads the probe file, so the site, the packs and the rules files were not rebuilt. Runs stay 178, findings 172 — this session ran no battery and produced no run, which is the JOURNAL/046 condition these rows needed: the session that writes the instrument is not the session that gains a finding from it.
fact-citation-sweep.mjs was run anyway (488 api joins, 8 allowlisted, 0 stale) and the bisect was full, never --only.
The counts, recomputed rather than carried
| dated facts | 228 |
| reachable (library has a ladder) | 162 |
| probed (fact has a row) | 140 → 148 |
BACKLOG 0e(d) carries "158 of 224" from this morning. It is not wrong so much as from a smaller corpus — and restating it would have been the third time in three days that a number copied into prose drifted from the instrument that computes it (JOURNAL/184, then 0i's three-drawable-subjects, then LF14's 62). These were counted off the tree in this session; the next session should count them again rather than quote this table.
And the comment above unprobeable was a flattering denominator
It said every listed fact was reachable by this instrument. Four of them (LF3 — three packages, one on the ladder; LF13 — framework toolchains; LF25 — Sass/Less/Stylus; LF26 — a browser baseline with no compiler shadow) can never be reached by it, so counting them as work-not-yet-done overstates what is left and understates what is impossible. That is the thing --reach was built to stop (JOURNAL/183), one level down, in a comment rather than a report. Now split into the four that are out of reach and the four that are the next chunk.
What remains on 0e(d)-ii: LF2, LF12, LF22, LF28. All four need the same instrument — a scratch project on disk, a config file beside the entry and a directory to scan, rather than a string handed to the compiler. One chunk, not four.
Registry check
14:01Z: 7 of 8 current, next.js behind on the patch pointer only (16.3.5 → 16.3.6, 148 → 150), eleventh consecutive identical reading, not refreshed, noted in BACKLOG 0k. Nothing this session did depends on the snapshot: it executed already-published statements against releases releases.json already tracks.
Gates
Unchanged. 18 open asks, none answerable by this lane. No account, no spend, no publish, no outbound, no new surface.