Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

Artifacts

GrantKit writes three machine-readable artifacts. status.json is the stable public contract other tools depend on; assembled.html and check.json are convenience outputs.

status.json

Written by grantkit status --json and always by grantkit build, into the grant project root. It is the canonical, versioned description of a proposal’s state — completion, per-section word counts, and the current lint results. External consumers (dashboards, the PolicyEngine/CRM viewing surface, agents) should treat this file as the API.

Shape

{
  "grantkit_version": "0.2.0",
  "generated_at": "2026-07-07T12:00:00+00:00",
  "grant": {
    "title": "PolicyEngine UK",
    "funder": "Nuffield Foundation",
    "program": "Research, Development and Analysis Fund",
    "deadline": "2026-01-14"
  },
  "completion": {
    "sections_total": 14,
    "sections_complete": 9,
    "words_total": 6421,
    "percent": 64.3
  },
  "sections": [
    {
      "id": "project_summary",
      "title": "Project Summary",
      "words": 240,
      "word_limit": 250,
      "status": "complete",
      "issues": []
    }
  ],
  "checks": {
    "errors": 0,
    "warnings": 2,
    "items": [
      {
        "level": "warning",
        "rule": "placeholder_text",
        "message": "'J) Timetable' still contains placeholder text: [TO BE COMPLETED].",
        "section": "j_timetable",
        "citation": null
      }
    ]
  }
}

Fields

PathTypeDescription
grantkit_versionstringGrantKit version that produced the file (semver).
generated_atstringISO 8601 timestamp (UTC, with offset).
grant.titlestringProposal title (may be empty).
grant.funderstringFunder name.
grant.programstringProgram / solicitation.
grant.deadlinestringYYYY-MM-DD, or "" if unset.
completion.sections_totalintNumber of sections defined.
completion.sections_completeintSections with status == "complete".
completion.words_totalintSum of section word counts.
completion.percentfloatsections_complete / sections_total * 100, one decimal.
sections[].idstringStable section id.
sections[].titlestringHuman title.
sections[].wordsintWord count (Markdown markup stripped).
sections[].word_limitint | nullLimit from grant.yaml, or null.
sections[].statusenumOne of complete, partial, empty, over_limit.
sections[].issuesstring[]Human-readable per-section notes (limits, placeholders).
checks.errorsintNumber of error-level findings.
checks.warningsintNumber of warning-level findings.
checks.items[].levelenumerror or warning.
checks.items[].rulestringStable rule id (e.g. word_limit_exceeded).
checks.items[].messagestringHuman-readable description.
checks.items[].sectionstring | nullSection id the finding belongs to, or null.
checks.items[].citationstring | nullSource citation (e.g. a PAPPG reference) or null.

Section status values

StatusMeaning
completeNon-empty, within limits, no placeholder text.
partialNon-empty but contains placeholder text.
emptyNo content (missing file or zero words).
over_limitExceeds its word or character limit.

Compatibility

assembled.html

Written by grantkit build --share. A single self-contained (no external assets) HTML review page: per-section cards with word counts and status badges, a completion summary, deadline countdown, and the list of check findings. Safe to publish as a CI artifact or open locally.

check.json

Not written by the CLI directly, but produced in CI by grantkit check --json > check.json. It is exactly the checks block of status.json:

{ "errors": 0, "warnings": 2, "items": [ ... ] }