Skip to content

spaced: split pplx-space-spaced-common into spaced-protocol and spaced-client - #1703

Merged
ac-pplx merged 1 commit into
ac/cc-hostfrom
ac/spaced-common-split
Nov 13, 2026
Merged

ac-pplx merged 1 commit into
ac/cc-hostfrom
ac/spaced-common-split

Conversation

@ac-pplx

@ac-pplx ac-pplx commented Nov 7, 2026 •

Copy link
Copy Markdown
Contributor

Summary

Splits pplx-space-spaced-common into its two halves, so neither needs a
baseline exception:

  • pplx-space-spaced-protocol (crates/l20_domain/spaced/protocol): the
    host, guest, bridge-host, host-control and activity protos, the
    guest-compatibility rules (SUPPORTED_SPACED_GUEST_VERSIONS), and the guest
    operation allowlist.
  • pplx-space-spaced-client (crates/l40_api/spaced/client): the UDS, vsock
    and Firecracker connectors, the UDS and vsock listeners, LazyClient, the
    retry policy and spaced_client_config!. All of its users are l40_api
    crates or tools, so it is a client they may all depend on.

The old crate re-exported items from pplx-space-spaced-guest-protocol
(proto::bridge_guest, proto::operations, the validators, the wire helpers,
the vsock ports); callers now import them from that crate. Only moves and
import rewrites otherwise. Generated code and proto packages are unchanged:
sbx-mgr-protocol's extern_path now names spaced-guest-protocol's
operations module, which the old path re-exported.

Removes the [layers.domain_dependencies] and [layers.model_protocol]
baseline entries for spaced-common, and its [crate_names] entry.

The retry loop's two debug events change log target from
pplx_space_spaced_common::retry_policy to
pplx_space_spaced_client::retry_policy.

