Draft multiply indexed filesystem link graph - #10
Draft
isomorphisms wants to merge 34 commits into
Draft
isomorphisms wants to merge 34 commits into
isomorphisms wants to merge 34 commits into
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Purpose
Exercise the fragment/link/index storage idea entirely on the Grease side, with ordinary files and symlinks and no Idriç dependency, against the access shape described by IB PR #52.
Semantic boundary
This draft is testing four roles:
The current names
root-cellar/,fragments/,cauldron/,pensive/strands/,from/, andto/are prototype spellings, not an architecture or compatibility contract. A later representation may rename, collapse, or compile them while preserving the access semantics.Current prototype
links.tsvis the current durable logical graph: source fragment, relation, destination fragment.fromandtoenumerate those generated endpoint projections instead of rescanning the complete link table;links ROOTaccepts a batch of tab-separated edges and rebuilds once;indexes.tsvdescribes additional caller-defined projections;strandreads the logical link table once, follows one relation in memory, and writes the selected ordered fragment ids to stdout;rebuilddestroys and reconstructs generated projections from the durable tables.The replacement path also avoids plain
mv temporary existing-symlink-to-directory, which GNUmvinterprets as a directory destination rather than replacing the projection.IB-shaped exercise
tools/linkfs/ib-shape-acceptance.shuses:For the current literal projection layout the receipt observes 8,348 symlinks and 16,514 directories. It reports filesystem KiB and strand bytes without making runner-specific storage costs a pass/fail threshold.
Finding
The prototype now supports the important semantic split in IB #52:
It does not establish that literal directory/symlink projections belong on the Android reader hot path. The inode/path amplification is already large at the 4,096-fragment shape, and the current newline strand does not yet prove a final mmap format or constant-time positional range lookup. Compact source/destination adjacency and an indexed/range-readable strand representation remain separate implementation work.
Keep this PR draft while those boundaries are being measured; do not promote the present directory vocabulary into permanent IB architecture.
Acceptance
The workflow runs two receipts:
tools/linkfs/acceptance.shfor small correctness, rebuild, replacement, and non-destructive initialization;tools/linkfs/ib-shape-acceptance.shfor the IB-sized topology and strand hot-path boundary.Both pass on the current PR head. The workflow does not bootstrap or checkout Idriç.