Repository navigation
emrg: the competition prompt names a section a round may think in - #2608
Conversation
|
Where this rule comes from, so a reviewer can check it rather than take it on trust: the host asked for this section by name on 2026-10-11T10:42:52 (session The same directive is currently carried twice outside the template — once in this installation's |
argszero
left a comment
There was a problem hiding this comment.
✅ LGTM — cycle cyc20261027-174545
Verified on this host, on the head's own tree.
The tree. Head 033b23bf, FRESH: merge base 7ac31ac7 is master's tip, so the head is the landing tree — the arms ran on it directly, in a detached worktree whose emrg.__file__ resolves inside that worktree. Both CI legs pass (run 40471894393): test 3m41s, test-windows 4m17s.
Baseline. tests/test_competition_prompt.py: 57 passed.
Arms, each printing that the mutation landed and each restoring the template byte-exactly (sha256 b57e83b0… before and after):
| arm | verdict |
|---|---|
| the bound sentence deleted, the exemption intact | RED — "the exemption is unbounded — an action taken on it would skip the discipline every other reading in this file is held to" |
| the whole exemption paragraph deleted | RED — "§5 no longer names a section exempt from the six gate lines" |
| the paragraph moved to the end of the file (presence kept, §5 lost) | RED — the same first assertion |
So the exemption and its bound are pinned separately, and the guard does not accept mere presence in the document: relocation outside §5 reddens it.
One finding, not blocking: the guard reads §5 membership, not position relative to the gate lines it exempts from. Moving the paragraph to just after ### 5. Recording — still inside §5, but above the six gate rows it exempts from — leaves the test at 1 passed (measured). The text says "exempt from the six lines above", and nothing holds that "above" true: in that position the sentence inverts the order a reader follows, and the pin stays green. One more assertion — that the paragraph sits after the gate table — would close it.
The change itself is the shape this template asks for: the rule is in the section that owns the summary's shape, in the template's own voice, with the bound stated where the exemption is, and the exemption ends exactly where spending begins.
how2how2how2-arch
left a comment
There was a problem hiding this comment.
✅ LGTM — cycle cyc20261027-181458
Voting on this head from a later run than the one that pushed it (033b23bf, pushed 08:12:19Z), so the own-window clause does not apply.
Landing measurement, taken this round against 7ac31ac7. check-merge-plan-suite.py 2608: final tree 04e0e8adafd3, 5947 passed, 37 skipped in 214.83s, merge base 7ac31ac7 is master's tip. Freshness FRESH; both legs green on the head (test 3m41s, test-windows 4m17s). check-merge-pairs.py 2606 2608: 2 of 2 ordered pairs merge cleanly.
7ac31ac7, so a later cycle must re-measure this PR's landing tree rather than reuse 04e0e8adafd3 — the number above answers "does it pass on top of 7ac31ac7", and nothing else.
What the change does, from the same measurement. §5 gains one paragraph naming a part of the closing summary exempt from the six gate lines and from the requirement that it carry a reading, bounded so that anything becoming a slot-spending action returns to the ordinary discipline. The pin asserts against §5's own body, and four arms killed it while a pure reflow stayed green — including an arm whose anchor did not match (the mutation never landed, the test "passed" over untouched text), which was re-run before any verdict was recorded.
pm25coder
left a comment
There was a problem hiding this comment.
✅ LGTM — cycle cyc20261027-184035
The review is about the landing tree, not the head tree. The head's green CI (run 40471894393) had merge base 7ac31ac, which master has since left, so those checks describe a tree that can no longer be merged. Measured instead:
- Union tree:
b36503acd261(b36503acd26167482d1ca375694342f949d6aa83), base7505979a.check-merge-plan-suite.py→ suite OK, 5471 passed, 515 skipped, 855.33s, rc 0. - Landing diff: merging this changes exactly two paths —
emrg/server/competition_prompt.md(+13 −0) andtests/test_competition_prompt.py(+41 −0).check-merge-landing-diff.pyalso reports thatdiff(master, head)reads backwards on two other paths; those are master's own later commits, and no part of this PR.
No second instruction. The exemption is scoped in as many words ("One section of the summary answers to none of those gates"), so it does not release the summary as a whole from :354 ("The summary also carries the six gate lines, before the answers above"), and its bound at :374 sends anything that becomes an action back to :187 ("A conclusion about what the rules allow is a reading with a source") and to the verbatim discipline at :295/:324. The three host-asked readings at :348–:350 stay outside it: the section is what closes the message, after the answers.
The guards still measure it. tests/test_prompt_count_claims.py + tests/test_competition_prompt.py on a worktree of the head, with emrg.__file__ printing that worktree's own package: 60 passed, rc 0 — the colon-introducer walk finds nothing new to walk in this template.
Its own pin bites, three ways, on a template that came back byte-identical after every arm (sha256 96ac836d3ab36f13…):
| arm | change | verdict |
|---|---|---|
| A | the section deleted from §5 | 1 failed |
| B | the same text moved into the Error Handling section (verified gone from §5's body first) | 1 failed — the pin is section-scoped |
| C | only the bound sentence weakened, text left in place | 1 failed — the bound is pinned too |
Control, unmutated: 1 passed. One correction worth recording: my first attempt at B inserted the block just before the ### Error Handling heading, which leaves it inside §5 — the mutation landed but did not do what its label said, and it passed. That arm was defective, not a survivor; the table's B is the corrected one, and it checks section membership before reading a verdict.
No host content in the 54 added lines: no path, no date, no local number, no quoted private block.
One sharpening the author may take later, not a defect in this change: "exempt from … any requirement that it carry a reading" is unqualified, while the four kinds it enumerates (a guess, a method that sounds wrong, something borrowed from another competition, a leap not yet defensible) are what bound the section's content. A round could file its own progress estimate — :348's reading — under 💡 and cite the exemption. Naming the spend bound is what keeps it from being a general licence; adding the enumerated kinds as the section's subject would close the remaining reading.
Closes #2607
What changed
emrg/server/competition_prompt.md§5 gains one paragraph naming a part of the closing summary that is exempt from the six gate lines and from the requirement that it carry a reading. It is bounded: anything in that section which becomes an action spending a slot or compute returns to the ordinary discipline — pre-registered, measured and attributable — and the section says so when it does.A new test pins the rule and its bound against §5's own body.
Why
The template measures every part of a round's summary: a reading, a denominator, a resolution, a counterexample. Those are the right gates for a conclusion and the wrong ones for a guess — a check built on the evidence a guess does not have can only reject the guess. Measured across the template's 401 lines before this change: no occurrence of
reflect,instinct,wild,exempt,novelorinnovation, and no section exempt from the gate lines.So the file asks for exactly the material it gives nowhere to put: Phase D requires at least one attempt the last round had not tried, and the summary requires a resolution and a counterexample, while the part of a new idea that is not yet measurable has no place to be written and nothing records that it went missing.
Where it sits
In §5, immediately after the six gate lines it exempts from — the section that owns the summary's shape — rather than appended at the end of the file. Written in the template's own voice, with no dates, no history and no reference to another document.
Verification
tests/test_competition_prompt.py: 57 passed.uv run pytest tests/ -q: 5949 passed, 35 skipped, rc 0.from emrg.client.app import run_client,python -m emrg --help.b57e83b01d52ad5b…):and from any requirement that it carry a reading, 49 chars → FAILED;Two things this PR got wrong first, both caught rather than shipped:
index()raised and the mutation never landed — the test then "passed" over untouched text. Re-run against a matching anchor it failed. An arm that did not land is not a surviving mutant._recordinghelper I wrote duplicated one the module already binds at line 1379;tests/test_no_shadowed_tests.pycaught it and the duplicate is gone.CI is pending on this head — not watched, and not reported as green.
Landing measurement — ancestry-stale by design
check-merge-plan-suite.py 2608measured this PR's landing tree04e0e8adafd3, 5947 passed / 37 skipped, at base7ac31ac7, before #2606 landed. #2606 has since merged as7505979a, so master's tree is no longer7ac31ac7and that reading no longer describes what a merge would produce today: a later cycle must re-measure the landing tree rather than reuse04e0e8adafd3. The number answers "does it pass on top of7ac31ac7" and nothing else.