ci/kind-pull-paths.txt selected the transport for the Kind smoke through crates/l20_domain/spaced/**. It now
also lists crates/l40_api/spaced/client/**, and ci/scripts/test-kind-pull-needed.sh checks that a change in either
new crate selects Kind. scripts/move_crates.toml drops the deleted crate's row, as it did for earlier deleted crates.

Validation

  • ci/scripts/test-kind-pull-needed.sh passes. Its new client case fails without the new path entry.

  • cargo fmt --check, cargo check --workspace --all-targets, clippy on
    the touched crates, ci/scripts/run-rust-checks.sh clippy and
    isolated-crates, and ci/scripts/run-archcheck.sh against the base
    (no required findings).

  • run-rust-checks.sh tests-unprivileged: every failure is a privileged
    guest-process or node path test that also fails without this change on a
    host without those privileges.

  • The generated code for the moved protos is byte-identical to the base's;
    sbx-mgr-protocol's differs only in the extern path's crate prefix.

  • Not run: a Kind smoke.

Severity and risk

Severity: does not apply (restructuring). Risk: build-only. Code that imports
pplx_space_spaced_common must switch to the new crates; nothing changes at
run time beyond the two log targets above. Roll back by reverting.

AI assistance: Claude Code made the moves, rewrote the imports, and drafted
this description.

@coderabbitai

coderabbitai Bot commented Nov 7, 2026 •

Copy link
Copy Markdown

Explain Change →

Automatic approval withheld

Automatic approval is disabled by the configured approval policy for this pull request. Review comments and requests for changes continue normally.

Commit: 56f3b805038e.

No actionable comments were generated in the recent review.

Walkthrough

The pull request removes spaced-common and distributes its protocol, guest-protocol, transport, and retry APIs across dedicated crates. It adds public APIs to spaced-protocol and spaced-client, then updates workspace declarations, dependencies, consumers, tests, CI paths, and documentation. The summaries report that existing request flows, validation, connection behavior, and test assertions remain unchanged in the migrated call sites.

Merge Risk: Minimal · up to 56f3b

This is a mechanical crate split with updated imports and CI paths. No concrete defect was found, and runtime behavior is reported unchanged apart from two log targets.

Security architecture risk: Low · up to 56f3b

The split preserves the inspected capability checks, transport controls and retry behavior. No introduced security weakness was substantiated. Remaining risk is the integration of renamed dependencies across several consumers; builds and deployment behavior were not independently validated.

Retained concerns
No architecture-level concerns identified.

Security review details

Security Blast Radius

  • inferred — A regression in the relocated shared transport could affect multiple sandbox-facing consumers, including host/guest communication and gateway host-control access. The inspected changes do not substantiate increased tenant reachability or privilege; they preserve existing calls to the moved implementations.

Trust Boundaries and Controls

  • observed — The candidate path from guest-controlled platform metadata to privileged guest operations retains its existing admission controls. Parsing checks the expected operating system and descriptor bound; host filtering rejects unknown or image-disallowed operation claims before authorization. Reading and comparing the complete allowlist resolved the supplied proof gap without substantiating a new bypass.

Resilience and Maintainability Implications

  • observed — Connection recovery retains generation-fenced invalidation, and newly constructed operation clients receive fresh capability-observation cells tied to their channels. The unchanged retry loop invokes failure invalidation before exhausting its retry allowance. The host wrapper still distinguishes replay-safe calls from single-dispatch operations, preserving existing failure-containment behavior rather than adding replay authority.
Pre-merge checks: Passed 6

Check name Status Explanation
Title check Passed The title names the crate split, which is the main change. It follows the area-prefix pattern with a lowercase area and colon ('spaced:'). The summary starts with a lowercase verb and includes no trai…
Description Follows The Pr Template Passed The PR description contains all four required items. Each has real content. 1. ## Summary: Present. It says the change splits pplx-space-spaced-common into pplx-space-spaced-protocol and `pplx…
Bug Fixes Name A Regression Test Passed The check applies only when the PR fixes a defect in application behavior under crates/, shim/, or ui/. PR #1703 is a crate split, not a bug fix. The PR description says "Severity: does not apply (res…
Weakened Safeguards Are Justified Passed The PR does not remove, disable, narrow, or weaken a test, assertion, lint, CI guard, or repository guard without an equivalent replacement. Evidence from the base..head diff: - Retry tests: The t…
Agent Tooling Runs No New Commands Passed The check fails only if this PR adds or changes agent-executed content: plugin hooks, MCP/LSP entries, SKILL.md keys other than name/description, inline shell substitutions (!cmd), or other content …
Public-Safe Content Passed Checked the PR diff range (128 changed files, 862 added lines) and the PR title and description for public-safety issues. Scans for private key blocks, AWS key IDs, ARNs, GitHub/Slack token formats, p…
Full details: Title check

Explanation

The title names the crate split, which is the main change. It follows the area-prefix pattern with a lowercase area and colon ('spaced:'). The summary starts with a lowercase verb and includes no trailing period, ticket ID, or link. The title does not name the new crate paths or the Kind CI change, which are secondary details.

Full details: Description Follows The Pr Template

Explanation

The PR description contains all four required items. Each has real content. 1. ## Summary: Present. It says the change splits pplx-space-spaced-common into pplx-space-spaced-protocol and pplx-space-spaced-client. It lists what each new crate holds and what callers must change. 2. ## Validation: Present. It names the checks run and their results. These include ci/scripts/test-kind-pull-needed.sh (passes), cargo fmt --check, cargo check, clippy, the isolated-crate and archcheck scripts, and run-rust-checks.sh tests-unprivileged. It also states that a Kind smoke was not run. 3. ## Severity and risk: Present. It gives "Severity: does not apply (restructuring)" and "Risk: build-only", with a rollback note. 4. AI assistance line: Present. The line begins "AI assistance:" and names the tool and its work: "Claude Code made the moves, rewrote the imports, and drafted this description." The check judges presence only. The description meets the template requirements, so the check passes. The description content was assessed as given. No code evidence was needed for this check.

Full details: Bug Fixes Name A Regression Test

Explanation

The check applies only when the PR fixes a defect in application behavior under crates/, shim/, or ui/. PR #1703 is a crate split, not a bug fix. The PR description says "Severity: does not apply (restructuring). Risk: build-only." The changed-file inventory shows moves (R100/R094 renames) and import rewrites across many crates. The retry-policy and status-classification code is moved with identical bodies: status_is_retryable appears as a removal in crates/l20_domain/spaced/common/src/lib.rs and an addition with the same logic in crates/l40_api/spaced/client/src/lib.rs. The only behavior-adjacent edit the author lists is the change of two debug-event log targets, which is not a defect fix. The new tests in crates/l40_api/spaced/client/src/tests.rs cover moved logic, and the Kind-selection regression case is in CI scripts, not application code. Because the PR is not an application bug fix, the check does not apply.

Full details: Weakened Safeguards Are Justified

Explanation

The PR does not remove, disable, narrow, or weaken a test, assertion, lint, CI guard, or repository guard without an equivalent replacement. Evidence from the base..head diff: - Retry tests: The two #[test] functions in the base spaced-common crate (src/tests.rs) are replaced by crates/l40_api/spaced/client/src/tests.rs. That file keeps the same status_is_retryable assertions for UNAVAILABLE, UNKNOWN, DEADLINE_EXCEEDED, and INVALID_ARGUMENT. It also keeps the REQUEST_REFUSED case and the unmarked-UNAVAILABLE case. - Port assertion: assert_eq!(port, ...BRIDGE_GUEST_VSOCK_PORT) in host/server/src/run/tests.rs is kept. Only the constant's crate path changes, to pplx_space_spaced_guest_protocol. - .expect("test version is valid SemVer"): Kept in tests/support/mock_bridge_guest.rs. It moved to the new crate path and is otherwise unchanged. - ci/kind-pull-paths.txt: Only one path is added (crates/l40_api/spaced/client/**). No path is removed. - ci/scripts/test-kind-pull-needed.sh: Two assert_needed true lines are added. No assertion is removed. - ARCHITECTURE.toml and architecture-baseline.toml: spaced-common is removed from the mixed-crate list, the [layers.domain_dependencies] and [layers.model_protocol] exception entries, and [crate_names]. No entry is added. These edits tighten the baseline. The comment edits do not mention reviews, merge risk, or approvals. - AGENTS.md and CLAUDE.md: Only the crate name and path references change. No rule is loosened, and no review-guidance text is added. - No changes to .github/workflows, deny.toml, clippy.toml, .config/nextest.toml, [lints] tables, continue-on-error, or SPACE_TEST_DEPS_OPTIONAL. One residual item: #![allow(clippy::large_enum_variant)] on the bridge_host proto module has no reason attribute. The base has the identical line in spaced/common/src/lib.rs (line 28). The head has it in spaced/protocol/src/lib.rs (line 25). Git shows this as a delete and add only because the file was split. It is a verbatim relocation, not a new or broader suppression, so it does not weaken a safeguard. A strict reading of "adds #[allow] to non-test Rust code" could still flag it. The check's own wording does not require a reason for this case.

Full details: Agent Tooling Runs No New Commands

Explanation

The check fails only if this PR adds or changes agent-executed content: plugin hooks, MCP/LSP entries, SKILL.md keys other than name/description, inline shell substitutions (!cmd), or other content agent tools run. Evidence: - The changed-file list (git diff --name-status between the review base and head) has no plugin manifests (plugin.json, plugin.yaml), no SKILL.md files, no command files, no hooks, and no MCP or LSP configs. The existing .agents/plugins/pplx-space/** and .claude/skills/** files are not in the diff. - The only agent-guideline files touched are crates/l20_domain/spaced/protocol/AGENTS.md (heading rename, 1 line), crates/l20_domain/spaced/protocol/CLAUDE.md (pure rename, 100% similarity, no content change), and crates/l40_api/spaced/AGENTS.md (two path references updated). All changed lines are plain prose. Nothing adds an executable substitution, hook, or server entry. - A search of all added diff lines for ! followed by a backtick, allowed-tools, hooks:, mcpServers, lspServers, or a "command" key found no matches. The backtick and $( hits were Rust macro code (spaced_client_config!) and prose, which the check excludes. Other changes (Rust crates, Cargo manifests, CI scripts, TOML baselines, docs) are not agent plugin or skill content in the sense the check defines. The check does not fail on them.

Full details: Public-Safe Content

Explanation

Checked the PR diff range (128 changed files, 862 added lines) and the PR title and description for public-safety issues. Scans for private key blocks, AWS key IDs, ARNs, GitHub/Slack token formats, password/secret/token assignments, absolute personal paths (/Users/, /home/<name>), IP addresses, internal hostnames, internal tracker or chat links, and 12-digit account-ID-like numbers found no matches. The only "credential" hits are the existing crate name pplx-space-credential-injection, which is a package name and not a secret. The PR description contains no URLs and no production data, incident details, or security vulnerability text. The change is a crate split, with a CI path-list and test-script update.

Recent review info

Automatic approval policy

Commit: 56f3b805038e.

Setting Effective value Source
Automatic approvals Disabled Override 3
Merge risk Moderate Global configuration
Security risk Not set Global configuration

Matching overrides (numbered as in the resolved configuration):

  • Override 3 — any author; paths: .coderabbit.yaml, .coderabbit.yml, coderabbit.yaml, coderabbit.yml, .coderabbit.config.ts, .claude/settings*.json, **/.mcp.json, **/hooks.json, .agents/plugins/**/hooks/**, .agents/plugins/**/scripts/**, .agents/plugins/**/commands/**, .agents/plugins/**/agents/**, **/skills/**/hooks/**, **/skills/**/scripts/**, **/skills/**/commands/**, **/skills/**/agents/**, .claude/commands/**, .claude/agents/**, **/marketplace.json, .github/**, ci/**, !ci/scripts/setup-nextest-*.sh, scripts/source_guards/**, scripts/check*, clippy.toml, deny.toml, .gitleaks.toml, .pre-commit-config.yaml, lefthook.yaml, rust-toolchain.toml, .cargo/**, supply-chain/**, pyproject.toml, uv.lock, **/package.json, **/package-lock.json, **/go.mod, **/go.sum, **/requirements*.txt, **/requirements*.in, proto/**, db/**, docs/versioning.md, crates/l40_api/api/src/auth.rs, crates/l40_api/api/src/auth/**, crates/l40_api/api/src/middleware/auth*, crates/l40_api/api/src/middleware/auth/**, crates/l40_api/api/src/routes/authz.rs, crates/l10_foundation/bearer/**, crates/l10_foundation/rustls/**, crates/l10_foundation/guest/**, crates/l10_foundation/pii/**, shim/**, docker/**, !docker/Dockerfile.rust-build-kind, templates/**, infra/space/aws/**, infra/space/cluster/**, infra/space/identity/**, infra/space/observability/**, infra/space/packer/**, infra/space/kind/charts/**, LICENSE, SECURITY.md; automatic approvals: disabled.

Any matching disabled override withholds approval, regardless of risk. Otherwise, the strictest explicitly set limit wins for each score. Limits omitted by all matching overrides inherit the global configuration.

Not set means no limit was configured after inheritance. Use @coderabbitai configuration to inspect the resolved settings and their sources.

Run configuration

Commits

Reviewing files that changed from the base of the PR and between bed35b3 and 56f3b80.

Files ignored due to path filters: 1

  • Cargo.lock is excluded by !**/*.lock, !**/Cargo.lock
Files selected for processing: 127

  • ARCHITECTURE.toml
  • Cargo.toml
  • architecture-baseline.toml
  • ci/kind-pull-paths.txt
  • ci/scripts/test-kind-pull-needed.sh
  • crates/l20_domain/sbx/mgr/protocol/Cargo.toml
  • crates/l20_domain/sbx/mgr/protocol/build.rs
  • crates/l20_domain/sbx/mgr/protocol/src/lib.rs
  • crates/l20_domain/spaced/common/src/lib.rs
  • crates/l20_domain/spaced/guest/protocol/README.md
  • crates/l20_domain/spaced/guest/protocol/src/lib.rs
  • crates/l20_domain/spaced/protocol/AGENTS.md
  • crates/l20_domain/spaced/protocol/CLAUDE.md
  • crates/l20_domain/spaced/protocol/Cargo.toml
  • crates/l20_domain/spaced/protocol/build.rs
  • crates/l20_domain/spaced/protocol/src/compatibility.rs
  • crates/l20_domain/spaced/protocol/src/compatibility/tests.rs
  • crates/l20_domain/spaced/protocol/src/lib.rs
  • crates/l20_domain/spaced/protocol/src/tests.rs
  • crates/l40_api/build/mgr/engine/Cargo.toml
  • crates/l40_api/build/mgr/engine/src/lib.rs
  • crates/l40_api/net/gateway/server/Cargo.toml
  • crates/l40_api/net/gateway/server/src/certificates/authority.rs
  • crates/l40_api/net/gateway/server/src/certificates/authority/tests.rs
  • crates/l40_api/net/gateway/server/src/state/source.rs
  • crates/l40_api/sbx/mgr/server/Cargo.toml
  • crates/l40_api/sbx/mgr/server/src/run.rs
  • crates/l40_api/sbx/mgr/server/src/service/activation_support.rs
  • crates/l40_api/sbx/mgr/server/src/service/activation_support/tests/interception_recovery.rs
  • crates/l40_api/sbx/mgr/server/src/service/gateway_authority.rs
  • crates/l40_api/sbx/mgr/server/src/service/grpc_core/create_after_lookup_tests.rs
  • crates/l40_api/sbx/mgr/server/src/service/grpc_pool_wait_clone/tests.rs
  • crates/l40_api/sbx/mgr/server/src/service/grpc_spaced_files.rs
  • crates/l40_api/sbx/mgr/server/src/service/grpc_spaced_process_snapshots.rs
  • crates/l40_api/sbx/mgr/server/src/service/guest_update.rs
  • crates/l40_api/sbx/mgr/server/src/service/guest_update/automatic.rs
  • crates/l40_api/sbx/mgr/server/src/service/guest_update/observation.rs
  • crates/l40_api/sbx/mgr/server/src/service/guest_update/policy.rs
  • crates/l40_api/sbx/mgr/server/src/service/host_control/tests.rs
  • crates/l40_api/sbx/mgr/server/src/service/mod.rs
  • crates/l40_api/sbx/mgr/server/src/service/network_runtime.rs
  • crates/l40_api/sbx/mgr/server/src/service/spaced_bridge.rs
  • crates/l40_api/sbx/mgr/server/src/service/start/tests.rs
  • crates/l40_api/sbx/mgr/server/src/service/tests.rs
  • crates/l40_api/sbx/mgr/server/src/service/validation.rs
  • crates/l40_api/sbx/mgr/server/src/vm_diagnostics/guest.rs
  • crates/l40_api/sbx/mgr/server/src/watchdog.rs
  • crates/l40_api/sbx/mgr/server/src/watchdog/diagnostics.rs
  • crates/l40_api/spaced/AGENTS.md
  • crates/l40_api/spaced/client/Cargo.toml
  • crates/l40_api/spaced/client/examples/windows_operations.rs
  • crates/l40_api/spaced/client/examples/windows_readiness.rs
  • crates/l40_api/spaced/client/src/error.rs
  • crates/l40_api/spaced/client/src/lazy_client.rs
  • crates/l40_api/spaced/client/src/lazy_client/tests.rs
  • crates/l40_api/spaced/client/src/lib.rs
  • crates/l40_api/spaced/client/src/retry_policy.rs
  • crates/l40_api/spaced/client/src/retry_policy/tests.rs
  • crates/l40_api/spaced/client/src/server.rs
  • crates/l40_api/spaced/client/src/tests.rs
  • crates/l40_api/spaced/client/src/uds.rs
  • crates/l40_api/spaced/client/src/uds/tests.rs
  • crates/l40_api/spaced/client/src/vsock.rs
  • crates/l40_api/spaced/client/src/vsock/tests.rs
  • crates/l40_api/spaced/guest/client/Cargo.toml
  • crates/l40_api/spaced/guest/client/src/config.rs
  • crates/l40_api/spaced/guest/client/src/lib.rs
  • crates/l40_api/spaced/guest/execution/README.md
  • crates/l40_api/spaced/guest/server/Cargo.toml
  • crates/l40_api/spaced/guest/server/src/maintenance/tests.rs
  • crates/l40_api/spaced/guest/server/src/platform/unix/meta.rs
  • crates/l40_api/spaced/guest/server/src/platform/unix/mod.rs
  • crates/l40_api/spaced/guest/server/src/platform/unix/networking.rs
  • crates/l40_api/spaced/guest/server/src/platform/unix/port_forward/mod.rs
  • crates/l40_api/spaced/guest/server/src/platform/unix/tests.rs
  • crates/l40_api/spaced/guest/server/src/platform/unix/update_backend.rs
  • crates/l40_api/spaced/guest/server/tests/it/filesystem.rs
  • crates/l40_api/spaced/guest/server/tests/it/meta.rs
  • crates/l40_api/spaced/guest/server/tests/it/process.rs
  • crates/l40_api/spaced/guest/server/tests/support/guest_meta.rs
  • crates/l40_api/spaced/guest/server/tests/support/guest_service.rs
  • crates/l40_api/spaced/guest/server/tests/support/process_events.rs
  • crates/l40_api/spaced/guest/server/tests/worker_subprocess.rs
  • crates/l40_api/spaced/guest/server/tests/worker_telemetry/linux.rs
  • crates/l40_api/spaced/host/client/Cargo.toml
  • crates/l40_api/spaced/host/client/src/config.rs
  • crates/l40_api/spaced/host/client/src/file_watch.rs
  • crates/l40_api/spaced/host/client/src/filesystem.rs
  • crates/l40_api/spaced/host/client/src/lib.rs
  • crates/l40_api/spaced/host/client/src/meta.rs
  • crates/l40_api/spaced/host/client/src/networking.rs
  • crates/l40_api/spaced/host/client/src/process.rs
  • crates/l40_api/spaced/host/server/Cargo.toml
  • crates/l40_api/spaced/host/server/src/bridge.rs
  • crates/l40_api/spaced/host/server/src/bridge/tests.rs
  • crates/l40_api/spaced/host/server/src/compat.rs
  • crates/l40_api/spaced/host/server/src/filesystem.rs
  • crates/l40_api/spaced/host/server/src/filesystem/tests.rs
  • crates/l40_api/spaced/host/server/src/filesystem/write_relay.rs
  • crates/l40_api/spaced/host/server/src/filesystem/write_relay/tests.rs
  • crates/l40_api/spaced/host/server/src/guest_connection.rs
  • crates/l40_api/spaced/host/server/src/guest_connection/tests.rs
  • crates/l40_api/spaced/host/server/src/lib.rs
  • crates/l40_api/spaced/host/server/src/meta.rs
  • crates/l40_api/spaced/host/server/src/networking.rs
  • crates/l40_api/spaced/host/server/src/process.rs
  • crates/l40_api/spaced/host/server/src/process/tests.rs
  • crates/l40_api/spaced/host/server/src/protocol.rs
  • crates/l40_api/spaced/host/server/src/protocol/tests.rs
  • crates/l40_api/spaced/host/server/src/run.rs
  • crates/l40_api/spaced/host/server/src/run/tests.rs
  • crates/l40_api/spaced/host/server/src/update.rs
  • crates/l40_api/spaced/host/server/tests/it/filesystem.rs
  • crates/l40_api/spaced/host/server/tests/it/meta.rs
  • crates/l40_api/spaced/host/server/tests/it/process.rs
  • crates/l40_api/spaced/host/server/tests/support/bridge_host.rs
  • crates/l40_api/spaced/host/server/tests/support/mock_bridge_guest.rs
  • crates/l50_app/sbx/mgr/cli/Cargo.toml
  • crates/l50_app/sbx/mgr/cli/src/dispatch/guest_update.rs
  • crates/tools/archcheck/README.md
  • crates/tools/net/gateway/bench/Cargo.toml
  • crates/tools/net/gateway/bench/src/traffic_control.rs
  • crates/tools/spaced/loopback/test/Cargo.toml
  • crates/tools/spaced/loopback/test/src/main.rs
  • docs/versioning.md
  • scripts/move_crates.toml
  • templates/firecracker/seed/README.md
Files with no reviewable changes: 15

  • architecture-baseline.toml
  • crates/l20_domain/spaced/common/src/lib.rs
  • crates/l20_domain/spaced/protocol/CLAUDE.md
  • crates/l20_domain/spaced/protocol/build.rs
  • crates/l20_domain/spaced/protocol/src/compatibility.rs
  • crates/l20_domain/spaced/protocol/src/compatibility/tests.rs
  • crates/l40_api/spaced/client/src/error.rs
  • crates/l40_api/spaced/client/src/lazy_client.rs
  • crates/l40_api/spaced/client/src/lazy_client/tests.rs
  • crates/l40_api/spaced/client/src/retry_policy.rs
  • crates/l40_api/spaced/client/src/retry_policy/tests.rs
  • crates/l40_api/spaced/client/src/server.rs
  • crates/l40_api/spaced/client/src/uds.rs
  • crates/l40_api/spaced/client/src/uds/tests.rs
  • crates/l40_api/spaced/client/src/vsock.rs
Files skipped from review as they are similar to previous changes: 10

  • ARCHITECTURE.toml
  • ci/kind-pull-paths.txt
  • crates/l20_domain/spaced/guest/protocol/README.md
  • crates/l20_domain/spaced/guest/protocol/src/lib.rs
  • crates/l20_domain/spaced/protocol/AGENTS.md
  • crates/l40_api/spaced/AGENTS.md
  • crates/l40_api/spaced/guest/execution/README.md
  • crates/tools/archcheck/README.md
  • docs/versioning.md
  • templates/firecracker/seed/README.md

