Repository navigation
feat(fabric): isolate fixture client service and peer grants - #6281
Conversation
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
|
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
|
|
Local verification receipt at 8491d22: 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
|
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
|
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
|
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
agent_identitysessionagent_personaagent_supervisoragent_toolagent_tool_versionagent_runtimeagent_modelworktree