flonat-research 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (285) hide show
  1. package/.claude/agents/domain-reviewer.md +336 -0
  2. package/.claude/agents/fixer.md +226 -0
  3. package/.claude/agents/paper-critic.md +370 -0
  4. package/.claude/agents/peer-reviewer.md +289 -0
  5. package/.claude/agents/proposal-reviewer.md +215 -0
  6. package/.claude/agents/referee2-reviewer.md +367 -0
  7. package/.claude/agents/references/journal-referee-profiles.md +354 -0
  8. package/.claude/agents/references/paper-critic/council-personas.md +77 -0
  9. package/.claude/agents/references/paper-critic/council-prompts.md +198 -0
  10. package/.claude/agents/references/peer-reviewer/report-template.md +199 -0
  11. package/.claude/agents/references/peer-reviewer/sa-prompts.md +260 -0
  12. package/.claude/agents/references/peer-reviewer/security-scan.md +188 -0
  13. package/.claude/agents/references/proposal-reviewer/report-template.md +144 -0
  14. package/.claude/agents/references/proposal-reviewer/sa-prompts.md +149 -0
  15. package/.claude/agents/references/referee-config.md +114 -0
  16. package/.claude/agents/references/referee2-reviewer/audit-checklists.md +287 -0
  17. package/.claude/agents/references/referee2-reviewer/report-template.md +334 -0
  18. package/.claude/rules/design-before-results.md +52 -0
  19. package/.claude/rules/ignore-agents-md.md +17 -0
  20. package/.claude/rules/ignore-gemini-md.md +17 -0
  21. package/.claude/rules/lean-claude-md.md +45 -0
  22. package/.claude/rules/learn-tags.md +99 -0
  23. package/.claude/rules/overleaf-separation.md +67 -0
  24. package/.claude/rules/plan-first.md +175 -0
  25. package/.claude/rules/read-docs-first.md +50 -0
  26. package/.claude/rules/scope-discipline.md +28 -0
  27. package/.claude/settings.json +125 -0
  28. package/.context/current-focus.md +33 -0
  29. package/.context/preferences/priorities.md +36 -0
  30. package/.context/preferences/task-naming.md +28 -0
  31. package/.context/profile.md +29 -0
  32. package/.context/projects/_index.md +41 -0
  33. package/.context/projects/papers/nudge-exp.md +22 -0
  34. package/.context/projects/papers/uncertainty.md +31 -0
  35. package/.context/resources/claude-scientific-writer-review.md +48 -0
  36. package/.context/resources/cunningham-multi-analyst-agents.md +104 -0
  37. package/.context/resources/cunningham-multilang-code-audit.md +62 -0
  38. package/.context/resources/google-ai-co-scientist-review.md +72 -0
  39. package/.context/resources/karpathy-llm-council-review.md +58 -0
  40. package/.context/resources/multi-coder-reliability-protocol.md +175 -0
  41. package/.context/resources/pedro-santanna-takeaways.md +96 -0
  42. package/.context/resources/venue-rankings/abs_ajg_2024.csv +1823 -0
  43. package/.context/resources/venue-rankings/abs_ajg_2024_econ.csv +356 -0
  44. package/.context/resources/venue-rankings/cabs_4_4star_theory.csv +40 -0
  45. package/.context/resources/venue-rankings/core_2026.csv +801 -0
  46. package/.context/resources/venue-rankings.md +147 -0
  47. package/.context/workflows/README.md +69 -0
  48. package/.context/workflows/daily-review.md +91 -0
  49. package/.context/workflows/meeting-actions.md +108 -0
  50. package/.context/workflows/replication-protocol.md +155 -0
  51. package/.context/workflows/weekly-review.md +113 -0
  52. package/.mcp-server-biblio/formatters.py +158 -0
  53. package/.mcp-server-biblio/pyproject.toml +11 -0
  54. package/.mcp-server-biblio/server.py +678 -0
  55. package/.mcp-server-biblio/sources/__init__.py +14 -0
  56. package/.mcp-server-biblio/sources/base.py +73 -0
  57. package/.mcp-server-biblio/sources/formatters.py +83 -0
  58. package/.mcp-server-biblio/sources/models.py +22 -0
  59. package/.mcp-server-biblio/sources/multi_source.py +243 -0
  60. package/.mcp-server-biblio/sources/openalex_source.py +183 -0
  61. package/.mcp-server-biblio/sources/scopus_source.py +309 -0
  62. package/.mcp-server-biblio/sources/wos_source.py +508 -0
  63. package/.mcp-server-biblio/uv.lock +896 -0
  64. package/.scripts/README.md +161 -0
  65. package/.scripts/ai_pattern_density.py +446 -0
  66. package/.scripts/conf +445 -0
  67. package/.scripts/config.py +122 -0
  68. package/.scripts/count_inventory.py +275 -0
  69. package/.scripts/daily_digest.py +288 -0
  70. package/.scripts/done +177 -0
  71. package/.scripts/extract_meeting_actions.py +223 -0
  72. package/.scripts/focus +176 -0
  73. package/.scripts/generate-codex-agents-md.py +217 -0
  74. package/.scripts/inbox +194 -0
  75. package/.scripts/notion_helpers.py +325 -0
  76. package/.scripts/openalex/query_helpers.py +306 -0
  77. package/.scripts/papers +227 -0
  78. package/.scripts/query +223 -0
  79. package/.scripts/session-history.py +201 -0
  80. package/.scripts/skill-health.py +516 -0
  81. package/.scripts/skill-log-miner.py +273 -0
  82. package/.scripts/sync-to-codex.sh +252 -0
  83. package/.scripts/task +213 -0
  84. package/.scripts/tasks +190 -0
  85. package/.scripts/week +206 -0
  86. package/CLAUDE.md +197 -0
  87. package/LICENSE +21 -0
  88. package/MEMORY.md +38 -0
  89. package/README.md +269 -0
  90. package/docs/agents.md +44 -0
  91. package/docs/bibliography-setup.md +55 -0
  92. package/docs/council-mode.md +36 -0
  93. package/docs/getting-started.md +245 -0
  94. package/docs/hooks.md +38 -0
  95. package/docs/mcp-servers.md +82 -0
  96. package/docs/notion-setup.md +109 -0
  97. package/docs/rules.md +33 -0
  98. package/docs/scripts.md +303 -0
  99. package/docs/setup-overview/setup-overview.pdf +0 -0
  100. package/docs/skills.md +70 -0
  101. package/docs/system.md +159 -0
  102. package/hooks/block-destructive-git.sh +66 -0
  103. package/hooks/context-monitor.py +114 -0
  104. package/hooks/postcompact-restore.py +157 -0
  105. package/hooks/precompact-autosave.py +181 -0
  106. package/hooks/promise-checker.sh +124 -0
  107. package/hooks/protect-source-files.sh +81 -0
  108. package/hooks/resume-context-loader.sh +53 -0
  109. package/hooks/startup-context-loader.sh +102 -0
  110. package/package.json +51 -0
  111. package/packages/cli-council/.github/workflows/claude-code-review.yml +44 -0
  112. package/packages/cli-council/.github/workflows/claude.yml +50 -0
  113. package/packages/cli-council/README.md +100 -0
  114. package/packages/cli-council/pyproject.toml +43 -0
  115. package/packages/cli-council/src/cli_council/__init__.py +19 -0
  116. package/packages/cli-council/src/cli_council/__main__.py +185 -0
  117. package/packages/cli-council/src/cli_council/backends/__init__.py +8 -0
  118. package/packages/cli-council/src/cli_council/backends/base.py +81 -0
  119. package/packages/cli-council/src/cli_council/backends/claude.py +25 -0
  120. package/packages/cli-council/src/cli_council/backends/codex.py +27 -0
  121. package/packages/cli-council/src/cli_council/backends/gemini.py +26 -0
  122. package/packages/cli-council/src/cli_council/checkpoint.py +212 -0
  123. package/packages/cli-council/src/cli_council/config.py +51 -0
  124. package/packages/cli-council/src/cli_council/council.py +391 -0
  125. package/packages/cli-council/src/cli_council/models.py +46 -0
  126. package/packages/llm-council/.github/workflows/claude-code-review.yml +44 -0
  127. package/packages/llm-council/.github/workflows/claude.yml +50 -0
  128. package/packages/llm-council/README.md +453 -0
  129. package/packages/llm-council/pyproject.toml +42 -0
  130. package/packages/llm-council/src/llm_council/__init__.py +23 -0
  131. package/packages/llm-council/src/llm_council/__main__.py +259 -0
  132. package/packages/llm-council/src/llm_council/checkpoint.py +193 -0
  133. package/packages/llm-council/src/llm_council/client.py +253 -0
  134. package/packages/llm-council/src/llm_council/config.py +232 -0
  135. package/packages/llm-council/src/llm_council/council.py +482 -0
  136. package/packages/llm-council/src/llm_council/models.py +46 -0
  137. package/packages/mcp-bibliography/MEMORY.md +31 -0
  138. package/packages/mcp-bibliography/_app.py +226 -0
  139. package/packages/mcp-bibliography/formatters.py +158 -0
  140. package/packages/mcp-bibliography/log/2026-03-13-2100.md +35 -0
  141. package/packages/mcp-bibliography/pyproject.toml +15 -0
  142. package/packages/mcp-bibliography/run.sh +20 -0
  143. package/packages/mcp-bibliography/scholarly_formatters.py +83 -0
  144. package/packages/mcp-bibliography/server.py +1857 -0
  145. package/packages/mcp-bibliography/tools/__init__.py +28 -0
  146. package/packages/mcp-bibliography/tools/_registry.py +19 -0
  147. package/packages/mcp-bibliography/tools/altmetric.py +107 -0
  148. package/packages/mcp-bibliography/tools/core.py +92 -0
  149. package/packages/mcp-bibliography/tools/dblp.py +52 -0
  150. package/packages/mcp-bibliography/tools/openalex.py +296 -0
  151. package/packages/mcp-bibliography/tools/opencitations.py +102 -0
  152. package/packages/mcp-bibliography/tools/openreview.py +179 -0
  153. package/packages/mcp-bibliography/tools/orcid.py +131 -0
  154. package/packages/mcp-bibliography/tools/scholarly.py +575 -0
  155. package/packages/mcp-bibliography/tools/unpaywall.py +63 -0
  156. package/packages/mcp-bibliography/tools/zenodo.py +123 -0
  157. package/packages/mcp-bibliography/uv.lock +711 -0
  158. package/scripts/setup.sh +143 -0
  159. package/skills/beamer-deck/SKILL.md +199 -0
  160. package/skills/beamer-deck/references/quality-rubric.md +54 -0
  161. package/skills/beamer-deck/references/review-prompts.md +106 -0
  162. package/skills/bib-validate/SKILL.md +261 -0
  163. package/skills/bib-validate/references/council-mode.md +34 -0
  164. package/skills/bib-validate/references/deep-verify.md +79 -0
  165. package/skills/bib-validate/references/fix-mode.md +36 -0
  166. package/skills/bib-validate/references/openalex-verification.md +45 -0
  167. package/skills/bib-validate/references/preprint-check.md +31 -0
  168. package/skills/bib-validate/references/ref-manager-crossref.md +41 -0
  169. package/skills/bib-validate/references/report-template.md +82 -0
  170. package/skills/code-archaeology/SKILL.md +141 -0
  171. package/skills/code-review/SKILL.md +265 -0
  172. package/skills/code-review/references/quality-rubric.md +67 -0
  173. package/skills/consolidate-memory/SKILL.md +208 -0
  174. package/skills/context-status/SKILL.md +126 -0
  175. package/skills/creation-guard/SKILL.md +230 -0
  176. package/skills/devils-advocate/SKILL.md +130 -0
  177. package/skills/devils-advocate/references/competing-hypotheses.md +83 -0
  178. package/skills/init-project/SKILL.md +115 -0
  179. package/skills/init-project-course/references/memory-and-settings.md +92 -0
  180. package/skills/init-project-course/references/organise-templates.md +94 -0
  181. package/skills/init-project-course/skill.md +147 -0
  182. package/skills/init-project-light/skill.md +139 -0
  183. package/skills/init-project-research/SKILL.md +368 -0
  184. package/skills/init-project-research/references/atlas-pipeline-sync.md +70 -0
  185. package/skills/init-project-research/references/atlas-schema.md +81 -0
  186. package/skills/init-project-research/references/confirmation-report.md +39 -0
  187. package/skills/init-project-research/references/domain-profile-template.md +104 -0
  188. package/skills/init-project-research/references/interview-round3.md +34 -0
  189. package/skills/init-project-research/references/literature-discovery.md +43 -0
  190. package/skills/init-project-research/references/scaffold-details.md +197 -0
  191. package/skills/init-project-research/templates/field-calibration.md +60 -0
  192. package/skills/init-project-research/templates/pipeline-manifest.md +63 -0
  193. package/skills/init-project-research/templates/run-all.sh +116 -0
  194. package/skills/init-project-research/templates/seed-files.md +337 -0
  195. package/skills/insights-deck/SKILL.md +151 -0
  196. package/skills/interview-me/SKILL.md +157 -0
  197. package/skills/latex/SKILL.md +141 -0
  198. package/skills/latex/references/latex-configs.md +183 -0
  199. package/skills/latex-autofix/SKILL.md +230 -0
  200. package/skills/latex-autofix/references/known-errors.md +183 -0
  201. package/skills/latex-autofix/references/quality-rubric.md +50 -0
  202. package/skills/latex-health-check/SKILL.md +161 -0
  203. package/skills/learn/SKILL.md +220 -0
  204. package/skills/learn/scripts/validate_skill.py +265 -0
  205. package/skills/lessons-learned/SKILL.md +201 -0
  206. package/skills/literature/SKILL.md +335 -0
  207. package/skills/literature/references/agent-templates.md +393 -0
  208. package/skills/literature/references/bibliometric-apis.md +44 -0
  209. package/skills/literature/references/cli-council-search.md +79 -0
  210. package/skills/literature/references/openalex-api-guide.md +371 -0
  211. package/skills/literature/references/openalex-common-queries.md +381 -0
  212. package/skills/literature/references/openalex-workflows.md +248 -0
  213. package/skills/literature/references/reference-manager-sync.md +36 -0
  214. package/skills/literature/references/scopus-api-guide.md +208 -0
  215. package/skills/literature/references/wos-api-guide.md +308 -0
  216. package/skills/multi-perspective/SKILL.md +311 -0
  217. package/skills/multi-perspective/references/computational-many-analysts.md +77 -0
  218. package/skills/pipeline-manifest/SKILL.md +226 -0
  219. package/skills/pre-submission-report/SKILL.md +153 -0
  220. package/skills/process-reviews/SKILL.md +244 -0
  221. package/skills/process-reviews/references/rr-routing.md +101 -0
  222. package/skills/project-deck/SKILL.md +87 -0
  223. package/skills/project-safety/SKILL.md +135 -0
  224. package/skills/proofread/SKILL.md +254 -0
  225. package/skills/proofread/references/quality-rubric.md +104 -0
  226. package/skills/python-env/SKILL.md +57 -0
  227. package/skills/quarto-deck/SKILL.md +226 -0
  228. package/skills/quarto-deck/references/markdown-format.md +143 -0
  229. package/skills/quarto-deck/references/quality-rubric.md +54 -0
  230. package/skills/save-context/SKILL.md +174 -0
  231. package/skills/session-log/SKILL.md +98 -0
  232. package/skills/shared/concept-validation-gate.md +161 -0
  233. package/skills/shared/council-protocol.md +265 -0
  234. package/skills/shared/distribution-diagnostics.md +164 -0
  235. package/skills/shared/engagement-stratified-sampling.md +218 -0
  236. package/skills/shared/escalation-protocol.md +74 -0
  237. package/skills/shared/external-audit-protocol.md +205 -0
  238. package/skills/shared/intercoder-reliability.md +256 -0
  239. package/skills/shared/mcp-degradation.md +81 -0
  240. package/skills/shared/method-probing-questions.md +163 -0
  241. package/skills/shared/multi-language-conventions.md +143 -0
  242. package/skills/shared/paid-api-safety.md +174 -0
  243. package/skills/shared/palettes.md +90 -0
  244. package/skills/shared/progressive-disclosure.md +92 -0
  245. package/skills/shared/project-documentation-content.md +443 -0
  246. package/skills/shared/project-documentation-format.md +281 -0
  247. package/skills/shared/project-documentation.md +100 -0
  248. package/skills/shared/publication-output.md +138 -0
  249. package/skills/shared/quality-scoring.md +70 -0
  250. package/skills/shared/reference-resolution.md +77 -0
  251. package/skills/shared/research-quality-rubric.md +165 -0
  252. package/skills/shared/rhetoric-principles.md +54 -0
  253. package/skills/shared/skill-design-patterns.md +272 -0
  254. package/skills/shared/skill-index.md +240 -0
  255. package/skills/shared/system-documentation.md +334 -0
  256. package/skills/shared/tikz-rules.md +402 -0
  257. package/skills/shared/validation-tiers.md +121 -0
  258. package/skills/shared/venue-guides/README.md +46 -0
  259. package/skills/shared/venue-guides/cell_press_style.md +483 -0
  260. package/skills/shared/venue-guides/conferences_formatting.md +564 -0
  261. package/skills/shared/venue-guides/cs_conference_style.md +463 -0
  262. package/skills/shared/venue-guides/examples/cell_summary_example.md +247 -0
  263. package/skills/shared/venue-guides/examples/medical_structured_abstract.md +313 -0
  264. package/skills/shared/venue-guides/examples/nature_abstract_examples.md +213 -0
  265. package/skills/shared/venue-guides/examples/neurips_introduction_example.md +245 -0
  266. package/skills/shared/venue-guides/journals_formatting.md +486 -0
  267. package/skills/shared/venue-guides/medical_journal_styles.md +535 -0
  268. package/skills/shared/venue-guides/ml_conference_style.md +556 -0
  269. package/skills/shared/venue-guides/nature_science_style.md +405 -0
  270. package/skills/shared/venue-guides/reviewer_expectations.md +417 -0
  271. package/skills/shared/venue-guides/venue_writing_styles.md +321 -0
  272. package/skills/split-pdf/SKILL.md +172 -0
  273. package/skills/split-pdf/methodology.md +48 -0
  274. package/skills/sync-notion/SKILL.md +93 -0
  275. package/skills/system-audit/SKILL.md +157 -0
  276. package/skills/system-audit/references/sub-agent-prompts.md +294 -0
  277. package/skills/task-management/SKILL.md +131 -0
  278. package/skills/update-focus/SKILL.md +204 -0
  279. package/skills/update-project-doc/SKILL.md +194 -0
  280. package/skills/validate-bib/SKILL.md +242 -0
  281. package/skills/validate-bib/references/council-mode.md +34 -0
  282. package/skills/validate-bib/references/deep-verify.md +71 -0
  283. package/skills/validate-bib/references/openalex-verification.md +45 -0
  284. package/skills/validate-bib/references/preprint-check.md +31 -0
  285. package/skills/validate-bib/references/report-template.md +62 -0
