Skip to content

docs(limits): a whole-table operator is priced at a barrier rather than refused - #468

Merged
FBumann merged 1 commit into
mainfrom
claude/amazing-mayer-v5bhvt
Sep 15, 2026
Merged

FBumann merged 1 commit into
mainfrom
claude/amazing-mayer-v5bhvt

Conversation

@FBumann

@FBumann FBumann commented Sep 15, 2026 •

Copy link
Copy Markdown
Contributor

Prompt: "We decided to NOT add an escape island!!" and "the whole table read is not a wall... Its a performance loss. Nothing severe"

Note

The following content was generated by AI.

What this changes

Two sentences on limits.md were wrong, and both are corrected here.

A whole-table operator is priced, not refused. The page said no engine could build such a model one chunk of rows at a time. What it actually costs is one full pass: the engine reads the whole table before it builds any chunk, and the chunks stop being independent. An operator worth that enters, and a request for one names the price. Self-reference keeps its refusal on its own ground — nothing bounds how far it expands — so the operator table now splits the two apart.

There is no escape hatch. #38 was closed not_planned on 2026-08-27 and the docs never followed. The refusal table's second row was no engine could build it one chunk of rows at a time, with a whole-table operator and arbitrary Python as its examples. The operator has left that row, so the row is now the file would stop being the artifact — arbitrary Python, whose content no loader can check and no typesetter can print — and its answer to "can it change?" is no. errors.md replaces the #38 paragraph with the rule: the language has no escape hatch, and a gap closes as a macro, a primitive or a formulation.

AGENTS.md follows — a primitive is admissible when it is relational, and locality prices it rather than barring it.

Why

Both sentences are load-bearing, and a reader acts on them. The first told anyone proposing an operator that the engine could not build it, which is an impossibility claim the engine does not make. The second advertised a hatch that had already been decided against, so a reader planning around it was planning around nothing.

The choice to open the door rather than keep the refusal on a corrected reason was taken in the conversation that prompted this. Locality becomes what a primitive is priced against, not a gate it has to pass.

What was verified, and what was not

pixi.sh is blocked from this session's network, so pixi run ci was not run. In its place:

  • prettier --check clean across docs/ and AGENTS.md. It reflowed two tables in limits.md; both reflows are in the diff.
  • tests/test_docs.py -k "generated or generator" — 14 passed. None of the three changed files is generated, and the six generated pages are untouched.
  • Full tests/test_docs.py shows 10 failures under an ad-hoc uv environment. The same 10 fail on a stashed clean tree, so they are that environment's mkdocs plugin set and not this change. A real pixi run ci is still owed before merge.

Prose measured with the docs-writing skill's script: limits.md avg 18.7 → 17.9, median 16, 20 sentences over 25 words before and after and all of them pre-existing; errors.md avg 17.2 → 16.7, median 14, over-25 5 → 4. No sentence this change adds exceeds 25 words.

Deliberately not done: no src/ change. The language admits no whole-table operator today and this PR does not add one — it corrects what the page says the bar is. Admitting an actual operator is a separate request, judged against the rule as now written.

🤖 Generated with Claude Code

https://claude.ai/code/session_01T18AdG3hoawcwuqXxr4dnM

@read-the-docs-community

Copy link
Copy Markdown

Documentation build overview

📚 math-spec | 🛠️ Build #34566077 | 📁 Comparing 87df947 against latest (78b0ce1)

  🔍 Preview build  

2 files changed
± about/limits/index.html
± reference/language/errors/index.html

…an refused

The stated reason for refusing an operator that reads a whole table was that
no engine could build the model one chunk of rows at a time. That is not what
it costs. Such an operator makes the engine read the whole table before it
builds any chunk, and the chunks stop being independent. The page now says
that, and admits the operator at that price.

Self-reference keeps its refusal, on its own ground: nothing bounds how far it
expands.

The escape hatch is withdrawn. There is no capped block of Python, so the
refusal table names the reason that remains — the file would stop being the
artifact — and the errors page says the language closes its own gaps as a
macro, a primitive or a formulation.

