docs: document 0.1.0 crate release

This commit is contained in:
2026-10-02 19:46:08 +09:00
parent 193ca89d93
commit da559de912
9 changed files with 250 additions and 20 deletions
+16
View File
@@ -0,0 +1,16 @@
# Changelog
All notable changes to the published WIP Rust crates are documented here.
## 0.1.0
Initial public release of:
- `wip-protocol`: transport-independent WIP logical model and validation.
- `wip-interface-macros`: procedural-macro implementation for interface and DTO declarations.
- `wip-interface`: public Rust interface-authoring facade and typed value codecs.
- `wip-host`: request-scoped publication, precondition validation, and qualified operation dispatch.
- `wip-http`: framework-independent WIP over HTTP v1 routes, strict JSON codecs, and failure classification.
- `wip-client`: stateful Known Space, interest-driven acquisition, request ownership, and operation lifecycle.
The repository also contains non-published filesystem server, terminal client, and public-API conformance packages.
+42 -20
View File
@@ -13,29 +13,36 @@ repository root is not itself a package.
## Crate graph and responsibilities ## Crate graph and responsibilities
```text ```text
wip-tui (interactive Worldspace explorer and operation editor) Published libraries
├── wip-client Known Space, request identity, validators, and calls
├── wip-http framework-neutral HTTP request/response messages
└── wip-protocol descriptors and logical values
wip-fs-server (request-time filesystem projection and loopback listener) wip-client
├── wip-http standard routes/codecs/envelopes ├── wip-http
├── wip-host request-scoped publication and dispatch │ └── wip-protocol
└── wip-interface macro-generated filesystem capabilities └── wip-protocol
wip-public-api-example (workspace-only executable, integration tests, doctest) wip-host
├── wip-protocol logical declarations, values, calls, and validation ├── wip-interface
├── wip-http standard HTTP v1 routes, JSON codecs, and envelopes │ ├── wip-interface-macros
│ └── wip-protocol │ └── wip-protocol
├── wip-client stateful Known Space, lazy tree, observation, and call runtime └── wip-protocol
│ ├── wip-http
│ └── wip-protocol Workspace-only applications and conformance consumers
├── wip-interface application DTO codecs and interface authoring facade
│ ├── wip-protocol wip-tui
│ └── wip-interface-macros proc-macro implementation detail ├── wip-client
└── wip-host descriptor registry, publication, and qualified dispatch ├── wip-http
├── wip-interface └── wip-protocol
└── wip-protocol
wip-fs-server
├── wip-host
├── wip-http
├── wip-interface
└── wip-protocol
wip-public-api-example
├── wip-host
├── wip-interface
└── wip-protocol
``` ```
| Crate | Responsibility | Does not own | | Crate | Responsibility | Does not own |
@@ -50,6 +57,21 @@ wip-public-api-example (workspace-only executable, integration tests, doctest)
| `wip-fs-server` | Linux directory-handle-confined request-time projection, complete depth-bounded observations and bounded file operations, standard `wip-http` dispatch, and a loopback HTTP binary. | A new wire profile, implicit symlink following, non-loopback cleartext, authentication policy, TLS termination, or filesystem-wide preregistration. | | `wip-fs-server` | Linux directory-handle-confined request-time projection, complete depth-bounded observations and bounded file operations, standard `wip-http` dispatch, and a loopback HTTP binary. | A new wire profile, implicit symlink following, non-loopback cleartext, authentication policy, TLS termination, or filesystem-wide preregistration. |
| `wip-public-api-example` | An independently compiled consumer of the protocol, authoring, and host public crates. Its DTOs and traits are application-owned; its implementation and backend handle remain host-private. | Reusable library API or a production server. | | `wip-public-api-example` | An independently compiled consumer of the protocol, authoring, and host public crates. Its DTOs and traits are application-owned; its implementation and backend handle remain host-private. | Reusable library API or a production server. |
## Published crates
The `0.1.0` release consists of these six crates:
- `wip-protocol`
- `wip-interface-macros` — implementation dependency re-exported by `wip-interface`
- `wip-interface`
- `wip-host`
- `wip-http`
- `wip-client`
The filesystem server, terminal client, and public-API example are workspace-only packages and set `publish = false`. All workspace packages require Rust 1.88 or newer and are licensed under either Apache-2.0 or MIT at your option.
See [RELEASING.md](RELEASING.md) for the dependency-ordered crates.io procedure and [CHANGELOG.md](CHANGELOG.md) for release contents.
The boundary is intentional: protocol types describe what can cross a The boundary is intentional: protocol types describe what can cross a
transport; application DTOs opt into that model with `WipType`; a host-private transport; application DTOs opt into that model with `WipType`; a host-private
implementation owns credentials, handles, and backend state; and `wip-http` implementation owns credentials, handles, and backend state; and `wip-http`
+75
View File
@@ -0,0 +1,75 @@
# Releasing
The six crates published from this workspace use one version and must be released in dependency order. The filesystem server, terminal client, and public-API example set `publish = false` and are never uploaded.
## Preconditions
1. Work from a clean `master` whose `HEAD` matches `origin/master`.
2. Confirm the intended version in `[workspace.package]` and every internal requirement in `[workspace.dependencies]`.
3. Confirm ownership of all six names on crates.io.
4. Run the complete repository validation suite:
```console
cargo fmt --all -- --check
cargo check --workspace --all-targets
cargo test --workspace --all-targets
cargo test --workspace --doc
cargo clippy --workspace --all-targets -- -D warnings
RUSTDOCFLAGS='-D warnings' cargo doc --workspace --no-deps
cargo run --package wip-public-api-example
git diff --check
```
## Publish order
Before uploading anything, dry-run the exact public package set together. Cargo uses a temporary local registry for unpublished workspace dependencies during this check:
```console
cargo publish --dry-run --workspace \
--exclude wip-fs-server \
--exclude wip-public-api-example \
--exclude wip-tui
```
Then dry-run and publish each layer before moving to a crate that depends on it:
```console
cargo publish --dry-run --package wip-protocol
cargo publish --package wip-protocol
cargo publish --dry-run --package wip-interface-macros
cargo publish --package wip-interface-macros
```
Wait until both versions are available from the crates.io index, then continue:
```console
cargo publish --dry-run --package wip-interface
cargo publish --package wip-interface
cargo publish --dry-run --package wip-http
cargo publish --package wip-http
```
After those versions are available from the index:
```console
cargo publish --dry-run --package wip-host
cargo publish --package wip-host
cargo publish --dry-run --package wip-client
cargo publish --package wip-client
```
Registry propagation can take time. A dependent dry-run reporting that a WIP crate is unavailable means the previous publish is not visible in the selected registry yet; do not bypass verification.
## Tag
After all six uploads resolve successfully, tag the exact published commit and push the tag:
```console
git tag -a v0.1.0 -m "release: 0.1.0"
git push origin v0.1.0
```
Do not move or recreate a published version or its tag. Prepare a new version for any subsequent correction.
+16
View File
@@ -0,0 +1,16 @@
# wip-client
Presentation-independent stateful runtime for Web Interface Protocol (WIP) clients.
`wip-client` manages endpoint- and security-context-isolated Known Space, object and Interface Descriptor observations, bounded request ownership, supersession, out-of-order response suppression, validator recovery, and operation call contexts. It produces and consumes framework-neutral `wip-http` messages but performs no network I/O and contains no UI types.
```toml
[dependencies]
wip-client = "0.1.0"
```
Applications provide the HTTP adapter and presentation layer, send each prepared request exactly as owned by the runtime, then return the corresponding response for completion.
See the [API documentation](https://docs.rs/wip-client) for session, acquisition, cache, and call APIs.
Licensed under either of Apache-2.0 or MIT at your option.
+15
View File
@@ -0,0 +1,15 @@
# wip-host
Framework-independent Host publication and operation dispatch for the Web Interface Protocol (WIP).
`wip-host` registers generated interfaces, explicitly publishes them on request-scoped objects, validates object and interface preconditions, and performs interface-qualified operation dispatch against one host-owned instance. Backend transactions, persistence, and network serving remain application responsibilities.
```toml
[dependencies]
wip-host = "0.1.0"
wip-interface = "0.1.0"
```
See the [API documentation](https://docs.rs/wip-host) for publication, provider, execution-context, and effect-guarantee boundaries.
Licensed under either of Apache-2.0 or MIT at your option.
+31
View File
@@ -0,0 +1,31 @@
# wip-http
Framework-independent WIP over HTTP v1 endpoint, route, JSON codec, and response-classification support.
The crate maps the three WIP Core interactions to fixed HTTP routes and strict UTF-8 JSON representations. It constructs and validates `http` request and response values but deliberately performs no network I/O and does not define TLS, authentication, proxy, or connection policy.
```toml
[dependencies]
wip-http = "0.1.0"
```
```rust
use wip_http::wip_protocol::ObserveRequest;
use wip_http::{Endpoint, Limits, encode_observe_request};
fn main() -> Result<(), Box<dyn std::error::Error>> {
let endpoint = Endpoint::parse("https://example.test/wip")?;
let limits = Limits::new(64 * 1024, 1024 * 1024, 64)?;
let request = encode_observe_request(
&endpoint,
&ObserveRequest { path: "/".into(), depth: 0 },
limits,
)?;
assert_eq!(request.uri(), "https://example.test/wip/v1/observe");
Ok(())
}
```
See the [API documentation](https://docs.rs/wip-http) for codec and failure-boundary details.
Licensed under either of Apache-2.0 or MIT at your option.
+9
View File
@@ -0,0 +1,9 @@
# wip-interface-macros
Procedural-macro implementation used by [`wip-interface`](https://crates.io/crates/wip-interface).
Applications should depend on `wip-interface`, which re-exports `#[interface]` and `#[derive(WipType)]` together with the traits and types required by generated code. Direct use of this implementation crate is not a supported application API.
See the [API documentation](https://docs.rs/wip-interface-macros) for the exported macro entry points.
Licensed under either of Apache-2.0 or MIT at your option.
+32
View File
@@ -0,0 +1,32 @@
# wip-interface
Public Rust authoring API for Web Interface Protocol (WIP) interfaces and application DTO codecs.
The crate re-exports `#[interface]` and `#[derive(WipType)]`, generates Interface Descriptors and typed dispatch companions, and converts application-owned Rust values to and from the transport-independent value model.
```toml
[dependencies]
wip-interface = "0.1.0"
```
```rust
use wip_interface as wip;
#[derive(wip::WipType)]
struct Greeting {
message: String,
}
#[wip::interface]
pub trait Greeter {
/// Builds a greeting.
///
/// # Returns
/// The generated greeting.
fn greet(&self, name: String) -> wip::OperationResult<Greeting>;
}
```
See the [API documentation](https://docs.rs/wip-interface) for supported interface syntax, DTO shapes, and failure semantics.
Licensed under either of Apache-2.0 or MIT at your option.
+14
View File
@@ -0,0 +1,14 @@
# wip-protocol
Transport-independent logical types and validation for the Web Interface Protocol (WIP).
This crate defines the canonical Object and Interface Descriptor models, the three Core interaction request and response types, schema-neutral operation `Value`s, validators, protocol errors, and structural validation. It does not define an HTTP mapping, application DTOs, persistence, or network I/O.
```toml
[dependencies]
wip-protocol = "0.1.0"
```
See the [API documentation](https://docs.rs/wip-protocol) for the complete model and validation rules.
Licensed under either of Apache-2.0 or MIT at your option.