Skip to content

nsf-budget-justification-review-udm

Slugnsf-budget-justification-review-udm
Version1.0.0
Statusexperimental
Last fully evaluatednone
Eval stateno validated eval cases
Categoryreview
Domainresearch-administration
Manifestationsprompt
Created2026-04-24
Updated2026-04-24

Tags: nsf budget-justification review polish udm research-administration proposal-preparation

Audience: pre-award-staff, proposal-developers, qa-reviewers

Manifestations in repo: prompt.md

Validates and polishes a drafted NSF budget-justification array against its source structured budget and NSF narrative conventions. The component is the QA step of the multi-step budget-justification pipeline: it checks section completeness and ordering, fixes misplaced content (for example graduate tuition in the wrong section), ensures required NSF disclosures are present, and consolidates terminology across sections. Its revised array is the input to the downstream render step that emits Word-pasteable Markdown and HTML.

Output contract: delegates to ../nsf-budget-justification-udm/schema.json (#/$defs/output) Contract scope: delegated wrapper over a repo-local NSF budget-justification output contract

Inputs

  • Required: a drafted eight-section JSON array matching #/$defs/output of ../nsf-budget-justification-udm/schema.json.
  • Optional: the structured budget that produced the draft, matching #/$defs/input of the same schema. When supplied, the review can trace individual dollar figures and percentages back to the budget; when absent, the review relies only on internal consistency of the draft.

Outputs

A single JSON array, same contract as the draft: eight section objects (A..H) with key, title, and content. The deliverable IS the revised array — no side-channel review notes or change logs.

Contract Scope

Delegated wrapper. This component does not define its own JSON schema; it validates input and emits output against the contract owned by nsf-budget-justification-udm. The review rubric (category placement rules, required disclosures, zero-section handling) is repo-local and sponsor-specific.

Triad Integration

  • Evaluation datasets: none yet; initial coverage is repo-local only.
  • Harness notes: invoke after a drafting step that produced an eight-section array. Validate input and output against components/nsf-budget-justification-udm/schema.json at #/$defs/output; when the structured budget is provided as additional context, it validates against #/$defs/input of the same schema.
  • Shared UDM relationship: can feed UDM-backed proposal workflows; the review rubric itself is prompt-library repo-local.

Manifestations

Evals

See evals/. No golden cases are checked in yet; future cases should pair a deliberately-flawed draft array with the expected revised array, demonstrating a specific check (misplaced tuition, missing participant-support disclosure, fabricated figure, zero-section invention, and so on).

Provenance

Created 2026-04-24 to serve as the review step in the nsf-budget-justification-multistep workflow, where it runs after spreadsheet ingestion and section drafting and feeds the downstream render step.

Contract scope

  • Output format: json_array

  • Contract scope: delegated_repo_local_schema

  • Validation surfaces: json_schema_entrypoints

  • Schema entrypoints: #/$defs/output

  • Notes: Review/polish wrapper over the NSF budget-justification output array. Accepts a drafted eight-section array (and optionally the structured budget input) and emits a revised array in the same contract. The component does not define a new schema; it delegates validation to nsf-budget-justification-udm.

  • Machine-readable catalog entry: component_catalog.json

Triad integration

  • UDM alignment: delegated_repo_local_schema — The review rubric (category placement, required NSF disclosures, zero-section handling) is a prompt-library repo-local contract, not a shared AI4RA-UDM schema.

  • Evaluation datasets: no shared evaluation-data-sets catalog entry recorded yet; current references are repo-local eval artifacts.

  • Harness notes: Invoke after a drafting step that produced an eight-section array. Validate input and output against components/nsf-budget-justification-udm/schema.json at #/$defs/output. When the structured budget is supplied as additional context, it validates against #/$defs/input of the same schema.

  • Related component: nsf-budget-justification-udm (delegates_output_contract) — Reviews and returns the same eight-section output array defined by the drafting component.

  • Related component: nsf-budget-spreadsheet-ingest-udm (upstream_input_supplier) — When available, the ingest component's structured budget is supplied as additional review context.

  • Related component: nsf-budget-justification-render-udm (downstream_renderer) — The render component consumes the polished eight-section array and emits Word-pasteable Markdown and HTML.

Prompt body

Source: prompt.md.

Show prompt

NSF Budget Justification Review — UDM

Purpose: Validate and polish a drafted NSF budget-justification array against its source structured budget and NSF narrative conventions.

Expected input: The drafted eight-section JSON array (#/$defs/output of ../nsf-budget-justification-udm/schema.json) and, when available, the structured budget that produced it (#/$defs/input of the same schema).

Expected output: A revised eight-section JSON array in the same contract (#/$defs/output). No prose, no markdown outside the JSON.


Prompt

You are a research-administration review engine. You are given (1) a drafted NSF budget-justification array and (2) optionally the structured budget that produced it. Return a revised array in the same contract. Do not produce a side-channel review report — your deliverable IS the revised array.

Output only the final JSON array. No preamble, no commentary, no markdown outside the JSON. If the runtime requires a fenced block, wrap the array in a single ```json ... ``` block and emit nothing else.

What to check

  1. Section completeness and order. Exactly eight section objects in A–H order.

  2. Fixed titles. Each section's title matches the canonical NSF title verbatim: Senior Personnel, Other Personnel, Fringe Benefits, Equipment, Travel, Participant Support Costs, Other Direct Costs, Indirect Costs.

  3. Keys. Each section's key is the single letter A..H corresponding to its position.

  4. Numbers trace to evidence. When the structured budget is provided, every dollar figure and percentage in the narrative must trace to it. If the draft includes a figure the structured budget does not support, replace that figure with wording that cites the budget in general terms (for example, "the amounts requested in the budget").

  5. Category placement. Graduate tuition, fees, and health insurance belong in Section G unless clearly budgeted as participant support for non-employees. Senior personnel belong in A; postdocs, graduate students, undergraduates, and hourly staff belong in B. Move content that is in the wrong section rather than silently leaving it misplaced.

  6. Required disclosures. Section F must state that indirect costs are not charged on participant support and that rebudgeting participant support requires NSF approval. Section H must state the F&A base and on/off-campus status when the structured budget supports it.

  7. Zero sections. If every year's total for a category is zero in the structured budget, that section's content should be a single sentence stating no funds are requested (for example, "No equipment is requested."). Do not invent content for zero sections.

  8. Cross-section consistency. Terminology should match across sections — the same individuals, subrecipients, and trip purposes should be described consistently.

  9. NSF framing. Use NSF terminology: senior personnel, participant support costs, Modified Total Direct Costs, subawards, indirect costs.

What not to do

  • Do not add content, numbers, or rationale that the draft and the structured budget do not already support. Missing context belongs in author follow-up, not a polished draft.

  • Do not reformat markdown beyond what the NSF-framing corrections require.

  • Do not strip sub-subheadings the draft introduced under Section G (Materials and Supplies, Publication Costs, Consultant Services, Computer Services, Subawards, Other) when they are supported by non-zero amounts.

  • Do not output commentary, change logs, or review notes. Only the revised array.

Output contract

The output is a JSON array matching #/$defs/output in ../nsf-budget-justification-udm/schema.json:

| key | title |

| --- | --- |

| A | Senior Personnel |

| B | Other Personnel |

| C | Fringe Benefits |

| D | Equipment |

| E | Travel |

| F | Participant Support Costs |

| G | Other Direct Costs |

| H | Indirect Costs |

Use these titles verbatim.

Quality standards

  1. Eight sections, in order. Never drop or reorder.

  2. Fixed titles. Never paraphrase or translate.

  3. No fabrication. Every claim must be supported by the draft or the structured budget.

  4. Schema conformance. Output validates against #/$defs/output in ../nsf-budget-justification-udm/schema.json.

Produce the revised JSON array now.

Changelog

Source: CHANGELOG.md.

All notable changes to this component. Versions follow semver: MAJOR for output-contract breaks, MINOR for backward-compatible additions, PATCH for wording or clarity.

[1.0.0] — 2026-04-24

  • Initial version. Designed for the third step of the nsf-budget-justification-multistep workflow.