Skip to content
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions docs/SUMMARY.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
- [RFC 0009 — Compaction](./rfcs/0009-compaction.md)
- [RFC 0010 — Audit-stream queries & template drift](./rfcs/0010-audit-stream-queries.md)
- [RFC 0011 — A1 re-scope](./rfcs/0011-a1-rescope.md)
- [RFC 0012 — meta: CLAUDE.md §2 pillar-#2 wording](./rfcs/0012-claude-md-pillar-2-wording.md)

# Talks

Expand Down
248 changes: 248 additions & 0 deletions docs/rfcs/0012-claude-md-pillar-2-wording.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,248 @@
---
rfc: 0012
title: "meta: CLAUDE.md §2 pillar-#2 wording — template mining's 50–200× is a logical reduction, not on-disk bytes"
status: drafted
author: Jens Holdgaard Pedersen <jens@holdgaard.org>
drafting-assistance: Claude
created: 2026-06-14
supersedes: —
superseded-by: —
---

# RFC 0012 — meta: CLAUDE.md §2 pillar-#2 wording

> **This is a `meta:` RFC.** It proposes a change to `CLAUDE.md`, which
> its own footer declares load-bearing: *"This document is load-bearing;
> further changes require a `meta:` RFC and majority maintainer
> approval."* Per `CLAUDE.md` §8.5 (cache discipline) the edit is **not**
> made in the drafting session — this RFC specifies the exact change; a
> maintainer enacts it after approval. Precedent: the §6.2
> "tests are specifications" bullet, added via an informal `meta:` RFC
> waiver (commit `b50067d`, 2026-05-13). This RFC follows the same path,
> written out in full rather than as an informal waiver.

## 1. Summary

`CLAUDE.md` §2 pillar #2 currently reads: *"Log lines collapse to
`(template_id, params)` at ingest time. This is where the 50–200×
compression comes from — before any byte-level codec runs."* That phrasing
reads as an **on-disk-bytes** claim: that template mining alone yields
50–200× smaller files than the raw corpus, ahead of (and independent of) a
byte codec. RFC 0011 (`accepted`) established by measurement that this is
false — a whole-stream byte codec (zstd) captures the same redundancy, so
on disk Ourios does not beat zstd (the A1 gate is refuted and demoted to a
diagnostic). Template mining's 50–200× is a **logical** reduction (each
line becomes one row keyed by a small, stable `template_id`), and its
*value* is realised as **query pruning** — the benchmark gates B1/B2 — not
as fewer on-disk bytes than a codec. This RFC amends pillar #2 to say so,
so the project's canonical thesis statement matches its measured reality,
and reconciles the coupled echoes of the same framing elsewhere
(`benchmarks.md` §2, `README.md`, and RFC 0001's summary).

## 2. Motivation

### 2.1 The pillar statement is now contradicted by an accepted RFC

`CLAUDE.md` §2 is the project's load-bearing thesis: changing a pillar "is
an RFC-level decision." Pillar #2's "this is where the 50–200×
compression comes from — before any byte-level codec runs" asserts that
the byte-savings come from template mining, ahead of the codec. RFC 0011
(`accepted` 2026-06-14) measured the opposite on every corpus class,
including the maximally-templated LogHub HDFS_v1 (ourios 8.3× vs zstd-19
16× → A1 delta 0.516×, `benchmarks.md` §9.5/§9.6). The headline number in
the most load-bearing document in the repo is therefore inaccurate as
written. `benchmarks.md` opens by calling itself "an honesty contract with
ourselves"; the same standard applies to the pillar it tests against.

### 2.2 The number is not wrong — its *referent* is

The 50–200× figure is real and worth keeping: it is the **logical**
collapse of *N* near-identical log lines to a handful of `(template_id,
params)` rows. That reduction is exactly what lets a selective query read a
few row groups instead of scanning the corpus (pillar #1's footer-skip),
which the thesis gates **B1** (predicate-pushdown latency, PASS — 34.2× /
25.4×, `benchmarks.md` §9.4) and **B2** (result-size-not-corpus-size
scaling, PASS) measure and confirm. RFC 0011 §2.3 spells this out. So the
fix is a *referent* correction — "logical reduction → query pruning," not
"on-disk bytes → before the codec" — not a retraction of the claim.

### 2.3 Why fix the wording at all

An inaccurate load-bearing claim quietly licenses bad decisions: someone
could "optimise" Ourios's on-disk size to chase the 50–200×-vs-codec
framing, trading away the columnar framing (page indexes, bloom filters,
row-group metadata) that *is* the value (it enables the row-group skipping
B1/B2 measure) — exactly the alternative RFC 0011 §4 rejected as
counter-productive. Pinning the pillar to the logical-reduction framing
forecloses that.

## 3. Proposed design

### 3.1 The CLAUDE.md §2 pillar-#2 change

Replace the current pillar #2 (`CLAUDE.md` §2, the "Drain-derived online
template mining" item):

> 2. **Drain-derived online template mining.** Log lines collapse to
> `(template_id, params)` at ingest time. This is where the 50–200×
> compression comes from — before any byte-level codec runs. Correctness
> of this layer is the single biggest engineering risk in the project.

with:

> 2. **Drain-derived online template mining.** Log lines collapse to
> `(template_id, params)` at ingest time — a **logical** 50–200×
> reduction (many near-identical lines become rows keyed by one small,
> stable `template_id`). That reduction is what lets a selective query
> read a handful of row groups instead of scanning the corpus, so the
> payoff is **query pruning** (pillar #1's footer-skip; benchmark gates
> B1/B2), **not** fewer on-disk bytes than a byte codec — RFC 0011
> showed a whole-stream codec captures the same redundancy, so the
> on-disk-compression-vs-zstd ratio (A1) is a recorded diagnostic, not a
> gate. Correctness of this layer is the single biggest engineering risk
> in the project.

The final sentence (the "single biggest engineering risk" line) is
preserved verbatim — it is load-bearing in its own right and unaffected.

### 3.2 The coupled documentation reconciliations

The same on-disk/byte-level framing echoes in three other docs; all are
reconciled in the same enactment so the docs stay consistent (none is
load-bearing in the `CLAUDE.md` sense, so they ride normal doc PRs). The
authoritative list is whatever the RFC0012.2 framing-grep (§5) surfaces —
as of drafting, the phrase "before any byte-level codec" / "over a
competent byte codec" appears in exactly these (plus RFC 0011 and this RFC,
which quote it to describe the change):

1. **`benchmarks.md` §2** — the A1 "Why this bar" bullet paraphrases the
pillar as *the project's headline claim (§2, CLAUDE.md) is "50–200× over
raw, ≥ 5× over a competent byte codec."* That paraphrase (a) attaches a
"≥ 5× over a competent byte codec" multiplier the pillar never literally
stated and (b) is the byte-vs-codec framing RFC 0011 demoted. Reword to
the logical-reduction / diagnostic framing.
2. **`README.md`** — the "Drain-derived online template miner" bullet says
lines collapse to `(template_id, params)` *"before any byte-level codec
runs."* Same fix: it is the logical reduction, before the codec in the
*pipeline* but not a bytes-vs-codec claim.
3. **`docs/rfcs/0001-template-miner.md` §1** — its summary states *"The
compression target is 50–200× over raw bytes before any byte-level codec
runs."* Same framing. RFC 0001 is `accepted`, but this is a **factual**
thesis-statement correction (not a change to its design or §5 acceptance
criteria), so reconcile it to the logical-reduction framing with a
one-line note pointing at RFC 0011. (If the maintainer prefers to leave
an accepted RFC's prose untouched, the alternative is a dated editorial
note rather than a reword — maintainer's call at enactment.)

Only the **framing** is reconciled; bare mentions of the *50–200×*
**figure** as a logical reduction (e.g. `docs/roadmap.md`, other RFCs) are
correct and are left alone.

### 3.3 What does **not** change

- No code, schema, or on-disk format. This is a documentation-wording RFC.
- The production codec default (ZSTD-3) and the A1 *diagnostic* itself
(RFC 0011) are untouched.
- `CLAUDE.md` §1's thesis sentence ("collapses the inverted index, the
compression layer, the storage tier, and the query engine into one
stack") is left as-is — it describes the *stack* collapsing layers, not
template mining as the byte-compressor; see §7 for the open question on
whether it also wants a touch.

## 4. Alternatives considered

- **Leave the wording.** Rejected: an accepted RFC (0011) contradicts a
load-bearing pillar; leaving it is the silent-inaccuracy failure mode the
project's honesty contract exists to prevent.
- **Delete the 50–200× number.** Rejected: the logical reduction is real,
is the thesis's actual mechanism, and is worth stating — only its
referent (logical, not on-disk-bytes) needs fixing.
- **Reword more aggressively** (drop the figure, restate the whole pillar
around query pruning). Rejected as over-reach for a wording fix: the
minimal precise change keeps the pillar recognisable and the diff
reviewable.
- **Fold this into RFC 0011.** Rejected: RFC 0011 is `accepted` and
explicitly deferred the `CLAUDE.md` edit to a `meta:` RFC (its §3 item 4
/ §7), because `CLAUDE.md` changes need the footer's majority-approval
gate that a thesis-gate tuning RFC does not.

## 5. Acceptance criteria

> **Scenario RFC0012.1 — pillar #2 states the logical-reduction framing.**
> - **Given** `CLAUDE.md` §2 pillar #2
> - **When** this RFC is enacted (post-approval)
> - **Then** pillar #2 reads per §3.1: the 50–200× is described as a
> **logical** reduction whose payoff is query pruning (B1/B2), and the
> on-disk-vs-zstd ratio is named a diagnostic (A1, RFC 0011), not a gate
> - **And** the "single biggest engineering risk" sentence is preserved
> verbatim

> **Scenario RFC0012.2 — no on-disk-bytes framing of the 50–200× remains.**
> - **Given** the repo docs (`CLAUDE.md`, `README.md`, `docs/benchmarks.md`,
> `docs/rfcs/0001-template-miner.md`)
> - **When** this RFC is enacted
> - **Then** no passage frames template mining's 50–200× as **on-disk
> bytes** beaten "before any byte-level codec runs" or as "≥ N× over a
> byte codec" — all coupled echoes (§3.2: `benchmarks.md` §2, `README.md`,
> RFC 0001 §1) are reconciled
> - **And** a repo-wide grep for the **framing phrases** —
> `before any byte-level codec` and `over a competent byte codec` —
> returns only RFC 0011 / this RFC (which quote the old wording to
> describe the change). The check is on the *framing*, **not** the bare
> `50.200` figure: mentions of the *50–200× figure* as a logical
> reduction (e.g. `docs/roadmap.md`, `docs/rfcs/0005-parquet-storage.md`)
Comment thread
jensholdgaard marked this conversation as resolved.
Resolved
> are correct and expected to remain.

> **Scenario RFC0012.3 — consistency with the accepted A1 re-scope.**
> - **Given** RFC 0011 (`accepted`), `benchmarks.md` §7's gate table
> (A1 = diagnostic), and the amended pillar #2
> - **When** a reader cross-checks the thesis statement against the
> benchmark gates
> - **Then** the three agree: template mining's value is logical /
> query-pruning (B1/B2 gate it), A1 is a diagnostic, and C1/C2 are the
> miner pillar's gates (RFC 0001 `accepted`, RFC 0011)

## 6. Testing strategy

There is no code test: this RFC changes prose in two living documents. The
acceptance criteria (§5) are **doc-state assertions**, verified by review +
the grep in Scenario RFC0012.2, exactly as RFC 0011's RFC0011.1–.3 were.
Two notes:

- Unlike new OTel names (semconv `weaver registry generate` no-diff CI) or
RFC acceptance scenarios (greppable test ids), `CLAUDE.md` carries **no
automated consistency gate** — the gate is the footer's *majority
maintainer approval* on the enacting PR. That human gate is this RFC's
"test."
- The enacting PR's diff is the artefact: reviewers confirm the §3.1 text
landed verbatim and §3.2's `benchmarks.md` reconciliation rode along.

## 7. Open questions

- [ ] **Maintainer approval (majority).** `CLAUDE.md`'s footer requires it
for any change; this RFC cannot be enacted without it.
- [ ] **Does `CLAUDE.md` §1's thesis sentence want a parallel touch?** It
reads "collapses … the compression layer … into one stack." That is
defensible as written (the *stack* unifies layers; Parquet/zstd is
the byte-compression layer, template mining the logical one), so this
RFC leaves it alone — but if the maintainer reads "the compression
layer" as implying template mining *is* the compressor, a one-clause
clarification there is in scope for the same enactment.
- [ ] **Footer changelog line.** `CLAUDE.md`'s footer records each meta
change with its commit range and rationale; the enacting PR should
add the 2026-06-14 line (and bump "Last updated") in the same diff.

## 8. References

- **RFC 0011** — A1 re-scope (`accepted`): the measurement and the
diagnostic-not-gating decision this RFC propagates to the pillar wording.
Its §3 item 4 / §7 explicitly deferred this `CLAUDE.md` edit to a
`meta:` RFC.
- **`docs/benchmarks.md`** §2 (A1 + "Why this bar"), §7 (gate table:
A1 diagnostic), §9.4/§9.5/§9.6 (the A1/B1/B2/C1/C2 readings).
- **`CLAUDE.md`** §2 (the pillars), §8.5 (cache discipline — why the edit
is not made in-session), and the footer (the `meta:` RFC + majority-
approval rule; precedent `b50067d`).
- **RFC 0001** (`accepted`) and **RFC 0007** (`validated`) — the miner and
querier pillars whose gates (C1/C2 and B1/B2) carry the value the amended
wording points at.
Loading