Skip to content

docs(#83): map the archive VFS backend slice onto the FileSystem seam - #453

Merged
helly25 merged 3 commits into
mainfrom
docs/83-vfs-backend-slice-map
Aug 11, 2026
Merged

docs(#83): map the archive VFS backend slice onto the FileSystem seam#453
helly25 merged 3 commits into
mainfrom
docs/83-vfs-backend-slice-map

Conversation

@helly25

@helly25 helly25 commented Aug 10, 2026

Copy link
Copy Markdown
Owner

Records what the next slice has to implement, now that both pieces it needs exist (archive_reader_cc for members, member_path_cc for the spelling), so it starts from a mapping rather than re-deriving one. The seam has nine methods, so the slice is bounded.

Points that are decisions rather than details:

  • ReadDir must synthesize implicit parent directories. Tar streams frequently omit explicit directory entries, so without this a walk finds nothing.
  • Stat resolves members only - the container keeps its real-filesystem identity (the dual-identity rule already recorded), so only member paths resolve through the backend.
  • read_only = true + Source::kArchiveMember on every member is what makes -delete and the exec family REFUSE members instead of silently skipping them.
  • Remove refuses (never silent success), Access is read/execute from the stored mode bits, ReadLink returns link_target, FsType is "archive", IsCaseSensitive is true.
  • ReadContent is the one gap: the reader lists members but does not extract data, so that slice returns Unimplemented (test-pinned) and the following one adds ReadMemberOfFile. Content predicates (-grep, -content, {hash}) light up then - deliberate ordering, not an oversight.
  • Notes that the walk supplies SplitMemberPath's container oracle for free: descending, it already knows which path is an openable archive.

Docs only.

Records what the next slice implements, now that both pieces it needs exist
(archive_reader_cc for members, member_path_cc for the spelling), so it starts
from a mapping rather than re-deriving one:

- ReadDir must accept both the container's own path and a member path, and MUST
  synthesize implicit parent directories - tar streams frequently omit explicit
  directory entries, so a walk would otherwise find nothing.
- Stat resolves members only; the container keeps its real-filesystem identity.
- read_only = true plus Source::kArchiveMember on every member is what makes
  -delete and the exec family REFUSE members rather than silently skip them.
- Remove refuses, Access is read/execute from stored mode bits, ReadLink returns
  link_target, FsType is "archive", IsCaseSensitive is true.
- ReadContent is the one gap: the reader lists but does not extract, so that
  slice returns Unimplemented (test-pinned) and the next adds ReadMemberOfFile.
  Content predicates light up then; the ordering is deliberate.
- Notes that the walk supplies SplitMemberPath's container oracle for free, since
  descending it already knows which path is an openable archive.
@helly25
helly25 enabled auto-merge (squash) August 10, 2026 23:37
@helly25
helly25 disabled auto-merge August 11, 2026 00:14
@helly25
helly25 enabled auto-merge (squash) August 11, 2026 00:15
@helly25
helly25 merged commit de1cc21 into main Aug 11, 2026
10 of 11 checks passed
@helly25
helly25 deleted the docs/83-vfs-backend-slice-map branch August 11, 2026 00:16
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant