Skip to content

Group server crates under crates/server/server and crates/server/http #16

Open

Description

@cblanquera

Task

Reorganize the server family under a shared grouping directory:

Current location Requested location
crates/server crates/server/server
crates/server-http crates/server/http

The owner requested this layout on 2026-10-28. It follows the grouped organization already used for the SQL and Idea families.

Intended layout

crates/
├── server/                   # Grouping directory; no Cargo package here
│   ├── server/               # stackpress-server
│   │   ├── Cargo.toml
│   │   ├── src/
│   │   ├── tests/
│   │   └── docs/
│   └── http/                 # stackpress-server-http
│       ├── Cargo.toml
│       ├── src/
│       ├── tests/
│       └── docs/
├── sql/
└── idea/

Move each complete existing crate, including examples, fixtures and supporting files that exist. The tree illustrates the package boundaries, not a requirement to add empty directories.

This is a directory reorganization. Preserve Cargo package names stackpress-server and stackpress-server-http, direct Rust imports stackpress_server / stackpress_server_http, existing facade exports, features and behavior. In particular, preserve the distinction between the facade's buffered server-http feature and network-host server-http-host / server-http-host-tls features.

Current evidence

Baseline: remote trial/3 at 74319ac366f3397b684ee5fa8007651c19e54292; recheck the implementation branch before moving.

Required path changes

Root manifest excerpt after the move:

[workspace]
# Retain every other existing member.
members = [
    "crates/server/server",
    "crates/server/http",
]

[dependencies]
stackpress-server = { path = "crates/server/server", optional = true, default-features = false }
stackpress-server-http = { path = "crates/server/http", optional = true }

Both moved crates' foundation dependency becomes:

stackpress-lib = { path = "../../lib" }

The moved HTTP crate's dependency on its sibling remains:

stackpress-server = { path = "../server", features = ["http-stream"] }

Example consumer path updates, preserving all existing feature/default settings:

# crates/framework/framework-view/Cargo.toml
stackpress-server = { path = "../../server/server", optional = true }

# examples/profile-ui/gateway/Cargo.toml
stackpress-server = { path = "../../../crates/server/server", features = ["http"] }

Also update HTTP-host consumers to crates/server/http at the appropriate relative depth.

Implementation notes

Use a temporary sibling staging location when moving the existing crates/server: its destination is inside its current path, so it cannot be moved directly into itself. Leave no duplicate crate or temporary directory afterward.

Search source, tests, fixture manifests, generated-output templates, scripts, CI configuration and documentation for path assumptions. Review include! / include_str!, manifest-relative resources, shell working directories and expected diagnostic paths. Update generation sources before regenerating owned output where applicable.

Update current architecture/source-map documentation and live links. Preserve historical receipts, captured upstream evidence and provenance records as historical evidence rather than applying a blind replacement across archives.

Acceptance criteria

  • Both complete crates reside at the requested paths; crates/server is only a grouping directory with no manifest/package.
  • Workspace members, every active path dependency and any path-sensitive tooling/fixtures resolve to the new locations; no duplicate package remains.
  • Package names, public imports/facade paths, features/defaults, dependency boundaries, plugin/lifecycle behavior and HTTP contracts remain unchanged.
  • cargo metadata --locked --format-version 1 resolves the workspace. Review Cargo.lock changes; do not upgrade dependencies as part of the move.
  • Run affected build/test/doctest/compile-fail checks, plus representative CLI/HTTP/example consumers. Inspect diagnostic fixture changes so path edits do not hide behavioral regressions.
  • Verify default server, buffered HTTP and optional HTTP host/TLS dependency graphs retain their existing separation. Use finite/in-process/duplex verification; this move needs no listener.
  • Update live docs, contributor paths and commands. Perform the repository's required review rounds without ceremonial code changes; report existing platform/coverage limitations accurately.
  • Preserve unrelated worktree changes; keep the change scoped to the relocation and necessary references.

Related: #14 and #15 may touch dependent manifests and documentation. Coordinate paths with those tasks; this issue does not merge crates, rename packages or implement their feature changes.

Activity

  1. cblanquera commented on Oct 28, 2026

    @cblanquera
    MemberAuthor

    Done on trial/3 (merge 789a53a). It stays open until the change reaches main.

    • crates/server → crates/server/server and crates/server-http → crates/server/http, moved with git mv. crates/server is now a grouping directory only.
    • Package names, Rust imports, facade exports and features are unchanged, including the buffered server-http vs server-http-host/-tls split. Cargo.lock is unchanged.
    • The facade dependency graphs (default, server, server-http, server-http-host, server-http-host-tls) are identical to before, apart from paths.
    • Consumer manifests, shared test-support paths, compile-fail snapshots (path-only diffs), live docs and source maps were updated. Historical receipts were left as-is, except for three dead links that were repointed.
    • Verified: full workspace tests including the TCP watchdog (740 passed, 0 failed), doctests, Clippy -D warnings, generator --check for every generated root, the data-quickstart walkthrough, and the profile-ui and generated-admin checks.
  2. added 3 commits that reference this issue on Oct 29, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions