scitex-agentic-journal 0.1.0a0__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 (185) hide show
  1. scitex_agentic_journal-0.1.0a0/.claude/scheduled_tasks.lock +1 -0
  2. scitex_agentic_journal-0.1.0a0/.env.example +16 -0
  3. scitex_agentic_journal-0.1.0a0/.github/workflows/cla.yml +33 -0
  4. scitex_agentic_journal-0.1.0a0/.github/workflows/pr-ci.yml +134 -0
  5. scitex_agentic_journal-0.1.0a0/.github/workflows/release-ci.yml +100 -0
  6. scitex_agentic_journal-0.1.0a0/.gitignore +19 -0
  7. scitex_agentic_journal-0.1.0a0/.scitex/dev/cli-audit-dict.yaml +18 -0
  8. scitex_agentic_journal-0.1.0a0/CHANGELOG.md +147 -0
  9. scitex_agentic_journal-0.1.0a0/CLA.md +71 -0
  10. scitex_agentic_journal-0.1.0a0/CONTRIBUTING.md +53 -0
  11. scitex_agentic_journal-0.1.0a0/LICENSE +661 -0
  12. scitex_agentic_journal-0.1.0a0/PKG-INFO +310 -0
  13. scitex_agentic_journal-0.1.0a0/README.md +258 -0
  14. scitex_agentic_journal-0.1.0a0/docs/dev/m4-hub-app-wiring.md +149 -0
  15. scitex_agentic_journal-0.1.0a0/examples/01_gate1_orcid_resolve.sh +22 -0
  16. scitex_agentic_journal-0.1.0a0/examples/02_gate1_code_repo_clone.sh +25 -0
  17. scitex_agentic_journal-0.1.0a0/examples/README.md +125 -0
  18. scitex_agentic_journal-0.1.0a0/pyproject.toml +126 -0
  19. scitex_agentic_journal-0.1.0a0/setup.cfg +4 -0
  20. scitex_agentic_journal-0.1.0a0/src/scitex_agentic_journal/__init__.py +57 -0
  21. scitex_agentic_journal-0.1.0a0/src/scitex_agentic_journal/__main__.py +13 -0
  22. scitex_agentic_journal-0.1.0a0/src/scitex_agentic_journal/_cli/__init__.py +439 -0
  23. scitex_agentic_journal-0.1.0a0/src/scitex_agentic_journal/_cli/_decide.py +69 -0
  24. scitex_agentic_journal-0.1.0a0/src/scitex_agentic_journal/_cli/_hub_manifest.py +103 -0
  25. scitex_agentic_journal-0.1.0a0/src/scitex_agentic_journal/_cli/_publish.py +168 -0
  26. scitex_agentic_journal-0.1.0a0/src/scitex_agentic_journal/_cli/_review.py +97 -0
  27. scitex_agentic_journal-0.1.0a0/src/scitex_agentic_journal/_cli/_skills.py +278 -0
  28. scitex_agentic_journal-0.1.0a0/src/scitex_agentic_journal/_cli/_submit.py +64 -0
  29. scitex_agentic_journal-0.1.0a0/src/scitex_agentic_journal/_decide/__init__.py +61 -0
  30. scitex_agentic_journal-0.1.0a0/src/scitex_agentic_journal/_decide/_engine.py +286 -0
  31. scitex_agentic_journal-0.1.0a0/src/scitex_agentic_journal/_decide/_load_review.py +148 -0
  32. scitex_agentic_journal-0.1.0a0/src/scitex_agentic_journal/_decide/_persist.py +134 -0
  33. scitex_agentic_journal-0.1.0a0/src/scitex_agentic_journal/_decide/_rules.py +172 -0
  34. scitex_agentic_journal-0.1.0a0/src/scitex_agentic_journal/_decide/_types.py +95 -0
  35. scitex_agentic_journal-0.1.0a0/src/scitex_agentic_journal/_decide/rules/__init__.py +12 -0
  36. scitex_agentic_journal-0.1.0a0/src/scitex_agentic_journal/_decide/rules/v1.yaml +70 -0
  37. scitex_agentic_journal-0.1.0a0/src/scitex_agentic_journal/_django/__init__.py +38 -0
  38. scitex_agentic_journal-0.1.0a0/src/scitex_agentic_journal/_django/_leaf.py +244 -0
  39. scitex_agentic_journal-0.1.0a0/src/scitex_agentic_journal/_django/_manifest.py +54 -0
  40. scitex_agentic_journal-0.1.0a0/src/scitex_agentic_journal/_django/apps.py +34 -0
  41. scitex_agentic_journal-0.1.0a0/src/scitex_agentic_journal/_django/handlers.py +44 -0
  42. scitex_agentic_journal-0.1.0a0/src/scitex_agentic_journal/_django/manifest.json +17 -0
  43. scitex_agentic_journal-0.1.0a0/src/scitex_agentic_journal/_django/urls.py +48 -0
  44. scitex_agentic_journal-0.1.0a0/src/scitex_agentic_journal/_django/views.py +108 -0
  45. scitex_agentic_journal-0.1.0a0/src/scitex_agentic_journal/_gate1/__init__.py +52 -0
  46. scitex_agentic_journal-0.1.0a0/src/scitex_agentic_journal/_gate1/_clew_dag.py +321 -0
  47. scitex_agentic_journal-0.1.0a0/src/scitex_agentic_journal/_gate1/_code_repo.py +230 -0
  48. scitex_agentic_journal-0.1.0a0/src/scitex_agentic_journal/_gate1/_errors.py +44 -0
  49. scitex_agentic_journal-0.1.0a0/src/scitex_agentic_journal/_gate1/_orcid.py +226 -0
  50. scitex_agentic_journal-0.1.0a0/src/scitex_agentic_journal/_hub_app_publisher/__init__.py +69 -0
  51. scitex_agentic_journal-0.1.0a0/src/scitex_agentic_journal/_hub_app_publisher/_derive_wrapper_manifest.py +132 -0
  52. scitex_agentic_journal-0.1.0a0/src/scitex_agentic_journal/_hub_app_publisher/_manifest.py +110 -0
  53. scitex_agentic_journal-0.1.0a0/src/scitex_agentic_journal/_hub_app_publisher/_resolver_adapter.py +150 -0
  54. scitex_agentic_journal-0.1.0a0/src/scitex_agentic_journal/_mcp/__init__.py +49 -0
  55. scitex_agentic_journal-0.1.0a0/src/scitex_agentic_journal/_mcp/_audit.py +95 -0
  56. scitex_agentic_journal-0.1.0a0/src/scitex_agentic_journal/_mcp/_scopes.py +61 -0
  57. scitex_agentic_journal-0.1.0a0/src/scitex_agentic_journal/_mcp/_server.py +68 -0
  58. scitex_agentic_journal-0.1.0a0/src/scitex_agentic_journal/_mcp/_tools.py +151 -0
  59. scitex_agentic_journal-0.1.0a0/src/scitex_agentic_journal/_orcid/__init__.py +42 -0
  60. scitex_agentic_journal-0.1.0a0/src/scitex_agentic_journal/_orcid/_client.py +104 -0
  61. scitex_agentic_journal-0.1.0a0/src/scitex_agentic_journal/_orcid/_link.py +92 -0
  62. scitex_agentic_journal-0.1.0a0/src/scitex_agentic_journal/_ports/__init__.py +64 -0
  63. scitex_agentic_journal-0.1.0a0/src/scitex_agentic_journal/_ports/_clew.py +70 -0
  64. scitex_agentic_journal-0.1.0a0/src/scitex_agentic_journal/_ports/_hub.py +45 -0
  65. scitex_agentic_journal-0.1.0a0/src/scitex_agentic_journal/_ports/_live_paper.py +60 -0
  66. scitex_agentic_journal-0.1.0a0/src/scitex_agentic_journal/_ports/_scheduler.py +44 -0
  67. scitex_agentic_journal-0.1.0a0/src/scitex_agentic_journal/_ports/_ui.py +42 -0
  68. scitex_agentic_journal-0.1.0a0/src/scitex_agentic_journal/_ports/_writer.py +53 -0
  69. scitex_agentic_journal-0.1.0a0/src/scitex_agentic_journal/_publish/__init__.py +96 -0
  70. scitex_agentic_journal-0.1.0a0/src/scitex_agentic_journal/_publish/_crossref.py +34 -0
  71. scitex_agentic_journal-0.1.0a0/src/scitex_agentic_journal/_publish/_handoff.py +182 -0
  72. scitex_agentic_journal-0.1.0a0/src/scitex_agentic_journal/_publish/_internal.py +83 -0
  73. scitex_agentic_journal-0.1.0a0/src/scitex_agentic_journal/_publish/_jalc.py +32 -0
  74. scitex_agentic_journal-0.1.0a0/src/scitex_agentic_journal/_publish/_live_paper_proxy.py +52 -0
  75. scitex_agentic_journal-0.1.0a0/src/scitex_agentic_journal/_publish/_load_records.py +252 -0
  76. scitex_agentic_journal-0.1.0a0/src/scitex_agentic_journal/_publish/_mint.py +214 -0
  77. scitex_agentic_journal-0.1.0a0/src/scitex_agentic_journal/_publish/_persist.py +128 -0
  78. scitex_agentic_journal-0.1.0a0/src/scitex_agentic_journal/_publish/_select.py +43 -0
  79. scitex_agentic_journal-0.1.0a0/src/scitex_agentic_journal/_publish/_types.py +65 -0
  80. scitex_agentic_journal-0.1.0a0/src/scitex_agentic_journal/_publish/_zenodo.py +223 -0
  81. scitex_agentic_journal-0.1.0a0/src/scitex_agentic_journal/_re_review_badge/__init__.py +57 -0
  82. scitex_agentic_journal-0.1.0a0/src/scitex_agentic_journal/_re_review_badge/_resolver.py +210 -0
  83. scitex_agentic_journal-0.1.0a0/src/scitex_agentic_journal/_re_review_badge/_types.py +77 -0
  84. scitex_agentic_journal-0.1.0a0/src/scitex_agentic_journal/_review/__init__.py +75 -0
  85. scitex_agentic_journal-0.1.0a0/src/scitex_agentic_journal/_review/_adapters.py +64 -0
  86. scitex_agentic_journal-0.1.0a0/src/scitex_agentic_journal/_review/_load_gate1.py +103 -0
  87. scitex_agentic_journal-0.1.0a0/src/scitex_agentic_journal/_review/_local_adapter.py +149 -0
  88. scitex_agentic_journal-0.1.0a0/src/scitex_agentic_journal/_review/_persist.py +148 -0
  89. scitex_agentic_journal-0.1.0a0/src/scitex_agentic_journal/_review/_qwen_adapter.py +46 -0
  90. scitex_agentic_journal-0.1.0a0/src/scitex_agentic_journal/_review/_rubric.py +92 -0
  91. scitex_agentic_journal-0.1.0a0/src/scitex_agentic_journal/_review/_runner.py +128 -0
  92. scitex_agentic_journal-0.1.0a0/src/scitex_agentic_journal/_review/_types.py +170 -0
  93. scitex_agentic_journal-0.1.0a0/src/scitex_agentic_journal/_review/prompts/__init__.py +11 -0
  94. scitex_agentic_journal-0.1.0a0/src/scitex_agentic_journal/_review/prompts/v1/__init__.py +7 -0
  95. scitex_agentic_journal-0.1.0a0/src/scitex_agentic_journal/_review/prompts/v1/claim_verify.md +37 -0
  96. scitex_agentic_journal-0.1.0a0/src/scitex_agentic_journal/_review/prompts/v1/methodology.md +50 -0
  97. scitex_agentic_journal-0.1.0a0/src/scitex_agentic_journal/_review/prompts/v1/novelty.md +44 -0
  98. scitex_agentic_journal-0.1.0a0/src/scitex_agentic_journal/_review/prompts/v1/reproducibility.md +44 -0
  99. scitex_agentic_journal-0.1.0a0/src/scitex_agentic_journal/_skills/scitex-agentic-journal/01_installation.md +73 -0
  100. scitex_agentic_journal-0.1.0a0/src/scitex_agentic_journal/_skills/scitex-agentic-journal/02_quick-start.md +86 -0
  101. scitex_agentic_journal-0.1.0a0/src/scitex_agentic_journal/_skills/scitex-agentic-journal/03_python-api.md +140 -0
  102. scitex_agentic_journal-0.1.0a0/src/scitex_agentic_journal/_skills/scitex-agentic-journal/04_cli-reference.md +98 -0
  103. scitex_agentic_journal-0.1.0a0/src/scitex_agentic_journal/_skills/scitex-agentic-journal/10_overview.md +90 -0
  104. scitex_agentic_journal-0.1.0a0/src/scitex_agentic_journal/_skills/scitex-agentic-journal/11_submission-bundle.md +78 -0
  105. scitex_agentic_journal-0.1.0a0/src/scitex_agentic_journal/_skills/scitex-agentic-journal/12_gate1-checks.md +76 -0
  106. scitex_agentic_journal-0.1.0a0/src/scitex_agentic_journal/_skills/scitex-agentic-journal/13_review-and-decision.md +88 -0
  107. scitex_agentic_journal-0.1.0a0/src/scitex_agentic_journal/_skills/scitex-agentic-journal/14_publish-handoff.md +88 -0
  108. scitex_agentic_journal-0.1.0a0/src/scitex_agentic_journal/_skills/scitex-agentic-journal/15_python-api-detailed.md +141 -0
  109. scitex_agentic_journal-0.1.0a0/src/scitex_agentic_journal/_skills/scitex-agentic-journal/20_env-vars.md +53 -0
  110. scitex_agentic_journal-0.1.0a0/src/scitex_agentic_journal/_skills/scitex-agentic-journal/30_django-and-hub.md +89 -0
  111. scitex_agentic_journal-0.1.0a0/src/scitex_agentic_journal/_skills/scitex-agentic-journal/31_mcp-and-agents.md +118 -0
  112. scitex_agentic_journal-0.1.0a0/src/scitex_agentic_journal/_skills/scitex-agentic-journal/SKILL.md +79 -0
  113. scitex_agentic_journal-0.1.0a0/src/scitex_agentic_journal/_submit/__init__.py +45 -0
  114. scitex_agentic_journal-0.1.0a0/src/scitex_agentic_journal/_submit/_loader.py +134 -0
  115. scitex_agentic_journal-0.1.0a0/src/scitex_agentic_journal/_submit/_orchestrate.py +127 -0
  116. scitex_agentic_journal-0.1.0a0/src/scitex_agentic_journal/_submit/_persist.py +128 -0
  117. scitex_agentic_journal-0.1.0a0/src/scitex_agentic_journal/_submit/_types.py +48 -0
  118. scitex_agentic_journal-0.1.0a0/src/scitex_agentic_journal.egg-info/PKG-INFO +310 -0
  119. scitex_agentic_journal-0.1.0a0/src/scitex_agentic_journal.egg-info/SOURCES.txt +183 -0
  120. scitex_agentic_journal-0.1.0a0/src/scitex_agentic_journal.egg-info/dependency_links.txt +1 -0
  121. scitex_agentic_journal-0.1.0a0/src/scitex_agentic_journal.egg-info/entry_points.txt +2 -0
  122. scitex_agentic_journal-0.1.0a0/src/scitex_agentic_journal.egg-info/requires.txt +26 -0
  123. scitex_agentic_journal-0.1.0a0/src/scitex_agentic_journal.egg-info/top_level.txt +1 -0
  124. scitex_agentic_journal-0.1.0a0/tests/__init__.py +0 -0
  125. scitex_agentic_journal-0.1.0a0/tests/_django_test_urls.py +14 -0
  126. scitex_agentic_journal-0.1.0a0/tests/examples/__init__.py +0 -0
  127. scitex_agentic_journal-0.1.0a0/tests/examples/test_01_gate1_orcid_resolve.py +108 -0
  128. scitex_agentic_journal-0.1.0a0/tests/examples/test_02_gate1_code_repo_clone.py +126 -0
  129. scitex_agentic_journal-0.1.0a0/tests/integration/__init__.py +0 -0
  130. scitex_agentic_journal-0.1.0a0/tests/integration/test_cross_package_imports.py +48 -0
  131. scitex_agentic_journal-0.1.0a0/tests/integration/test_pipeline_end_to_end.py +286 -0
  132. scitex_agentic_journal-0.1.0a0/tests/scitex_agentic_journal/__init__.py +6 -0
  133. scitex_agentic_journal-0.1.0a0/tests/scitex_agentic_journal/_cli/__init__.py +0 -0
  134. scitex_agentic_journal-0.1.0a0/tests/scitex_agentic_journal/_cli/test__decide.py +215 -0
  135. scitex_agentic_journal-0.1.0a0/tests/scitex_agentic_journal/_cli/test__hub_manifest.py +247 -0
  136. scitex_agentic_journal-0.1.0a0/tests/scitex_agentic_journal/_cli/test__publish.py +344 -0
  137. scitex_agentic_journal-0.1.0a0/tests/scitex_agentic_journal/_cli/test__review.py +167 -0
  138. scitex_agentic_journal-0.1.0a0/tests/scitex_agentic_journal/_cli/test__skills.py +235 -0
  139. scitex_agentic_journal-0.1.0a0/tests/scitex_agentic_journal/_cli/test__submit.py +123 -0
  140. scitex_agentic_journal-0.1.0a0/tests/scitex_agentic_journal/_decide/__init__.py +0 -0
  141. scitex_agentic_journal-0.1.0a0/tests/scitex_agentic_journal/_decide/test__engine.py +327 -0
  142. scitex_agentic_journal-0.1.0a0/tests/scitex_agentic_journal/_decide/test__load_review.py +159 -0
  143. scitex_agentic_journal-0.1.0a0/tests/scitex_agentic_journal/_decide/test__persist.py +150 -0
  144. scitex_agentic_journal-0.1.0a0/tests/scitex_agentic_journal/_decide/test__rules.py +114 -0
  145. scitex_agentic_journal-0.1.0a0/tests/scitex_agentic_journal/_django/__init__.py +0 -0
  146. scitex_agentic_journal-0.1.0a0/tests/scitex_agentic_journal/_django/test__leaf.py +106 -0
  147. scitex_agentic_journal-0.1.0a0/tests/scitex_agentic_journal/_django/test__manifest.py +238 -0
  148. scitex_agentic_journal-0.1.0a0/tests/scitex_agentic_journal/_gate1/__init__.py +0 -0
  149. scitex_agentic_journal-0.1.0a0/tests/scitex_agentic_journal/_gate1/_fixtures/orcid_0000-0001-2345-6789_record_minimal.json +12 -0
  150. scitex_agentic_journal-0.1.0a0/tests/scitex_agentic_journal/_gate1/_fixtures/orcid_0000-0002-1825-0097_record.json +14 -0
  151. scitex_agentic_journal-0.1.0a0/tests/scitex_agentic_journal/_gate1/_fixtures/orcid_0000-0002-1825-0097_record_garbled.json +4 -0
  152. scitex_agentic_journal-0.1.0a0/tests/scitex_agentic_journal/_gate1/test__clew_dag.py +549 -0
  153. scitex_agentic_journal-0.1.0a0/tests/scitex_agentic_journal/_gate1/test__code_repo.py +381 -0
  154. scitex_agentic_journal-0.1.0a0/tests/scitex_agentic_journal/_gate1/test__orcid.py +388 -0
  155. scitex_agentic_journal-0.1.0a0/tests/scitex_agentic_journal/_hub_app_publisher/__init__.py +1 -0
  156. scitex_agentic_journal-0.1.0a0/tests/scitex_agentic_journal/_hub_app_publisher/test__derive_wrapper_manifest.py +257 -0
  157. scitex_agentic_journal-0.1.0a0/tests/scitex_agentic_journal/_hub_app_publisher/test__manifest.py +189 -0
  158. scitex_agentic_journal-0.1.0a0/tests/scitex_agentic_journal/_hub_app_publisher/test__resolver_adapter.py +298 -0
  159. scitex_agentic_journal-0.1.0a0/tests/scitex_agentic_journal/_mcp/__init__.py +0 -0
  160. scitex_agentic_journal-0.1.0a0/tests/scitex_agentic_journal/_mcp/test__tools.py +221 -0
  161. scitex_agentic_journal-0.1.0a0/tests/scitex_agentic_journal/_orcid/__init__.py +0 -0
  162. scitex_agentic_journal-0.1.0a0/tests/scitex_agentic_journal/_orcid/test__link.py +245 -0
  163. scitex_agentic_journal-0.1.0a0/tests/scitex_agentic_journal/_ports/__init__.py +0 -0
  164. scitex_agentic_journal-0.1.0a0/tests/scitex_agentic_journal/_ports/test__hub.py +273 -0
  165. scitex_agentic_journal-0.1.0a0/tests/scitex_agentic_journal/_publish/__init__.py +0 -0
  166. scitex_agentic_journal-0.1.0a0/tests/scitex_agentic_journal/_publish/test__handoff.py +380 -0
  167. scitex_agentic_journal-0.1.0a0/tests/scitex_agentic_journal/_publish/test__load_records.py +333 -0
  168. scitex_agentic_journal-0.1.0a0/tests/scitex_agentic_journal/_publish/test__mint.py +234 -0
  169. scitex_agentic_journal-0.1.0a0/tests/scitex_agentic_journal/_publish/test__persist.py +173 -0
  170. scitex_agentic_journal-0.1.0a0/tests/scitex_agentic_journal/_publish/test__select.py +264 -0
  171. scitex_agentic_journal-0.1.0a0/tests/scitex_agentic_journal/_publish/test__zenodo_sandbox.py +153 -0
  172. scitex_agentic_journal-0.1.0a0/tests/scitex_agentic_journal/_re_review_badge/__init__.py +1 -0
  173. scitex_agentic_journal-0.1.0a0/tests/scitex_agentic_journal/_re_review_badge/test__resolver.py +336 -0
  174. scitex_agentic_journal-0.1.0a0/tests/scitex_agentic_journal/_re_review_badge/test__resolver_branches.py +372 -0
  175. scitex_agentic_journal-0.1.0a0/tests/scitex_agentic_journal/_re_review_badge/test__types.py +110 -0
  176. scitex_agentic_journal-0.1.0a0/tests/scitex_agentic_journal/_review/__init__.py +0 -0
  177. scitex_agentic_journal-0.1.0a0/tests/scitex_agentic_journal/_review/test__adapters.py +82 -0
  178. scitex_agentic_journal-0.1.0a0/tests/scitex_agentic_journal/_review/test__load_gate1.py +152 -0
  179. scitex_agentic_journal-0.1.0a0/tests/scitex_agentic_journal/_review/test__local_adapter.py +94 -0
  180. scitex_agentic_journal-0.1.0a0/tests/scitex_agentic_journal/_review/test__persist.py +121 -0
  181. scitex_agentic_journal-0.1.0a0/tests/scitex_agentic_journal/_review/test__runner.py +294 -0
  182. scitex_agentic_journal-0.1.0a0/tests/scitex_agentic_journal/_submit/__init__.py +0 -0
  183. scitex_agentic_journal-0.1.0a0/tests/scitex_agentic_journal/_submit/test__loader.py +214 -0
  184. scitex_agentic_journal-0.1.0a0/tests/scitex_agentic_journal/_submit/test__orchestrate.py +142 -0
  185. scitex_agentic_journal-0.1.0a0/tests/scitex_agentic_journal/_submit/test__persist.py +153 -0
