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
## 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
library with Protocol validation, typed errors, full ordered declarations,
documentation summaries and safe Text View quoting/escapes. No path, lookup,
Generated
+10 -10
View File
@@ -1235,7 +1235,7 @@ checksum = "23b97319f7b8343df12cc98938e5c3eb436064524c8d2b4e30a1d3a36eecdf81"
[[package]]
name = "wip-client"
version = "0.1.0"
version = "0.2.0"
dependencies = [
"wip-http",
"wip-protocol",
@@ -1243,7 +1243,7 @@ dependencies = [
[[package]]
name = "wip-fs-server"
version = "0.1.0"
version = "0.2.0"
dependencies = [
"http",
"rustix 1.1.5",
@@ -1256,7 +1256,7 @@ dependencies = [
[[package]]
name = "wip-host"
version = "0.1.0"
version = "0.2.0"
dependencies = [
"trybuild",
"wip-interface",
@@ -1265,7 +1265,7 @@ dependencies = [
[[package]]
name = "wip-http"
version = "0.1.0"
version = "0.2.0"
dependencies = [
"base64 0.22.1",
"http",
@@ -1277,7 +1277,7 @@ dependencies = [
[[package]]
name = "wip-interface"
version = "0.1.0"
version = "0.2.0"
dependencies = [
"trybuild",
"wip-interface-macros",
@@ -1286,7 +1286,7 @@ dependencies = [
[[package]]
name = "wip-interface-macros"
version = "0.1.0"
version = "0.2.0"
dependencies = [
"proc-macro2",
"quote",
@@ -1295,11 +1295,11 @@ dependencies = [
[[package]]
name = "wip-protocol"
version = "0.1.0"
version = "0.2.0"
[[package]]
name = "wip-public-api-example"
version = "0.1.0"
version = "0.2.0"
dependencies = [
"wip-client",
"wip-host",
@@ -1310,14 +1310,14 @@ dependencies = [
[[package]]
name = "wip-text-view"
version = "0.1.0"
version = "0.2.0"
dependencies = [
"wip-protocol",
]
[[package]]
name = "wip-tui"
version = "0.1.0"
version = "0.2.0"
dependencies = [
"base64 0.22.1",
"crossterm",
+9 -9
View File
@@ -3,18 +3,18 @@ members = ["crates/*"]
resolver = "3"
[workspace.package]
version = "0.1.0"
version = "0.2.0"
edition = "2024"
rust-version = "1.88"
license = "MIT OR Apache-2.0"
repository = "https://gitea.hareworks.net/Hare/wip-rs"
[workspace.dependencies]
wip-client = { version = "0.1.0", path = "crates/wip-client" }
wip-fs-server = { version = "0.1.0", path = "crates/wip-fs-server" }
wip-host = { version = "0.1.0", path = "crates/wip-host" }
wip-http = { version = "0.1.0", path = "crates/wip-http" }
wip-interface = { version = "0.1.0", path = "crates/wip-interface" }
wip-interface-macros = { version = "0.1.0", path = "crates/wip-interface-macros" }
wip-protocol = { version = "0.1.0", path = "crates/wip-protocol" }
wip-text-view = { version = "0.1.0", path = "crates/wip-text-view" }
wip-client = { version = "0.2.0", path = "crates/wip-client" }
wip-fs-server = { version = "0.2.0", path = "crates/wip-fs-server" }
wip-host = { version = "0.2.0", path = "crates/wip-host" }
wip-http = { version = "0.2.0", path = "crates/wip-http" }
wip-interface = { version = "0.2.0", path = "crates/wip-interface" }
wip-interface-macros = { version = "0.2.0", path = "crates/wip-interface-macros" }
wip-protocol = { version = "0.2.0", path = "crates/wip-protocol" }
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
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`.
It replaces the earlier opaque Interface reference contract; HTTP routes and
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-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-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-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:
The `0.2.0` release consists of these seven crates:
- `wip-protocol`
- `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-http`
- `wip-client`
- `wip-text-view`
The unreleased workspace also adds [`wip-text-view`](crates/wip-text-view/README.md)
as a seventh public library. Its `render_object(&Object)` API needs no path;
The [`wip-text-view`](crates/wip-text-view/README.md) library's
`render_object(&Object)` API needs no path;
`render_interface(&Interface)` takes one borrowed entity pairing the complete
structured reference with its descriptor, without changing Protocol wire fields.
Both return one complete plain-text signature or a typed error.
@@ -92,7 +93,7 @@ or application traits.
## 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.
Legacy opaque-string wire references are rejected. See [MIGRATION.md](MIGRATION.md)
for construction examples, validation boundaries and downstream migration status.
+3 -3
View File
@@ -1,6 +1,6 @@
# 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
@@ -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:
```console
git tag -a v0.1.0 -m "release: 0.1.0"
git push origin v0.1.0
git tag -a v0.2.0 -m "chore: release 0.2.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.
+1 -1
View File
@@ -6,7 +6,7 @@ Presentation-independent stateful runtime for Web Interface Protocol (WIP) clien
```toml
[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.
+3 -3
View File
@@ -6,11 +6,11 @@ Framework-independent Host publication and operation dispatch for the Web Interf
```toml
[dependencies]
wip-host = "0.1.0"
wip-interface = "0.1.0"
wip-host = "0.2.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`.
+1 -1
View File
@@ -6,7 +6,7 @@ The crate maps the three WIP Core interactions to fixed HTTP routes and strict U
```toml
[dependencies]
wip-http = "0.1.0"
wip-http = "0.2.0"
```
```rust
+1 -1
View File
@@ -6,7 +6,7 @@ The crate re-exports `#[interface]` and `#[derive(WipType)]`, generates Interfac
```toml
[dependencies]
wip-interface = "0.1.0"
wip-interface = "0.2.0"
```
```rust
+2 -2
View File
@@ -6,7 +6,7 @@ This crate defines the canonical Object and Interface Descriptor models, the thr
```toml
[dependencies]
wip-protocol = "0.1.0"
wip-protocol = "0.2.0"
```
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
opaque string `scope_ref` metadata, not a third identity field. Descriptors do
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.
+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.
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
```rust