chore: prepare 0.2.0 release
This commit is contained in:
@@ -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
@@ -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
@@ -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
@@ -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
|
||||||
|
|||||||
@@ -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
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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`.
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user