Skip to content
Open
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
6 changes: 4 additions & 2 deletions cmux-tui/bindings/ERGONOMICS.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
# SDK ergonomics findings

The seven public SDKs expose handwritten resource handles over the reviewed
124-operation `cmux.protocol/2` catalog. The raw protocol inventory is a
127-operation `cmux.protocol/2` catalog. Journal administration remains a
trusted local CLI-only surface; the facades expose only
`session.journal.subscribe` for the journal. The raw protocol inventory is a
separate compatibility surface with 101 commands and 46 events. Deterministic
generation is limited to those private protocol-12 models under each package's
explicit `raw` namespace. Consumers do not run a generator or install a
Expand Down Expand Up @@ -64,7 +66,7 @@ implemented public behavior. None remains protocol work.

## Conformance evidence

The 124 public operations are the API inventory. The public fake-server
The 127 public operations are the API inventory. The public fake-server
matrix is test inventory: 20 cases in each language, 140 cases total. It checks
exact envelopes, decimal preservation, mutation replay, indeterminate effects,
revision conflicts, duplicate-name ambiguity, bounded stream overflow,
Expand Down
19 changes: 18 additions & 1 deletion cmux-tui/bindings/conformance/runner.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,24 @@
BUILD = HERE / ".build" / "resource-v2"
LANGUAGES = ("python", "typescript", "rust", "go", "java", "cpp", "zig")
PROTOCOL = "cmux.protocol/2"
TRANSPORTED_OPERATION_COUNT = 124
TRANSPORTED_OPERATION_COUNT = 127
CLI_ONLY_JOURNAL_OPERATIONS = frozenset(
{
"session.journal.append",
"session.journal.checkpoint.create",
"session.journal.checkpoint.list",
"session.journal.hook.list",
"session.journal.hook.put",
"session.journal.inspect",
"session.journal.list",
"session.journal.producer.list",
"session.journal.producer.put",
"session.journal.restore",
"session.journal.restore.preview",
"session.journal.segment.list",
"session.journal.segment.seal",
}
)
MAX_REQUEST_BYTES = 4 * 1024 * 1024
MAX_STREAM_MESSAGES = 256
MAX_STREAM_BYTES = 16 * 1024 * 1024
Expand Down
29 changes: 29 additions & 0 deletions cmux-tui/bindings/conformance/test_runner.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
from runner import (
Adapter,
AdapterSpec,
CLI_ONLY_JOURNAL_OPERATIONS,
FIXTURES,
LANGUAGES,
MAX_STREAM_BYTES,
Expand Down Expand Up @@ -163,6 +164,34 @@ def test_catalog_is_public_v2_and_has_expected_transported_operations(
self.catalog["operations"]["terminal.wait_exit"]["class"], "read"
)

def test_journal_administration_is_explicitly_cli_only(self) -> None:
expected = frozenset(
{
"session.journal.append",
"session.journal.checkpoint.create",
"session.journal.checkpoint.list",
"session.journal.hook.list",
"session.journal.hook.put",
"session.journal.inspect",
"session.journal.list",
"session.journal.producer.list",
"session.journal.producer.put",
"session.journal.restore",
"session.journal.restore.preview",
"session.journal.segment.list",
"session.journal.segment.seal",
}
)
self.assertEqual(CLI_ONLY_JOURNAL_OPERATIONS, expected)
catalog_admin = frozenset(
operation
for operation in self.catalog["operations"]
if operation.startswith("session.journal.")
and operation != "session.journal.subscribe"
)
self.assertEqual(catalog_admin, CLI_ONLY_JOURNAL_OPERATIONS)
self.assertNotIn("session.journal.subscribe", CLI_ONLY_JOURNAL_OPERATIONS)

def test_fixtures_cover_every_requested_semantic(self) -> None:
names = {case["name"] for case in self.fixtures["fake_cases"]}
required = {
Expand Down
11 changes: 10 additions & 1 deletion cmux-tui/bindings/cpp/.cmux-resource-api.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"catalog_sha256": "d92b567abdfc8d76382c65e222521b3ac76f7183216cb922bceb841475513509",
"catalog_sha256": "8e9cf1d1f5e1ed2819ccf410b6e1fa21f9aae502c2b93c59204aa0dc94804d66",
"operations": {
"agent.list": {
"class": "read"
Expand Down Expand Up @@ -190,12 +190,21 @@
"session.journal.hook.put": {
"class": "mutation"
},
"session.journal.inspect": {
"class": "read"
},
"session.journal.list": {
"class": "read"
},
"session.journal.producer.list": {
"class": "read"
},
"session.journal.producer.put": {
"class": "mutation"
},
"session.journal.restore": {
"class": "mutation"
},
"session.journal.restore.preview": {
"class": "read"
},
Expand Down
11 changes: 10 additions & 1 deletion cmux-tui/bindings/go/.cmux-resource-api.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"catalog_sha256": "d92b567abdfc8d76382c65e222521b3ac76f7183216cb922bceb841475513509",
"catalog_sha256": "8e9cf1d1f5e1ed2819ccf410b6e1fa21f9aae502c2b93c59204aa0dc94804d66",
"operations": {
"agent.list": {
"class": "read"
Expand Down Expand Up @@ -190,12 +190,21 @@
"session.journal.hook.put": {
"class": "mutation"
},
"session.journal.inspect": {
"class": "read"
},
"session.journal.list": {
"class": "read"
},
"session.journal.producer.list": {
"class": "read"
},
"session.journal.producer.put": {
"class": "mutation"
},
"session.journal.restore": {
"class": "mutation"
},
"session.journal.restore.preview": {
"class": "read"
},
Expand Down
11 changes: 10 additions & 1 deletion cmux-tui/bindings/java/.cmux-resource-api.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"catalog_sha256": "d92b567abdfc8d76382c65e222521b3ac76f7183216cb922bceb841475513509",
"catalog_sha256": "8e9cf1d1f5e1ed2819ccf410b6e1fa21f9aae502c2b93c59204aa0dc94804d66",
"operations": {
"agent.list": {
"class": "read"
Expand Down Expand Up @@ -190,12 +190,21 @@
"session.journal.hook.put": {
"class": "mutation"
},
"session.journal.inspect": {
"class": "read"
},
"session.journal.list": {
"class": "read"
},
"session.journal.producer.list": {
"class": "read"
},
"session.journal.producer.put": {
"class": "mutation"
},
"session.journal.restore": {
"class": "mutation"
},
"session.journal.restore.preview": {
"class": "read"
},
Expand Down
11 changes: 10 additions & 1 deletion cmux-tui/bindings/python/.cmux-resource-api.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"catalog_sha256": "d92b567abdfc8d76382c65e222521b3ac76f7183216cb922bceb841475513509",
"catalog_sha256": "8e9cf1d1f5e1ed2819ccf410b6e1fa21f9aae502c2b93c59204aa0dc94804d66",
"operations": {
"agent.list": {
"class": "read"
Expand Down Expand Up @@ -190,12 +190,21 @@
"session.journal.hook.put": {
"class": "mutation"
},
"session.journal.inspect": {
"class": "read"
},
"session.journal.list": {
"class": "read"
},
"session.journal.producer.list": {
"class": "read"
},
"session.journal.producer.put": {
"class": "mutation"
},
"session.journal.restore": {
"class": "mutation"
},
"session.journal.restore.preview": {
"class": "read"
},
Expand Down
11 changes: 10 additions & 1 deletion cmux-tui/bindings/rust/.cmux-resource-api.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"catalog_sha256": "d92b567abdfc8d76382c65e222521b3ac76f7183216cb922bceb841475513509",
"catalog_sha256": "8e9cf1d1f5e1ed2819ccf410b6e1fa21f9aae502c2b93c59204aa0dc94804d66",
"operations": {
"agent.list": {
"class": "read"
Expand Down Expand Up @@ -190,12 +190,21 @@
"session.journal.hook.put": {
"class": "mutation"
},
"session.journal.inspect": {
"class": "read"
},
"session.journal.list": {
"class": "read"
},
"session.journal.producer.list": {
"class": "read"
},
"session.journal.producer.put": {
"class": "mutation"
},
"session.journal.restore": {
"class": "mutation"
},
"session.journal.restore.preview": {
"class": "read"
},
Expand Down
11 changes: 10 additions & 1 deletion cmux-tui/bindings/typescript/.cmux-resource-api.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"catalog_sha256": "d92b567abdfc8d76382c65e222521b3ac76f7183216cb922bceb841475513509",
"catalog_sha256": "8e9cf1d1f5e1ed2819ccf410b6e1fa21f9aae502c2b93c59204aa0dc94804d66",
"operations": {
"agent.list": {
"class": "read"
Expand Down Expand Up @@ -190,12 +190,21 @@
"session.journal.hook.put": {
"class": "mutation"
},
"session.journal.inspect": {
"class": "read"
},
"session.journal.list": {
"class": "read"
},
"session.journal.producer.list": {
"class": "read"
},
"session.journal.producer.put": {
"class": "mutation"
},
"session.journal.restore": {
"class": "mutation"
},
"session.journal.restore.preview": {
"class": "read"
},
Expand Down
11 changes: 10 additions & 1 deletion cmux-tui/bindings/zig/.cmux-resource-api.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"catalog_sha256": "d92b567abdfc8d76382c65e222521b3ac76f7183216cb922bceb841475513509",
"catalog_sha256": "8e9cf1d1f5e1ed2819ccf410b6e1fa21f9aae502c2b93c59204aa0dc94804d66",
"operations": {
"agent.list": {
"class": "read"
Expand Down Expand Up @@ -190,12 +190,21 @@
"session.journal.hook.put": {
"class": "mutation"
},
"session.journal.inspect": {
"class": "read"
},
"session.journal.list": {
"class": "read"
},
"session.journal.producer.list": {
"class": "read"
},
"session.journal.producer.put": {
"class": "mutation"
},
"session.journal.restore": {
"class": "mutation"
},
"session.journal.restore.preview": {
"class": "read"
},
Expand Down
Loading
Loading