Completing a to-do
A CompleteAction for a finished Task. The task is part of a Project and an area (isPartOf), and has a Tag (about).
Records are keyed by the app's own IDs. The app has one user, so the agent is keyed by source only and marked as you with sameAs.
{
"@type": "CompleteAction",
"@key": ["@type", "source", "sourceId"],
"source": "things-todo",
"sourceId": "5nT2kQv8Lw3xRb1YcHd9pA",
"timestamp": "2026-04-02T17:45:10.000Z",
"agent": {
"@type": "Agent",
"@key": ["@type", "source"],
"source": "things-todo",
"name": "Sam Rivera",
"sameAs": ["@me"]
},
"object": {
"@type": "Task",
"@key": ["@type", "source", "sourceId"],
"source": "things-todo",
"sourceId": "5nT2kQv8Lw3xRb1YcHd9pA",
"name": "Renew passport",
"description": "Two photos are in the top desk drawer.",
"isPartOf": [
{
"@type": "Project",
"@key": ["@type", "source", "sourceId"],
"source": "things-todo",
"sourceId": "Hq4mVz7Ns2Ck8Ew5Ty1Lp",
"name": "Trip to Lisbon"
},
{
"@type": "Collection",
"@key": ["@type", "source", "sourceId"],
"source": "things-todo",
"sourceId": "Ua6Rj3Mf9Xs2Gb7Kd4Wn8e",
"name": "Personal"
}
],
"about": [
{
"@type": "Tag",
"@key": ["@type", "source", "sourceId"],
"source": "things-todo",
"sourceId": "Zc1Fy8Pq5Hv3Ln6Jt2Bs9o",
"handle": "errands",
"name": "errands"
}
]
}
}{
"@context": {
"@vocab": "https://schema.chronicle.app/",
"doc": "https://schema.chronicle.app/docs/"
},
"@type": "CompleteAction",
"doc:key": {
"@list": ["@type", "source", "sourceId"]
},
"source": "things-todo",
"sourceId": "5nT2kQv8Lw3xRb1YcHd9pA",
"timestamp": {
"@value": "2026-04-02T17:45:10.000Z",
"@type": "http://www.w3.org/2001/XMLSchema#dateTime"
},
"agent": {
"@type": "Agent",
"doc:key": {
"@list": ["@type", "source"]
},
"source": "things-todo",
"name": "Sam Rivera",
"sameAs": ["@me"]
},
"object": {
"@type": "Task",
"doc:key": {
"@list": ["@type", "source", "sourceId"]
},
"source": "things-todo",
"sourceId": "5nT2kQv8Lw3xRb1YcHd9pA",
"name": "Renew passport",
"description": "Two photos are in the top desk drawer.",
"isPartOf": [
{
"@type": "Project",
"doc:key": {
"@list": ["@type", "source", "sourceId"]
},
"source": "things-todo",
"sourceId": "Hq4mVz7Ns2Ck8Ew5Ty1Lp",
"name": "Trip to Lisbon"
},
{
"@type": "Collection",
"doc:key": {
"@list": ["@type", "source", "sourceId"]
},
"source": "things-todo",
"sourceId": "Ua6Rj3Mf9Xs2Gb7Kd4Wn8e",
"name": "Personal"
}
],
"about": [
{
"@type": "Tag",
"doc:key": {
"@list": ["@type", "source", "sourceId"]
},
"source": "things-todo",
"sourceId": "Zc1Fy8Pq5Hv3Ln6Jt2Bs9o",
"handle": "errands",
"name": "errands"
}
]
}
}@prefix : <https://schema.chronicle.app/> .
@prefix doc: <https://schema.chronicle.app/docs/> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
[
a :CompleteAction;
doc:key ("@type" "source" "sourceId");
:source "things-todo";
:sourceId "5nT2kQv8Lw3xRb1YcHd9pA";
:timestamp "2026-04-02T17:45:10.000Z"^^xsd:dateTime;
:agent [
a :Agent;
doc:key ("@type" "source");
:source "things-todo";
:name "Sam Rivera";
:sameAs "@me"
];
:object [
a :Task;
doc:key ("@type" "source" "sourceId");
:source "things-todo";
:sourceId "5nT2kQv8Lw3xRb1YcHd9pA";
:name "Renew passport";
:description "Two photos are in the top desk drawer.";
:isPartOf [
a :Project;
doc:key ("@type" "source" "sourceId");
:source "things-todo";
:sourceId "Hq4mVz7Ns2Ck8Ew5Ty1Lp";
:name "Trip to Lisbon"
], [
a :Collection;
doc:key ("@type" "source" "sourceId");
:source "things-todo";
:sourceId "Ua6Rj3Mf9Xs2Gb7Kd4Wn8e";
:name "Personal"
];
:about [
a :Tag;
doc:key ("@type" "source" "sourceId");
:source "things-todo";
:sourceId "Zc1Fy8Pq5Hv3Ln6Jt2Bs9o";
:handle "errands";
:name "errands"
]
]
] .
Terms in this example
ActionAgentCollectionCompleteActionProjectTagTaskaboutisPartOfsource