Included review availability: This review used your included allowance. Your plan provides up to 12 included reviews per hour; 2 remain after this review.

@github-actions github-actions Bot added the triage:pending Waiting for a maintainer to triage label Nov 7, 2026
@github-actions

github-actions Bot commented Nov 7, 2026

Copy link
Copy Markdown

Thanks for opening this pull request! A SPACE maintainer will take a look.

CONTRIBUTING.md explains how we review outside contributions.

@ac-pplx
ac-pplx force-pushed the ac/spaced-common-split branch 2 times, most recently from 08810db to cc700d8 Compare November 7, 2026 08:27
@ac-pplx
ac-pplx marked this pull request as ready for review November 7, 2026 08:59
@ac-pplx
ac-pplx force-pushed the ac/spaced-common-split branch from cc700d8 to 97a8f9d Compare November 7, 2026 15:07
@ac-pplx
ac-pplx changed the base branch from main to ac/cc-host November 7, 2026 15:09
@ac-pplx
ac-pplx added this pull request to stack #1706 November 7, 2026 15:09
@the-gigi-pplx

the-gigi-pplx commented Nov 7, 2026 •

Copy link
Copy Markdown
Collaborator

Review

No findings.

Verified against 97a8f9d91406478674c3302d28d1b07fa68a49ed, diffed against this PR's base branch ac/cc-host (119 files). I checked that the protocol types, guest-compatibility rules and operation allowlist moved to pplx-space-spaced-protocol unchanged, that the connectors, listeners, LazyClient and retry policy moved to pplx-space-spaced-client unchanged, and that consumers were updated consistently. CI is green: Rust tests, clippy, format, isolated-crate builds, and the Kind Firecracker smokes (12 shards plus Direct) all pass. I didn't rerun builds or tests locally.

