Skip to content

feat(fabric): isolate fixture client service and peer grants - #6281

Draft
schickling-assistant wants to merge 4 commits into
schickling-assistant/2026-11-10-fixture-local-onlyfrom
schickling-assistant/2026-11-10-fixture-fabric-service
Draft

schickling-assistant wants to merge 4 commits into
schickling-assistant/2026-11-10-fixture-local-onlyfrom
schickling-assistant/2026-11-10-fixture-fabric-service

Conversation

@schickling-assistant

@schickling-assistant schickling-assistant commented Nov 10, 2026 •

Copy link
Copy Markdown
Contributor

Problem

Fixture clients need an independent Fabric service without access to normal client services, privileged sockets or another instance store. A configurable path denylist is insufficient.

Goal

Expose only the fixture-derived paired client socket as client-control-fixture, preserve production st3-client-v0 and peers, and reject fixture state/store/socket path escapes before any database read.

Decisions

Reserve the exact fixture service and a separate inbound-only peer namespace. Preserve normal alias normalization. Rust and Node endpoints dial the exact fixture service. A shared fixture-path allowlist independently derives the reserved root and exact state/store/database/client-socket paths, refuses symlink aliases, and returns typed local-only-fixture-path-refused. Validate before identity acquisition, before bind, before store open, in generic store-location admission, and at exposure. Ordinary-instance paths remain configurable.

Verification

Source tests: kernel local-only/path/exposure policies; CLI allow/deny and pre-identity path refusal; Rust/Node exact-service endpoints. Ignored real-Fabric harness covers both allow paths, both cross-service denials and privileged socket non-reachability. All four release fragments PASS via scripts/release_notes.py validate() function (no validate CLI subcommand exists). Corrected kernel config:: check awaits shared build admission; other Rust/Node/browser checks NOT RUN yet. Real Fabric harness NOT RUN: no effectful daemon, peer or exposure authority. No real store was opened, modified or initialized by this work.

Complexity

Reuse existing exposure and grants; one shared reserved-path policy rather than socket/store denylists. No second protocol or generated schema edits.

Concerns

Exposure and every inbound-only peer addition still need separately reviewed scope before use. Native session-home work excluded. No held paths changed. Correction is a signed append-only commit atop 347e2db; latest head 8491d22. Stacked after #6279.

Friction & bottlenecks

Dependent PR construction required gh stack link; local checks are subject to shared build/disk admission. No runtime benchmark claim.

Follow-ups

All setup, apply, enrollment and live allow/deny readbacks remain pending their own gates.

References

See #6279 for local-only networking and #6275 for real-web routing.

Posted on behalf of @schickling
field value
agent_identity agent/dotfiles/fractal-product-lead
session 01a1b525
agent_persona generalist
agent_supervisor unavailable
agent_tool OMP
agent_tool_version 18.12.5
agent_runtime OMP 18.12.5
agent_model openai-codex/gpt-6.1-sol
worktree fractal/2026-11-10-client-control-fixture-source

agent-identity: agent/dotfiles/fractal-product-lead
agent-persona: generalist
agent-supervisor: unavailable
agent-tool: OMP
agent-tool-version: 18.12.5
agent-runtime: OMP 18.12.5
agent-model: openai-codex/gpt-6.1-sol
@schickling-assistant schickling-assistant changed the title schickling assistant/2026 11 10 fixture fabric service feat(fabric): isolate fixture client service and peer grants Nov 10, 2026
agent-identity: agent/dotfiles/fractal-product-lead
agent-persona: generalist
agent-supervisor: unavailable
agent-tool: OMP
agent-tool-version: 18.12.5
agent-runtime: OMP 18.12.5
agent-model: openai-codex/gpt-6.1-sol
@schickling-assistant

Copy link
Copy Markdown
Contributor Author

Signed append-only correction: 8491d22.

The previous socket denylist was insufficient, and generic explicit-store admission did not constrain the fixture root. Startup accepted state/store overrides before identity acquisition and before Config::validate; no fixture-specific override guard existed.

