research-os 1.1.0__tar.gz

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 (244) hide show
  1. research_os-1.1.0/.github/ISSUE_TEMPLATE/bug_report.md +28 -0
  2. research_os-1.1.0/.github/ISSUE_TEMPLATE/feature_request.md +22 -0
  3. research_os-1.1.0/.github/workflows/publish.yml +60 -0
  4. research_os-1.1.0/.github/workflows/test.yml +123 -0
  5. research_os-1.1.0/.gitignore +82 -0
  6. research_os-1.1.0/.pre-commit-config.yaml +12 -0
  7. research_os-1.1.0/CHANGELOG.md +502 -0
  8. research_os-1.1.0/CITATION.cff +9 -0
  9. research_os-1.1.0/CODEOWNERS +1 -0
  10. research_os-1.1.0/CONTRIBUTING.md +129 -0
  11. research_os-1.1.0/LICENSE +21 -0
  12. research_os-1.1.0/PKG-INFO +310 -0
  13. research_os-1.1.0/README.md +219 -0
  14. research_os-1.1.0/assets/logo.svg +70 -0
  15. research_os-1.1.0/assets/logo.txt +6 -0
  16. research_os-1.1.0/docs/AI_GUIDE.md +325 -0
  17. research_os-1.1.0/docs/FAQ.md +268 -0
  18. research_os-1.1.0/docs/PROTOCOLS.md +349 -0
  19. research_os-1.1.0/docs/PROTOCOL_DOCTRINE.md +169 -0
  20. research_os-1.1.0/docs/README.md +29 -0
  21. research_os-1.1.0/docs/RESEARCHER_GUIDE.md +625 -0
  22. research_os-1.1.0/docs/SETUP.md +343 -0
  23. research_os-1.1.0/docs/SHARING.md +73 -0
  24. research_os-1.1.0/docs/START.md +388 -0
  25. research_os-1.1.0/docs/TOOLS.md +298 -0
  26. research_os-1.1.0/docs/USE_CASES.md +228 -0
  27. research_os-1.1.0/pyproject.toml +109 -0
  28. research_os-1.1.0/requirements.txt +10 -0
  29. research_os-1.1.0/scripts/preflight.py +462 -0
  30. research_os-1.1.0/src/research_os/__init__.py +8 -0
  31. research_os-1.1.0/src/research_os/cli.py +640 -0
  32. research_os-1.1.0/src/research_os/collab.py +187 -0
  33. research_os-1.1.0/src/research_os/config.py +38 -0
  34. research_os-1.1.0/src/research_os/errors.py +93 -0
  35. research_os-1.1.0/src/research_os/inputs/__init__.py +0 -0
  36. research_os-1.1.0/src/research_os/inputs/papers.py +272 -0
  37. research_os-1.1.0/src/research_os/inputs/paste.py +220 -0
  38. research_os-1.1.0/src/research_os/logo.py +108 -0
  39. research_os-1.1.0/src/research_os/project_ops.py +1970 -0
  40. research_os-1.1.0/src/research_os/protocols/_router_index.yaml +1611 -0
  41. research_os-1.1.0/src/research_os/protocols/audit/audit_and_validation.yaml +127 -0
  42. research_os-1.1.0/src/research_os/protocols/audit/pre_submission_checklist.yaml +337 -0
  43. research_os-1.1.0/src/research_os/protocols/audit/provenance_completeness.yaml +241 -0
  44. research_os-1.1.0/src/research_os/protocols/domain/domain_analysis.yaml +84 -0
  45. research_os-1.1.0/src/research_os/protocols/domain/research_design.yaml +60 -0
  46. research_os-1.1.0/src/research_os/protocols/guidance/analysis_plan.yaml +325 -0
  47. research_os-1.1.0/src/research_os/protocols/guidance/autopilot.yaml +112 -0
  48. research_os-1.1.0/src/research_os/protocols/guidance/casual_exploration.yaml +95 -0
  49. research_os-1.1.0/src/research_os/protocols/guidance/chat_handoff.yaml +96 -0
  50. research_os-1.1.0/src/research_os/protocols/guidance/code_review.yaml +174 -0
  51. research_os-1.1.0/src/research_os/protocols/guidance/collaboration_handoff.yaml +128 -0
  52. research_os-1.1.0/src/research_os/protocols/guidance/constructive_disagreement.yaml +238 -0
  53. research_os-1.1.0/src/research_os/protocols/guidance/dead_end_routing.yaml +46 -0
  54. research_os-1.1.0/src/research_os/protocols/guidance/glossary_update.yaml +38 -0
  55. research_os-1.1.0/src/research_os/protocols/guidance/hypothesis_tracking.yaml +38 -0
  56. research_os-1.1.0/src/research_os/protocols/guidance/iterative_planning.yaml +80 -0
  57. research_os-1.1.0/src/research_os/protocols/guidance/mid_pipeline_entry.yaml +237 -0
  58. research_os-1.1.0/src/research_os/protocols/guidance/peer_review_response.yaml +169 -0
  59. research_os-1.1.0/src/research_os/protocols/guidance/project_startup.yaml +88 -0
  60. research_os-1.1.0/src/research_os/protocols/guidance/quick_paper_review.yaml +108 -0
  61. research_os-1.1.0/src/research_os/protocols/guidance/revise_and_resubmit.yaml +280 -0
  62. research_os-1.1.0/src/research_os/protocols/guidance/scope_clarification.yaml +181 -0
  63. research_os-1.1.0/src/research_os/protocols/guidance/session_boot.yaml +159 -0
  64. research_os-1.1.0/src/research_os/protocols/guidance/session_resume.yaml +77 -0
  65. research_os-1.1.0/src/research_os/protocols/literature/comparative_paper_review.yaml +260 -0
  66. research_os-1.1.0/src/research_os/protocols/literature/evidence_synthesis.yaml +44 -0
  67. research_os-1.1.0/src/research_os/protocols/literature/literature_search.yaml +144 -0
  68. research_os-1.1.0/src/research_os/protocols/literature/systematic_review.yaml +85 -0
  69. research_os-1.1.0/src/research_os/protocols/methodology/ablation_study.yaml +91 -0
  70. research_os-1.1.0/src/research_os/protocols/methodology/bayesian_analysis.yaml +175 -0
  71. research_os-1.1.0/src/research_os/protocols/methodology/causal_inference_deep.yaml +139 -0
  72. research_os-1.1.0/src/research_os/protocols/methodology/clinical_trials.yaml +133 -0
  73. research_os-1.1.0/src/research_os/protocols/methodology/cox_ph_diagnostics.yaml +222 -0
  74. research_os-1.1.0/src/research_os/protocols/methodology/data_ethics_review.yaml +270 -0
  75. research_os-1.1.0/src/research_os/protocols/methodology/data_quality_audit.yaml +249 -0
  76. research_os-1.1.0/src/research_os/protocols/methodology/deep_domain_research.yaml +257 -0
  77. research_os-1.1.0/src/research_os/protocols/methodology/evaluation_design.yaml +260 -0
  78. research_os-1.1.0/src/research_os/protocols/methodology/exploratory_data_analysis.yaml +252 -0
  79. research_os-1.1.0/src/research_os/protocols/methodology/hyperparameter_search_design.yaml +266 -0
  80. research_os-1.1.0/src/research_os/protocols/methodology/machine_learning.yaml +160 -0
  81. research_os-1.1.0/src/research_os/protocols/methodology/meta_analysis.yaml +107 -0
  82. research_os-1.1.0/src/research_os/protocols/methodology/method_comparison.yaml +249 -0
  83. research_os-1.1.0/src/research_os/protocols/methodology/methodological_consultation.yaml +213 -0
  84. research_os-1.1.0/src/research_os/protocols/methodology/methodology_selection.yaml +211 -0
  85. research_os-1.1.0/src/research_os/protocols/methodology/missing_data_strategy.yaml +302 -0
  86. research_os-1.1.0/src/research_os/protocols/methodology/mixed_methods.yaml +102 -0
  87. research_os-1.1.0/src/research_os/protocols/methodology/pilot_study.yaml +100 -0
  88. research_os-1.1.0/src/research_os/protocols/methodology/power_analysis.yaml +261 -0
  89. research_os-1.1.0/src/research_os/protocols/methodology/preregistration.yaml +130 -0
  90. research_os-1.1.0/src/research_os/protocols/methodology/qualitative_quality_audit.yaml +257 -0
  91. research_os-1.1.0/src/research_os/protocols/methodology/qualitative_research.yaml +110 -0
  92. research_os-1.1.0/src/research_os/protocols/methodology/replication_study.yaml +107 -0
  93. research_os-1.1.0/src/research_os/protocols/methodology/reproduction_attempt.yaml +289 -0
  94. research_os-1.1.0/src/research_os/protocols/methodology/simulation_studies.yaml +102 -0
  95. research_os-1.1.0/src/research_os/protocols/methodology/survey_psychometrics.yaml +109 -0
  96. research_os-1.1.0/src/research_os/protocols/methodology/timeseries_analysis.yaml +181 -0
  97. research_os-1.1.0/src/research_os/protocols/methodology/tool_discovery.yaml +59 -0
  98. research_os-1.1.0/src/research_os/protocols/reproducibility/reproducibility.yaml +93 -0
  99. research_os-1.1.0/src/research_os/protocols/synthesis/synthesis_abstract.yaml +83 -0
  100. research_os-1.1.0/src/research_os/protocols/synthesis/synthesis_cover_letter.yaml +231 -0
  101. research_os-1.1.0/src/research_os/protocols/synthesis/synthesis_dashboard.yaml +249 -0
  102. research_os-1.1.0/src/research_os/protocols/synthesis/synthesis_from_inputs.yaml +242 -0
  103. research_os-1.1.0/src/research_os/protocols/synthesis/synthesis_grant.yaml +152 -0
  104. research_os-1.1.0/src/research_os/protocols/synthesis/synthesis_handout.yaml +247 -0
  105. research_os-1.1.0/src/research_os/protocols/synthesis/synthesis_lay_summary.yaml +245 -0
  106. research_os-1.1.0/src/research_os/protocols/synthesis/synthesis_null_findings.yaml +136 -0
  107. research_os-1.1.0/src/research_os/protocols/synthesis/synthesis_paper.yaml +267 -0
  108. research_os-1.1.0/src/research_os/protocols/synthesis/synthesis_poster.yaml +148 -0
  109. research_os-1.1.0/src/research_os/protocols/synthesis/synthesis_progress_update.yaml +225 -0
  110. research_os-1.1.0/src/research_os/protocols/synthesis/synthesis_report.yaml +94 -0
  111. research_os-1.1.0/src/research_os/protocols/synthesis/synthesis_slides.yaml +302 -0
  112. research_os-1.1.0/src/research_os/protocols/synthesis/synthesis_title_workshop.yaml +238 -0
  113. research_os-1.1.0/src/research_os/protocols/visualization/color_accessibility_audit.yaml +245 -0
  114. research_os-1.1.0/src/research_os/protocols/visualization/figure_critique.yaml +207 -0
  115. research_os-1.1.0/src/research_os/protocols/visualization/figure_guidelines.yaml +203 -0
  116. research_os-1.1.0/src/research_os/protocols/visualization/figure_narrative_arc.yaml +257 -0
  117. research_os-1.1.0/src/research_os/protocols/visualization/multi_panel_composition.yaml +240 -0
  118. research_os-1.1.0/src/research_os/protocols/visualization/visualization_workflow.yaml +248 -0
  119. research_os-1.1.0/src/research_os/protocols/writing/writing_analysis_log.yaml +40 -0
  120. research_os-1.1.0/src/research_os/protocols/writing/writing_citations.yaml +36 -0
  121. research_os-1.1.0/src/research_os/protocols/writing/writing_conclusions.yaml +51 -0
  122. research_os-1.1.0/src/research_os/protocols/writing/writing_core.yaml +213 -0
  123. research_os-1.1.0/src/research_os/protocols/writing/writing_data_availability.yaml +275 -0
  124. research_os-1.1.0/src/research_os/protocols/writing/writing_discussion.yaml +262 -0
  125. research_os-1.1.0/src/research_os/protocols/writing/writing_limitations.yaml +224 -0
  126. research_os-1.1.0/src/research_os/protocols/writing/writing_methods.yaml +95 -0
  127. research_os-1.1.0/src/research_os/protocols/writing/writing_readme.yaml +102 -0
  128. research_os-1.1.0/src/research_os/protocols/writing/writing_results.yaml +267 -0
  129. research_os-1.1.0/src/research_os/server.py +4673 -0
  130. research_os-1.1.0/src/research_os/state/__init__.py +0 -0
  131. research_os-1.1.0/src/research_os/state/state_ledger.py +821 -0
  132. research_os-1.1.0/src/research_os/tools/__init__.py +0 -0
  133. research_os-1.1.0/src/research_os/tools/actions/__init__.py +15 -0
  134. research_os-1.1.0/src/research_os/tools/actions/audit/__init__.py +40 -0
  135. research_os-1.1.0/src/research_os/tools/actions/audit/audit.py +1234 -0
  136. research_os-1.1.0/src/research_os/tools/actions/audit/claim_grounding.py +301 -0
  137. research_os-1.1.0/src/research_os/tools/actions/audit/code_quality.py +405 -0
  138. research_os-1.1.0/src/research_os/tools/actions/audit/md_audit.py +64 -0
  139. research_os-1.1.0/src/research_os/tools/actions/audit/null_findings.py +201 -0
  140. research_os-1.1.0/src/research_os/tools/actions/audit/preregistration.py +450 -0
  141. research_os-1.1.0/src/research_os/tools/actions/audit/prose_quality.py +495 -0
  142. research_os-1.1.0/src/research_os/tools/actions/audit/redteam.py +319 -0
  143. research_os-1.1.0/src/research_os/tools/actions/data/__init__.py +10 -0
  144. research_os-1.1.0/src/research_os/tools/actions/data/context_intake.py +232 -0
  145. research_os-1.1.0/src/research_os/tools/actions/data/data.py +261 -0
  146. research_os-1.1.0/src/research_os/tools/actions/data/intake.py +298 -0
  147. research_os-1.1.0/src/research_os/tools/actions/data/profiling.py +85 -0
  148. research_os-1.1.0/src/research_os/tools/actions/exec/__init__.py +23 -0
  149. research_os-1.1.0/src/research_os/tools/actions/exec/cluster.py +365 -0
  150. research_os-1.1.0/src/research_os/tools/actions/exec/environment.py +432 -0
  151. research_os-1.1.0/src/research_os/tools/actions/exec/notebook.py +258 -0
  152. research_os-1.1.0/src/research_os/tools/actions/exec/scripts.py +118 -0
  153. research_os-1.1.0/src/research_os/tools/actions/exec/sensitivity.py +437 -0
  154. research_os-1.1.0/src/research_os/tools/actions/exec/step_pipeline.py +751 -0
  155. research_os-1.1.0/src/research_os/tools/actions/exec/tasks.py +481 -0
  156. research_os-1.1.0/src/research_os/tools/actions/memory/__init__.py +7 -0
  157. research_os-1.1.0/src/research_os/tools/actions/memory/memory.py +118 -0
  158. research_os-1.1.0/src/research_os/tools/actions/protocol.py +509 -0
  159. research_os-1.1.0/src/research_os/tools/actions/research/__init__.py +32 -0
  160. research_os-1.1.0/src/research_os/tools/actions/research/grounding.py +508 -0
  161. research_os-1.1.0/src/research_os/tools/actions/research/lessons.py +191 -0
  162. research_os-1.1.0/src/research_os/tools/actions/research/planning.py +712 -0
  163. research_os-1.1.0/src/research_os/tools/actions/research/research.py +835 -0
  164. research_os-1.1.0/src/research_os/tools/actions/router.py +1181 -0
  165. research_os-1.1.0/src/research_os/tools/actions/search/__init__.py +17 -0
  166. research_os-1.1.0/src/research_os/tools/actions/search/literature.py +423 -0
  167. research_os-1.1.0/src/research_os/tools/actions/search/search.py +582 -0
  168. research_os-1.1.0/src/research_os/tools/actions/state/__init__.py +37 -0
  169. research_os-1.1.0/src/research_os/tools/actions/state/checkpoint.py +114 -0
  170. research_os-1.1.0/src/research_os/tools/actions/state/config.py +325 -0
  171. research_os-1.1.0/src/research_os/tools/actions/state/interaction.py +201 -0
  172. research_os-1.1.0/src/research_os/tools/actions/state/iteration.py +539 -0
  173. research_os-1.1.0/src/research_os/tools/actions/state/path.py +1122 -0
  174. research_os-1.1.0/src/research_os/tools/actions/state/provenance.py +399 -0
  175. research_os-1.1.0/src/research_os/tools/actions/state/repair.py +163 -0
  176. research_os-1.1.0/src/research_os/tools/actions/state/scratch.py +153 -0
  177. research_os-1.1.0/src/research_os/tools/actions/synthesis/__init__.py +21 -0
  178. research_os-1.1.0/src/research_os/tools/actions/synthesis/citations.py +232 -0
  179. research_os-1.1.0/src/research_os/tools/actions/synthesis/dashboard.py +1457 -0
  180. research_os-1.1.0/src/research_os/tools/actions/synthesis/latex.py +496 -0
  181. research_os-1.1.0/src/research_os/tools/actions/synthesis/synthesize.py +1048 -0
  182. research_os-1.1.0/src/research_os/tools/actions/viz/__init__.py +45 -0
  183. research_os-1.1.0/src/research_os/tools/actions/viz/dashboard_tests.py +590 -0
  184. research_os-1.1.0/src/research_os/tools/actions/viz/figures.py +2054 -0
  185. research_os-1.1.0/src/research_os/tui.py +693 -0
  186. research_os-1.1.0/src/research_os/utils/__init__.py +25 -0
  187. research_os-1.1.0/src/research_os/utils/asset_manager.py +149 -0
  188. research_os-1.1.0/src/research_os/utils/common.py +126 -0
  189. research_os-1.1.0/src/research_os/verify.py +170 -0
  190. research_os-1.1.0/src/research_os/wizard.py +675 -0
  191. research_os-1.1.0/templates/.antigravity/rules/research-os.md +30 -0
  192. research_os-1.1.0/templates/.claude/commands/start-session.md +19 -0
  193. research_os-1.1.0/templates/.claude/rules/research-os.md +44 -0
  194. research_os-1.1.0/templates/.continuerules +31 -0
  195. research_os-1.1.0/templates/.cursor/rules/research-os.mdc +22 -0
  196. research_os-1.1.0/templates/.windsurfrules +31 -0
  197. research_os-1.1.0/templates/AGENTS.md +180 -0
  198. research_os-1.1.0/templates/CLAUDE.md +37 -0
  199. research_os-1.1.0/templates/mcp_config.json +11 -0
  200. research_os-1.1.0/templates/opencode.json +9 -0
  201. research_os-1.1.0/templates/researcher_config.yaml +73 -0
  202. research_os-1.1.0/tests/conftest.py +33 -0
  203. research_os-1.1.0/tests/integration/__init__.py +0 -0
  204. research_os-1.1.0/tests/integration/test_all_protocols_load.py +57 -0
  205. research_os-1.1.0/tests/integration/test_full_workflow.py +72 -0
  206. research_os-1.1.0/tests/integration/test_init.py +232 -0
  207. research_os-1.1.0/tests/integration/test_pipeline.py +51 -0
  208. research_os-1.1.0/tests/integration/test_reorganized_imports.py +147 -0
  209. research_os-1.1.0/tests/tools/__init__.py +0 -0
  210. research_os-1.1.0/tests/tools/test_citations.py +78 -0
  211. research_os-1.1.0/tests/tools/test_context_intake.py +60 -0
  212. research_os-1.1.0/tests/tools/test_hypotheses.py +44 -0
  213. research_os-1.1.0/tests/tools/test_intake.py +65 -0
  214. research_os-1.1.0/tests/tools/test_iteration.py +341 -0
  215. research_os-1.1.0/tests/tools/test_notebook.py +73 -0
  216. research_os-1.1.0/tests/tools/test_override_audit.py +128 -0
  217. research_os-1.1.0/tests/tools/test_planning.py +112 -0
  218. research_os-1.1.0/tests/tools/test_preregistration_and_dashboard_tests.py +67 -0
  219. research_os-1.1.0/tests/tools/test_redteam_and_null.py +45 -0
  220. research_os-1.1.0/tests/tools/test_repair.py +47 -0
  221. research_os-1.1.0/tests/tools/test_research.py +90 -0
  222. research_os-1.1.0/tests/tools/test_router.py +695 -0
  223. research_os-1.1.0/tests/tools/test_scratch.py +52 -0
  224. research_os-1.1.0/tests/tools/test_sensitivity_and_cluster.py +68 -0
  225. research_os-1.1.0/tests/tools/test_step_env_lock.py +75 -0
  226. research_os-1.1.0/tests/tools/test_step_pipeline.py +106 -0
  227. research_os-1.1.0/tests/tools/test_tasks.py +86 -0
  228. research_os-1.1.0/tests/tools/test_workflow_dag.py +56 -0
  229. research_os-1.1.0/tests/unit/__init__.py +0 -0
  230. research_os-1.1.0/tests/unit/test_actions.py +135 -0
  231. research_os-1.1.0/tests/unit/test_audit.py +60 -0
  232. research_os-1.1.0/tests/unit/test_branch_paths.py +129 -0
  233. research_os-1.1.0/tests/unit/test_config.py +98 -0
  234. research_os-1.1.0/tests/unit/test_core.py +82 -0
  235. research_os-1.1.0/tests/unit/test_executors.py +77 -0
  236. research_os-1.1.0/tests/unit/test_find_project_root.py +25 -0
  237. research_os-1.1.0/tests/unit/test_grounding_and_lessons.py +141 -0
  238. research_os-1.1.0/tests/unit/test_protocols.py +171 -0
  239. research_os-1.1.0/tests/unit/test_provenance.py +68 -0
  240. research_os-1.1.0/tests/unit/test_quality_audits.py +128 -0
  241. research_os-1.1.0/tests/unit/test_search.py +113 -0
  242. research_os-1.1.0/tests/unit/test_server.py +118 -0
  243. research_os-1.1.0/tests/unit/test_state.py +175 -0
  244. research_os-1.1.0/tests/unit/test_viz_renderers.py +145 -0
