psyclaw 0.28.0 → 0.28.2

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 (167) hide show
  1. package/README.md +5 -5
  2. package/agents/recommended/catalog.json +99 -0
  3. package/dist/apps/panel/index.html +5 -5
  4. package/dist/src/adapters/pi/extension.js +164 -18
  5. package/dist/src/adapters/pi/extension.js.map +1 -1
  6. package/dist/src/adapters/pi/rpc.d.ts +2 -0
  7. package/dist/src/adapters/pi/rpc.js +9 -2
  8. package/dist/src/adapters/pi/rpc.js.map +1 -1
  9. package/dist/src/agents/recommended-personas.d.ts +42 -0
  10. package/dist/src/agents/recommended-personas.js +135 -0
  11. package/dist/src/agents/recommended-personas.js.map +1 -0
  12. package/dist/src/ars/mode-editor.d.ts +20 -0
  13. package/dist/src/ars/mode-editor.js +57 -0
  14. package/dist/src/ars/mode-editor.js.map +1 -0
  15. package/dist/src/ars/profile.d.ts +4 -1
  16. package/dist/src/ars/profile.js +23 -6
  17. package/dist/src/ars/profile.js.map +1 -1
  18. package/dist/src/cli.js +6 -3
  19. package/dist/src/cli.js.map +1 -1
  20. package/dist/src/creation/contracts.d.ts +3 -0
  21. package/dist/src/creation/service.js +17 -5
  22. package/dist/src/creation/service.js.map +1 -1
  23. package/dist/src/index.d.ts +1 -0
  24. package/dist/src/index.js +1 -0
  25. package/dist/src/index.js.map +1 -1
  26. package/dist/src/orchestration/bundled-personas.d.ts +16 -0
  27. package/dist/src/orchestration/bundled-personas.js +101 -0
  28. package/dist/src/orchestration/bundled-personas.js.map +1 -0
  29. package/dist/src/orchestration/effects.d.ts +8 -0
  30. package/dist/src/orchestration/effects.js +39 -0
  31. package/dist/src/orchestration/effects.js.map +1 -0
  32. package/dist/src/orchestration/personas.d.ts +2 -1
  33. package/dist/src/orchestration/personas.js +20 -7
  34. package/dist/src/orchestration/personas.js.map +1 -1
  35. package/dist/src/orchestration/pi-executor.d.ts +9 -5
  36. package/dist/src/orchestration/pi-executor.js +55 -22
  37. package/dist/src/orchestration/pi-executor.js.map +1 -1
  38. package/dist/src/orchestration/research-agents.d.ts +3 -7
  39. package/dist/src/orchestration/research-agents.js +5 -69
  40. package/dist/src/orchestration/research-agents.js.map +1 -1
  41. package/dist/src/panel/server.js +6 -0
  42. package/dist/src/panel/server.js.map +1 -1
  43. package/dist/src/style/cli-ui.d.ts +14 -0
  44. package/dist/src/style/cli-ui.js +45 -0
  45. package/dist/src/style/cli-ui.js.map +1 -1
  46. package/dist/src/tui/skill-manager.js +1 -1
  47. package/dist/src/tui/skill-manager.js.map +1 -1
  48. package/dist/src/updates/update.js +9 -3
  49. package/dist/src/updates/update.js.map +1 -1
  50. package/package.json +11 -3
  51. package/vendor/academic-paper-skills/LICENSE +21 -0
  52. package/vendor/academic-paper-skills/NOTICE.md +7 -0
  53. package/vendor/academic-paper-skills/PSYCLAW_SOURCE.json +14 -0
  54. package/vendor/academic-paper-skills/academic-paper-composer/SKILL.md +840 -0
  55. package/vendor/academic-paper-skills/academic-paper-composer/references/section_guides.md +675 -0
  56. package/vendor/academic-paper-skills/academic-paper-composer/references/writing_standards.md +629 -0
  57. package/vendor/academic-paper-skills/academic-paper-composer/scripts/chapter_quality_check.py +470 -0
  58. package/vendor/academic-paper-skills/academic-paper-composer/scripts/final_evaluation.py +550 -0
  59. package/vendor/academic-paper-skills/academic-paper-strategist/SKILL.md +670 -0
  60. package/vendor/academic-paper-skills/academic-paper-strategist/references/quality_standards.md +336 -0
  61. package/vendor/academic-paper-skills/academic-paper-strategist/references/search_strategy.md +459 -0
  62. package/vendor/academic-paper-skills/academic-paper-strategist/scripts/evaluate_samples.py +300 -0
  63. package/vendor/academic-paper-skills/academic-paper-strategist/scripts/gap_analysis.py +399 -0
  64. package/vendor/ars/pi/wrapper.js +9 -0
  65. package/vendor/nature-skills/LICENSE +201 -0
  66. package/vendor/nature-skills/NOTICE.md +7 -0
  67. package/vendor/nature-skills/PSYCLAW_SOURCE.json +19 -0
  68. package/vendor/nature-skills/skills/nature-figure/README.md +107 -0
  69. package/vendor/nature-skills/skills/nature-figure/README_EN.md +107 -0
  70. package/vendor/nature-skills/skills/nature-figure/SKILL.md +154 -0
  71. package/vendor/nature-skills/skills/nature-figure/agents/openai.yaml +4 -0
  72. package/vendor/nature-skills/skills/nature-figure/evals/evals.json +325 -0
  73. package/vendor/nature-skills/skills/nature-figure/manifest.yaml +103 -0
  74. package/vendor/nature-skills/skills/nature-figure/references/ai-graphical-abstract-workflow.md +129 -0
  75. package/vendor/nature-skills/skills/nature-figure/references/api.md +576 -0
  76. package/vendor/nature-skills/skills/nature-figure/references/asset-adaptation.md +72 -0
  77. package/vendor/nature-skills/skills/nature-figure/references/backend-selection.md +118 -0
  78. package/vendor/nature-skills/skills/nature-figure/references/chart-types.md +348 -0
  79. package/vendor/nature-skills/skills/nature-figure/references/common-patterns.md +371 -0
  80. package/vendor/nature-skills/skills/nature-figure/references/demos.md +58 -0
  81. package/vendor/nature-skills/skills/nature-figure/references/design-theory.md +467 -0
  82. package/vendor/nature-skills/skills/nature-figure/references/figure-contract.md +122 -0
  83. package/vendor/nature-skills/skills/nature-figure/references/figure-legend-conventions.md +90 -0
  84. package/vendor/nature-skills/skills/nature-figure/references/multipanel-evidence-architecture.md +268 -0
  85. package/vendor/nature-skills/skills/nature-figure/references/nature-2026-observations.md +124 -0
  86. package/vendor/nature-skills/skills/nature-figure/references/nature-article-requirements.md +149 -0
  87. package/vendor/nature-skills/skills/nature-figure/references/openrouter-image-generation.md +141 -0
  88. package/vendor/nature-skills/skills/nature-figure/references/qa-contract.md +344 -0
  89. package/vendor/nature-skills/skills/nature-figure/references/r-template-index.md +66 -0
  90. package/vendor/nature-skills/skills/nature-figure/references/r-workflow.md +234 -0
  91. package/vendor/nature-skills/skills/nature-figure/references/template-catalog.md +33 -0
  92. package/vendor/nature-skills/skills/nature-figure/references/tutorials.md +260 -0
  93. package/vendor/nature-skills/skills/nature-figure/requirements.txt +1 -0
  94. package/vendor/nature-skills/skills/nature-figure/scripts/audit_figure_collisions.py +742 -0
  95. package/vendor/nature-skills/skills/nature-figure/scripts/audit_panel_alignment.py +933 -0
  96. package/vendor/nature-skills/skills/nature-figure/scripts/audit_pdf_text.py +152 -0
  97. package/vendor/nature-skills/skills/nature-figure/scripts/figure_safety.py +50 -0
  98. package/vendor/nature-skills/skills/nature-figure/scripts/generate_openrouter_schematic.py +260 -0
  99. package/vendor/nature-skills/skills/nature-figure/scripts/nature_figure_backend.py +93 -0
  100. package/vendor/nature-skills/skills/nature-figure/scripts/panel_alignment.R +188 -0
  101. package/vendor/nature-skills/skills/nature-figure/scripts/plot_templates.py +604 -0
  102. package/vendor/nature-skills/skills/nature-figure/scripts/validate_figure.py +835 -0
  103. package/vendor/nature-skills/skills/nature-figure/static/core/contract.md +55 -0
  104. package/vendor/nature-skills/skills/nature-figure/static/core/stance.md +41 -0
  105. package/vendor/nature-skills/skills/nature-figure/static/fragments/backend/python.md +56 -0
  106. package/vendor/nature-skills/skills/nature-figure/static/fragments/backend/r.md +63 -0
  107. package/vendor/nature-skills/skills/nature-figure/tests/test_figure_safety.py +209 -0
  108. package/vendor/nature-skills/skills/nature-polishing/README.md +58 -0
  109. package/vendor/nature-skills/skills/nature-polishing/README_EN.md +58 -0
  110. package/vendor/nature-skills/skills/nature-polishing/SKILL.md +111 -0
  111. package/vendor/nature-skills/skills/nature-polishing/agents/openai.yaml +4 -0
  112. package/vendor/nature-skills/skills/nature-polishing/manifest.yaml +101 -0
  113. package/vendor/nature-skills/skills/nature-polishing/references/latex-layout.md +211 -0
  114. package/vendor/nature-skills/skills/nature-polishing/references/nat-comms-2025-diction.md +73 -0
  115. package/vendor/nature-skills/skills/nature-polishing/references/phrasebank-playbook.md +175 -0
  116. package/vendor/nature-skills/skills/nature-polishing/references/published-article-patterns.md +126 -0
  117. package/vendor/nature-skills/skills/nature-polishing/references/section-moves.md +252 -0
  118. package/vendor/nature-skills/skills/nature-polishing/references/style-guardrails.md +94 -0
  119. package/vendor/nature-skills/skills/nature-polishing/references/writing-strategy.md +160 -0
  120. package/vendor/nature-skills/skills/nature-polishing/static/core/failure-modes.md +29 -0
  121. package/vendor/nature-skills/skills/nature-polishing/static/core/output-format.md +21 -0
  122. package/vendor/nature-skills/skills/nature-polishing/static/core/stance.md +26 -0
  123. package/vendor/nature-skills/skills/nature-polishing/static/fragments/journal/generic.md +17 -0
  124. package/vendor/nature-skills/skills/nature-polishing/static/fragments/journal/nat-comms.md +38 -0
  125. package/vendor/nature-skills/skills/nature-polishing/static/fragments/journal/nat-mach-intell.md +102 -0
  126. package/vendor/nature-skills/skills/nature-polishing/static/fragments/journal/nature.md +19 -0
  127. package/vendor/nature-skills/skills/nature-polishing/static/fragments/language/en.md +19 -0
  128. package/vendor/nature-skills/skills/nature-polishing/static/fragments/language/zh-to-en.md +19 -0
  129. package/vendor/nature-skills/skills/nature-polishing/static/fragments/paper_type/algorithmic.md +18 -0
  130. package/vendor/nature-skills/skills/nature-polishing/static/fragments/paper_type/hypothesis.md +17 -0
  131. package/vendor/nature-skills/skills/nature-polishing/static/fragments/paper_type/methods.md +35 -0
  132. package/vendor/nature-skills/skills/nature-polishing/static/fragments/paper_type/research.md +29 -0
  133. package/vendor/nature-skills/skills/nature-polishing/static/fragments/paper_type/review.md +17 -0
  134. package/vendor/nature-skills/skills/nature-polishing/static/fragments/section/abstract.md +26 -0
  135. package/vendor/nature-skills/skills/nature-polishing/static/fragments/section/conclusion.md +15 -0
  136. package/vendor/nature-skills/skills/nature-polishing/static/fragments/section/discussion.md +48 -0
  137. package/vendor/nature-skills/skills/nature-polishing/static/fragments/section/intro.md +33 -0
  138. package/vendor/nature-skills/skills/nature-polishing/static/fragments/section/methods.md +26 -0
  139. package/vendor/nature-skills/skills/nature-polishing/static/fragments/section/results.md +61 -0
  140. package/vendor/nature-skills/skills/nature-polishing/static/fragments/section/title.md +17 -0
  141. package/vendor/nature-skills/skills/nature-ref-verifier/README.md +44 -0
  142. package/vendor/nature-skills/skills/nature-ref-verifier/README_EN.md +44 -0
  143. package/vendor/nature-skills/skills/nature-ref-verifier/SKILL.md +196 -0
  144. package/vendor/nature-skills/skills/nature-ref-verifier/agents/openai.yaml +4 -0
  145. package/vendor/nature-skills/skills/nature-ref-verifier/manifest.yaml +19 -0
  146. package/vendor/nature-skills/skills/nature-ref-verifier/references/common-patterns.md +96 -0
  147. package/vendor/nature-skills/skills/nature-shared/README.md +43 -0
  148. package/vendor/nature-skills/skills/nature-shared/README_EN.md +43 -0
  149. package/vendor/nature-skills/skills/nature-shared/SKILL.md +33 -0
  150. package/vendor/nature-skills/skills/nature-shared/agents/openai.yaml +6 -0
  151. package/vendor/nature-skills/skills/nature-shared/core/consistency-sweep.md +122 -0
  152. package/vendor/nature-skills/skills/nature-shared/core/discussion-argument-language.md +192 -0
  153. package/vendor/nature-skills/skills/nature-shared/core/ethics.md +88 -0
  154. package/vendor/nature-skills/skills/nature-shared/core/main-text-discipline.md +179 -0
  155. package/vendor/nature-skills/skills/nature-shared/core/nature-abstract.md +171 -0
  156. package/vendor/nature-skills/skills/nature-shared/core/nature-introduction.md +164 -0
  157. package/vendor/nature-skills/skills/nature-shared/core/nature-results-discussion.md +215 -0
  158. package/vendor/nature-skills/skills/nature-shared/core/paper-type-taxonomy.md +41 -0
  159. package/vendor/nature-skills/skills/nature-shared/core/reader-workflow.md +21 -0
  160. package/vendor/nature-skills/skills/nature-shared/core/research-compliance.md +192 -0
  161. package/vendor/nature-skills/skills/nature-shared/core/terminology-ledger.md +58 -0
  162. package/vendor/nature-skills/skills/nature-shared/journal-formats/nat-comms.md +139 -0
  163. package/vendor/nature-skills/skills/nature-shared/journal-formats/nature-machine-intelligence.md +431 -0
  164. package/vendor/nature-skills/skills/nature-shared/journal-formats/nature.md +313 -0
  165. package/vendor/nature-skills/skills/nature-shared/manifest.yaml +52 -0
  166. package/vendor/nature-skills/skills/nature-shared/scripts/check_consistency.py +273 -0
  167. package/vendor/nature-skills/skills/nature-shared/tests/test_check_consistency.py +63 -0