The shared fixture_paths module now derives the reserved root independently of configurable overrides, requires exact own state/store/database/client-socket paths, canonicalizes parents, and refuses symlink leaves/directories with typed local-only-fixture-path-refused. Checks run before identity effects, again before binding, before store opening, during generic store-location admission and at Fabric exposure. Ordinary-instance configurable paths are unchanged.

Temporary-only regressions cover default and other-instance privileged/client sockets, outside-root sockets, symlink aliases, other-instance stores, state-dir escape, and accepted own paths. No real store was opened or modified. Local kernel config tests are awaiting admitted execution; no pass claimed yet.

Posted on behalf of @schickling
field value
agent_identity agent/dotfiles/fractal-product-lead
session 01a1b525
agent_persona generalist
agent_supervisor unavailable
agent_tool OMP
agent_tool_version 18.12.5
agent_runtime OMP 18.12.5
agent_model openai-codex/gpt-6.1-sol
worktree fractal/2026-11-10-client-control-fixture-source

@schickling-assistant

Copy link
Copy Markdown
Contributor Author

Local verification receipt at 8491d22: gate-slot --lane build --max-wait 1800 -- nix develop --no-write-lock-file --command cargo test --locked -p fractal-kernel config:: exited 94 after 1800 seconds without admission. Result: NOT RUN, not a test failure and not a pass. Admission was fenced and later blocked by the host disk floor. No CI dispatched or rerun.

Remaining kernel fabric_gateway, peer local-only, API local-only/replication guards, Rust Fabric endpoint, CLI fixture/ordinary exposure and pre-open path regressions, Node Fabric endpoint tests and real-web Playwright routing proof: NOT RUN; no additional build pressure was started after admission failed. The opt-in real-Fabric harness is also NOT RUN because real exposure/peer operations are outside this assignment. All four release fragments passed the repository validate() function. Draft remains pending local checks and review.

Posted on behalf of @schickling
field value
agent_identity agent/dotfiles/fractal-product-lead
session 01a1b525
agent_persona generalist
agent_supervisor unavailable
agent_tool OMP
agent_tool_version 18.12.5
agent_runtime OMP 18.12.5
agent_model openai-codex/gpt-6.1-sol
worktree fractal/2026-11-10-client-control-fixture-source

agent-identity: agent/dotfiles/fractal-product-lead
agent-persona: generalist
agent-supervisor: unavailable
agent-tool: OMP
agent-tool-version: 18.12.5
agent-runtime: OMP 18.12.5
agent-model: openai-codex/gpt-6.1-sol
agent-identity: agent/dotfiles/fractal-product-lead
agent-persona: generalist
agent-supervisor: unavailable
agent-tool: OMP
agent-tool-version: 18.12.5
agent-runtime: OMP 18.12.5
agent-model: openai-codex/gpt-6.1-sol
@schickling-assistant

Copy link
Copy Markdown
Contributor Author

Signed append-only correction head bf860c1 pins the fixture to its dedicated Fabric node: home /fabric, control /fabric/run/control.sock. Every exposure, grant, revoke, status and events subprocess carries immutable FABRIC_HOME plus explicit --home and revalidates aliases before spawn. Ordinary Fabric defaults remain unchanged. Minimal crates/smallclaims changes are explicitly held for product-lead GO; this PR lands alone.

Pinned Fabric 19e7f896 citations: src/main.rs:37-38 declares global --home; :647 resolves it; crates/fabric-config/src/home.rs:21 gives explicit home precedence and :162-163 derives run/control.sock (no independent socket CLI flag). Source lifecycle recipe uses up --foreground / down / status --json only within a separately approved scope. No daemon or exposure operation ran. Exact-head Rust tests NOT RUN yet: the one prior #6279 dev5 admission ticket must settle before this PR receives its sequential ticket.

Posted on behalf of @schickling
field value
agent_identity agent/dotfiles/fractal-product-lead
session 01a1b525
agent_persona generalist
agent_supervisor unavailable
agent_tool OMP
agent_tool_version 18.12.5
agent_runtime OMP 18.12.5
agent_model openai-codex/gpt-6.1-sol
worktree fractal/2026-11-10-fixture-fabric-service

This branch has not been deployed

No deployments
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