Sentence length on the changed pages, measured with the docs-writing skill's
script: limits.md avg 18.7 to 17.9, median 16, 20 sentences over 25 words
before and after, all of them pre-existing; errors.md avg 17.2 to 16.7,
median 14, over-25 5 to 4. No sentence this change adds exceeds 25 words.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01T18AdG3hoawcwuqXxr4dnM
@FBumann
FBumann force-pushed the claude/amazing-mayer-v5bhvt branch from 87df947 to bc33b71 Compare September 15, 2026 08:40
@FBumann
FBumann merged commit 835e4a4 into main Sep 15, 2026
6 checks passed
FBumann added a commit to fluxopt/specsolve that referenced this pull request Sep 15, 2026
…hatch (#1631)

> **Prompt:** "We decided to NOT add an escape island!!"

> [!NOTE]
> The following content was generated by AI.

The README and the home page sold an `escape:` island. No key for it
exists in `src/`, and [#38](#38)
was closed `not_planned` on 2026-08-27. Both now say what is true: math
the language cannot express is a gap in the language.

## What this changes

| Where | Was | Is |
| --- | --- | --- |
| `README.md`, `docs/index.md` | "A finite language with a priced way
out" — unsayable math "goes in an `escape:` island, visible in the file
and billed before it runs" | "A finite language, with no escape hatch" —
a gap closes as a macro, a primitive or a formulation |
| `AGENTS.md` | triage is "macro, primitive, or escape"; the ceiling is
"relational ∩ local" | "macro, primitive, formulation, or refused"; the
ceiling is relational, and locality prices a primitive rather than
barring it |
| `docs/examples/index.md` | the port ledger's verdicts are "macro,
primitive, or escape" | the same four |
| `docs/about/roadmap.md` | partition-wise execution is safe because of
"the locality closure" | safe because every operator in the language
today reads a bounded number of rows per output row |

## Why

An `escape:` island is the one thing a reader of that bullet would plan
around, and it does not exist. The ceiling wording changes with it.
energy-models/mathspec#468 stops treating locality as a gate and makes
it the price a new operator pays, which retires "relational ∩ local" as
the way to say what the ceiling is. The roadmap's partitioning claim
rested on the same closure, so it now rests on the operators the
language actually has.

<details><summary>What was verified, and what was not</summary>

`pixi.sh` is blocked from this session's network, so **`pixi run check`
was not run.** In its place:

- `ruff format --check .` — 239 files already formatted.
- `python -m tools.constructs --check` — `docs/examples/index.md`
matches the models. The edited line sits outside all three generated
blocks, as do the `docs/index.md` edits relative to
`home-math:begin/end`.
- `pytest tests/test_docs_site.py tests/test_doc_examples.py` — 127
passed, 4 skipped. The skips need the `[linopy]` extra and are
unrelated.

A real `pixi run check` is still owed before merge.

Prose measured with the `docs-writing` skill's script: `README.md` avg
19.1 → 18.6, median 18 → 17, over-25 16 → 15; `roadmap.md` avg 18.6 →
18.5, median 15, over-25 9 before and after. No sentence this change
adds exceeds 25 words.

</details>

Deliberately not done: the docs are corrected, but nothing is proposed
in place of the hatch. With no escape, every gap has to close as a
macro, a primitive or a formulation, and which gaps exist is a
measurement this PR does not make — a coverage ledger against an
external corpus is the follow-up.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

https://claude.ai/code/session_01T18AdG3hoawcwuqXxr4dnM

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
FBumann pushed a commit that referenced this pull request Sep 15, 2026
Resolves the conflict with #429's `foreach:` to `dims:` rename across the
examples, the reference pages, the tests and the golden model. Every
conflicted hunk keeps this branch's spelling (`consume=`, `window=`,
`columns:`) with `dims:` applied on top, except `docs/about/limits.md`,
which takes #468's prose on the whole-table operator. The schema, the
golden output and the four generated pages are regenerated.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019fhGZgaBspo7mh9Hjd3KtT
@FBumann FBumann added the docs Documentation pages, guides, reference and README label Sep 24, 2026 — with Claude
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

docs Documentation pages, guides, reference and README

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant