Skip to content

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:

<!-- CHECKLIST_STATE: eyJzZWN0aW9ucyI6W...base64... -->

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:

  1. Find the bot's managed comment
  2. Click ···Edit
  3. Look for the <!-- CHECKLIST_STATE: ... --> HTML comment at the end
  4. Copy the base64 value and decode: echo "eyJ..." | base64 -d | jq .