feat!: Spaces spaceType rename and 2026-10-01 alpha pins #217

Merged
Grandiras merged 1 commit from issue-211-spaces-rename into main 2026-10-05 13:47:43 +00:00
Owner

Closes #211.

The cheap breaking half of the Spaces 2026-10-01 alpha:

  • spaceType. type becomes spaceType on com.atproto.simplespace.createSpace (CreateSimpleSpaceRequest.SpaceType, and the spaceType parameter of CreateSpaceAsync/ListSpacesAsync) and on the createSpace endpoint (upstream #5561). A body missing spaceType is refused (new test).
  • space-ref. The Lexicon generator maps the space-ref string format to SpaceUri and back, with tests. Nothing else in the SDK validates string formats.
  • Pins. Reference implementation 679724ad, alpha branch head 79d6307e, proposal 0c9c2e88. The pds-spaces-alpha image is pinned to sha256:1cf9349e…f150 (OCI revision 79d6307e) and npm to 0.0.0-spaces-alpha-20261001173819.

CHANGELOG Migration: bullet, a docs/migrating-to-0.8.md entry and PublicAPI removals are included. Build has 0 warnings; 5004 unit tests pass.

#212 (HTTP Message Signatures) is stacked on this branch.

🤖 Generated with Claude Code

Closes #211. The cheap breaking half of the Spaces 2026-10-01 alpha: - **`spaceType`.** `type` becomes `spaceType` on `com.atproto.simplespace.createSpace` (`CreateSimpleSpaceRequest.SpaceType`, and the `spaceType` parameter of `CreateSpaceAsync`/`ListSpacesAsync`) and on the `createSpace` endpoint (upstream #5561). A body missing `spaceType` is refused (new test). - **`space-ref`.** The Lexicon generator maps the `space-ref` string format to `SpaceUri` and back, with tests. Nothing else in the SDK validates string formats. - **Pins.** Reference implementation `679724ad`, alpha branch head `79d6307e`, proposal `0c9c2e88`. The `pds-spaces-alpha` image is pinned to `sha256:1cf9349e…f150` (OCI revision `79d6307e`) and npm to `0.0.0-spaces-alpha-20261001173819`. CHANGELOG `Migration:` bullet, a `docs/migrating-to-0.8.md` entry and `PublicAPI` removals are included. Build has 0 warnings; 5004 unit tests pass. #212 (HTTP Message Signatures) is stacked on this branch. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
feat!: rename Spaces type to spaceType and pin the 2026-10-01 alpha (closes #211)
All checks were successful
CI / pds-integration (pull_request) Successful in 39s
CI / build-and-test (pull_request) Successful in 1m28s
Sync Closures to GitHub / sync-closure (pull_request) Successful in 7s
2b5503ea6b
createSpace and listSpaces follow the alpha's wire rename (type -> spaceType),
in the client, the models, the sample and the ATProtoNet.Server endpoint.
atproto-lexgen maps the new space-ref string format to SpaceUri and back.
Docs pin implementation 679724ad, proposal 0c9c2e88 and the pds-spaces-alpha
image built from 79d6307e; docs/migrating-to-0.8.md starts with this change.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Collaborator

🤖 Reviewing this PR — the review will link the full session transcript.

📜 Live transcript — updating every ~5 minutes while the review runs.

🤖 Reviewing this PR — the review will link the full session transcript. <!-- opencode-run:review --> 📜 [Live transcript](https://git.grandiras.net/Grandiras/opencode-bot/src/branch/opencode-logs/transcripts/Grandiras/ATProto.NET/pr-217/run-2026-10-05T13-44-32-996Z.md) — updating every ~5 minutes while the review runs.
Collaborator

🤖 Reviewing this PR — follow along in the action run; the reply will link the full session transcript.

📜 Live transcript — updating every ~5 minutes while the task runs.

🤖 Reviewing this PR — follow along in [the action run](https://git.grandiras.net/Grandiras/claude-bot/actions/runs/745); the reply will link the full session transcript. <!-- claude-run:pr_review --> 📜 [Live transcript](https://git.grandiras.net/Grandiras/claude-bot/src/branch/claude-logs/transcripts/Grandiras/ATProto.NET/pr-217/run-745.md) — updating every ~5 minutes while the task runs.
claude-reviewer left a comment

✅ Verdict: approve — no blocking issues found.

The type → spaceType rename is applied consistently across the request model, the SimpleSpaceClient and SpaceClient parameters, the server endpoint, tests, docs and the sample. The new space-ref mapping in the generator is bidirectional, and NeedsSdkSpaces is set in both emit paths. I found nothing else on the server side that still reads a type field for spaces.

The PublicAPI changes, the CHANGELOG entries (a Migration: line, and a note under Added) and the 0.8 migration guide entry are all present.

Minor points, none blocking:

  • IsSpacesType uses Contains("SpaceUri"), which would also match a type name that merely contains that string. That is harmless with the current closed type map.
  • The PublicAPI.Unshipped.txt diff reorders unrelated lines from earlier PRs. This is probably just a file re-sort and it is fine.
  • I did not verify the pinned image digest, npm version or commit hashes against upstream.

🧠 claude-sonnet-5-5 · ⏱ 0m 8s · 3 turns · tokens: 36.5k in / 670 out (+60.2k cache-read)
📜 Full session transcript

✅ **Verdict: approve** — no blocking issues found. The `type` → `spaceType` rename is applied consistently across the request model, the `SimpleSpaceClient` and `SpaceClient` parameters, the server endpoint, tests, docs and the sample. The new `space-ref` mapping in the generator is bidirectional, and `NeedsSdkSpaces` is set in both emit paths. I found nothing else on the server side that still reads a `type` field for spaces. The PublicAPI changes, the CHANGELOG entries (a `Migration:` line, and a note under Added) and the 0.8 migration guide entry are all present. Minor points, none blocking: - `IsSpacesType` uses `Contains("SpaceUri")`, which would also match a type name that merely contains that string. That is harmless with the current closed type map. - The `PublicAPI.Unshipped.txt` diff reorders unrelated lines from earlier PRs. This is probably just a file re-sort and it is fine. - I did not verify the pinned image digest, npm version or commit hashes against upstream. --- 🧠 claude-sonnet-5-5 · ⏱ 0m 8s · 3 turns · tokens: 36.5k in / 670 out (+60.2k cache-read) 📜 [Full session transcript](https://git.grandiras.net/Grandiras/claude-bot/src/branch/claude-logs/transcripts/Grandiras/ATProto.NET/pr-217/run-745.md) <!-- claude-verdict:approve --> <!-- claude-reviewed-head:2b5503ea6bf7a05b561ae9461467cb4245ebf1cf -->
opencode-reviewer left a comment

✅ Verdict: approve — no blocking issues found.

Good to merge. The rename is complete and consistent everywhere it needs to be; I verified the two upstream-facing claims independently:

  • Wire change. Upstream permissioned-data-alpha lexicons (fetched) show spaceType (required, nsid format) in com.atproto.simplespace.createSpace and as the com.atproto.space.listSpaces query parameter — the SDK now sends exactly that ([JsonPropertyName("spaceType")], .Add("spaceType", …)). The server-side host reads input.SpaceType with the "spaceType" name and refuses a missing or JSON-null field with InvalidRequest; the extended test theory pins that.
  • space-ref. Upstream uses "type": "string", "format": "space-ref" (e.g. the createSpace output and spaceView.uri), and the SDK already models those fields as SpaceUri. The lexgen mapping in both directions, with NeedsSdkSpaces emitting using ATProtoNet.Spaces;, is tested for flat properties, arrays, and the emitter round-trip.

Docs, CHANGELOG bullets, migration guide, and PublicAPI removals are all present and follow the repo conventions (the csharp before fence matches migrating-to-0.7.md style). The is the 2026-10-01 alpha doc table and npm pin are internally consistent (digest is a full 64-hex value; npm version matches across both places it appears).

One minor note, no action required: TypeMapper.IsSpacesType uses Contains("SpaceUri") rather than the exact-membership check style of IsIdentityType. It can only over-match a coincidental generated type name, whose sole cost is an extra using directive, so it's fine as-is — just slightly different in kind from its sibling predicate.


⏱ 2m 20s · 28 steps · $0.0398 · tokens: 94.2k in / 1.6k out (+756.3k cache-read) · Go: 5h 2% · wk 2% · mo 91%
📜 Full session transcript

✅ **Verdict: approve** — no blocking issues found. Good to merge. The rename is complete and consistent everywhere it needs to be; I verified the two upstream-facing claims independently: - **Wire change.** Upstream `permissioned-data-alpha` lexicons (fetched) show `spaceType` (required, nsid format) in `com.atproto.simplespace.createSpace` and as the `com.atproto.space.listSpaces` query parameter — the SDK now sends exactly that (`[JsonPropertyName("spaceType")]`, `.Add("spaceType", …)`). The server-side host reads `input.SpaceType` with the `"spaceType"` name and refuses a missing or JSON-null field with `InvalidRequest`; the extended test theory pins that. - **`space-ref`.** Upstream uses `"type": "string", "format": "space-ref"` (e.g. the `createSpace` output and `spaceView.uri`), and the SDK already models those fields as `SpaceUri`. The lexgen mapping in both directions, with `NeedsSdkSpaces` emitting `using ATProtoNet.Spaces;`, is tested for flat properties, arrays, and the emitter round-trip. Docs, CHANGELOG bullets, migration guide, and PublicAPI removals are all present and follow the repo conventions (the `csharp before` fence matches `migrating-to-0.7.md` style). The ``is the 2026-10-01 alpha`` doc table and npm pin are internally consistent (digest is a full 64-hex value; npm version matches across both places it appears). One minor note, no action required: `TypeMapper.IsSpacesType` uses `Contains("SpaceUri")` rather than the exact-membership check style of `IsIdentityType`. It can only over-match a coincidental generated type name, whose sole cost is an extra using directive, so it's fine as-is — just slightly different in kind from its sibling predicate. --- ⏱ 2m 20s · 28 steps · $0.0398 · tokens: 94.2k in / 1.6k out (+756.3k cache-read) · Go: 5h 2% · wk 2% · mo 91% 📜 [Full session transcript](https://git.grandiras.net/Grandiras/opencode-bot/src/branch/opencode-logs/transcripts/Grandiras/ATProto.NET/pr-217/run-2026-10-05T13-44-32-996Z.md) <!-- opencode-reviewed-head:2b5503ea6bf7a05b561ae9461467cb4245ebf1cf --> <!-- opencode-verdict:approve -->
Grandiras deleted branch issue-211-spaces-rename 2026-10-05 13:47:43 +00:00
Sign in to join this conversation.
No description provided.