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.

Funder rule packs

A rule pack is a declarative YAML file describing everything the engine needs to lint and scaffold a grant for one funder: its sections and limits, formatting rules (each with a citation), budget caps, portal quirks, spelling locale, and review rubric. Packs live under grantkit/data/funders/; the stem of the filename is the pack id (nsf-pappg.yamlnsf-pappg).

Packs that ship today

Pack idFunderNotes
nsf-pappgNational Science FoundationPAPPG 24-1; full content engine + merit-review rubric.
nuffield-rdaNuffield FoundationRDA full application; en-GB; plain-text portal.
pbifPublic Benefit Innovation FundSection list only; no limits are published.

Using a pack

grantkit init --funder <id> scaffolds from a pack. At runtime a grant is matched to a pack by its pack: field, then by funder name.

Schema

The full schema is documented in grantkit/packs/schema.py. Top-level keys:

KeyTypeNotes
idstring, requiredMatches the filename stem.
namestring, requiredFunder name.
programstringDefault program/solicitation.
versionstringFunder-guidance version (e.g. PAPPG 24-1).
source_urlstringCanonical solicitation/policy URL.
localeen-US | en-GBSpelling locale enforced by check.
provenancestringHow the pack’s values were sourced.
content_enginensf_pappg | nullA named programmatic content checker.
sectionslistid/title/word_limit/char_limit/page_limit/required/description/file.
formatting_ruleslistid/description/severity/citation/url/quote/applies_to.
budget_rulesmappingtotal_cap/annual_cap/indirect_rate_max/mtdc_excludes/currency.
portalmappingaccepts_markdown/plain_text_boxes/url.
review_rubriclistAssessment criteria for grantkit review.

Contributing a pack

  1. Copy an existing pack and rename it to <funder>.yaml.

  2. Only encode what you can source. Leave a limit null if the funder does not publish one — never invent a number. Absence of a limit is unknown, not unlimited.

  3. Record provenance. Add a provenance: field and inline comments citing where each value came from (URL, solicitation, or a reference application).

  4. Set the essentials: locale and portal.accepts_markdown drive the spelling and plain-text checks.

  5. Cite formatting rules. Every formatting_rules entry should carry a citation (and ideally a url and verbatim quote).

  6. Validate and test:

    python -c "from grantkit.packs import load_pack; load_pack('your-pack')"

    load_pack validates against the schema and raises on any error. Add a case to tests/test_packs.py asserting your sourced values.

Content engines

Most formatting rules are documentation the linter surfaces but cannot verify from Markdown (font size, margins — these are PDF-level). A pack can opt into a content engine — a named programmatic checker — via content_engine. Today the only engine is nsf_pappg, which runs the NSF PAPPG content validator (prohibited URLs/emails, required Intellectual Merit / Broader Impacts statements, non-ASCII detection) over the response sections.