@@ -0,0 +1,28 @@
1
+ name: Bug Report
2
+ description: Create a report to help us improve Research OS
3
+ title: "[BUG] "
4
+ labels: ["bug"]
5
+ assignees: []
6
+ body:
7
+ - type: markdown
8
+ attributes:
9
+ value: |
10
+ Thanks for taking the time to fill out this bug report!
11
+ - type: textarea
12
+ id: what-happened
13
+ attributes:
14
+ label: What happened?
15
+ description: Also tell us, what did you expect to happen?
16
+ placeholder: Tell us what you see!
17
+ validations:
18
+ required: true
19
+ - type: textarea
20
+ id: steps
21
+ attributes:
22
+ label: Steps to reproduce
23
+ description: Steps to reproduce the behavior.
24
+ placeholder: |
25
+ 1. Run `ros init`
26
+ 2. ...
27
+ validations:
28
+ required: true
@@ -0,0 +1,22 @@
1
+ name: Feature Request
2
+ description: Suggest an idea for this project
3
+ title: "[FEATURE] "
4
+ labels: ["enhancement"]
5
+ assignees: []
6
+ body:
7
+ - type: markdown
8
+ attributes:
9
+ value: |
10
+ Thanks for your interest in improving Research OS!
11
+ - type: textarea
12
+ id: feature-description
13
+ attributes:
14
+ label: Describe the feature
15
+ description: A clear and concise description of what you want to happen.
16
+ validations:
17
+ required: true
18
+ - type: textarea
19
+ id: use-cases
20
+ attributes:
21
+ label: Use Cases
22
+ description: In what situations would this feature be useful?
@@ -0,0 +1,60 @@
1
+ name: Publish to PyPI
2
+
3
+ # Trusted Publishing (OIDC) — no API tokens stored.
4
+ # Configured on PyPI with:
5
+ # Owner: VibhavSetlur
6
+ # Repository: Research-OS
7
+ # Workflow filename: publish.yml
8
+ # Environment: pypi
9
+
10
+ on:
11
+ push:
12
+ tags:
13
+ - "v*"
14
+ workflow_dispatch:
15
+
16
+ jobs:
17
+ build:
18
+ name: Build sdist and wheel
19
+ runs-on: ubuntu-latest
20
+ steps:
21
+ - name: Checkout
22
+ uses: actions/checkout@v4
23
+
24
+ - name: Set up Python
25
+ uses: actions/setup-python@v5
26
+ with:
27
+ python-version: "3.11"
28
+
29
+ - name: Install build backend
30
+ run: python -m pip install --upgrade pip build
31
+
32
+ - name: Build sdist and wheel
33
+ run: python -m build --sdist --wheel
34
+
35
+ - name: Upload distribution artifacts
36
+ uses: actions/upload-artifact@v4
37
+ with:
38
+ name: dist
39
+ path: dist/
40
+
41
+ publish:
42
+ name: Publish to PyPI
43
+ needs: build
44
+ # Only publish on tag pushes; workflow_dispatch builds but does not publish.
45
+ if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v')
46
+ runs-on: ubuntu-latest
47
+ environment:
48
+ name: pypi
49
+ url: https://pypi.org/p/research-os
50
+ permissions:
51
+ id-token: write # required for Trusted Publishing (OIDC)
52
+ steps:
53
+ - name: Download distribution artifacts
54
+ uses: actions/download-artifact@v4
55
+ with:
56
+ name: dist
57
+ path: dist/
58
+
59
+ - name: Publish to PyPI via Trusted Publishing
60
+ uses: pypa/gh-action-pypi-publish@release/v1
@@ -0,0 +1,123 @@
1
+ name: tests
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ pull_request:
7
+ branches: [main]
8
+ workflow_dispatch:
9
+
10
+ # Cancel an in-progress run for the same ref when a new commit lands.
11
+ concurrency:
12
+ group: tests-${{ github.ref }}
13
+ cancel-in-progress: true
14
+
15
+ # Pip resilience for transient network blips.
16
+ env:
17
+ PIP_DISABLE_PIP_VERSION_CHECK: "1"
18
+ PIP_NO_INPUT: "1"
19
+ PIP_RETRIES: "5"
20
+ PIP_TIMEOUT: "60"
21
+
22
+ jobs:
23
+ # ── Fast feedback: lint + preflight + unit tests on one Python ─────────
24
+ fast:
25
+ name: Lint + preflight + unit (3.11)
26
+ runs-on: ubuntu-latest
27
+ timeout-minutes: 10
28
+ steps:
29
+ - uses: actions/checkout@v4
30
+
31
+ - name: Set up Python 3.11
32
+ uses: actions/setup-python@v5
33
+ with:
34
+ python-version: "3.11"
35
+ cache: pip
36
+ cache-dependency-path: pyproject.toml
37
+
38
+ - name: Install package + ci extras
39
+ run: |
40
+ python -m pip install --upgrade pip
41
+ pip install --prefer-binary -e ".[ci,dev]"
42
+
43
+ - name: Lint (ruff)
44
+ run: ruff check src/ tests/ scripts/
45
+
46
+ - name: Preflight smoke check
47
+ run: python scripts/preflight.py
48
+
49
+ - name: Unit tests
50
+ run: pytest tests/unit -v
51
+
52
+ # ── Full matrix: integration + tools tests on every supported Python ───
53
+ full:
54
+ name: Integration + tools (Python ${{ matrix.python-version }})
55
+ needs: fast
56
+ runs-on: ubuntu-latest
57
+ timeout-minutes: 20
58
+ strategy:
59
+ fail-fast: false
60
+ matrix:
61
+ python-version: ["3.10", "3.11", "3.12"]
62
+ steps:
63
+ - uses: actions/checkout@v4
64
+
65
+ - name: Set up Python ${{ matrix.python-version }}
66
+ uses: actions/setup-python@v5
67
+ with:
68
+ python-version: ${{ matrix.python-version }}
69
+ cache: pip
70
+ cache-dependency-path: pyproject.toml
71
+
72
+ - name: Install package + ci extras
73
+ run: |
74
+ python -m pip install --upgrade pip
75
+ pip install --prefer-binary -e ".[ci,dev]"
76
+
77
+ - name: Integration tests
78
+ run: pytest tests/integration -v
79
+
80
+ - name: Tools tests
81
+ env:
82
+ # The scratch + tasks tests spawn real subprocesses; they need a
83
+ # writable HOME. Default GitHub-hosted runners are fine, but be
84
+ # explicit.
85
+ HOME: ${{ runner.temp }}
86
+ run: pytest tests/tools -v
87
+
88
+ # ── Build sdist + wheel to confirm packaging is healthy (full extras) ──
89
+ build:
90
+ name: Build sdist + wheel
91
+ needs: fast
92
+ runs-on: ubuntu-latest
93
+ timeout-minutes: 10
94
+ steps:
95
+ - uses: actions/checkout@v4
96
+ - name: Set up Python 3.11
97
+ uses: actions/setup-python@v5
98
+ with:
99
+ python-version: "3.11"
100
+ - name: Build
101
+ run: |
102
+ python -m pip install --upgrade pip build
103
+ python -m build
104
+ - name: Confirm wheel imports cleanly + ships protocols
105
+ run: |
106
+ python -m venv /tmp/wheel-check
107
+ /tmp/wheel-check/bin/pip install --prefer-binary dist/*.whl
108
+ /tmp/wheel-check/bin/python -c "import research_os; print('OK', research_os.__version__)"
109
+ /tmp/wheel-check/bin/python -c "
110
+ import zipfile, sys
111
+ import glob
112
+ whl = glob.glob('dist/*.whl')[0]
113
+ with zipfile.ZipFile(whl) as z:
114
+ yamls = [n for n in z.namelist() if n.endswith('.yaml')]
115
+ print(f'YAMLs in wheel: {len(yamls)}')
116
+ assert len(yamls) >= 30, 'protocols missing from wheel'
117
+ "
118
+ - name: Upload artefacts
119
+ uses: actions/upload-artifact@v4
120
+ with:
121
+ name: dist
122
+ path: dist/
123
+ retention-days: 7
@@ -0,0 +1,82 @@
1
+ # Research OS — Git Ignore Rules
2
+ TODO.md
3
+
4
+ # Python
5
+ __pycache__/
6
+ *.pyc
7
+ *.pyo
8
+ *.pyd
9
+ *.egg-info/
10
+ dist/
11
+ build/
12
+ .pytest_cache/
13
+ .benchmarks/
14
+ .mypy_cache/
15
+ .ruff_cache/
16
+
17
+ # IDE configs
18
+ /.cursor/
19
+ /.cursorrules
20
+ /.clinerules
21
+ /AGENTS.md
22
+
23
+ # OS state (auto-created during pipeline runs)
24
+ .os_state/
25
+
26
+ # Virtual environments
27
+ .venv/
28
+ venv/
29
+ env/
30
+ environment/venv/
31
+
32
+ # User data (keep directories, ignore contents)
33
+ !inputs/data/raw/.gitkeep
34
+ !inputs/context/.gitkeep
35
+ !inputs/context/README.md
36
+ !inputs/papers/.gitkeep
37
+ !inputs/papers/README.md
38
+
39
+ # Researcher config (contains API keys)
40
+ inputs/researcher_config.yaml
41
+
42
+ # Large files (never commit)
43
+ *.h5
44
+ *.hdf5
45
+ *.feather
46
+ *.parquet
47
+ *.sav
48
+ *.dta
49
+ *.sas7bdat
50
+ *.zip
51
+ *.tar.gz
52
+ *.rar
53
+
54
+ # OS files
55
+ .DS_Store
56
+ Thumbs.db
57
+ desktop.ini
58
+
59
+ # AI assistant caches
60
+ .aider*
61
+
62
+ .antigravitycli/
63
+
64
+ # IDE
65
+ .vscode/
66
+ .idea/
67
+ *.swp
68
+ *.swo
69
+
70
+ # Jupyter
71
+ .ipynb_checkpoints/
72
+
73
+ # Environment files (user-specific)
74
+ .env
75
+ .env.local
76
+
77
+ # Task logs
78
+ *.log
79
+
80
+ # Temporary scratch folder
81
+ scratch/
82
+ /workspace/
@@ -0,0 +1,12 @@
1
+ repos:
2
+ - repo: https://github.com/pre-commit/pre-commit-hooks
3
+ rev: v4.4.0
4
+ hooks:
5
+ - id: trailing-whitespace
6
+ - id: end-of-file-fixer
7
+ - id: check-yaml
8
+ - repo: https://github.com/psf/black
9
+ rev: 23.3.0
10
+ hooks:
11
+ - id: black
12
+ language_version: python3.10