Skip to content

fix(storage): encode semantic routes into portable components - #1188

Merged
DecisionNerd merged 9 commits into
mainfrom
fix/976-portable-route-components
Sep 9, 2026
Merged

DecisionNerd merged 9 commits into
mainfrom
fix/976-portable-route-components

Conversation

@DecisionNerd

@DecisionNerd DecisionNerd commented Sep 9, 2026 •

Copy link
Copy Markdown
Contributor

Description

Valid semantic routes such as CON, AUX, punctuation, trailing dots, and Unicode variants could become filesystem names that fail on another supported host. Encode route components as fixed-length lowercase digests and retain exact UTF-8 names in an authenticated reverse table. Public graph semantics remain unchanged.

Closes #976.

Changes

  • Apply mapped routes to topology, properties, construction, rewrites, publication, and portable transport. Expanded layouts 1/3 and compact layouts 2/4 distinguish legacy and mapped representations explicitly.
  • Migrate authenticated legacy inputs in private workspaces through durable moves. Preserve immutable published trees, CAS objects, exact inventories, and typed refusals.
  • Bind readers and adjacency providers to admitted inventories; retain old lazy streams and private indexes across writes while refreshing subsequent queries.
  • Correct Windows handle lifetimes for UUID publication and authenticated import cleanup, use writable durability handles, and admit complete canonical roots before inspecting path components. Identity checks and no-follow checks remain in place.
  • Exercise mapped full export/verify/import/reopen, projected export/verify with its existing typed import refusal, legacy recovery, and adversarial routes in the existing Windows/macOS lanes.
  • Update the benchmark dependency lock and ownership-growth evidence for path-hash radix inventories, whose physical node counts can vary while logical files remain constant. Preserve positivity, upper bounds, byte slopes, and complete owner reconciliation.

Validation

  • On the refreshed tree, all four mapped API lifecycle tests pass; formatting, make pre-push-fast, and make gate-registry-check pass. Rebase range-diff confirms all nine feature patches are unchanged atop main's merged list extraction.
  • Focused canonical-source and nested authenticated-cleanup regressions pass, as do strict storage Clippy checks. Independent review verified the four cleanup handle lifetimes and their callers.
  • Retained native validation includes API/exec/storage unit tests, 48 catalog tests, 25 persistent-adjacency tests, legacy recovery, retained-stream/planner tests, construction crash retries, 29 ordinary ladder tests, and the complete fixed-hop suite (17 active tests; existing release-only ignores unchanged).
  • Full local make pre-push is not reported green: the feature run stopped linking host-selected Python 3.14. The separately configured main-based run reaches the unchanged storage fixture that explicitly uses this host's tmpfs /tmp and is rejected by native filesystem admission; test(storage): respect native TMPDIR in socket inventory regression #1192 tracks that fixture defect. No admission bypass, mount change, or test skip was used.
  • Hosted CI at 80220675 passed all 99 Bazel targets and non-Windows lanes. At 852f8691, the complete Windows lane—including mapped portable round trips—passed. The refreshed exact-head gate remains required before merge.

Compatibility and review focus

Mapped layouts require readers supporting versions 3/4; older readers reject them. Existing raw layouts retain explicit legacy handling. Mapping admission is bounded to 64 MiB and 100,000 routes and never normalizes semantic identifiers. Review mapping transactions, retained inventory lifetimes, and legacy private-copy boundaries together: these consumers jointly provide the required end-to-end round trip.

@coderabbitai

coderabbitai Bot commented Sep 9, 2026 •

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Advanced

Run ID: c35f0d9a-179c-41e9-8161-6bc7d486ee6d

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Warning

Billing warning: we have not been able to collect payment for this subscription for more than 72 hours. Please update the payment method or pay any pending invoices in Billing to avoid service interruption.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions github-actions Bot added executor Changes to query executor core Core source code changes testing Test coverage and testing infrastructure documentation Improvements or additions to documentation ci-cd CI/CD configuration changes labels Sep 9, 2026
@blacksmith-sh

This comment has been minimized.

@DecisionNerd
DecisionNerd force-pushed the fix/976-portable-route-components branch from 852f869 to d5ccd48 Compare September 9, 2026 20:52
@DecisionNerd
DecisionNerd merged commit 9df4633 into main Sep 9, 2026
23 checks passed
@DecisionNerd
DecisionNerd deleted the fix/976-portable-route-components branch September 9, 2026 21:18
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ci-cd CI/CD configuration changes core Core source code changes documentation Improvements or additions to documentation executor Changes to query executor testing Test coverage and testing infrastructure tooling Developer tooling and automation

Projects

None yet

Development

Successfully merging this pull request may close these issues.

fix(storage): encode semantic property routes into portable filenames

2 participants