State Model¶
All checklist state is stored inside the managed bot comment — no external database.
Storage format¶
State lives in a hidden HTML comment embedded in the bot's managed comment body:
The value is base64(JSON). GitHub renders the comment body normally; the HTML comment is invisible to end users but parseable by the app.
JSON schema¶
{
"sections": [
{
"title": "Security",
"items": [
{
"id": "s1",
"label": "Reviewed by security",
"docUrl": "https://wiki.example.com/security-review",
"status": "done"
},
{
"id": "s2",
"label": "PII audit",
"docUrl": null,
"status": "exception",
"approvedBy": "alice"
}
]
},
{
"title": "Release",
"items": [
{
"id": "r1",
"label": "Changelog entry added",
"docUrl": null,
"status": "pending"
}
]
}
]
}
Field reference¶
Section¶
| Field | Type | Description |
|---|---|---|
title |
string | Section heading from the template ## header |
items |
Item[] | Ordered list of checklist items in this section |
Item¶
| Field | Type | Description |
|---|---|---|
id |
string | Stable identifier ({section-index}{item-index}, e.g. s1, r2) |
label |
string | Display text — link text if the template used [text](url), otherwise raw text |
docUrl |
string | null | Documentation URL if the template item had a link, otherwise null |
status |
string | One of pending, done, na, exception |
approvedBy |
string | undefined | GitHub login of the approver (only present when status is exception) |
Reading state manually¶
To inspect the raw state on any issue:
- Find the bot's managed comment
- Click ··· → Edit
- Look for the
<!-- CHECKLIST_STATE: ... -->HTML comment at the end - Copy the base64 value and decode:
echo "eyJ..." | base64 -d | jq .