@@ -0,0 +1,313 @@
1
+ # Nature Article submission requirements
2
+
3
+ Canonical shared rules for an original-research **Article submitted to the
4
+ flagship journal Nature**. Do not apply these numbers automatically to Nature
5
+ Portfolio subjournals. Their author instructions can differ substantially.
6
+
7
+ ## Contents
8
+
9
+ 1. Authority and stage gate
10
+ 2. Editorial fit
11
+ 3. Initial-submission file preflight
12
+ 4. Article structure and limits
13
+ 5. Administrative and authorship checks
14
+ 6. Displays, Extended Data and Supplementary Information
15
+ 7. Reporting, availability and specialist routing
16
+ 8. Submission modes and related work
17
+ 9. Final-submission boundary
18
+ 10. Official sources
19
+
20
+ ## 1. Authority and stage gate
21
+
22
+ Before applying a rule, record the stage:
23
+
24
+ - `initial_submission`: before the first editorial decision; Nature permits
25
+ reasonable formatting flexibility.
26
+ - `revision`: after review; follow the handling editor's instructions in
27
+ addition to the public guide.
28
+ - `accepted_in_principle`: production-quality text, figures, Extended Data,
29
+ Supplementary Information, forms and declarations are requested.
30
+ - `proof`: production corrections only; not a new manuscript rewrite.
31
+
32
+ Do not reject an otherwise reviewable initial submission merely because it has
33
+ not yet been converted to final production house style. Still run the readiness
34
+ checks below because they reduce avoidable delays and expose missing policy
35
+ items.
36
+
37
+ ## 2. Editorial fit
38
+
39
+ A Nature Article should:
40
+
41
+ - report original scientific research whose main results and conclusions are
42
+ not published or simultaneously submitted elsewhere
43
+ - be of outstanding scientific importance
44
+ - reach a conclusion of interest to an interdisciplinary readership
45
+ - present results that are novel and arresting, with immediate and
46
+ far-reaching implications
47
+
48
+ Additional fit tests:
49
+
50
+ - a large-dataset paper should provide a comprehensively validated dataset or
51
+ a significant technical advance or scientific insight
52
+ - a solely technical paper needs significant impact for a research community
53
+ - a therapeutic paper without new mechanism needs a substantial effect on an
54
+ important disease
55
+
56
+ Treat these as editorial-fit criteria, not formatting promises. Flag weak fit
57
+ instead of inflating significance language.
58
+
59
+ ## 3. Initial-submission file preflight
60
+
61
+ For a standard initial submission:
62
+
63
+ - submit through Nature's online manuscript system
64
+ - prefer manuscript text and figures together in one Microsoft Word or PDF
65
+ file, up to 30 MB
66
+ - place each figure legend on the same page as its figure
67
+ - include line numbers; number every line in a supplied PDF
68
+ - include titles for cited articles and datasets in the reference list
69
+ - before acceptance, submit a PDF for a TeX/LaTeX manuscript
70
+ - ensure figures have enough resolution for referees, while recognizing that
71
+ production-quality files are not required at this stage
72
+
73
+ If the submission uses separate files, record why and verify every display is
74
+ cited and present.
75
+
76
+ ## 4. Article structure and limits
77
+
78
+ ### Required sequence
79
+
80
+ Audit the manuscript in this order:
81
+
82
+ 1. title
83
+ 2. authors
84
+ 3. affiliations and present addresses
85
+ 4. bold summary paragraph
86
+ 5. main text
87
+ 6. main references
88
+ 7. tables
89
+ 8. figure legends
90
+ 9. Methods, including separate Data Availability and Code Availability
91
+ statements where applicable
92
+ 10. Methods references
93
+ 11. acknowledgements
94
+ 12. funding statement
95
+ 13. author contributions
96
+ 14. competing-interests declaration
97
+ 15. additional information, including Supplementary Information and
98
+ corresponding-author lines
99
+ 16. Extended Data figure and table legends
100
+
101
+ ### Initial manuscript styling
102
+
103
+ - write in English using Oxford English Dictionary spelling conventions
104
+ - use double spacing
105
+ - Microsoft Word without style tags is preferred
106
+ - a standard font, preferably 12 pt Times New Roman, is recommended for the
107
+ manuscript text
108
+ - use normal text or Symbol font for ordinary mathematical and Greek symbols;
109
+ reserve equation editors for formulae that cannot be set reliably as text
110
+
111
+ ### Title
112
+
113
+ - no more than two printed lines, equivalent to 75 characters including spaces
114
+ - normally avoid numbers, acronyms, abbreviations and punctuation
115
+ - avoid technical terms and active verbs
116
+ - retain enough detail for indexing while remaining intelligible outside the
117
+ immediate field
118
+
119
+ ### Summary paragraph
120
+
121
+ - fully referenced and ideally no more than about 200 words
122
+ - written for readers outside the discipline
123
+ - avoid numbers, abbreviations, acronyms and measurements unless essential
124
+ - use the sequence: broad field, background/rationale, main conclusion
125
+ introduced by `Here we show` or an equivalent, then general context and how
126
+ the work moves the field forward
127
+
128
+ ### Main text and display budget
129
+
130
+ - typical six-page Article: about 2,500 words and four modest display items
131
+ - typical eight-page Article: about 4,300 words and five or six modest display
132
+ items
133
+ - a modest display item plus legend occupies about one-quarter page; a large
134
+ composite can require a corresponding reduction in text
135
+ - up to about 50 main-text references within the page budget
136
+ - subheadings may contain up to 40 characters including spaces
137
+ - the title, author list, acknowledgements and references do not count toward
138
+ the main-text word count
139
+
140
+ ### Methods
141
+
142
+ - include every element needed to interpret and replicate the results
143
+ - write concisely; the section typically does not exceed 3,000 words but may be
144
+ longer when necessary
145
+ - use short bold method headings and consider dedicated statistics, reagents
146
+ and animal-model subsections
147
+ - do not place figures or tables in Methods; route essential displays to
148
+ Extended Data or, exceptionally, Supplementary Information
149
+ - continue Methods-reference numbering after the main-text references
150
+ - cite deposited step-by-step protocols and mention them in Methods
151
+
152
+ ### References, tables and end notes
153
+
154
+ - number references sequentially in order of first appearance across text,
155
+ tables, legends, Methods and Extended Data
156
+ - use superscript citations in text unless confusion with another superscript
157
+ is likely
158
+ - list only one publication per reference number
159
+ - remove linked fields produced by EndNote or similar software
160
+ - normally include only published or accepted work and recognized preprints;
161
+ describe work in preparation in the text rather than the reference list
162
+ - include titles for cited articles and datasets
163
+ - list all authors unless there are more than five; then give the first author
164
+ followed by `et al.`
165
+ - give each table a short title sentence, with details in table footnotes
166
+ - keep acknowledgements brief; do not thank anonymous referees or editors and
167
+ avoid effusive praise
168
+ - declare funding separately only when the work is within scope of, and arose
169
+ directly from, the named grant
170
+ - include an individual author-contribution statement and a competing-interests
171
+ statement
172
+ - identify equal contributors directly below the address list when there are up
173
+ to three; describe larger equal-contribution groups in the author-
174
+ contributions statement
175
+ - place present addresses immediately below the author list
176
+
177
+ ## 5. Administrative and authorship checks
178
+
179
+ ### Corresponding author
180
+
181
+ Before submission, confirm that the corresponding author:
182
+
183
+ - has included all authors in the author list
184
+ - has confirmed that every author agrees with the list order and submission
185
+ - is prepared to manage all journal and coauthor communication
186
+ - is identified with an asterisk in the manuscript
187
+ - is named for correspondence and material requests
188
+
189
+ ### Cover letter
190
+
191
+ For flagship Nature, the initial cover letter is **optional**. If supplied:
192
+
193
+ - explain the importance of the work and its fit for Nature briefly
194
+ - do not repeat the abstract or introduction
195
+ - use it for confidential information that should not go to referees, including
196
+ relevant conflicts and related work in press or under consideration
197
+ - do not treat a missing optional cover letter as a submission blocker
198
+
199
+ ### AI and LLM use
200
+
201
+ - an LLM or other AI system cannot be an author
202
+ - human authors retain responsibility for originality, accuracy and integrity
203
+ - document LLM use in Methods or, if Methods is unavailable, a suitable
204
+ alternative section
205
+ - apply the current Nature Portfolio risk framework and disclosure rules in
206
+ `../core/ethics.md`
207
+
208
+ ## 6. Displays, Extended Data and Supplementary Information
209
+
210
+ ### Figures and legends at initial submission
211
+
212
+ - embed figures with the manuscript when practical
213
+ - high-resolution production files are not required initially, but data must be
214
+ assessable by referees
215
+ - keep each legend below 250 words
216
+ - begin with a brief title sentence, then describe what is depicted rather than
217
+ restating results or methods
218
+ - make the figure and legend understandable in isolation where possible
219
+
220
+ Use the Nature-specific figure reference in `nature-figure` for final dimensions,
221
+ editable formats, accessibility, image integrity and the distinction between
222
+ main-figure and Extended Data uploads.
223
+
224
+ ### Extended Data
225
+
226
+ - place integral supporting data in no more than ten multi-panel Extended Data
227
+ figures or tables
228
+ - consider a simple schematic when the main conclusion involves a complex
229
+ process unfamiliar to nonspecialists
230
+ - at initial submission, Extended Data may appear as regular display items or
231
+ within Supplementary Information
232
+ - accepted papers require formal Extended Data formatting
233
+
234
+ ### Supplementary Information
235
+
236
+ Use Supplementary Information only for peer-reviewed material essential to the
237
+ paper's conclusion that is too large, impractical or specialized for print.
238
+ Prefer Extended Data for ordinary figures and small tables.
239
+
240
+ When SI is present, audit:
241
+
242
+ - the categories Supplementary Methods, Tables, Discussion, Equations, Notes,
243
+ Data, Video and Audio
244
+ - numbering separate from main-text and Extended Data displays
245
+ - a `SIGuide.doc` containing each file title and a summary of no more than
246
+ 50 words; video/audio titles and legends may be up to 100 words
247
+ - no more than ten files where possible
248
+ - up to 30 MB per sound/video or combined PDF and no more than 150 MB total
249
+ - every SI item is cited in the manuscript and every file uses an accepted
250
+ format
251
+
252
+ Current accepted SI formats include PDF, Word, plain text, RTF, WordPerfect,
253
+ PostScript/EPS, HTML, Excel, QuickTime, WAV, MPEG/MP4/MP3 and supported systems-
254
+ biology markup formats such as SBML/XML/OWL. Keep SI images at or below
255
+ 640 × 480 pixels. If a required item cannot meet the format or size contract,
256
+ contact the handling editor rather than silently converting or omitting it.
257
+
258
+ ## 7. Reporting, availability and specialist routing
259
+
260
+ - include a Data Availability statement and, for central custom code or
261
+ algorithms, a separate Code Availability statement
262
+ - make supporting data and central code available to editors and referees when
263
+ requested
264
+ - route exact repository, accession, restriction and materials checks to
265
+ `nature-data`
266
+ - route Nature's exact statistical checklist to `nature-statistics`
267
+ - require a completed reporting summary for life sciences, behavioural and
268
+ social sciences, and ecology, evolution and environmental sciences
269
+ - check for field-specific physical-science reporting summaries, including
270
+ solar cells and claims of lasing
271
+ - open `../core/research-compliance.md` for human, animal, clinical, image,
272
+ structure, chemistry, taxonomy, geological, archaeological or
273
+ palaeontological research
274
+
275
+ ## 8. Submission modes and related work
276
+
277
+ - disclose related manuscripts with overlapping authorship that are under
278
+ consideration, under appeal or in press
279
+ - include copies of those manuscripts as clearly marked separate files
280
+ - preprints are permitted: the original submitted version may be posted at any
281
+ time; the accepted version may be posted six months after publication; the
282
+ copyedited published Nature version may not be posted to a preprint server or
283
+ another website
284
+ - double-anonymized review is optional; authors must remove identifying
285
+ information and are responsible for successful anonymization
286
+ - reviewer suggestions should be independent and include contact details;
287
+ Nature normally permits requests to exclude one or two competing groups
288
+ - a presubmission enquiry, when used, needs a broad-readership cover paragraph,
289
+ a fully referenced summary paragraph and a reference list
290
+
291
+ ## 9. Final-submission boundary
292
+
293
+ Do not apply accepted-in-principle production requirements as initial-submission
294
+ blockers. After an editor requests final files, separately audit:
295
+
296
+ - final accepted text and production-quality main and Extended Data files
297
+ - text/figure file separation and TeX/LaTeX conversion requirements
298
+ - final Supplementary Information and `SIGuide.doc`
299
+ - requested forms, declarations and licence workflow
300
+ - production figure specifications and unprocessed life-science gel/blot images
301
+
302
+ ## 10. Official sources
303
+
304
+ Verified 2026-08-08:
305
+
306
+ - Initial submission: <https://www.nature.com/nature/for-authors/initial-submission>
307
+ - Formatting guide: <https://www.nature.com/nature/for-authors/formatting-guide>
308
+ - Editorial criteria and processes: <https://www.nature.com/nature/for-authors/editorial-criteria-and-processes>
309
+ - Supplementary Information: <https://www.nature.com/nature/for-authors/supp-info>
310
+ - Forms and declarations: <https://www.nature.com/nature/for-authors/forms-and-declarations>
311
+ - Final submission: <https://www.nature.com/nature/for-authors/final-submission>
312
+ - Nature Portfolio reporting standards: <https://www.nature.com/nature-portfolio/editorial-policies/reporting-standards>
313
+ - Nature Portfolio AI policy: <https://www.nature.com/nature-portfolio/editorial-policies/ai>
@@ -0,0 +1,52 @@
1
+ name: nature-shared
2
+ version: 1.6.0
3
+ description: >
4
+ Declarative manifest for shared Nature reference modules. This package is not
5
+ a standalone workflow; installed Nature skills use it to load exact shared
6
+ core or journal-format files on demand.
7
+
8
+ # Design note: never preload the whole shared package. Requesting skills should
9
+ # load only the specific file listed below and then return to their own workflow,
10
+ # output format, and QA rules.
11
+
12
+ always_load: []
13
+
14
+ core:
15
+ on_demand:
16
+ - condition: shared ethics, safety, authorship, disclosure, or non-invention guardrails are needed
17
+ path: core/ethics.md
18
+ - condition: human or animal ethics, clinical research, reporting summaries, image integrity, structures, chemistry, taxonomy, geological, archaeological, or palaeontological compliance is involved
19
+ path: core/research-compliance.md
20
+ - condition: classifying paper type, article genre, or manuscript family before applying a writing/reader workflow
21
+ path: core/paper-type-taxonomy.md
22
+ - condition: shared reader workflow is explicitly requested by another Nature skill
23
+ path: core/reader-workflow.md
24
+ - condition: maintaining terminology consistency across paper reading, polishing, writing, or slide generation
25
+ path: core/terminology-ledger.md
26
+ - condition: auditing an existing or multi-round-revised manuscript for accumulated drift — terminology/unit/number variants, headline counts that do not reconcile with the Methods, claims contradicted by the paper's own tables, over- or under-claiming, tense parallelism, and prose that restates displays
27
+ path: core/consistency-sweep.md
28
+ - condition: drafting, restructuring, compressing, or reviewer-revising scientific main text — classify results as core/support/qualification/robustness/heterogeneity/provenance/alternative inference/edge case; allocate evidence across main text, captions, and SI; run paragraph-necessity, deletion, statistics-location, and claim-repetition checks
29
+ path: core/main-text-discipline.md
30
+ - condition: drafting, restructuring, or polishing Results or Discussion for flagship Nature, Nature Communications, Nature Machine Intelligence, or another Nature Portfolio title; auditing claim escalation, evidence-bound local interpretation, diagnostic perturbation, necessary recap versus redundant re-demonstration, or cross-Results synthesis
31
+ path: core/nature-results-discussion.md
32
+ - condition: drafting, restructuring, or polishing any scientific Discussion; sequencing anchor, positioning, interpretation, contribution, limitations, and future work; calibrating modal verbs or hedging to evidence strength; or auditing whether Discussion repeats Results
33
+ path: core/discussion-argument-language.md
34
+ - condition: drafting, restructuring, or polishing an Introduction for flagship Nature, Nature Communications, Nature Machine Intelligence, or another Nature Portfolio title; building a fast problem funnel, exact knowledge gap, literature tension, question-first novelty, compact study roadmap, or Introduction–Results alignment audit
35
+ path: core/nature-introduction.md
36
+ - condition: drafting, restructuring, or polishing an abstract for flagship Nature, Nature Communications, Nature Machine Intelligence, or another Nature Portfolio title; compressing the manuscript into a discovery-centred evidence chain; selecting one main claim, one or two decisive supports, optional core numbers, and a bounded field-level payoff
37
+ path: core/nature-abstract.md
38
+
39
+ journal_formats:
40
+ on_demand:
41
+ - condition: formatting, initial-submission readiness, or stage-aware checking for a flagship Nature Article
42
+ path: journal-formats/nature.md
43
+ - condition: formatting or checking output for Nature Communications conventions
44
+ path: journal-formats/nat-comms.md
45
+ - condition: formatting, article-type selection, initial-submission readiness, or stage-aware checking for Nature Machine Intelligence
46
+ path: journal-formats/nature-machine-intelligence.md
47
+
48
+ quality_tools:
49
+ consistency_script: scripts/check_consistency.py
50
+ use_when: auditing an existing full manuscript or a manuscript revised over multiple rounds
51
+ purpose: warn about terminology variants, equivalent lengths expressed in different units, and equal numeric values reported at different precision
52
+ script_resolution: resolve relative to the nature-shared package directory, never the user working directory
@@ -0,0 +1,273 @@
1
+ #!/usr/bin/env python3
2
+ """Find mechanically detectable consistency risks in manuscript text files."""
3
+
4
+ from __future__ import annotations
5
+
6
+ import argparse
7
+ import json
8
+ import re
9
+ from dataclasses import asdict, dataclass
10
+ from decimal import Decimal, InvalidOperation
11
+ from pathlib import Path
12
+ from typing import Iterable, Sequence
13
+
14
+
15
+ DEFAULT_TERM_GROUPS = {
16
+ "self-reference": ("this study", "this work", "this paper", "this article"),
17
+ "standard-deviation": ("standard deviation", "SD", "Std"),
18
+ }
19
+
20
+ LENGTH_FACTORS_METRES = {
21
+ "um": Decimal("0.000001"),
22
+ "mm": Decimal("0.001"),
23
+ "cm": Decimal("0.01"),
24
+ "m": Decimal("1"),
25
+ }
26
+
27
+
28
+ @dataclass(frozen=True)
29
+ class Finding:
30
+ code: str
31
+ message: str
32
+ evidence: tuple[str, ...]
33
+
34
+
35
+ @dataclass(frozen=True)
36
+ class Occurrence:
37
+ path: Path
38
+ line: int
39
+ value: str
40
+
41
+ def label(self) -> str:
42
+ return f"{self.path}:{self.line}: {self.value}"
43
+
44
+
45
+ def read_sources(paths: Sequence[Path]) -> dict[Path, str]:
46
+ return {
47
+ path: path.read_text(encoding="utf-8", errors="replace")
48
+ for path in paths
49
+ }
50
+
51
+
52
+ def visible_lines(text: str) -> Iterable[tuple[int, str]]:
53
+ """Yield lines after removing Markdown fences and unescaped LaTeX comments."""
54
+ in_fence = False
55
+ for line_number, raw_line in enumerate(text.splitlines(), 1):
56
+ if re.match(r"^\s*```", raw_line):
57
+ in_fence = not in_fence
58
+ continue
59
+ if in_fence:
60
+ continue
61
+ line = re.sub(r"(?<!\\)%.*$", "", raw_line)
62
+ yield line_number, line
63
+
64
+
65
+ def phrase_pattern(phrase: str) -> re.Pattern[str]:
66
+ escaped = re.escape(phrase).replace(r"\ ", r"\s+")
67
+ prefix = r"(?<![\w-])" if phrase[0].isalnum() else ""
68
+ suffix = r"(?![\w-])" if phrase[-1].isalnum() else ""
69
+ return re.compile(prefix + escaped + suffix, re.IGNORECASE)
70
+
71
+
72
+ def find_phrase_occurrences(
73
+ sources: dict[Path, str], phrase: str
74
+ ) -> list[Occurrence]:
75
+ pattern = phrase_pattern(phrase)
76
+ occurrences: list[Occurrence] = []
77
+ for path, text in sources.items():
78
+ for line_number, line in visible_lines(text):
79
+ for match in pattern.finditer(line):
80
+ occurrences.append(Occurrence(path, line_number, match.group(0)))
81
+ return occurrences
82
+
83
+
84
+ def check_term_groups(
85
+ sources: dict[Path, str], groups: dict[str, tuple[str, ...]]
86
+ ) -> list[Finding]:
87
+ findings: list[Finding] = []
88
+ for group_name, variants in groups.items():
89
+ present: list[tuple[str, list[Occurrence]]] = []
90
+ for variant in variants:
91
+ occurrences = find_phrase_occurrences(sources, variant)
92
+ if occurrences:
93
+ present.append((variant, occurrences))
94
+ if len(present) < 2:
95
+ continue
96
+ counts = ", ".join(f"{variant}={len(items)}" for variant, items in present)
97
+ evidence = tuple(
98
+ occurrence.label()
99
+ for _, items in present
100
+ for occurrence in items[:3]
101
+ )
102
+ findings.append(
103
+ Finding(
104
+ code="TERM_VARIANTS_PRESENT",
105
+ message=f"term group '{group_name}' uses multiple variants: {counts}",
106
+ evidence=evidence,
107
+ )
108
+ )
109
+ return findings
110
+
111
+
112
+ NUMBER_PATTERN = re.compile(r"(?<![\w.])([+-]?(?:\d+\.\d+|\d+))(?![\w.])")
113
+
114
+
115
+ def decimal_places(token: str) -> int:
116
+ unsigned = token.lstrip("+-")
117
+ return len(unsigned.partition(".")[2]) if "." in unsigned else 0
118
+
119
+
120
+ def check_numeric_precision(sources: dict[Path, str]) -> list[Finding]:
121
+ values: dict[Decimal, dict[int, list[Occurrence]]] = {}
122
+ for path, text in sources.items():
123
+ for line_number, line in visible_lines(text):
124
+ for match in NUMBER_PATTERN.finditer(line):
125
+ token = match.group(1)
126
+ try:
127
+ value = Decimal(token)
128
+ except InvalidOperation:
129
+ continue
130
+ places = decimal_places(token)
131
+ values.setdefault(value, {}).setdefault(places, []).append(
132
+ Occurrence(path, line_number, token)
133
+ )
134
+
135
+ findings: list[Finding] = []
136
+ for value, precision_groups in values.items():
137
+ if len(precision_groups) < 2:
138
+ continue
139
+ precision_summary = ", ".join(
140
+ f"{places} decimal place(s)={len(items)}"
141
+ for places, items in sorted(precision_groups.items())
142
+ )
143
+ evidence = tuple(
144
+ occurrence.label()
145
+ for _, items in sorted(precision_groups.items())
146
+ for occurrence in items[:3]
147
+ )
148
+ findings.append(
149
+ Finding(
150
+ code="NUMERIC_PRECISION_VARIANT",
151
+ message=f"numeric value {value} appears at multiple precisions: {precision_summary}",
152
+ evidence=evidence,
153
+ )
154
+ )
155
+ return findings
156
+
157
+
158
+ LENGTH_PATTERN = re.compile(
159
+ r"(?<![\w.])([+-]?(?:\d+\.\d+|\d+))\s*(?:\\,\s*)?"
160
+ r"(?:\\(?:mathrm|text)\s*\{\s*)?(μm|µm|um|mm|cm|m)(?:\s*\})?"
161
+ r"(?![A-Za-z])",
162
+ re.IGNORECASE,
163
+ )
164
+
165
+
166
+ def normalized_unit(unit: str) -> str:
167
+ unit = unit.lower()
168
+ return "um" if unit in {"μm", "µm"} else unit
169
+
170
+
171
+ def check_equivalent_length_units(sources: dict[Path, str]) -> list[Finding]:
172
+ values: dict[Decimal, dict[str, list[Occurrence]]] = {}
173
+ for path, text in sources.items():
174
+ for line_number, line in visible_lines(text):
175
+ for match in LENGTH_PATTERN.finditer(line):
176
+ number, raw_unit = match.groups()
177
+ unit = normalized_unit(raw_unit)
178
+ metres = Decimal(number) * LENGTH_FACTORS_METRES[unit]
179
+ values.setdefault(metres, {}).setdefault(unit, []).append(
180
+ Occurrence(path, line_number, match.group(0))
181
+ )
182
+
183
+ findings: list[Finding] = []
184
+ for metres, unit_groups in values.items():
185
+ if len(unit_groups) < 2:
186
+ continue
187
+ counts = ", ".join(
188
+ f"{unit}={len(items)}" for unit, items in sorted(unit_groups.items())
189
+ )
190
+ evidence = tuple(
191
+ occurrence.label()
192
+ for _, items in sorted(unit_groups.items())
193
+ for occurrence in items[:3]
194
+ )
195
+ findings.append(
196
+ Finding(
197
+ code="EQUIVALENT_LENGTH_UNIT_VARIANT",
198
+ message=f"equivalent length {metres} m appears in multiple units: {counts}",
199
+ evidence=evidence,
200
+ )
201
+ )
202
+ return findings
203
+
204
+
205
+ def parse_term_group(value: str) -> tuple[str, tuple[str, ...]]:
206
+ name, separator, raw_variants = value.partition("=")
207
+ variants = tuple(item.strip() for item in raw_variants.split("|") if item.strip())
208
+ if not separator or not name.strip() or len(variants) < 2:
209
+ raise argparse.ArgumentTypeError(
210
+ "term groups must use NAME=variant one|variant two with at least two variants"
211
+ )
212
+ return name.strip(), variants
213
+
214
+
215
+ def run_checks(
216
+ paths: Sequence[Path],
217
+ term_groups: dict[str, tuple[str, ...]] | None = None,
218
+ ) -> list[Finding]:
219
+ sources = read_sources(paths)
220
+ findings = check_term_groups(sources, term_groups or {})
221
+ findings.extend(check_numeric_precision(sources))
222
+ findings.extend(check_equivalent_length_units(sources))
223
+ return findings
224
+
225
+
226
+ def build_parser() -> argparse.ArgumentParser:
227
+ parser = argparse.ArgumentParser(
228
+ description="Find terminology, numeric-precision, and equivalent-unit variants."
229
+ )
230
+ parser.add_argument("paths", nargs="+", type=Path)
231
+ parser.add_argument(
232
+ "--term-group",
233
+ action="append",
234
+ default=[],
235
+ type=parse_term_group,
236
+ metavar="NAME=TERM|VARIANT",
237
+ help="Add a manuscript-specific terminology group. Repeat as needed.",
238
+ )
239
+ parser.add_argument(
240
+ "--no-default-term-groups",
241
+ action="store_true",
242
+ help="Disable the built-in self-reference and standard-deviation groups.",
243
+ )
244
+ parser.add_argument("--json", action="store_true", dest="as_json")
245
+ parser.add_argument(
246
+ "--fail-on-findings",
247
+ action="store_true",
248
+ help="Return exit status 1 when warnings are found.",
249
+ )
250
+ return parser
251
+
252
+
253
+ def main(argv: list[str] | None = None) -> int:
254
+ args = build_parser().parse_args(argv)
255
+ groups = {} if args.no_default_term_groups else dict(DEFAULT_TERM_GROUPS)
256
+ groups.update(dict(args.term_group))
257
+ findings = run_checks(args.paths, groups)
258
+
259
+ if args.as_json:
260
+ print(json.dumps([asdict(item) for item in findings], ensure_ascii=False, indent=2))
261
+ elif findings:
262
+ for finding in findings:
263
+ print(f"{finding.code}\t{finding.message}")
264
+ for item in finding.evidence:
265
+ print(f" {item}")
266
+ else:
267
+ print("No mechanical consistency warnings found.")
268
+
269
+ return 1 if findings and args.fail_on_findings else 0
270
+
271
+
272
+ if __name__ == "__main__":
273
+ raise SystemExit(main())