@@ -0,0 +1 @@
1
+ {"sessionId":"8b9f6dd8-9ead-4985-837a-88a4fd926d38","pid":31,"procStart":"11843348","acquiredAt":1781336370538}
@@ -0,0 +1,16 @@
1
+ # scitex-agentic-journal — example environment.
2
+ #
3
+ # Copy to `.env` (or export inline) and edit the values you actually
4
+ # need. Lines beginning with `#` are documentation only; this file is
5
+ # checked into git, the real `.env` is not.
6
+ #
7
+ # The package itself reads no env vars at runtime today; the SCITEX_*
8
+ # vars below are scaffold knobs read by the CLI and the (not-yet-shipped)
9
+ # Gate-1 orchestrator. They are documented here so the PS-129 audit
10
+ # rule can confirm every `SCITEX_AGENTIC_JOURNAL_*` token referenced in
11
+ # `src/` has a discoverable description.
12
+
13
+ # Path to an alternate YAML config for the CLI / orchestrator. When
14
+ # unset, the CLI falls back to `./config.yaml`, then to
15
+ # `~/.scitex/agentic-journal/config.yaml`.
16
+ # SCITEX_AGENTIC_JOURNAL_CONFIG=/abs/path/to/config.yaml
@@ -0,0 +1,33 @@
1
+ name: CLA Assistant
2
+
3
+ on:
4
+ issue_comment:
5
+ types: [created]
6
+ pull_request_target:
7
+ types: [opened, closed, synchronize]
8
+
9
+ permissions:
10
+ actions: write
11
+ contents: write
12
+ pull-requests: write
13
+ statuses: write
14
+
15
+ jobs:
16
+ CLAssistant:
17
+ runs-on: ubuntu-latest
18
+ steps:
19
+ - name: CLA Assistant
20
+ uses: contributor-assistant/github-action@v2.6.1
21
+ env:
22
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
23
+ PERSONAL_ACCESS_TOKEN: ${{ secrets.GH_PERSONAL_ACCESS_TOKEN }}
24
+ with:
25
+ path-to-signatures: "signatures/cla.json"
26
+ path-to-document: "https://github.com/ywatanabe1989/scitex-agentic-journal/blob/main/CLA.md"
27
+ branch: "cla-signatures"
28
+ allowlist: bot*,ywatanabe1989
29
+ custom-allsigned-prcomment: |
30
+ Thank you for signing the SciTeX CLA. Your contribution can now be reviewed.
31
+ custom-notsigned-prcomment: |
32
+ Please sign the [SciTeX CLA](https://github.com/ywatanabe1989/scitex-agentic-journal/blob/main/CLA.md) before your contribution can be merged.
33
+ Comment `I have read and agree to the SciTeX CLA.` to sign.
@@ -0,0 +1,134 @@
1
+ name: pr-ci
2
+
3
+ # Consolidated PR-only CI gate. Runs the per-PR validation suite as a
4
+ # single workflow so the cancel-in-progress concurrency group, path
5
+ # filters, and uv cache apply uniformly. Post-merge validation lives
6
+ # in release-ci.yml.
7
+ #
8
+ # L1 concurrency — cancel superseded PR runs.
9
+ # L3 path filters — skip docs/skills/examples/markdown-only PRs.
10
+ # L4 conditional matrix — full ["3.11", "3.12", "3.13"] on PR (this trigger).
11
+ # L5a uv-managed Python (`uv python install` + `uv venv --python`) so the
12
+ # matrix leg is not bound to the runner's system Python.
13
+ # L5b .venv/bin on PATH (and explicit `.venv/bin/python` for clarity) so
14
+ # console scripts resolve without needing `uv run`.
15
+
16
+ on:
17
+ pull_request:
18
+ branches: [main, develop]
19
+ paths-ignore:
20
+ - 'docs/**'
21
+ - '_skills/**'
22
+ - 'examples/**'
23
+ - '**.md'
24
+ - 'CHANGELOG.*'
25
+ - '.github/CODEOWNERS'
26
+ - '.github/ISSUE_TEMPLATE/**'
27
+ workflow_dispatch:
28
+
29
+ concurrency:
30
+ group: ${{ github.workflow }}-${{ github.ref }}
31
+ cancel-in-progress: ${{ github.event_name == 'pull_request' }}
32
+
33
+ jobs:
34
+ import-smoke:
35
+ name: import-smoke-on-ubuntu-py3-12
36
+ runs-on: ubuntu-latest
37
+ steps:
38
+ - uses: actions/checkout@v4
39
+ - name: Install uv
40
+ uses: astral-sh/setup-uv@v3
41
+ with:
42
+ enable-cache: true
43
+ cache-dependency-glob: pyproject.toml
44
+ - name: Set up Python 3.12 (uv-managed)
45
+ run: uv python install 3.12
46
+ - name: Install (no extras) in uv venv
47
+ run: |
48
+ uv venv --python 3.12 .venv
49
+ uv pip install --python .venv/bin/python -e .
50
+ - name: Import smoke
51
+ run: .venv/bin/python -c "import scitex_agentic_journal; print(getattr(scitex_agentic_journal, '__version__', 'unversioned'))"
52
+ - name: smoke scitex-agentic-journal --help
53
+ run: .venv/bin/scitex-agentic-journal --help
54
+ dep-hygiene-smoke:
55
+ name: dep-hygiene-smoke
56
+ runs-on: ubuntu-latest
57
+ steps:
58
+ - uses: actions/checkout@v4
59
+ - name: Install uv
60
+ uses: astral-sh/setup-uv@v3
61
+ with:
62
+ enable-cache: true
63
+ cache-dependency-glob: pyproject.toml
64
+ - name: Set up Python 3.11 (uv-managed)
65
+ run: uv python install 3.11
66
+ - name: Bare install (no extras) in uv venv
67
+ run: |
68
+ uv venv --python 3.11 .venv
69
+ uv pip install --python .venv/bin/python .
70
+ - name: Import package
71
+ run: .venv/bin/python -c "import scitex_agentic_journal; print(scitex_agentic_journal.__name__)"
72
+
73
+ tests:
74
+ name: pytest-matrix-on-ubuntu-py${{ matrix.python-version }}
75
+ runs-on: ubuntu-latest
76
+ strategy:
77
+ fail-fast: false
78
+ matrix:
79
+ python-version: ${{ github.event_name == 'pull_request' && fromJson('["3.11", "3.12", "3.13"]') || fromJson('["3.12"]') }}
80
+ steps:
81
+ - uses: actions/checkout@v4
82
+ - name: Install uv
83
+ uses: astral-sh/setup-uv@v3
84
+ with:
85
+ enable-cache: true
86
+ cache-dependency-glob: pyproject.toml
87
+ - name: Set up Python ${{ matrix.python-version }} (uv-managed)
88
+ run: uv python install ${{ matrix.python-version }}
89
+ - name: Create uv venv on this matrix Python
90
+ run: uv venv --python ${{ matrix.python-version }} .venv
91
+ - name: Install dependencies
92
+ # Fallback chain: prefer [all,dev] so optional-dep code paths
93
+ # get exercised. Falls back to [dev] then plain editable so a
94
+ # packaging hiccup doesn't strand CI.
95
+ run: |
96
+ uv pip install --python .venv/bin/python -e ".[all,dev]" \
97
+ || uv pip install --python .venv/bin/python -e ".[dev]" \
98
+ || uv pip install --python .venv/bin/python -e .
99
+ - name: Run tests
100
+ # PATH prepend so any test that subprocess-calls a console script
101
+ # finds it in .venv/bin/.
102
+ run: |
103
+ export PATH="$PWD/.venv/bin:$PATH"
104
+ .venv/bin/pytest tests/ --cov=src/scitex_agentic_journal --cov-report=xml --cov-report=term
105
+ - name: Upload coverage to Codecov
106
+ if: always() && matrix.python-version == '3.12'
107
+ uses: codecov/codecov-action@v5
108
+ with:
109
+ token: ${{ secrets.CODECOV_TOKEN }}
110
+ files: ./coverage.xml
111
+ fail_ci_if_error: false
112
+
113
+ audit:
114
+ name: audit
115
+ runs-on: ubuntu-latest
116
+ timeout-minutes: 20
117
+ steps:
118
+ - uses: actions/checkout@v4
119
+ - name: Install uv
120
+ uses: astral-sh/setup-uv@v3
121
+ with:
122
+ enable-cache: true
123
+ cache-dependency-glob: pyproject.toml
124
+ - name: Set up Python 3.12 (uv-managed)
125
+ run: uv python install 3.12
126
+ - name: Install package + audit tooling
127
+ run: |
128
+ uv venv --python 3.12 .venv
129
+ uv pip install --python .venv/bin/python -e ".[dev]"
130
+ uv pip install --python .venv/bin/python "scitex-dev[cli-audit]"
131
+ - name: Run scitex-dev ecosystem audit-all
132
+ run: |
133
+ export PATH="$PWD/.venv/bin:$PATH"
134
+ scitex-dev ecosystem audit-all scitex-agentic-journal --no-version-check
@@ -0,0 +1,100 @@
1
+ name: release-ci
2
+
3
+ # Post-merge validation gate. Runs on push to protected branches
4
+ # (main, develop) and as the canonical scheduled run. Always uses the
5
+ # FULL pytest matrix — no conditional skipping — so the protected-branch
6
+ # history is exercised on every supported Python.
7
+ #
8
+ # L1 concurrency — coalesce overlapping pushes on the same branch.
9
+ # L5a uv-managed Python (`uv python install` + `uv venv --python`) so each
10
+ # matrix leg pins its interpreter independently of the runner.
11
+ # L5b .venv/bin on PATH so console scripts resolve without `uv run`.
12
+
13
+ on:
14
+ push:
15
+ branches: [main, develop]
16
+ schedule:
17
+ - cron: "0 7 * * *" # nightly 07:00 UTC
18
+ workflow_dispatch:
19
+
20
+ concurrency:
21
+ group: ${{ github.workflow }}-${{ github.ref }}
22
+ cancel-in-progress: false
23
+
24
+ jobs:
25
+ tests:
26
+ name: pytest-matrix-on-ubuntu-py${{ matrix.python-version }}
27
+ runs-on: ubuntu-latest
28
+ strategy:
29
+ fail-fast: false
30
+ matrix:
31
+ python-version: ["3.11", "3.12", "3.13"]
32
+ steps:
33
+ - uses: actions/checkout@v4
34
+ - name: Install uv
35
+ uses: astral-sh/setup-uv@v3
36
+ with:
37
+ enable-cache: true
38
+ cache-dependency-glob: pyproject.toml
39
+ - name: Set up Python ${{ matrix.python-version }} (uv-managed)
40
+ run: uv python install ${{ matrix.python-version }}
41
+ - name: Create uv venv on this matrix Python
42
+ run: uv venv --python ${{ matrix.python-version }} .venv
43
+ - name: Install dependencies
44
+ run: |
45
+ uv pip install --python .venv/bin/python -e ".[all,dev]" \
46
+ || uv pip install --python .venv/bin/python -e ".[dev]" \
47
+ || uv pip install --python .venv/bin/python -e .
48
+ - name: Run tests
49
+ run: |
50
+ export PATH="$PWD/.venv/bin:$PATH"
51
+ .venv/bin/pytest tests/ --cov=src/scitex_agentic_journal --cov-report=xml --cov-report=term
52
+ - name: Upload coverage to Codecov
53
+ if: always() && matrix.python-version == '3.12'
54
+ uses: codecov/codecov-action@v5
55
+ with:
56
+ token: ${{ secrets.CODECOV_TOKEN }}
57
+ files: ./coverage.xml
58
+ fail_ci_if_error: false
59
+
60
+ import-smoke:
61
+ name: import-smoke-on-ubuntu-py3-12
62
+ runs-on: ubuntu-latest
63
+ steps:
64
+ - uses: actions/checkout@v4
65
+ - name: Install uv
66
+ uses: astral-sh/setup-uv@v3
67
+ with:
68
+ enable-cache: true
69
+ cache-dependency-glob: pyproject.toml
70
+ - name: Set up Python 3.12 (uv-managed)
71
+ run: uv python install 3.12
72
+ - name: Install (no extras) in uv venv
73
+ run: |
74
+ uv venv --python 3.12 .venv
75
+ uv pip install --python .venv/bin/python -e .
76
+ - name: Import smoke
77
+ run: .venv/bin/python -c "import scitex_agentic_journal; print(getattr(scitex_agentic_journal, '__version__', 'unversioned'))"
78
+
79
+ audit:
80
+ name: audit
81
+ runs-on: ubuntu-latest
82
+ timeout-minutes: 20
83
+ steps:
84
+ - uses: actions/checkout@v4
85
+ - name: Install uv
86
+ uses: astral-sh/setup-uv@v3
87
+ with:
88
+ enable-cache: true
89
+ cache-dependency-glob: pyproject.toml
90
+ - name: Set up Python 3.12 (uv-managed)
91
+ run: uv python install 3.12
92
+ - name: Install package + audit tooling
93
+ run: |
94
+ uv venv --python 3.12 .venv
95
+ uv pip install --python .venv/bin/python -e ".[dev]"
96
+ uv pip install --python .venv/bin/python "scitex-dev[cli-audit]"
97
+ - name: Run scitex-dev ecosystem audit-all
98
+ run: |
99
+ export PATH="$PWD/.venv/bin:$PATH"
100
+ scitex-dev ecosystem audit-all scitex-agentic-journal --no-version-check
@@ -0,0 +1,19 @@
1
+ __pycache__/
2
+ *.py[cod]
3
+ *$py.class
4
+ *.egg-info/
5
+ .eggs/
6
+ build/
7
+ dist/
8
+ .venv/
9
+ venv/
10
+ .coverage
11
+ .coverage.*
12
+ htmlcov/
13
+ .pytest_cache/
14
+ .mypy_cache/
15
+ .ruff_cache/
16
+ .tox/
17
+ GITIGNORED/
18
+ .DS_Store
19
+ .worktrees/
@@ -0,0 +1,18 @@
1
+ # Project-local overrides for scitex-dev's CLI audit dictionary.
2
+ #
3
+ # Tokens listed here override the default noun/verb classification
4
+ # the auditor derives from CATALOG / moby. See
5
+ # `scitex_dev._cli.audit._summary._audit:_load_custom_dict`.
6
+
7
+ # Verbs that don't need a sibling — the CLI verb at the top level is
8
+ # a complete (intransitive) action.
9
+ intransitive_verbs:
10
+ # `scitex-agentic-journal hub-manifest` is the agentic-journal
11
+ # mirror of scitex-live-paper's `hub-manifest` Click verb (PR #45).
12
+ # The verb is intransitive: the action is "emit the wrapper manifest
13
+ # JSON to stdout"; the verb name reads as a noun ("hub manifest") in
14
+ # the bare token-classifier sense, but the action it performs is a
15
+ # complete unit (no object needed; redirect to `> manifest.json` is
16
+ # the canonical use). Mirrors what live-paper already ships
17
+ # cross-package.
18
+ - hub-manifest
@@ -0,0 +1,147 @@
1
+ # Changelog
2
+
3
+ All notable changes to `scitex-agentic-journal` are documented in this file.
4
+
5
+ ## [Unreleased]
6
+
7
+ ### Added
8
+ - Leaf `_django` demo surface (aj-leaf-django): `_django/_leaf.py`
9
+ (Django-free helpers: real-FS archive list, deterministic mock
10
+ validator panel, browse/share payloads, HTML payload via the
11
+ live-paper ports contract — no core fork) + `dashboard/` route
12
+ (`decision_dashboard()` verdict→badge-status rows + counts for
13
+ the Monday demo). Placeholder/503 contracts kept. Tests:
14
+ `tests/scitex_agentic_journal/_django/test__leaf.py` (10 tests).
15
+ - M5 publish hand-off (#9 → PR #27): `_publish.publish_submission`,
16
+ `_publish.LocalFilesystemLivePaperPort` (default in-process port that
17
+ writes the Live Paper bundle envelope to
18
+ `<home>/published/<submission_id>/bundle.json`),
19
+ `_publish.RemoteLivePaperPortStub` (NotImplementedError stub for the
20
+ future HTTP/MCP port), `_publish.load_submission_records` +
21
+ `PublishLoadError` (refuses to publish unless gate1/review/decision/
22
+ persistent_id are all on disk and the decision verdict is `accept`).
23
+ CLI: `scitex-agentic-journal publish <submission-id>` with the
24
+ audit-§6 mutating-verb flags `--dry-run` / `--yes`. Prints
25
+ `PUBLISHED submission_id=... viewer_url=... persistent_id=...` on
26
+ success.
27
+ - M4 persistent-ID minting (#8 → PR #26): `_publish.mint_for_submission`
28
+ + `MintLoadError` (orchestrates a mint over a persisted Gate-1
29
+ record), `_publish.persist_persistent_id` + `PersistedPersistentId`
30
+ (drops `persistent_id.json` next to `gate1.json` / `review.json` /
31
+ `decision.json`). `_publish._zenodo.ZenodoSandboxStub` now mints
32
+ against the real `sandbox.zenodo.org` REST API over real HTTP — token
33
+ from `SCITEX_AJ_ZENODO_SANDBOX_TOKEN`. `ZenodoStub` (production)
34
+ shares the same HTTP code path against `zenodo.org` when
35
+ `SCITEX_AJ_ZENODO_TOKEN` is set; both raise loud `RuntimeError` on
36
+ missing token or non-2xx response (no silent fallback). The opt-in
37
+ network test exercises the sandbox round-trip when
38
+ `SCITEX_RUN_NETWORK_TESTS=1` + `SCITEX_AJ_ZENODO_SANDBOX_TOKEN` are
39
+ both present.
40
+ - M3 editorial decision engine (#7 → PR #28): `_decide.DecisionEngine`
41
+ produces `accept | revise | reject` over the immutable
42
+ `ReviewRecord` from M2. Rules-set is versioned + auditable
43
+ (`_decide/rules/v1.yaml`, bundled via
44
+ `[tool.setuptools.package-data]`) — no silent thresholds in code.
45
+ Every rule emits a `RuleHit` (both pass and fail) so the persisted
46
+ `decision.json` proves which rules passed alongside which failed.
47
+ Verdict precedence: first failing reject rule wins reject; otherwise
48
+ first failing revise rule wins revise; otherwise accept.
49
+ `_decide.persist_decision` + `PersistedDecision` drop
50
+ `decision.json` next to `gate1.json` / `review.json`. CLI:
51
+ `scitex-agentic-journal decide <submission-id>` prints
52
+ `DECISION submission_id=... verdict=... rules_version=... content_hash=...`.
53
+ - M2 reviewer-agent harness (#6 → PR #25): `_review.ReviewRunner` runs
54
+ all four ARA sub-reports (reproducibility, claim verify, novelty,
55
+ methodology) against one submission in rubric order via a pluggable
56
+ `ReviewerAdapter` protocol. Ships `LocalDeterministicAdapter` (the
57
+ in-memory dev/test adapter) and `QwenAdapterStub` (NotImplementedError
58
+ placeholder until the live endpoint is wired). `_review.persist_review`
59
+ + `PersistedReview` write `review.json` (sha256 content_hash +
60
+ `written_at_utc`) next to `gate1.json`. CLI:
61
+ `scitex-agentic-journal review <submission-id> [--adapter local]
62
+ [--prompts-version v1]` prints `REVIEW DONE submission_id=...
63
+ adapter=... content_hash=...`.
64
+ - M1 CLI orchestrator (#5 → PR #24): `_submit.run_gate1` runs the three
65
+ Gate-1 checks (ORCID → code-repo → Clew DAG) in declared order and
66
+ short-circuits on the first failure with a structured `Gate1Failure`
67
+ wrapping the underlying `GateFailure`. `_submit.persist_verdict` +
68
+ `PersistedSubmission` mint a sortable, opaque submission id
69
+ (`sub_YYYY_MM_DD_<6-hex>`) and drop `gate1.json` under
70
+ `$SCITEX_AGENTIC_JOURNAL_HOME/submissions/<id>/`. CLI:
71
+ `scitex-agentic-journal submit <bundle-dir>` prints
72
+ `GATE-1 PASS submission_id=...` on success and one structured
73
+ `GATE-1 FAIL [<check>]: <reason> -- <detail>` line on failure.
74
+ - M1.3 Clew-DAG verification (#4 → PR #21): `_gate1.verify_clew_dag`
75
+ shells out to the real `clew claim verify` binary against the
76
+ bundled DAG and returns a `ClewVerification` recording the green /
77
+ red claim ids and total claim count. Loud `GateFailure` when no
78
+ green claim is present, when `clew` is missing from PATH, or when
79
+ the DAG directory is malformed. Opt-in real test gated on
80
+ `SCITEX_RUN_CLEW_TESTS=1` + `clew` on PATH.
81
+
82
+ - `_gate1.clone_code_repo(repo_url, destination, *, depth=1, ref=None,
83
+ timeout_s=60.0)` — second slice of the M1 submission gate. Shells out
84
+ to the real system `git` binary to shallow-clone the author's code
85
+ repository. Loud structured `GateFailure` on empty URL, missing `git`
86
+ binary, pre-existing destination, clone failure (exit code + stderr
87
+ excerpt), or timeout. On any failure the partially-populated
88
+ destination is removed.
89
+ - `_gate1.cloned_code_repo(repo_url, ...)` — context-manager helper that
90
+ clones into a tempdir and cleans up on exit, so the CLI orchestrator
91
+ (issue #5) does not have to manage tempdirs itself.
92
+ - `_gate1.ClonedRepo` dataclass exposing `repo_url`, `path`,
93
+ `head_commit`, `head_subject` so downstream gates can identify what
94
+ was reviewed without re-cloning.
95
+ - `tests/test_gate1_code_repo.py` — hermetic test suite that builds a
96
+ real local bare git repo with one real commit and clones via a
97
+ `file://` URL. Real `git` binary, real subprocess, real disk; no
98
+ `subprocess` patching, no respx/responses replay (STX-NM001-003 /
99
+ PA-306 compliant). One opt-in `@pytest.mark.network` test clones
100
+ `github.com/octocat/Hello-World` when `SCITEX_RUN_NETWORK_TESTS=1`.
101
+ - `scitex_agentic_journal._gate1` package — first slice of the M1 submission
102
+ gate. Public surface: `GateFailure` (structured failure exception),
103
+ `verify_orcid(orcid_id, *, session=None, base_url=...)`, `OrcidRecord`,
104
+ and `ORCID_PUB_API_BASE` constant.
105
+ - `verify_orcid` resolves an ORCID iD against the public ORCID v3.0 API
106
+ via real HTTP (`requests`). Accepts bare iDs and any `orcid.org` /
107
+ `sandbox.orcid.org` URL form. Verifies the ISO 7064 MOD 11-2 check
108
+ digit before any network call. Loud, structured `GateFailure` on
109
+ malformed iD / bad checksum / 404 / non-2xx / non-JSON body /
110
+ unfamiliar record shape / network unreachable. No silent fallbacks,
111
+ no mocks.
112
+ - `tests/test_gate1_orcid.py` — hermetic test suite that spins up a real
113
+ local stdlib `http.server` on an ephemeral port and exercises
114
+ `verify_orcid` over real TCP via the `base_url` config seam (no
115
+ monkey-patching, no respx/responses replay library — STX-NM001-003 /
116
+ PA-306 compliant). One opt-in `@pytest.mark.network` test hits the
117
+ real `pub.orcid.org` when `SCITEX_RUN_NETWORK_TESTS=1`.
118
+ - `pyproject.toml`: register the `network` pytest marker.
119
+ - README "What it is" section spelling out the AI-agent-driven peer-review /
120
+ copy-edit / publication-readiness role, and an explicit "MVP loop"
121
+ (submit → agent review → decision → publish) section that maps to the
122
+ initial GitHub issues.
123
+ - README "Full pipeline (design target)" section with a 4-gate flow
124
+ (structural gate → AI review → editorial decision → persistent ID) so the
125
+ MVP loop and the long-term target are no longer collapsed.
126
+ - Roadmap expanded from 5 to 7 milestones (M1–M7) with an explicit editorial
127
+ decision engine (M3), persistent ID stage (M4), Live Paper hand-off (M5),
128
+ reviewer dashboard (M6) and MCP server (M7).
129
+ - `scitex-scholar` added to the dependency direction diagram as the source of
130
+ novelty / literature triangulation.
131
+ - GitHub Actions CI workflow (`.github/workflows/ci.yml`) running `pytest` on
132
+ Python 3.10 / 3.11 / 3.12 for `push` and `pull_request` against `main` and
133
+ `develop`.
134
+ - `pyproject.toml`: `license-files`, extra keywords (`agentic-review`,
135
+ `peer-review`, `reproducibility`), extra classifiers
136
+ (`Framework :: Django`, information analysis, LaTeX), and a `Changelog`
137
+ project URL.
138
+
139
+ ## [0.1.0-alpha] — 2026-06-12
140
+
141
+ ### Added
142
+ - Initial scaffold with purpose + 5-milestone roadmap.
143
+ - README pipeline diagram (submit -> ORCID+code+DAG gate -> AI review -> persistent ID -> Live Paper).
144
+ - Dependency direction documented: consumer of `scitex-clew` (claim model owner), emits to `scitex-live-paper`.
145
+ - `pyproject.toml` with `scitex-dev`, `scitex-ui`, `django`, `click`, `requests`, `pyyaml` runtime deps.
146
+ - Package skeleton at `src/scitex_agentic_journal/` with version export.
147
+ - Smoke test.
@@ -0,0 +1,71 @@
1
+ # SciTeX Contributor License Agreement (CLA)
2
+
3
+ Thank you for your interest in contributing to `scitex-agentic-journal`,
4
+ part of the [SciTeX](https://scitex.ai) ecosystem owned by Yusuke
5
+ Watanabe / 株式会社 SciTeX (in formation).
6
+
7
+ By making a contribution to this project (a commit, a pull request, a
8
+ patch, a code review fix-up, an issue with proposed wording, a
9
+ documentation change, etc.) you agree to the following terms for that
10
+ contribution.
11
+
12
+ ## 1. Definitions
13
+
14
+ - **You** (or **Your**) means the individual or legal entity submitting
15
+ a Contribution.
16
+ - **Contribution** means any work of authorship — including any
17
+ modification or addition to existing work — that is intentionally
18
+ submitted by You to the project for inclusion in the project.
19
+ - **Project** means `scitex-agentic-journal` and the surrounding SciTeX
20
+ ecosystem maintained by Yusuke Watanabe / 株式会社 SciTeX.
21
+
22
+ ## 2. Grant of Copyright License
23
+
24
+ You grant to the Project and to recipients of software distributed by
25
+ the Project a perpetual, worldwide, non-exclusive, no-charge,
26
+ royalty-free, irrevocable copyright license to reproduce, prepare
27
+ derivative works of, publicly display, publicly perform, sublicense and
28
+ distribute Your Contribution and such derivative works under the
29
+ license used by the Project at the time of inclusion
30
+ ([AGPL-3.0-only](LICENSE)) as well as under any subsequent license the
31
+ Project's maintainer adopts for the Project.
32
+
33
+ ## 3. Grant of Patent License
34
+
35
+ You grant to the Project and to recipients of software distributed by
36
+ the Project a perpetual, worldwide, non-exclusive, no-charge,
37
+ royalty-free, irrevocable patent license under the patent claims
38
+ licensable by You that are necessarily infringed by Your Contribution
39
+ alone or by combination of Your Contribution with the Project.
40
+
41
+ ## 4. You Are the Author
42
+
43
+ You represent that:
44
+
45
+ - Each Contribution is Your original creation, or You have sufficient
46
+ rights to grant the licenses in §2 and §3.
47
+ - If Your employer has rights to intellectual property You create that
48
+ includes Your Contributions, You have received permission to make
49
+ Contributions on behalf of that employer, or Your employer has
50
+ waived such rights.
51
+ - You are aware that the Project may treat unsigned Contributions as
52
+ not received under this CLA and may decline to merge them.
53
+
54
+ ## 5. Signing
55
+
56
+ By commenting on the relevant pull request
57
+
58
+ > `I have read and agree to the SciTeX CLA.`
59
+
60
+ You signify acceptance of this CLA for that Contribution and all future
61
+ Contributions to this Project. The CLA bot
62
+ (`contributor-assistant/github-action`) records your acceptance.
63
+
64
+ ## 6. No Warranty
65
+
66
+ You provide Your Contributions on an "AS IS" basis, without warranties
67
+ or conditions of any kind, express or implied.
68
+
69
+ ---
70
+
71
+ Questions: open an issue or email `contact@scitex.ai`.
@@ -0,0 +1,53 @@
1
+ # Contributing to `scitex-agentic-journal`
2
+
3
+ Thank you for your interest. This document is the short form. The
4
+ long form lives in the [SciTeX ecosystem guidelines](https://scitex.ai).
5
+
6
+ ## Quick rules
7
+
8
+ 1. **One task = one PR off `develop`.** Open the PR against `develop`,
9
+ not `main`. CI must be green before merge.
10
+ 2. **No mocks.** Production paths use real collaborators (real HTTP,
11
+ real `git`, real subprocess). Hermetic CI is achieved with real
12
+ local fixtures (stdlib `http.server`, real on-disk repos), never
13
+ with `respx` / `responses` / `unittest.mock` replay libraries.
14
+ See `STX-NM001-003` / `PA-306` in the SciTeX no-mocks discipline.
15
+ 3. **No silent fallbacks.** Every failure path raises a structured
16
+ `GateFailure` (or similar) with `reason` + `detail`.
17
+ 4. **Sign the [CLA](CLA.md).** A bot will check on PR open.
18
+ 5. **No `Co-Authored-By` trailer** from automated agents.
19
+ 6. **No `--no-verify`, no force-push** to protected branches.
20
+
21
+ ## Local development
22
+
23
+ ```bash
24
+ git clone https://github.com/ywatanabe1989/scitex-agentic-journal.git
25
+ cd scitex-agentic-journal
26
+ pip install -e ".[dev]"
27
+ pytest tests/
28
+ ```
29
+
30
+ To exercise the opt-in real-network tests:
31
+
32
+ ```bash
33
+ SCITEX_RUN_NETWORK_TESTS=1 pytest tests/ -m network
34
+ ```
35
+
36
+ ## Submitting a change
37
+
38
+ 1. Branch off `develop`: `git checkout -b feat/your-thing develop`.
39
+ 2. Implement + add tests.
40
+ 3. Update `CHANGELOG.md` under `## [Unreleased]`.
41
+ 4. Push, open a PR against `develop`, wait for CI.
42
+ 5. Self-merge (squash) once CI is green and the CLA bot is happy.
43
+
44
+ ## What gets reviewed
45
+
46
+ - Architecture fit (consumes Clew, emits Live Paper; we do not invent
47
+ new claim models here).
48
+ - No mocks in production paths.
49
+ - Real errors with guidance, not silent fallbacks.
50
+ - Tests describe behaviour, not implementation.
51
+
52
+ Questions: open an issue, or reach the maintainers via
53
+ `contact@scitex.ai`.