Update 100.md based on review comments

This commit is contained in:
Vivek Ganesan 2025-01-11 21:49:15 +05:30 committed by GitHub
parent aaa74677fa
commit a2507ab77b
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

128
100.md
View File

@ -24,66 +24,97 @@ Kanban boards are a popular project management tool that enables visual organiza
{ {
"created_at": 34324234234, //<Unix timestamp in seconds> "created_at": 34324234234, //<Unix timestamp in seconds>
"kind": 30301, "kind": 30301,
"content": {
"description" : "Board Description", // can contain markdown too
"columnMapping": 'EXACT' //map the card's status exactly with column name - Extensible to different logics in future
"columns": [
{
"id": "col1",
"name": "To Do",
"order": 0
},
{
"id": "col2",
"name": "In Progress",
"order": 1
},
{
"id": "col3",
"name": "Done",
"order": 2
}
]
},
"tags": [ "tags": [
["d", "<board-d-identifier>"], ["d", "<board-d-identifier>"],
["title", "Board Name"], ["title", "Board Name"],
// List of all cards in the board below ["description","Board Description"], //can contain markdown too
["a", "30302:<card-1-event-author-pubkey>:<card-1-d-identifier>", "<optional-relay-url>"], ["alt","A board to track my work"], //Human-readable plaintext summary to be shown in non-supporting clients - as per NIP-31
["a", "30302:<card-2-event-author-pubkey>:<card-2-d-identifier>", "<optional-relay-url>"],
["a", "30302:<card-3-event-author-pubkey>:<card-3-d-identifier>", "<optional-relay-url>"], // List of all columns in the board below in format ["col","col-id","name","order",<<csv of card statuses that need to be displayed in the column>>]
], // If the last element in the 'col' tag is not defined, it is assumed that column will display those cards (see event below) whose 's' tags EXACTLY the column name
["col", "col1-id", "To Do", "0"],
["col", "col2-id", "In Progress", "1"],
["col", "col3-id", "Done", "2","Done, Completed, Finished"],
// designate a 'maintainers' list who can add/edit cards in this board
// add maintainers using 'zap' tag so that the zaps go to them using zap-splits as per NIP-57, if 'zap' tags are absent, then only the owner can add/edit cards in the board
[ "zap", "82341f882b6eabcd2ba7f1ef90aad961cf074af15b9ef44a09f9d2a8fbfbe6a2" ],
[ "zap", "fa984bd7dbb282f07e16e7ae87b26a2a7b9b90b7246a44771f0cf5ae58018f52" ],
[ "zap", "460c25e682fda7832b52d1f22d3d22b3176d972f60dcdc3212ed8c92ef85065c" ],
// other fields... // other fields...
]
} }
``` ```
In case there are no `zap` tags to designate maintainers, the owner of the board is the only person who can publish cards on the boards.
Editing of the board event is possible only by the creator of the board.
### Card Event ### Card Event
```javascript ```javascript
{ {
"created_at": 34324234234, //<Unix timestamp in seconds> "created_at": 34324234234, //<Unix timestamp in seconds>
"kind": 30302, "kind": 30302,
"content": {
"status": "To do", // Match exactly with column name
"description": "Card description", //can contain markdown too
"order": 0, // auto-increment new card order in increments of 10 to provide space for rearranging to an extent
"attachments": [
"https://example.com/file1.png",
"https://example.com/file2.pdf"
]
},
"tags": [ "tags": [
["d", "<card-d-identifier>"], ["d", "<card-d-identifier>"],
["title", "Card Title"], ["title", "Card Title"],
["description","Card Description"], //can contain markdown too
["alt","A card representing a task"], //Human-readable plaintext summary to be shown in non-supporting clients - as per NIP-31
["s", "To do"], //status of the card
["rank","10"], // order of the card in the column - cards may be displayed in the ascending order of rank by default
// card url attachments with 'u' tags similar to NIP-98
["u","https://attachment1"],
["u","https://attachment2"],
// add assignees using 'zap' tag so that the zaps go to them using zap-splits as per NIP-57 // add assignees using 'zap' tag so that the zaps go to them using zap-splits as per NIP-57
[ "zap", "82341f882b6eabcd2ba7f1ef90aad961cf074af15b9ef44a09f9d2a8fbfbe6a2", "wss://nostr.oxtr.dev", "1" ], // 25% [ "zap", "82341f882b6eabcd2ba7f1ef90aad961cf074af15b9ef44a09f9d2a8fbfbe6a2"],
[ "zap", "fa984bd7dbb282f07e16e7ae87b26a2a7b9b90b7246a44771f0cf5ae58018f52", "wss://nostr.wine/", "1" ], // 25% [ "zap", "fa984bd7dbb282f07e16e7ae87b26a2a7b9b90b7246a44771f0cf5ae58018f52"],
[ "zap", "460c25e682fda7832b52d1f22d3d22b3176d972f60dcdc3212ed8c92ef85065c", "wss://nos.lol/", "2" ] // 50% [ "zap", "460c25e682fda7832b52d1f22d3d22b3176d972f60dcdc3212ed8c92ef85065c"],
// The list of boards this card will be a part of.
// However, the card will be displayed in a board only when this event's pubkey matches an entry in the board's maintainers list
["a", "30301:<board-1-creator-pubkey>:<board-1-d-identifier>", "<optional-relay-url>"],
["a", "30301:<board-2-creator-pubkey>:<board-2-d-identifier>", "<optional-relay-url>"],
], ],
// other fields... // other fields...
} }
``` ```
When editing a card, the maintainers can copy the card event with the `d` tag intact and publish a new event.
When a client gets multiple card events with the same `d` tag, it takes the latest one by any maintainer or the creator of the board event as the source of truth.
### Tracker Card Event
In case one wants to just track another nostr event (like a tracker card, without modifying the original event), one can designate a tracker card using a `k` tag to denote kind and `e` tag to denote the nostr event to be tracked.
```javascript
{
"created_at": 34324234234, //<Unix timestamp in seconds>
"kind": 30302,
"tags": [
["d", "<card-d-identifier>"],
["k", "1"], //this one tracks a text note
["e", "<event-id>", "<relay-url>"] // as per NIP-10
],
// other fields as per card event above...
}
```
The clients MAY display this tracker card like they display the tracked event, or using the 'alt' tag of the original event if not supported.
Any `30302` event with a `k` tag will be treated as a tracker card.
#### Automatic movement of tracker cards
In case of tracked card, its status is deemed to be the `s` tag value of the event it tracks.
This allows automatic movement of a card (like a Git issue) across different columns as the card's status changes in the source system, without any manual updates in the board.
If the tracked event does not have an `s` tag, then tracker card event's `s` tag is the status of the card.
### Event Kinds ### Event Kinds
- 30301: Kanban Board Definition - 30301: Kanban Board Definition
@ -94,42 +125,41 @@ Kanban boards are a popular project management tool that enables visual organiza
#### Board Events (kind: 30301) #### Board Events (kind: 30301)
- `d`: Unique identifier for the board - `d`: Unique identifier for the board
- `title`: Board name - `title`: Board name
- `a`: One for each card in the board
#### Card Events (kind: 30302) #### Card Events (kind: 30302)
- `d`: Unique identifier for the card - `d`: Unique identifier for the card
- `title`: Card title - `title`: Card title
- `a`: At least one. This points to the board that this card belongs to
### Access Control ### Access Control
1. Only the board creator can: 1. Only the board creator can:
- Modify board - Modify board
2. Only the board maintainers can:
- Add a card to the board - Add a card to the board
- Publish edits to the existing cards (including the status)
2. Only the card creator can: 2. Any user can:
- Modify cards (including the status)
3. Any user can:
- View the board and cards - View the board and cards
- React, comment, zap on board and cards - React, comment, zap on board and cards
### Client Behavior ### Client Behavior
Clients SHOULD: Clients MAY:
- Display boards in a visual column layout - Display boards in a visual column layout
- Allow drag-and-drop card movement for authorized users - Allow drag-and-drop card movement for authorized users
- Support board sharing via nostr: URI scheme
- Implement proper authorization checks before allowing modifications - Implement proper authorization checks before allowing modifications
Clients MAY:
- Implement additional features like card labels, due dates, or assignments - Implement additional features like card labels, due dates, or assignments
- Support board templates - Support board templates
- Provide filtering and search capabilities - Provide filtering and search capabilities
- Prioritize to show the maintainer comments on cards
## Security Considerations ## Security Considerations
1. Clients MUST verify event signatures and delegation tokens before allowing modifications 1. Clients MUST verify event signatures and delegation tokens before allowing modifications
2. Relays MAY implement additional spam prevention measures 2. Relays MAY implement additional spam prevention measures
3. Relays MAY choose to retain only a few recent versions of board and card events.
## Implementation Notes ## Implementation Notes
@ -139,7 +169,7 @@ To maintain a consistent board state:
- Using the event timestamp to resolve conflicts - Using the event timestamp to resolve conflicts
- Maintaining card order within columns - Maintaining card order within columns
2. For performance, clients should: 2. For performance, clients can:
- Cache board and card data locally - Cache board and card data locally
- Use efficient subscription filters when requesting updates - Use efficient subscription filters when requesting updates
@ -149,6 +179,6 @@ To maintain a consistent board state:
// Subscribe to the cards of a board // Subscribe to the cards of a board
{ {
"kinds": [30302], "kinds": [30302],
"#a": ["30302:<card-1-event-author-pubkey>:<card-1-d-identifier>","30302:<card-2-event-author-pubkey>:<card-2-d-identifier>",...] "#a": ["30301:<board-creator-pubkey>:<board-d-identifier>",...]
} }
``` ```