Register R358: a parent swapped for a link leaves its target untouched #80

Merged
mesh-admin merged 1 commits from replay/r358 into main 2026-10-12 13:46:21 +00:00
Contributor

What: a mesh directory outside every home was given its mode and owner by path, so a parent swapped for a link between two applies carried root's chmod and chown to the link's target.

Why: hq issue 358 (fixed by mesh-host#87, merge commit 36704b5471cb7b4e585847a08e4fd7fd64aea357) is a core incident and needs its replay here (to-be 45 Phase 5). The fix's own commit carries the test, internal/apply/replay358_test.go, written only with what applyDirectory had before the fix, so the prover lays it over the commit before.

How it was tested:

  • gofmt -l . clean, go vet ./... clean, in replays/.
  • go test -run '^(TestEveryReplayIsWhole|TestTheBedProvesWhatTheChangeTouches)$' . passes.
  • go run ./cmd/prove R358 (by hand, per replays/merge-check.sh, against mesh-host cloned beside the lab): PROVED — before its fix fails ("the directory reached through a link was not refused"), on its fix passes.

Fixes issue 358.

What: a mesh directory outside every home was given its mode and owner by path, so a parent swapped for a link between two applies carried root's chmod and chown to the link's target. Why: hq issue 358 (fixed by mesh-host#87, merge commit 36704b5471cb7b4e585847a08e4fd7fd64aea357) is a core incident and needs its replay here (to-be 45 Phase 5). The fix's own commit carries the test, internal/apply/replay358_test.go, written only with what applyDirectory had before the fix, so the prover lays it over the commit before. How it was tested: - gofmt -l . clean, go vet ./... clean, in replays/. - go test -run '^(TestEveryReplayIsWhole|TestTheBedProvesWhatTheChangeTouches)$' . passes. - go run ./cmd/prove R358 (by hand, per replays/merge-check.sh, against mesh-host cloned beside the lab): PROVED — before its fix fails ("the directory reached through a link was not refused"), on its fix passes. Fixes issue 358.
mesh-admin added 1 commit 2026-10-12 13:23:38 +00:00
Register R358: a parent swapped for a link leaves its target untouched (hq issue 358)
mesh/merge-gate pass: the change touches no module of the mesh's graph
mesh/repo-check pass: its merge-check.sh passed, each part in its toolchain: merge-check.sh (typescript), replays/merge-check.sh (go), asks/merge-check.sh …
mesh/delivery delivered
26a0f45269
Proved with go run ./cmd/prove R358: fails on mesh-host#87's commit before
(dce0eef), passes on the fix (36704b5, mesh-host#87).
Author
Contributor

Delivery novox/mesh-lab@26a0f4526901 — delivered since 2026-10-12T13:46:48Z

Delivery plan — builds nothing: the change touches no module of the mesh's graph

Transitions

  • 2026-10-12 13:23 (new) → proposed (announced): novox/mesh-lab#80's head announced
  • 2026-10-12 13:34 proposed → checked (checked): the verdict names this commit
  • 2026-10-12 13:34 checked → ready (accepted): the gate passed or warned, and the repository's own check did not fail
  • 2026-10-12 13:46 ready → published (merged): on the trunk its modules follow: merged there, and its walk opened — or nothing for a walk to move
  • 2026-10-12 13:46 published → delivered (done): nothing for a walk to move

The commit's note under refs/notes/mesh-plan keeps every transition: git log --notes=mesh-plan.

<!-- mesh-delivery:view --> **Delivery** `novox/mesh-lab@26a0f4526901` — **delivered** since 2026-10-12T13:46:48Z **Delivery plan** — builds nothing: the change touches no module of the mesh's graph **Transitions** - 2026-10-12 13:23 (new) → proposed (announced): novox/mesh-lab#80's head announced - 2026-10-12 13:34 proposed → checked (checked): the verdict names this commit - 2026-10-12 13:34 checked → ready (accepted): the gate passed or warned, and the repository's own check did not fail - 2026-10-12 13:46 ready → published (merged): on the trunk its modules follow: merged there, and its walk opened — or nothing for a walk to move - 2026-10-12 13:46 published → delivered (done): nothing for a walk to move The commit's note under `refs/notes/mesh-plan` keeps every transition: `git log --notes=mesh-plan`.
Author
Contributor

Verdict: approve at 26a0f45

Independent review from a fresh clone at the PR head (26a0f45269), with mesh-host cloned beside mesh-lab as the prover expects.

  • Shape: the R358 entry matches the other InRepository entries' field order and comment style exactly (compared against R294, R331) — a prefatory comment on what the incident was, how it was found, and where the fix is, then ID, Issue, Kind, Repository, Fix, What, Asserts, Package, Test, Files. No Home/HomeRef is needed, same as R294, because the test file (internal/apply/replay358_test.go) is already part of the Fix merge commit.
  • Only replays/register.go changes in this PR (confirmed via the PR's file list) — no scope creep.
  • replays/merge-check.sh steps all pass: gofmt clean, go vet ./... clean, go test -run '^(TestEveryReplayIsWhole|TestTheBedProvesWhatTheChangeTouches)$' . passes.
  • go run ./cmd/prove R358 (from replays/, mesh-host cloned beside the lab) says: R358 (issue 358): PROVED — before its fix fails, on its fix passes, with the before-failure line the directory reached through a link was not refused: <nil> — matching the PR body's own test-plan claim.
  • Verified independently in a fresh clone of mesh-host: commit 36704b5471cb7b4e585847a08e4fd7fd64aea357 is on mesh-host's main, is the merge of mesh-host #87 ("Give a mesh directory its mode and owner only through a descriptor"), and its diff includes exactly internal/apply/replay358_test.go among its seven changed files, matching Package: "./internal/apply" and Test: "TestAParentSwappedForALinkLeavesItsTargetUntouched".
  • Read the test itself in mesh-host: it swaps the directory's parent for a symlink between two applies, asserts the second apply is refused via PlacementRefusedError naming the link and who could replace it, and asserts the link's target mode is left untouched — this matches the entry's What and Asserts text precisely.

Checks at the time of this review: mesh/merge-gate is still pending (building on novox since 15:28) and mesh/repo-check has not yet posted (shows "missing"), so main's branch protection does not yet consider this mergeable. That's a CI-timing note, not a finding against the change — re-check both before merging.

Verdict: approve at 26a0f45 Independent review from a fresh clone at the PR head (26a0f45269012e5fb528356d7c1d4600a98841ce), with mesh-host cloned beside mesh-lab as the prover expects. - Shape: the R358 entry matches the other `InRepository` entries' field order and comment style exactly (compared against R294, R331) — a prefatory comment on what the incident was, how it was found, and where the fix is, then `ID`, `Issue`, `Kind`, `Repository`, `Fix`, `What`, `Asserts`, `Package`, `Test`, `Files`. No `Home`/`HomeRef` is needed, same as R294, because the test file (`internal/apply/replay358_test.go`) is already part of the Fix merge commit. - Only `replays/register.go` changes in this PR (confirmed via the PR's file list) — no scope creep. - `replays/merge-check.sh` steps all pass: gofmt clean, `go vet ./...` clean, `go test -run '^(TestEveryReplayIsWhole|TestTheBedProvesWhatTheChangeTouches)$' .` passes. - `go run ./cmd/prove R358` (from `replays/`, mesh-host cloned beside the lab) says: `R358 (issue 358): PROVED — before its fix fails, on its fix passes`, with the before-failure line `the directory reached through a link was not refused: <nil>` — matching the PR body's own test-plan claim. - Verified independently in a fresh clone of mesh-host: commit 36704b5471cb7b4e585847a08e4fd7fd64aea357 is on mesh-host's main, is the merge of mesh-host #87 ("Give a mesh directory its mode and owner only through a descriptor"), and its diff includes exactly `internal/apply/replay358_test.go` among its seven changed files, matching `Package: "./internal/apply"` and `Test: "TestAParentSwappedForALinkLeavesItsTargetUntouched"`. - Read the test itself in mesh-host: it swaps the directory's parent for a symlink between two applies, asserts the second apply is refused via `PlacementRefusedError` naming the link and who could replace it, and asserts the link's target mode is left untouched — this matches the entry's `What` and `Asserts` text precisely. Checks at the time of this review: `mesh/merge-gate` is still pending (building on novox since 15:28) and `mesh/repo-check` has not yet posted (shows "missing"), so main's branch protection does not yet consider this mergeable. That's a CI-timing note, not a finding against the change — re-check both before merging.
mesh-admin merged commit 1f008aeb18 into main 2026-10-12 13:46:21 +00:00
mesh-admin deleted branch replay/r358 2026-10-12 13:46:21 +00:00
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: novox/mesh-lab#80