Skip to content

Commit 306ef28

Browse files
r21 phase 5: assembly + reviews + checklist (#45)
1 parent fe906e2 commit 306ef28

13 files changed

Lines changed: 561 additions & 7 deletions

File tree

.claude/epic-r21.local.md

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,15 +33,17 @@ phases:
3333
title: "Supplemental sections (Bib, Facilities, DMS, Budget, Biosketches)"
3434
issue: 39
3535
branch: "feature/issue-39-phase4-supplemental"
36-
status: in_progress
36+
status: complete
37+
pr: 44
38+
note: "Merged 2026-05-13. 9 supplemental files + 117-entry bibliography.bib. [BRACKETED] placeholders for PI institution / co-Is / F&A rate."
3739
- number: 5
3840
title: "Assembly, grant-review, humanizer pass"
3941
issue: 40
4042
branch: "feature/issue-40-phase5-assembly"
41-
status: pending
42-
current_phase: 4
43+
status: in_progress
44+
current_phase: 5
4345
created_at: "2026-05-13T17:05:00Z"
44-
updated_at: "2026-05-13T22:30:00Z"
46+
updated_at: "2026-05-13T23:55:00Z"
4547
---
4648

4749
## Notes

proposals/r21-nimh/2026-animacy/README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,8 @@
3131
| 1. NOFO + Specific Aims | [#36](https://github.com/OpenScience-Collective/agentic-research-practicum/issues/36) | complete (PR #41) | `NOFO.md`, `submission/specific-aims.md`, scaffold |
3232
| 2. Significance + Innovation + lit expansion | [#37](https://github.com/OpenScience-Collective/agentic-research-practicum/issues/37) | complete (PR #42) | `submission/research-strategy/significance.md`, `innovation.md`, `refs.bib` |
3333
| 3. Approach + preliminary data + timeline | [#38](https://github.com/OpenScience-Collective/agentic-research-practicum/issues/38) | complete (PR #43) | `submission/research-strategy/approach.md`, `figures/` |
34-
| 4. Supplemental sections | [#39](https://github.com/OpenScience-Collective/agentic-research-practicum/issues/39) | in_progress | Bibliography, Facilities, Equipment, DMS plan, Budget, Biosketches, LoS queue |
35-
| 5. Assembly + grant-review + humanizer | [#40](https://github.com/OpenScience-Collective/agentic-research-practicum/issues/40) | pending | `submission/build/r21.pdf`, `reviews/grant-review.md` |
34+
| 4. Supplemental sections | [#39](https://github.com/OpenScience-Collective/agentic-research-practicum/issues/39) | complete (PR #44) | Bibliography, Facilities, Equipment, DMS plan, Budget, Biosketches, LoS queue |
35+
| 5. Assembly + grant-review + humanizer | [#40](https://github.com/OpenScience-Collective/agentic-research-practicum/issues/40) | in_progress | `submission/build/r21.pdf` (8pp), `reviews/`, `submission/CHECKLIST.md` |
3636

3737
## Working hypotheses (locked at Phase 1)
3838

proposals/r21-nimh/2026-animacy/ideas.md

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,3 +138,25 @@ The markdown slug citations in Aims, Significance, Innovation, and Approach rema
138138
**Decision: Biosketch placeholders use NIH format but call out SciENcv export at submission.**
139139

140140
`PI-Shirazi.md` is a substantial NIH-format draft with `[BRACKETED]` fields for degrees, positions, honors, and citation lists; **the actual submission biosketch is exported from SciENcv** by the PI at submission time. The Phase 4 markdown serves as a planning document for what to populate in SciENcv. Co-investigator and senior-advisor biosketches are skeletons only.
141+
142+
## 2026-05-13, Phase 5 decisions
143+
144+
**Decision: Pandoc + xelatex build pipeline; PDF built and committed.**
145+
146+
`build.sh` concatenates cover + Aims + Significance + Innovation + Approach and renders to `build/r21.pdf` via xelatex with the NIH formatting in `build/header.tex` (Helvetica Neue via fontspec, 0.5" margins, 4pt parskip, justified). Build runs locally on the maintainer's macOS with MacTeX installed; total 8 pages (1 cover + 1 Aims + 6 Research Strategy). The choice of xelatex over pdflatex was forced by the GLM equation unicode (β, Δ, ≈) and curly apostrophes in author surnames. One Unicode arrow (→) was replaced with "then" in approach.md to avoid the last missing-glyph warning.
147+
148+
**Decision: Reviews are documented, not auto-applied.**
149+
150+
The three Phase 5 review passes (grant-review, figure-qa, humanizer) write to `reviews/*.md` with concrete findings, but no edit is auto-applied to the proposal text. The user triages and applies the recommended edits at their discretion before submission. This is correct for an R21 because (a) the PI is the scientific authority on which edits to accept, (b) some findings (like "widen the H1A effect-size range") need PI judgment about what range is defensible, and (c) Phase 5 is a closeout phase whose deliverable is "ready for PI review", not "ready for submission as-is".
151+
152+
**Decision: Pre-submission CHECKLIST.md aggregates Phase 5 outputs into actionable next steps.**
153+
154+
The CHECKLIST has 3 categories matching grant-writing SKILL.md Step 7: content completeness, budget+administrative, formatting. Each item is `[x]` complete, `[ ]` blocking, or `[?]` deferred to submitter. Four items are flagged as currently blocking submission: actual letters of support, Figure 2 dpi regen, Figure 3 caption / median fix, README.md shot-count update. None are scientific or structural; all are tractable within 2 weeks of the receipt date.
155+
156+
**Decision: Epic closeout via Phase 5 PR.**
157+
158+
The Phase 5 PR uses "Closes #35" in the body to auto-close the epic on merge. Each prior phase PR has already auto-closed its sub-issue. After Phase 5 merges, the entire R21 epic (Issue #35 + sub-issues #36-#40) is closed; the proposal package under `proposals/r21-nimh/2026-animacy/` is in PI-customization-ready state.
159+
160+
**Decision: Final humanizer recommendations are minimal (2 light edits).**
161+
162+
The proposal already reads in a humanizer-clean style by design (avoided "groundbreaking" / "paradigm-shifting" in Innovation; balanced hedging in Approach alternatives; substantive lists-of-three rather than rhetorical ones). The 2 recommended edits in `humanizer-2026-05-13.md` (Innovation Methodological closing sentence; Significance Paragraph 1 lead) can be applied as a single 30-second commit if the user wants.
Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
# Grant Figure QA Report — R21 NIMH PA-25-304
2+
Date: 2026-05-13
3+
Proposal: proposals/r21-nimh/2026-animacy/submission/
4+
5+
---
6+
7+
## Figure 1: fig1-pipeline-schematic.md (Mermaid source, not yet rendered)
8+
9+
Status: PASS-WITH-FINDINGS
10+
11+
- Resolution/format: Not yet a raster file; renders to PNG via Mermaid CLI at Phase 5. No DPI issue to assess until rendered. The render step must target 300 dpi at 7-inch width (per README.md).
12+
- Color accessibility: Three node classes use hex fill colors (#d4edda green, #fff3cd yellow, #cce5ff blue). All three are distinguishable by hue and lightness; grayscale contrast between green and yellow is marginal (both light). Before render, verify the three node fills remain distinguishable in a grayscale print preview.
13+
- Caption: The caption in fig1-pipeline-schematic.md is complete and self-contained. The approach.md introduction references "Figure 1" correctly.
14+
- Finding: The Mermaid source includes no explicit font-size directive. Default Mermaid node font is ~14 px in the SVG, which maps to approximately 10 pt at 300 dpi/7-inch width -- above the 8 pt minimum -- but this must be confirmed after render. If the Mermaid CLI scales the diagram to fit 7 inches, node labels inside the LR-flow boxes may shrink below 8 pt if more nodes are added in future revisions.
15+
16+
---
17+
18+
## Figure 2: fig2-preliminary-data.png (2018 x 1384 px, ~300 dpi)
19+
20+
Status: PASS-WITH-FINDINGS
21+
22+
- Resolution: 2018 x 1384 px at 299.9 dpi. At 7-inch target width the effective DPI is 288 (2018 / 7 = 288.3). This is below the NIH 300 dpi floor for photographs. The shortfall is 4%, within rounding tolerance, but the saved metadata reports 300 and the actual pixel count does not quite reach it. Regenerating at 300 dpi with figsize=(7, 4.5) and dpi=300 will produce 2100 x 1350 px.
23+
- Format: PNG. Acceptable for NIH PDF embedding.
24+
- Color accessibility: The IC topography panels use the EEGLAB default red-blue colormap. This colormap is not colorblind-safe for red-green deficiency (deuteranopia). The dipole panels use a rainbow/HSV-like palette. Both are inherited from EEGLAB's default rendering and cannot be changed in the fig2-preliminary-data.py composite script without modifying upstream EEGLAB output. This is a known limitation; the caption should acknowledge that color is supplementary and that component identity is established by location, not hue alone.
25+
- Font legibility: The subplot title fontsize is 8 pt and the ylabel fontsize is 9 pt, both at the minimum threshold. The subject ID strings in the subplot titles (e.g., "sub-NDARAA948VFH") are long and render at 8 pt; they are legible on screen but may be tight when printed at 7 inches. The internal EEGLAB IC-number labels visible within each topography panel appear to be approximately 6-7 pt and will likely be illegible at print size; these are embedded in the source PNGs and cannot be changed via the composite script.
26+
- Caption in README.md: States "Top row: IC topographies for sub-NDARAA948VFH, sub-NDARAC853DTE, sub-NDARAD774HAZ. Bottom row: corresponding dipole-fit results." The caption does not define abbreviations IC (independent component) or AMICA (adaptive mixture independent component analysis) -- both must be defined because NIH reviewers evaluate figures as standalone items. The caption also omits the color-bar interpretation for topographies and does not state the residual-variance threshold used to accept dipole fits.
27+
- Axes/scale: Topography panels have no colorbar scale or units label. Dipole panels show dipoles on a brain MRI slice without a scale bar or MNI coordinate reference. These are acceptable conventions in the field but should be noted in the caption.
28+
29+
---
30+
31+
## Figure 3: fig3-stimulus-annotation.png (2134 x 1834 px, ~300 dpi)
32+
33+
Status: PASS-WITH-FINDINGS
34+
35+
- Resolution: 2134 x 1834 px at 299.9 dpi. At 7-inch width effective DPI is 304.9 -- passes the 300 dpi threshold. Printed height would be 6.11 inches; total figure height within the 10-inch page limit.
36+
- Format: PNG. Acceptable.
37+
- Color accessibility: The palette is the Wong colorblind-safe set (#0072B2 blue, #E69F00 orange, #999999 gray). This is correct and passes the colorblind safety check for both deuteranopia and protanopia. The blue/orange pair also separates cleanly in grayscale.
38+
- Font legibility: Legend text and axis labels render at fontsize=8, panel titles at the default (approximately 10 pt via matplotlib rcParams). All are at or above the 8 pt floor.
39+
- Panel B (LLR histogram): The histogram uses alpha=0.6 overlap. Because boy-only and puppy-only bins overlap, the overlapping region renders as a blend of blue and orange that in grayscale may be ambiguous. Hatching one of the two distributions (e.g., hatch='//' for puppy-only) would make the overlap region unambiguous in black-and-white print.
40+
- Caption: The README.md caption for Figure 3 states "49 trusted shots." The actual data (shot_events.tsv, 58 total rows, 51 trusted after the match_diff_s <= 1.0 filter) yields 51 trusted shots, which matches approach.md and the rendered suptitle. The README.md caption is therefore stale and inconsistent. The caption also mentions "class-conditional medians" for the LLR panel, but the rendered figure does not draw median lines -- only the zero-LLR reference line (axvline at 0). The caption must be corrected to remove the median claim or the figure must add median markers.
41+
- Panel A (eventplot): The eventplot y-axis has no label (yticks suppressed, which is correct for a raster), but the three color categories are clearly distinguished in the legend. Panel A title duplicates the suptitle's "trusted shots" language; minor redundancy.
42+
43+
---
44+
45+
## Figure 4: fig4-ersp-exemplar.png (not present)
46+
47+
Status: FAIL (expected absent -- placeholder)
48+
49+
- The file is not in the figures directory. This is documented as intentional in README.md ("placeholder until Epic #1 Phase 5 lands"). The approach.md caption states "To be generated in month 9 of the funded period."
50+
- NIH impact: A missing figure that is referenced as "Figure 4" in the approach section will cause reviewer confusion unless the reference is explicitly flagged as a planned figure. Currently approach.md does NOT contain an in-text "(Figure 4)" citation -- search of the document finds no "Figure 4" reference. The README.md lists it under "Aim 1.C" section heading, but approach.md does not cross-reference it by number. This is acceptable for submission only if Figure 4 is entirely omitted from the submitted PDF (not shown as a blank or placeholder panel). Confirm the submission assembler skips fig4 and does not insert a blank page.
51+
52+
---
53+
54+
## Figure 5: fig5-timeline.md (Markdown table, not yet rendered to Gantt PNG)
55+
56+
Status: PASS-WITH-FINDINGS
57+
58+
- Not yet rendered. The Markdown table is complete and internally consistent (8 quarters covering months 1-24 with named milestones). Render as a matplotlib Gantt at Phase 5 per the render plan.
59+
- The approach.md Timeline section references "Figure 5 (24-month milestone chart)" without a bold **(Figure 5)** inline citation matching the convention used for Figures 1-3. The reference is present but stylistically inconsistent.
60+
- When rendered, ensure the Gantt font size is >= 8 pt at printed width. The milestone label text is long (e.g., "N=50 expansion; OSF pre-registration of Aim 1 and Aim 2 plans (month 6)") and may require wrapping or abbreviation to remain legible in a half-column placement.
61+
62+
---
63+
64+
## Cross-Reference Findings
65+
66+
1. **Shot count discrepancy (critical).** README.md figure inventory says "49 trusted shots" for Figure 3. approach.md and the actual shot_events.tsv both give 51 trusted shots (20 boy-only, 15 puppy-only, 16 mixed-or-empty). The rendered figure suptitle correctly shows 51. The README.md caption must be updated to 51.
67+
68+
2. **Figure 4 in-text citation absent.** approach.md has no "(Figure 4)" in-text citation. README.md assigns Figure 4 to the Aim 1.C section, but that section in approach.md does not cite Figure 4. This is defensible if the plan is to omit Figure 4 from submission; it becomes a problem only if the figure is later added without updating the cross-reference.
69+
70+
3. **Figure 5 citation style inconsistency.** Figures 1-3 are cited as bold **(Figure N)** inline. Figure 5 is referenced as "Figure 5 (24-month milestone chart)" in a section header sentence rather than an inline bold citation. Harmonize the style.
71+
72+
4. **No "Figure 4" in approach.md, yet README assigns it to Aim 1.C.** If the Phase 5 exemplar ERSP figure is added before submission, approach.md section 1.C must receive the corresponding "(Figure 4)" inline citation and a caption must be added to the submitted PDF.
73+
74+
---
75+
76+
## Top 3 Priority Fixes Before Submission
77+
78+
1. **Fix the 49 vs 51 shot count in README.md.** The figure inventory caption says 49; the data, the rendered figure, and approach.md all say 51. A reviewer who cross-checks the caption against the text will see an inconsistency. Update README.md line for Figure 3 to read "51 trusted shots."
79+
80+
2. **Add median lines to Figure 3 Panel B or remove the median claim from the caption.** The README.md caption promises "class-conditional medians" in the LLR histogram, but the rendered figure shows no median markers. Either add `axvline` calls for each class median in fig3-stimulus-annotation.py, or strike "class-conditional medians" from the caption. A caption that claims content the figure does not contain is a direct compliance risk.
81+
82+
3. **Regenerate Figure 2 at true 300 dpi and add colormap and dipole-fit caveats to its caption.** The current pixel count (2018 wide) falls 4% short of the 300 dpi target at 7-inch width. Regenerating with matplotlib dpi=300 and figsize=(7, 4.5) yields 2100 px wide (true 300 dpi). Simultaneously update the caption to define IC and AMICA on first use, note that the EEGLAB topography colormap is not colorblind-safe and that hue is supplementary to spatial location for component identification, and state the residual-variance threshold (15%) used to accept dipole fits.

0 commit comments

Comments
 (0)