U of I × MindRouter App Gallery

Data Management Plan Builder

Research Built with Goose v1.50.0 Critic status: shipped

Data Management Plan Builder

Guided NSF / NIH data management and sharing plans

Answer a short guided interview about your project's data and get a well-structured Data Management and Sharing Plan in the section order NSF and NIH reviewers expect — with storage, security and repository choices spelled out.

Data Management Plan Builder running on a desktop screen, guided nsf / nih data management and sharing plans Desktop · click to enlarge
Data Management Plan Builder running on a phone, guided nsf / nih data management and sharing plans
Phone · click to enlarge

What it is ✎ blurb written by the AI critic

Pick NSF, NIH or USDA-NIFA and answer a step-by-step interview to draft a data management and sharing plan in that sponsor's current format. NSF uses the 2026 Research.gov webform with one entry per data category; NIH uses the 2026 eight-element format. A live preview counts words and estimates pages, a reviewer checklist shows what is still missing, and drafts save in your browser and export to Markdown or a print view. A labelled example plan shows what a finished plan looks like.

Try this

  1. Start with NSF, add two categories in step 1, then on Public Archiving set 'Apply to' to one category and click a repository card
  2. Switch to NIH, answer No to element 2 and see element 4 become required in the wizard and the checklist
  3. Click Load example, then open Print view to see a finished, clearly labelled sample plan

Highlights ✎ written by the AI critic

  • Section prompts quoted from NSF's 2026 Research.gov webform help, NIH's 2026 DMS Plan format (NOT-OD-26-046) and NIFA's guidance, each with its source and effective date
  • NSF plans are built per data or research product category, with a repository and storage/security picker that applies to one category or all of them
  • Live preview with per-section word counts, NIH word limits, NIFA's two-page limit and a page estimate
  • Reviewer checklist and completion panel that jump to missing steps; NIH element 4 becomes required when you answer No
  • Illustrative example plans for all three sponsors, glossary tooltips, Markdown export and a print view

Who it's for

Faculty writing proposals, graduate students, research data librarians

Features

  • Step-by-step wizard with progress rail, validation and the ability to jump between steps
  • Sponsor switch (NSF / NIH / USDA-NIFA generic) that changes sections and wording
  • Live two-pane preview that updates as you type, with word counts per section and a page-length estimate
  • Checklist score showing which reviewer-expected elements are still missing
  • Save/restore drafts in the browser, export Markdown and a print-ready view
  • Glossary tooltips for terms like 'metadata standard', 'embargo', 'controlled access'

Data & sources

Full data provenance ✎ written by the AI reviewer

SOURCES — dmp-builder raw downloads

Retrieval date for every file: 2026-09-13. Retrieved with curl (HTTP GET, no query parameters, no request body, User-Agent UIdaho-gallery-data-prep/1.0). Every file is the unmodified response body, saved byte-for-byte. The only renaming is the local filename. Nothing in this directory is derived, filtered or reshaped. Two NIFA PDFs are raw copies from the Internet Archive (Wayback Machine) because the publisher's server would not serve them; see §3.

All files are official U.S. federal government works (NIH/HHS, NSF, USDA-NIFA). Under 17 U.S.C. §105 they are in the public domain in the United States, so they can be quoted and adapted freely. Attribution is still good practice, and none of it may imply agency endorsement. The Wayback copies are also subject to the Internet Archive Terms of Use; the documents themselves remain public-domain government works.

Total size of the 17 data files: 1,499,200 bytes (~1.43 MB). A follow-up on 2026-09-13 added an 18th file, lib-uidaho_nifa-dmp-guide.html (15,093 bytes, §3.4); all 18 files total 1,514,293 bytes.


READ THIS FIRST — what is current (important for the section templates)

The SPEC's element lists match the pre-2026 rules of both agencies. Both agencies changed their DMS plan formats in 2026:

SponsorCurrent rule as of 2026-09-13What the SPEC lists
NIH2026 DMS Plan format (NOT-OD-26-046, released Feb 25, 2026): 3 yes/no questions, a limitations narrative (≤300 words), a human-participant privacy yes/no/NA, a data-type → repository table (≤100 words) and 2 Genomic Data Sharing (GDS) yes/no/NA questions. Required for applications with due dates on or after May 25, 2026 and for progress reports. It supersedes the six "Elements" of NOT-OD-21-014. The underlying policy (NOT-OD-21-013, effective Jan 25, 2023) is unchanged.The six 2023 elements (Data Type; Related Tools, Software and/or Code; Standards; Data Preservation, Access, and Associated Timelines; Access, Distribution, or Reuse Considerations; Oversight). These are now the legacy 2023 format.
NSFPAPPG NSF 24-1 (effective May 20, 2024) is still the current PAPPG; NSF has deferred a new edition. Its DMSP section Chapter II.D.2.i(ii) was revised by Supplement 1 (NSF 26-200, Dec 8, 2025) and Supplement 2 (NSF 26-202, Jan 22, 2026). Since April 27, 2026 the DMSP is created in a Research.gov webform, not uploaded as a two-page PDF. The form has 8 fields per "data or research product category". Supplement 2 struck the two-page limit and the five "may include" items. Recipients must share all data supporting NSF-funded publications at the time of publication; exceptions must be justified in the DMSP.The five PAPPG 24-1 "may include" items (types of data; standards; access and sharing; re-use; archiving). NSF's own "Preparing Your DMSP" page (last updated June 2, 2026) still lists them as "Content that may be included under the general guidelines", but the PAPPG text itself no longer does.
USDA-NIFAFive DMP components; two-page limit, not counted in the project narrative (NIFA page last updated March 25, 2026). The March 2026 guidance PDF could not be downloaded (§3; retried again by the follow-up driver on 2026-09-13 with curl, headless Chromium and WebFetch, all failed). The U of I Library guide (§3.4, April 16, 2026) confirms the March 2026 update and the two-page limit. The component headings below come from the verified 2019-09-26 edition.(generic)

Owner decision (2026-09-13, recorded in SPEC.md): the 2026 formats are the default and only templates for each sponsor — NIH per NOT-OD-26-046, NSF per NSF 26-202 including the Research.gov DMSP webform structure, USDA-NIFA per its current guidance (official NIFA web page text + the most recent retrievable component headings, labelled as such because the March 2026 PDF could not be obtained). Pre-2026 formats (NIH 2023 six elements, NSF PAPPG 24-1 five items) may appear only as a short note ("older solicitations may still require the previous format"), never as the default or a selectable template. Label each template with its source and effective date.


1. NIH (National Institutes of Health, Office of Extramural Research / Office of Science Policy)

1.1 nih_writing-dms-plan.html — "Writing a Data Management and Sharing Plan"
  • URL: https://grants.nih.gov/policy-and-compliance/policy-topics/sharing-policies/dms/writing-dms-plan (GET). The URL named in the task, https://sharing.nih.gov/data-management-and-sharing-policy/planning-and-budgeting-for-data-management-and-sharing/writing-a-data-management-and-sharing-plan, now redirects here. The sharing.nih.gov content moved to grants.nih.gov.

  • Publisher: NIH Office of Extramural Research (grants.nih.gov). Retrieved: 2026-09-13. Size: 197,369 bytes, HTML (UTF-8, Drupal).

  • Version/date: footer "This page last updated on: July 22, 2026". Banner: "Required Format for Data Management and Sharing Plans Now in Effect — The 2026 DMS Plan format (DOCX, 37 KB) is now required for all competing and non-competing awards."

  • Contents: 1 guidance page. It gives the 8 elements of the 2026 format with tips, plus sections headed "Maximum Appropriate Sharing of Scientific Data", "Submitting Data Management and Sharing Plans", "Assessment of Data Management and Sharing Plans", "Revising Data Management and Sharing Plans" and "Additional Considerations".

  • Parsing notes: a large sidebar navigation comes before the content. Start at the second occurrence of "Writing a Data Management and Sharing Plan" / "Scope Note". Element list is under "Data Management and Sharing Plan Format" ("Prepare your DMS Plan using the required 2026 DMS Plan Format Page ... which includes the following elements"). Content ends before "Glossary Entry" / "This page last updated on".

  • Required elements (2026 format), quoted from this page:

    1. "Will there be maximum appropriate sharing of scientific data underlying peer-reviewed publications and other findings resulting from the work supported by this award (including preprints, refereed papers reported at conferences, and other findings)? [YES/NO]"

    2. "Will the scientific data underlying peer-reviewed publications be shared by the time of publication or, for other findings, by the end of the period of performance, which includes no-cost extensions? [YES/NO]"

    3. "Will shared scientific data be made available for at least as long as required by applicable data repository policies and/or journal policies? [YES/NO]"

    4. "If you answered “no” to elements 1, 2, or 3, or if you anticipate that sharing will be limited in some other way, please describe these limitations and the ethical, legal, or technical factors for them. Your response should specify a particular reason(s) for limiting sharing. [300 words maximum]"

    5. "If scientific data derived from human research participants will be shared, will privacy, rights, and confidentiality of participants be protected as outlined in NOT-OD-22-213, including whether any scientific data will be shared using access controls? [YES/NO/Not Applicable]"

    6. "In table format, please list [100 words maximum]:" (a) "Key types of scientific data anticipated to be generated during the project, including the species and modality, if known (e.g., “human genomic data,” “rat functional magnetic resonance imaging data”)" and (b) "The repository or an example of a repository where the scientific data may be managed and shared, if the scientific data is known at time of application. NIH expects the use of established repositories for preserving and sharing scientific data when they are available."

    7. "For studies subject to the NIH Genomic Data Sharing Policy (GDS) (e.g., using NIH funds to generate large-scale human genomic data): Will you share all large-scale human genomic and associated data in a NIH-designated repository according to the accelerated timelines expected in the GDS Policy? ... [YES/NO/Not Applicable]. If “no,” address in element 4."

    8. "Do you anticipate that when sharing large-scale human genomic data that you will be able to meet the expectations of the Institutional Certification in the GDS Policy? [YES/NO/Not Applicable] If “no,” address in element 4."

  • Page-only quirks (verifier, 2026-09-13): element 6 on this page is followed by the extra sentence "The table provided includes columns for expected data types and repositories." Element 7 prints "If “no,” address in element 4." twice (before and after "[YES/NO/Not Applicable]"), which is a typo on the page. "Tip"/"Tips" boxes follow several elements; they are guidance, not part of the prompt.

  • Useful for the checklist or glossary, from "Maximum Appropriate Sharing of Scientific Data":

    • Justifiable reasons to limit sharing: informed consent will not permit or will limit sharing; existing consent prohibits or limits sharing; participant privacy or safety would be compromised and protective measures (de-identification, Certificates of Confidentiality) would be insufficient; explicit federal, state, local or Tribal law prohibits disclosure; restrictions from existing or anticipated agreements (third-party funders, partners, repositories, HIPAA covered entities under a data use agreement, licensing limitations); datasets cannot practically be digitized with reasonable efforts.

    • "generally not" justifiable: data are considered too small; data researchers anticipate will not be widely used; data are not thought to have a suitable repository.

    • Submission and review: submitted in the “Other Plan(s)” field on the PHS 398 Research Plan (or the Career Development Award Supplemental Form); a brief summary and costs go in the budget justification; NIH IC program staff assess the Plan; "Peer reviewers are not asked to comment on the DMS Plan and the plan is not factored into the Overall Impact score, unless sharing data is integral to the project design and specified in the funding opportunity".

    • Revisions: updated plans are approved by the funding ICO, and compliance is monitored through the RPPR.

  • License: U.S. government work, public domain.

  • Citation: National Institutes of Health. "Writing a Data Management and Sharing Plan." grants.nih.gov, updated July 22, 2026. https://grants.nih.gov/policy-and-compliance/policy-topics/sharing-policies/dms/writing-dms-plan (accessed 2026-09-13).

