psyclaw 0.27.23 → 0.28.1

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 (1069) hide show
  1. package/README.md +11 -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 +339 -94
  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/import.js +44 -32
  10. package/dist/src/agents/import.js.map +1 -1
  11. package/dist/src/agents/recommended-personas.d.ts +42 -0
  12. package/dist/src/agents/recommended-personas.js +135 -0
  13. package/dist/src/agents/recommended-personas.js.map +1 -0
  14. package/dist/src/analysis/hooks.d.ts +1 -0
  15. package/dist/src/analysis/hooks.js +20 -1
  16. package/dist/src/analysis/hooks.js.map +1 -1
  17. package/dist/src/ars/bridge.d.ts +20 -0
  18. package/dist/src/ars/bridge.js +132 -0
  19. package/dist/src/ars/bridge.js.map +1 -0
  20. package/dist/src/ars/contracts.d.ts +55 -0
  21. package/dist/src/ars/contracts.js +2 -0
  22. package/dist/src/ars/contracts.js.map +1 -0
  23. package/dist/src/ars/panel-plan.d.ts +4 -0
  24. package/dist/src/ars/panel-plan.js +11 -0
  25. package/dist/src/ars/panel-plan.js.map +1 -0
  26. package/dist/src/ars/pi-panel-executor.d.ts +30 -0
  27. package/dist/src/ars/pi-panel-executor.js +140 -0
  28. package/dist/src/ars/pi-panel-executor.js.map +1 -0
  29. package/dist/src/ars/profile.d.ts +36 -0
  30. package/dist/src/ars/profile.js +119 -0
  31. package/dist/src/ars/profile.js.map +1 -0
  32. package/dist/src/ars/re-review.d.ts +22 -0
  33. package/dist/src/ars/re-review.js +172 -0
  34. package/dist/src/ars/re-review.js.map +1 -0
  35. package/dist/src/branding.d.ts +2 -4
  36. package/dist/src/branding.js +3 -5
  37. package/dist/src/branding.js.map +1 -1
  38. package/dist/src/bundled-tools.d.ts +3 -0
  39. package/dist/src/bundled-tools.js +21 -0
  40. package/dist/src/bundled-tools.js.map +1 -0
  41. package/dist/src/chat.js +6 -5
  42. package/dist/src/chat.js.map +1 -1
  43. package/dist/src/cli.js +6 -3
  44. package/dist/src/cli.js.map +1 -1
  45. package/dist/src/creation/contracts.d.ts +41 -0
  46. package/dist/src/creation/contracts.js +2 -0
  47. package/dist/src/creation/contracts.js.map +1 -0
  48. package/dist/src/creation/service.d.ts +7 -0
  49. package/dist/src/creation/service.js +208 -0
  50. package/dist/src/creation/service.js.map +1 -0
  51. package/dist/src/index.d.ts +11 -0
  52. package/dist/src/index.js +11 -0
  53. package/dist/src/index.js.map +1 -1
  54. package/dist/src/install/installer.js +32 -10
  55. package/dist/src/install/installer.js.map +1 -1
  56. package/dist/src/orchestration/bundled-personas.d.ts +16 -0
  57. package/dist/src/orchestration/bundled-personas.js +101 -0
  58. package/dist/src/orchestration/bundled-personas.js.map +1 -0
  59. package/dist/src/orchestration/effects.d.ts +8 -0
  60. package/dist/src/orchestration/effects.js +39 -0
  61. package/dist/src/orchestration/effects.js.map +1 -0
  62. package/dist/src/orchestration/personas.d.ts +16 -0
  63. package/dist/src/orchestration/personas.js +64 -0
  64. package/dist/src/orchestration/personas.js.map +1 -0
  65. package/dist/src/orchestration/pi-executor.d.ts +9 -4
  66. package/dist/src/orchestration/pi-executor.js +55 -22
  67. package/dist/src/orchestration/pi-executor.js.map +1 -1
  68. package/dist/src/orchestration/research-agents.d.ts +3 -7
  69. package/dist/src/orchestration/research-agents.js +5 -69
  70. package/dist/src/orchestration/research-agents.js.map +1 -1
  71. package/dist/src/panel/server.js +19 -4
  72. package/dist/src/panel/server.js.map +1 -1
  73. package/dist/src/project/paths.d.ts +3 -0
  74. package/dist/src/project/paths.js +7 -0
  75. package/dist/src/project/paths.js.map +1 -1
  76. package/dist/src/rules/user-rules.d.ts +8 -0
  77. package/dist/src/rules/user-rules.js +36 -0
  78. package/dist/src/rules/user-rules.js.map +1 -0
  79. package/dist/src/skills/contracts.d.ts +4 -4
  80. package/dist/src/skills/recommended.js +1 -1
  81. package/dist/src/skills/registry.js +49 -28
  82. package/dist/src/skills/registry.js.map +1 -1
  83. package/dist/src/style/cli-ui.d.ts +14 -0
  84. package/dist/src/style/cli-ui.js +45 -1
  85. package/dist/src/style/cli-ui.js.map +1 -1
  86. package/dist/src/tui/skill-manager.js +1 -1
  87. package/dist/src/tui/skill-manager.js.map +1 -1
  88. package/dist/src/updates/update.js +9 -3
  89. package/dist/src/updates/update.js.map +1 -1
  90. package/package.json +15 -3
  91. package/scripts/rebrand-pi.mjs +6 -0
  92. package/skills/recommended/catalog.json +2 -11
  93. package/vendor/ars/.claude/CLAUDE.md +371 -0
  94. package/vendor/ars/.command-invariants.toml +24 -0
  95. package/vendor/ars/CITATION.cff +35 -0
  96. package/vendor/ars/LICENSE +417 -0
  97. package/vendor/ars/MODE_REGISTRY.md +76 -0
  98. package/vendor/ars/NOTICE.md +26 -0
  99. package/vendor/ars/POSITIONING.md +99 -0
  100. package/vendor/ars/PSYCLAW_SOURCE.json +10 -0
  101. package/vendor/ars/README.md +751 -0
  102. package/vendor/ars/SECURITY.md +52 -0
  103. package/vendor/ars/THIRD_PARTY.md +70 -0
  104. package/vendor/ars/academic-paper/SKILL.md +542 -0
  105. package/vendor/ars/academic-paper/agents/abstract_bilingual_agent.md +171 -0
  106. package/vendor/ars/academic-paper/agents/argument_builder_agent.md +276 -0
  107. package/vendor/ars/academic-paper/agents/citation_compliance_agent.md +422 -0
  108. package/vendor/ars/academic-paper/agents/draft_writer_agent.md +656 -0
  109. package/vendor/ars/academic-paper/agents/formatter_agent.md +999 -0
  110. package/vendor/ars/academic-paper/agents/intake_agent.md +393 -0
  111. package/vendor/ars/academic-paper/agents/literature_strategist_agent.md +626 -0
  112. package/vendor/ars/academic-paper/agents/peer_reviewer_agent.md +516 -0
  113. package/vendor/ars/academic-paper/agents/revision_coach_agent.md +334 -0
  114. package/vendor/ars/academic-paper/agents/socratic_mentor_agent.md +527 -0
  115. package/vendor/ars/academic-paper/agents/structure_architect_agent.md +401 -0
  116. package/vendor/ars/academic-paper/agents/visualization_agent.md +441 -0
  117. package/vendor/ars/academic-paper/examples/chinese_paper_example.md +278 -0
  118. package/vendor/ars/academic-paper/examples/clinical_citation_verification_checklist.md +95 -0
  119. package/vendor/ars/academic-paper/examples/clinical_epistemic_status_example.md +100 -0
  120. package/vendor/ars/academic-paper/examples/commitment_ledger_example.md +147 -0
  121. package/vendor/ars/academic-paper/examples/imrad_hei_example.md +234 -0
  122. package/vendor/ars/academic-paper/examples/literature_review_example.md +260 -0
  123. package/vendor/ars/academic-paper/examples/plan_mode_guided_writing.md +600 -0
  124. package/vendor/ars/academic-paper/examples/revision_mode_example.md +344 -0
  125. package/vendor/ars/academic-paper/examples/revision_recovery_example.md +506 -0
  126. package/vendor/ars/academic-paper/examples/version_family_reconciliation_example.md +89 -0
  127. package/vendor/ars/academic-paper/references/abstract_writing_guide.md +169 -0
  128. package/vendor/ars/academic-paper/references/academic_writing_style.md +188 -0
  129. package/vendor/ars/academic-paper/references/anti_leakage_protocol.md +83 -0
  130. package/vendor/ars/academic-paper/references/apa7_chinese_citation_guide.md +364 -0
  131. package/vendor/ars/academic-paper/references/apa7_extended_guide.md +198 -0
  132. package/vendor/ars/academic-paper/references/changelog.md +11 -0
  133. package/vendor/ars/academic-paper/references/citation_format_switcher.md +228 -0
  134. package/vendor/ars/academic-paper/references/committee_correspondence_protocol.md +158 -0
  135. package/vendor/ars/academic-paper/references/credit_authorship_guide.md +308 -0
  136. package/vendor/ars/academic-paper/references/disclosure_mode_protocol.md +478 -0
  137. package/vendor/ars/academic-paper/references/domain_evidence_profiles.md +38 -0
  138. package/vendor/ars/academic-paper/references/failure_paths.md +349 -0
  139. package/vendor/ars/academic-paper/references/funding_statement_guide.md +319 -0
  140. package/vendor/ars/academic-paper/references/hei_domain_glossary.md +169 -0
  141. package/vendor/ars/academic-paper/references/intro_title_rhetoric_guide.md +114 -0
  142. package/vendor/ars/academic-paper/references/journal_submission_guide.md +249 -0
  143. package/vendor/ars/academic-paper/references/latex_template_reference.md +378 -0
  144. package/vendor/ars/academic-paper/references/mode_selection_guide.md +378 -0
  145. package/vendor/ars/academic-paper/references/paper_structure_patterns.md +330 -0
  146. package/vendor/ars/academic-paper/references/plan_mode_protocol.md +112 -0
  147. package/vendor/ars/academic-paper/references/policy_anchor_disclosure_protocol.md +200 -0
  148. package/vendor/ars/academic-paper/references/policy_anchor_table.md +157 -0
  149. package/vendor/ars/academic-paper/references/revision_patch_protocol.md +173 -0
  150. package/vendor/ars/academic-paper/references/statistical_visualization_standards.md +750 -0
  151. package/vendor/ars/academic-paper/references/venue_disclosure_policies.md +259 -0
  152. package/vendor/ars/academic-paper/references/vlm_figure_verification.md +126 -0
  153. package/vendor/ars/academic-paper/references/workflow_phase_details.md +135 -0
  154. package/vendor/ars/academic-paper/references/writing_judgment_framework.md +59 -0
  155. package/vendor/ars/academic-paper/references/writing_quality_check.md +173 -0
  156. package/vendor/ars/academic-paper/templates/bilingual_abstract_template.md +78 -0
  157. package/vendor/ars/academic-paper/templates/case_study_template.md +129 -0
  158. package/vendor/ars/academic-paper/templates/conference_paper_template.md +108 -0
  159. package/vendor/ars/academic-paper/templates/credit_statement_template.md +132 -0
  160. package/vendor/ars/academic-paper/templates/funding_statement_template.md +290 -0
  161. package/vendor/ars/academic-paper/templates/imrad_template.md +183 -0
  162. package/vendor/ars/academic-paper/templates/latex_article_template.tex +199 -0
  163. package/vendor/ars/academic-paper/templates/literature_review_template.md +135 -0
  164. package/vendor/ars/academic-paper/templates/policy_brief_template.md +139 -0
  165. package/vendor/ars/academic-paper/templates/revision_tracking_template.md +199 -0
  166. package/vendor/ars/academic-paper/templates/theoretical_paper_template.md +119 -0
  167. package/vendor/ars/academic-paper-reviewer/SKILL.md +491 -0
  168. package/vendor/ars/academic-paper-reviewer/agents/devils_advocate_reviewer_agent.md +443 -0
  169. package/vendor/ars/academic-paper-reviewer/agents/domain_reviewer_agent.md +412 -0
  170. package/vendor/ars/academic-paper-reviewer/agents/editorial_synthesizer_agent.md +478 -0
  171. package/vendor/ars/academic-paper-reviewer/agents/eic_agent.md +339 -0
  172. package/vendor/ars/academic-paper-reviewer/agents/field_analyst_agent.md +221 -0
  173. package/vendor/ars/academic-paper-reviewer/agents/methodology_reviewer_agent.md +449 -0
  174. package/vendor/ars/academic-paper-reviewer/agents/perspective_reviewer_agent.md +427 -0
  175. package/vendor/ars/academic-paper-reviewer/examples/hei_paper_review_example.md +391 -0
  176. package/vendor/ars/academic-paper-reviewer/examples/interdisciplinary_review_example.md +299 -0
  177. package/vendor/ars/academic-paper-reviewer/examples/subclaim_decomposition_example.md +80 -0
  178. package/vendor/ars/academic-paper-reviewer/references/calibration_mode_protocol.md +256 -0
  179. package/vendor/ars/academic-paper-reviewer/references/changelog.md +10 -0
  180. package/vendor/ars/academic-paper-reviewer/references/editorial_decision_standards.md +236 -0
  181. package/vendor/ars/academic-paper-reviewer/references/guided_mode_protocol.md +34 -0
  182. package/vendor/ars/academic-paper-reviewer/references/integration_guide.md +15 -0
  183. package/vendor/ars/academic-paper-reviewer/references/quality_rubrics.md +84 -0
  184. package/vendor/ars/academic-paper-reviewer/references/re_review_mode_protocol.md +340 -0
  185. package/vendor/ars/academic-paper-reviewer/references/review_criteria_framework.md +98 -0
  186. package/vendor/ars/academic-paper-reviewer/references/review_panel_provenance_protocol.md +197 -0
  187. package/vendor/ars/academic-paper-reviewer/references/review_quality_thinking.md +58 -0
  188. package/vendor/ars/academic-paper-reviewer/references/reviewer_sprint_prompt_source.md +324 -0
  189. package/vendor/ars/academic-paper-reviewer/references/sprint_contract_protocol.md +296 -0
  190. package/vendor/ars/academic-paper-reviewer/references/statistical_reporting_standards.md +505 -0
  191. package/vendor/ars/academic-paper-reviewer/references/top_journals_by_field.md +206 -0
  192. package/vendor/ars/academic-paper-reviewer/templates/editorial_decision_template.md +235 -0
  193. package/vendor/ars/academic-paper-reviewer/templates/peer_review_report_template.md +305 -0
  194. package/vendor/ars/academic-paper-reviewer/templates/revision_response_template.md +248 -0
  195. package/vendor/ars/academic-pipeline/SKILL.md +736 -0
  196. package/vendor/ars/academic-pipeline/agents/claim_ref_alignment_audit_agent.md +382 -0
  197. package/vendor/ars/academic-pipeline/agents/collaboration_depth_agent.md +164 -0
  198. package/vendor/ars/academic-pipeline/agents/integrity_verification_agent.md +870 -0
  199. package/vendor/ars/academic-pipeline/agents/pipeline_orchestrator_agent.md +1379 -0
  200. package/vendor/ars/academic-pipeline/agents/state_tracker_agent.md +622 -0
  201. package/vendor/ars/academic-pipeline/examples/full_pipeline_example.md +482 -0
  202. package/vendor/ars/academic-pipeline/examples/integrity_failure_recovery.md +389 -0
  203. package/vendor/ars/academic-pipeline/examples/mid_entry_example.md +414 -0
  204. package/vendor/ars/academic-pipeline/references/adapters/.gitkeep +0 -0
  205. package/vendor/ars/academic-pipeline/references/adapters/overview.md +153 -0
  206. package/vendor/ars/academic-pipeline/references/ai_research_failure_modes.md +185 -0
  207. package/vendor/ars/academic-pipeline/references/changelog.md +14 -0
  208. package/vendor/ars/academic-pipeline/references/claim_audit_calibration_protocol.md +175 -0
  209. package/vendor/ars/academic-pipeline/references/claim_verification_protocol.md +282 -0
  210. package/vendor/ars/academic-pipeline/references/external_review_protocol.md +131 -0
  211. package/vendor/ars/academic-pipeline/references/integrity_review_protocol.md +110 -0
  212. package/vendor/ars/academic-pipeline/references/literature_corpus_consumers.md +193 -0
  213. package/vendor/ars/academic-pipeline/references/mode_advisor.md +135 -0
  214. package/vendor/ars/academic-pipeline/references/passport_as_reset_boundary.md +132 -0
  215. package/vendor/ars/academic-pipeline/references/pipeline_state_machine.md +405 -0
  216. package/vendor/ars/academic-pipeline/references/plagiarism_detection_protocol.md +239 -0
  217. package/vendor/ars/academic-pipeline/references/process_summary_protocol.md +209 -0
  218. package/vendor/ars/academic-pipeline/references/progress_dashboard_template.md +38 -0
  219. package/vendor/ars/academic-pipeline/references/reinforcement_content.md +15 -0
  220. package/vendor/ars/academic-pipeline/references/reproducibility_audit.md +55 -0
  221. package/vendor/ars/academic-pipeline/references/score_trajectory_protocol.md +78 -0
  222. package/vendor/ars/academic-pipeline/references/team_collaboration_protocol.md +261 -0
  223. package/vendor/ars/academic-pipeline/references/two_stage_review_protocol.md +27 -0
  224. package/vendor/ars/academic-pipeline/templates/pipeline_status_template.md +146 -0
  225. package/vendor/ars/agents/report_compiler_agent.md +341 -0
  226. package/vendor/ars/agents/research_architect_agent.md +298 -0
  227. package/vendor/ars/agents/synthesis_agent.md +356 -0
  228. package/vendor/ars/commands/ars-3w.md +10 -0
  229. package/vendor/ars/commands/ars-abstract.md +10 -0
  230. package/vendor/ars/commands/ars-cache-invalidate.md +20 -0
  231. package/vendor/ars/commands/ars-citation-check.md +10 -0
  232. package/vendor/ars/commands/ars-disclosure.md +10 -0
  233. package/vendor/ars/commands/ars-format-convert.md +10 -0
  234. package/vendor/ars/commands/ars-full.md +9 -0
  235. package/vendor/ars/commands/ars-lit-review.md +12 -0
  236. package/vendor/ars/commands/ars-mark-read.md +18 -0
  237. package/vendor/ars/commands/ars-outline.md +10 -0
  238. package/vendor/ars/commands/ars-plan.md +10 -0
  239. package/vendor/ars/commands/ars-rebuttal-audit.md +12 -0
  240. package/vendor/ars/commands/ars-reviewer.md +9 -0
  241. package/vendor/ars/commands/ars-revision-coach.md +9 -0
  242. package/vendor/ars/commands/ars-revision.md +10 -0
  243. package/vendor/ars/commands/ars-unmark-read.md +16 -0
  244. package/vendor/ars/deep-research/SKILL.md +600 -0
  245. package/vendor/ars/deep-research/agents/bibliography_agent.md +473 -0
  246. package/vendor/ars/deep-research/agents/devils_advocate_agent.md +192 -0
  247. package/vendor/ars/deep-research/agents/editor_in_chief_agent.md +167 -0
  248. package/vendor/ars/deep-research/agents/ethics_review_agent.md +267 -0
  249. package/vendor/ars/deep-research/agents/meta_analysis_agent.md +325 -0
  250. package/vendor/ars/deep-research/agents/monitoring_agent.md +209 -0
  251. package/vendor/ars/deep-research/agents/report_compiler_agent.md +341 -0
  252. package/vendor/ars/deep-research/agents/research_architect_agent.md +298 -0
  253. package/vendor/ars/deep-research/agents/research_question_agent.md +216 -0
  254. package/vendor/ars/deep-research/agents/risk_of_bias_agent.md +231 -0
  255. package/vendor/ars/deep-research/agents/socratic_mentor_agent.md +764 -0
  256. package/vendor/ars/deep-research/agents/source_verification_agent.md +219 -0
  257. package/vendor/ars/deep-research/agents/synthesis_agent.md +356 -0
  258. package/vendor/ars/deep-research/agents/timeline_extraction_agent.md +99 -0
  259. package/vendor/ars/deep-research/examples/exploratory_research.md +157 -0
  260. package/vendor/ars/deep-research/examples/fact_check_mode.md +173 -0
  261. package/vendor/ars/deep-research/examples/handoff_to_paper.md +318 -0
  262. package/vendor/ars/deep-research/examples/idea_diversity_coverage_gap_advisory.md +64 -0
  263. package/vendor/ars/deep-research/examples/policy_analysis.md +161 -0
  264. package/vendor/ars/deep-research/examples/review_mode.md +253 -0
  265. package/vendor/ars/deep-research/examples/socratic_guided_research.md +331 -0
  266. package/vendor/ars/deep-research/examples/systematic_review.md +133 -0
  267. package/vendor/ars/deep-research/references/apa7_style_guide.md +162 -0
  268. package/vendor/ars/deep-research/references/argumentation_reasoning_framework.md +68 -0
  269. package/vendor/ars/deep-research/references/arxiv_api_protocol.md +76 -0
  270. package/vendor/ars/deep-research/references/changelog.md +22 -0
  271. package/vendor/ars/deep-research/references/chinese_literature_api_protocol.md +317 -0
  272. package/vendor/ars/deep-research/references/cross_agent_quality_definitions.md +14 -0
  273. package/vendor/ars/deep-research/references/crossref_api_protocol.md +84 -0
  274. package/vendor/ars/deep-research/references/equator_reporting_guidelines.md +482 -0
  275. package/vendor/ars/deep-research/references/ethics_checklist.md +282 -0
  276. package/vendor/ars/deep-research/references/failure_paths.md +355 -0
  277. package/vendor/ars/deep-research/references/interdisciplinary_bridges.md +292 -0
  278. package/vendor/ars/deep-research/references/irb_decision_tree.md +315 -0
  279. package/vendor/ars/deep-research/references/literature_monitoring_strategies.md +263 -0
  280. package/vendor/ars/deep-research/references/logical_fallacies.md +192 -0
  281. package/vendor/ars/deep-research/references/methodology_patterns.md +462 -0
  282. package/vendor/ars/deep-research/references/mode_selection_guide.md +331 -0
  283. package/vendor/ars/deep-research/references/openalex_api_protocol.md +82 -0
  284. package/vendor/ars/deep-research/references/preregistration_guide.md +324 -0
  285. package/vendor/ars/deep-research/references/semantic_scholar_api_protocol.md +107 -0
  286. package/vendor/ars/deep-research/references/socratic_mode_protocol.md +99 -0
  287. package/vendor/ars/deep-research/references/socratic_questioning_framework.md +232 -0
  288. package/vendor/ars/deep-research/references/source_quality_hierarchy.md +188 -0
  289. package/vendor/ars/deep-research/references/systematic_review_protocol.md +95 -0
  290. package/vendor/ars/deep-research/references/systematic_review_toolkit.md +353 -0
  291. package/vendor/ars/deep-research/templates/evidence_assessment_template.md +127 -0
  292. package/vendor/ars/deep-research/templates/literature_matrix_template.md +85 -0
  293. package/vendor/ars/deep-research/templates/preregistration_template.md +318 -0
  294. package/vendor/ars/deep-research/templates/prisma_protocol_template.md +248 -0
  295. package/vendor/ars/deep-research/templates/prisma_report_template.md +415 -0
  296. package/vendor/ars/deep-research/templates/research_brief_template.md +93 -0
  297. package/vendor/ars/package.json +24 -0
  298. package/vendor/ars/pi/README.md +161 -0
  299. package/vendor/ars/pi/package.json +26 -0
  300. package/vendor/ars/pi/wrapper.js +193 -0
  301. package/vendor/ars/pi/wrapper.test.mjs +201 -0
  302. package/vendor/ars/pyproject.toml +2 -0
  303. package/vendor/ars/requirements-pdf-content-classifier.txt +5 -0
  304. package/vendor/ars/scripts/_block_parser.py +396 -0
  305. package/vendor/ars/scripts/_ci_pytest_manifest.toml +661 -0
  306. package/vendor/ars/scripts/_claim_audit_constants.py +268 -0
  307. package/vendor/ars/scripts/_e4_evidence.py +110 -0
  308. package/vendor/ars/scripts/_eval_threshold_gate.py +73 -0
  309. package/vendor/ars/scripts/_markdown_lint_util.py +224 -0
  310. package/vendor/ars/scripts/_next_verified_at_ms.py +176 -0
  311. package/vendor/ars/scripts/_passport_yaml.py +53 -0
  312. package/vendor/ars/scripts/_skill_lint.py +254 -0
  313. package/vendor/ars/scripts/_text_similarity.py +141 -0
  314. package/vendor/ars/scripts/adapters/README.md +89 -0
  315. package/vendor/ars/scripts/adapters/_common.py +209 -0
  316. package/vendor/ars/scripts/adapters/examples/folder_scan/expected_passport.yaml +25 -0
  317. package/vendor/ars/scripts/adapters/examples/folder_scan/expected_rejection_log.yaml +18 -0
  318. package/vendor/ars/scripts/adapters/examples/folder_scan/input_fixture/Chen2024_AIAssessment.pdf +0 -0
  319. package/vendor/ars/scripts/adapters/examples/folder_scan/input_fixture/Wang_2023_formative_feedback.pdf +0 -0
  320. package/vendor/ars/scripts/adapters/examples/folder_scan/input_fixture/paper1.pdf +0 -0
  321. package/vendor/ars/scripts/adapters/examples/folder_scan/input_fixture//344/270/255/346/226/207/346/252/224/345/220/215_2024.pdf +0 -0
  322. package/vendor/ars/scripts/adapters/examples/obsidian/expected_passport.yaml +40 -0
  323. package/vendor/ars/scripts/adapters/examples/obsidian/expected_rejection_log.yaml +13 -0
  324. package/vendor/ars/scripts/adapters/examples/obsidian/input_fixture/vault/.gitkeep +0 -0
  325. package/vendor/ars/scripts/adapters/examples/obsidian/input_fixture/vault/.obsidian/app.json +1 -0
  326. package/vendor/ars/scripts/adapters/examples/obsidian/input_fixture/vault/_templates/tmpl.md +7 -0
  327. package/vendor/ars/scripts/adapters/examples/obsidian/input_fixture/vault/chen2024ai.md +13 -0
  328. package/vendor/ars/scripts/adapters/examples/obsidian/input_fixture/vault/invalid.md +1 -0
  329. package/vendor/ars/scripts/adapters/examples/obsidian/input_fixture/vault/wang2023formative.md +10 -0
  330. package/vendor/ars/scripts/adapters/examples/zotero/expected_passport.yaml +34 -0
  331. package/vendor/ars/scripts/adapters/examples/zotero/expected_rejection_log.yaml +34 -0
  332. package/vendor/ars/scripts/adapters/examples/zotero/input_fixture/.gitkeep +0 -0
  333. package/vendor/ars/scripts/adapters/examples/zotero/input_fixture/export.json +43 -0
  334. package/vendor/ars/scripts/adapters/folder_scan.py +214 -0
  335. package/vendor/ars/scripts/adapters/obsidian.py +336 -0
  336. package/vendor/ars/scripts/adapters/tests/.gitkeep +0 -0
  337. package/vendor/ars/scripts/adapters/tests/conftest.py +77 -0
  338. package/vendor/ars/scripts/adapters/tests/test_check_corpus_consumer_protocol.py +632 -0
  339. package/vendor/ars/scripts/adapters/tests/test_check_literature_corpus_schema.py +631 -0
  340. package/vendor/ars/scripts/adapters/tests/test_common.py +365 -0
  341. package/vendor/ars/scripts/adapters/tests/test_conftest.py +96 -0
  342. package/vendor/ars/scripts/adapters/tests/test_folder_scan.py +260 -0
  343. package/vendor/ars/scripts/adapters/tests/test_literature_corpus_entry_schema.py +745 -0
  344. package/vendor/ars/scripts/adapters/tests/test_obsidian.py +357 -0
  345. package/vendor/ars/scripts/adapters/tests/test_rejection_log_schema.py +271 -0
  346. package/vendor/ars/scripts/adapters/tests/test_sync_adapter_docs.py +88 -0
  347. package/vendor/ars/scripts/adapters/tests/test_zotero.py +454 -0
  348. package/vendor/ars/scripts/adapters/zotero.py +318 -0
  349. package/vendor/ars/scripts/adjudication_activity.py +1592 -0
  350. package/vendor/ars/scripts/announce-ars-loaded.sh +144 -0
  351. package/vendor/ars/scripts/ars_anchorize_draft.py +170 -0
  352. package/vendor/ars/scripts/ars_apply_revision_patch.py +912 -0
  353. package/vendor/ars/scripts/ars_cache_invalidate.py +40 -0
  354. package/vendor/ars/scripts/ars_mark_read.py +521 -0
  355. package/vendor/ars/scripts/ars_phase_scope_manifest.json +33 -0
  356. package/vendor/ars/scripts/ars_update_check.sh +215 -0
  357. package/vendor/ars/scripts/ars_write_scope_guard.py +506 -0
  358. package/vendor/ars/scripts/arxiv_client.py +222 -0
  359. package/vendor/ars/scripts/audit_snapshot.py +572 -0
  360. package/vendor/ars/scripts/bibliographic_integrity_signals.py +800 -0
  361. package/vendor/ars/scripts/bootstrap_timeline_yaml.py +146 -0
  362. package/vendor/ars/scripts/build_claim_standing_candidate_ledger.py +1238 -0
  363. package/vendor/ars/scripts/build_claim_standing_query_plan.py +643 -0
  364. package/vendor/ars/scripts/build_content_coverage_advisory.py +1205 -0
  365. package/vendor/ars/scripts/build_cross_document_consistency_advisory.py +2332 -0
  366. package/vendor/ars/scripts/build_review_pathway_rule_trace.py +830 -0
  367. package/vendor/ars/scripts/build_submission_packet_manifest.py +2310 -0
  368. package/vendor/ars/scripts/check_215_field_norm.py +173 -0
  369. package/vendor/ars/scripts/check_216_surface_form.py +250 -0
  370. package/vendor/ars/scripts/check_268_nested_commitment_ledger.py +180 -0
  371. package/vendor/ars/scripts/check_390_revision_patch_discipline.py +296 -0
  372. package/vendor/ars/scripts/check_392_citation_verification_intake.py +126 -0
  373. package/vendor/ars/scripts/check_394_submission_policy.py +178 -0
  374. package/vendor/ars/scripts/check_439_format_profile.py +307 -0
  375. package/vendor/ars/scripts/check_619_disclosure_closeout.py +237 -0
  376. package/vendor/ars/scripts/check_630_codex_subscription_transport.py +456 -0
  377. package/vendor/ars/scripts/check_669_review_pathway_rule_trace.py +662 -0
  378. package/vendor/ars/scripts/check_670_revision_roadmap_integration.py +518 -0
  379. package/vendor/ars/scripts/check_673_adjudication_activity.py +684 -0
  380. package/vendor/ars/scripts/check_684_review_criteria_binding.py +557 -0
  381. package/vendor/ars/scripts/check_agents_mirror_sync.py +115 -0
  382. package/vendor/ars/scripts/check_audit_artifact_consistency.py +2313 -0
  383. package/vendor/ars/scripts/check_benchmark_report.py +79 -0
  384. package/vendor/ars/scripts/check_bibliographic_integrity_signals.py +831 -0
  385. package/vendor/ars/scripts/check_calibration_tiers.py +235 -0
  386. package/vendor/ars/scripts/check_changelog_covers_merges.py +289 -0
  387. package/vendor/ars/scripts/check_ci_pytest_manifest.py +204 -0
  388. package/vendor/ars/scripts/check_claim_audit_consistency.py +1664 -0
  389. package/vendor/ars/scripts/check_claim_standing_candidate_ledger_integration.py +500 -0
  390. package/vendor/ars/scripts/check_claim_standing_freshness.py +253 -0
  391. package/vendor/ars/scripts/check_claim_standing_transmissions.py +449 -0
  392. package/vendor/ars/scripts/check_collaboration_depth_rubric.py +180 -0
  393. package/vendor/ars/scripts/check_command_frontmatter_name.py +116 -0
  394. package/vendor/ars/scripts/check_committee_correspondence.py +333 -0
  395. package/vendor/ars/scripts/check_compliance_report.py +108 -0
  396. package/vendor/ars/scripts/check_content_coverage_advisory_integration.py +796 -0
  397. package/vendor/ars/scripts/check_control_availability.py +172 -0
  398. package/vendor/ars/scripts/check_corpus_consumer_protocol.py +404 -0
  399. package/vendor/ars/scripts/check_cross_document_consistency_advisory_integration.py +1191 -0
  400. package/vendor/ars/scripts/check_cross_model_handoff_contract.py +234 -0
  401. package/vendor/ars/scripts/check_cross_model_verification_sync.py +261 -0
  402. package/vendor/ars/scripts/check_data_access_level.py +131 -0
  403. package/vendor/ars/scripts/check_data_flows.py +252 -0
  404. package/vendor/ars/scripts/check_decision_contract.py +464 -0
  405. package/vendor/ars/scripts/check_degradation_registry.py +326 -0
  406. package/vendor/ars/scripts/check_distribution_surface_claims.py +226 -0
  407. package/vendor/ars/scripts/check_domain_evidence_profile.py +538 -0
  408. package/vendor/ars/scripts/check_e4_promotion.py +195 -0
  409. package/vendor/ars/scripts/check_evals_gold_set.py +279 -0
  410. package/vendor/ars/scripts/check_evidence_row_integration.py +396 -0
  411. package/vendor/ars/scripts/check_experiment_provenance.py +117 -0
  412. package/vendor/ars/scripts/check_field_norm_severity.py +144 -0
  413. package/vendor/ars/scripts/check_firm_rules_sync.py +375 -0
  414. package/vendor/ars/scripts/check_heldout_measurement_report.py +1179 -0
  415. package/vendor/ars/scripts/check_human_subjects_output_contract.py +139 -0
  416. package/vendor/ars/scripts/check_human_subjects_reference_migration.py +844 -0
  417. package/vendor/ars/scripts/check_indirect_prompt_injection_no_call.py +328 -0
  418. package/vendor/ars/scripts/check_instruction_data_boundary.py +236 -0
  419. package/vendor/ars/scripts/check_judge_prompt_version.py +125 -0
  420. package/vendor/ars/scripts/check_literature_corpus_schema.py +402 -0
  421. package/vendor/ars/scripts/check_model_tiering.py +223 -0
  422. package/vendor/ars/scripts/check_panel_synthesis.py +1331 -0
  423. package/vendor/ars/scripts/check_passport_reset_contract.py +214 -0
  424. package/vendor/ars/scripts/check_pattern_eval_manifest.py +422 -0
  425. package/vendor/ars/scripts/check_persuasion_invariance_fixtures.py +637 -0
  426. package/vendor/ars/scripts/check_phase_conformance.py +2180 -0
  427. package/vendor/ars/scripts/check_pipeline_boundary_semantics.py +600 -0
  428. package/vendor/ars/scripts/check_pipeline_integrity.py +340 -0
  429. package/vendor/ars/scripts/check_policy_anchor_protocol.py +159 -0
  430. package/vendor/ars/scripts/check_policy_anchor_table.py +286 -0
  431. package/vendor/ars/scripts/check_preprint_venues_consistency.py +123 -0
  432. package/vendor/ars/scripts/check_prisma_trAIce_freshness.py +84 -0
  433. package/vendor/ars/scripts/check_promotion_bakeoff_preregistration.py +1303 -0
  434. package/vendor/ars/scripts/check_ranking_lift.py +323 -0
  435. package/vendor/ars/scripts/check_re_review_synthesis.py +2719 -0
  436. package/vendor/ars/scripts/check_receipt_enum_sync.py +203 -0
  437. package/vendor/ars/scripts/check_repro_lock.py +85 -0
  438. package/vendor/ars/scripts/check_review_pathway_output.py +276 -0
  439. package/vendor/ars/scripts/check_reviewer_data_fences.py +224 -0
  440. package/vendor/ars/scripts/check_reviewer_finding_contract.py +783 -0
  441. package/vendor/ars/scripts/check_reviewer_role_label.py +447 -0
  442. package/vendor/ars/scripts/check_reviewer_scoring_honesty.py +292 -0
  443. package/vendor/ars/scripts/check_reviewer_sprint_prompt_sync.py +409 -0
  444. package/vendor/ars/scripts/check_revision_claim_drift_suite_v2.py +1622 -0
  445. package/vendor/ars/scripts/check_revision_token_conservation.py +263 -0
  446. package/vendor/ars/scripts/check_risk_register.py +280 -0
  447. package/vendor/ars/scripts/check_role_scoped_contract.py +702 -0
  448. package/vendor/ars/scripts/check_rq_framing_patterns.py +184 -0
  449. package/vendor/ars/scripts/check_rubric_weight_consistency.py +32 -0
  450. package/vendor/ars/scripts/check_seeded_defect_fixtures.py +425 -0
  451. package/vendor/ars/scripts/check_setup_cross_model_parity.py +139 -0
  452. package/vendor/ars/scripts/check_spec_consistency.py +1249 -0
  453. package/vendor/ars/scripts/check_sprint_contract.py +371 -0
  454. package/vendor/ars/scripts/check_stage_capability_matrix.py +784 -0
  455. package/vendor/ars/scripts/check_submission_packet_manifest_integration.py +358 -0
  456. package/vendor/ars/scripts/check_surface_form_parity.py +445 -0
  457. package/vendor/ars/scripts/check_task_type.py +22 -0
  458. package/vendor/ars/scripts/check_tools_allowlist.py +538 -0
  459. package/vendor/ars/scripts/check_tortured_phrase_screening_integration.py +1974 -0
  460. package/vendor/ars/scripts/check_v3_10_134_write_scope.py +286 -0
  461. package/vendor/ars/scripts/check_v3_10_policy.py +656 -0
  462. package/vendor/ars/scripts/check_v3_6_6_ab_manifest.py +364 -0
  463. package/vendor/ars/scripts/check_v3_6_7_pattern_protection.py +1366 -0
  464. package/vendor/ars/scripts/check_v3_6_8_audit_scope_block.py +464 -0
  465. package/vendor/ars/scripts/check_v3_6_8_cite_provenance_pipeline.py +231 -0
  466. package/vendor/ars/scripts/check_v3_6_8_frontmatter_trust_schema.py +248 -0
  467. package/vendor/ars/scripts/check_v3_6_8_mark_read_commands.py +79 -0
  468. package/vendor/ars/scripts/check_v3_6_8_pattern_protection.py +941 -0
  469. package/vendor/ars/scripts/check_v3_7_3_three_layer_citation.py +318 -0
  470. package/vendor/ars/scripts/check_v3_8_annotation_literal_sync.py +228 -0
  471. package/vendor/ars/scripts/check_v3_9_0_triangulation.py +366 -0
  472. package/vendor/ars/scripts/check_v3_9_2_phase_boundary.py +270 -0
  473. package/vendor/ars/scripts/check_v3_9_4_temporal_verification.py +139 -0
  474. package/vendor/ars/scripts/check_venue_disclosure_policies.py +63 -0
  475. package/vendor/ars/scripts/check_version_consistency.py +826 -0
  476. package/vendor/ars/scripts/check_workflow_classification.py +223 -0
  477. package/vendor/ars/scripts/chinese_literature_client.py +1938 -0
  478. package/vendor/ars/scripts/citation_verification_summary.py +85 -0
  479. package/vendor/ars/scripts/claim_audit_calibration.py +517 -0
  480. package/vendor/ars/scripts/claim_audit_finalizer.py +456 -0
  481. package/vendor/ars/scripts/claim_audit_pipeline.py +1594 -0
  482. package/vendor/ars/scripts/claim_registry_coverage.py +493 -0
  483. package/vendor/ars/scripts/claim_standing_discovery.py +784 -0
  484. package/vendor/ars/scripts/claim_standing_stance_runner.py +758 -0
  485. package/vendor/ars/scripts/claim_standing_stance_scorer.py +239 -0
  486. package/vendor/ars/scripts/claim_strength_drift_disposition.py +666 -0
  487. package/vendor/ars/scripts/contamination_signals.py +689 -0
  488. package/vendor/ars/scripts/corpus_consumer_manifest.json +19 -0
  489. package/vendor/ars/scripts/cross_model_codex_transport.py +1374 -0
  490. package/vendor/ars/scripts/cross_model_codex_verify.sh +6 -0
  491. package/vendor/ars/scripts/cross_model_handoff.py +359 -0
  492. package/vendor/ars/scripts/cross_model_smoke_test.sh +183 -0
  493. package/vendor/ars/scripts/cross_model_smoke_test_codex.sh +35 -0
  494. package/vendor/ars/scripts/cross_model_verification/gemini_is_grounded.jq +45 -0
  495. package/vendor/ars/scripts/cross_model_verification/gemini_sources.jq +45 -0
  496. package/vendor/ars/scripts/cross_model_verification/normalize_compat_verdict.py +57 -0
  497. package/vendor/ars/scripts/cross_model_verification/openai_has_completed_web_search.jq +15 -0
  498. package/vendor/ars/scripts/cross_model_verification/openai_sources.jq +17 -0
  499. package/vendor/ars/scripts/cross_model_verification/openai_text.jq +11 -0
  500. package/vendor/ars/scripts/crossref_client.py +225 -0
  501. package/vendor/ars/scripts/dispatch_e4_panel.py +2731 -0
  502. package/vendor/ars/scripts/evidence_rows.py +2043 -0
  503. package/vendor/ars/scripts/fixtures/adjudication_activity/author_stage3.json +32 -0
  504. package/vendor/ars/scripts/fixtures/adjudication_activity/author_stage3_input.json +27 -0
  505. package/vendor/ars/scripts/fixtures/adjudication_activity/author_stage3_prime.json +32 -0
  506. package/vendor/ars/scripts/fixtures/adjudication_activity/author_stage3_prime_input.json +27 -0
  507. package/vendor/ars/scripts/fixtures/adjudication_activity/compliance_override.json +50 -0
  508. package/vendor/ars/scripts/fixtures/adjudication_activity/compliance_override_action.json +14 -0
  509. package/vendor/ars/scripts/fixtures/adjudication_activity/compliance_pass.json +44 -0
  510. package/vendor/ars/scripts/fixtures/adjudication_activity/explicit_user_request_log.json +26 -0
  511. package/vendor/ars/scripts/fixtures/adjudication_activity/mandatory_checkpoint_log.json +116 -0
  512. package/vendor/ars/scripts/fixtures/audit_artifact_consistency/README.md +56 -0
  513. package/vendor/ars/scripts/fixtures/audit_artifact_consistency/negative/a1_pass_with_p1/2026-04-30T15-22-04Z-d8f3.audit_artifact_entry.json +24 -0
  514. package/vendor/ars/scripts/fixtures/audit_artifact_consistency/negative/a1_pass_with_p1/2026-04-30T15-22-04Z-d8f3.jsonl +4 -0
  515. package/vendor/ars/scripts/fixtures/audit_artifact_consistency/negative/a1_pass_with_p1/2026-04-30T15-22-04Z-d8f3.meta.json +43 -0
  516. package/vendor/ars/scripts/fixtures/audit_artifact_consistency/negative/a1_pass_with_p1/2026-04-30T15-22-04Z-d8f3.verdict.yaml +19 -0
  517. package/vendor/ars/scripts/fixtures/audit_artifact_consistency/negative/a7_orphan_completion/2026-04-30T15-22-04Z-d8f3.jsonl +3 -0
  518. package/vendor/ars/scripts/fixtures/audit_artifact_consistency/positive/persisted_minor/2026-04-30T15-22-04Z-d8f3.audit_artifact_entry.json +26 -0
  519. package/vendor/ars/scripts/fixtures/audit_artifact_consistency/positive/persisted_minor/2026-04-30T15-22-04Z-d8f3.jsonl +4 -0
  520. package/vendor/ars/scripts/fixtures/audit_artifact_consistency/positive/persisted_minor/2026-04-30T15-22-04Z-d8f3.meta.json +43 -0
  521. package/vendor/ars/scripts/fixtures/audit_artifact_consistency/positive/persisted_minor/2026-04-30T15-22-04Z-d8f3.verdict.yaml +19 -0
  522. package/vendor/ars/scripts/fixtures/audit_artifact_consistency/positive/proposal_pass/2026-04-30T15-22-04Z-d8f3.audit_artifact_entry.json +24 -0
  523. package/vendor/ars/scripts/fixtures/audit_artifact_consistency/positive/proposal_pass/2026-04-30T15-22-04Z-d8f3.jsonl +4 -0
  524. package/vendor/ars/scripts/fixtures/audit_artifact_consistency/positive/proposal_pass/2026-04-30T15-22-04Z-d8f3.meta.json +43 -0
  525. package/vendor/ars/scripts/fixtures/audit_artifact_consistency/positive/proposal_pass/2026-04-30T15-22-04Z-d8f3.verdict.yaml +12 -0
  526. package/vendor/ars/scripts/fixtures/bibliographic_integrity_signals/retraction.json +46 -0
  527. package/vendor/ars/scripts/fixtures/bibliographic_integrity_signals/retraction_check_attestation.json +44 -0
  528. package/vendor/ars/scripts/fixtures/bibliographic_integrity_signals/tortured_phrase.json +44 -0
  529. package/vendor/ars/scripts/fixtures/bibliographic_integrity_signals/tortured_phrase_v1_2_abstract_missing.json +107 -0
  530. package/vendor/ars/scripts/fixtures/bibliographic_integrity_signals/tortured_phrase_v1_2_detected.json +124 -0
  531. package/vendor/ars/scripts/fixtures/check_evals_gold_set/clean/expected_outcomes.json +77 -0
  532. package/vendor/ars/scripts/fixtures/check_evals_gold_set/clean/manifest.yaml +37 -0
  533. package/vendor/ars/scripts/fixtures/check_evals_gold_set/clean/tuples/001-valid-doi-test.json +20 -0
  534. package/vendor/ars/scripts/fixtures/check_evals_gold_set/clean/tuples/002-valid-arxiv-test.json +19 -0
  535. package/vendor/ars/scripts/fixtures/check_evals_gold_set/clean/tuples/003-fabricated-test.json +20 -0
  536. package/vendor/ars/scripts/fixtures/claim_audit_calibration/gold_set.json +344 -0
  537. package/vendor/ars/scripts/fixtures/claim_standing_candidate_ledger/query_plan.json +108 -0
  538. package/vendor/ars/scripts/fixtures/claim_standing_candidate_ledger/retrieval_input.json +179 -0
  539. package/vendor/ars/scripts/fixtures/committee_correspondence/16fd83f6aec7/concern_tracker.json +129 -0
  540. package/vendor/ars/scripts/fixtures/committee_correspondence/16fd83f6aec7/response_skeleton.md +19 -0
  541. package/vendor/ars/scripts/fixtures/committee_correspondence/16fd83f6aec7/source_letter.txt +9 -0
  542. package/vendor/ars/scripts/fixtures/content_coverage_advisory/base_draft.json +48 -0
  543. package/vendor/ars/scripts/fixtures/content_coverage_advisory/base_inventory.json +38 -0
  544. package/vendor/ars/scripts/fixtures/content_coverage_advisory/packet/consent.txt +1 -0
  545. package/vendor/ars/scripts/fixtures/content_coverage_advisory/session_sources.json +3 -0
  546. package/vendor/ars/scripts/fixtures/cross_document_consistency/README.md +6 -0
  547. package/vendor/ars/scripts/fixtures/cross_document_consistency/accepted_draft.md +35 -0
  548. package/vendor/ars/scripts/fixtures/cross_document_consistency/cases.json +75 -0
  549. package/vendor/ars/scripts/fixtures/cross_document_consistency/preregistration.md +5 -0
  550. package/vendor/ars/scripts/fixtures/cross_model_codex_transport/forbidden_event.jsonl +4 -0
  551. package/vendor/ars/scripts/fixtures/cross_model_codex_transport/grounded_verified.jsonl +3 -0
  552. package/vendor/ars/scripts/fixtures/cross_model_codex_transport/malformed.jsonl +3 -0
  553. package/vendor/ars/scripts/fixtures/cross_model_codex_transport/missing_search.jsonl +2 -0
  554. package/vendor/ars/scripts/fixtures/cross_model_codex_transport/multiple_finals.jsonl +4 -0
  555. package/vendor/ars/scripts/fixtures/cross_model_codex_transport/not_found.jsonl +3 -0
  556. package/vendor/ars/scripts/fixtures/cross_model_codex_transport/unbound_source.jsonl +3 -0
  557. package/vendor/ars/scripts/fixtures/cross_model_codex_transport/wrong_search_shape.jsonl +3 -0
  558. package/vendor/ars/scripts/fixtures/evidence_rows/phase_e_inputs.json +114 -0
  559. package/vendor/ars/scripts/fixtures/evidence_rows/session_sources.json +5 -0
  560. package/vendor/ars/scripts/fixtures/human_subjects_authority/cross-border-us-tw-gdpr.json +71 -0
  561. package/vendor/ars/scripts/fixtures/human_subjects_authority/gdpr-member-state-unresolved.json +62 -0
  562. package/vendor/ars/scripts/fixtures/human_subjects_authority/missing-data-axis.json +45 -0
  563. package/vendor/ars/scripts/fixtures/human_subjects_authority/no-profile.json +33 -0
  564. package/vendor/ars/scripts/fixtures/human_subjects_authority/tw-gdpr-two-axis.json +74 -0
  565. package/vendor/ars/scripts/fixtures/human_subjects_authority/us-gdpr-two-axis.json +74 -0
  566. package/vendor/ars/scripts/fixtures/review_pathway_rule_trace/lint-near-misses.json +72 -0
  567. package/vendor/ars/scripts/fixtures/review_pathway_rule_trace/no-profile-request.json +18 -0
  568. package/vendor/ars/scripts/fixtures/review_pathway_rule_trace/tw-candidates-request.json +63 -0
  569. package/vendor/ars/scripts/fixtures/review_pathway_rule_trace/us-candidates-request.json +77 -0
  570. package/vendor/ars/scripts/fixtures/review_target_context/exact-declaration.json +24 -0
  571. package/vendor/ars/scripts/fixtures/review_target_context/field-general-declaration.json +24 -0
  572. package/vendor/ars/scripts/fixtures/review_target_context/msr-2027-technical-full-declaration.json +24 -0
  573. package/vendor/ars/scripts/fixtures/review_target_context/synthetic-registry.json +92 -0
  574. package/vendor/ars/scripts/fixtures/revision_claim_drift_v2/README.md +21 -0
  575. package/vendor/ars/scripts/fixtures/revision_claim_drift_v2/subject_context_attested_only.json +55 -0
  576. package/vendor/ars/scripts/fixtures/revision_claim_drift_v2/subject_context_machine_supported.json +49 -0
  577. package/vendor/ars/scripts/fixtures/revision_claim_drift_v2/subject_context_not_isolated.json +56 -0
  578. package/vendor/ars/scripts/fixtures/revision_claim_drift_v2/subject_context_unknown.json +49 -0
  579. package/vendor/ars/scripts/fixtures/submission_package/clean/paper.md +16 -0
  580. package/vendor/ars/scripts/fixtures/submission_package/clean/references.bib +13 -0
  581. package/vendor/ars/scripts/fixtures/submission_package/fallback_authoryear/paper.md +11 -0
  582. package/vendor/ars/scripts/fixtures/submission_package/fallback_authoryear/references.bib +13 -0
  583. package/vendor/ars/scripts/fixtures/submission_package/fallback_latex/paper.tex +9 -0
  584. package/vendor/ars/scripts/fixtures/submission_package/fallback_latex/references.bib +13 -0
  585. package/vendor/ars/scripts/fixtures/submission_package/marker_no_join/paper.md +7 -0
  586. package/vendor/ars/scripts/fixtures/submission_package/orphan_intext/paper.md +8 -0
  587. package/vendor/ars/scripts/fixtures/submission_package/orphan_intext/references.bib +6 -0
  588. package/vendor/ars/scripts/fixtures/submission_package/passports/corpus_only.yaml +9 -0
  589. package/vendor/ars/scripts/fixtures/submission_package/passports/summary_join.yaml +16 -0
  590. package/vendor/ars/scripts/fixtures/submission_package/profiles/full.yaml +15 -0
  591. package/vendor/ars/scripts/fixtures/submission_package/profiles/tight.yaml +15 -0
  592. package/vendor/ars/scripts/fixtures/submission_package/summary_join/paper.md +7 -0
  593. package/vendor/ars/scripts/fixtures/submission_package/uncited_reference/paper.md +9 -0
  594. package/vendor/ars/scripts/fixtures/submission_package/uncited_reference/references.bib +13 -0
  595. package/vendor/ars/scripts/fixtures/submission_package/venue_clean/paper.md +26 -0
  596. package/vendor/ars/scripts/fixtures/submission_package/venue_clean/references.bib +13 -0
  597. package/vendor/ars/scripts/fixtures/submission_package/venue_violations/paper.md +20 -0
  598. package/vendor/ars/scripts/fixtures/submission_package/venue_violations/references.bib +13 -0
  599. package/vendor/ars/scripts/fixtures/submission_packet_manifest/base_inventory.json +101 -0
  600. package/vendor/ars/scripts/fixtures/submission_packet_manifest/packet/consent-materials.txt +3 -0
  601. package/vendor/ars/scripts/fixtures/submission_packet_manifest/packet/training-certificate.txt +2 -0
  602. package/vendor/ars/scripts/fixtures/submission_packet_manifest/packet/tw-consent-materials.txt +3 -0
  603. package/vendor/ars/scripts/fixtures/tortured_phrase_screening/corpus_input.yaml +30 -0
  604. package/vendor/ars/scripts/fixtures/tortured_phrase_screening/own_draft.md +36 -0
  605. package/vendor/ars/scripts/fixtures/tortured_phrase_screening/own_draft.tex +21 -0
  606. package/vendor/ars/scripts/fixtures/tortured_phrase_screening/seed_expectations.json +218 -0
  607. package/vendor/ars/scripts/fixtures/tortured_phrase_screening/snapshot.json +164 -0
  608. package/vendor/ars/scripts/fixtures/tortured_phrase_screening/snapshot_manifest.json +29 -0
  609. package/vendor/ars/scripts/fixtures/transport_bodies/README.md +55 -0
  610. package/vendor/ars/scripts/fixtures/transport_bodies/arxiv/empty_feed.xml +10 -0
  611. package/vendor/ars/scripts/fixtures/transport_bodies/arxiv/error_5xx.html +7 -0
  612. package/vendor/ars/scripts/fixtures/transport_bodies/arxiv/id_hit.xml +26 -0
  613. package/vendor/ars/scripts/fixtures/transport_bodies/chinese_literature/README.md +69 -0
  614. package/vendor/ars/scripts/fixtures/transport_bodies/chinese_literature/cnki_landing_page.html +13 -0
  615. package/vendor/ars/scripts/fixtures/transport_bodies/chinese_literature/error_5xx.html +2 -0
  616. package/vendor/ars/scripts/fixtures/transport_bodies/chinese_literature/esearch_coordinate_ambiguous.json +16 -0
  617. package/vendor/ars/scripts/fixtures/transport_bodies/chinese_literature/esearch_coordinate_hit.json +16 -0
  618. package/vendor/ars/scripts/fixtures/transport_bodies/chinese_literature/esearch_coordinate_zero.json +14 -0
  619. package/vendor/ars/scripts/fixtures/transport_bodies/chinese_literature/esearch_coverage_hit.json +15 -0
  620. package/vendor/ars/scripts/fixtures/transport_bodies/chinese_literature/esearch_coverage_zero.json +13 -0
  621. package/vendor/ars/scripts/fixtures/transport_bodies/chinese_literature/esummary_hit.json +43 -0
  622. package/vendor/ars/scripts/fixtures/transport_bodies/chinese_literature/esummary_issn_mismatch.json +31 -0
  623. package/vendor/ars/scripts/fixtures/transport_bodies/chinese_literature/esummary_no_doi.json +31 -0
  624. package/vendor/ars/scripts/fixtures/transport_bodies/chinese_literature/esummary_unknown_ra.json +34 -0
  625. package/vendor/ars/scripts/fixtures/transport_bodies/chinese_literature/esummary_year_mismatch.json +31 -0
  626. package/vendor/ars/scripts/fixtures/transport_bodies/chinese_literature/handle_absent.json +4 -0
  627. package/vendor/ars/scripts/fixtures/transport_bodies/chinese_literature/handle_exists.json +16 -0
  628. package/vendor/ars/scripts/fixtures/transport_bodies/chinese_literature/handle_internal_error.json +4 -0
  629. package/vendor/ars/scripts/fixtures/transport_bodies/chinese_literature/istic_csl_hit.json +25 -0
  630. package/vendor/ars/scripts/fixtures/transport_bodies/chinese_literature/istic_csl_other_title.json +18 -0
  631. package/vendor/ars/scripts/fixtures/transport_bodies/chinese_literature/ra_cnki.json +6 -0
  632. package/vendor/ars/scripts/fixtures/transport_bodies/chinese_literature/ra_crossref.json +6 -0
  633. package/vendor/ars/scripts/fixtures/transport_bodies/chinese_literature/ra_istic.json +6 -0
  634. package/vendor/ars/scripts/fixtures/transport_bodies/chinese_literature/ra_unknown_prefix.json +6 -0
  635. package/vendor/ars/scripts/fixtures/transport_bodies/crossref/doi_hit.json +24 -0
  636. package/vendor/ars/scripts/fixtures/transport_bodies/crossref/error_5xx.html +7 -0
  637. package/vendor/ars/scripts/fixtures/transport_bodies/crossref/title_search_miss.json +15 -0
  638. package/vendor/ars/scripts/fixtures/transport_bodies/openalex/doi_hit.json +29 -0
  639. package/vendor/ars/scripts/fixtures/transport_bodies/openalex/error_5xx.json +4 -0
  640. package/vendor/ars/scripts/fixtures/transport_bodies/openalex/title_search_miss.json +11 -0
  641. package/vendor/ars/scripts/fixtures/transport_bodies/semantic_scholar/doi_hit.json +14 -0
  642. package/vendor/ars/scripts/fixtures/transport_bodies/semantic_scholar/error_5xx.json +3 -0
  643. package/vendor/ars/scripts/fixtures/transport_bodies/semantic_scholar/title_search_miss.json +5 -0
  644. package/vendor/ars/scripts/human_read_attestation_resolver.py +467 -0
  645. package/vendor/ars/scripts/ideation_diversity_assignment_gate.py +430 -0
  646. package/vendor/ars/scripts/inquiry_branch_ledger.py +2540 -0
  647. package/vendor/ars/scripts/legacy/ars_apply_revision_patch_v1_0.py +715 -0
  648. package/vendor/ars/scripts/legacy/check_re_review_synthesis_v1_0.py +2215 -0
  649. package/vendor/ars/scripts/migrate_literature_corpus_to_v3_10.py +223 -0
  650. package/vendor/ars/scripts/migrate_literature_corpus_to_v3_7_3.py +277 -0
  651. package/vendor/ars/scripts/migrate_literature_corpus_to_v3_9_0.py +304 -0
  652. package/vendor/ars/scripts/model_tiering_manifest.json +46 -0
  653. package/vendor/ars/scripts/openalex_client.py +232 -0
  654. package/vendor/ars/scripts/parse_audit_verdict.py +802 -0
  655. package/vendor/ars/scripts/pdf_content_classifier_worker.py +176 -0
  656. package/vendor/ars/scripts/pdf_read_preflight.py +1455 -0
  657. package/vendor/ars/scripts/policy_anchor_disclosure_referee.py +354 -0
  658. package/vendor/ars/scripts/recompute_receipts.py +1414 -0
  659. package/vendor/ars/scripts/render_claim_standing_view.py +374 -0
  660. package/vendor/ars/scripts/render_eval_comment.py +130 -0
  661. package/vendor/ars/scripts/render_harness_retirement_issue.py +167 -0
  662. package/vendor/ars/scripts/repro_lock_validation.py +90 -0
  663. package/vendor/ars/scripts/research_workflow_profile.py +1079 -0
  664. package/vendor/ars/scripts/resolve_human_subjects_authority.py +1158 -0
  665. package/vendor/ars/scripts/resolve_review_target_context.py +683 -0
  666. package/vendor/ars/scripts/resume_e4_record.py +509 -0
  667. package/vendor/ars/scripts/retraction_status.py +484 -0
  668. package/vendor/ars/scripts/review_criteria_binding.py +889 -0
  669. package/vendor/ars/scripts/review_panel_provenance.py +744 -0
  670. package/vendor/ars/scripts/revision_roadmap.py +1967 -0
  671. package/vendor/ars/scripts/run_ci_pytest_manifest.py +116 -0
  672. package/vendor/ars/scripts/run_codex_audit.sh +1191 -0
  673. package/vendor/ars/scripts/run_evals.py +513 -0
  674. package/vendor/ars/scripts/run_ideation_diversity_no_call.py +3505 -0
  675. package/vendor/ars/scripts/run_indirect_prompt_injection_no_call.py +3330 -0
  676. package/vendor/ars/scripts/run_indirect_prompt_injection_probe.py +399 -0
  677. package/vendor/ars/scripts/run_review_criteria_constructive_value.py +1895 -0
  678. package/vendor/ars/scripts/run_role_topology_utility_dry_run.py +606 -0
  679. package/vendor/ars/scripts/score_review_criteria_constructive_value.py +617 -0
  680. package/vendor/ars/scripts/semantic_scholar_client.py +291 -0
  681. package/vendor/ars/scripts/slr_lineage.py +59 -0
  682. package/vendor/ars/scripts/sync_adapter_docs.py +118 -0
  683. package/vendor/ars/scripts/temporal_integrity_audit.py +840 -0
  684. package/vendor/ars/scripts/test_431_exact_or_bust.py +253 -0
  685. package/vendor/ars/scripts/test__eval_threshold_gate.py +125 -0
  686. package/vendor/ars/scripts/test__markdown_lint_util.py +129 -0
  687. package/vendor/ars/scripts/test__next_verified_at_ms.py +256 -0
  688. package/vendor/ars/scripts/test_adjacent_framing_probe_lint.py +171 -0
  689. package/vendor/ars/scripts/test_adjudication_activity.py +1515 -0
  690. package/vendor/ars/scripts/test_ars_anchorize_draft.py +178 -0
  691. package/vendor/ars/scripts/test_ars_apply_revision_patch.py +1335 -0
  692. package/vendor/ars/scripts/test_ars_cache_invalidate.py +51 -0
  693. package/vendor/ars/scripts/test_ars_mark_read.py +910 -0
  694. package/vendor/ars/scripts/test_ars_update_check.py +816 -0
  695. package/vendor/ars/scripts/test_ars_write_scope_guard.py +790 -0
  696. package/vendor/ars/scripts/test_arxiv_client.py +374 -0
  697. package/vendor/ars/scripts/test_audit_schemas.py +560 -0
  698. package/vendor/ars/scripts/test_audit_snapshot_render_section_0.py +105 -0
  699. package/vendor/ars/scripts/test_block_parser.py +259 -0
  700. package/vendor/ars/scripts/test_bootstrap_timeline_yaml.py +148 -0
  701. package/vendor/ars/scripts/test_build_claim_standing_candidate_ledger.py +1203 -0
  702. package/vendor/ars/scripts/test_build_claim_standing_query_plan.py +791 -0
  703. package/vendor/ars/scripts/test_build_submission_packet_manifest.py +2644 -0
  704. package/vendor/ars/scripts/test_check_215_field_norm.py +238 -0
  705. package/vendor/ars/scripts/test_check_216_surface_form.py +341 -0
  706. package/vendor/ars/scripts/test_check_268_nested_commitment_ledger.py +194 -0
  707. package/vendor/ars/scripts/test_check_390_revision_patch_discipline.py +279 -0
  708. package/vendor/ars/scripts/test_check_392_citation_verification_intake.py +144 -0
  709. package/vendor/ars/scripts/test_check_394_submission_policy.py +200 -0
  710. package/vendor/ars/scripts/test_check_439_format_profile.py +252 -0
  711. package/vendor/ars/scripts/test_check_619_disclosure_closeout.py +158 -0
  712. package/vendor/ars/scripts/test_check_630_codex_subscription_transport.py +245 -0
  713. package/vendor/ars/scripts/test_check_669_review_pathway_rule_trace.py +304 -0
  714. package/vendor/ars/scripts/test_check_670_revision_roadmap_integration.py +260 -0
  715. package/vendor/ars/scripts/test_check_673_adjudication_activity.py +367 -0
  716. package/vendor/ars/scripts/test_check_684_review_criteria_binding.py +274 -0
  717. package/vendor/ars/scripts/test_check_agents_mirror_sync.py +137 -0
  718. package/vendor/ars/scripts/test_check_audit_artifact_consistency.py +2133 -0
  719. package/vendor/ars/scripts/test_check_benchmark_report.py +117 -0
  720. package/vendor/ars/scripts/test_check_bibliographic_integrity_signals.py +609 -0
  721. package/vendor/ars/scripts/test_check_calibration_tiers.py +376 -0
  722. package/vendor/ars/scripts/test_check_changelog_covers_merges.py +509 -0
  723. package/vendor/ars/scripts/test_check_ci_pytest_manifest.py +425 -0
  724. package/vendor/ars/scripts/test_check_claim_standing_candidate_ledger_integration.py +256 -0
  725. package/vendor/ars/scripts/test_check_claim_standing_freshness.py +277 -0
  726. package/vendor/ars/scripts/test_check_collaboration_depth_rubric.py +239 -0
  727. package/vendor/ars/scripts/test_check_command_frontmatter_name.py +178 -0
  728. package/vendor/ars/scripts/test_check_committee_correspondence.py +298 -0
  729. package/vendor/ars/scripts/test_check_compliance_report.py +381 -0
  730. package/vendor/ars/scripts/test_check_content_coverage_advisory_integration.py +308 -0
  731. package/vendor/ars/scripts/test_check_control_availability.py +361 -0
  732. package/vendor/ars/scripts/test_check_cross_document_consistency_advisory_integration.py +698 -0
  733. package/vendor/ars/scripts/test_check_cross_model_handoff_contract.py +301 -0
  734. package/vendor/ars/scripts/test_check_cross_model_verification_sync.py +203 -0
  735. package/vendor/ars/scripts/test_check_data_access_level.py +227 -0
  736. package/vendor/ars/scripts/test_check_data_flows.py +382 -0
  737. package/vendor/ars/scripts/test_check_decision_contract.py +387 -0
  738. package/vendor/ars/scripts/test_check_degradation_registry.py +270 -0
  739. package/vendor/ars/scripts/test_check_distribution_surface_claims.py +225 -0
  740. package/vendor/ars/scripts/test_check_domain_evidence_profile.py +439 -0
  741. package/vendor/ars/scripts/test_check_e4_promotion.py +163 -0
  742. package/vendor/ars/scripts/test_check_evals_gold_set.py +312 -0
  743. package/vendor/ars/scripts/test_check_evidence_row_integration.py +187 -0
  744. package/vendor/ars/scripts/test_check_field_norm_severity.py +173 -0
  745. package/vendor/ars/scripts/test_check_firm_rules_sync.py +342 -0
  746. package/vendor/ars/scripts/test_check_heldout_measurement_report.py +1508 -0
  747. package/vendor/ars/scripts/test_check_human_subjects_output_contract.py +129 -0
  748. package/vendor/ars/scripts/test_check_human_subjects_reference_migration.py +756 -0
  749. package/vendor/ars/scripts/test_check_instruction_data_boundary.py +204 -0
  750. package/vendor/ars/scripts/test_check_judge_prompt_version.py +90 -0
  751. package/vendor/ars/scripts/test_check_model_tiering.py +236 -0
  752. package/vendor/ars/scripts/test_check_panel_synthesis.py +1658 -0
  753. package/vendor/ars/scripts/test_check_passport_reset_contract.py +249 -0
  754. package/vendor/ars/scripts/test_check_pattern_eval_manifest.py +381 -0
  755. package/vendor/ars/scripts/test_check_persuasion_invariance_fixtures.py +591 -0
  756. package/vendor/ars/scripts/test_check_phase_conformance.py +4366 -0
  757. package/vendor/ars/scripts/test_check_pipeline_boundary_semantics.py +931 -0
  758. package/vendor/ars/scripts/test_check_pipeline_integrity.py +243 -0
  759. package/vendor/ars/scripts/test_check_policy_anchor_protocol.py +236 -0
  760. package/vendor/ars/scripts/test_check_policy_anchor_table.py +295 -0
  761. package/vendor/ars/scripts/test_check_prisma_trAIce_freshness.py +68 -0
  762. package/vendor/ars/scripts/test_check_promotion_bakeoff_preregistration.py +799 -0
  763. package/vendor/ars/scripts/test_check_ranking_lift.py +377 -0
  764. package/vendor/ars/scripts/test_check_re_review_synthesis.py +3398 -0
  765. package/vendor/ars/scripts/test_check_receipt_enum_sync.py +176 -0
  766. package/vendor/ars/scripts/test_check_repro_lock.py +107 -0
  767. package/vendor/ars/scripts/test_check_reviewer_data_fences.py +334 -0
  768. package/vendor/ars/scripts/test_check_reviewer_finding_contract.py +1107 -0
  769. package/vendor/ars/scripts/test_check_reviewer_role_label.py +491 -0
  770. package/vendor/ars/scripts/test_check_reviewer_scoring_honesty.py +222 -0
  771. package/vendor/ars/scripts/test_check_reviewer_sprint_prompt_sync.py +373 -0
  772. package/vendor/ars/scripts/test_check_revision_claim_drift_suite_v2.py +1925 -0
  773. package/vendor/ars/scripts/test_check_revision_token_conservation.py +398 -0
  774. package/vendor/ars/scripts/test_check_risk_register.py +336 -0
  775. package/vendor/ars/scripts/test_check_role_scoped_contract.py +1104 -0
  776. package/vendor/ars/scripts/test_check_rq_framing_patterns.py +110 -0
  777. package/vendor/ars/scripts/test_check_rubric_weight_consistency.py +32 -0
  778. package/vendor/ars/scripts/test_check_seeded_defect_fixtures.py +392 -0
  779. package/vendor/ars/scripts/test_check_setup_cross_model_parity.py +121 -0
  780. package/vendor/ars/scripts/test_check_spec_consistency.py +1081 -0
  781. package/vendor/ars/scripts/test_check_sprint_contract.py +458 -0
  782. package/vendor/ars/scripts/test_check_stage_capability_matrix.py +698 -0
  783. package/vendor/ars/scripts/test_check_submission_packet_manifest_integration.py +177 -0
  784. package/vendor/ars/scripts/test_check_surface_form_parity.py +417 -0
  785. package/vendor/ars/scripts/test_check_task_type.py +116 -0
  786. package/vendor/ars/scripts/test_check_tools_allowlist.py +835 -0
  787. package/vendor/ars/scripts/test_check_tortured_phrase_screening_integration.py +1306 -0
  788. package/vendor/ars/scripts/test_check_v3_10_134_write_scope.py +251 -0
  789. package/vendor/ars/scripts/test_check_v3_10_policy.py +547 -0
  790. package/vendor/ars/scripts/test_check_v3_6_7_pattern_protection.py +960 -0
  791. package/vendor/ars/scripts/test_check_v3_6_8_audit_scope_block.py +1000 -0
  792. package/vendor/ars/scripts/test_check_v3_6_8_cite_provenance_pipeline.py +454 -0
  793. package/vendor/ars/scripts/test_check_v3_6_8_frontmatter_trust_schema.py +581 -0
  794. package/vendor/ars/scripts/test_check_v3_6_8_mark_read_commands.py +120 -0
  795. package/vendor/ars/scripts/test_check_v3_6_8_pattern_protection.py +1138 -0
  796. package/vendor/ars/scripts/test_check_v3_7_3_three_layer_citation.py +566 -0
  797. package/vendor/ars/scripts/test_check_v3_8_annotation_literal_sync.py +262 -0
  798. package/vendor/ars/scripts/test_check_v3_9_0_triangulation.py +321 -0
  799. package/vendor/ars/scripts/test_check_v3_9_2_phase_boundary.py +190 -0
  800. package/vendor/ars/scripts/test_check_v3_9_4_temporal_verification.py +471 -0
  801. package/vendor/ars/scripts/test_check_version_consistency.py +1462 -0
  802. package/vendor/ars/scripts/test_check_workflow_classification.py +225 -0
  803. package/vendor/ars/scripts/test_chinese_literature_client.py +1889 -0
  804. package/vendor/ars/scripts/test_citation_existence_policy.py +480 -0
  805. package/vendor/ars/scripts/test_citation_verification_summary.py +342 -0
  806. package/vendor/ars/scripts/test_claim_audit_calibration.py +882 -0
  807. package/vendor/ars/scripts/test_claim_audit_finalizer.py +979 -0
  808. package/vendor/ars/scripts/test_claim_audit_pipeline.py +2398 -0
  809. package/vendor/ars/scripts/test_claim_audit_schema.py +1778 -0
  810. package/vendor/ars/scripts/test_claim_intent_manifest.py +666 -0
  811. package/vendor/ars/scripts/test_claim_registry_coverage.py +246 -0
  812. package/vendor/ars/scripts/test_claim_standing_discovery.py +579 -0
  813. package/vendor/ars/scripts/test_claim_standing_pipeline_wiring.py +290 -0
  814. package/vendor/ars/scripts/test_claim_standing_stance_assets.py +399 -0
  815. package/vendor/ars/scripts/test_claim_standing_stance_contracts.py +383 -0
  816. package/vendor/ars/scripts/test_claim_standing_stance_runner.py +349 -0
  817. package/vendor/ars/scripts/test_claim_standing_transmissions.py +605 -0
  818. package/vendor/ars/scripts/test_claim_strength_drift_disposition.py +517 -0
  819. package/vendor/ars/scripts/test_claim_verification_coverage_contract.py +104 -0
  820. package/vendor/ars/scripts/test_contamination_signals.py +1086 -0
  821. package/vendor/ars/scripts/test_content_coverage_advisory.py +1767 -0
  822. package/vendor/ars/scripts/test_cross_document_consistency_advisory.py +1270 -0
  823. package/vendor/ars/scripts/test_cross_model_codex_transport.py +1152 -0
  824. package/vendor/ars/scripts/test_cross_model_handoff.py +571 -0
  825. package/vendor/ars/scripts/test_cross_model_verification_guards.py +792 -0
  826. package/vendor/ars/scripts/test_crossref_client.py +393 -0
  827. package/vendor/ars/scripts/test_dispatch_e4_panel.py +4235 -0
  828. package/vendor/ars/scripts/test_e2e_claim_audit.py +540 -0
  829. package/vendor/ars/scripts/test_eval_harness_workflow.py +140 -0
  830. package/vendor/ars/scripts/test_evals_citation_extraction.py +150 -0
  831. package/vendor/ars/scripts/test_evals_lift_report_schema.py +108 -0
  832. package/vendor/ars/scripts/test_evidence_rows.py +2593 -0
  833. package/vendor/ars/scripts/test_experiment_provenance.py +915 -0
  834. package/vendor/ars/scripts/test_human_read_attestation_resolver.py +477 -0
  835. package/vendor/ars/scripts/test_ideation_diversity_assignment_gate.py +615 -0
  836. package/vendor/ars/scripts/test_indirect_prompt_injection_behavior_probe.py +250 -0
  837. package/vendor/ars/scripts/test_inquiry_branch_ledger.py +2296 -0
  838. package/vendor/ars/scripts/test_migrate_literature_corpus_to_v3_10.py +248 -0
  839. package/vendor/ars/scripts/test_migrate_literature_corpus_to_v3_7_3.py +545 -0
  840. package/vendor/ars/scripts/test_migrate_literature_corpus_to_v3_9_0.py +497 -0
  841. package/vendor/ars/scripts/test_normalize_compat_verdict.py +149 -0
  842. package/vendor/ars/scripts/test_openalex_client.py +490 -0
  843. package/vendor/ars/scripts/test_passport_yaml.py +104 -0
  844. package/vendor/ars/scripts/test_pattern_eval_runtime.py +1295 -0
  845. package/vendor/ars/scripts/test_pdf_read_preflight.py +1943 -0
  846. package/vendor/ars/scripts/test_policy_anchor_disclosure.py +666 -0
  847. package/vendor/ars/scripts/test_reading_probe_lint.py +218 -0
  848. package/vendor/ars/scripts/test_recompute_receipts.py +778 -0
  849. package/vendor/ars/scripts/test_render_claim_standing_view.py +192 -0
  850. package/vendor/ars/scripts/test_render_eval_comment.py +162 -0
  851. package/vendor/ars/scripts/test_render_harness_retirement_issue.py +110 -0
  852. package/vendor/ars/scripts/test_repro_lock_validation_drift.py +100 -0
  853. package/vendor/ars/scripts/test_research_workflow_profile.py +734 -0
  854. package/vendor/ars/scripts/test_resolve_human_subjects_authority.py +1219 -0
  855. package/vendor/ars/scripts/test_resolve_review_target_context.py +703 -0
  856. package/vendor/ars/scripts/test_resume_e4_record.py +315 -0
  857. package/vendor/ars/scripts/test_retraction_status.py +456 -0
  858. package/vendor/ars/scripts/test_review_criteria_binding.py +629 -0
  859. package/vendor/ars/scripts/test_review_panel_provenance.py +565 -0
  860. package/vendor/ars/scripts/test_review_pathway_rule_trace.py +821 -0
  861. package/vendor/ars/scripts/test_revision_roadmap.py +1255 -0
  862. package/vendor/ars/scripts/test_run_ci_pytest_manifest.py +186 -0
  863. package/vendor/ars/scripts/test_run_codex_audit_e2e.py +369 -0
  864. package/vendor/ars/scripts/test_run_evals.py +430 -0
  865. package/vendor/ars/scripts/test_run_guard_launcher.py +500 -0
  866. package/vendor/ars/scripts/test_run_ideation_diversity_no_call.py +1833 -0
  867. package/vendor/ars/scripts/test_run_indirect_prompt_injection_no_call.py +1889 -0
  868. package/vendor/ars/scripts/test_run_review_criteria_constructive_value.py +586 -0
  869. package/vendor/ars/scripts/test_run_role_topology_utility_dry_run.py +428 -0
  870. package/vendor/ars/scripts/test_score_review_criteria_constructive_value.py +340 -0
  871. package/vendor/ars/scripts/test_semantic_scholar_client.py +554 -0
  872. package/vendor/ars/scripts/test_slr_lineage_emission.py +230 -0
  873. package/vendor/ars/scripts/test_socratic_rq_non_generation_contract.py +173 -0
  874. package/vendor/ars/scripts/test_temporal_integrity_audit.py +438 -0
  875. package/vendor/ars/scripts/test_text_similarity.py +95 -0
  876. package/vendor/ars/scripts/test_title_fuzzy_false_positive.py +111 -0
  877. package/vendor/ars/scripts/test_tortured_phrase_screening.py +2959 -0
  878. package/vendor/ars/scripts/test_transport_fixture_citation_gate.py +338 -0
  879. package/vendor/ars/scripts/test_uncited_assertion.py +558 -0
  880. package/vendor/ars/scripts/test_v3_6_7_phase_6_6.py +1279 -0
  881. package/vendor/ars/scripts/test_validate_compliance_fixtures.py +36 -0
  882. package/vendor/ars/scripts/test_validate_ideation_diversity_assets.py +230 -0
  883. package/vendor/ars/scripts/test_venue_disclosure_contract.py +755 -0
  884. package/vendor/ars/scripts/test_verification_cache.py +280 -0
  885. package/vendor/ars/scripts/test_verification_gate.py +461 -0
  886. package/vendor/ars/scripts/test_verify_passport_cli.py +123 -0
  887. package/vendor/ars/scripts/test_verify_submission_package.py +1407 -0
  888. package/vendor/ars/scripts/test_version_records_schema.py +211 -0
  889. package/vendor/ars/scripts/tortured_phrase_screening.py +3502 -0
  890. package/vendor/ars/scripts/uncited_assertion_detector.py +254 -0
  891. package/vendor/ars/scripts/v3_6_7_inversion_manifest.json +9 -0
  892. package/vendor/ars/scripts/v3_6_8_inversion_manifest.json +10 -0
  893. package/vendor/ars/scripts/validate_claim_standing_stance_assets.py +249 -0
  894. package/vendor/ars/scripts/validate_compliance_fixtures.py +56 -0
  895. package/vendor/ars/scripts/validate_ideation_diversity_assets.py +303 -0
  896. package/vendor/ars/scripts/venue_disclosure_contract_harness.py +837 -0
  897. package/vendor/ars/scripts/verification_cache.py +276 -0
  898. package/vendor/ars/scripts/verification_gate/__init__.py +345 -0
  899. package/vendor/ars/scripts/verify_passport.py +133 -0
  900. package/vendor/ars/scripts/verify_submission_package.py +1657 -0
  901. package/vendor/ars/shared/agents/compliance_agent.md +136 -0
  902. package/vendor/ars/shared/artifact_reproducibility_pattern.md +173 -0
  903. package/vendor/ars/shared/benchmark_report.schema.json +81 -0
  904. package/vendor/ars/shared/benchmark_report_pattern.md +180 -0
  905. package/vendor/ars/shared/bibliographic_integrity_signals.md +142 -0
  906. package/vendor/ars/shared/collaboration_depth_rubric.md +154 -0
  907. package/vendor/ars/shared/compliance_checkpoint_protocol.md +162 -0
  908. package/vendor/ars/shared/compliance_report.schema.json +187 -0
  909. package/vendor/ars/shared/contracts/README.md +938 -0
  910. package/vendor/ars/shared/contracts/activity/adjudication_activity_input.schema.json +555 -0
  911. package/vendor/ars/shared/contracts/activity/adjudication_activity_store.schema.json +560 -0
  912. package/vendor/ars/shared/contracts/audit/audit_jsonl.schema.json +128 -0
  913. package/vendor/ars/shared/contracts/audit/audit_sidecar.schema.json +169 -0
  914. package/vendor/ars/shared/contracts/audit/audit_verdict.schema.json +133 -0
  915. package/vendor/ars/shared/contracts/audit/cross_document_consistency_advisory.schema.json +480 -0
  916. package/vendor/ars/shared/contracts/audit/cross_document_consistency_advisory_draft.schema.json +564 -0
  917. package/vendor/ars/shared/contracts/audit/cross_document_source_manifest.schema.json +202 -0
  918. package/vendor/ars/shared/contracts/audit/tortured_phrase_advisory.schema.json +1362 -0
  919. package/vendor/ars/shared/contracts/audit/tortured_phrase_snapshot.schema.json +208 -0
  920. package/vendor/ars/shared/contracts/audit/tortured_phrase_snapshot_manifest.schema.json +335 -0
  921. package/vendor/ars/shared/contracts/capability/stage_capability_matrix.json +434 -0
  922. package/vendor/ars/shared/contracts/claim_standing/candidate_ledger.schema.json +705 -0
  923. package/vendor/ars/shared/contracts/claim_standing/query_plan.schema.json +389 -0
  924. package/vendor/ars/shared/contracts/claim_standing/query_plan_v1_1.schema.json +782 -0
  925. package/vendor/ars/shared/contracts/claim_standing/retrieval_input.schema.json +440 -0
  926. package/vendor/ars/shared/contracts/claim_standing/stance_record.schema.json +460 -0
  927. package/vendor/ars/shared/contracts/claim_standing/transmission_ledger.schema.json +282 -0
  928. package/vendor/ars/shared/contracts/cross_model/codex_citation_receipt.schema.json +157 -0
  929. package/vendor/ars/shared/contracts/cross_model/codex_citation_request.schema.json +23 -0
  930. package/vendor/ars/shared/contracts/cross_model/promotion_bakeoff_sealed_commitment.schema.json +55 -0
  931. package/vendor/ars/shared/contracts/cross_model/promotion_bakeoff_sealed_reveal.schema.json +50 -0
  932. package/vendor/ars/shared/contracts/degradation_registry.json +428 -0
  933. package/vendor/ars/shared/contracts/evaluator/full.json +126 -0
  934. package/vendor/ars/shared/contracts/evidence/claim_registry.schema.json +50 -0
  935. package/vendor/ars/shared/contracts/evidence/claim_registry_coverage_report.schema.json +79 -0
  936. package/vendor/ars/shared/contracts/evidence/evidence_row.schema.json +504 -0
  937. package/vendor/ars/shared/contracts/evidence/evidence_row_v1_1.schema.json +364 -0
  938. package/vendor/ars/shared/contracts/evidence/evidence_row_v1_2.schema.json +714 -0
  939. package/vendor/ars/shared/contracts/evidence/evidence_row_v1_3.schema.json +524 -0
  940. package/vendor/ars/shared/contracts/human_subjects/authority_profile_registry.schema.json +497 -0
  941. package/vendor/ars/shared/contracts/human_subjects/committee_correspondence.schema.json +253 -0
  942. package/vendor/ars/shared/contracts/human_subjects/content_coverage_advisory.schema.json +620 -0
  943. package/vendor/ars/shared/contracts/human_subjects/irb_context_record.schema.json +329 -0
  944. package/vendor/ars/shared/contracts/human_subjects/resolved_authority_context.schema.json +347 -0
  945. package/vendor/ars/shared/contracts/human_subjects/review_pathway_rule_trace.schema.json +265 -0
  946. package/vendor/ars/shared/contracts/human_subjects/review_pathway_trace_request.schema.json +127 -0
  947. package/vendor/ars/shared/contracts/human_subjects/submission_packet_inventory.schema.json +240 -0
  948. package/vendor/ars/shared/contracts/human_subjects/submission_packet_manifest.schema.json +999 -0
  949. package/vendor/ars/shared/contracts/passport/audit_artifact_entry.schema.json +266 -0
  950. package/vendor/ars/shared/contracts/passport/bibliographic_integrity_signal.schema.json +1676 -0
  951. package/vendor/ars/shared/contracts/passport/citation_provenance.schema.json +107 -0
  952. package/vendor/ars/shared/contracts/passport/citation_verification_summary.schema.json +164 -0
  953. package/vendor/ars/shared/contracts/passport/claim_audit_result.schema.json +124 -0
  954. package/vendor/ars/shared/contracts/passport/claim_drift.schema.json +58 -0
  955. package/vendor/ars/shared/contracts/passport/claim_intent_manifest.schema.json +107 -0
  956. package/vendor/ars/shared/contracts/passport/constraint_violation.schema.json +65 -0
  957. package/vendor/ars/shared/contracts/passport/experiment_alignment_result.schema.json +69 -0
  958. package/vendor/ars/shared/contracts/passport/experiment_provenance_entry.schema.json +169 -0
  959. package/vendor/ars/shared/contracts/passport/human_read_log.schema.json +86 -0
  960. package/vendor/ars/shared/contracts/passport/inquiry_ledger_ref.schema.json +22 -0
  961. package/vendor/ars/shared/contracts/passport/literature_corpus_entry.schema.json +650 -0
  962. package/vendor/ars/shared/contracts/passport/preregistration_artifact.schema.json +132 -0
  963. package/vendor/ars/shared/contracts/passport/rejection_log.schema.json +89 -0
  964. package/vendor/ars/shared/contracts/passport/reset_ledger_entry.schema.json +158 -0
  965. package/vendor/ars/shared/contracts/passport/temporal_audit_results.schema.json +208 -0
  966. package/vendor/ars/shared/contracts/passport/terminal_policies.schema.json +50 -0
  967. package/vendor/ars/shared/contracts/passport/timeline.schema.json +102 -0
  968. package/vendor/ars/shared/contracts/passport/uncited_assertion.schema.json +56 -0
  969. package/vendor/ars/shared/contracts/passport/uncited_audit_failure.schema.json +72 -0
  970. package/vendor/ars/shared/contracts/passport/user_attested_read_resolution.schema.json +87 -0
  971. package/vendor/ars/shared/contracts/passport/version_records.schema.json +138 -0
  972. package/vendor/ars/shared/contracts/patch/block_manifest.schema.json +45 -0
  973. package/vendor/ars/shared/contracts/patch/legacy/v1_0/revision_patch.schema.json +110 -0
  974. package/vendor/ars/shared/contracts/patch/revision_patch.schema.json +250 -0
  975. package/vendor/ars/shared/contracts/pdf/pdf_content_classifier_diagnostic.schema.json +39 -0
  976. package/vendor/ars/shared/contracts/pdf/pdf_content_classifier_worker.schema.json +88 -0
  977. package/vendor/ars/shared/contracts/pdf/pdf_read_preflight.schema.json +227 -0
  978. package/vendor/ars/shared/contracts/re_review/input_manifest.schema.json +161 -0
  979. package/vendor/ars/shared/contracts/re_review/legacy/v1_0/input_manifest.schema.json +134 -0
  980. package/vendor/ars/shared/contracts/re_review/legacy/v1_0/precommitment.schema.json +193 -0
  981. package/vendor/ars/shared/contracts/re_review/legacy/v1_0/traceability.schema.json +841 -0
  982. package/vendor/ars/shared/contracts/re_review/legacy/v1_0/verdict_record.schema.json +244 -0
  983. package/vendor/ars/shared/contracts/re_review/precommitment.schema.json +193 -0
  984. package/vendor/ars/shared/contracts/re_review/traceability.schema.json +916 -0
  985. package/vendor/ars/shared/contracts/re_review/verdict_record.schema.json +245 -0
  986. package/vendor/ars/shared/contracts/research_workflow/inquiry_branch_ledger.schema.json +449 -0
  987. package/vendor/ars/shared/contracts/research_workflow/research_workflow_profile.schema.json +222 -0
  988. package/vendor/ars/shared/contracts/research_workflow/research_workflow_profile_selection_receipt.schema.json +111 -0
  989. package/vendor/ars/shared/contracts/review_target/constructive_review_findings.schema.json +172 -0
  990. package/vendor/ars/shared/contracts/review_target/criteria_registry.schema.json +97 -0
  991. package/vendor/ars/shared/contracts/review_target/review_criteria_binding_manifest.schema.json +235 -0
  992. package/vendor/ars/shared/contracts/review_target/review_criteria_source_receipt.schema.json +158 -0
  993. package/vendor/ars/shared/contracts/review_target/review_target_context.schema.json +106 -0
  994. package/vendor/ars/shared/contracts/review_target/review_target_declaration.schema.json +118 -0
  995. package/vendor/ars/shared/contracts/reviewer/full.json +114 -0
  996. package/vendor/ars/shared/contracts/reviewer/methodology_focus.json +75 -0
  997. package/vendor/ars/shared/contracts/reviewer/review_panel_provenance.schema.json +263 -0
  998. package/vendor/ars/shared/contracts/reviewer/review_panel_provenance_carrier.schema.json +122 -0
  999. package/vendor/ars/shared/contracts/reviewer/review_panel_provenance_input.schema.json +120 -0
  1000. package/vendor/ars/shared/contracts/revision/author_adjudication.schema.json +251 -0
  1001. package/vendor/ars/shared/contracts/revision/author_adjudication_input.schema.json +25 -0
  1002. package/vendor/ars/shared/contracts/revision/claim_strength_drift_disposition.schema.json +97 -0
  1003. package/vendor/ars/shared/contracts/revision/claim_strength_drift_disposition_input.schema.json +80 -0
  1004. package/vendor/ars/shared/contracts/revision/claim_strength_drift_findings.schema.json +139 -0
  1005. package/vendor/ars/shared/contracts/revision/claim_surface_manifest.schema.json +99 -0
  1006. package/vendor/ars/shared/contracts/revision/integrity_correction_authorization.schema.json +140 -0
  1007. package/vendor/ars/shared/contracts/revision/integrity_correction_authorization_input.schema.json +28 -0
  1008. package/vendor/ars/shared/contracts/revision/integrity_correction_list.schema.json +48 -0
  1009. package/vendor/ars/shared/contracts/revision/integrity_pass_receipt.schema.json +16 -0
  1010. package/vendor/ars/shared/contracts/revision/revision_evidence_bundle.schema.json +134 -0
  1011. package/vendor/ars/shared/contracts/revision/revision_roadmap.schema.json +334 -0
  1012. package/vendor/ars/shared/contracts/submission/format_profile.example.yaml +33 -0
  1013. package/vendor/ars/shared/contracts/submission/format_profile.schema.json +102 -0
  1014. package/vendor/ars/shared/contracts/submission/submission_verification_report.schema.json +233 -0
  1015. package/vendor/ars/shared/contracts/submission/venue_profile.schema.json +114 -0
  1016. package/vendor/ars/shared/contracts/writer/full.json +87 -0
  1017. package/vendor/ars/shared/cross_model_verification.md +714 -0
  1018. package/vendor/ars/shared/evals_lift_report.schema.json +141 -0
  1019. package/vendor/ars/shared/ground_truth_isolation_pattern.md +275 -0
  1020. package/vendor/ars/shared/handoff_schemas.md +1209 -0
  1021. package/vendor/ars/shared/human_subjects_authority_registry.json +1278 -0
  1022. package/vendor/ars/shared/mode_spectrum.md +57 -0
  1023. package/vendor/ars/shared/model_tiering.md +83 -0
  1024. package/vendor/ars/shared/policy_data/nature_policy.md +56 -0
  1025. package/vendor/ars/shared/prisma_trAIce_protocol.md +157 -0
  1026. package/vendor/ars/shared/raise_framework.md +129 -0
  1027. package/vendor/ars/shared/references/authority_content_coverage_advisory_protocol.md +275 -0
  1028. package/vendor/ars/shared/references/claim_standing_candidate_ledger_protocol.md +66 -0
  1029. package/vendor/ars/shared/references/claim_strength_ladder.md +93 -0
  1030. package/vendor/ars/shared/references/cross_document_consistency_advisory_protocol.md +263 -0
  1031. package/vendor/ars/shared/references/evidence_row_protocol.md +260 -0
  1032. package/vendor/ars/shared/references/firm_rules.md +90 -0
  1033. package/vendor/ars/shared/references/human_subjects_authority_protocol.md +274 -0
  1034. package/vendor/ars/shared/references/intent_clarification_protocol.md +168 -0
  1035. package/vendor/ars/shared/references/irb_terminology_glossary.md +229 -0
  1036. package/vendor/ars/shared/references/protected_hedging_phrases.md +118 -0
  1037. package/vendor/ars/shared/references/psychometric_terminology_glossary.md +109 -0
  1038. package/vendor/ars/shared/references/review_criteria_consumer_protocol.md +238 -0
  1039. package/vendor/ars/shared/references/review_pathway_rule_trace_protocol.md +166 -0
  1040. package/vendor/ars/shared/references/submission_packet_manifest_protocol.md +292 -0
  1041. package/vendor/ars/shared/references/word_count_conventions.md +124 -0
  1042. package/vendor/ars/shared/research_workflow_profiles/field_general.json +1 -0
  1043. package/vendor/ars/shared/review_criteria_registry.json +207 -0
  1044. package/vendor/ars/shared/review_criteria_sources/msr-2027-technical-papers.2026-08-24.json +46 -0
  1045. package/vendor/ars/shared/review_criteria_sources/sigsoft-empirical-standards.2026-08-24.json +31 -0
  1046. package/vendor/ars/shared/sprint_contract.schema.json +482 -0
  1047. package/vendor/ars/shared/style_calibration_protocol.md +151 -0
  1048. package/vendor/ars/shared/templates/codex_audit_multifile_template.md +263 -0
  1049. package/vendor/ars/tools/release-discipline/.toolkit-version +1 -0
  1050. package/vendor/ars/tools/release-discipline/README.md +4 -0
  1051. package/vendor/ars/tools/release-discipline/scripts/_release_doc_alignment_schema.py +1011 -0
  1052. package/vendor/ars/tools/release-discipline/scripts/check_command_invariants.py +497 -0
  1053. package/vendor/ars/tools/release-discipline/scripts/check_release_doc_alignment.py +263 -0
  1054. package/vendor/ars/tools/release-discipline/scripts/sync-toolkit.sh +147 -0
  1055. package/vendor/windows/NOTICE.md +12 -0
  1056. package/vendor/windows/arm64/fd.exe +0 -0
  1057. package/vendor/windows/arm64/licenses/fd/LICENSE-APACHE +201 -0
  1058. package/vendor/windows/arm64/licenses/fd/LICENSE-MIT +21 -0
  1059. package/vendor/windows/arm64/licenses/ripgrep/COPYING +3 -0
  1060. package/vendor/windows/arm64/licenses/ripgrep/LICENSE-MIT +21 -0
  1061. package/vendor/windows/arm64/licenses/ripgrep/UNLICENSE +24 -0
  1062. package/vendor/windows/arm64/rg.exe +0 -0
  1063. package/vendor/windows/x64/fd.exe +0 -0
  1064. package/vendor/windows/x64/licenses/fd/LICENSE-APACHE +201 -0
  1065. package/vendor/windows/x64/licenses/fd/LICENSE-MIT +21 -0
  1066. package/vendor/windows/x64/licenses/ripgrep/COPYING +3 -0
  1067. package/vendor/windows/x64/licenses/ripgrep/LICENSE-MIT +21 -0
  1068. package/vendor/windows/x64/licenses/ripgrep/UNLICENSE +24 -0
  1069. package/vendor/windows/x64/rg.exe +0 -0