@the-gigi-pplx the-gigi-pplx left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Approved. No findings; details in the review comment above.

pplx-space-spaced-common held both the compiled host/control protos and the
UDS/vsock/retry transport, so as one l20_domain crate it counted as a model
that depended on a protocol and on tokio, hyper-util and tokio-vsock.

The protos, the guest-compatibility rules and the guest operation allowlist
move to pplx-space-spaced-protocol (l20_domain/spaced/protocol). The
connectors, listeners, lazy client, retry policy and spaced_client_config!
move to pplx-space-spaced-client (l40_api/spaced/client), where every
client and server that uses them may depend on it. The re-exports of
spaced-guest-protocol items go too: callers import them from that crate.

Generated code and wire packages are unchanged. sbx-mgr-protocol's
extern_path names spaced-guest-protocol's operations module, which the old
path re-exported. The retry loop's two debug events change target from
pplx_space_spaced_common::retry_policy to pplx_space_spaced_client::retry_policy.

Removes the [layers.domain_dependencies] and [layers.model_protocol]
baseline entries for spaced-common, and its [crate_names] entry.

ci/kind-pull-paths.txt selected the transport for the Kind smoke through
crates/l20_domain/spaced/**; it now also lists crates/l40_api/spaced/client/**,
and the selector test checks both new crates.

scripts/move_crates.toml drops the deleted crate's row, as it did for the
earlier deleted crates.
@ac-pplx
ac-pplx force-pushed the ac/spaced-common-split branch from bed35b3 to 56f3b80 Compare November 13, 2026 05:47
@ac-pplx
ac-pplx added this pull request to the merge queue Nov 13, 2026
Merged via the queue into main with commit 7abb8c3 Nov 13, 2026
44 checks passed
@ac-pplx
ac-pplx deleted the ac/spaced-common-split branch November 13, 2026 06:16
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

triage:pending Waiting for a maintainer to triage

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants