Route filesystem and Git mounts through logical-v1 - #874
Conversation
|
Final stacked qualification is complete for Tensorlake 0.5.89 at cc9d17c. Both tl fs mount and tl git mount now route through the shared private logical-v1/Fjall engine. Git mount remains supported; only the former mount implementation is removed. The Git-specific boundary is limited to immutable base resolution and checkpoint/commit publication. All current CI is green: sandbox integration, Rust full-feature workspace, private filesystem engine, macOS FSKit source contract, Windows smoke, lint, TypeScript integration/unit, CodeQL, and Linux/macOS/Windows package builds. Exact live qualification passed on macOS FSKit and a fresh root-owned Tensorlake Linux FUSE sandbox. Linux writable passthrough achieved 1,018.68 MiB/s versus 1,083.24 MiB/s rootfs with zero payload WRITE requests through userspace FUSE. macOS background Git mount survived its invoking shell and converged accepted/durable/published to 65/65/65 in one publication attempt. Dependency and rollout: tensorlakeai/artifact_storage#173 must merge and its server routes must deploy first. Merge and distribute this client only after that deployment fence is satisfied. |
|
Stacked source update: both private-source CI jobs now pin Artifact Storage |
|
CI follow-up: the first Rust full-feature run exposed one load-sensitive timing assertion ( |
b74775c to
d631845
Compare
These were removed in #874 as collateral of the logical-v1 migration, whose message records them as depending on the deleted mount implementation. The server endpoints and the cloud-sdk client methods survived intact, so this is client wiring only — and the published docs never stopped describing all three. `--ro` conflicts with `--publish` and `--workspace`, since a read-only view owns no workspace to select or publish. `tl git log <repo>` and `tl git smartlog <repo>` take either a mount path or a bare repository name. A repository name very often also names a directory in the cwd — a clone of that same repository is the usual case — so a path that resolves but is not an attached mount now falls back to the repository-name form instead of telling the user to mount their clone. That ambiguity broke the documented invocation before. Needs artifact_storage#227: `gsvc_fs_client::mount_repo` takes a new argument. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Client half of **artifact_storage#227**. Merge that first — `gsvc_fs_client::mount_repo` takes a new argument. ## What and why `tl git mount --ro`, `tl git log`, and `tl git smartlog` were removed in #874 as collateral of the logical-v1 migration; that PR's own message records them as "removes old Git log/smartlog … routes that depended on the deleted mount implementation." It wasn't a product decision — the server endpoints (`/workspaces/{id}/log`, `/smartlog`, project smartlog) and the cloud-sdk client methods survived untouched, and the published docs never stopped describing all three. Only the client wiring was gone. Found by running `docs.tensorlake.ai/git/*` against the shipped CLI: every documented invocation of these three failed. ## Notes for review - `--ro` conflicts with `--publish` and `--workspace` — a read-only view owns no workspace to select or publish. Enforced in clap and again server-side. - `tl git log <repo>` / `tl git smartlog <repo>` accept a mount path **or** a bare repository name. A repository name very often also names a directory in the cwd — a clone of that same repo is the usual case — and the old code treated any existing directory as a mount path, so the documented `tl git log <repo>` form failed with "is not an attached tl mount" whenever you ran it next to your clone. A path that resolves but is not an attached mount now falls back to the repository-name form. - The parse test asserting these three no longer exist is replaced with tests asserting they do, plus the `--ro` conflict cases. The `tl fs mount --ro` rejection stays: read-only views are a repository concept, and `tl fs` is the shared writable surface. ## Verification `just test-cli-full` green (17 suites, 0 failures) against artifact_storage#227. Live against prod: all three `--ro` forms (branch tip, pinned commit, subtree) mount; reads work; `create`/`unlink`/`mkdir`/`rename` all return `Read-only file system`; `tl git workspaces` confirms no workspace is created; snapshot/promote/rebase refuse with a message naming the verb actually run. `tl git log` and `smartlog` verified in mount-path, repo-name, `--project`, and `--json` forms. 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
What changed
tl fs mountandtl git mountthrough the strict logical-v1/Fjall engine supplied by the private source-swap buildtl sbx exec <sandbox> -- tl fs mount ...andtl sbx exec <sandbox> -- tl git mount ...to promote the foreground mount daemon into a sandbox-owned process unit, avoiding cgroup reaping0.5.91Dependency and rollout
Depends on tensorlakeai/artifact_storage#173 and pins the private source swap to artifact commit
c77631e7247159516e99bbaf3e68900b2ea86eae.Deploy the Artifact Storage server from #173 first. The new client requires generation-one checkpoint object-index sidecars, logical-v1 publication endpoints, and the exact repository-scoped Git blob route for fresh Git workspace reattachment.
This intentionally does not migrate or interpret old local mount state. The private engine rejects unmarked and legacy state because the old implementation has been deleted.
Validation
main(5ec242e0de471826c189a01ffb10a80f86bcaeb0)just test-cli-full: 229/229 private filesystem-client tests, 174/174 SDK unit tests (plus integration targets), 223/223 CLI library tests, 223/223 CLI binary tests, offline status integration test, and doctestsmake test-server-check,make test-macos-fskit-check,make test-macos-fskit-regressions,make test-linux-fuse-check, logical-v1 phase-0, property, crash, concurrent-crash, publication, scheduler, remote Git, activation, and deletion suitesWRITErequests, create p95 0.513 ms, rename p95 0.187 ms, and 4,238 mutations/sThe mandatory Envoy history was not refreshed for this mount-only stack at the user's explicit direction.