@@ -0,0 +1,1107 @@
1
+ #!/usr/bin/env python3
2
+ """Mutation test for check_reviewer_finding_contract.py (#574 behavior batch).
3
+
4
+ Each retired drift class, re-introduced, must make the lint FAIL: quota
5
+ restoration (A1), receipt/contract gutting (A1), anchor vocabulary loss (A2),
6
+ severity re-derivation surfaces (A3), base-rate anchors (B1), and the P0-3
7
+ overlap-prohibition residue. Positive control confirms the unmutated tree
8
+ PASSES.
9
+
10
+ Run:
11
+ python -m pytest scripts/test_check_reviewer_finding_contract.py
12
+ """
13
+ from __future__ import annotations
14
+
15
+ import shutil
16
+ import subprocess
17
+ import sys
18
+ from pathlib import Path
19
+
20
+ import pytest
21
+
22
+ REPO_ROOT = Path(__file__).resolve().parents[1]
23
+ CHECKER = REPO_ROOT / "scripts" / "check_reviewer_finding_contract.py"
24
+
25
+ SCORING_AGENTS = (
26
+ "academic-paper-reviewer/agents/eic_agent.md",
27
+ "academic-paper-reviewer/agents/methodology_reviewer_agent.md",
28
+ "academic-paper-reviewer/agents/domain_reviewer_agent.md",
29
+ "academic-paper-reviewer/agents/perspective_reviewer_agent.md",
30
+ )
31
+ DA_REL = "academic-paper-reviewer/agents/devils_advocate_reviewer_agent.md"
32
+ SYNTH_REL = "academic-paper-reviewer/agents/editorial_synthesizer_agent.md"
33
+ TEMPLATE_REL = "academic-paper-reviewer/templates/peer_review_report_template.md"
34
+ DECISION_TEMPLATE_REL = "academic-paper-reviewer/templates/editorial_decision_template.md"
35
+ STANDARDS_REL = "academic-paper-reviewer/references/editorial_decision_standards.md"
36
+ SKILL_REL = "academic-paper-reviewer/SKILL.md"
37
+ SCHEMAS_REL = "shared/handoff_schemas.md"
38
+ CALIBRATION_REL = "academic-paper-reviewer/references/calibration_mode_protocol.md"
39
+ GUIDED_REL = "academic-paper-reviewer/references/guided_mode_protocol.md"
40
+ RQT_REL = "academic-paper-reviewer/references/review_quality_thinking.md"
41
+ RESPONSE_TEMPLATE_REL = "academic-paper-reviewer/templates/revision_response_template.md"
42
+ STATS_REL = "academic-paper-reviewer/references/statistical_reporting_standards.md"
43
+ RCF_REL = "academic-paper-reviewer/references/review_criteria_framework.md"
44
+ XM_REL = "shared/cross_model_verification.md"
45
+ FIELD_ANALYST_REL = "academic-paper-reviewer/agents/field_analyst_agent.md"
46
+ DOMAIN_REL = SCORING_AGENTS[2]
47
+
48
+ ALL_FILES = SCORING_AGENTS + (
49
+ DA_REL, SYNTH_REL, TEMPLATE_REL, DECISION_TEMPLATE_REL, STANDARDS_REL,
50
+ SKILL_REL, SCHEMAS_REL, CALIBRATION_REL, GUIDED_REL, RQT_REL,
51
+ RESPONSE_TEMPLATE_REL, STATS_REL, RCF_REL, XM_REL, FIELD_ANALYST_REL,
52
+ )
53
+
54
+
55
+ def _run2(root: Path):
56
+ proc = subprocess.run(
57
+ [sys.executable, str(CHECKER), "--root", str(root)],
58
+ capture_output=True, text=True,
59
+ )
60
+ return proc.returncode, proc.stderr
61
+
62
+
63
+ def _run(root: Path) -> int:
64
+ return _run2(root)[0]
65
+
66
+
67
+ def _mirror(tmp_path: Path) -> Path:
68
+ root = tmp_path / "repo"
69
+ for rel in ALL_FILES:
70
+ dst = root / rel
71
+ dst.parent.mkdir(parents=True, exist_ok=True)
72
+ shutil.copy(REPO_ROOT / rel, dst)
73
+ return root
74
+
75
+
76
+ def _edit(root: Path, rel: str, transform) -> None:
77
+ p = root / rel
78
+ p.write_text(transform(p.read_text(encoding="utf-8")), encoding="utf-8")
79
+
80
+
81
+ # --- positive control ---------------------------------------------------------
82
+
83
+ def test_unmutated_tree_passes(tmp_path):
84
+ root = _mirror(tmp_path)
85
+ code, err = _run2(root)
86
+ assert code == 0, f"baseline tree should PASS, stderr:\n{err}"
87
+
88
+
89
+ def test_b1_band_anchor_mutation_fails(tmp_path):
90
+ root = _mirror(tmp_path)
91
+ _edit(
92
+ root, SCORING_AGENTS[0],
93
+ lambda text: text.replace(
94
+ "if a defect needs sibling findings to reach rejection-level "
95
+ "impact, it is not Critical alone.",
96
+ "clusters may promote each member to Critical.",
97
+ 1,
98
+ ),
99
+ )
100
+ code, err = _run2(root)
101
+ assert code == 1
102
+ assert "B1 band anchors missing" in err
103
+
104
+
105
+ def test_template_b1_anti_bundling_mutation_fails(tmp_path):
106
+ root = _mirror(tmp_path)
107
+ _edit(
108
+ root, TEMPLATE_REL,
109
+ lambda text: text.replace(
110
+ "A finding never inherits a higher band from siblings",
111
+ "A finding may inherit a higher band from siblings",
112
+ 1,
113
+ ),
114
+ )
115
+ code, err = _run2(root)
116
+ assert code == 1
117
+ assert "expanded B1" in err
118
+
119
+
120
+ # --- A1: quotas + receipt + contract block --------------------------------------
121
+
122
+ def test_m1_quota_restored_in_agent(tmp_path):
123
+ root = _mirror(tmp_path)
124
+ _edit(root, SCORING_AGENTS[1],
125
+ lambda t: t.replace("### Weaknesses\n", "### Weaknesses (3-5 items)\n", 1))
126
+ code, err = _run2(root)
127
+ assert code == 1
128
+ assert "finding-quota regression" in err
129
+
130
+
131
+ def test_m2_finding_contract_body_gutted(tmp_path):
132
+ root = _mirror(tmp_path)
133
+ _edit(root, SCORING_AGENTS[0],
134
+ lambda t: t.replace("Do not manufacture findings to fill a quota; do not "
135
+ "omit real ones to seem agreeable.",
136
+ "Use your judgment."))
137
+ code, err = _run2(root)
138
+ assert code == 1
139
+ assert "Finding Contract body missing" in err
140
+
141
+
142
+ def test_m3_weakness_field_line_dropped(tmp_path):
143
+ root = _mirror(tmp_path)
144
+ _edit(root, SCORING_AGENTS[2],
145
+ lambda t: t.replace(
146
+ " - **Severity**: [Critical / Major / Minor] | **Evidence Anchor**: "
147
+ "[`<type>: <locator>`] | **Confidence**: [1-5 — competence basis]\n", ""))
148
+ code, err = _run2(root)
149
+ assert code == 1
150
+ assert "per-weakness field line" in err
151
+
152
+
153
+ def test_m4_coverage_receipt_skeleton_dropped(tmp_path):
154
+ root = _mirror(tmp_path)
155
+ _edit(root, SCORING_AGENTS[3],
156
+ lambda t: t.replace(
157
+ "### Coverage Receipt (only when Strengths or Weaknesses is empty)",
158
+ "### Notes"))
159
+ code, err = _run2(root)
160
+ assert code == 1
161
+ assert "coverage-receipt skeleton" in err
162
+
163
+
164
+ def test_m5_every_scoring_agent_is_pinned(tmp_path):
165
+ """Gutting the Finding Contract heading in EACH scoring agent individually
166
+ must fail."""
167
+ for rel in SCORING_AGENTS:
168
+ root = _mirror(tmp_path / rel.replace("/", "_"))
169
+ _edit(root, rel,
170
+ lambda t: t.replace("**Finding Contract (#574 A1/A2/A3)** — governs",
171
+ "**Notes** — governs"))
172
+ assert _run(root) == 1, f"removing Finding Contract heading in {rel} must fail"
173
+
174
+
175
+ def test_m6_template_quota_restored(tmp_path):
176
+ root = _mirror(tmp_path)
177
+ _edit(root, TEMPLATE_REL,
178
+ lambda t: t.replace("List every weakness you actually found",
179
+ "List 3-5 weaknesses of the paper. List every weakness you actually found"))
180
+ code, err = _run2(root)
181
+ assert code == 1
182
+ assert "finding-quota regression" in err
183
+
184
+
185
+ def test_m7_template_receipt_section_removed(tmp_path):
186
+ root = _mirror(tmp_path)
187
+ _edit(root, TEMPLATE_REL,
188
+ lambda t: t.replace("## Coverage Receipt (conditional *)", "## Extra Notes"))
189
+ code, err = _run2(root)
190
+ assert code == 1
191
+ assert "coverage-receipt section" in err
192
+
193
+
194
+ # --- A2: anchor vocabulary -------------------------------------------------------
195
+
196
+ def test_m8_template_absence_row_removed(tmp_path):
197
+ root = _mirror(tmp_path)
198
+ def drop_absence_row(t: str) -> str:
199
+ return "\n".join(l for l in t.splitlines() if not l.startswith("| `absence` |")) + "\n"
200
+ _edit(root, TEMPLATE_REL, drop_absence_row)
201
+ code, err = _run2(root)
202
+ assert code == 1
203
+ assert "anchor vocabulary missing type row" in err
204
+
205
+
206
+ def test_m9_template_must_anchor_weakened(tmp_path):
207
+ root = _mirror(tmp_path)
208
+ _edit(root, TEMPLATE_REL,
209
+ lambda t: t.replace("**Critical/Major findings MUST carry an adequate anchor",
210
+ "**Critical/Major findings should carry an anchor"))
211
+ code, err = _run2(root)
212
+ assert code == 1
213
+ assert "MUST-anchor rule" in err
214
+
215
+
216
+ def test_m10_da_table_loses_anchor_column(tmp_path):
217
+ root = _mirror(tmp_path)
218
+ def strip_critical_anchor_col(t: str) -> str:
219
+ return t.replace(
220
+ "| # | Dimension | Issue Description | Evidence Anchor | Confidence | "
221
+ "Field-Norm Boundary | Evidence-Crossing Rationale |",
222
+ "| # | Dimension | Issue Description | Location | "
223
+ "Field-Norm Boundary | Evidence-Crossing Rationale |", 1)
224
+ _edit(root, DA_REL, strip_critical_anchor_col)
225
+ code, err = _run2(root)
226
+ assert code == 1
227
+ assert "CRITICAL table: missing column" in err
228
+
229
+
230
+ # --- A3: severity single source + transport ---------------------------------------
231
+
232
+ def test_m11_schema6_canonical_sentence_removed(tmp_path):
233
+ root = _mirror(tmp_path)
234
+ _edit(root, SCHEMAS_REL,
235
+ lambda t: t.replace("the CANONICAL single source for finding severity "
236
+ "across the reviewer stack (#574 A3)",
237
+ "a severity value"))
238
+ code, err = _run2(root)
239
+ assert code == 1
240
+ assert "canonical-severity sentence" in err
241
+
242
+
243
+ def test_m12_synth_severity_fallback_tag_removed(tmp_path):
244
+ root = _mirror(tmp_path)
245
+ _edit(root, SYNTH_REL,
246
+ lambda t: t.replace("[SEVERITY-SOURCE: letter-fallback]", "a note"))
247
+ code, err = _run2(root)
248
+ assert code == 1
249
+ assert "severity fallback tag" in err
250
+
251
+
252
+ def test_m13_da_band_consistency_removed(tmp_path):
253
+ root = _mirror(tmp_path)
254
+ _edit(root, DA_REL,
255
+ lambda t: t.replace("the same defect class with the same decision impact "
256
+ "lands in the same band every time",
257
+ "severity is a judgment call"))
258
+ code, err = _run2(root)
259
+ assert code == 1
260
+ assert "band-consistency" in err
261
+
262
+
263
+ def test_m14_standards_severity_column_restored(tmp_path):
264
+ """Re-adding a Severity column to the cross-dimension table recreates the
265
+ second severity-assignment path — must fail."""
266
+ root = _mirror(tmp_path)
267
+ _edit(root, STANDARDS_REL,
268
+ lambda t: t.replace("| Situation | Decision impact |",
269
+ "| Situation | Severity | Decision impact |"))
270
+ code, err = _run2(root)
271
+ assert code == 1
272
+ assert ("severity-assignment column regression" in err
273
+ or "decision-impact table header" in err)
274
+
275
+
276
+ # --- B1: base rates + symmetry ------------------------------------------------------
277
+
278
+ def test_m15_synth_base_rate_restored(tmp_path):
279
+ root = _mirror(tmp_path)
280
+ _edit(root, SYNTH_REL,
281
+ lambda t: t.replace(
282
+ "Granted whenever the criteria are met — the decision follows the "
283
+ "evidence against `references/editorial_decision_standards.md`, never "
284
+ "a base rate or target distribution (#574 B1)",
285
+ "Rare — most papers don't pass on the first round"))
286
+ code, err = _run2(root)
287
+ assert code == 1
288
+ assert "B1 accept rule" in err or "base-rate anchor regression" in err
289
+
290
+
291
+ def test_m16_standards_b1_principle_gutted(tmp_path):
292
+ root = _mirror(tmp_path)
293
+ _edit(root, STANDARDS_REL,
294
+ lambda t: t.replace("**Register is independent of severity.**",
295
+ "Politeness matters."))
296
+ code, err = _run2(root)
297
+ assert code == 1
298
+ assert "B1 principle" in err
299
+
300
+
301
+ def test_m17_standards_base_rate_restored(tmp_path):
302
+ root = _mirror(tmp_path)
303
+ _edit(root, STANDARDS_REL,
304
+ lambda t: t.replace("the decision follows the criteria, never a frequency "
305
+ "expectation (#574 B1: no base-rate anchoring, "
306
+ "qualitative or numeric)",
307
+ "rare (< 5% of submissions at top-tier journals)"))
308
+ code, err = _run2(root)
309
+ assert code == 1
310
+ assert ("base-rate anchor regression" in err
311
+ or "frequency-free first-pass acceptance" in err)
312
+
313
+
314
+ def test_m18_eic_acceptance_rate_restored(tmp_path):
315
+ root = _mirror(tmp_path)
316
+ _edit(root, SCORING_AGENTS[0],
317
+ lambda t: t.replace(
318
+ "never from acceptance-rate base rates",
319
+ "based on journal tier (Q1 journal acceptance rate ~10-15%)"))
320
+ code, err = _run2(root)
321
+ assert code == 1
322
+ assert "venue-criteria rule" in err or "acceptance-rate anchor regression" in err
323
+
324
+
325
+ def test_m21_schema6_anchor_enum_renamed(tmp_path):
326
+ """Renaming one anchor_type enum value in Schema 6 desyncs the machine-facing
327
+ contract from the template vocabulary — must fail."""
328
+ root = _mirror(tmp_path)
329
+ _edit(root, SCHEMAS_REL, lambda t: t.replace('"dataset"', '"data"'))
330
+ code, err = _run2(root)
331
+ assert code == 1
332
+ assert "anchor_type enum" in err
333
+
334
+
335
+ def test_m22_da_anchor_list_partially_edited(tmp_path):
336
+ """Dropping one type from ONE of the DA's two six-type spellings (footnote vs
337
+ discipline rule) must fail — both copies are pinned to ANCHOR_TYPES."""
338
+ root = _mirror(tmp_path)
339
+ _edit(root, DA_REL,
340
+ lambda t: t.replace("`text` / `table` / `figure` / `equation` / `dataset` / `absence`",
341
+ "`text` / `table` / `figure` / `equation` / `dataset`", 1))
342
+ code, err = _run2(root)
343
+ assert code == 1
344
+ assert "six-type anchor vocabulary" in err
345
+
346
+
347
+ def test_m23_schema6_confidence_row_deleted(tmp_path):
348
+ """Deleting the Schema 6 confidence row must fail — the A3 transport
349
+ contract's machine-facing field (codex round-1 P1: it was unpinned)."""
350
+ root = _mirror(tmp_path)
351
+ def drop_row(t: str) -> str:
352
+ return "\n".join(l for l in t.splitlines()
353
+ if not l.startswith("| `confidence` | integer |")) + "\n"
354
+ _edit(root, SCHEMAS_REL, drop_row)
355
+ code, err = _run2(root)
356
+ assert code == 1
357
+ assert "Schema 6 weakness field row" in err
358
+
359
+
360
+ def test_m24_da_minor_header_renamed(tmp_path):
361
+ """Renaming the MINOR table's Evidence Anchor column must fail even though
362
+ the shared footnote below still mentions 'Evidence Anchor' (codex round-1
363
+ P2: subsection-wide search was masked by the footnote)."""
364
+ root = _mirror(tmp_path)
365
+ _edit(root, DA_REL,
366
+ lambda t: t.replace("| # | Dimension | Issue Description | Evidence Anchor | Confidence |\n"
367
+ "|---|-----------|-------------------|-----------------|------------|",
368
+ "| # | Dimension | Issue Description | Location | Confidence |\n"
369
+ "|---|-----------|-------------------|----------|------------|"))
370
+ code, err = _run2(root)
371
+ assert code == 1
372
+ assert "MINOR table: missing column" in err
373
+
374
+
375
+ def test_m25_reworded_quota_caught(tmp_path):
376
+ """A quota re-introduced in different words than the retired literals must
377
+ still fail (codex round-1 P2: literal-only patterns were fail-open)."""
378
+ root = _mirror(tmp_path)
379
+ _edit(root, SCORING_AGENTS[1],
380
+ lambda t: t.replace("### Weaknesses\n",
381
+ "### Weaknesses\nYou must include at least 3 weaknesses.\n", 1))
382
+ code, err = _run2(root)
383
+ assert code == 1
384
+ assert "finding-quota regression" in err
385
+
386
+
387
+ def test_m26_skill_fake_diversity_restored(tmp_path):
388
+ root = _mirror(tmp_path)
389
+ _edit(root, SKILL_REL,
390
+ lambda t: t.replace("**Overlap suppression**", "**Duplicate criticisms across reviewers**")
391
+ .replace("unexecutable under blindness (Iron Rule #2) and destroys the corroboration signal",
392
+ "R1/R2/R3 raise identical points = fake diversity"))
393
+ code, err = _run2(root)
394
+ assert code == 1
395
+ assert ("overlap-prohibition regression" in err
396
+ or "overlap-suppression anti-pattern row" in err)
397
+
398
+
399
+ def test_m27_synth_mandatory_merit_restored(tmp_path):
400
+ root = _mirror(tmp_path)
401
+ _edit(root, SYNTH_REL,
402
+ lambda t: t.replace("Point out genuine merits where the reviewer cards found them — "
403
+ "never manufacture praise to soften a Reject (#574 A1/B1)",
404
+ "Point out the paper's merits (they always exist)"))
405
+ code, err = _run2(root)
406
+ assert code == 1
407
+ assert ("mandatory-merit regression" in err or "genuine-merits rule" in err)
408
+
409
+
410
+ def test_m28_da_critical_band_reverted(tmp_path):
411
+ root = _mirror(tmp_path)
412
+ _edit(root, DA_REL,
413
+ lambda t: t.replace("Fatal flaw in core argument or methodology that blocks acceptance "
414
+ "until fixed — the same decision-impact bar as the canonical Critical "
415
+ "(template § Severity Levels); state explicitly when you judge it "
416
+ "unfixable by revision",
417
+ "Fatal flaw in core argument or methodology that cannot be rescued by revision"))
418
+ code, err = _run2(root)
419
+ assert code == 1
420
+ assert ("DA CRITICAL decision-impact definition" in err
421
+ or "unfixable-only definition" in err)
422
+
423
+
424
+ def test_m30_contract_relocated_outside_phase2(tmp_path):
425
+ """Contract kept verbatim but moved out of the delivered Phase 2 subsection
426
+ (appended at end of file) — sprint calls would never receive it (codex
427
+ round-2 P1). Must fail."""
428
+ root = _mirror(tmp_path)
429
+ rel = SCORING_AGENTS[0]
430
+ def relocate(t: str) -> str:
431
+ start = t.index("**Finding Contract (#574 A1/A2/A3)**")
432
+ end = t.index(" - **Confidence**: 1-5 plus a one-phrase competence basis.", start)
433
+ end = t.index("\n", end) + 1
434
+ block = t[start:end]
435
+ return t.replace(block, "") + "\n---\n\n" + block
436
+ _edit(root, rel, relocate)
437
+ code, err = _run2(root)
438
+ assert code == 1
439
+ assert "OUTSIDE the delivered Phase 2" in err
440
+
441
+
442
+ def test_m31_minimum_of_quota_caught(tmp_path):
443
+ """'a minimum of 3 weaknesses' — the round-2 fail-open rewording — must fail."""
444
+ root = _mirror(tmp_path)
445
+ _edit(root, SCORING_AGENTS[2],
446
+ lambda t: t.replace("### Weaknesses\n",
447
+ "### Weaknesses\nYou must include a minimum of 3 weaknesses.\n", 1))
448
+ code, err = _run2(root)
449
+ assert code == 1
450
+ assert "finding-quota regression" in err
451
+
452
+
453
+ def test_m32_da_header_superset_rename(tmp_path):
454
+ """Renaming CRITICAL columns to supersets ('Evidence Anchor Note') defeats
455
+ substring membership — exact cell compare must fail it (round-2 P2)."""
456
+ root = _mirror(tmp_path)
457
+ def rename(t: str) -> str:
458
+ idx = t.index("#### CRITICAL")
459
+ head, tail = t[:idx], t[idx:]
460
+ tail = tail.replace("| Evidence Anchor | Confidence |",
461
+ "| Evidence Anchor Note | Confidence Basis |", 1)
462
+ return head + tail
463
+ _edit(root, DA_REL, rename)
464
+ code, err = _run2(root)
465
+ assert code == 1
466
+ assert "CRITICAL table: missing column" in err
467
+
468
+
469
+ def test_m33_synth_split_prior_restored(tmp_path):
470
+ root = _mirror(tmp_path)
471
+ _edit(root, SYNTH_REL,
472
+ lambda t: t.replace(
473
+ "the divergence is signal about a genuinely weak dimension — decide "
474
+ "from the criteria against that dimension (commonly Major Revision, "
475
+ "because a real weak dimension needs fixing), never from a strictness "
476
+ "prior (#574 B1)",
477
+ "lean toward Major Revision"))
478
+ code, err = _run2(root)
479
+ assert code == 1
480
+ assert ("directional split prior regression" in err
481
+ or "divergence-weighting edge case" in err)
482
+
483
+
484
+ def test_m34_decision_template_conservative_restored(tmp_path):
485
+ root = _mirror(tmp_path)
486
+ _edit(root, DECISION_TEMPLATE_REL,
487
+ lambda t: t.replace("unresolved-dissent principle (#574 B1)", "conservative principle"))
488
+ code, err = _run2(root)
489
+ assert code == 1
490
+ assert ("asymmetric arbitration regression" in err
491
+ or "arbitration rationale vocabulary" in err)
492
+
493
+
494
+ def test_m35_guided_mandatory_opener_restored(tmp_path):
495
+ root = _mirror(tmp_path)
496
+ _edit(root, GUIDED_REL,
497
+ lambda t: t.replace(
498
+ "First acknowledges the paper's genuine core strengths (1-2, when "
499
+ "they exist — never manufactured praise, #574 A1/B1)",
500
+ "First points out 1-2 core strengths of the paper (building confidence)"))
501
+ code, err = _run2(root)
502
+ assert code == 1
503
+ assert ("mandatory-strength opener regression" in err
504
+ or "guided-mode conditional-strengths opener" in err)
505
+
506
+
507
+ def test_m36_rqt_minimum_strength_restored(tmp_path):
508
+ root = _mirror(tmp_path)
509
+ _edit(root, RQT_REL,
510
+ lambda t: t.replace(
511
+ "Did I acknowledge every genuine strength I found — and manufacture "
512
+ "none? (Evidence-driven balance check, #574 A1/B1)",
513
+ "Did I identify at least one genuine strength? (Balance check)"))
514
+ code, err = _run2(root)
515
+ assert code == 1
516
+ assert ("minimum-strength check regression" in err
517
+ or "review-quality balance check" in err)
518
+
519
+
520
+ def test_m37_domain_advisory_disposition_restored(tmp_path):
521
+ root = _mirror(tmp_path)
522
+ _edit(root, DOMAIN_REL,
523
+ lambda t: t.replace(
524
+ "down-rate the finding's severity to **Minor** — the canonical enum "
525
+ "has no off-enum \"advisory\" tier (#574 A3) — and label it",
526
+ "down-rate the finding to advisory and label it"))
527
+ code, err = _run2(root)
528
+ assert code == 1
529
+ assert ("off-enum severity disposition regression" in err
530
+ or "field-norm enum disposition" in err)
531
+
532
+
533
+ def test_m38_strength_anchor_bullet_gutted(tmp_path):
534
+ """Removing the strengths-anchor bullet from the delivered contract lets
535
+ sprint reviews emit unanchored positive findings (round-3 P1)."""
536
+ root = _mirror(tmp_path)
537
+ _edit(root, SCORING_AGENTS[1],
538
+ lambda t: t.replace("- Every strength carries a typed Evidence Anchor too "
539
+ "(the same six-type vocabulary; a section-level locator "
540
+ "suffices for a strength, and a `text` anchor still "
541
+ "carries its short verbatim quote — the Schema 6 "
542
+ "conditional member applies to both polarities) — A2's "
543
+ "every-finding rule covers strengths and weaknesses "
544
+ "alike.\n", ""))
545
+ code, err = _run2(root)
546
+ assert code == 1
547
+ assert "Finding Contract body missing" in err
548
+
549
+
550
+ def test_m39_response_template_bounded_again(tmp_path):
551
+ """Restoring the W1-W5 bound in the response template can drop W6+ author
552
+ responses (round-3 P1)."""
553
+ root = _mirror(tmp_path)
554
+ _edit(root, RESPONSE_TEMPLATE_REL,
555
+ lambda t: t.replace("W1..Wn (every emitted weakness, unbounded — #574 A1)",
556
+ "W1-W5"))
557
+ code, err = _run2(root)
558
+ assert code == 1
559
+ assert ("bounded W-range mirror regression" in err
560
+ or "unbounded W1..Wn witness" in err)
561
+
562
+
563
+ def test_m40_three_to_five_quota_caught(tmp_path):
564
+ """'three to five weaknesses' — a worded range quota — must fail (round-3 P2)."""
565
+ root = _mirror(tmp_path)
566
+ _edit(root, SCORING_AGENTS[3],
567
+ lambda t: t.replace("### Weaknesses\n",
568
+ "### Weaknesses\nProvide three to five weaknesses.\n", 1))
569
+ code, err = _run2(root)
570
+ assert code == 1
571
+ assert "finding-quota regression" in err
572
+
573
+
574
+ def test_m41_plus_form_quota_caught(tmp_path):
575
+ """'3+ weaknesses' must fail (round-3 P2)."""
576
+ root = _mirror(tmp_path)
577
+ _edit(root, SCORING_AGENTS[0],
578
+ lambda t: t.replace("### Weaknesses\n",
579
+ "### Weaknesses\nAim for 3+ weaknesses.\n", 1))
580
+ code, err = _run2(root)
581
+ assert code == 1
582
+ assert "finding-quota regression" in err
583
+
584
+
585
+ def test_m42_da_decoy_table_before_output_format(tmp_path):
586
+ """A correctly-shaped decoy CRITICAL table BEFORE ## Output Format must not
587
+ satisfy the column check when the real table loses its columns (round-3 P2)."""
588
+ root = _mirror(tmp_path)
589
+ def decoy(t: str) -> str:
590
+ decoy_block = ("\n#### CRITICAL\n"
591
+ "| # | Dimension | Issue Description | Evidence Anchor | Confidence | Field-Norm Boundary | Evidence-Crossing Rationale |\n"
592
+ "|---|-----------|-------------------|-----------------|------------|---------------------|-----------------------------|\n\n")
593
+ t = t.replace("## Severity Classification", decoy_block + "## Severity Classification", 1)
594
+ idx = t.index("## Output Format")
595
+ head, tail = t[:idx], t[idx:]
596
+ tail = tail.replace("| Evidence Anchor | Confidence |", "| Location | Notes |", 1)
597
+ return head + tail
598
+ _edit(root, DA_REL, decoy)
599
+ code, err = _run2(root)
600
+ assert code == 1
601
+ assert "CRITICAL table: missing column" in err
602
+
603
+
604
+ def test_m43_perspective_assumption_quota_restored(tmp_path):
605
+ root = _mirror(tmp_path)
606
+ _edit(root, SCORING_AGENTS[3],
607
+ lambda t: t.replace(
608
+ "Assumption audit was actually performed; implicit assumptions "
609
+ "identified where they exist (an all-explicit paper legitimately "
610
+ "yields none — do not manufacture one, #574 A1)",
611
+ "Assumption audit has identified at least 1 implicit assumption"))
612
+ code, err = _run2(root)
613
+ assert code == 1
614
+ assert ("assumption-audit quota regression" in err
615
+ or "conditional assumption-audit gate" in err)
616
+
617
+
618
+ def test_m44_rqt_base_rate_restored(tmp_path):
619
+ root = _mirror(tmp_path)
620
+ _edit(root, RQT_REL,
621
+ lambda t: t.replace(
622
+ "Check the manuscript's claimed scope of generalization against its "
623
+ "sampling frame — a criterion-only comparison, never an "
624
+ "author-population base rate (#574 B1).",
625
+ "Most authors overstate generalizability."))
626
+ code, err = _run2(root)
627
+ assert code == 1
628
+ assert ("author-population base-rate regression" in err
629
+ or "criterion-only generalizability heuristic" in err)
630
+
631
+
632
+ def test_m45_da_concession_bridge_removed(tmp_path):
633
+ root = _mirror(tmp_path)
634
+ _edit(root, DA_REL,
635
+ lambda t: t.replace("a dispositive score-5 rebuttal always prevails "
636
+ "regardless of sequence", "the ladder applies"))
637
+ code, err = _run2(root)
638
+ assert code == 1
639
+ assert "concession-ladder B1 bridge" in err
640
+
641
+
642
+ def test_m46_noun_first_quota_caught(tmp_path):
643
+ """'### Weaknesses (at least 3)' — noun-first heading quota — must fail
644
+ (round-4 P2)."""
645
+ root = _mirror(tmp_path)
646
+ _edit(root, SCORING_AGENTS[1],
647
+ lambda t: t.replace("### Weaknesses\n", "### Weaknesses (at least 3)\n", 1))
648
+ code, err = _run2(root)
649
+ assert code == 1
650
+ assert "finding-quota regression" in err
651
+
652
+
653
+ def test_m47_single_mirror_rebounded(tmp_path):
654
+ """Rebounding ONLY the R3 mirror (W1–W4, en dash) must fail even though R2
655
+ keeps the unbounded witness (round-4 P2)."""
656
+ root = _mirror(tmp_path)
657
+ def rebound_r3(t: str) -> str:
658
+ idx = t.index("## Response to Reviewer 3")
659
+ head, tail = t[:idx], t[idx:]
660
+ tail = tail.replace("W1..Wn (every emitted weakness, unbounded — #574 A1)",
661
+ "W1–W4", 1)
662
+ return head + tail
663
+ _edit(root, RESPONSE_TEMPLATE_REL, rebound_r3)
664
+ code, err = _run2(root)
665
+ assert code == 1
666
+ assert ("unbounded W1..Wn witness" in err or "bounded W-range mirror regression" in err)
667
+
668
+
669
+ def test_m48_stats_triage_note_removed(tmp_path):
670
+ root = _mirror(tmp_path)
671
+ _edit(root, STATS_REL,
672
+ lambda t: t.replace("**Triage levels, not finding severities (#574 A3).**",
673
+ "**Severity legend.**"))
674
+ code, err = _run2(root)
675
+ assert code == 1
676
+ assert "red-flag triage note" in err
677
+
678
+
679
+ def test_m49_synth_lone_major_escalation_restored(tmp_path):
680
+ root = _mirror(tmp_path)
681
+ _edit(root, SYNTH_REL,
682
+ lambda t: t.replace(
683
+ "Conditions: a validated — or genuinely unresolved — Major issue "
684
+ "exists, or multiple Minor items accumulate to Major. A lone Major "
685
+ "recommendation goes through arbitration FIRST (One-Outlier "
686
+ "handling, `references/editorial_decision_standards.md`): an "
687
+ "outlier whose rationale arbitration finds insufficient does not "
688
+ "escalate the decision by itself (#574 B1)",
689
+ "Conditions: Any reviewer recommends Major Revision, or multiple "
690
+ "Minor items accumulate to Major"))
691
+ code, err = _run2(root)
692
+ assert code == 1
693
+ assert ("lone-Major arbitration rule" in err
694
+ or "unconditional lone-Major escalation regression" in err)
695
+
696
+
697
+ def test_m50_rcf_affirm_first_restored(tmp_path):
698
+ root = _mirror(tmp_path)
699
+ _edit(root, RCF_REL,
700
+ lambda t: t.replace("Acknowledge genuine strengths, distinguish decision-bearing "
701
+ "findings from copyediting, and avoid finding quotas.",
702
+ "List weaknesses only."))
703
+ code, err = _run2(root)
704
+ assert code == 1
705
+ assert "conditional hypercriticism guidance" in err
706
+
707
+
708
+ def test_m51_schema6_strengths_destructured(tmp_path):
709
+ root = _mirror(tmp_path)
710
+ _edit(root, SCHEMAS_REL,
711
+ lambda t: t.replace("Strength objects `{description: string, "
712
+ "evidence_anchor: object}`",
713
+ "bare strings"))
714
+ code, err = _run2(root)
715
+ assert code == 1
716
+ assert "structured strengths" in err
717
+
718
+
719
+ def test_m52_direct_count_quota_caught(tmp_path):
720
+ """'List 3 weaknesses' — an imperative direct count — must fail (round-5 P2)."""
721
+ root = _mirror(tmp_path)
722
+ _edit(root, SCORING_AGENTS[0],
723
+ lambda t: t.replace("### Weaknesses\n", "### Weaknesses\nList 3 weaknesses.\n", 1))
724
+ code, err = _run2(root)
725
+ assert code == 1
726
+ assert "finding-quota regression" in err
727
+
728
+
729
+ def test_m53_maximum_quota_caught(tmp_path):
730
+ """'no more than 5 findings' — an upper bound — must fail (round-5 P2)."""
731
+ root = _mirror(tmp_path)
732
+ _edit(root, SCORING_AGENTS[1],
733
+ lambda t: t.replace("### Weaknesses\n",
734
+ "### Weaknesses\nReport no more than 5 findings.\n", 1))
735
+ code, err = _run2(root)
736
+ assert code == 1
737
+ assert "finding-quota regression" in err
738
+
739
+
740
+ def test_m54_mirror_duplicated_and_deleted(tmp_path):
741
+ """Duplicating the unbounded witness in R2 while deleting it from R3 keeps
742
+ the file-wide count at 2 — the per-mirror check must still fail (round-5 P2)."""
743
+ root = _mirror(tmp_path)
744
+ w = "W1..Wn (every emitted weakness, unbounded — #574 A1)"
745
+ def shuffle(t: str) -> str:
746
+ r3 = t.index("## Response to Reviewer 3")
747
+ head, tail = t[:r3], t[r3:]
748
+ head = head.replace(w, w + " / " + w, 1) # R2 now carries it twice
749
+ tail = tail.replace(w, "all weaknesses", 1) # R3 loses it
750
+ return head + tail
751
+ _edit(root, RESPONSE_TEMPLATE_REL, shuffle)
752
+ code, err = _run2(root)
753
+ assert code == 1
754
+ assert "exactly once" in err
755
+
756
+
757
+ def test_m55_wide_bounded_range_caught(tmp_path):
758
+ """'W1-W10' (multi-digit endpoint) must fail (round-5 P2)."""
759
+ root = _mirror(tmp_path)
760
+ _edit(root, RESPONSE_TEMPLATE_REL,
761
+ lambda t: t.replace("W1..Wn (every emitted weakness, unbounded — #574 A1)",
762
+ "W1-W10", 1))
763
+ code, err = _run2(root)
764
+ assert code == 1
765
+ assert ("bounded W-range mirror regression" in err or "exactly once" in err)
766
+
767
+
768
+ def test_m56_schema6_row_migrated_to_schema7(tmp_path):
769
+ """Moving the confidence row OUT of Schema 6 (re-adding it under Schema 7)
770
+ keeps a file-wide search green — the Schema-6-scoped check must fail
771
+ (round-5 P2)."""
772
+ root = _mirror(tmp_path)
773
+ def migrate(t: str) -> str:
774
+ row = next(l for l in t.splitlines() if l.startswith("| `confidence` | integer |"))
775
+ t = t.replace(row + "\n", "")
776
+ return t.replace("## Schema 7: Revision Roadmap (reviewer -> academic-paper revision)",
777
+ "## Schema 7: Revision Roadmap (reviewer -> academic-paper revision)\n\n" + row)
778
+ _edit(root, SCHEMAS_REL, migrate)
779
+ code, err = _run2(root)
780
+ assert code == 1
781
+ assert "Schema 6 weakness field row" in err
782
+
783
+
784
+ def test_m57_up_to_maximum_quota_caught(tmp_path):
785
+ """'Report up to five findings' — an accidental maximum — must fail
786
+ (round-6 P2)."""
787
+ root = _mirror(tmp_path)
788
+ _edit(root, SCORING_AGENTS[2],
789
+ lambda t: t.replace("### Weaknesses\n",
790
+ "### Weaknesses\nReport up to five findings.\n", 1))
791
+ code, err = _run2(root)
792
+ assert code == 1
793
+ assert "finding-quota regression" in err
794
+
795
+
796
+ def test_m58_legit_question_count_does_not_false_fire(tmp_path):
797
+ """'### Questions (2-4 items)' is a NON-finding count and must PASS —
798
+ the lint must not block legitimate prompt edits (round-6 P2)."""
799
+ root = _mirror(tmp_path)
800
+ _edit(root, SCORING_AGENTS[0],
801
+ lambda t: t.replace("### Questions for Authors\n",
802
+ "### Questions for Authors (2-4 items)\n", 1))
803
+ code, err = _run2(root)
804
+ assert code == 0, f"legitimate question count false-fired:\n{err}"
805
+
806
+
807
+ def test_m59_legit_between_prose_does_not_false_fire(tmp_path):
808
+ """'Distinguish between major and minor issues' is ordinary prose and must
809
+ PASS (round-6 P2)."""
810
+ root = _mirror(tmp_path)
811
+ _edit(root, SCORING_AGENTS[1],
812
+ lambda t: t.replace("### Weaknesses\n",
813
+ "### Weaknesses\nDistinguish between major and minor issues.\n", 1))
814
+ code, err = _run2(root)
815
+ assert code == 0, f"legitimate prose false-fired:\n{err}"
816
+
817
+
818
+ def test_m60_subclaim_severity_inheritance_removed(tmp_path):
819
+ root = _mirror(tmp_path)
820
+ _edit(root, SYNTH_REL,
821
+ lambda t: t.replace("All sub-claims decomposed from one parent share "
822
+ "the parent's transported severity",
823
+ "Sub-claims may be re-rated individually"))
824
+ code, err = _run2(root)
825
+ assert code == 1
826
+ assert "sub-claim severity inheritance" in err
827
+
828
+
829
+ def test_m61_cross_model_da_quota_restored(tmp_path):
830
+ """Restoring 'Find the 3 most serious weaknesses' in the cross-model DA
831
+ prompt must fail (round-7 P1)."""
832
+ root = _mirror(tmp_path)
833
+ _edit(root, XM_REL,
834
+ lambda t: t.replace(
835
+ "Find the most serious weaknesses — every one the evidence supports,\n"
836
+ " ranked most severe first; no fixed count, and do not pad to reach one\n"
837
+ " (#574 A1).",
838
+ "Find the 3 most serious weaknesses."))
839
+ code, err = _run2(root)
840
+ assert code == 1
841
+ assert ("cross-model DA fixed-count regression" in err
842
+ or "cross-model DA no-quota prompt" in err)
843
+
844
+
845
+ def test_m62_synth_roadmap_severity_column_dropped(tmp_path):
846
+ """Dropping the Severity column from a roadmap table lets transported
847
+ metadata die in the working inventory (round-7 P1)."""
848
+ root = _mirror(tmp_path)
849
+ _edit(root, SYNTH_REL,
850
+ lambda t: t.replace(
851
+ "| Transport ref | Revision Item | Sub-Claim(s) | Severity | Evidence Anchor | Confidence | Source | Obligation class | Cost scope | Bounded consequence |",
852
+ "| Transport ref | Revision Item | Sub-Claim(s) | Source | Obligation class | Cost scope | Bounded consequence |", 1))
853
+ code, err = _run2(root)
854
+ assert code == 1
855
+ assert "transported-metadata columns" in err
856
+
857
+
858
+ def test_m63_skill_unconditional_veto_restored(tmp_path):
859
+ root = _mirror(tmp_path)
860
+ _edit(root, SKILL_REL,
861
+ lambda t: t.replace(
862
+ "Every Devil's Advocate CRITICAL issue is adjudicated visibly in the "
863
+ "Editorial Decision — a validated or genuinely unresolved one blocks "
864
+ "silent Accept finalization; under a sprint contract the mechanical "
865
+ "Accept remains unchanged and `[DA-CRITICAL-VS-ACCEPT: <n> "
866
+ "validated/unresolved]` escalates to the user. One the Journal-Fit Reviewer adjudicates "
867
+ "and rejects is recorded with its "
868
+ "rejection rationale and does not veto by itself (#574 B1: an "
869
+ "unvalidated negative claim carries the same evidence burden as a "
870
+ "positive one). Silently bypassing a DA CRITICAL is never allowed.",
871
+ "If the Devil's Advocate finds CRITICAL issues, the Editorial "
872
+ "Decision cannot be Accept."))
873
+ code, err = _run2(root)
874
+ assert code == 1
875
+ assert ("unconditional DA-CRITICAL veto regression" in err
876
+ or "adjudication wording missing" in err)
877
+
878
+
879
+ def test_m64_da_delivered_contract_weakened(tmp_path):
880
+ """Weakening the DA's delivered contract modality (require → may use) must
881
+ fail even though stronger rules survive in undelivered sections (round-7 P1)."""
882
+ root = _mirror(tmp_path)
883
+ _edit(root, DA_REL,
884
+ lambda t: t.replace("CRITICAL/MAJOR require an adequate, applicable one",
885
+ "CRITICAL/MAJOR may use one", 1))
886
+ code, err = _run2(root)
887
+ assert code == 1
888
+ assert "does not match the canonical verbatim block" in err
889
+
890
+
891
+ def test_m65_modifier_quota_caught(tmp_path):
892
+ """'Identify 3 major issues' — count + modifier + noun — must fail (round-7 P2)."""
893
+ root = _mirror(tmp_path)
894
+ _edit(root, SCORING_AGENTS[3],
895
+ lambda t: t.replace("### Weaknesses\n",
896
+ "### Weaknesses\nIdentify 3 major issues.\n", 1))
897
+ code, err = _run2(root)
898
+ assert code == 1
899
+ assert "finding-quota regression" in err
900
+
901
+
902
+ def test_m66_scoring_points_do_not_false_fire(tmp_path):
903
+ """'Award at most 5 points for clarity' is scoring language, not a finding
904
+ quota — must PASS (round-7 P2)."""
905
+ root = _mirror(tmp_path)
906
+ _edit(root, SCORING_AGENTS[0],
907
+ lambda t: t.replace("### Weaknesses\n",
908
+ "### Weaknesses\nAward at most 5 points for clarity.\n", 1))
909
+ code, err = _run2(root)
910
+ assert code == 0, f"scoring points false-fired:\n{err}"
911
+
912
+
913
+ def test_m67_limit_cap_quota_caught(tmp_path):
914
+ """'Limit findings to five' / 'Cap weaknesses at 5' must fail (round-8 P2)."""
915
+ for phrase in ("Limit findings to five.", "Cap weaknesses at 5."):
916
+ root = _mirror(tmp_path / phrase[:4].strip().lower())
917
+ _edit(root, SCORING_AGENTS[1],
918
+ lambda t, ph=phrase: t.replace("### Weaknesses\n", f"### Weaknesses\n{ph}\n", 1))
919
+ code, err = _run2(root)
920
+ assert code == 1, f"{phrase!r} passed the lint"
921
+ assert "finding-quota regression" in err
922
+
923
+
924
+ def test_m68_schema7_severity_field_deleted(tmp_path):
925
+ """Deleting the Schema 7 RoadmapItem severity row breaks the machine
926
+ handoff of transported metadata (round-8 P1)."""
927
+ root = _mirror(tmp_path)
928
+ def drop(t: str) -> str:
929
+ return "\n".join(l for l in t.splitlines()
930
+ if "Transported Schema 6 finding severity" not in l) + "\n"
931
+ _edit(root, SCHEMAS_REL, drop)
932
+ code, err = _run2(root)
933
+ assert code == 1
934
+ assert "Schema 7 RoadmapItem transported-field row" in err
935
+
936
+
937
+ def test_m69_template_suggested_columns_dropped(tmp_path):
938
+ """The decision template's Suggested table losing its transported columns
939
+ must fail (round-8 P1: the template mirror, not only the synthesizer)."""
940
+ root = _mirror(tmp_path)
941
+ _edit(root, DECISION_TEMPLATE_REL,
942
+ lambda t: t.replace(
943
+ "| Transport ref | Revision Item | Sub-Claim(s) | Severity | Evidence Anchor | Confidence | Source Reviewer | Obligation class | Cost scope | Bounded consequence |",
944
+ "| Transport ref | Revision Item | Sub-Claim(s) | Source Reviewer | Obligation class | Cost scope | Bounded consequence |"))
945
+ code, err = _run2(root)
946
+ assert code == 1
947
+ assert "transported-metadata columns" in err
948
+
949
+
950
+ def test_m70_standards_qualitative_base_rate_restored(tmp_path):
951
+ root = _mirror(tmp_path)
952
+ _edit(root, STANDARDS_REL,
953
+ lambda t: t.replace("never a frequency expectation",
954
+ "uncommon in practice, but judged on the criteria"))
955
+ code, err = _run2(root)
956
+ assert code == 1
957
+ assert ("qualitative base-rate cue regression" in err
958
+ or "frequency-free first-pass acceptance" in err)
959
+
960
+
961
+ def test_m71_schema7_anchor_row_deleted(tmp_path):
962
+ """Deleting the Schema 7 evidence_anchor row must fail — round-9 P1: a
963
+ severity-only witness left the other transported fields deletable."""
964
+ root = _mirror(tmp_path)
965
+ def drop(t: str) -> str:
966
+ keep = []
967
+ in_s7 = False
968
+ for l in t.splitlines():
969
+ if l.startswith("## Schema 7:"):
970
+ in_s7 = True
971
+ elif l.startswith("## Schema 8:"):
972
+ in_s7 = False
973
+ if in_s7 and l.startswith("| `evidence_anchor` | object |"):
974
+ continue
975
+ keep.append(l)
976
+ return "\n".join(keep) + "\n"
977
+ _edit(root, SCHEMAS_REL, drop)
978
+ code, err = _run2(root)
979
+ assert code == 1
980
+ assert "Schema 7 RoadmapItem transported-field row" in err
981
+
982
+
983
+ def test_m72_xm_prompt_quota_added(tmp_path):
984
+ """A quota added to the cross-model DA prompt while the canonical
985
+ no-fixed-count sentence survives must fail (round-9 P2)."""
986
+ root = _mirror(tmp_path)
987
+ _edit(root, XM_REL,
988
+ lambda t: t.replace(" - What the weakness is",
989
+ " Report up to five findings.\n - What the weakness is", 1))
990
+ code, err = _run2(root)
991
+ assert code == 1
992
+ assert "finding-quota regression in the cross-model DA prompt" in err
993
+
994
+
995
+ def test_m73_between_range_with_modifier_caught(tmp_path):
996
+ """'Provide between three and five major weaknesses' must fail (round-9 P2)."""
997
+ root = _mirror(tmp_path)
998
+ _edit(root, SCORING_AGENTS[0],
999
+ lambda t: t.replace("### Weaknesses\n",
1000
+ "### Weaknesses\nProvide between three and five major weaknesses.\n", 1))
1001
+ code, err = _run2(root)
1002
+ assert code == 1
1003
+ assert "finding-quota regression" in err
1004
+
1005
+
1006
+ def test_m74_da_minor_confidence_dropped(tmp_path):
1007
+ """The DA MINOR table losing its Confidence column must fail (round-9 P2:
1008
+ a MINOR issue that becomes a Suggested Revision transports confidence)."""
1009
+ root = _mirror(tmp_path)
1010
+ def strip(t: str) -> str:
1011
+ return t.replace("| # | Dimension | Issue Description | Evidence Anchor | Confidence |\n"
1012
+ "|---|-----------|-------------------|-----------------|------------|",
1013
+ "| # | Dimension | Issue Description | Evidence Anchor |\n"
1014
+ "|---|-----------|-------------------|-----------------|", 1)
1015
+ _edit(root, DA_REL, strip)
1016
+ code, err = _run2(root)
1017
+ assert code == 1
1018
+ assert "MINOR table: missing column" in err
1019
+
1020
+
1021
+ def test_m75_top_n_quota_caught(tmp_path):
1022
+ """'Report the top 3 weaknesses' — a fixed selection count — must fail
1023
+ (round-10 P2: the exact retired cross-model wording class, now caught on
1024
+ every scanned surface)."""
1025
+ root = _mirror(tmp_path)
1026
+ _edit(root, SCORING_AGENTS[2],
1027
+ lambda t: t.replace("### Weaknesses\n",
1028
+ "### Weaknesses\nReport the top 3 weaknesses.\n", 1))
1029
+ code, err = _run2(root)
1030
+ assert code == 1
1031
+ assert "finding-quota regression" in err
1032
+
1033
+
1034
+ def test_m76_field_analyst_register_softening_restored(tmp_path):
1035
+ root = _mirror(tmp_path)
1036
+ _edit(root, FIELD_ANALYST_REL,
1037
+ lambda t: t.replace(
1038
+ '- Suggest reviewers adopt "developmental feedback" as the REGISTER — '
1039
+ "the recommendation itself stays evidence-based against the criteria "
1040
+ "(#574 B1: tone changes wording, never the verdict)",
1041
+ '- Suggest reviewers adopt "developmental feedback" as the main '
1042
+ 'approach, rather than strict "accept/reject" judgment'))
1043
+ code, err = _run2(root)
1044
+ assert code == 1
1045
+ assert ("register-softens-verdict regression" in err
1046
+ or "developmental-register rule" in err)
1047
+
1048
+
1049
+ def test_m77_schema7_semantics_rewritten(tmp_path):
1050
+ """Rewriting a Schema 7 field's transport semantics (keeping the row) must
1051
+ fail — row existence alone was fail-open (round-10 P2)."""
1052
+ root = _mirror(tmp_path)
1053
+ _edit(root, SCHEMAS_REL,
1054
+ lambda t: t.replace("Fallback provenance for `confidence` — the verbatim tag",
1055
+ "A synthesizer-generated confidence estimate"))
1056
+ code, err = _run2(root)
1057
+ assert code == 1
1058
+ assert "Schema 7 RoadmapItem transported-field row" in err
1059
+
1060
+
1061
+ def test_m78_selection_verb_quota_caught(tmp_path):
1062
+ """'Select three weaknesses' — a selection-verb direct count — must fail
1063
+ (round-11 P2)."""
1064
+ root = _mirror(tmp_path)
1065
+ _edit(root, SCORING_AGENTS[1],
1066
+ lambda t: t.replace("### Weaknesses\n",
1067
+ "### Weaknesses\nSelect three weaknesses.\n", 1))
1068
+ code, err = _run2(root)
1069
+ assert code == 1
1070
+ assert "finding-quota regression" in err
1071
+
1072
+
1073
+ def test_m29_calibration_bridge_removed(tmp_path):
1074
+ root = _mirror(tmp_path)
1075
+ _edit(root, CALIBRATION_REL,
1076
+ lambda t: t.replace("External studies can motivate hypotheses about leniency or harshness",
1077
+ "External studies set the decision prior")
1078
+ .replace("must not be imported as correction factors, thresholds, or target-profile measurements",
1079
+ "may be imported as a threshold"))
1080
+ code, err = _run2(root)
1081
+ assert code == 1
1082
+ assert "external-evidence scope note" in err
1083
+
1084
+
1085
+ # --- P0-3 residue ---------------------------------------------------------------------
1086
+
1087
+ def test_m19_skill_overlap_prohibition_restored(tmp_path):
1088
+ root = _mirror(tmp_path)
1089
+ _edit(root, SKILL_REL,
1090
+ lambda t: t.replace("overlapping findings may corroborate one another, but role/persona separation is not evidence of independent errors",
1091
+ "no duplicate criticisms"))
1092
+ code, err = _run2(root)
1093
+ assert code == 1
1094
+ assert ("overlap-corroboration standard" in err
1095
+ or "overlap-prohibition regression" in err)
1096
+
1097
+
1098
+ # --- invocation error --------------------------------------------------------------
1099
+
1100
+ def test_m20_missing_file_exits_2(tmp_path):
1101
+ root = _mirror(tmp_path)
1102
+ (root / SCHEMAS_REL).unlink()
1103
+ assert _run(root) == 2
1104
+
1105
+
1106
+ if __name__ == "__main__":
1107
+ sys.exit(pytest.main([__file__, "-v"]))