Case 2/8: the note that silenced the alarm

The case of the comment that declared safe the shape nobody had looked at, and of the next author who believed it: two stylesheets read, eight loaded, zero browser queries

Jesús Pérez
A correct CSS fix left, inside its own comment, a sentence declaring safe the shape that was never rendered. Seven and a half hours later the next author read it, believed it, and diagnosed the failure by reasoning about two stylesheets the page does not even load. One getComputedStyle query returned the whole answer; zero were made. An operator's screenshot caught it, never a check. ADR-072 already declares that a mechanism declares its extent and that the page is the publication: three Hard constraints that walked straight past, because they govern checks and this was prose.
Case 2/8: the note that silenced the alarm

🕵️ Show the full case file → 📋 Session protocol →

Case file · Code Homicide Dept.

A correct CSS fix left, inside its own comment, a sentence declaring safe the shape nobody had rendered: «so every fenced block with a language was fine». Seven and a half hours later the next author — another agent — read it, believed it, and diagnosed the failure by reasoning about two stylesheets the page does not even load. Zero browser queries. The one that was needed would have given the whole answer. The operator caught it, attaching the screenshot of an illegible code block.

Case No. 2/8Classification: ANTI-PAP · A NOTE DECLARED SAFE THE SHAPE NOBODY HAD LOOKED ATStatus: OPEN
Show glossary
declared extent (ADR-072)
A mechanism says what it covers, and a check can say «I did not look at that». A check's green is a statement about its own extent, never about the world. The sentence that opens this case did the opposite: it asserted coverage over a shape that was never rendered.
the page is the publication
A hard rule of the series and an ADR-072 constraint: a .ncl that validates, a .md that regenerates and a green gate are three statements about FILES. What the reader receives is the page. Here the diagnosis was built on two files the page does not even load.
specificity
CSS's tiebreaker. `pre { color }` is (0,0,1); the nested prose rule that was winning is (0,1,0). A class selector beats an element selector ALWAYS, regardless of order or good intentions. The previous fix never won that tiebreak, and its comment took for granted that it had.
folklore
The word this repository uses for a rule that lives where no surface and no check can read it. A CSS comment is folklore with write permissions: it is versioned, it is reviewed, it is read with confidence — and nothing verifies that what it asserts is true.
declared twice
The series' pathogen. Here the second copy is not code: it is the NOTE about the code. A rule's real extent is in the rendered cascade; the note restated it in prose, and when the two disagreed the prose won, because it is what gets read first.

The protocol to declare, version and verify this → ontoref.dev

The double ledger — what it cost, and what it left

