From 1ee0aefa4b536c172c98e04fd505792eeb31b0ce Mon Sep 17 00:00:00 2001 From: argszero Date: Wed, 21 Oct 2026 02:31:58 +0800 Subject: [PATCH] emrg: competition Phase D establishes the answer on a sample before changing the class --- emrg/server/competition_prompt.md | 9 +++++++++ tests/test_competition_prompt.py | 32 +++++++++++++++++++++++++++++++ 2 files changed, 41 insertions(+) diff --git a/emrg/server/competition_prompt.md b/emrg/server/competition_prompt.md index 126c4bbc..5c1bf834 100644 --- a/emrg/server/competition_prompt.md +++ b/emrg/server/competition_prompt.md @@ -135,6 +135,15 @@ One improvement per round: local validation → submit → record the score delt - Keep `best score` and the submission that produced it; never overwrite a better score with a worse one. - Note the submission budget/limits if the platform has any (many limit daily submissions). +**Establish what the right answer is before changing what produces it.** "Adjust the thing, re-score, read the delta" is a valid unit only when the thing you adjusted is uniform. When the round's subject is *a class of cases handled wrongly*, a change applied to the whole class mixes the cases it fixed with the cases it broke into one score, and that score has two opposite causes inside it: it cannot be attributed, so the change can neither be kept nor reverted, and the submissions spent on it produced nothing. Work it in four steps instead: + +1. **Classify** the cases that are not right, and keep the classification where the next round can read it. +2. **Draw a small sample from one class and submit it as a probe** — not the whole class. +3. **Read the probe's outcome as that class's answer.** A probe whose result is not read has bought nothing; a class whose answer is established is a fact the remaining cases can be judged against. +4. **Turn the answer into one concrete change** — a detector, a re-read rule, a corrected output format — recording what the answer was, where the previous behaviour went wrong, and what changed. + +Step 4 is the one most easily left out. A round that classified, counted or observed and stopped has not improved anything, whatever it wrote down. Widen from the sample to the whole class only when the sample's reading cannot be interpreted. + #### Phase E — Deadline wrap-up Freeze before the deadline; select the best historical submission as the final entry; settle the prize/ranking outcome. diff --git a/tests/test_competition_prompt.py b/tests/test_competition_prompt.py index bc3d1113..1f751591 100644 --- a/tests/test_competition_prompt.py +++ b/tests/test_competition_prompt.py @@ -1004,3 +1004,35 @@ def test_the_rendered_hygiene_section_still_precedes_the_round_it_binds(rendered "§1's first sentence did not survive the render, so the round is sent the section " "without the rule that fixes its mis-reading" ) + + +def test_phase_d_establishes_the_answer_on_a_sample_before_changing_the_class(): + """§Phase D must state how the right answer is established, not only that a round improves. + + "Local validation → submit → record the delta" is a valid unit only when what was adjusted + is uniform. On a class of cases handled wrongly, a whole-class change mixes the cases it + fixed with the cases it broke into one unattributable score, so the round that made it can + neither keep the change nor revert it — and the submissions it spent bought nothing. The + four steps below are what separates a round that improved something from a round that + classified, counted or observed and stopped; the last one is the step most easily left out, + which is why it is asserted by name rather than implied. + """ + text = PROMPT.read_text(encoding="utf-8") + start = text.index("#### Phase D — Iteration") + end = text.index("#### Phase E — Deadline wrap-up") + phase_d = text[start:end] + for step in ( + "**Classify** the cases that are not right", + "**Draw a small sample from one class and submit it as a probe**", + "**Read the probe's outcome as that class's answer", + "**Turn the answer into one concrete change**", + ): + assert step in phase_d, f"§Phase D is missing the step {step!r}" + assert "not the whole class" in phase_d, ( + "§Phase D must say the probe is a sample rather than the whole class — that is the " + "difference between an attributable reading and one number with two opposite causes" + ) + assert "Step 4 is the one most easily left out" in phase_d, ( + "§Phase D must name the step most easily skipped, or a round that only observed reads " + "as if it had improved something" + )