Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 2 additions & 3 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,8 @@ Use a unique request envelope and response envelope for each RPC.
Run `buf lint`.
Document compatibility.

The 0.1 `qsoripper.services` wire-package identifier is a compatibility
boundary. Do not rename it in place. Do not interpret it as a source
dependency.
The `cathub.services` wire-package identifier is part of the public contract.
Changing it requires a new protocol major version and a client migration plan.

An operator must attend all hardware transmission tests.
Automated tests must not key a physical transmitter.
Expand Down
4 changes: 2 additions & 2 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ members = [
]

[workspace.package]
version = "0.1.1"
version = "0.2.0"
edition = "2021"
rust-version = "1.88"
license = "MIT"
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ The daemon leaves the station unkeyed after shutdown or a client failure.
Install the daemon from crates.io with Rust 1.88 or newer:

```powershell
cargo install cathub --version 0.1.1
cargo install cathub --version 0.2.0
```

You can also download the Windows or Linux archive from the
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
syntax = "proto3";

package qsoripper.services;
package cathub.services;

option csharp_namespace = "QsoRipper.Services";
option csharp_namespace = "CatHub.Protocol";

message WinkeyerBrokerServiceAbortClientRequest {
string client_name = 1;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
syntax = "proto3";

package qsoripper.services;
package cathub.services;

option csharp_namespace = "QsoRipper.Services";
option csharp_namespace = "CatHub.Protocol";

message WinkeyerBrokerServiceAbortClientResponse {
bool accepted = 1;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
syntax = "proto3";

package qsoripper.services;
package cathub.services;

option csharp_namespace = "QsoRipper.Services";
option csharp_namespace = "CatHub.Protocol";

message WinkeyerBrokerServiceCancelJobRequest {
string client_name = 1;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
syntax = "proto3";

package qsoripper.services;
package cathub.services;

option csharp_namespace = "QsoRipper.Services";
option csharp_namespace = "CatHub.Protocol";

message WinkeyerBrokerServiceCancelJobResponse {
bool canceled = 1;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
syntax = "proto3";

package qsoripper.services;
package cathub.services;

option csharp_namespace = "QsoRipper.Services";
option csharp_namespace = "CatHub.Protocol";

message WinkeyerBrokerServiceGetStatusRequest {
string client_name = 1;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
syntax = "proto3";

package qsoripper.services;
package cathub.services;

option csharp_namespace = "QsoRipper.Services";
option csharp_namespace = "CatHub.Protocol";

import "services/winkeyer_broker_status.proto";

Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
syntax = "proto3";

package qsoripper.services;
package cathub.services;

option csharp_namespace = "QsoRipper.Services";
option csharp_namespace = "CatHub.Protocol";

import "services/winkeyer_speed_mode.proto";

Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
syntax = "proto3";

package qsoripper.services;
package cathub.services;

option csharp_namespace = "QsoRipper.Services";
option csharp_namespace = "CatHub.Protocol";

message WinkeyerBrokerServiceSendTextResponse {
uint64 job_id = 1;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
syntax = "proto3";

package qsoripper.services;
package cathub.services;

option csharp_namespace = "QsoRipper.Services";
option csharp_namespace = "CatHub.Protocol";

import "services/winkeyer_speed_mode.proto";

Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
syntax = "proto3";

package qsoripper.services;
package cathub.services;

option csharp_namespace = "QsoRipper.Services";
option csharp_namespace = "CatHub.Protocol";

import "services/winkeyer_speed_mode.proto";

Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
syntax = "proto3";

package qsoripper.services;
package cathub.services;

option csharp_namespace = "QsoRipper.Services";
option csharp_namespace = "CatHub.Protocol";

message WinkeyerBrokerServiceStreamEventsRequest {
string client_name = 1;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
syntax = "proto3";

package qsoripper.services;
package cathub.services;

option csharp_namespace = "QsoRipper.Services";
option csharp_namespace = "CatHub.Protocol";

import "services/winkeyer_broker_event_kind.proto";
import "services/winkeyer_broker_status.proto";
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
syntax = "proto3";

package qsoripper.services;
package cathub.services;

option csharp_namespace = "QsoRipper.Services";
option csharp_namespace = "CatHub.Protocol";

enum WinkeyerBrokerEventKind {
WINKEYER_BROKER_EVENT_KIND_UNSPECIFIED = 0;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
syntax = "proto3";

package qsoripper.services;
package cathub.services;

option csharp_namespace = "QsoRipper.Services";
option csharp_namespace = "CatHub.Protocol";

import "services/abort_winkeyer_client_request.proto";
import "services/abort_winkeyer_client_response.proto";
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
syntax = "proto3";

package qsoripper.services;
package cathub.services;

option csharp_namespace = "QsoRipper.Services";
option csharp_namespace = "CatHub.Protocol";

message WinkeyerBrokerStatus {
bool connected = 1;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
syntax = "proto3";

package qsoripper.services;
package cathub.services;

option csharp_namespace = "QsoRipper.Services";
option csharp_namespace = "CatHub.Protocol";

enum WinkeyerSpeedMode {
WINKEYER_SPEED_MODE_UNSPECIFIED = 0;
Expand Down
6 changes: 2 additions & 4 deletions crates/cathub-protocol/src/lib.rs
Original file line number Diff line number Diff line change
@@ -1,12 +1,10 @@
//! Generated client and server types for CatHub's public protocol.
//!
//! Version 0.1 retains the legacy `qsoripper.services` wire-package identifier so
//! pre-release clients remain compatible. The identifier does not imply a runtime
//! or source dependency on another product.
//! Version 0.2 uses the CatHub-owned `cathub.services` wire-package identifier.

// Generated prost/tonic code is not authored against this workspace's pedantic lint profile.
#![allow(clippy::all, clippy::pedantic)]
// Generated prost/tonic items do not carry Rust documentation from the proto comments.
#![allow(missing_docs)]

tonic::include_proto!("qsoripper.services");
tonic::include_proto!("cathub.services");
4 changes: 2 additions & 2 deletions crates/cathub/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
[package]
name = "cathub"
description = "Multi-client CAT and WinKeyer hub daemon"
version = "0.1.2"
version.workspace = true
edition.workspace = true
rust-version.workspace = true
license.workspace = true
Expand All @@ -19,7 +19,7 @@ path = "src/main.rs"
[dependencies]
async-trait = { workspace = true }
bytes = { workspace = true }
cathub-protocol = { path = "../cathub-protocol", version = "0.1.1" }
cathub-protocol = { path = "../cathub-protocol", version = "0.2.0" }
clap = { workspace = true }
serde = { workspace = true }
serde_json = { workspace = true }
Expand Down
11 changes: 4 additions & 7 deletions docs/architecture/release-and-compatibility.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ Set the `NUGET_USER` Actions repository variable to the policy owner's NuGet use
Then dispatch the publication workflow:

```powershell
gh workflow run publish-registries.yml -f release_tag=v0.1.1
gh workflow run publish-registries.yml -f release_tag=v0.2.0
```

The workflow rejects a draft or prerelease.
Expand All @@ -57,12 +57,9 @@ The daemon crate depends on the same version of `cathub-protocol`.

## Wire compatibility

The 0.1 typed WinKeyer API retains the legacy `qsoripper.services` protobuf package string
so existing pre-release clients can connect. That string is a wire identifier, not a source
or runtime dependency. Do not rename it in the 0.1 line.

Introduce a future wire namespace as a new protocol version.
Give clients an explicit migration period.
The 0.2 typed WinKeyer API uses the CatHub-owned `cathub.services` protobuf package string.
It is a public wire identifier. Renaming it is a breaking protocol change and requires a new
major protocol version plus a client migration period.
Request and response envelopes remain unique for each RPC.
Protobuf 1-1-1 remains the default file layout.

Expand Down
2 changes: 1 addition & 1 deletion docs/integration/setup.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ Put `cathub` or `cathub.exe` on `PATH`.
If Rust 1.88 or newer is already installed, the equivalent installation from crates.io is:

```powershell
cargo install cathub --version 0.1.1
cargo install cathub --version 0.2.0
```

To build from source instead:
Expand Down
2 changes: 1 addition & 1 deletion src/dotnet/CatHub.Protocol/CatHub.Protocol.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<PackageId>CatHub.Protocol</PackageId>
<Version>0.1.1</Version>
<Version>0.2.0</Version>
<Description>Versioned gRPC client contracts for CatHub.</Description>
<PackageReadmeFile>README.md</PackageReadmeFile>
<PackageLicenseExpression>MIT</PackageLicenseExpression>
Expand Down