Lexicons for boards, for when ATProto Spaces is stable #198

Open
opened 2026-09-18 17:12:51 +00:00 by Grandiras · 2 comments
Owner

Part of #190. A tracker for a decision, not work to pick up: do not build against ATProto Spaces until it is specified. As of September 2026 nothing about it is in the published protocol docs on atproto.com; what exists is proposals.

What can be done without it is to write down the lexicons this app would publish, so the steps in #190 bend the model toward them instead of away:

  • A namespace. ponente.app gives app.ponente.kanban.*, which matches the Ponente.Kanban project name and leaves room for siblings the same way.
  • Record types for a board, a column, a card and a comment, and which repository each lives in — the board's, or its author's. That is the question Spaces exists to answer for private data, and the reason to wait.
  • What encryption at rest turns into. Today the server holds one key and encrypts everything a member types (docs/data.md). Records in a member's own repository are a different trust model, not a port of this one.
  • The known mismatches, so nobody is surprised later: integer ids in URLs (#197), double positions (no floats in the data model), and board membership as a join table rather than a list a space owns.

When this is picked up, it starts as a page in docs/, not as code.

Part of #190. A tracker for a decision, not work to pick up: **do not build against ATProto Spaces until it is specified.** As of September 2026 nothing about it is in the published protocol docs on atproto.com; what exists is proposals. What can be done without it is to write down the lexicons this app would publish, so the steps in #190 bend the model toward them instead of away: - A namespace. `ponente.app` gives `app.ponente.kanban.*`, which matches the `Ponente.Kanban` project name and leaves room for siblings the same way. - Record types for a board, a column, a card and a comment, and which repository each lives in — the board's, or its author's. That is the question Spaces exists to answer for private data, and the reason to wait. - What encryption at rest turns into. Today the server holds one key and encrypts everything a member types (`docs/data.md`). Records in a member's own repository are a different trust model, not a port of this one. - The known mismatches, so nobody is surprised later: integer ids in URLs (#197), `double` positions (no floats in the data model), and board membership as a join table rather than a list a space owns. When this is picked up, it starts as a page in `docs/`, not as code.
Author
Owner

Correction: An alpha version of a spaces-compatible reference PDS is available since a few weeks now. But we'll only want to build against it once it's deemed stable.

Correction: An alpha version of a spaces-compatible reference PDS is available since a few weeks now. But we'll only want to build against it once it's deemed stable.
Author
Owner

For the record: Spaces has shipped as an alpha (2026-08-20, announcement), specified as proposal 0016, Permissioned Data. It's explicitly not for production and expected to change, so "don't build against it yet" still holds, now because it's an alpha rather than because it's unwritten. Its shape answers the repository question above: each member's records live in a per-space permissioned repo on their own PDS, and it gives access control, not confidentiality. docs/lexicons.md (#217) designs against that.

For the record: Spaces has shipped as an **alpha** (2026-08-20, [announcement](https://atproto.com/blog/atproto-spaces-alpha)), specified as [proposal 0016, *Permissioned Data*](https://github.com/bluesky-social/proposals/tree/main/0016-permissioned-data). It's explicitly not for production and expected to change, so "don't build against it yet" still holds, now because it's an alpha rather than because it's unwritten. Its shape answers the repository question above: each member's records live in a per-space permissioned repo on their own PDS, and it gives access control, not confidentiality. `docs/lexicons.md` (#217) designs against that.
Sign in to join this conversation.
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
Grandiras/Ponente#198
No description provided.