annotation
Read ../idmp-shared/SKILL.md first.
What this skill covers
- Read, create, update, and delete annotations attached to elements.
- Keep element annotations separate from event annotations, which use the
event annotations * family.
- Use annotation IDs for follow-up changes after the initial list read.
- Use filtered rereads by
content or time window to prove the exact note you just changed.
Recommended shortcuts
| Shortcut |
Purpose |
+list |
List annotations for one element, optionally filtered by content |
Recommended reference
Missing context to resolve first
| Context |
Why it must be resolved before mutation |
| Annotation scope |
Decide whether the note belongs to an element or an event before choosing the command family. |
| Owner element |
Element annotation create needs the final elementId. |
| Target annotation ID |
Update and delete need annotationId, not the element ID. |
| Verification plan |
Decide how you will reread the annotation list after create, update, and delete. |
Constrained live behaviors
annotation annotation create writes element annotations only; event notes use the event annotations * family.
annotation annotation update and annotation annotation delete act on annotationId, not on the owner element.
- Annotation writes are not complete until
annotation annotation list reread shows the expected text or confirms deletion.
annotation annotation list supports content, time windows, and small page sizes, so use filtered rereads before widening to the full page.
annotation annotation list time-window filters expect epoch milliseconds, even though annotation annotation update can return a timestamp string. Convert the returned time before you feed it back into updateTimeFrom or updateTimeTo.
- Disposable debug notes should be deleted when the workflow ends so shared environments do not accumulate stale annotations.
Operator workflow
- Use this skill for element annotations only.
- If the operator is discussing an event timeline, switch to
event annotations *.
- Read the element annotation list first and capture the
annotationId before any update or delete.
update and delete operate on the annotation record, not on the element itself.
- Re-read with a
content filter first, then widen to the unfiltered first page if needed, to confirm the final text and timestamps.
- When you need an
updateTime* filter after update, normalize the returned timestamp to epoch milliseconds before the reread.
Key commands
idmp-cli schema annotation.annotation.list
idmp-cli annotation annotation list --params '{"elementId":123,"current":1,"size":20}'
idmp-cli annotation annotation list --params '{"elementId":123,"content":"copilot note","current":1,"size":1}'
idmp-cli schema annotation.annotation.create
idmp-cli annotation annotation create --ack-risk --data '{...}'
idmp-cli schema annotation.annotation.update
idmp-cli annotation annotation update --ack-risk --data '{...}'
idmp-cli schema annotation.annotation.delete
idmp-cli annotation annotation delete --ack-risk --params '{"annotationId":456}'
Exception paths
- The list is empty: treat that as “no annotations yet,” not as a product failure.
- Reads return 404 or permission errors: verify the
elementId and the current user’s access level.
- Update or delete fails unexpectedly: confirm you passed
annotationId, not elementId.
- The operator expected event notes: switch to
event annotations * instead of forcing element commands.
- A write succeeds but the note still seems missing: remove filters and re-read the first page of results.
- Update succeeds but
updateTimeFrom filtering misses the note: convert the returned update time to epoch milliseconds and retry the filtered list.
Validation scenarios
- List annotations for a known element with
idmp-cli annotation annotation list.
- Repeat the list with a content filter and small page size to isolate one known note.
- Create a disposable annotation with
idmp-cli annotation annotation create --ack-risk.
- Update that annotation by
annotationId with idmp-cli annotation annotation update --ack-risk.
- Delete the same annotation by
annotationId and confirm it no longer appears in the list.
1---2name: idmp-annotation3description: IDMP annotation skill. Use it to read and write element annotations while keeping element annotations separate from event annotations.4---56# annotation78**Read [`../idmp-shared/SKILL.md`](../idmp-shared/SKILL.md) first.**910## What this skill covers1112- Read, create, update, and delete annotations attached to elements.13- Keep element annotations separate from event annotations, which use the `event annotations *` family.14- Use annotation IDs for follow-up changes after the initial list read.15- Use filtered rereads by `content` or time window to prove the exact note you just changed.1617## Recommended shortcuts1819| Shortcut | Purpose |20|----------|---------|21| `+list` | List annotations for one element, optionally filtered by content |2223## Recommended reference2425- [`Annotation read flows`](references/annotation-read-flows.md)2627## Missing context to resolve first2829| Context | Why it must be resolved before mutation |30| --- | --- |31| Annotation scope | Decide whether the note belongs to an element or an event before choosing the command family. |32| Owner element | Element annotation create needs the final `elementId`. |33| Target annotation ID | Update and delete need `annotationId`, not the element ID. |34| Verification plan | Decide how you will reread the annotation list after create, update, and delete. |3536## Constrained live behaviors3738- `annotation annotation create` writes element annotations only; event notes use the `event annotations *` family.39- `annotation annotation update` and `annotation annotation delete` act on `annotationId`, not on the owner element.40- Annotation writes are not complete until `annotation annotation list` reread shows the expected text or confirms deletion.41- `annotation annotation list` supports `content`, time windows, and small page sizes, so use filtered rereads before widening to the full page.42- `annotation annotation list` time-window filters expect epoch milliseconds, even though `annotation annotation update` can return a timestamp string. Convert the returned time before you feed it back into `updateTimeFrom` or `updateTimeTo`.43- Disposable debug notes should be deleted when the workflow ends so shared environments do not accumulate stale annotations.4445## Operator workflow46471. Use this skill for element annotations only.482. If the operator is discussing an event timeline, switch to `event annotations *`.493. Read the element annotation list first and capture the `annotationId` before any update or delete.504. `update` and `delete` operate on the annotation record, not on the element itself.515. Re-read with a `content` filter first, then widen to the unfiltered first page if needed, to confirm the final text and timestamps.526. When you need an `updateTime*` filter after `update`, normalize the returned timestamp to epoch milliseconds before the reread.5354## Key commands5556```bash57idmp-cli schema annotation.annotation.list58idmp-cli annotation annotation list --params '{"elementId":123,"current":1,"size":20}'59idmp-cli annotation annotation list --params '{"elementId":123,"content":"copilot note","current":1,"size":1}'6061idmp-cli schema annotation.annotation.create62idmp-cli annotation annotation create --ack-risk --data '{...}'6364idmp-cli schema annotation.annotation.update65idmp-cli annotation annotation update --ack-risk --data '{...}'6667idmp-cli schema annotation.annotation.delete68idmp-cli annotation annotation delete --ack-risk --params '{"annotationId":456}'69```7071## Exception paths7273- The list is empty: treat that as “no annotations yet,” not as a product failure.74- Reads return 404 or permission errors: verify the `elementId` and the current user’s access level.75- Update or delete fails unexpectedly: confirm you passed `annotationId`, not `elementId`.76- The operator expected event notes: switch to `event annotations *` instead of forcing element commands.77- A write succeeds but the note still seems missing: remove filters and re-read the first page of results.78- Update succeeds but `updateTimeFrom` filtering misses the note: convert the returned update time to epoch milliseconds and retry the filtered list.7980## Validation scenarios81821. List annotations for a known element with `idmp-cli annotation annotation list`.832. Repeat the list with a content filter and small page size to isolate one known note.843. Create a disposable annotation with `idmp-cli annotation annotation create --ack-risk`.854. Update that annotation by `annotationId` with `idmp-cli annotation annotation update --ack-risk`.865. Delete the same annotation by `annotationId` and confirm it no longer appears in the list.