canvas-commentslisted
Install: claude install-skill fusedio/skills
# Fused canvas comments ([[comments]] in canvas.toml)
Pinned comment threads on a Fused canvas serialize as top-level `[[comments]]` blocks in `canvas.toml`. Comments with `status = "open"` are your work queue; resolving one is a three-field contract plus a reply, so the Workbench UI correctly attributes the work to AI.
## Read: find the work
1. Get the canvas locally: `fused canvas pull <name> -o <dir>` (or use the folder you have).
2. Every `[[comments]]` block where `status = "open"` is an actionable request.
3. `anchor_udf = "<udfName>"` tells you WHICH node it's about — the fix belongs in `<udfName>.py` (or `.json`/`.md`/`.html` with that stem). No `anchor_udf` ⇒ canvas-level comment; read `content` for scope.
## Resolve: the full contract (all four steps, not just status)
After actually making the fix the comment asks for:
```toml
[[comments]]
id = "cmt-a" # never change existing ids
# ...existing fields stay untouched...
status = "resolved" # 1. was "open"
resolved_by = "ai" # 2. REQUIRED — this is what shows the AI badge in the UI
resolved_at = 1749600200000 # 3. ms epoch timestamp (date +%s000)
[[comments.replies]] # 4. say what you did
id = "reply-<unique>"
content = "Changed the default to 7. Done."
created_at = 1749600200000
created_by = "ai" # REQUIRED on AI-written replies
```
**Setting only `status = "resolved"` is wrong** — without `resolved_by = "ai"` the UI cannot at