@@ -0,0 +1,402 @@
1
+ # TikZ & Figure Anti-Collision Rules
2
+
3
+ > LLMs cannot do spatial reasoning visually. Convert every spatial question to a **computation** before placing elements. These rules are organized as a 6-pass verification workflow to run after any TikZ diagram or matplotlib figure is written or edited.
4
+
5
+ ## The Core Principle
6
+
7
+ **Never eyeball positions. Calculate them.** Spatial errors (labels on arrows, boxes overlapping, annotations bleeding) are invisible in `.tex` source and Python scripts alike. The only defence is arithmetic verification before compiling or rendering. **These rules apply to both TikZ diagrams AND matplotlib/Python figures.**
8
+
9
+ ---
10
+
11
+ ## Pass 1: Bezier Curve Clearance (Rules 1-3)
12
+
13
+ > Most dangerous class of error. Curved arrows (`bend left`, `bend right`, `in`/`out` angles) create invisible collision zones that swallow labels.
14
+
15
+ ### Rule 1: Compute Bezier Max Depth Before Placing Any Label Near a Curve
16
+
17
+ **Problem:** A `bend left=35` arrow looks like it stays close to the straight-line path, but its maximum perpendicular displacement can be large enough to overlap labels, boxes, or other arrows.
18
+
19
+ **Formula — Bezier max depth:**
20
+
21
+ ```
22
+ depth = (chord / 2) * tan(bend_angle / 2)
23
+ ```
24
+
25
+ Where:
26
+ - `chord` = straight-line distance between the two endpoints
27
+ - `bend_angle` = the TikZ bend angle (e.g., 35 for `bend left=35`)
28
+
29
+ **Example:**
30
+
31
+ ```
32
+ % Chord = 6cm, bend left=35
33
+ % depth = (6/2) * tan(35/2) = 3 * tan(17.5°) = 3 * 0.3153 = 0.946cm
34
+ %
35
+ % WRONG: Label placed 0.5cm from the chord — the curve passes through it
36
+ \draw[->] (A) to[bend left=35] node[above, yshift=0.5cm] {label} (B);
37
+ %
38
+ % RIGHT: Label shifted beyond the depth + padding
39
+ % Required clearance: 0.946 + 0.3 (padding) = 1.25cm minimum
40
+ \draw[->] (A) to[bend left=35] node[above, yshift=1.4cm] {label} (B);
41
+ ```
42
+
43
+ **Action:** For every curved arrow, compute the depth. Any element within `depth + 0.3cm` of the chord midpoint is at risk.
44
+
45
+ ### Rule 2: Return Arrows Must Clear Outbound Curves
46
+
47
+ **Problem:** A diagram has a forward arrow `A -> B` curving one way and a return arrow `B -> A` curving the other. The two curves intersect if both use the same bend angle and the vertical/horizontal offset is insufficient.
48
+
49
+ **Formula — minimum separation between opposing curves:**
50
+
51
+ ```
52
+ min_separation = 2 * depth + gap
53
+ = 2 * (chord/2) * tan(bend_angle/2) + 0.4cm
54
+ ```
55
+
56
+ **Example:**
57
+
58
+ ```
59
+ % Chord = 5cm, bend left=30 for both directions
60
+ % depth = 2.5 * tan(15°) = 2.5 * 0.2679 = 0.67cm
61
+ % min_separation = 2 * 0.67 + 0.4 = 1.74cm
62
+ %
63
+ % WRONG: Both arrows at the same vertical level — they cross
64
+ \draw[->] (A) to[bend left=30] (B);
65
+ \draw[->] (B) to[bend left=30] (A);
66
+ %
67
+ % RIGHT: Vertically separate the nodes or increase bend angles asymmetrically
68
+ \draw[->] (A) to[bend left=25] (B);
69
+ \draw[->] (B) to[bend left=45] (A); % deeper curve, stays below
70
+ ```
71
+
72
+ **Action:** When a diagram has bidirectional curved arrows between the same pair of nodes, compute both depths and verify they don't intersect.
73
+
74
+ ### Rule 3: Curved Arrows Must Not Cross Intermediate Nodes
75
+
76
+ **Problem:** A curved arrow from node A to node C passes through the vertical/horizontal space occupied by node B (which sits between them). The curve's depth places it directly on top of B.
77
+
78
+ **Formula — curve y-position at node B's x-coordinate:**
79
+
80
+ For a symmetric bend, approximate the curve height at horizontal position `x` from the start:
81
+
82
+ ```
83
+ y(x) ≈ depth * sin(pi * x / chord)
84
+ ```
85
+
86
+ Compare `y(x_B)` against node B's bounding box.
87
+
88
+ **Example:**
89
+
90
+ ```
91
+ % A at (0,0), B at (3,0), C at (6,0). Curve A->C with bend left=30
92
+ % chord = 6, depth = 3 * tan(15°) = 0.804cm
93
+ % At x=3 (node B): y = 0.804 * sin(pi * 3/6) = 0.804 * 1.0 = 0.804cm
94
+ %
95
+ % If node B is a box extending 0.5cm above its center, the curve at 0.804cm
96
+ % is only 0.3cm above B's top edge — too close.
97
+ %
98
+ % RIGHT: Increase bend angle or route the arrow above/below the row
99
+ ```
100
+
101
+ **Action:** For any curved arrow that spans multiple columns or rows, check whether the curve passes through intermediate nodes.
102
+
103
+ ---
104
+
105
+ ## Pass 2: Gap Calculations (Rules 4-5)
106
+
107
+ > Minimum spacing between all elements. No two elements should touch or nearly touch.
108
+
109
+ ### Rule 4: Minimum Gap Between Parallel Elements
110
+
111
+ **Problem:** Adjacent boxes, labels, or arrows placed too close together merge visually or overlap when rendered.
112
+
113
+ **Minimum gaps:**
114
+
115
+ | Element pair | Minimum gap |
116
+ |-------------|-------------|
117
+ | Box edge to box edge | 0.5cm |
118
+ | Arrow to parallel arrow | 0.4cm |
119
+ | Label baseline to any element | 0.3cm |
120
+ | Annotation rectangle edge to any neighbor | 0.5cm |
121
+
122
+ **Verification:** For every pair of adjacent elements, compute the distance between their nearest edges. If below the minimum, increase spacing.
123
+
124
+ **Example:**
125
+
126
+ ```
127
+ % WRONG: Two boxes with 0.2cm gap — they'll touch or nearly merge
128
+ \node[draw, minimum width=2cm] (A) at (0,0) {Box A};
129
+ \node[draw, minimum width=2cm] (B) at (2.2,0) {Box B};
130
+ % Gap = 2.2 - (0 + 1.0) - 1.0 = 0.2cm (half-widths: 1.0cm each)
131
+ %
132
+ % RIGHT: Ensure 0.5cm gap minimum
133
+ \node[draw, minimum width=2cm] (A) at (0,0) {Box A};
134
+ \node[draw, minimum width=2cm] (B) at (2.5,0) {Box B};
135
+ % Gap = 2.5 - 1.0 - 1.0 = 0.5cm
136
+ ```
137
+
138
+ ### Rule 5: Annotation Rectangles Must Not Bleed Into Neighbors
139
+
140
+ **Problem:** A dashed rectangle drawn around a group of nodes (e.g., `\draw[dashed] ($(A.north west)+(-0.3,0.3)$) rectangle ...`) extends into the space of neighboring groups.
141
+
142
+ **Formula — annotation edge position:**
143
+
144
+ ```
145
+ annotation_right_edge = rightmost_node_x + node_half_width + padding
146
+ annotation_left_edge = leftmost_node_x - node_half_width - padding
147
+ ```
148
+
149
+ **Overlap test:**
150
+
151
+ ```
152
+ overlap = annotation_right_edge > neighbor_left_edge - min_gap
153
+ ```
154
+
155
+ If true, reduce padding or increase inter-group spacing.
156
+
157
+ **Example:**
158
+
159
+ ```
160
+ % Group 1 rightmost node at x=4, half-width 1cm, padding 0.4cm
161
+ % annotation_right_edge = 4 + 1.0 + 0.4 = 5.4cm
162
+ %
163
+ % Group 2 leftmost node at x=5.5, half-width 1cm
164
+ % neighbor_left_edge = 5.5 - 1.0 = 4.5cm
165
+ %
166
+ % overlap check: 5.4 > 4.5 - 0.5 = 4.0 → 5.4 > 4.0 → YES, but...
167
+ % visual check: 5.4 vs 4.5 = only 0.9cm gap between annotation and box
168
+ %
169
+ % WRONG: annotation_right_edge (5.4) is only 0.1cm from Group 2's box edge (4.5)
170
+ % RIGHT: Move Group 2 to x=6.5 or reduce Group 1 padding to 0.2cm
171
+ ```
172
+
173
+ ---
174
+
175
+ ## Pass 3: Label Positioning (Rules 6-7)
176
+
177
+ > Labels must fit in available space and not collide with the elements they describe.
178
+
179
+ ### Rule 6: Text Width Must Fit Available Horizontal Space
180
+
181
+ **Problem:** A label or node text is wider than the space between its neighbors, causing it to overflow visually even though LaTeX compiles without error.
182
+
183
+ **Formula — available width:**
184
+
185
+ ```
186
+ available_width = right_boundary - left_boundary - 2 * inner_sep
187
+ ```
188
+
189
+ **Estimation — text width:** Approximate at 0.15cm per character for `\footnotesize`, 0.18cm for `\small`, 0.22cm for `\normalsize`. Multiply character count by the rate.
190
+
191
+ **Action:** Before writing any label, estimate its rendered width. If `text_width > available_width`, either:
192
+ - Shorten the text
193
+ - Use `text width=Xcm` with line breaks
194
+ - Reduce font size
195
+ - Increase the container
196
+
197
+ ### Rule 7: Edge Labels Must Account for Arrow Curvature
198
+
199
+ **Problem:** `node[midway, above]` on a curved arrow places the label at the midpoint of the *chord*, not the midpoint of the *curve*. For high bend angles, this puts the label far from the actual arrow.
200
+
201
+ **Fix:** Use `node[pos=0.5, above]` (which TikZ evaluates along the curve path, not the chord) and add `sloped` if the arrow isn't horizontal. For very curved arrows, manually position with explicit coordinates computed from the depth formula (Rule 1).
202
+
203
+ **Example:**
204
+
205
+ ```
206
+ % WRONG: Label floats away from a sharply curved arrow
207
+ \draw[->] (A) to[bend left=50] node[midway, above] {label} (B);
208
+ %
209
+ % RIGHT: Use pos= along the path and add sloped for angled segments
210
+ \draw[->] (A) to[bend left=50] node[pos=0.5, sloped, above] {label} (B);
211
+ %
212
+ % For extreme cases, compute the curve midpoint and place manually:
213
+ % midpoint_x = (x_A + x_B) / 2
214
+ % midpoint_y = (y_A + y_B) / 2 + depth (depth from Rule 1)
215
+ \node at (midpoint_x, midpoint_y + 0.3) {label};
216
+ ```
217
+
218
+ ---
219
+
220
+ ## Pass 4: Labels vs. Drawn Shapes — the Boundary Rule (Rule 8)
221
+
222
+ > Text placed at hardcoded coordinates that collide with the edge of a circle, rectangle, or filled region. The compiler gives zero warnings — these only show up visually.
223
+
224
+ ### Rule 8: Every Label Near a Shape Must Clear Its Computed Boundary
225
+
226
+ **The rule:** Every label placed near a drawn geometric shape must have its coordinate verified against the shape's computed boundary. Never place text at a coordinate chosen for aesthetic alignment (e.g., "same y-height as another label") without checking whether that coordinate clears the shape it's near.
227
+
228
+ **For TikZ circles:** `\draw (cx, cy) circle (r);` → boundary extends from `cy - r` to `cy + r`. Any label must be at least **0.4cm** outside the boundary (if external) or at least **0.4cm** inside (if internal).
229
+
230
+ ```
231
+ % WRONG — label at y=2.0 sits exactly on boundary of circle with center (4, 0.5) radius 1.5
232
+ \draw (4, 0.5) circle (1.5cm); % top edge at y = 0.5 + 1.5 = 2.0
233
+ \node at (4, 2.0) {Sample}; % COLLISION: y = top edge
234
+
235
+ % RIGHT — label 0.4cm above the top edge
236
+ \node at (4, 2.4) {Sample}; % 2.0 + 0.4 = 2.4 ✓
237
+ ```
238
+
239
+ **For TikZ rectangles:** bottom-left `(x, y)` with `minimum width` and `minimum height` → compute edges. Same 0.4cm clearance rule.
240
+
241
+ **For matplotlib `FancyBboxPatch` / `Circle`:** bottom-left `(x, y)` with width `w` and height `h` → top edge at `y + h`. When positioning `ax.text()` near patches, compute the patch boundary and verify clearance. Text with `va='center'` extends roughly half its font height above and below the anchor — account for this.
242
+
243
+ **Critical corollary — don't match coordinates across different shapes:** If two shapes have different sizes, a single y-coordinate that's safe for one may collide with the other. Always compute boundaries independently for each shape.
244
+
245
+ ---
246
+
247
+ ## Pass 5: General Structural Checks (Rules 9-10)
248
+
249
+ > Catch-all checks for common TikZ pitfalls.
250
+
251
+ ### Rule 9: Node Anchors Must Be Consistent Within a Row/Column
252
+
253
+ **Problem:** Mixing `.center`, `.north`, `.south` anchors within the same visual row causes elements to appear misaligned vertically.
254
+
255
+ **Rule:** Within any visual row, use the same anchor for all nodes. Within any visual column, use the same anchor. When connecting to a node, specify the anchor explicitly (`A.east`, `B.west`) rather than relying on TikZ's automatic anchor selection.
256
+
257
+ **Example:**
258
+
259
+ ```
260
+ % WRONG: Inconsistent anchors — nodes appear at different heights
261
+ \node (A) at (0,0) {Short};
262
+ \node[anchor=north] (B) at (3,0) {Tall text\\ two lines};
263
+ %
264
+ % RIGHT: Both use the same anchor
265
+ \node[anchor=center] (A) at (0,0) {Short};
266
+ \node[anchor=center] (B) at (3,0) {Tall text\\ two lines};
267
+ ```
268
+
269
+ ### Rule 10: Coordinate Arithmetic Must Be Verified for Every Placed Element
270
+
271
+ **Problem:** Copy-paste errors, wrong signs, or forgotten offsets silently place elements in wrong positions. Since LLMs cannot visually verify, every coordinate must be traceable to a formula.
272
+
273
+ **Rule:** For every `\node at (x,y)` or `\coordinate`, add a comment showing how `x` and `y` were derived:
274
+
275
+ ```
276
+ % Column 1 at x=0, Column 2 at x=3.5 (col_width=3, gap=0.5)
277
+ % Row 1 at y=0, Row 2 at y=-2.5 (row_height=2, gap=0.5)
278
+ \node[draw] (A) at (0, 0) {Top Left};
279
+ \node[draw] (B) at (3.5, 0) {Top Right};
280
+ \node[draw] (C) at (0, -2.5) {Bottom Left};
281
+ ```
282
+
283
+ **Action:** After writing a TikZ diagram, re-derive every coordinate from the grid/layout formula. Flag any coordinate that can't be explained by the layout logic.
284
+
285
+ ---
286
+
287
+ ## 6-Pass Verification Workflow
288
+
289
+ Run these passes **in order** after writing or editing any TikZ diagram or matplotlib figure:
290
+
291
+ | Pass | Rules | What to check | Stop condition |
292
+ |------|-------|---------------|----------------|
293
+ | **1. Bezier curves** | 1, 2, 3 | Compute depth for every `bend`/`in`/`out` (TikZ) or `arc3` (matplotlib). Check clearance against all nearby elements. | All curves have documented depths; no element within `depth + 0.3cm` of chord midpoint |
294
+ | **2. Gap calculations** | 4, 5 | Measure edge-to-edge distance for every adjacent pair. Check annotation rectangles. | All gaps meet minimums in Rule 4 table |
295
+ | **3. Label positioning** | 6, 7 | Estimate text width vs. available space. Verify edge labels account for curvature. | All labels fit; curved-arrow labels use `pos=` or manual placement |
296
+ | **4. Shape boundaries** | 8 | Verify every label near a circle/rectangle/patch clears its computed boundary by 0.4cm. | All labels have documented clearance from nearest shape edge |
297
+ | **5. Structural checks** | 9, 10 | Verify anchor consistency. Re-derive every coordinate from layout formula. | All anchors consistent; every coordinate has a comment |
298
+ | **6. Visual PDF review** | All | Compile and inspect rendered output (use `pdf-to-images.py` if available). | No overlaps, no misalignment, no clipped text |
299
+
300
+ ---
301
+
302
+ ## Quick Reference: Bezier Depth Table
303
+
304
+ Pre-computed depths for common bend angles (per 1cm of chord):
305
+
306
+ | Bend angle | `tan(angle/2)` | Depth per cm of chord |
307
+ |-----------|----------------|----------------------|
308
+ | 15 | 0.1317 | 0.066 cm |
309
+ | 20 | 0.1763 | 0.088 cm |
310
+ | 25 | 0.2217 | 0.111 cm |
311
+ | 30 | 0.2679 | 0.134 cm |
312
+ | 35 | 0.3153 | 0.158 cm |
313
+ | 40 | 0.3640 | 0.182 cm |
314
+ | 45 | 0.4142 | 0.207 cm |
315
+ | 50 | 0.4663 | 0.233 cm |
316
+ | 60 | 0.5774 | 0.289 cm |
317
+
318
+ **Usage:** `depth = (chord / 2) * value_from_table`
319
+
320
+ Example: 8cm chord, bend=40 -> depth = 4 * 0.364 = 1.456cm
321
+
322
+ ---
323
+
324
+ ## Matplotlib Extension: arc3 Bézier & Anchor-Based Centering
325
+
326
+ > These rules extend the TikZ principles to Python/matplotlib figures generated in Phase 3. The same "never eyeball, always compute" principle applies.
327
+
328
+ ### Bézier-First for matplotlib Arrows
329
+
330
+ When labelling curved arrows using `connectionstyle='arc3,rad=R'`, compute the actual curve position before placing labels. The same "Claude cannot eyeball where a curve passes" rule from Pass 1 applies to Python figures.
331
+
332
+ **Control point formula:**
333
+
334
+ ```python
335
+ # For ax.annotate with connectionstyle='arc3,rad=R':
336
+ # Start: (x1, y1), End: (x2, y2)
337
+ dx, dy = x2 - x1, y2 - y1
338
+ cx = (x1 + x2) / 2 + R * dy # control point x
339
+ cy = (y1 + y2) / 2 - R * dx # control point y
340
+ ```
341
+
342
+ **To find where the curve passes at any point**, use the quadratic Bézier formula:
343
+
344
+ ```
345
+ B(t) = (1-t)²·P0 + 2(1-t)t·P1 + t²·P2, t ∈ [0,1]
346
+ ```
347
+
348
+ **Label placement workflow:**
349
+ 1. Compute the control point using the formula above
350
+ 2. Find t at the desired x-coordinate (numerical sampling)
351
+ 3. Compute y(t) — this is where the curve actually passes
352
+ 4. Offset the label perpendicular to the curve with a white-background bbox
353
+
354
+ **Label offset direction:**
355
+ - Arrow curves upward → label above (`va='bottom'`)
356
+ - Arrow curves downward → label below (`va='top'`)
357
+ - Arrow is straight → label above (`va='bottom'`)
358
+
359
+ ### Anchor-Based Centering of Text Pairs
360
+
361
+ When multiple text elements (title + math, header + body) are placed inside a single container, do NOT use `va='center'` for both at symmetric y-offsets. Multi-line text extends further from its anchor than single-line text, creating visual asymmetry even when coordinates are symmetric.
362
+
363
+ **Instead, anchor both elements outward from the container's center:**
364
+ - Upper element: `va='bottom'` at `center_y + small_gap` (text grows upward)
365
+ - Lower element: `va='top'` at `center_y - small_gap` (text grows downward)
366
+
367
+ ```python
368
+ # WRONG — symmetric coordinates but visually asymmetric
369
+ ax.text(x, box_mid_y + 0.7, 'Title\nLine 2', va='center', ...) # top-heavy
370
+ ax.text(x, box_mid_y - 0.7, r'$math$', va='center', ...) # too low
371
+
372
+ # RIGHT — anchor-based, text grows outward from center
373
+ ax.text(x, box_mid_y + 0.15, 'Title\nLine 2', va='bottom', ...) # grows UP
374
+ ax.text(x, box_mid_y - 0.15, r'$math$', va='top', ...) # grows DOWN
375
+ ```
376
+
377
+ ### Helper Functions (Copy-Paste Template)
378
+
379
+ Include these at the top of any matplotlib script with curved arrows:
380
+
381
+ ```python
382
+ import numpy as np
383
+
384
+ def arc3_control_point(x1, y1, x2, y2, rad):
385
+ """Compute the quadratic Bézier control point for matplotlib's arc3."""
386
+ dx, dy = x2 - x1, y2 - y1
387
+ cx = (x1 + x2) / 2 + rad * dy
388
+ cy = (y1 + y2) / 2 - rad * dx
389
+ return cx, cy
390
+
391
+ def find_t_for_x(target_x, x1, cx, x2, num_samples=1000):
392
+ """Find the Bézier parameter t where x(t) ≈ target_x."""
393
+ ts = np.linspace(0, 1, num_samples)
394
+ xs = (1 - ts)**2 * x1 + 2 * (1 - ts) * ts * cx + ts**2 * x2
395
+ return ts[np.argmin(np.abs(xs - target_x))]
396
+
397
+ def bezier_y_at_t(t, y1, cy, y2):
398
+ """Y-coordinate of quadratic Bézier at parameter t."""
399
+ return (1 - t)**2 * y1 + 2 * (1 - t) * t * cy + t**2 * y2
400
+ ```
401
+
402
+ **When to use:** Every time a matplotlib figure has `connectionstyle='arc3'` AND labels near those arrows.
@@ -0,0 +1,121 @@
1
+ # Validation Tiers
2
+
3
+ > Shared reference for research projects. Declare the validation tier before proceeding with analysis. This determines claim strength, required sample sizes, and quality thresholds. Adapted from CommDAAF AgentAcademy protocol (Xu 2026).
4
+
5
+ ## Principle
6
+
7
+ **Declare the tier before examining results.** This prevents scope creep (exploratory work masquerading as publication-ready) and under-investment (publication claims with pilot-level validation). The tier is locked at project initialisation and can only be upgraded through explicit re-declaration.
8
+
9
+ ---
10
+
11
+ ## The Three Tiers
12
+
13
+ | Tier | Label | Validation Required | Claim Strength | Time Investment |
14
+ |------|-------|-------------------|----------------|-----------------|
15
+ | 🟢 | **Exploratory** | Basic checks, robustness to obvious alternatives | Hypothesis-generating, suggestive | Hours to 1 day |
16
+ | 🟡 | **Pilot** | Sensitivity analysis, multiple specifications, spot-checks | Tentative conclusions, "warrants further investigation" | 1-3 days |
17
+ | 🔴 | **Publication** | Full robustness battery, pre-registration, replication, external validation | "Robust evidence", causal claims (if design supports) | 3+ days |
18
+
19
+ ---
20
+
21
+ ## What Each Tier Requires
22
+
23
+ ### 🟢 Exploratory
24
+
25
+ **Purpose:** Quick investigation, feasibility check, pattern discovery.
26
+
27
+ | Requirement | Standard |
28
+ |-------------|----------|
29
+ | Sample size | No minimum (but state N) |
30
+ | Robustness | At least 1 alternative specification |
31
+ | Standard errors | Correct level (clustered if panel) |
32
+ | Sensitivity | Not required |
33
+ | Pre-registration | Not required |
34
+ | Replication | Not required |
35
+ | Claim language | "suggests", "preliminary evidence", "initial exploration" |
36
+
37
+ **Escalation trigger:** If the user makes causal claims or says "we find that X causes Y" at exploratory tier → escalate to Level 2.
38
+
39
+ ### 🟡 Pilot
40
+
41
+ **Purpose:** Serious investigation with enough rigour to guide next steps.
42
+
43
+ | Requirement | Standard |
44
+ |-------------|----------|
45
+ | Sample size | Justify based on method (power analysis encouraged) |
46
+ | Robustness | 3+ alternative specifications |
47
+ | Standard errors | Correct and justified |
48
+ | Sensitivity | Key parameter sensitivity (at minimum: functional form, sample restrictions) |
49
+ | Pre-registration | Encouraged |
50
+ | Replication | Internal (split-sample or bootstrap) |
51
+ | Claim language | "evidence consistent with", "findings warrant further investigation" |
52
+
53
+ **Escalation trigger:** If the user submits pilot-tier work to a top journal without upgrading → escalate to Level 3.
54
+
55
+ ### 🔴 Publication
56
+
57
+ **Purpose:** Results intended for peer-reviewed publication.
58
+
59
+ | Requirement | Standard |
60
+ |-------------|----------|
61
+ | Sample size | Power analysis required (justify effect size assumption) |
62
+ | Robustness | Full battery: alternative DVs, specifications, samples, estimators |
63
+ | Standard errors | Multiple approaches compared (e.g., robust, clustered, wild bootstrap) |
64
+ | Sensitivity | Formal sensitivity analysis (Oster bounds, Rosenbaum bounds, or equivalent) |
65
+ | Pre-registration | Required for experiments; strongly encouraged for observational |
66
+ | Replication | Cross-language (if code-based) or cross-method |
67
+ | External validation | Where possible (out-of-sample, different dataset, different context) |
68
+ | Claim language | Must match identification strategy — no "effects" without causal design |
69
+
70
+ **Escalation trigger:** If any publication requirement is missing → escalate per the full [escalation protocol](escalation-protocol.md).
71
+
72
+ ---
73
+
74
+ ## How to Declare
75
+
76
+ ### At project initialisation (`/init-project-research`)
77
+
78
+ The tier is recorded in `.planning/state.md`:
79
+
80
+ ```markdown
81
+ ## Validation Tier
82
+ 🟡 PILOT — sensitivity analysis + multiple specifications required
83
+ Declared: 2026-03-15
84
+ Rationale: Conference paper for CORE A venue, not yet targeting journal
85
+ ```
86
+
87
+ ### Mid-project upgrade
88
+
89
+ To upgrade tier (e.g., exploratory → publication):
90
+
91
+ 1. State the new tier and why
92
+ 2. Review existing work against the new tier's requirements
93
+ 3. List what additional validation is needed
94
+ 4. Update `.planning/state.md`
95
+
96
+ Downgrades are also legitimate: "We're cutting scope to exploratory for this conference deadline."
97
+
98
+ ---
99
+
100
+ ## Integration with Existing Systems
101
+
102
+ | System | How tiers interact |
103
+ |--------|-------------------|
104
+ | **Severity gradient** (`severity-gradient` rule) | Tier maps to phase: Exploratory ≈ Discovery, Pilot ≈ Drafting, Publication ≈ Pre-submission |
105
+ | **Escalation protocol** (`escalation-protocol.md`) | Tiers define what triggers escalation — exploratory has a longer leash |
106
+ | **Design-before-results** rule | Applies at all tiers, but strictness scales: exploratory allows iteration, publication requires pre-commitment |
107
+ | **Method probing** (`method-probing-questions.md`) | All tiers require answering probing questions; the depth of acceptable answers varies |
108
+ | **Review agents** | `referee2-reviewer` calibrates expectations to declared tier |
109
+ | **Quality scoring** | Thresholds from severity-gradient: 60 (exploratory), 70 (pilot), 90 (publication) |
110
+
111
+ ---
112
+
113
+ ## Anti-Patterns
114
+
115
+ | Anti-Pattern | Why It's Wrong | Correct Approach |
116
+ |-------------|----------------|------------------|
117
+ | No tier declared | Defaults create confusion — exploratory work gets judged as publication | Always declare at start |
118
+ | "Exploratory" with causal claims | Claim strength exceeds validation level | Either upgrade tier or soften claims |
119
+ | "Publication" with no sensitivity analysis | Missing a core requirement | Add sensitivity before submitting |
120
+ | Upgrading tier after seeing results | Post-hoc rationalisation | Tier must be declared before results |
121
+ | Same tier for all projects | One size doesn't fit all | Match tier to actual goals |
@@ -0,0 +1,46 @@
1
+ # Venue Guides — Shared Resource
2
+
3
+ Writing style guides, reviewer expectations, and formatting requirements for academic publication venues. Used by multiple skills and agents.
4
+
5
+ ## Contents
6
+
7
+ ### Writing Style Guides
8
+ | File | Covers |
9
+ |------|--------|
10
+ | `venue_writing_styles.md` | Master overview — style spectrum, quick reference, adaptation tips |
11
+ | `nature_science_style.md` | Nature, Science, PNAS — accessibility, storytelling, broad impact |
12
+ | `cell_press_style.md` | Cell, Neuron, Immunity — graphical abstracts, eTOC, Highlights |
13
+ | `medical_journal_styles.md` | NEJM, Lancet, JAMA, BMJ — structured abstracts, evidence language |
14
+ | `ml_conference_style.md` | NeurIPS, ICML, ICLR, CVPR — contribution bullets, ablations |
15
+ | `cs_conference_style.md` | ACL, EMNLP, CHI, SIGKDD — field-specific conventions |
16
+
17
+ ### Reviewer Expectations
18
+ | File | Covers |
19
+ |------|--------|
20
+ | `reviewer_expectations.md` | What reviewers prioritise at each venue type, common rejection reasons, rebuttal strategies |
21
+
22
+ ### Formatting Requirements
23
+ | File | Covers |
24
+ |------|--------|
25
+ | `journals_formatting.md` | Page limits, citation styles, figure requirements for 50+ journals |
26
+ | `conferences_formatting.md` | Conference paper specifications (NeurIPS, ICML, CHI, etc.) |
27
+
28
+ ### Writing Examples (`examples/`)
29
+ | File | Shows |
30
+ |------|-------|
31
+ | `nature_abstract_examples.md` | Flowing paragraph abstracts for high-impact journals |
32
+ | `neurips_introduction_example.md` | ML conference intro with contribution bullets |
33
+ | `cell_summary_example.md` | Cell Press Summary, Highlights, eTOC format |
34
+ | `medical_structured_abstract.md` | NEJM, Lancet, JAMA structured abstract format |
35
+
36
+ ## Consumers
37
+
38
+ | Skill / Agent | What it uses |
39
+ |---------------|-------------|
40
+ | `/retarget-journal` | Formatting requirements + writing style when switching venues |
41
+ | `paper-critic` agent | Reviewer expectations when evaluating paper quality |
42
+ | `referee2-reviewer` agent | Reviewer expectations for venue-appropriate critique |
43
+
44
+ ## Origin
45
+
46
+ Extracted from the venue-templates skill (K-Dense Inc., MIT license). US grant templates (NSF, NIH, DOE, DARPA) and poster guidelines were excluded — grants are not relevant to UK-based research, and posters are covered by `/latex-posters`.