1.2 nih_NOT-OD-26-046_updated-elements-of-dms-plan.html — NOT-OD-26-046
  • URL: https://grants.nih.gov/grants/guide/notice-files/NOT-OD-26-046.html (GET). Publisher: NIH, Office of Policy for Extramural Research Administration. Retrieved: 2026-09-13. Size: 17,725 bytes, HTML.

  • Title: "NOT-OD-26-046: Updated Elements of an NIH Data Management and Sharing Plan". Release date: February 25, 2026. "This notice supersedes NOT-OD-21-014." "Effective for applications submitted for due dates on or after May 25, 2026, applicants and recipients are required to utilize the new, simpler format ... as a pilot".

  • Contents: the authoritative list of the same 8 elements as §1.1, headed "Data Management and Sharing Plan Elements should include only the following:".

    • The three official wordings are NOT identical (notice §1.2 vs web page §1.1 vs DOCX §1.4; corrected by verifier 2026-09-13 after reading all three):

      • Element 1: notice "referenced papers"; page and DOCX "refereed papers".

      • Element 5: notice "... as outlined in NOT-OD-22-213, including whether any scientific data will be shared using access controls? [YES/NO]"; page has the same clause but "[YES/NO/Not Applicable]"; the DOCX drops the access-controls clause ("... as outlined in NOT-OD-22-213?") and gives Yes/No/Not Applicable.

      • Element 6: notice and DOCX "In the table below, please list [100 words maximum]:"; page "In table format, please list [100 words maximum]:".

      • Element 8: notice "Do you anticipate that when sharing large-scale human genomic data that you will be able to meet the expectations of the Institutional Certification in the GDS Policy (https://grants.nih.gov/grants/guide/notice-files/NOT-OD-14-124.html; IV.C.5)? [YES/NO/Not Applicable]"; page is the same without the parenthetical link; DOCX shortens it to "Do you anticipate that when sharing you will be able to meet the expectations of the Institutional Certification in the GDS Policy?"

    • Recommendation: the DOCX (§1.4) is the form applicants actually fill in, so use its wording (quoted verbatim in §1.4) for template prompts; the page's extra clause in element 5 ("including whether any scientific data will be shared using access controls") is a useful helper hint.

  • Parsing notes: NIH Guide layout: ASCII HTML with CRLF line endings; tag names are uppercase in places (the title is <TITLE>NOT-OD-26-046: ..., so match case-insensitively). <h2> sections are "Key Dates", "Related Announcements", "Issued by", "Purpose" and "Inquiries". The element list is inside "Purpose". Contact e-mail addresses are Cloudflare-obfuscated ("[email protected]" with a /cdn-cgi/l/email-protection#... link) and a Cloudflare __CF$cv$params script sits at the end; both change on every request, so byte hashes of a re-fetch differ even when the content is the same.

  • License: public domain.

  • Citation: NIH. "Updated Elements of an NIH Data Management and Sharing Plan." Notice NOT-OD-26-046, February 25, 2026. https://grants.nih.gov/grants/guide/notice-files/NOT-OD-26-046.html

1.3 nih_NOT-OD-21-014_elements-of-dms-plan.html — NOT-OD-21-014 (superseded; legacy six elements)
  • URL: https://grants.nih.gov/grants/guide/notice-files/NOT-OD-21-014.html (GET). Publisher: NIH Office of the Director (Office of Science Policy). Retrieved: 2026-09-13. Size: 31,451 bytes, HTML.

  • Title: "NOT-OD-21-014: Supplemental Information to the NIH Policy for Data Management and Sharing: Elements of an NIH Data Management and Sharing Plan". Release date: October 29, 2020.

    • Applied from Jan 25, 2023 (the policy's effective date). Superseded by NOT-OD-26-046 for due dates on or after May 25, 2026; the Related Announcements list now shows NOT-OD-26-046 first.

    • "outlines the Elements to be addressed in a Plan within two pages or less"; "NIH recommends addressing all Elements described below."

  • The six elements (headings quoted):

    1. "Data Type" — "A general summary of the types and estimated amount of scientific data to be generated and/or used in the research"; "A description of which scientific data from the project will be preserved and shared"; "A brief listing of the metadata, other relevant data, and any associated documentation (e.g., study protocols and data collection instruments)".

    2. "Related Tools, Software and/or Code" — whether specialized tools are needed to access or manipulate shared data, their names, how they can be accessed, and whether they will remain available.

    3. "Standards" — "what standards will be applied to the scientific data and associated metadata (i.e., data formats, data dictionaries, data identifiers, definitions, unique identifiers, and other data documentation)"; the plan may state that no consensus standards exist.

    4. "Data Preservation, Access, and Associated Timelines" — repository name(s) (see NOT-OD-21-016); "How the scientific data will be findable and identifiable, i.e., via a persistent unique identifier"; when data become available and for how long ("no later than time of an associated publication or end of the performance period, whichever comes first").

    5. "Access, Distribution, or Reuse Considerations" — informed consent; privacy and confidentiality protections (de-identification, Certificates of Confidentiality); "Whether access to scientific data derived from humans will be controlled"; restrictions from laws, policies or agreements; other considerations.

    6. "Oversight of Data Management and Sharing" — "Indicate how compliance with the Plan will be monitored and managed, frequency of oversight, and by whom (e.g., titles, roles)."

  • Footnote [1] defines "Scientific data".

  • Parsing notes: same NIH Guide layout as §1.2. The elements are in "Purpose".

  • License: public domain.

  • Citation: NIH. "Supplemental Information to the NIH Policy for Data Management and Sharing: Elements of an NIH Data Management and Sharing Plan." NOT-OD-21-014, October 29, 2020 (superseded by NOT-OD-26-046). https://grants.nih.gov/grants/guide/notice-files/NOT-OD-21-014.html

1.4 nih_dms-plan-format-page-2026.docx — 2026 DMS Plan Format Page (required format)
  • URL: https://grants.nih.gov/sites/default/files/dms-blank-format-page-2026.docx (GET). Publisher: NIH OER. Retrieved: 2026-09-13. Size: 37,281 bytes, DOCX (Office Open XML).

    • DOCX core properties: created 2026-04-15T11:15Z, modified 2026-04-15T12:26Z.

  • Contents: blank format page titled "DATA MANAGEMENT AND SHARING PLAN". Its preamble says "The DMS Plan must be provided in the format shown below."

    • The 8 element prompts appear in the order of §1.1. Answer boxes are the literal characters "Yes☐ No☐" or "Yes☐ No☐ Not Applicable☐".

    • There is 1 table with column headers "Expected Data Type" and "Established Repository or Example".

    • 36 <w:p> paragraphs (23 with text).

  • Verbatim prompts in the DOCX (verifier, 2026-09-13; concatenated <w:t> runs; "(i)" marks italic instruction text):

    1. "Will there be maximum appropriate sharing of scientific data underlying peer-reviewed publications and other findings resulting from the work supported by this award (including preprints, refereed papers reported at conferences, and other findings)?" then "Yes☐ No☐"

    2. "Will the scientific data underlying peer-reviewed publications be shared by the time of publication, or for other findings, by the end of the period of performance, which includes no-cost extensions?" then "Yes☐ No☐"

    3. "Will shared scientific data be made available for at least as long as required by applicable data repository policies and/or journal policies?" then "Yes☐ No☐"

    4. (i) "If you answered “no” to elements 1, 2, or 3, or if you anticipate that sharing will be limited in some other way, please describe these limitations and the ethical, legal, or technical factors for them. Your response should specify a particular reason(s) for limiting sharing. [300 words maximum]"

    5. "If scientific data derived from human research participants will be shared, will privacy, rights, and confidentiality of participants be protected as outlined in NOT-OD-22-213?" then "Yes☐ No☐ Not Applicable☐"

    6. (i) "In the table below, please list [100 words maximum]:" with sub-items (i) "Key types of scientific data anticipated to be generated during the project, including the species and modality, if known (e.g., “human genomic data,” “rat functional magnetic resonance imaging data”). NIH recognizes that not all data types expected to be generated in the study will meet the definition of scientific data or can be anticipated in advance. If a data type does not appear on the list, it does not imply that that data type will not be shared if it is generated in the study." and (i) "The repository or an example of a repository where the scientific data may be managed and shared, if the scientific data is known at time of application. NIH expects the use of established repositories for preserving and sharing scientific data when they are available." then the table "Expected Data Type | Established Repository or Example" (header row plus empty rows).

  • GDS lead-in (a numbered paragraph of its own): "For studies subject to the NIH Genomic Data Sharing Policy (GDS) (e.g., using NIH funds to generate large-scale human genomic data):"

  1. (i) "Will you share all large-scale human genomic and associated data in a NIH-designated repository according to the accelerated timelines expected in the GDS Policy?" then "Yes☐ No☐ Not Applicable☐" then (i) "If “no,” address in element 4."

  2. "Do you anticipate that when sharing you will be able to meet the expectations of the Institutional Certification in the GDS Policy?" then "Yes☐ No☐ Not Applicable☐" then (i) "If “no,” address in element 4."

  • Parsing notes: unzip and read word/document.xml. Paragraph text is the concatenated <w:t> runs inside <w:p>. Italic instructional text is meant to be deleted by applicants. Element numbers are Word auto-numbering (<w:numPr> with w:numId="27"), not literal text, so "1." to "8." never appear in <w:t>; use the numbering properties instead. The top level (w:ilvl="0") has 7 items: elements 1 to 6 plus the GDS lead-in paragraph as item 7. The two GDS questions (elements 7 and 8 in the notice and on the web page) are level-1 sub-items (w:ilvl="1") under that lead-in. So the DOCX shows 7 top-level numbers while NIH text elsewhere counts 8 elements, and "address in element 4" refers to the limitations narrative in both schemes. The two table-column sub-items use w:numId="28". Some prompts end with a trailing space.

  • License: public domain.

  • Citation: NIH. "Data Management and Sharing Plan Format Page (2026)." DOCX. https://grants.nih.gov/sites/default/files/dms-blank-format-page-2026.docx

1.5 nih_dms-plan-format-page-2023.docx — 2023 DMS Plan Format Page (legacy)
  • URL: https://grants.nih.gov/sites/default/files/uploaded/DMS-Plan-blank-format-page.docx (GET). Publisher: NIH OER. Retrieved: 2026-09-13. Size: 36,691 bytes, DOCX.

    • Core properties: created and modified 2026-02-19 (re-saved file; the format dates from 2023).

  • Contents: the format that goes with NOT-OD-21-014. "The Plan is recommended not to exceed two pages." "The DMS Plan may be provided in the format shown below." Headings, quoted:

    • "Element 1: Data Type", with sub-prompts "Types and amount of scientific data expected to be generated in the project:", "Scientific data that will be preserved and shared, and the rationale for doing so:" and "Metadata, other relevant data, and associated documentation:"

    • "Element 2: Related Tools, Software and/or Code:"

    • "Element 3: Standards:"

    • "Element 4: Data Preservation, Access, and Associated Timelines", with "Repository where scientific data and metadata will be archived:", "How scientific data will be findable and identifiable:" and "When and how long the scientific data will be made available:"

    • "Element 5: Access, Distribution, or Reuse Considerations", with "Factors affecting subsequent access, distribution, or reuse of scientific data:", "Whether access to scientific data will be controlled:" and "Protections for privacy, rights, and confidentiality of human research participants:"

    • "Element 6: Oversight of Data Management and Sharing:"

    • 42 paragraphs, 0 tables. Includes the OMB burden statement (PRA 0925-0001/0002).

  • Parsing notes: as in §1.4. "Element N: ..." headings are plain paragraphs (literal text); sub-prompts are auto-numbered list paragraphs (numId 19 in Element 1, 22 in Element 4, 23 in Element 5), each followed by an italic instruction paragraph. Exception: in Element 5 the first two sub-prompts are a single paragraph with no separator between the label and the italic instruction ("...reuse of scientific data:NIH expects that..." and "Whether access to scientific data will be controlled:State whether..."), so split on the first colon.

  • License: public domain.

  • Citation: NIH. "Data Management and Sharing Plan Format Page (2023)." DOCX. https://grants.nih.gov/sites/default/files/uploaded/DMS-Plan-blank-format-page.docx

1.6 nih_dms-plan-format-page_forms-directory.html — "Data Management and Sharing Plan Format Page" (forms directory)
  • URL: https://grants.nih.gov/grants-process/write-application/forms-directory/data-management-and-sharing-plan-format-page (GET). Publisher: NIH OER. Retrieved: 2026-09-13. Size: 98,659 bytes, HTML.

  • Contents: landing page for both format pages. "2026 DMS Plan Format Now Required — With the May 25, 2026 transition date behind us, the 2026 DMS Plan format must be used for all applications and progress reports."

    • Links to the 2026 DOCX (§1.4) and 2023 DOCX (§1.5).

    • "Updated Date: April 2026"; "This page last updated on: April 15, 2026".

  • License: public domain.

  • Citation: NIH. "Data Management and Sharing Plan Format Page." Forms Directory, updated April 15, 2026. (URL above)

1.7 nih_nexus-2026-04-29_pilot-dms-format.html — NIH Extramural Nexus news item
  • URL: https://grants.nih.gov/news-events/nih-extramural-nexus-news/2026/04/2026-pilot-data-management-and-sharing-plan-format-available (GET). Publisher: NIH OER. Retrieved: 2026-09-13. Size: 50,734 bytes, HTML.

  • Contents: announcement dated April 29, 2026, "2026 Pilot Data Management and Sharing Plan Format Available".

    • "The NIH DMS policy that went into effect in 2023 has not changed."

    • "Applicants and recipients are required to use the new format for applications with due dates on or after May 25, 2026. Both the new format and the 2023 format will be accepted for due dates before May 25."

    • "The update replaces the previous guidance for DMS Plan elements (NOT-OD-21-014)."

    • The page shows a "Redirect Notice" banner (normal site chrome; the content is the real article).

  • License: public domain.

  • Citation: NIH Extramural Nexus. "2026 Pilot Data Management and Sharing Plan Format Available." April 29, 2026. (URL above)

1.8 nih_NOT-OD-21-013_final-dms-policy.html — NOT-OD-21-013, Final NIH Policy for Data Management and Sharing
  • URL: https://grants.nih.gov/grants/guide/notice-files/NOT-OD-21-013.html (GET). Publisher: NIH Office of the Director. Retrieved: 2026-09-13. Size: 139,504 bytes, HTML.

  • Title: "NOT-OD-21-013: Final NIH Policy for Data Management and Sharing". Release date: October 29, 2020. Effective date: January 25, 2023.

    • Still in force; only the plan format changed in 2026.

    • Note: the task text called NOT-OD-21-014 the "Final NIH Policy". The Final Policy is actually NOT-OD-21-013, and NOT-OD-21-014 is the Elements supplement. Both are saved.

  • Contents: policy sections "Section I. Purpose", "Section II. Definitions", "Section III. Scope", "Section IV. Effective Date(s)", "Section V. Requirements", "Section VI. Data Management and Sharing Plans", followed by further sections (compliance and enforcement, etc.).

    • Section II defines "Scientific Data", "Data Management", "Data Sharing", "Metadata" and "Data Management and Sharing Plan (Plan)". This is good source text for glossary tooltips.

    • Section V requires "Submission of a Data Management and Sharing Plan" and "Compliance with the awardee’s plan as approved by the NIH ICO."

  • Parsing notes: NIH Guide layout (see §1.2 notes: uppercase <TITLE>, CRLF, obfuscated e-mails). Key Dates is a two-column layout, so a text dump reads "Release Date: Effective Date: October 29, 2020 January 25, 2023" (labels first, then values). The policy text follows "The final DMS policy is set forth below." Section headings are plain text lines "Section N. ...": I Purpose, II Definitions, III Scope, IV Effective Date(s), V Requirements, VI Data Management and Sharing Plans, VII Managing and Sharing Scientific Data, VIII Compliance and Enforcement. The Section II definitions do not include "controlled access" or "embargo"; the closest official text for "controlled access" is the 2023 DOCX Element 5 prompt ("made available by a data repository only after approval").

  • License: public domain.

  • Citation: NIH. "Final NIH Policy for Data Management and Sharing." NOT-OD-21-013, October 29, 2020 (effective January 25, 2023). https://grants.nih.gov/grants/guide/notice-files/NOT-OD-21-013.html


2. NSF (U.S. National Science Foundation)

2.1 nsf_pappg-landing.html — PAPPG landing page (version evidence)
  • URL: https://www.nsf.gov/policies/pappg (GET). Publisher: NSF. Retrieved: 2026-09-13. Size: 75,004 bytes, HTML.

  • Contents: "Current version: NSF 24-1"; "NSF 24-1 applies to all proposals submitted or due on or after May 20, 2024."

    • "Policy changes to PAPPG 24-1": "Supplement 1 (NSF 26-200) Applies to all financial assistance awarded on or after Dec. 8, 2025"; "Supplement 2 (NSF 26-202) Applies to all financial assistance awarded on or after Jan. 22, 2026".

    • Previous versions: 23-1 (Jan 30, 2023), 22-1, 20-1, 19-1, 18-1, 17-1.

    • Footer: "Publication date: October 26, 2022 Last updated: August 3, 2026". The page also carries a banner inviting feedback on NSF's draft "Guidance on Financial Assistance", which NSF says will replace the PAPPG in future; no replacement was in effect on 2026-09-13.

  • License: public domain.

  • Citation: NSF. "Proposal & Award Policies & Procedures Guide (PAPPG)." https://www.nsf.gov/policies/pappg (accessed 2026-09-13).

2.2 nsf_pappg-24-1_ch2-proposal-preparation.html — PAPPG NSF 24-1, Chapter II (contains II.D.2.i(ii))
  • URL: https://www.nsf.gov/policies/pappg/24-1/ch-2-proposal-preparation (GET). Publisher: NSF. Retrieved: 2026-09-13. Size: 315,217 bytes, HTML.

    • Page footer: "Publication date: October 26, 2022; Last updated: August 8, 2025".

    • Top banner: "Important policy updates: NSF has issued supplemental policy notices NSF 26-200 and NSF 26-202 ...".

  • Why the whole chapter: NSF publishes Chapter II as one HTML page. There is no smaller page for the DMSP section alone.

  • Relevant section: text anchor "(ii) Data Management and Sharing Plan ." under "Special Information and Supplementary Documentation". The section runs until "(iii) Documentation of Collaborative Arrangements". This is the unrevised 24-1 text; §2.3 and §2.4 revise it. Quoted:

    • "Proposals must include a document of no more than two pages uploaded under “Data Management and Sharing Plan” in the supplementary documentation section of Research.gov. This supplementary document should describe how the proposal will conform to NSF policy on the dissemination and sharing of research results (see Chapter XI.D.4), and may include:"

      1. "the types of data, samples, physical collections, software, curriculum materials, and other materials to be produced in the course of the project;"

      2. "the standards to be used for data and metadata format and content (where existing standards are absent or deemed inadequate, this should be documented along with any proposed solutions or remedies);"

      3. "policies for access and sharing including provisions for appropriate protection of privacy, confidentiality, security, intellectual property, or other rights or requirements;"

      4. "policies and provisions for re-use, re-distribution, and the production of derivatives; and"

      5. "plans for archiving data, samples, and other research products, and for preservation of access to them."

    • Also in the 24-1 text:

      • Directorate/Office/Division/Program-specific requirements apply where they exist.

      • Collaborative proposals and proposals with subawards include one combined DMSP.

      • Overflow may use part of the 15-page Project Description, but the DMSP "must not be used to circumvent" that limit.

      • "reviewed as an integral part of the proposal, considered under Intellectual Merit or Broader Impacts or both".

      • "A valid Data Management and Sharing Plan may include only the statement that no detailed plan is needed ... accompanied by a clear justification."

  • License: public domain.

  • Citation: NSF. Proposal & Award Policies & Procedures Guide (NSF 24-1), Chapter II.D.2.i(ii), "Data Management and Sharing Plan." Effective May 20, 2024. https://www.nsf.gov/policies/pappg/24-1/ch-2-proposal-preparation

2.3 nsf_pappg-24-1_supplement-2_NSF-26-202.html — PAPPG 24-1 Supplement 2 (NSF 26-202): the current DMSP text
  • URL: https://www.nsf.gov/policies/document/pappg24-1-supplement-2 (GET; the DMSP part has anchor #dmsp). Publisher: NSF Office of Award Management, Financial Assistance Requirements Branch. Retrieved: 2026-09-13. Size: 73,968 bytes, HTML.

  • Version: issuance and effective date Jan. 22, 2026; "Publication date: January 22, 2026; Last updated: January 29, 2026".

    • "The information set out in this notice takes precedence over existing policies and procedures in PAPPG 24-1."

    • Note: "The Research.gov tool referred to in this section will be released on April 27, 2026. Proposals submitted before that date should continue preparing the DMSP as a PDF upload."

  • Sections: "1. Public Access to Research Products" (XI.D.2.c), "2. Dissemination and Sharing of Research Results" (XI.D.4), "3. Data Management and Sharing Plan" (II.D.2.(i).(ii)).

  • Parsing notes (important): the page-top alert banner misspells the plan as "DSMP" ("continue preparing the DSMP as a PDF upload"); the note inside section 3 spells it correctly. Revisions are shown as markup. Added text is in <u> and removed text is in <s>. A plain text dump merges them, so read the tags. The DMSP part starts at "3. Data Management and Sharing Plan" and ends before "Contact information"; within it there are 8 <u> and 11 <s> elements (verifier count). Some struck fragments are single words or commas (e.g. <s>supplementary </s>, <s>,</s>, <s>Data Management and Sharing Plan</s> replaced by <u>DMSP</u>), so drop <s> content before joining text, and normalise whitespace afterwards.

  • Revised II.D.2.i(ii), in effect for proposals from April 27, 2026 (additions kept, strikethrough removed):

"(ii) Data Management and Sharing Plan (DMSP). Proposals must include a DMSP created using the tool implemented on Research.gov. This document should describe how the proposal will conform to NSF policy on the dissemination and sharing of research results (see Chapter XI.D.4). Recipients are required to share all data supporting NSF funded publications at the time of publication. Exceptions to this sharing requirement must be described and justified within the DMSP. Data management and sharing requirements and plans specific to the NSF unit relevant to a proposal are available on the NSF website. If guidance specific to the unit is not available, then the requirements established in this section apply. Simultaneously submitted collaborative proposals and proposals that include subawards are a single unified project and should include only one DMSP, regardless of the number of non-lead collaborative proposals or subawards included. The DMSP will be reviewed as an integral part of the proposal, considered under Intellectual Merit or Broader Impacts or both, as appropriate for the scientific community of relevance. A valid DMSP may include only the statement that no detailed plan is needed, for example, if no data, samples, physical collections, software, curriculum materials, or other materials are to be produced in the course of the project. However, such a statement must be accompanied by a clear justification."
  • Struck by NSF 26-202:

    • the "document of no more than two pages uploaded ..." wording;

    • the whole ", and may include: 1. the types of data ... 5. plans for archiving ..." list;

    • "In such collaborative proposals, the Data Management and Sharing Plan should discuss the relevant data issues in the context of the collaboration.";

    • the paragraph allowing overflow into the 15-page Project Description.

  • Also revised in XI.D.4.b (sharing expectations):

    • "Exceptions to this sharing requirement ... must be detailed in the DMSP at the time of original proposal submission";

    • changes to the DMSP after award that change objectives or scope need prior written approval from the NSF Program Officer.

  • Also revised in XI.D.2.c (public access):

    • Author Accepted Manuscripts must be deposited in NSF's Public Access Repository (PAR) at or before publication;

    • "Scientific datasets underlying peer-reviewed scholarly publications ... should be made publicly available as per the Data Management and Sharing Plan";

    • researchers are encouraged to deposit datasets in repositories that assign a persistent identifier (PID) such as a DOI.

  • License: public domain.

  • Citation: NSF. "Policy Notice: Implementation of Policy Changes to PAPPG 24-1, Supplement 2." NSF 26-202, January 22, 2026. https://www.nsf.gov/policies/document/pappg24-1-supplement-2

2.4 nsf_pappg-24-1_supplement-1_NSF-26-200.html — PAPPG 24-1 Supplement 1 (NSF 26-200)
  • URL: https://www.nsf.gov/policies/document/pappg24-1-supplement-1 (GET). Publisher: NSF. Retrieved: 2026-09-13. Size: 86,258 bytes, HTML.

  • Version: issuance and effective date Dec. 8, 2025.

  • Relevant part: "5. Data Management and Sharing Plans". It explains Gold Standard Science: "publications and supporting data are to be made publicly and freely available at the time of publication. A justification must be provided if there are any access limitations for supporting data."

    • It adds (in <u>) to II.D.2.i(ii): "Recipients are required to share all data supporting NSF funded publications at the time of publication. Exceptions to this sharing requirement should be described and justified within the DMSP."

    • NSF 26-202 later changed "should" to "must".

    • The other sections of this notice do not concern DMS plans.

  • Parsing notes: additions are in <u>. The section runs from "5. Data Management and Sharing Plans" to "6. Proposal Specific Revision Thresholds".

  • License: public domain.

  • Citation: NSF. "Policy Notice: Implementation of Policy Changes to PAPPG 24-1, Supplement 1." NSF 26-200, December 8, 2025. https://www.nsf.gov/policies/document/pappg24-1-supplement-1

2.5 nsf_research-gov_dmsp-tool-help.html — Research.gov DMSP webform field guidance
  • URL: https://www.research.gov/research-web/content/DMSP (GET). Publisher: NSF (Research.gov). Retrieved: 2026-09-13. Size: 25,629 bytes, HTML.

    • Meta tags: dc.date.created 2025-04-15, dc.date.reviewed 2026-04-29.

  • Contents: public help text for the webform required from April 27, 2026. Intro: "Complete the Data Management and Sharing Plan for the primary Directorate you are applying to, or provide a justification if a detailed Data Management and Sharing Plan is not needed. Refer to the funding opportunity for specific guidance on how to complete this section. This section may not be used to circumvent the Project Description page limit."

  • The form is repeated for each data or research product category. "Each distinct category should receive its own entry ... it is sufficient simply to specify each high-level category."

    • Each field has a title: a predefined pull-down choice, or a custom value via "Add New".

    • Each field also has an optional description.

  • The 8 section headings, quoted in order:

    1. "Data or Research Product Category General Information"

    2. "Access Policies and Limitations" — select all that apply, or "Not Applicable". "Note: Unless 'Not Applicable' is selected, an explanation and justification of the concern must be provided below."

    3. "Data Standards and Metadata" — format and/or metadata standard; if none exists, "specify relevant data formatting information as appropriate."

    4. "Data or Research Product Provenance" — e.g., "New Data Collection", data reuse, shared facility. "Note: If data is coming from an existing dataset or existing data resource, it m

How it was built

Written by Goose 1.50.0 (github.com) on qwen/qwen3.8-27b, served by MindRouter, the University of Idaho's on-premises AI platform.

20harness rounds
234.6minutes of harness work (3.9 h)
3,653lines of code
209KB, single-file app

Rounds by kind

build1
feedback7
continue7
critic5

Lines of code per file

body html180
app css747
app js1,895
scripts831

Critic scores ✎ scored by the independent AI critic, 1–10

visual 8 out of 10
usefulness 8 out of 10
correctness 8 out of 10
interactivity 8 out of 10

Independent audits ✎ by the AI critic

Data honesty: checked against raw data Authorship audit: every app-code commit is a harness round

Automated checks

Console no console errors No network 0 external requests Phone layout 0 px overflow Canvases no empty canvases Brand header header present No key leak no key in source

Checked by critic-verify.

Data spot checks ✎ written by the AI critic

  • NSF 'Effective: April 27, 2026' = NSF 26-202 raw: 'The Research.gov tool ... will be released on April 27, 2026' (match)
  • NSF eight Research.gov section headings (General Information, Access Policies and Limitations, Data Standards and Metadata, Provenance, Public Archiving, Timeline for Public Accessibility, Data Availability, Accountability) and the notes 'Unless Not Applicable is selected...' / 'less than two years after project completion' = Research.gov DMSP help raw (match)
  • NIH 'Due dates on or after May 25, 2026', 'Release Date: February 25, 2026', '[300 words maximum]', '[100 words maximum]' = NOT-OD-26-046 raw; element prompts = 2026 DMS Plan Format Page DOCX raw (match)
  • NIH element 5 access-controls wording is in NOT-OD-26-046 but not in the 2026 DOCX; the hint now attributes it to NOT-OD-26-046 (fixed in round 19)
  • NIFA 'Page last updated: March 25, 2026' = NIFA DMP page raw; 'limited to two pages' and 'Last Updated April 16, 2026' = U of I Library NIFA guide raw (match); component headings labelled as the Sept 26, 2019 edition
Show all 8 spot checks
  • Computed: NIH example element 4 = 38 words, element 6 table = 13 words (Python split), total 51 -> 51/450 = 0.11 -> app '51 words, about 0.1 pages' (match)
  • Computed: NIFA example 142 words -> 0.32 -> app 'about 0.3 pages'; 770-word NIFA answer -> 1.71 -> app 'about 1.7 pages', not flagged over the 2-page limit (match)
  • Computed: typed NIH element 4 of 32 words + table 10 words -> app '32 words / 300 words max', '10 / 100 words max', total 42 words, about 0.1 pages (match)
Build notes ✎ written by the AI reviewer

FOLLOW-UP 2026-09-13. The project owner decided that the current 2026 formats are the default and only formats: NIH per NOT-OD-26-046, NSF per NSF 26-202 including the Research.gov DMSP webform, and USDA-NIFA per its March 2026 guidance. All app code was written by Goose 1.50.0 on MindRouter default-agent. The driver did not edit src/, scripts/ or data/embed/, and no TAMPER GUARD appeared.

  • What the driver did: Audited the running app in Chromium (audit-start/) against data/raw and SOURCES.md. The NIH 2026 and NSF Research.gov headings were already the default, but the NSF form was 8 free-text boxes with no per-category Title/Description structure, and the legacy NSF/NIH templates were still selectable. Other gaps: NSF hints and a checklist item came from the struck 2024 PAPPG text, provenance had no checklist item, Element 4 was always required, word/page limits were not checklist items, NIFA had no two-page warning and was labelled '2019 edition', and the glossary cited superseded documents.

  • Retried the March 2026 NIFA PDF (curl HTTP/1.1, 1.0 and 2 with two user agents, headless Chromium after loading the NIFA page, WebFetch, two URL spellings). All attempts timed out or returned HTTP/2 INTERNAL_ERROR.

  • Saved the U of I Library NIFA guide (April 16, 2026; confirms the March 2026 update and the two-page limit) as data/raw/lib-uidaho_nifa-dmp-guide.html. Documented the retry, the fallback and the owner decision in SOURCES.md (commit 08f73d3).

  • Recorded the decision in SPEC.md (commit 9828355).

  • Rounds: Round 15 (feedback, 6 items, 13 min) implemented everything: legacy formats removed, per-category Research.gov structure with example chips and conditional notes, new NSF/NIH/NIFA checklists, NIFA honest note and 2-page flag, glossary/source fixes.

  • The driver's Playwright checks then found real bugs: renaming a category erased its answers (fields keyed by title), an untitled row dropped the checklist to 1/8, the toolbar sponsor switch replaced the official note (including the NIFA disclosure) with a one-line summary, Data Availability wrongly required a description for a duration, both notes named both sponsors' old formats, and NSF source lines still cited 'PAPPG 24-1 (May 20, 2024)'.

  • Round 16 (feedback, those 6 items) was spoiled from its first turn: 'Tool read_file was not advertised for this model turn', then 399 shell calls with 'missing field command' until the action limit. No app change (same index md5), 0 network errors. This is the same malformed-tool-call failure the critic saw in rounds 13–14.

  • Round 17 (continue, same prompt) fixed all 6 items in 4 min: stable category ids with draft migration, untitled rows ignored, note kept, availability optional, own-format notes, current source lines.

  • Final driver check (check_2026b.py): 28/28 pass. Official verify: 0 errors, 0 external requests, no phone overflow, 198 KB.

FEEDBACK.md was removed and the deletion committed (50009ee). Follow-up totals: 3 rounds (2 feedback, 1 spoiled; 1 continue), 25.3 harness minutes. App totals: 17 rounds, 227.0 minutes.

Harness behaviour: Goose again did strong work on concrete, source-quoted feedback lists and ran its own Node/puppeteer tests. It still exits 0 on spoiled rounds, so check index_md5 and the diffstat. The previous-driver fields 'rounds: 9' in the old build.json were stale; rounds.jsonl has 17 rows.

Round-by-round timeline

Every harness round, in order. The prompts and FEEDBACK.md were written by the AI reviewer; the app code was written by the harness. Expand a round to see the exact prompt and the FEEDBACK.md the harness received.

    1 build 45.0 min · 10 files changed, 3335 insertions(+), 3 deletions(-) Show prompt

    Prompt given to the harness:

    Read AGENTS.md, SPEC.md and BRAND.md in this directory. Then build the complete app they describe, step by step: first write a script in scripts/ (Python 3 standard library only) that writes compact JSON into data/embed/ — the section templates for each sponsor (NSF, NIH, USDA-NIFA) with their prompts and helper hints, the reviewer checklist items, the glossary terms and the example repositories — using the official wording quoted in data/raw/SOURCES.md (read its "READ THIS FIRST" section about which formats are current and label each template with its source and effective date; the original HTML/DOCX files are in data/raw/ if you want to parse them), and run it; then write src/body.html, src/app.css and src/app.js; run python3 build.py --check and fix any error it reports. The app's "Data & sources" section should link the official source pages listed in data/raw/SOURCES.md. Implement every required feature in SPEC.md with a polished, modern, responsive University of Idaho design. Do not stop until python3 build.py --check succeeds and every feature is implemented.
    

    No feedback file was sent in this round.

    4 continue 19.4 min · — Show prompt

    Prompt given to the harness:

    Read FEEDBACK.md in this directory — it lists problems a reviewer found when testing index.html in a real browser. Fix every item, keeping everything that already works, then run python3 build.py --check.
    

    No feedback file was sent in this round.

    5 continue 18.7 min · 1 file changed, 6 insertions(+) Show prompt

    Prompt given to the harness:

    Read FEEDBACK.md in this directory — it lists problems a reviewer found when testing index.html in a real browser. Fix every item, keeping everything that already works, then run python3 build.py --check.
    

    FEEDBACK.md the harness received ✎ written by the AI reviewer:

    Reviewer findings — round 2 build, tested in real Chromium (desktop 1440×900, phone 390×844)

    Big improvement, thank you. There are no console errors, and these now work: the live preview with word counts and page estimate, the checklist score, the vertical stepper with progress %, the segmented sponsor switch, yes/no pills, the NIH table, save/resume, Markdown export, the print overlay, Reset with confirmation, and the phone Form/Preview toggle. Keep all of that. Remaining problems, most important first:

    Working note (two previous sessions stalled on this): do not grep, cat or sed the built index.html or any browser DOM dump. They contain single lines of 25–35 KB (embedded JSON data and the base64 font). One matching line floods your context, and the session hangs. Read and edit only src/body.html, src/app.css, src/app.js, scripts/ and data/embed/ (search those files with grep -n), and use python3 build.py --check as the check. Some items below may already be fixed in the source; if so, confirm in src/ quickly and move on.
    1. Printing produces a blank page. Clicking "Print view" → "Print" (or pressing Ctrl+P) and rendering the page with print media gives a completely empty page. Cause: the print rule hides every direct child of <body> except #print-overlay, but the overlay is inside <main id="app"> (body.html is inserted inside main), so the rule hides it together with main. Expected: printing shows only the plan document (title block, every section and answer, the NIH table) in black on white, with no header, footer, toolbar, wizard or glossary. Headings should not be left alone at the bottom of a page.

    2. The Format selector is still stale for USDA-NIFA (item 11 last round is not fixed). Switch NSF → NIH → USDA-NIFA. The Format group stays visible and still lists "2026 DMS Plan format (current)" and "2023 six-element format (legacy)", which are NIH's formats. Meanwhile the step header says "USDA-NIFA · Five DMP components". Expected: the options are rebuilt for each sponsor (NSF shows its two formats, NIH shows its two), and the Format group is hidden for USDA-NIFA, which has one format.

    3. The NIH 2026 checklist can never reach 100 %. With the NIH "2026 DMS Plan format (current)" selected, I answered all 8 elements. The checklist still showed "Standards for data & metadata (2023 element 3)" and "Oversight: who monitors compliance (2023 element 6)" as missing, because the 2026 format has no step where they can be answered. Expected: every counted checklist item for the selected format can be satisfied by a step in that format. Either list those two as optional "good practice" items that are not counted in the score, or add an optional step for them.

    4. Glossary terms look like boxed buttons. Every annotated term ("embargo", "Metadata", "controlled access" …) has a gray rectangular border on all four sides (the browser's default button border) in addition to the dotted underline. Expected: only the dotted gold underline (plus the subtle hover tint), no box, and the text should look exactly like the surrounding text.

    5. Terms are annotated in headings, and too often. "DATA MANAGEMENT" in the preview plan title is annotated. So are step titles ("Data Standards and Metadata", "Element 6 — Data type → repository table"), preview section headings, and the table column header "Established Repository or Example". The NIH element 6 prompt marks "scientific data" 4 times and "repository" 5 times, which is very noisy. Expected: annotate only running body text (prompts, hints and answer text in the preview), never titles, headings, labels or buttons, and only the first occurrence of each term in each block.

    6. Repository cards and option chips insert a bare name, not wording. On NSF "Public Archiving", I typed "Existing sentence about archiving." and clicked the Zenodo card, then the "University-managed research storage…" chip. The answer became Existing sentence about archiving. Zenodo University-managed research storage (see U of I Research Computing and Data Services). That is not a usable sentence. Expected: each choice adds a complete sentence suited to the step, on its own line (e.g. "Data will be deposited in Zenodo, a general-purpose repository that assigns DOIs, and made publicly available at the time of publication."), and the preview updates. Clicking a selected card or chip again removes its sentence. Chips get a visible selected state, like the cards.

    7. The archiving/sharing step is extremely long. 7 repository cards and 17 option chips make the step about 1,800 px tall in the narrow column, so Next is far below. Expected: a compact layout, e.g. smaller 2-line repository cards in a 2-column grid, and the storage / backup / security / preservation chip groups as collapsible sections (closed by default, each showing "2 selected").

    8. On desktop the question is below the fold. The 8-row stepper (~370 px tall) sits above the question, so at 1440×900 the prompt starts around y=680 and the answer box is off-screen. Expected: the current question and its answer field are visible without scrolling. For example, use compact stepper rows (~30 px) or place the stepper as a narrow sticky column to the left of the question, while keeping the full step titles readable.

    9. The print preview "Close" button is invisible. In the black print-preview bar, "Close" looks like an empty outlined box because it has dark text on black. Expected: readable white text and a light outline.

    10. Validation is nearly invisible. Pressing Next on an empty step silently moves on. The only sign is a thin red line on that rail item, and the .field__error text stays empty. Expected: a short visible message when you leave a required step empty (e.g. an inline note or toast "Step 2 left blank — you can come back to it"), a clear "!" icon on that rail step, and an inline message next to the field when you return to it. (The red "320 / 300 words max" counter for word limits is good; keep it.)

    11. Phone (390 px): the Format select overflows its card. The text "Research.gov DMSP webform (current" is cut off at the card's right edge. Expected: the label above a full-width select that fits inside the card.

    12. "1 words". Section word counts in the preview and the answer counter say "1 words" (e.g. a Yes/No answer). Expected "1 word".

    13. Make the landing screen more inviting. It is the first thing gallery visitors see, and it is a text-only card. Expected: keep the lede and the four how-to steps, and add three clickable sponsor cards (NSF, NIH, USDA-NIFA). Each card shows the current format's name, its number of sections, its effective date and the first few section names. Clicking a card starts the wizard with that sponsor already selected. A subtle entrance animation is welcome.

    14. Link labels must match their targets. In "Data & sources", the link text "U of I Research Computing and Data Services" points to https://www.lib.uidaho.edu/services/data/, which is the Library's Data Services page. The same mismatch appears in the storage notes. Expected: label that link "U of I Library Data Services" (it is also good to link the Library's Data Management Guide, https://www.lib.uidaho.edu/services/data/data-management/). Mention Research Computing and Data Services by name as a place to ask, without inventing a URL for it.

    8 continue 5.5 min · 4 files changed, 140 insertions(+), 34 deletions(-) Show prompt

    Prompt given to the harness:

    Read FEEDBACK.md in this directory — it lists problems a reviewer found when testing index.html in a real browser. Fix every item, keeping everything that already works, then run python3 build.py --check.
    

    FEEDBACK.md the harness received ✎ written by the AI reviewer:

    Reviewer findings — current build, tested in real Chromium (1440×900, 1024×768, 820×1180, 390×844)

    • The app looks great and has no console errors. The last round's work all checks out; keep it: the 3-column desktop layout

    • the "Your plan is ready" completion panel

    • consistent gold selected states

    • styled option groups

    • neutral "good practice" checklist items

    • "Answered" on Yes/No sections

    • the preview that scrolls to and flashes the section being edited

    • the compact phone toolbar

    • the glossary and sources accordions

    Only a few problems remain, most important first.

    Working note (earlier sessions stalled on this): do not grep, cat or sed the built index.html or any browser DOM dump. They contain single lines of 25–35 KB (embedded JSON and the base64 font). Work only in src/body.html, src/app.css, src/app.js, scripts/ and data/embed/, and use python3 build.py --check as the check.
    1. Regression: the progress rail is gone below 1200 px. At 1024×768, 820×1180 and 390×844, #pane-rail has zero size (display: none). The 3-column layout only shows it at ≥ 1200 px, and the smaller layouts no longer include it. Users on laptops, tablets and phones get no step list, no check marks, no progress % and no way to jump to a step. The only sign of progress is "Step 1 of 8" beside the Next button. Expected: the rail is available at every width.

      • 1024 px (2 columns): the progress bar and stepper sit above the question inside the wizard column, compact.

      • Phone and 820 px: a horizontally scrollable strip of numbered step chips with check marks, plus the progress bar, above the question. Alternatively, a "Step 3 of 8 ▾" button that opens the step list.

        Jumping to a step and the done/error states must work there too.

    2. USDA-NIFA shows the format twice. On desktop and phone, after choosing USDA-NIFA the toolbar shows both the Format select (one option, "Five DMP components (verified 2019 edition)") and the same name again as plain text next to it. Expected: for a sponsor with a single format, show only the plain text, not the select. The select probably needs to be hidden in a way the CSS does not override.

    3. Desktop stepper titles are cut off. In the 230 px stepper column most titles end in an ellipsis: "Element 1 — Maximum…", "Element 6 — Data typ…", "Data or Research Prod…", "Data Availability (rete…". Expected: readable titles. Let them wrap to 2 lines, or drop the redundant "Element N —" prefix, since the number badge already shows it. The full title should also appear on hover.

    4. Unselected pill and chip text is off-centre. Unselected "Yes", "No" and "Not applicable" pills, and unselected storage/security chips, leave an empty gap on the left where the check icon appears when selected, so their text looks shifted right. Expected: centred text when unselected; the check icon only takes space when the item is selected.

    10 critic 9.8 min · 1 file changed, 76 insertions(+) Show prompt

    Prompt given to the harness:

    Read FEEDBACK.md in this directory — it lists problems a reviewer found when testing index.html in a real browser. Fix every item, keeping everything that already works, then run python3 build.py --check.
    

    FEEDBACK.md the harness received ✎ written by the AI reviewer:

    FEEDBACK — critic review (browser-tested at 1440, 820 and 390 px)

    Fix every item, in order. Edit src/app.js, src/app.css, src/body.html and (for data text) scripts/build_data.py, then run python3 scripts/build_data.py and python3 build.py --check. Working notes: do NOT grep or cat index.html (it is one huge generated file); do NOT write your own DOM mocks or test harnesses; do NOT use git. Make the edits directly.

    1. Data honesty: glossary quotes must match the source word for word
    • Four glossary entries say "NIH (NOT-OD-21-013, Section II): …" but the text is NOT what Section II says. Replace the def for these four with the exact official text (from data/raw/nih_NOT-OD-21-013_final-dms-policy.html): scientific data: "The recorded factual material commonly accepted in the scientific community as of sufficient quality to validate and replicate research findings, regardless of whether the data are used to support scholarly publications. Scientific data do not include laboratory notebooks, preliminary analyses, completed case report forms, drafts of scientific papers, plans for future research, peer reviews, communications with colleagues, or physical objects, such as laboratory specimens."

    • metadata: "Data that provide additional information intended to make scientific data interpretable and reusable (e.g., date, independent sample and variable construction and description, methodology, data provenance, data transformations, any intermediate or descriptive observational variables)."

    • data management: "The process of validating, organizing, protecting, maintaining, and processing scientific data to ensure the accessibility, reliability, and quality of the scientific data for its users."

    • data sharing: "The act of making scientific data available for use by others (e.g., the larger research community, institutions, the broader public), for example, via an established repository."

    Any other glossary entry that is not a verbatim quote must not look like one: start it with no agency prefix and set src to "Plain-language summary; see …".

    2. Data honesty: official prompts must be verbatim
    • The wizard shows each prompt as the official wording, with a source line. Two NIH 2026 prompts contain sentences the app added: nih-e4: remove "If you plan to hold data back for a period (an embargo) or to share it only under controlled access, explain the length and the reason." from prompt and put it in hints instead.

    • nih-e6: remove "Use the example repository and storage/security cards below to name a specific repository and the protection measures you will use." from prompt and put it in hints instead.

    3. Bug: the checklist mixes formats and legacy formats can never reach 100%

    Tested: NIH "2023 six-element (legacy)" with all 6 steps answered shows 6 / 8 (elements 7 and 8 exist only in the 2026 format). NSF "PAPPG 24-1 narrative (legacy)" with all 5 steps answered shows 5 / 9. Also, after answering only 2 steps of the NSF 2026 webform, the checklist showed 5 / 9 because answers typed earlier in the legacy format were counted. Fix: score the checklist for the current format only. For each item, keep only the match ids that are in currentSections(); hide items with no matching section in this format; only answers to sections of the current format count. The same rule applies to the Finish panel. Expected: answering every step of ANY format gives 100% and "Your plan is ready".

    4. Bug: Save / Load / Reset / sponsor-switch messages are invisible

    flashNote() writes to #draft-note, which sits inside the intro section that is hidden once the wizard starts. Clicking "Save draft" shows nothing. Show these messages with the toast instead (neutral style: a gold ✓ icon, not the "!"), and add a small "Saved · just now" status next to the Save button (the #saved-status element that updateSavedStatus() looks for does not exist).

    5. Bug: the Element 6 table word counter does not update while typing

    With rows "human survey responses → ICPSR" and "rat fMRI imaging data → OpenNeuro", the field shows "4 / 100 words max" while the preview correctly says 9 words. Update #table-count (and its .over class) on every input event, without re-rendering the inputs (keep focus and caret).

    6. Bug: the toast covers the Finish panel and the phone controls

    When Finish is clicked on a blank last step, the "left blank" toast appears on top of the completion panel (z-index 120 > 110) and on a 390 px phone it covers the "Keep editing" button; it also covers the Next button and the preview for 4 s. Fix: do not show the blank-step toast when the Finish panel opens; give the toast a z-index below the overlays; at ≤640 px, show it as a slim bar at the top of the viewport (top: 12px, left/right: 12px, border-radius 12px, font-size .8rem), and hide it after 2.5 s.

    7. Usefulness: NIH "No" answers must require Element 4
    • The NIH 2026 format says Element 4 is needed "If you answered 'no' to elements 1, 2, or 3, or if you anticipate that sharing will be limited", and elements 7 and 8 say "If 'no,' address in element 4." If any of elements 1, 2, 3, 7 or 8 is "No" and Element 4 is empty, the Element 4 checklist item is missing, with the label "Limitations required — you answered No to element 2" (list the element numbers).

    • On the Element 4 step, show a gold notice box above the textarea listing those answers.

    • If none of them is "No", an empty Element 4 counts as covered, with the label "Limitations (not needed — no 'No' answers)".

    8. Usefulness: sponsor-aware length checks and honest word totals
    • USDA-NIFA: the DMP is limited to two pages. Show the page chip as "≈ 0.4 of 2 pages"; turn it red and add a checklist warning "Over the 2-page limit" when the estimate is above 2.

    • NIH: when Element 4 is over 300 words or Element 6 is over 100 words, add a red checklist warning "Element 4 is over the 300-word limit" and list it in the Finish panel.

    • Yes/No answers currently count as 1 word in the total (e.g. 30 typed words show as "33 words"). Count only typed words in the totals and page estimate.

    9. Gallery: "Load example plan"

    First-time visitors have no quick way to see a finished plan. Add a "See an example plan" button on the landing card (next to "Start building my plan") and a "Load example" button in the toolbar. It fills every section of the current sponsor and format with a short, realistic, fictional example (NSF: soil-moisture sensor network; NIH: survey study with de-identified human participant data in ICPSR; NIFA: extension workshop evaluation data in Ag Data Commons). While example content is loaded, show a gold banner at the top of the preview: "Illustrative example — a fictional project. Replace it with your own answers." Use only the generic repositories and options already in the app; no invented University of Idaho services, names or numbers. If the user has answers, ask with confirm() before replacing them.

    10. Phone: the question is ~700 px below the top

    At 390 px the header plus the toolbar fill the whole first screen. At ≤640 px, make the toolbar compact: sponsor segmented control and format select on one row each, then the action buttons in ONE row of small buttons (font-size .75rem, padding 6px 8px) that scrolls horizontally, with Reset at the end. The progress chips should be visible without scrolling after tapping a sponsor card.

    11. Print view and Markdown keep line breaks

    Sentences added by the repository/storage cards are on separate lines in the preview but merge into one paragraph in the print view. In buildPrintHtml(), render each non-empty line as its own <p>; in planMarkdown(), separate lines with a blank line. Escape "|" inside Markdown table cells.

    11 continue 18.4 min · 5 files changed, 40 insertions(+), 23 deletions(-) Show prompt

    Prompt given to the harness:

    Read FEEDBACK.md in this directory — it lists problems a reviewer found when testing index.html in a real browser. Fix every item, keeping everything that already works, then run python3 build.py --check.
    
    IMPORTANT: a previous attempt at this same FEEDBACK.md crashed because it ran out of context by printing whole files. Follow the "Context budget" note in FEEDBACK.md exactly: never cat src/app.js, src/app.css or scripts/build_data.py in full; use grep -n plus sed -n ranges of at most 80 lines, using the line numbers listed there; never re-read a range you already read; start editing right away, one item at a time.
    

    FEEDBACK.md the harness received ✎ written by the AI reviewer:

    FEEDBACK — critic review (browser-tested at 1440, 820 and 390 px)

    Fix every item, in order. Edit src/app.js, src/app.css, src/body.html and (for data text) scripts/build_data.py, then run python3 scripts/build_data.py and python3 build.py --check. Working notes: do NOT grep or cat index.html (it is one huge generated file); do NOT write your own DOM mocks or test harnesses; do NOT use git. Make the edits directly.

    • Context budget (the previous attempt crashed with "maximum context length"): never cat a whole source file. src/app.js (1230 lines) and scripts/build_data.py (973 lines) are too big. Use grep -n to find a spot, then sed -n 'A,Bp' for at most 80 lines, and never read the same range twice. Where things are (approximate line numbers): scripts/build_data.py: NIH 2026 prompts nih-e4 and nih-e6 ≈ lines 213–290; glossary list ≈ lines 705–780.

    • src/app.js: renderTableRows ≈ 413; nextStep ≈ 603; openDonePanel ≈ 620; toast ≈ 683; renderPreview ≈ 699; wordsOf ≈ 812; renderChecklist ≈ 823; renderSponsorCards/startWizard ≈ 956–987; saveDraft/loadDraft/flashNote ≈ 992–1046; planMarkdown ≈ 1048; buildPrintHtml ≈ 1090; boot ≈ 1149.

    • src/app.css: toolbar ≈ 66; checklist ≈ 403; toast ≈ 565; phone rules @media (max-width: 640px) ≈ 597.

    Work item by item: read only the lines for that item, edit, move on. Run python3 scripts/build_data.py once after items 1–2, and python3 build.py --check at the end.

    1. Data honesty: glossary quotes must match the source word for word
    • Four glossary entries say "NIH (NOT-OD-21-013, Section II): …" but the text is NOT what Section II says. Replace the def for these four with the exact official text (from data/raw/nih_NOT-OD-21-013_final-dms-policy.html): scientific data: "The recorded factual material commonly accepted in the scientific community as of sufficient quality to validate and replicate research findings, regardless of whether the data are used to support scholarly publications. Scientific data do not include laboratory notebooks, preliminary analyses, completed case report forms, drafts of scientific papers, plans for future research, peer reviews, communications with colleagues, or physical objects, such as laboratory specimens."

    • metadata: "Data that provide additional information intended to make scientific data interpretable and reusable (e.g., date, independent sample and variable construction and description, methodology, data provenance, data transformations, any intermediate or descriptive observational variables)."

    • data management: "The process of validating, organizing, protecting, maintaining, and processing scientific data to ensure the accessibility, reliability, and quality of the scientific data for its users."

    • data sharing: "The act of making scientific data available for use by others (e.g., the larger research community, institutions, the broader public), for example, via an established repository."

    Any other glossary entry that is not a verbatim quote must not look like one: start it with no agency prefix and set src to "Plain-language summary; see …".

    2. Data honesty: official prompts must be verbatim
    • The wizard shows each prompt as the official wording, with a source line. Two NIH 2026 prompts contain sentences the app added: nih-e4: remove "If you plan to hold data back for a period (an embargo) or to share it only under controlled access, explain the length and the reason." from prompt and put it in hints instead.

    • nih-e6: remove "Use the example repository and storage/security cards below to name a specific repository and the protection measures you will use." from prompt and put it in hints instead.

    3. Bug: the checklist mixes formats and legacy formats can never reach 100%

    Tested: NIH "2023 six-element (legacy)" with all 6 steps answered shows 6 / 8 (elements 7 and 8 exist only in the 2026 format). NSF "PAPPG 24-1 narrative (legacy)" with all 5 steps answered shows 5 / 9. Also, after answering only 2 steps of the NSF 2026 webform, the checklist showed 5 / 9 because answers typed earlier in the legacy format were counted. Fix: score the checklist for the current format only. For each item, keep only the match ids that are in currentSections(); hide items with no matching section in this format; only answers to sections of the current format count. The same rule applies to the Finish panel. Expected: answering every step of ANY format gives 100% and "Your plan is ready".

    4. Bug: Save / Load / Reset / sponsor-switch messages are invisible

    flashNote() writes to #draft-note, which sits inside the intro section that is hidden once the wizard starts. Clicking "Save draft" shows nothing. Show these messages with the toast instead (neutral style: a gold ✓ icon, not the "!"), and add a small "Saved · just now" status next to the Save button (the #saved-status element that updateSavedStatus() looks for does not exist).

    5. Bug: the Element 6 table word counter does not update while typing

    With rows "human survey responses → ICPSR" and "rat fMRI imaging data → OpenNeuro", the field shows "4 / 100 words max" while the preview correctly says 9 words. Update #table-count (and its .over class) on every input event, without re-rendering the inputs (keep focus and caret).

    6. Bug: the toast covers the Finish panel and the phone controls

    When Finish is clicked on a blank last step, the "left blank" toast appears on top of the completion panel (z-index 120 > 110) and on a 390 px phone it covers the "Keep editing" button; it also covers the Next button and the preview for 4 s. Fix: do not show the blank-step toast when the Finish panel opens; give the toast a z-index below the overlays; at ≤640 px, show it as a slim bar at the top of the viewport (top: 12px, left/right: 12px, border-radius 12px, font-size .8rem), and hide it after 2.5 s.

    7. Usefulness: NIH "No" answers must require Element 4
    • The NIH 2026 format says Element 4 is needed "If you answered 'no' to elements 1, 2, or 3, or if you anticipate that sharing will be limited", and elements 7 and 8 say "If 'no,' address in element 4." If any of elements 1, 2, 3, 7 or 8 is "No" and Element 4 is empty, the Element 4 checklist item is missing, with the label "Limitations required — you answered No to element 2" (list the element numbers).

    • On the Element 4 step, show a gold notice box above the textarea listing those answers.

    • If none of them is "No", an empty Element 4 counts as covered, with the label "Limitations (not needed — no 'No' answers)".

    8. Usefulness: sponsor-aware length checks and honest word totals
    • USDA-NIFA: the DMP is limited to two pages. Show the page chip as "≈ 0.4 of 2 pages"; turn it red and add a checklist warning "Over the 2-page limit" when the estimate is above 2.

    • NIH: when Element 4 is over 300 words or Element 6 is over 100 words, add a red checklist warning "Element 4 is over the 300-word limit" and list it in the Finish panel.

    • Yes/No answers currently count as 1 word in the total (e.g. 30 typed words show as "33 words"). Count only typed words in the totals and page estimate.

    9. Gallery: "Load example plan"

    First-time visitors have no quick way to see a finished plan. Add a "See an example plan" button on the landing card (next to "Start building my plan") and a "Load example" button in the toolbar. It fills every section of the current sponsor and format with a short, realistic, fictional example (NSF: soil-moisture sensor network; NIH: survey study with de-identified human participant data in ICPSR; NIFA: extension workshop evaluation data in Ag Data Commons). While example content is loaded, show a gold banner at the top of the preview: "Illustrative example — a fictional project. Replace it with your own answers." Use only the generic repositories and options already in the app; no invented University of Idaho services, names or numbers. If the user has answers, ask with confirm() before replacing them.

    10. Phone: the question is ~700 px below the top

    At 390 px the header plus the toolbar fill the whole first screen. At ≤640 px, make the toolbar compact: sponsor segmented control and format select on one row each, then the action buttons in ONE row of small buttons (font-size .75rem, padding 6px 8px) that scrolls horizontally, with Reset at the end. The progress chips should be visible without scrolling after tapping a sponsor card.

    11. Print view and Markdown keep line breaks

    Sentences added by the repository/storage cards are on separate lines in the preview but merge into one paragraph in the print view. In buildPrintHtml(), render each non-empty line as its own <p>; in planMarkdown(), separate lines with a blank line. Escape "|" inside Markdown table cells.

    12 critic 0.9 min · 5 files changed, 147 insertions(+), 118 deletions(-) Show prompt

    Prompt given to the harness:

    Read FEEDBACK.md in this directory — it lists problems a reviewer found when testing index.html in a real browser. Fix every item, keeping everything that already works, then run python3 build.py --check.
    
    IMPORTANT: the last two attempts crashed with "maximum context length" because they read src/app.js and src/app.css over and over in chunks. This time: do NOT read any file from top to bottom and do NOT re-read anything. For each item, read ONLY the line range FEEDBACK.md names (once), edit it immediately, then move to the next item. There are only 6 small items; the whole job needs about 15 tool calls.
    

    FEEDBACK.md the harness received ✎ written by the AI reviewer:

    FEEDBACK — critic review, part 2 (browser-tested at 1440 and 390 px)

    The glossary and prompt wording fixes from the last round are done and correct; do not touch scripts/build_data.py or data/embed/ again. Six small bugs remain, all in src/app.js (plus a few CSS lines). Fix them in order.

    Context budget (READ FIRST: the last two attempts crashed with "maximum context length")
    • Do NOT read whole files and do NOT sweep through a file chunk by chunk. You do not need an overview: each item below names the exact function and line range. Run sed -n 'A,Bp' src/app.js for THAT range once, edit it right away with the text editor, then go to the next item.

    • Never re-read a range you have already read. Never cat or grep index.html. No test harnesses, no git.

    • Run python3 build.py --check once at the end.

    Line numbers below are for the current src/app.js (1230 lines) before your edits. They shift as you edit, so use grep -n "function NAME" to find a function again.

    1. Checklist must be scored for the current format only (renderChecklist lines 823–863, openDonePanel lines 620–676)

    Bug: the checklist data lists section ids from ALL formats of a sponsor. So NIH "2023 six-element (legacy)" with all 6 steps answered shows 6 / 8, and NSF "PAPPG 24-1 narrative (legacy)" with all 5 answered shows 5 / 9. Answers typed in another format also count (the NSF 2026 webform showed 5 / 9 with only 2 of its steps answered). Fix, in BOTH functions: for each checklist item, keep only the match ids for which sectionIndex(id) > -1. If none remain, skip the item entirely (not rendered, not counted, not listed as missing). ok = one of the remaining ids is answered. Careful in renderChecklist: it attaches click handlers by index (items[i]), so build the filtered list first and loop over it. Expected: answering every step of any format gives 100% and "Your plan is ready".

    2. Save / Load / Reset / sponsor-switch messages are invisible (flashNote lines 1041–1046, toast lines 683–691)

    Bug: flashNote() writes into #draft-note, which is inside the intro section that is hidden once the wizard starts. Clicking "Save draft" shows nothing. Fix: make flashNote(msg) call the toast, and give toast(msg, kind) a second argument. kind === "ok" shows a gold "✓" icon instead of the "!". Also add <span id="saved-status" class="toolbar__saved"></span> right after the Save draft button in src/body.html (line 47); updateSavedStatus() already fills it. Style: font-size .75rem, color var(--muted).

    3. The Element 6 table word counter does not update while typing (renderTableRows lines 413–447)

    Bug: with rows "human survey responses → ICPSR" and "rat fMRI imaging data → OpenNeuro", the field says "4 / 100 words max" while the preview correctly says 9 words. The count (lines 439–446) runs only when rows are re-rendered. Fix: move the count code into a small function and also call it from the two input handlers on lines 431–432. Do not re-render the rows on input, so focus stays in the field.

    4. The toast covers the Finish panel and the phone controls (nextStep lines 603–617; CSS .toast in src/app.css ≈ line 565)

    Bug: clicking "Finish ✓" on a blank last step shows the "left blank" toast ON TOP of the completion panel (toast z-index 120 > panel 110). On a 390 px phone it covers the panel's "Keep editing" button and, during the wizard, the Next button. Fix: in nextStep, do not call toast() when the step is the last one (the panel already lists what is missing). In CSS, set the toast z-index: 90 (below both overlays). Inside the existing @media (max-width: 640px) block (≈ line 597), put the toast at the top: top: 12px; bottom: auto; left: 12px; right: 12px; transform: none; max-width: none; border-radius: 12px; font-size: .8rem; padding: 8px 12px; and .toast.show { transform: none; }.

    5. Yes/No answers count as words (wordsOf lines 812–818)

    Bug: 30 typed words plus three Yes/No answers show "33 words" in the preview header and the Finish panel. Fix: wordsOf returns 0 for yesno / yesno_na sections. The per-section "Answered" label stays as it is.

    6. Print view and Markdown lose line breaks (buildPrintHtml line 1112, planMarkdown lines 1064 and 1067)

    Bug: sentences added by the repository/storage cards are on separate lines in the preview, but the print view merges them into one paragraph. Fix: in buildPrintHtml, split the answer text on "\n" and output each non-empty line as its own <p> (still passed through esc). In planMarkdown, join the non-empty lines with a blank line between them, and replace "|" with "\|" inside table cells (line 1064).

    13 critic 14.8 min · 1 file changed, 52 insertions(+), 51 deletions(-) Show prompt

    Prompt given to the harness:

    Read FEEDBACK.md in this directory — it lists problems a reviewer found when testing index.html in a real browser. Fix every item, keeping everything that already works, then run python3 build.py --check.
    
    IMPORTANT: earlier attempts crashed with "maximum context length" because they read src/app.js and src/app.css over and over. Do NOT read any file from top to bottom and do NOT re-read anything. For each item, read ONLY the line range FEEDBACK.md names (once), edit it immediately, then move to the next item. There are 4 items; the last round finished 6 similar items in about 15 tool calls.
    

    FEEDBACK.md the harness received ✎ written by the AI reviewer:

    FEEDBACK — critic review, part 3 (browser-tested at 1440 and 390 px)

    All six items from part 2 are fixed and verified in the browser: legacy formats now reach 100%, the Save toast and "Saved · just now" show, the table counter is live, the toast no longer covers the Finish panel, and print/Markdown keep line breaks. Four items remain. Fix them in order.

    Context budget (READ FIRST: two earlier attempts crashed with "maximum context length")
    • Do NOT read whole files and do NOT sweep through files chunk by chunk. Each item names the exact lines. Run sed -n 'A,Bp' for THAT range once, edit right away, then move on. Never re-read a range.

    • Never cat or grep index.html. Do not touch scripts/ or data/. No test harnesses, no git.

    • Line numbers are for the current files (src/app.js 1252 lines, src/body.html 177, src/app.css 652) and shift as you edit, so find a function again with grep -n "function NAME" src/app.js.

    • Run python3 build.py --check once at the end.

    1. Bug: answers from another format still count (src/app.js line 849 in renderChecklist, line 636 in openDonePanel)

    The items are now filtered, but ok still checks every match id. So after answering the NSF legacy narrative and switching back to the NSF 2026 webform with only 2 of its 8 steps answered, the checklist shows 5 / 9. Fix, on both lines: ok is true only if an id with sectionIndex(id) > -1 is answered.

    2. Phone regression: the empty "saved" status takes a grid cell (src/app.css line 575 and the @media (max-width: 640px) block at line 599)

    On a 390 px phone the new #saved-status span sits in the 2-column button grid, so "Save draft" is alone on row 1 next to an empty cell. Fix: add .toolbar__saved:empty { display: none; } at line 575, and inside the 640 px block add .toolbar__saved { grid-column: 1 / -1; order: 99; text-align: center; }.

    3. NIH: "No" answers must require Element 4
    • The NIH 2026 format says Element 4 is needed "If you answered 'no' to elements 1, 2, or 3", and elements 7 and 8 say "If 'no,' address in element 4." Add a helper nihNoAnswers() that returns the element numbers (1, 2, 3, 7, 8) whose answers (nih-e1, nih-e2, nih-e3, nih-e7, nih-e8) are "no".

    • In renderChecklist and openDonePanel, special-case the item whose match contains "nih-e4":

      • Element 4 empty and no "No" answers: count it as covered, with the label "Limitations (element 4) — not needed, no 'No' answers".

      • Element 4 empty and some "No" answers: missing, with the label "Limitations required — you answered No to element 2, 3" (list the numbers).

      • Element 4 written: covered, keep the normal label.

    • In renderStep (line 302): when the section id is nih-e4 and nihNoAnswers() is not empty, insert a notice box right before the "Your answer" field (the html += at line 330): "You answered No to element 2 — explain the limitation and its reason here." CSS .notice: background var(--surface-2); border-left: 3px solid var(--ui-pride-gold); border-radius: 6px; padding: 8px 12px; font-size: .85rem; margin: 0 0 12px.

    4. Gallery: "See an example plan"
    • First-time visitors have no quick way to see what a finished plan looks like. src/body.html: add <button type="button" class="btn btn--ghost" id="btn-example">See an example plan</button> after the Start button (line 22), and <button type="button" class="btn btn--ghost btn--sm" id="example-btn" title="Fill every section with an illustrative example">Load example</button> after the Load draft button (line 49).

    • src/app.js: add an EXAMPLES object keyed by format id for the three current formats only: nsf-2026 (8 text sections), nih-2026 (nih-e1..nih-e3 = "yes", nih-e5 = "yes", nih-e7 and nih-e8 = "na", nih-e4 a short limitations text, nih-e6 a table with 2 rows), and nifa-2019 (5 text sections). Write 1–3 plain sentences per section about a clearly FICTIONAL project: NSF: a soil-moisture sensor network with data in Zenodo; NIH: a survey study with de-identified participant data in ICPSR under controlled access; NIFA: extension workshop evaluation data in the USDA Ag Data Commons. Use only the generic repositories and practices already in the app. Do NOT invent University of Idaho service names, people, dollar amounts or statistics.

    • A loadExample() function: if the current format has no example (a legacy format), first switch to that sponsor's current format. If any answers exist, ask confirm("Replace your current answers with the example plan?"). Then set the answers, state.step = 0, state.example = true, renderAll() and toast("Example plan loaded — replace it with your own answers.", "ok"). #btn-example shows the wizard (like startWizard) and then loads the example; #example-btn just loads it. Wire both in boot (line 1172).

    • While state.example is true, renderPreview (line 712) puts a banner at the top of the preview: <div class="preview__example">Illustrative example — a fictional project. Replace it with your own answers.</div> (CSS: background rgba(241,179,0,.18); border: 1px solid var(--ui-pride-gold); border-radius: 8px; padding: 6px 10px; font-size: .8rem; font-weight: 700; margin-bottom: 12px). resetAll (line 1154) sets state.example = false. The Print view and Markdown export start with the line "Illustrative example — fictional project" when state.example is true.

    14 continue 7.3 min · 1 file changed, 13 insertions(+), 50 deletions(-) Show prompt

    Prompt given to the harness:

    Read FEEDBACK.md in this directory — it lists problems a reviewer found when testing index.html in a real browser. Fix every item, keeping everything that already works, then run python3 build.py --check.
    
    IMPORTANT: there are only two tiny edits (two lines in src/app.js, two CSS rules in src/app.css). Read only the line ranges FEEDBACK.md names, make the edits, run the build check once, and stop. Do not explore the project, do not read SPEC.md, AGENTS.md or whole files, and never repeat a command.
    

    FEEDBACK.md the harness received ✎ written by the AI reviewer:

    FEEDBACK — two tiny fixes (about 6 tool calls total)

    The previous attempt got stuck repeating sed -n '1252,1252p' src/app.js hundreds of times. Do NOT read the end of the file, do NOT read whole files, do NOT re-run a command you already ran. Read only the lines named below, edit, done. Never cat or grep index.html. Do not touch scripts/ or data/. No git, no tests. Run python3 build.py --check once at the end.

    1. Answers from another format still count (src/app.js, exactly two lines)

    Line 636 (inside openDonePanel) and line 849 (inside renderChecklist) both read: var ok = it.match.some(function (id) { return isAnswered(findSection(id)); }); On BOTH lines, only count ids that belong to the current format: ok is true only when sectionIndex(id) > -1 AND that section is answered. (Bug seen: NSF 2026 webform with 2 of 8 steps answered showed 5 / 9 because answers typed in the NSF legacy format were counted.)

    2. Phone: the empty "saved" status takes a grid cell (src/app.css)

    After line 575 (.toolbar__saved { … }), add .toolbar__saved:empty { display: none; }. Inside the @media (max-width: 640px) block that starts at line 599, add .toolbar__saved { grid-column: 1 / -1; order: 99; text-align: center; }. (Bug seen: on a 390 px phone "Save draft" sits alone on its row next to an empty cell.)

    17 continue 4.1 min · 5 files changed, 184 insertions(+), 127 deletions(-) Show prompt

    Prompt given to the harness:

    Read FEEDBACK.md in this directory — it lists changes the project owner decided on and problems a reviewer found when testing index.html in a real browser. Make every change, keeping everything that already works, then run python3 build.py --check.
    

    FEEDBACK.md the harness received ✎ written by the AI reviewer:

    FEEDBACK — round 2 of the 2026-formats change

    Great work on the last round. A reviewer re-tested index.html in Chromium (1440 px and 390 px). These now work and must be kept: legacy formats removed, Format menu hidden, NSF categories with a Title and a Description per field, example chips, official notes under the fields, NSF checklist 8/8, preview/print/export grouped by category, "no page limit (Research.gov webform)", NIH Element 4 required/optional logic and the 300/100-word checklist items, the NIFA note, source lines and the red "over NIFA's 2-page limit", glossary additions, old drafts loading without errors, no phone overflow, 0 console errors.

    Working notes: template/checklist/glossary text lives in scripts/build_data.py → run python3 scripts/build_data.py, then python3 build.py --check. Do not grep or cat index.html (one 40 KB line of embedded JSON). Work through the items in order.


    1. BUG (data loss): renaming an NSF category erases all of its answers in steps 2–8

    Repro: NSF → step 1: categories "Survey data" and "Analysis code" → fill steps 2–8 for both (checklist 8 / 8) → back to step 1 → change "Survey data" to "Survey responses" (or type " v2" at the end of "Analysis code"). Result: that category's Title/Description in steps 2–8 are empty and the checklist drops to 1 / 8. Cause: a.fields is keyed by the category title; onCategoryTitleChanged looks up the NEW title, finds nothing and replaces the answers with empty ones. Every keystroke in the title does this.

    Fix: give each category a stable id when it is created (e.g. { id: "cat-" + Date.now() + random, title, desc }) and key fields by that id everywhere (isAnswered, renderCategoryFieldBlocks, wordsOf, preview, print, Markdown export, storage-chip sentences). Removing a category removes only its own field answers. When a saved draft has categories without an id, assign ids on load and move any title-keyed field answers to the new ids.

    2. An untitled category row blocks the whole NSF plan

    Repro: with the complete plan above, click "+ Add category" in step 1 and leave the new row empty. Result: the checklist falls to 1 / 8, and every step gets an extra empty "Category 3" block. Fix: a category without a title is not a category yet. Ignore untitled rows in steps 2–8, the rail, the checklist, preview, print and export. In step 2–8, if there are untitled rows, show one short line: "Untitled categories are ignored — give them a title in step 1."

    3. Switching sponsor in the toolbar hides the official format note

    Repro: start with NSF, then click NIH (or USDA-NIFA) in the toolbar and open "About this format". Result: it only says "NIH format: 8 sections, 2 word-limited fields — 2026 DMS Plan format (current)."; the real note (NOT-OD-26-046 dates, the "Older solicitations…" sentence, and for NIFA the "March 2026 PDF could not be downloaded" disclosure) is gone until the page reloads. (Entering through a landing card still shows the real note.) Fix: "About this format" must always contain the current format's note. If you keep the one-line summary, put it before the note, never instead of it (switchSponsor currently calls setFormatNote(sponsorSummary(key)) after renderAll()).

    4. NSF Data Availability: a duration title must not require a description

    Official (Research.gov help): "In many cases, the retention duration will be determined by the policies of the repository. If that is the case, the radio button for that option should be selected and no further information is required. If no such policy is applicable, then the researcher can provide the information via the usual pulldown and 'Add New' mechanism." The note "If the availability of the data is less than two years after project completion, a justification must be provided below." only asks for a justification in that case. Now: Title "10 years after project completion" with an empty Description leaves the step and checklist item missing. Fix: remove desc_required_unless from nsf-availability (any Title completes the field); keep the note text under the field. Access Policies and Provenance keep their description rules.

    5. Each "About this format" note should name only its own previous format
    • Now: the NSF note and the NIH note both say "(NSF: PAPPG 24-1 two-page PDF upload / NIH: the 2023 six-element format)". Fix: NSF note: "Older solicitations may still require the previous format (a two-page PDF upload under PAPPG 24-1) — check your funding opportunity."

    • NIH note: "Older solicitations may still require the previous format (the 2023 six-element format, NOT-OD-21-014) — check your funding opportunity."

    • USDA-NIFA: no such sentence.

    6. Source lines still cite the struck 2024 PAPPG text
    • The NSF steps "Data Standards and Metadata", "Data or Research Product Provenance", "Public Archiving" and "Data Availability" show "Source: … PAPPG 24-1 II.D.2.i(ii) (May 20, 2024)". Those fields come from the Research.gov form, not from the 2024 text (NSF 26-202 struck its list). Use "NSF Research.gov DMSP webform help, field N (reviewed April 29, 2026); NSF 26-202 (Jan 22, 2026)" for all NSF steps, including "Access Policies and Limitations".

    • Glossary "metadata standard": source "Generic definition; cf. NIFA 'Data format' component and PAPPG 24-1 item 2" → "Generic definition; cf. Research.gov 'Data Standards and Metadata' and NIFA 'Data format' component".

    18 critic 3.4 min · — Show prompt

    Prompt given to the harness:

    Read FEEDBACK.md in this directory. It lists problems a reviewer found when testing index.html in a real browser, in priority order. Item 1 is a data-loss bug and must be fixed first. Make every change in src/app.js, src/app.css, src/body.html and data/embed as needed, keeping everything that already works, then run python3 build.py --check and make sure it succeeds.
    

    No feedback file was sent in this round.

    19 continue 3.4 min · 6 files changed, 542 insertions(+), 96 deletions(-) Show prompt

    Prompt given to the harness:

    Read FEEDBACK.md in this directory and fix its items. The previous attempt ran out of output space because it printed every source file in full and then made no change at all. Work in small steps this time:
    
    - Do not print whole files. Use grep to find the function named below, print only the lines around it, then make a small targeted edit to those lines. Never rewrite a whole file in one step.
    - Run python3 build.py --check after each item. It must succeed.
    
    Work in this order and finish each item before starting the next:
    
    1. Item 1 (data loss) in src/app.js. Find the click handler for the add-cat button inside renderStep. It must give the new category row an id from newCatId, the same way answer and categories already do. Then, in migrateCategories, move field answers stored under the key "undefined" onto the first category that had no id, instead of dropping them.
    2. Item 2: checklistItemOk in src/app.js. Word and page limit items count only when the section or plan they measure has content. The element 4 conditional item counts only when element 4 has text, or when elements 1, 2, 3, 7 and 8 are all answered and none is No.
    3. Item 3: storagePickerHtml and wireStoragePicker in src/app.js, for category_field sections. The picker must act on one chosen category at a time, with "All categories" as an explicit choice.
    4. Items 4 and 5: the NSF branch of renderPreview in src/app.js. Scroll to the category and field being edited. Add per-category word counts and a page estimate next to the no-page-limit note.
    5. Items 7 and 8: toolbar rules in src/app.css.
    6. Item 9: wording in data/embed/templates.json. If scripts/build_data.py generates that file, change the same text there too so the two stay in sync.
    7. Item 6 (example plan) last.
    

    FEEDBACK.md the harness received ✎ written by the AI reviewer:

    Reviewer findings (critic re-review after round 17)

    Tested index.html in headless Chromium at 1440x900 and 390x844. No console errors. The items below are ordered by priority. Fix every item, keep everything that already works (the rename-keeps-answers fix, the NIH element 4 required/optional logic, the NIFA disclosure note, sources and glossary), then run python3 build.py --check.

    1. CRITICAL: NSF categories added with "+ Add category" share one answer slot and lose data

    What I did: NSF, step 1. Typed "Survey data" in the first category row, clicked "+ Add category" twice and typed "Interview transcripts" and "Analysis code". On step 2 I typed "Human subjects" as the Title for category 2 only, went to step 3 and back.

    • What happened: Category 3 now also shows "Human subjects". The saved draft (localStorage key uidaho-dmp-draft-v1) shows that only the first category has an id. Both added categories have no id, so their field answers are all stored under the single key "undefined".

    • The exported Markdown and the print view repeat the same answers under Category 2 and Category 3. The last category typed into wins every field.

    • Deleting category 2 in step 1 also erased category 3's answers.

    • After Save draft, reload and "Resume saved draft", the migration gives the id-less categories new ids. The answers stored under "undefined" are orphaned: the NSF checklist dropped from 8 / 8 to 1 / 8.

    Cause: in src/app.js, the click handler for the "+ Add category" button (in renderStep) adds a new category row without calling newCatId(). The default row created in answer() and categories() does get an id.

    Expected: every category row gets its own stable id when it is created, so answers stay separate per category through preview, export, print, delete, save and reload. When a saved draft holds field answers under the key "undefined", attach them to the first category that had no id rather than silently dropping them.

    2. Reviewer checklist shows elements as covered on an empty plan

    What I did: opened each sponsor with no answers.

    • What happened: NIH shows "3 / 10 reviewer-expected elements covered" at 0% progress. The ticked items are "Limitations & justifying factors described (element 4)", "Element 4 within 300 words" and "Element 6 table within 100 words".

    • USDA-NIFA shows "1 / 6" because "Within NIFA's 2-page limit" is ticked.

    • The completion panel inherits the same counts.

    • Expected: an empty plan scores 0. A word or page limit item counts only once the section or plan it measures has content. Until then, show it as not yet checked rather than as a green tick.

    • The element 4 item counts as covered only when element 4 has text, or when elements 1, 2, 3, 7 and 8 have all been answered and none is "No".

    3. NSF Public Archiving picker applies to every category at once

    What I did: NSF with three categories. On step 5 (Public Archiving) I clicked the Zenodo card and one storage chip.

    • What happened: Every category with an empty Title got the Title "Zenodo".

    • The sentences were toggled in every category's Description. With the bug in item 1, clicking once even added the sentence to one category and removed it from another.

    • A researcher cannot pick ICPSR for "Survey data" and Zenodo for "Analysis code".

    Expected: the repository cards and storage/backup/security chips act on one category at a time. Examples: a picker inside each category block, or a clear "Apply to" category choice above the picker, with "All categories" as one explicit option. The picked/unpicked state and the "N selected" counts must reflect the chosen category. Keep the chip groups collapsible so the step does not become very long with several categories.

    4. NSF live preview always scrolls to Category 1 and hides its heading

    What I did: NSF with three categories. Moved to step 3 and typed in category 3's block.

    • What happened: The preview scrolled so that the "Category 1" heading sat about 40 px above the preview's visible top edge.

    • It never moves to the category being edited.

    • On step 1 the plan title "DATA MANAGEMENT AND SHARING PLAN" is scrolled out of view.

    • Expected: The preview scrolls to the field of the current step inside the category block that has focus (or the first category when none has focus), with its heading fully visible, and flashes that field.

    • On step 1 it shows the top of the plan.

    5. NSF preview has no per-section word counts and no page estimate
    • SPEC.md requires "word counts per section and a page-length estimate". NIH and NIFA show a word count on every section heading. NSF shows none.

    • NSF's stats show "no page limit (Research.gov webform)" instead of an estimate, while the completion panel does show "≈ 0.5 pages" for NSF.

    • Expected: Each NSF category heading shows that category's word count.

    • The NSF stats show total words and an approximate page estimate together with the note that Research.gov has no page limit.

    6. Add a clearly labelled example plan for first-time visitors
    • There is no way to see what a finished plan looks like without typing everything. Add a "Load example" action, on the intro screen and in the toolbar, that fills a realistic sample plan for the current sponsor: NSF: at least two categories with every field.

    • NIH: all eight elements, including a table with two rows.

    • NIFA: all five components.

    Label it everywhere it appears (toast, preview subtitle, export and print header) as an illustrative example, not a real University of Idaho project. It must not invent U of I service names, statistics or prices. Loading it must ask for confirmation when the current plan already has answers, and Reset must clear it.

    7. Phone (390 px): empty cell next to "Save draft"

    In the toolbar at 390 px the empty "Saved" status span takes a grid cell, so "Save draft" sits alone on the first row with a blank space beside it. Hide the status element while it is empty, or place it on its own line under the buttons, so the six controls form even rows.

    8. Desktop (1440 px): toolbar wastes a row

    At 1440 px the toolbar wraps into two rows: sponsor switch and format name on the first, the action buttons on the second, with the right half of both rows empty. There is room for one row at 1200 px and wider. Keep the actions on the same row as the sponsor switch there, and let them wrap only on narrower screens.

    9. Wording and attribution nits (check against data/raw)
    • NSF format note: "8 fields per data or research product category" is not how the Research.gov help page describes it. The page lists eight sections, and the first one is the category's own General Information. Say, for example, "eight sections for each data or research product category".

    • The Timeline for Public Accessibility source line lacks "(reviewed April 29, 2026)", which every other Research.gov source line has.

    • NIH element 5, first hint: it says "The guidance page adds" the access-controls wording. In data/raw that wording ("including whether any scientific data will be shared using access controls") appears in NOT-OD-26-046 element 5 itself, while the 2026 DMS Plan Format Page DOCX omits it. Attribute it to NOT-OD-26-046.

    20 critic 0.8 min · 3 files changed, 88 insertions(+), 52 deletions(-) Show prompt

    Prompt given to the harness:

    Read FEEDBACK.md in this directory and fix its five items in order. Item 1 is a crash that stops the NIH path from working and must be fixed first.
    
    Work in small steps, as you did last round:
    - Do not print whole files. Use grep to find the named function, print only the lines around it, and make small targeted edits.
    - Run python3 build.py --check after each item. It must succeed.
    
    Keep everything that already works: stable category ids, the empty-plan checklist behaviour, per-category word counts, the preview scroll, the example plan and the phone toolbar.
    

    FEEDBACK.md the harness received ✎ written by the AI reviewer:

    Reviewer findings (critic re-check after round 19)

    Round 19 fixed the category ids, the empty-plan checklist, per-category word counts, the preview scroll, the wording nits and the phone toolbar. It also added the example plan. Thank you, all verified in the browser.

    It also introduced one crash that breaks the whole NIH path. Fix the items below in order, keep everything else working, and run python3 build.py --check after each item.

    1. CRITICAL regression: "noEls is not defined" breaks NIH

    Where: src/app.js, checklistItemOk, in the branch for the conditional element 4 item. The round rewrote that branch with the names otherEls, allAnswered and anyNo. The line that builds the "Element 4 required — you answered No to element N" label still reads the old variable noEls, which no longer exists. The page throws a ReferenceError every time the element 4 item is not satisfied, which is the case for every NIH plan that is not finished.

    • What happens in the browser: A. On the intro screen, clicking the "Start with NIH" card does nothing. The intro stays on screen, the app never opens, and the console shows "noEls is not defined".

    • B. After opening the app with NSF and switching to NIH in the toolbar, the NIH wizard appears, but the Reviewer checklist still lists the NSF items and the NSF score, because the checklist render aborts.

    • C. On NIH with element 1 answered "No", clicking "Finish ✓" on step 8 does not open the completion panel.

    • Expected: When element 4 is not satisfied because an element was answered No, the label names the first element answered No.

    • When it is not satisfied only because elements are still unanswered, the item keeps its normal label.

    • Nothing throws.

    Check all three scenarios A, B and C after the fix, starting from a cleared browser storage.

    2. "Apply to: All categories" only changes Category 1

    Where: src/app.js, wireStoragePicker. When the choice is "All categories", targetCat returns the first category.

    What I did: NSF with two categories, step 5 Public Archiving, "Apply to" left at "All categories", clicked the Zenodo card.

    What happened: only Category 1 got the Title "Zenodo" and the sentence. Category 2 stayed empty. Picking a single category works correctly.

    • Expected: With "All categories", a click adds the sentence to every titled category that lacks it, and fills an empty Title with the repository name as before.

    • If every category already has the sentence, the click removes it from all of them.

    • The card or chip shows as picked only when every category has the sentence.

    • Also: Style the "Apply to" select like the other inputs. It is currently a small unstyled native control.

    • Hide it when there is only one category.

    3. Desktop toolbar: every button label now wraps onto two lines
    • At 1440 px the toolbar is forced onto one row. As a result: Button labels break into two lines ("Save / draft", "Load / draft", "Export / .md", "Print / view").

    • The sponsor button "USDA- / NIFA" is hyphen-broken.

    • The format name "Research.gov DMSP webform (current)" wraps.

    • "Saved · just now" wraps into two lines.

    This looks worse than the previous two-row layout. Expected: no toolbar button, sponsor button or status text ever wraps inside itself. If everything does not fit on one line at the current width, let the action buttons move to a second row, aligned to the right, as before. One-line labels matter more than a single row.

    4. NIH example plan gives answers that contradict its own table
    • The NIH example lists "Human genomic data (whole-genome sequencing)" and "Survey and questionnaire data" in element 6, yet it answers: element 5 (human participant privacy) "Not applicable";

    • elements 7 and 8 (Genomic Data Sharing Policy) "Not applicable";

    • element 4 "No limitations are anticipated".

    • Human genomic and survey data come from human participants, so these answers teach visitors the wrong thing. Make the example internally consistent. Choose one of: (a) non-human data types, for example mouse RNA-seq gene expression data in NCBI GEO, so "Not applicable" for elements 5, 7 and 8 is correct;

    • (b) keep human data and answer element 5 Yes and elements 7 and 8 Yes, with element 4 explaining controlled access through an NIH-designated repository such as dbGaP.

    Likewise, the NSF example's "Interview transcripts" category uses "Not Applicable" for Access Policies and Limitations. Interview data usually carries a privacy limitation, so show a limitation Title (for example "Human subjects") with a short justification in the Description. That demonstrates how the justification field is used.

    5. Phone: the saved status takes a grid cell again after saving

    At 390 px the six toolbar buttons now form even rows while nothing is saved. After "Save draft", the "Saved · just now" text appears as a seventh grid cell and the rows become uneven again. On narrow screens, show the saved status on its own full-width line below the buttons.

What the agent was asked

The full specification the harness received, rendered from the original Markdown.

Read the specification

Data Management Plan Builder — Guided NSF / NIH data management and sharing plans

Category: Research Who it is for: Faculty writing proposals, graduate students, research data librarians

What it should do

Answer a short guided interview about your project's data and get a well-structured Data Management and Sharing Plan in the section order NSF and NIH reviewers expect — with storage, security and repository choices spelled out.

Product decision (project owner, 2026-09-13): current 2026 formats are the default

  • NIH: the 2026 Data Management and Sharing Plan format per NOT-OD-26-046 (8 elements: three yes/no sharing questions, a limitations narrative of at most 300 words that is needed when a sharing answer is "no", human-participant privacy, a data type → repository table of at most 100 words, two GDS questions), as on the 2026 DMS Plan Format Page.

  • NSF: the Data Management and Sharing Plan per NSF 26-202 (PAPPG 24-1 Supplement 2), including the Research.gov DMSP webform structure: entries per data or research product category, each with the fields Data or Research Product Category General Information, Access Policies and Limitations, Data Standards and Metadata, Data or Research Product Provenance, Public Archiving, Timeline for Public Accessibility, Data Availability and Accountability, each field with a title and a description. No two-page limit.

  • USDA-NIFA: its current (March 2026) guidance. If the March 2026 PDF cannot be obtained, use the official NIFA web page text (updated March 25, 2026) and say so in data/raw/SOURCES.md and in the app; component headings may then come from the most recent retrievable edition, labelled as such. Two-page limit.

  • Pre-2026 formats (NSF PAPPG 24-1 two-page narrative, NIH 2023 six-element format) may appear only as a short note ("older solicitations may still require the previous format"), never as the default or as a selectable template.

  • Section names, order, required elements, limits, reviewer-checklist items and glossary terms follow the saved official documents in data/raw/.

Data

No external data. Encode section templates for the current formats described above (NSF Research.gov DMSP webform fields; NIH 2026 DMS Plan elements; USDA-NIFA DMP components). Offer example repository choices (Dryad, Zenodo, NCBI GEO/SRA, ICPSR, OSF) and generic storage/backup/security options; refer users to U of I Research Computing and Data Services and the Library for institution-specific details rather than inventing specific service names or prices.

Raw downloads (if any) are in data/raw/ with data/raw/SOURCES.md describing where each file came from. Transform what the app needs into compact JSON in data/embed/ (write a small script in scripts/ to do it, so the transformation is reproducible). Every dataset the app shows must be credited in a visible "Data & sources" section of the app, with links. If a dataset is illustrative/synthetic, label it clearly as such in the UI — never present made-up numbers as real University of Idaho figures.

Required features

  • Step-by-step wizard with progress rail, validation and the ability to jump between steps

  • Sponsor switch (NSF / NIH / USDA-NIFA generic) that changes sections and wording

  • Live two-pane preview that updates as you type, with word counts per section and a page-length estimate

  • Checklist score showing which reviewer-expected elements are still missing

  • Save/restore drafts in the browser, export Markdown and a print-ready view

  • Glossary tooltips for terms like 'metadata standard', 'embargo', 'controlled access'

Quality bar

This app is going into a University of Idaho gallery that shows faculty, staff and students what they can build with AI coding agents. It must look polished and modern (think a well-designed data product, not a homework demo), feel alive (smooth transitions, responsive hover/selection states, animated where it helps understanding), and do real, useful work — every control should change something meaningful. It must work well on a laptop and on a phone. Include a short "How to use" hint for first-time visitors and a helpful empty state wherever the user must supply data.

Known limitations

Reported by the independent critic. ✎ written by the AI critic

  • On a 390 px phone, after saving, the 'Saved · just now' line sits between Save draft and Load draft, leaving Save draft and Reset each alone on a row.
  • The completion panel lists 'Element 4 within 300 words (0 words)' and 'Element 6 table within 100 words (0 words)' as missing before those sections have text.
  • Load example replaces the answers for every sponsor, not just the current one (the confirm dialog says so).
  • Toasts appear over the page header on phones.
  • Carried over: NIFA component headings still come from the 2019 edition, because the March 2026 PDF could not be downloaded (the app and SOURCES.md say so). The Research.gov pull-down lists are not in the saved help page, so only the official examples plus free text are offered. Checklist items are presence checks. No verified RCDS link. Print checked with the on-screen overlay and emulation only.
  • Harness history in this re-review: round 18 (critic) was spoiled when Goose hit the model output-token limit after printing app.js twice. Round 19 (continue) fixed all 9 items but introduced a ReferenceError that broke 'Start with NIH'. Round 20 (critic) fixed that and 4 more items in 46 s.