From 42a04b84fdb64a21783f1abc4749019f0bfb311f Mon Sep 17 00:00:00 2001 From: David F Glidden Date: Thu, 6 Aug 2026 20:17:35 +0200 Subject: [PATCH] PENDING-111: fidelity_equivalence@3 erases Alexander's invariant rating MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Steward-found, from his printed copy. The asterisks after each pattern name are Alexander's confidence rating (none/one/two; convention set out in 'Using this book' pp.14-15) — 54/114/81 across the manifested corpus. The conversion preserved them correctly as escaped \*. The governing relation strips them: @3's _MARKUP_EMPHASIS = re.compile(r'[_*]') removes every asterisk including the escaped literal, so a pattern Alexander holds to be a true invariant compares identical to one he holds far from invariant. Broader than the ruling that authorized it — REVIEWED-87 excluded emphasis DELIMITERS, and a backslash-escaped asterisk is the explicit declaration that the character is content. Jurist-gated; the executor does not touch a ratified relation. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01AB3Kryoy6b1pm2Nz1DYdLh --- PENDING.md | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/PENDING.md b/PENDING.md index 54e982e..b3cc0c7 100644 --- a/PENDING.md +++ b/PENDING.md @@ -1309,3 +1309,43 @@ Method: every `*JURIST-PACKAGE*.md` / `*FOR-JURIST*.md` under `~/dotfiles/claude **Awaiting:** Steward authorization. (b) is agreed in conversation 2026-08-06; this item records it and asks for (c) and (d). --- + +## PENDING-111 — `fidelity_equivalence@3` strips a literal asterisk that carries meaning: Alexander's invariant rating is erased under the governing relation + +**Date:** 2026-08-06 +**Tag:** [PROPOSAL] — routes to the **jurist**: `@3` is jurist-ratified (REVIEWED-87, 2026-08-05) and `engine/fidelity.py`'s own header states that a change to any relation's classes without a ratified bump is drift against the ruling. The executor does not touch it. + +**Summary:** `@3` excludes markdown emphasis from word-identity comparison via `_MARKUP_EMPHASIS = re.compile(r"[_*]")`, which strips **every** `*` unconditionally — including asterisks the source escaped as `\*` precisely to declare them literal. In *A Pattern Language* those asterisks are Alexander's **confidence rating**, and erasing them makes a pattern he holds to be a true invariant compare as identical to one he holds to be far from invariant. + +**Found by the steward from his printed copy**, not by any instrument: pattern 178 is *Compost*, 179 is *Alcoves*, and *Alcoves* carries two asterisks marking it an invariant. The convention — none / one / two asterisks after the pattern name — is set out in the book's own "Using this book", pp. 14–15. + +**Measured, on the live corpus and the live module.** +- Distribution across the manifested corpus: **54 patterns with no asterisk · 114 with one · 81 with two.** This is not a rare edge; it is a graded three-value field over the whole work. +- The conversion did its job — the ratings survive, correctly escaped (`COMPOST\*`, `CITY COUNTRY FINGERS\*\**`). +- The relation does not: + + | relation | `COMPOST\*` → | `ALCOVES\*\*` → | + |---|---|---| + | `@1` | `COMPOST\*` | `ALCOVES\*\*` | + | `@2` | `COMPOST\*` | `ALCOVES\*\*` | + | **`@3` (GOVERNING)** | **`COMPOST\`** | **`ALCOVES\\`** | + +**Why this is a defect against REVIEWED-87 rather than a new question.** The ruling authorized excluding markdown **emphasis delimiters** and pandoc footnote reference markers. A delimiter is *paired and adjacent to text*; that is what makes it a delimiter rather than a character. An escaped `\*` is the converter's explicit declaration that the asterisk is **content**, and the regex strips it while ignoring the very backslash that exists to protect it. The implementation is broader than the ruling that authorized it — so the remedy may be a correction within `@3` rather than a bump, which is the jurist's call and not the executor's. + +**Bearing on the ruling's own stated rationale.** REVIEWED-87 authorized `@3` on the engine's typographic-in/orthography-out test plus functional analogy to chamber §II.3 — the case being that a legitimate re-extraction *adding recovered anchors* should not falsely fail a word-multiset comparison. That reasoning covers markup a converter introduces. It does not reach a mark the **author** made, that the converter deliberately preserved. Orthography-out is exactly the line this crosses. + +**A second finding, recorded because it compounds this one and is cheap to state:** the section that defines the notation — "Using this book", pp. 14–15 — is declared **paratext and is not indexed** (`region: using_this_book`, `chunk_count: 0`; it is why ground-truth items B8 and B10 are `reachable: false`). So the key to a three-value semantic field carried across 249 patterns lives in a region the engine structurally cannot read. That is defensible under D-4 (paratext ledger-accounted, search-inert) but it should be a **decision**, not a side effect. + +**Options.** +- **(a) Correct `@3` in place** so the exclusion matches its ruling: strip emphasis *delimiters*, never an escaped `\*`/`\_`. Argued as a defect-fix within the ratified class, no bump. +- **(b) Bump to `@4`** with the narrowed class, `@3` frozen and defined like `@1`/`@2`. Cleanest against the supersession discipline, at the cost of a fourth live relation and a name already contested (the Greek/Latin census also claims `@4`). +- **(c) Leave `@3` and declare Alexander's asterisks a source-level caveat.** Rejected on sight: it makes a per-source workaround out of a general defect, and the general defect will recur on any source where `*` is content. + +**Recommendation: (a), with the jurist ruling whether it is a correction or a bump.** The executor's lean is weak and is disclosed as such — (a) is the outcome that requires least work from the party proposing it, which is exactly the reading to distrust. What the executor will state plainly: the current behaviour destroys authorial content, it was measured not argued, and it should not stand while the naming question is settled. + +**Falsifier / check.** Whatever is ruled, the fix ships with a test asserting `COMPOST\*` ≢ `COMPOST\*\*` under the governing relation, and that all three arity classes (0/1/2) remain distinguishable. If that test cannot be written, the remedy did not work. + +**Files affected:** `engine/fidelity.py` (`_MARKUP_EMPHASIS`, and the `@N` block if bumped); `tests/test_fidelity_v3.py`; `studium-engine/CLAUDE.md` if the governing relation changes. +**Awaiting:** Steward routing to the jurist. Filed ≠ sent. + +---