What believing the note cost

  • Stylesheets the diagnosis was built on 2
  • …of those, loaded by the page 0
  • Sheets the page does link 8
  • DOM queries made before declaring the cause 0
  • DOM queries that sufficed to have it whole 1
  • Code blocks in the post 3
  • …illegible in light mode 2
  • Contrast of the invisible text (#e5e7eb on #f8fafc) 1.16:1 · AA requires 4.5
  • Specificity of the rule believed to be winning 0,0,1
  • Specificity of the one actually winning 0,1,0
  • Fixes written before one resolved the symptom 2
  • Post languages registered in the hljs bundle (nu · nickel) 0
  • Hours the sentence sat in the tree before blinding the next author 7h34m (04:07:40 → 11:42)
  • Own verifications that went green while blind, that same day 1
  • Files in the SAME commit already holding the sentence's refutation 1
  • Distance between the claim and its refutation one file · zero commits

What the case left

  • Blocks legible in light after the real fix 3 of 3
  • Contrast measured after the fix (light · dark) 9.9:1 · 11.87:1
  • Corrections written inside the comment that lied 2
  • Verified pointers in lesson_codified_in 5
  • Gates preventing a repeat 0 → declared debt

The suspects — the false leads

The previous fix's note, declaring safe the shape nobody looked at“I described what the fix touched, and about that I was not wrong: the bare <pre> was the expedientes' case. That the next sentence spoke about a shape nobody rendered does not make it a lie: it makes it unverified. Nobody asked me for a measurement to write it.”the-note
Two stylesheets the page does not load, read as if they were the cascade“We were in the right file. app.min.css and site.min.css contain exactly the prose rules that explained the symptom — word for word. That this page loads eight others is stated by neither of them.”phantom-sheets
The github-dark palette, partly guilty and a perfect alibi“I paint tokens on a dark background and I do it well. Nobody served me conditionally: I was linked unconditionally, after custom.css, and on top of that I was half right — the tokens were wrong in light mode.”github-dark
The browser cache (max-age=86400), which explained the symptom without being the causemax-age=86400 is what I was asked for. And the symptom I produced was identical to the real one, which makes me the most comfortable explanation: the browser was seeing something stale. That was true, and it was not the cause.”cache
hljs with no module for nu or nickel — the real mechanism, invisible in every file“I have no module for nu or nickel, so I give up in silence and never add the .hljs class. That appears in no file in the repository. Only on the page.”hljs-no-module

The weapon — The weapon · a sentence no check backs

/* custom.css — the previous fix's comment, commit 3294761, 04:07:40 */

   It only bites the BARE <pre>. `pre code` already reads `--code-text`,
   which does flip, so every fenced block with a language was fine
                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

# No check backs that sentence. No page with a tagged fence was
# rendered to write it. At 11:42 the operator attached the screenshot
# of an illegible ```nu fence: the shape declared safe.

The previous fix was good. It corrected a bare <pre> that in light mode came out nearly white on nearly white, and it documented that with the detail this series demands. Then it wrote one more sentence:

It only bites the BARE <pre>. pre code already reads --code-text, which does flip, so every fenced block with a language was fine

No check backs that last line. No page with a tagged fence was rendered to write it. It is a claim about a shape its author did not look at, placed exactly where the next reader will meet it before the rule itself.

At 11:42 the operator attached a screenshot: a ```nu fence, washed-out grey, illegible. The shape declared safe.

And what makes this a case is what happened next. The following author did not ignore the note: they used it. They looked for the cause where the note said it was not — in the token palette — wrote a fix for that, and declared it resolved without measuring anything. When the operator asked «why aren’t the css corrections showing?», the diagnosis had been built on app.min.css and site.min.css: two files that contain exactly the rules explaining the symptom, and that this page does not load. Eight sheets linked, neither of those among them.

One getComputedStyle query returned the whole answer. Zero were made.

And there is a twist that came out of git show itself. Commit 3294761 touches two files: custom.css (+91) and gen-case-file.nu (+56). In the second one, its author wrote that the first repair of this same failure «resolved against a sheet this site does not even load» — the exact fact that, seven hours later, nobody used. The knowledge existed, in the same commit, in the neighbouring file. What did not exist was its co-location with the claim it contradicted.

The turn — The fix · one DOM query, and the cascade that actually won

// one query, and the whole answer:
[...document.querySelectorAll('.post-content-body pre')].map(pre => {
  const code = pre.querySelector('code');
  return { lang: code.className, ink: getComputedStyle(code).color };
});

// language-nu               #e5e7eb   ← no .hljs class, nothing overrides it
// language- hljs sql        #334155   ← hljs rescued it with !important
// language-nickel           #e5e7eb
//
// Two blocks, one page, opposite outcomes.
// The difference was never the theme: it was whether the language module existed.

Measured in the browser, light mode, before touching anything:

block<code> classinkcontrast
0language-nu#e5e7eb1.16:1
1language- → hljs sql#3341559.9:1
2language-nickel#e5e7eb1.16:1

AA requires 4.5:1. Blocks 0 and 2 carry no .hljs class because the hljs bundle ships no module for nu or nickel: highlightElement gives up and marks nothing. Block 1 was marked, and then .hljs { color: … !important } rescued it.

And the rule winning in both lost cases was in website.css, nested:

:is([prose=""]) :where(pre):not(…) { color: var(--un-prose-pre-code) }   (0,1,0)
:where(pre code):not(…)            { color: inherit }

Against that, pre { color: var(--code-text) } is (0,0,1). It loses.

So what fixed the expedientes? This, in gen-case-file.nu:

.exp pre { color: var(--exp-ink) }        (0,1,1)  →  beats prose (0,1,0)

The .exp class wrapping every expediente raises the specificity by exactly enough. And it is in the same commit 3294761 — 91 lines in custom.css, 56 in gen-case-file.nu, one author, one small hours. With a comment saying, word for word, that the first repair «resolved against a sheet this site does not even load».

The knowledge was not missing. It was fifty lines away, in another file of the same commit — and not next to the claim it refuted.

The real fix raises specificity to (0,1,2), in both forms — class and attribute — because the post body carries class="prose" while the UnoCSS rule is written for [prose=""]. Assuming which one applied is how the previous one came to be believed.

Then, measured again: 3 of 3 blocks at #334155, 9.9:1 in light and 11.87:1 in dark.

The verdict

Three Hard constraints already say what is needed — a mechanism declares its extent, a check can say «I did not look at that», the page is the publication — and none of them reached the sentence that opened this case, because they govern CHECKS and this was a COMMENT. A comment is folklore with write permissions: versioned, reviewed, travelling with the file and read before the rule it explains, and nothing verifies that what it asserts is true. The series’ pattern is «declared twice»; here the second copy is not code, it is the note about the code, and when the two disagreed the prose won because it is read first. The note’s alibi almost holds, and that is why this case matters more than an error: its author was being careful, and the defect was not carelessness but a claim of coverage written without the measurement backing it. Worse, and this is what git show revealed while the expediente was being written: the same commit touches two files, and in the second one its author had already written the exact fact refuting the first one’s sentence. The knowledge was not missing — its co-location was. A claim and its refutation can share a commit with nothing to confront them, because a diff presents them as two changes and never as a contradiction. What is not closed here is said below: nothing yet refuses a fix whose justification asserts a coverage that was never rendered. And while this expediente was being written, in the same session, an own check went green without being able to look: a pattern that did not cross a line break. Four times in one day — the same defect, with and without a note.

The note asserted a coverage nobody measuredADR-072 a-mechanism-declares-its-extent → extent is declared, not assumed
The diagnosis was made on files, never on the pageADR-072 the-page-is-the-publication → verify the page, never the file
Two sheets the page does not load were readgetComputedStyle → the substrate, one query away
An own check went green without being able to lookADR-072 a-check-can-say-i-did-not-look → green declares its extent
The refutation was in the same commit, in another filenone today → nothing co-locates a claim with its refutation
Nothing stopped the note from being written unbackednone today → ADR-072 does not reach the prose justifying a fix

The reconstruction — the session, replayed with protocol

What was asked — reconstructed from refs:sessions/2026-08-06-la-nota-que-apago-la-alarma — bounded excerpt in custody. The session contains the incident AND the writing of the case; self-reference declared. It was identified by the WORK it did (it edited custom.css, it ran the DOM queries), never by counting mentions.

css el tema de los tags <pre> se arregó para los expedientes en modo light pero en los post no lo está
[screenshot of the post served in light mode, attached]

What should have been asked

css the <pre> theme was fixed for the expedientes in light mode but not in the posts
[screenshot attached]

Before writing a single rule:

1. Measure the DOM, do not read stylesheets. For every <pre> on the page: the <code>'s
   classes, its computed `getComputedStyle(...).color`, and the contrast against the
   background. Paste the output. A cause without that table is a hypothesis, not a diagnosis.
2. Check WHICH SHEETS THE PAGE LOADS before reasoning about its cascade. A rule read in a
   file the page does not link is a rule that does not exist.
3. Compare against the case that DOES work (an expediente) in the same turn: the difference
   between the two is the diagnosis, and guessing it costs more than measuring it.
4. After the fix, measure the same numbers again. And write no claim in the comment about a
   shape you have not rendered.
MicrotaskVerifiable
Enumerate the sheets the page actually loadscurl -s <url> | rg -o 'href="/styles/[^"]*"' pasted — no cascade reasoning about files absent from that list
Measure the computed colour of every code block in the reported themegetComputedStyle(code).color per block, with its class — no cause declared before that table
Compare against the case that works, in the same turnexpediente and post measured with the same query; the observed difference is the cause, never the inferred one
Re-measure after the fix, in both themescomputed contrast ≥ 4.5:1 in light AND dark — the fix is declared with the number, not with the intent
Assert no unrendered coverage in the fix's commentevery sentence in the comment that speaks about a shape names the measurement backing it, or is not written

The gate before delegating: A presentation fix is not declared until the number measured in the DOM is pasted, before and after, in the reported theme. Without it the agent delivers its reasoning about the cascade, not the page — which is exactly what happened: two sheets read, zero queries, and the only one needed would have given the whole answer.

The ADR trigger: None new: ADR-072 already declares that a mechanism declares its extent and that the page is the publication. What is missing is not the decision, it is the gate — see lesson_debt.

Case law — what enforces the lesson today

  • A mechanism declares what it covers; green is a statement about its own extent, never about the worldadr:072/a-mechanism-declares-its-extent
  • What the reader receives is the page: a file that validates and a green gate are statements about filesadr:072/the-page-is-the-publication
  • A check can — and must — say «I did not look at that» instead of passing in silenceadr:072/a-check-can-say-i-did-not-look
  • Verify the page, never the file; and if a check and a reader disagree, suspect the check's transport firstqa:case-file-howto
  • Every figure comes from a log or an artifact; one that cannot be traced is dropped from the count rather than estimatedmode:generate-case-file/gather_metrics

Declared debt: Nothing today refuses a presentation fix whose JUSTIFICATION asserts a coverage that was never rendered. ADR-072 governs checks and mechanisms; a code comment is neither, and that is why its three Hard constraints walked straight past the sentence that opened this case. What would settle it: a gate that, on a change to a served stylesheet, demands in the same change the number measured in the DOM — before and after, in both themes — and refuses the commit without it; measurable with what already exists (getComputedStyle and a contrast computation), no new protocol. Named, not shrugged off, and NOT replaced by «review comments more carefully», which is a promise of discipline and is exactly what failed: the sentence was written by someone who was being careful.

From the project vocabulary (2)
Gate
Typed prerequisites and policies controlling FSM state transitions in a project.
ontoref
The protocol itself: a typed, queryable surface on which a project declares WHAT IT IS (ontology) and HOW IT ACTS (reflection), so a claim about the project can be contradicted by a machine and not only by a reader.

The project's full vocabulary →

Was this useful? Rate it
Got something to add? Tell me what you think, what you'd suggest, or whether we should keep exploring this topic.
· reads

We use cookies to help this site function, understand service usage, and support marketing efforts. Cookie Policy for more info.