chore: prepare 0.2.0 release

This commit is contained in:
2026-10-09 00:35:06 +09:00
parent 1cbe03b49e
commit 3c3edf4c6f
12 changed files with 51 additions and 36 deletions
+8
View File
@@ -4,6 +4,14 @@ All notable changes to the published WIP Rust crates are documented here.
## Unreleased ## Unreleased
## 0.2.0
- Adds public Text View `Token`/`TokenKind`, `tokenize_object`,
`tokenize_interface`, and delimiter-free `to_plain_text`. Direct rendering uses
the same token generation path; HTML and terminal-color renderers are not included.
- Makes Client Interface caches scope-lifetime-aware, invalidates observations on
confirmed binding loss, and retains immutable contexts for in-flight calls.
- Adds `wip-text-view`, an independent single-entity Object/Interface signature - Adds `wip-text-view`, an independent single-entity Object/Interface signature
library with Protocol validation, typed errors, full ordered declarations, library with Protocol validation, typed errors, full ordered declarations,
documentation summaries and safe Text View quoting/escapes. No path, lookup, documentation summaries and safe Text View quoting/escapes. No path, lookup,
Generated
+10 -10
View File
@@ -1235,7 +1235,7 @@ checksum = "23b97319f7b8343df12cc98938e5c3eb436064524c8d2b4e30a1d3a36eecdf81"
[[package]] [[package]]
name = "wip-client" name = "wip-client"
version = "0.1.0" version = "0.2.0"
dependencies = [ dependencies = [
"wip-http", "wip-http",
"wip-protocol", "wip-protocol",
@@ -1243,7 +1243,7 @@ dependencies = [
[[package]] [[package]]
name = "wip-fs-server" name = "wip-fs-server"
version = "0.1.0" version = "0.2.0"
dependencies = [ dependencies = [
"http", "http",
"rustix 1.1.5", "rustix 1.1.5",
@@ -1256,7 +1256,7 @@ dependencies = [
[[package]] [[package]]
name = "wip-host" name = "wip-host"
version = "0.1.0" version = "0.2.0"
dependencies = [ dependencies = [
"trybuild", "trybuild",
"wip-interface", "wip-interface",
@@ -1265,7 +1265,7 @@ dependencies = [
[[package]] [[package]]
name = "wip-http" name = "wip-http"
version = "0.1.0" version = "0.2.0"
dependencies = [ dependencies = [
"base64 0.22.1", "base64 0.22.1",
"http", "http",
@@ -1277,7 +1277,7 @@ dependencies = [
[[package]] [[package]]
name = "wip-interface" name = "wip-interface"
version = "0.1.0" version = "0.2.0"
dependencies = [ dependencies = [
"trybuild", "trybuild",
"wip-interface-macros", "wip-interface-macros",
@@ -1286,7 +1286,7 @@ dependencies = [
[[package]] [[package]]
name = "wip-interface-macros" name = "wip-interface-macros"
version = "0.1.0" version = "0.2.0"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
@@ -1295,11 +1295,11 @@ dependencies = [
[[package]] [[package]]
name = "wip-protocol" name = "wip-protocol"
version = "0.1.0" version = "0.2.0"
[[package]] [[package]]
name = "wip-public-api-example" name = "wip-public-api-example"
version = "0.1.0" version = "0.2.0"
dependencies = [ dependencies = [
"wip-client", "wip-client",
"wip-host", "wip-host",
@@ -1310,14 +1310,14 @@ dependencies = [
[[package]] [[package]]
name = "wip-text-view" name = "wip-text-view"
version = "0.1.0" version = "0.2.0"
dependencies = [ dependencies = [
"wip-protocol", "wip-protocol",
] ]
[[package]] [[package]]
name = "wip-tui" name = "wip-tui"
version = "0.1.0" version = "0.2.0"
dependencies = [ dependencies = [
"base64 0.22.1", "base64 0.22.1",
"crossterm", "crossterm",
+9 -9
View File
@@ -3,18 +3,18 @@ members = ["crates/*"]
resolver = "3" resolver = "3"
[workspace.package] [workspace.package]
version = "0.1.0" version = "0.2.0"
edition = "2024" edition = "2024"
rust-version = "1.88" rust-version = "1.88"
license = "MIT OR Apache-2.0" license = "MIT OR Apache-2.0"
repository = "https://gitea.hareworks.net/Hare/wip-rs" repository = "https://gitea.hareworks.net/Hare/wip-rs"
[workspace.dependencies] [workspace.dependencies]
wip-client = { version = "0.1.0", path = "crates/wip-client" } wip-client = { version = "0.2.0", path = "crates/wip-client" }
wip-fs-server = { version = "0.1.0", path = "crates/wip-fs-server" } wip-fs-server = { version = "0.2.0", path = "crates/wip-fs-server" }
wip-host = { version = "0.1.0", path = "crates/wip-host" } wip-host = { version = "0.2.0", path = "crates/wip-host" }
wip-http = { version = "0.1.0", path = "crates/wip-http" } wip-http = { version = "0.2.0", path = "crates/wip-http" }
wip-interface = { version = "0.1.0", path = "crates/wip-interface" } wip-interface = { version = "0.2.0", path = "crates/wip-interface" }
wip-interface-macros = { version = "0.1.0", path = "crates/wip-interface-macros" } wip-interface-macros = { version = "0.2.0", path = "crates/wip-interface-macros" }
wip-protocol = { version = "0.1.0", path = "crates/wip-protocol" } wip-protocol = { version = "0.2.0", path = "crates/wip-protocol" }
wip-text-view = { version = "0.1.0", path = "crates/wip-text-view" } wip-text-view = { version = "0.2.0", path = "crates/wip-text-view" }
+1 -1
View File
@@ -1,6 +1,6 @@
# Structured Interface reference and scope publication migration # Structured Interface reference and scope publication migration
This unreleased API/wire change follows `wip-reference` canonical Core Model, The 0.2.0 API/wire change follows `wip-reference` canonical Core Model,
Protocol and WIP over HTTP at `6086f3c5ef10aa1464ce9c824750d7f667217bfd`. Protocol and WIP over HTTP at `6086f3c5ef10aa1464ce9c824750d7f667217bfd`.
It replaces the earlier opaque Interface reference contract; HTTP routes and It replaces the earlier opaque Interface reference contract; HTTP routes and
error codes have **not** changed. Peers must upgrade together: the codec does error codes have **not** changed. Peers must upgrade together: the codec does
+6 -5
View File
@@ -58,13 +58,13 @@ wip-public-api-example
| `wip-tui` | Keyboard-only interactive Worldspace tree, selected Entry and qualified operation panes, descriptor-driven argument editing, bounded result/diagnostic rendering, terminal lifecycle, and HTTP I/O workers over `wip-client`. | Independent cache/validator semantics, automatic operation retries, Host internals, backend paths, or persistent state. | | `wip-tui` | Keyboard-only interactive Worldspace tree, selected Entry and qualified operation panes, descriptor-driven argument editing, bounded result/diagnostic rendering, terminal lifecycle, and HTTP I/O workers over `wip-client`. | Independent cache/validator semantics, automatic operation retries, Host internals, backend paths, or persistent state. |
| `wip-interface` | The public `WipType`/`interface` authoring API, Rust-to-protocol codecs, generated descriptors, and typed implementation dispatch. | Object publication, backend lifetime, or transport policy. | | `wip-interface` | The public `WipType`/`interface` authoring API, Rust-to-protocol codecs, generated descriptors, and typed implementation dispatch. | Object publication, backend lifetime, or transport policy. |
| `wip-interface-macros` | Procedural-macro expansion used by `wip-interface`. It is not an application dependency. | A supported direct user API. | | `wip-interface-macros` | Procedural-macro expansion used by `wip-interface`. It is not an application dependency. | A supported direct user API. |
| `wip-host` | Opaque interface registration, explicit object membership, validator checks, interface-qualified dispatch against one host-owned instance, and descriptor-guided argument decoding inside that same resolution boundary. | Backend atomicity, global object lookup, or network serving. | | `wip-host` | Scoped interface registration and publication lifetimes, explicit object membership, validator checks, interface-qualified dispatch against one host-owned instance, and descriptor-guided argument decoding inside that same resolution boundary. | Backend atomicity, global object lookup, or network serving. |
| `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 ## Published crates
The `0.1.0` release consists of these six crates: The `0.2.0` release consists of these seven crates:
- `wip-protocol` - `wip-protocol`
- `wip-interface-macros` — implementation dependency re-exported by `wip-interface` - `wip-interface-macros` — implementation dependency re-exported by `wip-interface`
@@ -72,9 +72,10 @@ The `0.1.0` release consists of these six crates:
- `wip-host` - `wip-host`
- `wip-http` - `wip-http`
- `wip-client` - `wip-client`
- `wip-text-view`
The unreleased workspace also adds [`wip-text-view`](crates/wip-text-view/README.md) The [`wip-text-view`](crates/wip-text-view/README.md) library's
as a seventh public library. Its `render_object(&Object)` API needs no path; `render_object(&Object)` API needs no path;
`render_interface(&Interface)` takes one borrowed entity pairing the complete `render_interface(&Interface)` takes one borrowed entity pairing the complete
structured reference with its descriptor, without changing Protocol wire fields. structured reference with its descriptor, without changing Protocol wire fields.
Both return one complete plain-text signature or a typed error. Both return one complete plain-text signature or a typed error.
@@ -92,7 +93,7 @@ or application traits.
## Structured Interface references ## Structured Interface references
The unreleased Protocol/HTTP API uses explicit `InterfaceReference { scope, The 0.2.0 Protocol/HTTP API uses explicit `InterfaceReference { scope,
name }` records and optional `scope_ref` observation/precondition metadata. name }` records and optional `scope_ref` observation/precondition metadata.
Legacy opaque-string wire references are rejected. See [MIGRATION.md](MIGRATION.md) Legacy opaque-string wire references are rejected. See [MIGRATION.md](MIGRATION.md)
for construction examples, validation boundaries and downstream migration status. for construction examples, validation boundaries and downstream migration status.
+3 -3
View File
@@ -1,6 +1,6 @@
# Releasing # Releasing
The seven public crates in the current workspace (including the unreleased `wip-text-view`) 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. The seven public crates in the current workspace (including `wip-text-view`) 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 ## Preconditions
@@ -71,8 +71,8 @@ Registry propagation can take time. A dependent dry-run reporting that a WIP cra
After all seven uploads resolve successfully, tag the exact published commit and push the tag: After all seven uploads resolve successfully, tag the exact published commit and push the tag:
```console ```console
git tag -a v0.1.0 -m "release: 0.1.0" git tag -a v0.2.0 -m "chore: release 0.2.0"
git push origin v0.1.0 git push origin v0.2.0
``` ```
Do not move or recreate a published version or its tag. Prepare a new version for any subsequent correction. Do not move or recreate a published version or its tag. Prepare a new version for any subsequent correction.
+1 -1
View File
@@ -6,7 +6,7 @@ Presentation-independent stateful runtime for Web Interface Protocol (WIP) clien
```toml ```toml
[dependencies] [dependencies]
wip-client = "0.1.0" wip-client = "0.2.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. 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.
+3 -3
View File
@@ -6,11 +6,11 @@ Framework-independent Host publication and operation dispatch for the Web Interf
```toml ```toml
[dependencies] [dependencies]
wip-host = "0.1.0" wip-host = "0.2.0"
wip-interface = "0.1.0" wip-interface = "0.2.0"
``` ```
Protocol publication and dispatch use `wip_protocol::InterfaceReference { scope, name }` and compare both fields exactly. The legacy `InterfaceRef` registration token remains Host-private: `protocol_reference()` maps its opaque string verbatim to the name at root scope `/`, without parsing it. Registry lookup and fetch accept structured references; non-root references do not resolve legacy registrations. Legacy responses omit `scope_ref`. Protocol publication and dispatch use `wip_protocol::InterfaceReference { scope, name }` and compare both fields exactly. Registration takes an explicit `Scope` and local name; `InterfaceRef::protocol_reference()` preserves those coordinates without parsing display text. Providers attach a current `ScopeObservation` inside the coherent backend boundary, and fetch returns its optional Object ref as `scope_ref`. Calls check a supplied `scope_ref` against that current binding; omission adds no identity precondition. Retire a Scope on Object deletion, replacement or movement; retained registry artifacts alone do not establish publication.
Malformed interface-reference shapes fail calls as `InvalidRequest` before object resolution. A well-shaped reference outside the target path's ancestor-or-self scope fails at the membership check as `InterfaceMismatch`. Malformed interface-reference shapes fail calls as `InvalidRequest` before object resolution. A well-shaped reference outside the target path's ancestor-or-self scope fails at the membership check as `InterfaceMismatch`.
+1 -1
View File
@@ -6,7 +6,7 @@ The crate maps the three WIP Core interactions to fixed HTTP routes and strict U
```toml ```toml
[dependencies] [dependencies]
wip-http = "0.1.0" wip-http = "0.2.0"
``` ```
```rust ```rust
+1 -1
View File
@@ -6,7 +6,7 @@ The crate re-exports `#[interface]` and `#[derive(WipType)]`, generates Interfac
```toml ```toml
[dependencies] [dependencies]
wip-interface = "0.1.0" wip-interface = "0.2.0"
``` ```
```rust ```rust
+2 -2
View File
@@ -6,7 +6,7 @@ This crate defines the canonical Object and Interface Descriptor models, the thr
```toml ```toml
[dependencies] [dependencies]
wip-protocol = "0.1.0" wip-protocol = "0.2.0"
``` ```
Interface identity is an exact `InterfaceReference { scope, name }` pair. Interface identity is an exact `InterfaceReference { scope, name }` pair.
@@ -16,7 +16,7 @@ and Object/interaction validation at response boundaries. Fetching needs no
target Object path. Fetch responses and interface call targets carry optional target Object path. Fetch responses and interface call targets carry optional
opaque string `scope_ref` metadata, not a third identity field. Descriptors do opaque string `scope_ref` metadata, not a third identity field. Descriptors do
not embed identity. See the repository's [migration guide](../../MIGRATION.md) not embed identity. See the repository's [migration guide](../../MIGRATION.md)
for the breaking Rust and HTTP wire changes and deferred consumer semantics. for the breaking Rust and HTTP wire changes and consumer migration guidance.
See the [API documentation](https://docs.rs/wip-protocol) for the complete model and validation rules. See the [API documentation](https://docs.rs/wip-protocol) for the complete model and validation rules.
+6
View File
@@ -5,6 +5,12 @@ Standalone Object and Interface signature rendering for WIP Text View, following
`3-protocol.md`. Only `wip-protocol` and the Rust standard library are dependencies. `3-protocol.md`. Only `wip-protocol` and the Rust standard library are dependencies.
No Client, Host, HTTP I/O, cache, UI framework or retrieval service is required. No Client, Host, HTTP I/O, cache, UI framework or retrieval service is required.
```toml
[dependencies]
wip-text-view = "0.2.0"
wip-protocol = "0.2.0"
```
## Single-entity API ## Single-entity API
```rust ```rust