From what we’ve discussed, I’d map Board AppView onto existing Seed blobs like this:
1. Change Blob
Used for durable decisions made by an actor.
Document change
{
"type": "Change",
"objectType": "Document",
"objectId": "hm://site/doc-login",
"operation": "EditBlock",
"payload": {
"blockId": "block-1",
"text": "Improve login flow"
},
"author": "hm://account/gabo",
"parents": ["cid-prev-change"],
"signature": "..."
}So Board messages become Board change blobs.
2. Ref Blob
Used when one object references another.
Board references a Document
{
"type": "Ref",
"source": "hm://site/board-roadmap",
"target": "hm://other-site/doc-login",
"relation": "card-document",
"context": {
"cardId": "card-login"
}
}This says:
This Board represents this Document as a Card.
3. Capability Blob
Used for permissions.
Permission to add cards to a Board
{
"type": "Capability",
"resource": "hm://site/board-roadmap",
"grantee": "hm://account/alice",
"permissions": [
"board.view",
"board.edit",
"board.addCard",
"board.positionCard"
],
"issuer": "hm://account/gabo",
"signature": "..."
}4. Comment Blob / Discussion Change
If conversations stay on Documents, not Boards:
{
"type": "Change",
"objectType": "Document",
"objectId": "hm://site/doc-login",
"operation": "AddComment",
"payload": {
"anchor": "block-1",
"text": "Should this move to Review?"
},
"author": "hm://account/alice",
"signature": "..."
}The Card shows the comment count, but the Board does not own the conversation.
5. Query Blob / Query Change
If Query is an actor, its definition can also be a change blob.
{
"type": "Change",
"objectType": "Query",
"objectId": "hm://site/query-roadmap-descendants",
"operation": "UpdateDefinition",
"payload": {
"rootDocument": "hm://site/project-root",
"selector": "descendants"
},
"author": "hm://account/gabo",
"signature": "..."
}Then Board attaches the Query:
{
"type": "Change",
"objectType": "Board",
"objectId": "hm://site/board-roadmap",
"operation": "AttachQuery",
"payload": {
"queryId": "hm://site/query-roadmap-descendants",
"targetListId": "backlog"
},
"author": "hm://account/gabo",
"signature": "..."
}6. Blob / Media Blob
Used for card covers or document media.
{
"type": "Blob",
"mimeType": "image/png",
"cid": "bafy-image-cover"
}Board change:
{
"type": "Change",
"objectType": "Board",
"objectId": "hm://site/board-roadmap",
"operation": "SetCardCover",
"payload": {
"cardId": "card-login",
"cover": "bafy-image-cover"
}
}Clean model
Document edits → Change blobs
Board operations → Change blobs
Board-document link → Ref blobs
Permissions → Capability blobs
Comments → Document change blobs
Queries → Query change blobs
Images/files → Media blobsSo the Board AppView probably needs no new blob type. It needs a new object type, Board, and new change operations for that object.
Do you like what you are reading? Subscribe to receive updates.
Unsubscribe anytime