docs: finalize RESUME — mount gate hardened (daemon-backed leg), VM deployment bugs fixed, snapshot taken
This commit is contained in:
+34
-31
@@ -54,40 +54,43 @@ Two separate bugs hid behind the "FUSE write didn't reach the daemon" symptom:
|
|||||||
integration test (spins up a live cube-server, runs the two `#[ignore]`d
|
integration test (spins up a live cube-server, runs the two `#[ignore]`d
|
||||||
daemon-backed tests via `--ignored`).
|
daemon-backed tests via `--ignored`).
|
||||||
|
|
||||||
## GATE STATUS (2026-08-13, end of session)
|
## GATE STATUS (2026-08-13, final)
|
||||||
- `./check` (fmt+test+clippy -D warnings) GREEN.
|
- `./check` (fmt+test+clippy -D warnings) GREEN.
|
||||||
- `./check daemon` GREEN — proves the socket-backed record round-trip against a
|
- `./check daemon` GREEN — socket-backed record round-trip against a real daemon.
|
||||||
real daemon (3 ignored tests via --ignored all pass).
|
- `./check mount` GREEN — NOW runs the regression suite against BOTH the
|
||||||
- `./check mount` (live FUSE, root) GREEN — 27/27 pass. This is the regression
|
in-memory `--seed` mount AND a daemon-backed `--socket` mount (with its own
|
||||||
guard exercising the real kernel VFS path; it now runs cleanly with the fixed
|
fresh daemon), plus a `durable across restart` assertion. 57/57 pass. This is
|
||||||
durable-mount code. Run before any future filesystem work.
|
the regression guard exercising the real kernel VFS path for BOTH backends.
|
||||||
|
|
||||||
## NEXT STEPS (current)
|
## COMPLETED THIS SESSION (chronological)
|
||||||
1. ~~Repeat the single-daemon + single-mount e2e INSIDE the VM...~~ DONE (see below).
|
- Fixed `DaemonBackend` envelope round-trip (commit 0300def).
|
||||||
2. Add a `--features mount` build to the VM image's build step / `./check` so the
|
- Fixed `--features mount` compile break (commit 8f9e7e0).
|
||||||
durable mount can't silently regress to in-memory again. (DONE on host ./check;
|
- Enforced both via `./check daemon` (the two #[ignore]d integration tests).
|
||||||
VM image build step not yet updated.)
|
- Host: `./check` + `./check daemon` + `./check mount` all GREEN (mount now
|
||||||
3. Optionally surface `DaemonBackend::put` failures as FUSE EIO instead of
|
covers the daemon-backed path too).
|
||||||
|
- VM (cubelinux-vm.qcow2, was pre-fix): rebuilt cube-server + cubefs-mount from
|
||||||
|
the fixed source; rewired cubefs.service to `--socket /run/cube/cube.sock`
|
||||||
|
with `Requires=cube-server.service`; fixed TWO real deployment bugs found only
|
||||||
|
because the new gate exercised the socket path:
|
||||||
|
(a) systemd ordering cycle (cube-server Wanted cubefs, cubefs Required
|
||||||
|
cube-server) — broke the cycle by dropping the cubefs dependency from
|
||||||
|
cube-server.service.
|
||||||
|
(b) `ExecStartPost chmod 666` raced the daemon's socket creation under the
|
||||||
|
restart loop and failed the unit — made it tolerant+delayed.
|
||||||
|
Proved a FUSE write survives a daemon restart (WAL persistence) on the VM.
|
||||||
|
Injected SSH key for cube+root to drive the VM. Snapshot `fixed-durable-20260813`
|
||||||
|
captures the working durable stack.
|
||||||
|
- `./check` mount stage hardened (commit da3aa3a): daemon-backed leg + durability
|
||||||
|
assertion; `run_fs_tests` is now backend-agnostic (self-seeds its fixture).
|
||||||
|
|
||||||
|
## NEXT STEPS (remaining, low priority)
|
||||||
|
1. Add a `--features mount` build to the VM IMAGE BUILD STEP (the run_vm / build
|
||||||
|
script) so a from-scratch image bake includes the FUSE adapter — the host
|
||||||
|
`./check` already covers it; only the image-provisioning script is behind.
|
||||||
|
2. Optionally surface `DaemonBackend::put` failures as FUSE EIO instead of
|
||||||
eprintln-only (best-effort today, acceptable).
|
eprintln-only (best-effort today, acceptable).
|
||||||
4. ~~Confirm the desktop "CUBE Shell" launcher execs `cubec`...~~ DONE 2026-08-13:
|
3. Visually launch the "CUBE Shell" desktop launcher to confirm end-to-end (file
|
||||||
`/usr/share/applications/cube.desktop` -> Exec `/opt/cube/bin/cube-term`, which
|
level already verified: cube-term -> cubec -> /run/cube/cube.sock).
|
||||||
exports `CUBE_SOCKET=/run/cube/cube.sock` and `exec /opt/cube/bin/cubec`. The
|
|
||||||
skill's #1 gotcha (must use `cubec`, not `cube repl`) is satisfied at the file
|
|
||||||
level (not visually launched, per user instruction to not block on viewability).
|
|
||||||
|
|
||||||
## COMPLETED THIS SESSION
|
|
||||||
- Fixed `DaemonBackend` envelope round-trip (commit 0300def) — was returning the
|
|
||||||
bare body instead of the full record envelope; the `--socket` mount could not
|
|
||||||
read back FUSE writes. Fixed by round-tripping the full envelope verbatim.
|
|
||||||
- Fixed `--features mount` compile break (commit 8f9e7e0) — `Czyx` field access.
|
|
||||||
- Enforced BOTH bugs via `./check daemon` (the two #[ignore]d integration tests
|
|
||||||
now run via --ignored and would fail if either regressed).
|
|
||||||
- Host: `./check` + `./check daemon` + `./check mount` all GREEN.
|
|
||||||
- VM (/var/lib/cubevm/cubelinux-vm.qcow2, was pre-fix): rebuilt cubefs-mount from
|
|
||||||
the fixed source, rewired cubefs.service to `--socket /run/cube/cube.sock` with
|
|
||||||
`Requires=cube-server.service`, and proved a FUSE write survives a daemon
|
|
||||||
restart (WAL persistence). Injected SSH key for cube+root to drive the VM.
|
|
||||||
./check also passes inside the VM (rustfmt+clippy components added).
|
|
||||||
|
|
||||||
## KEY FILES
|
## KEY FILES
|
||||||
- /home/CUBELinux/CUBELinux-2/cubesys/src/commands.rs (raw* commands + helpers)
|
- /home/CUBELinux/CUBELinux-2/cubesys/src/commands.rs (raw* commands + helpers)
|
||||||
|
|||||||
Reference in New Issue
Block a user