docs(limits): a whole-table operator is priced at a barrier rather than refused - #468
Merged
Merged
Conversation
…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
force-pushed
the
claude/amazing-mayer-v5bhvt
branch
from
September 15, 2026 08:40
87df947 to
bc33b71
Compare
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
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Note
The following content was generated by AI.
What this changes
Two sentences on
limits.mdwere 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_plannedon 2026-08-27 and the docs never followed. The refusal table's second row wasno 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 nowthe 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?" isno.errors.mdreplaces 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.mdfollows — 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.shis blocked from this session's network, sopixi run ciwas not run. In its place:prettier --checkclean acrossdocs/andAGENTS.md. It reflowed two tables inlimits.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.tests/test_docs.pyshows 10 failures under an ad-hocuvenvironment. The same 10 fail on a stashed clean tree, so they are that environment's mkdocs plugin set and not this change. A realpixi run ciis still owed before merge.Prose measured with the
docs-writingskill's script:limits.mdavg 18.7 → 17.9, median 16, 20 sentences over 25 words before and after and all of them pre-existing;errors.mdavg 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