psyclaw 0.27.22 → 0.28.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1048) hide show
  1. package/README.md +11 -5
  2. package/dist/apps/panel/index.html +2 -2
  3. package/dist/src/adapters/pi/extension.js +225 -92
  4. package/dist/src/adapters/pi/extension.js.map +1 -1
  5. package/dist/src/agents/import.js +44 -32
  6. package/dist/src/agents/import.js.map +1 -1
  7. package/dist/src/analysis/hooks.d.ts +1 -0
  8. package/dist/src/analysis/hooks.js +20 -1
  9. package/dist/src/analysis/hooks.js.map +1 -1
  10. package/dist/src/ars/bridge.d.ts +20 -0
  11. package/dist/src/ars/bridge.js +132 -0
  12. package/dist/src/ars/bridge.js.map +1 -0
  13. package/dist/src/ars/contracts.d.ts +55 -0
  14. package/dist/src/ars/contracts.js +2 -0
  15. package/dist/src/ars/contracts.js.map +1 -0
  16. package/dist/src/ars/panel-plan.d.ts +4 -0
  17. package/dist/src/ars/panel-plan.js +11 -0
  18. package/dist/src/ars/panel-plan.js.map +1 -0
  19. package/dist/src/ars/pi-panel-executor.d.ts +30 -0
  20. package/dist/src/ars/pi-panel-executor.js +140 -0
  21. package/dist/src/ars/pi-panel-executor.js.map +1 -0
  22. package/dist/src/ars/profile.d.ts +36 -0
  23. package/dist/src/ars/profile.js +119 -0
  24. package/dist/src/ars/profile.js.map +1 -0
  25. package/dist/src/ars/re-review.d.ts +22 -0
  26. package/dist/src/ars/re-review.js +172 -0
  27. package/dist/src/ars/re-review.js.map +1 -0
  28. package/dist/src/branding.d.ts +2 -4
  29. package/dist/src/branding.js +3 -5
  30. package/dist/src/branding.js.map +1 -1
  31. package/dist/src/bundled-tools.d.ts +3 -0
  32. package/dist/src/bundled-tools.js +21 -0
  33. package/dist/src/bundled-tools.js.map +1 -0
  34. package/dist/src/chat.js +6 -5
  35. package/dist/src/chat.js.map +1 -1
  36. package/dist/src/creation/contracts.d.ts +38 -0
  37. package/dist/src/creation/contracts.js +2 -0
  38. package/dist/src/creation/contracts.js.map +1 -0
  39. package/dist/src/creation/service.d.ts +7 -0
  40. package/dist/src/creation/service.js +196 -0
  41. package/dist/src/creation/service.js.map +1 -0
  42. package/dist/src/index.d.ts +10 -0
  43. package/dist/src/index.js +10 -0
  44. package/dist/src/index.js.map +1 -1
  45. package/dist/src/install/installer.js +32 -10
  46. package/dist/src/install/installer.js.map +1 -1
  47. package/dist/src/orchestration/personas.d.ts +15 -0
  48. package/dist/src/orchestration/personas.js +51 -0
  49. package/dist/src/orchestration/personas.js.map +1 -0
  50. package/dist/src/orchestration/pi-executor.d.ts +1 -0
  51. package/dist/src/orchestration/pi-executor.js +1 -1
  52. package/dist/src/orchestration/pi-executor.js.map +1 -1
  53. package/dist/src/panel/extension.js +29 -8
  54. package/dist/src/panel/extension.js.map +1 -1
  55. package/dist/src/panel/server.js +14 -5
  56. package/dist/src/panel/server.js.map +1 -1
  57. package/dist/src/project/paths.d.ts +3 -0
  58. package/dist/src/project/paths.js +7 -0
  59. package/dist/src/project/paths.js.map +1 -1
  60. package/dist/src/rules/user-rules.d.ts +8 -0
  61. package/dist/src/rules/user-rules.js +36 -0
  62. package/dist/src/rules/user-rules.js.map +1 -0
  63. package/dist/src/skills/contracts.d.ts +4 -4
  64. package/dist/src/skills/recommended.js +1 -1
  65. package/dist/src/skills/registry.js +49 -28
  66. package/dist/src/skills/registry.js.map +1 -1
  67. package/dist/src/style/cli-ui.js +0 -1
  68. package/dist/src/style/cli-ui.js.map +1 -1
  69. package/package.json +14 -3
  70. package/scripts/rebrand-pi.mjs +6 -0
  71. package/skills/recommended/catalog.json +2 -11
  72. package/vendor/ars/.claude/CLAUDE.md +371 -0
  73. package/vendor/ars/.command-invariants.toml +24 -0
  74. package/vendor/ars/CITATION.cff +35 -0
  75. package/vendor/ars/LICENSE +417 -0
  76. package/vendor/ars/MODE_REGISTRY.md +76 -0
  77. package/vendor/ars/NOTICE.md +26 -0
  78. package/vendor/ars/POSITIONING.md +99 -0
  79. package/vendor/ars/PSYCLAW_SOURCE.json +10 -0
  80. package/vendor/ars/README.md +751 -0
  81. package/vendor/ars/SECURITY.md +52 -0
  82. package/vendor/ars/THIRD_PARTY.md +70 -0
  83. package/vendor/ars/academic-paper/SKILL.md +542 -0
  84. package/vendor/ars/academic-paper/agents/abstract_bilingual_agent.md +171 -0
  85. package/vendor/ars/academic-paper/agents/argument_builder_agent.md +276 -0
  86. package/vendor/ars/academic-paper/agents/citation_compliance_agent.md +422 -0
  87. package/vendor/ars/academic-paper/agents/draft_writer_agent.md +656 -0
  88. package/vendor/ars/academic-paper/agents/formatter_agent.md +999 -0
  89. package/vendor/ars/academic-paper/agents/intake_agent.md +393 -0
  90. package/vendor/ars/academic-paper/agents/literature_strategist_agent.md +626 -0
  91. package/vendor/ars/academic-paper/agents/peer_reviewer_agent.md +516 -0
  92. package/vendor/ars/academic-paper/agents/revision_coach_agent.md +334 -0
  93. package/vendor/ars/academic-paper/agents/socratic_mentor_agent.md +527 -0
  94. package/vendor/ars/academic-paper/agents/structure_architect_agent.md +401 -0
  95. package/vendor/ars/academic-paper/agents/visualization_agent.md +441 -0
  96. package/vendor/ars/academic-paper/examples/chinese_paper_example.md +278 -0
  97. package/vendor/ars/academic-paper/examples/clinical_citation_verification_checklist.md +95 -0
  98. package/vendor/ars/academic-paper/examples/clinical_epistemic_status_example.md +100 -0
  99. package/vendor/ars/academic-paper/examples/commitment_ledger_example.md +147 -0
  100. package/vendor/ars/academic-paper/examples/imrad_hei_example.md +234 -0
  101. package/vendor/ars/academic-paper/examples/literature_review_example.md +260 -0
  102. package/vendor/ars/academic-paper/examples/plan_mode_guided_writing.md +600 -0
  103. package/vendor/ars/academic-paper/examples/revision_mode_example.md +344 -0
  104. package/vendor/ars/academic-paper/examples/revision_recovery_example.md +506 -0
  105. package/vendor/ars/academic-paper/examples/version_family_reconciliation_example.md +89 -0
  106. package/vendor/ars/academic-paper/references/abstract_writing_guide.md +169 -0
  107. package/vendor/ars/academic-paper/references/academic_writing_style.md +188 -0
  108. package/vendor/ars/academic-paper/references/anti_leakage_protocol.md +83 -0
  109. package/vendor/ars/academic-paper/references/apa7_chinese_citation_guide.md +364 -0
  110. package/vendor/ars/academic-paper/references/apa7_extended_guide.md +198 -0
  111. package/vendor/ars/academic-paper/references/changelog.md +11 -0
  112. package/vendor/ars/academic-paper/references/citation_format_switcher.md +228 -0
  113. package/vendor/ars/academic-paper/references/committee_correspondence_protocol.md +158 -0
  114. package/vendor/ars/academic-paper/references/credit_authorship_guide.md +308 -0
  115. package/vendor/ars/academic-paper/references/disclosure_mode_protocol.md +478 -0
  116. package/vendor/ars/academic-paper/references/domain_evidence_profiles.md +38 -0
  117. package/vendor/ars/academic-paper/references/failure_paths.md +349 -0
  118. package/vendor/ars/academic-paper/references/funding_statement_guide.md +319 -0
  119. package/vendor/ars/academic-paper/references/hei_domain_glossary.md +169 -0
  120. package/vendor/ars/academic-paper/references/intro_title_rhetoric_guide.md +114 -0
  121. package/vendor/ars/academic-paper/references/journal_submission_guide.md +249 -0
  122. package/vendor/ars/academic-paper/references/latex_template_reference.md +378 -0
  123. package/vendor/ars/academic-paper/references/mode_selection_guide.md +378 -0
  124. package/vendor/ars/academic-paper/references/paper_structure_patterns.md +330 -0
  125. package/vendor/ars/academic-paper/references/plan_mode_protocol.md +112 -0
  126. package/vendor/ars/academic-paper/references/policy_anchor_disclosure_protocol.md +200 -0
  127. package/vendor/ars/academic-paper/references/policy_anchor_table.md +157 -0
  128. package/vendor/ars/academic-paper/references/revision_patch_protocol.md +173 -0
  129. package/vendor/ars/academic-paper/references/statistical_visualization_standards.md +750 -0
  130. package/vendor/ars/academic-paper/references/venue_disclosure_policies.md +259 -0
  131. package/vendor/ars/academic-paper/references/vlm_figure_verification.md +126 -0
  132. package/vendor/ars/academic-paper/references/workflow_phase_details.md +135 -0
  133. package/vendor/ars/academic-paper/references/writing_judgment_framework.md +59 -0
  134. package/vendor/ars/academic-paper/references/writing_quality_check.md +173 -0
  135. package/vendor/ars/academic-paper/templates/bilingual_abstract_template.md +78 -0
  136. package/vendor/ars/academic-paper/templates/case_study_template.md +129 -0
  137. package/vendor/ars/academic-paper/templates/conference_paper_template.md +108 -0
  138. package/vendor/ars/academic-paper/templates/credit_statement_template.md +132 -0
  139. package/vendor/ars/academic-paper/templates/funding_statement_template.md +290 -0
  140. package/vendor/ars/academic-paper/templates/imrad_template.md +183 -0
  141. package/vendor/ars/academic-paper/templates/latex_article_template.tex +199 -0
  142. package/vendor/ars/academic-paper/templates/literature_review_template.md +135 -0
  143. package/vendor/ars/academic-paper/templates/policy_brief_template.md +139 -0
  144. package/vendor/ars/academic-paper/templates/revision_tracking_template.md +199 -0
  145. package/vendor/ars/academic-paper/templates/theoretical_paper_template.md +119 -0
  146. package/vendor/ars/academic-paper-reviewer/SKILL.md +491 -0
  147. package/vendor/ars/academic-paper-reviewer/agents/devils_advocate_reviewer_agent.md +443 -0
  148. package/vendor/ars/academic-paper-reviewer/agents/domain_reviewer_agent.md +412 -0
  149. package/vendor/ars/academic-paper-reviewer/agents/editorial_synthesizer_agent.md +478 -0
  150. package/vendor/ars/academic-paper-reviewer/agents/eic_agent.md +339 -0
  151. package/vendor/ars/academic-paper-reviewer/agents/field_analyst_agent.md +221 -0
  152. package/vendor/ars/academic-paper-reviewer/agents/methodology_reviewer_agent.md +449 -0
  153. package/vendor/ars/academic-paper-reviewer/agents/perspective_reviewer_agent.md +427 -0
  154. package/vendor/ars/academic-paper-reviewer/examples/hei_paper_review_example.md +391 -0
  155. package/vendor/ars/academic-paper-reviewer/examples/interdisciplinary_review_example.md +299 -0
  156. package/vendor/ars/academic-paper-reviewer/examples/subclaim_decomposition_example.md +80 -0
  157. package/vendor/ars/academic-paper-reviewer/references/calibration_mode_protocol.md +256 -0
  158. package/vendor/ars/academic-paper-reviewer/references/changelog.md +10 -0
  159. package/vendor/ars/academic-paper-reviewer/references/editorial_decision_standards.md +236 -0
  160. package/vendor/ars/academic-paper-reviewer/references/guided_mode_protocol.md +34 -0
  161. package/vendor/ars/academic-paper-reviewer/references/integration_guide.md +15 -0
  162. package/vendor/ars/academic-paper-reviewer/references/quality_rubrics.md +84 -0
  163. package/vendor/ars/academic-paper-reviewer/references/re_review_mode_protocol.md +340 -0
  164. package/vendor/ars/academic-paper-reviewer/references/review_criteria_framework.md +98 -0
  165. package/vendor/ars/academic-paper-reviewer/references/review_panel_provenance_protocol.md +197 -0
  166. package/vendor/ars/academic-paper-reviewer/references/review_quality_thinking.md +58 -0
  167. package/vendor/ars/academic-paper-reviewer/references/reviewer_sprint_prompt_source.md +324 -0
  168. package/vendor/ars/academic-paper-reviewer/references/sprint_contract_protocol.md +296 -0
  169. package/vendor/ars/academic-paper-reviewer/references/statistical_reporting_standards.md +505 -0
  170. package/vendor/ars/academic-paper-reviewer/references/top_journals_by_field.md +206 -0
  171. package/vendor/ars/academic-paper-reviewer/templates/editorial_decision_template.md +235 -0
  172. package/vendor/ars/academic-paper-reviewer/templates/peer_review_report_template.md +305 -0
  173. package/vendor/ars/academic-paper-reviewer/templates/revision_response_template.md +248 -0
  174. package/vendor/ars/academic-pipeline/SKILL.md +736 -0
  175. package/vendor/ars/academic-pipeline/agents/claim_ref_alignment_audit_agent.md +382 -0
  176. package/vendor/ars/academic-pipeline/agents/collaboration_depth_agent.md +164 -0
  177. package/vendor/ars/academic-pipeline/agents/integrity_verification_agent.md +870 -0
  178. package/vendor/ars/academic-pipeline/agents/pipeline_orchestrator_agent.md +1379 -0
  179. package/vendor/ars/academic-pipeline/agents/state_tracker_agent.md +622 -0
  180. package/vendor/ars/academic-pipeline/examples/full_pipeline_example.md +482 -0
  181. package/vendor/ars/academic-pipeline/examples/integrity_failure_recovery.md +389 -0
  182. package/vendor/ars/academic-pipeline/examples/mid_entry_example.md +414 -0
  183. package/vendor/ars/academic-pipeline/references/adapters/.gitkeep +0 -0
  184. package/vendor/ars/academic-pipeline/references/adapters/overview.md +153 -0
  185. package/vendor/ars/academic-pipeline/references/ai_research_failure_modes.md +185 -0
  186. package/vendor/ars/academic-pipeline/references/changelog.md +14 -0
  187. package/vendor/ars/academic-pipeline/references/claim_audit_calibration_protocol.md +175 -0
  188. package/vendor/ars/academic-pipeline/references/claim_verification_protocol.md +282 -0
  189. package/vendor/ars/academic-pipeline/references/external_review_protocol.md +131 -0
  190. package/vendor/ars/academic-pipeline/references/integrity_review_protocol.md +110 -0
  191. package/vendor/ars/academic-pipeline/references/literature_corpus_consumers.md +193 -0
  192. package/vendor/ars/academic-pipeline/references/mode_advisor.md +135 -0
  193. package/vendor/ars/academic-pipeline/references/passport_as_reset_boundary.md +132 -0
  194. package/vendor/ars/academic-pipeline/references/pipeline_state_machine.md +405 -0
  195. package/vendor/ars/academic-pipeline/references/plagiarism_detection_protocol.md +239 -0
  196. package/vendor/ars/academic-pipeline/references/process_summary_protocol.md +209 -0
  197. package/vendor/ars/academic-pipeline/references/progress_dashboard_template.md +38 -0
  198. package/vendor/ars/academic-pipeline/references/reinforcement_content.md +15 -0
  199. package/vendor/ars/academic-pipeline/references/reproducibility_audit.md +55 -0
  200. package/vendor/ars/academic-pipeline/references/score_trajectory_protocol.md +78 -0
  201. package/vendor/ars/academic-pipeline/references/team_collaboration_protocol.md +261 -0
  202. package/vendor/ars/academic-pipeline/references/two_stage_review_protocol.md +27 -0
  203. package/vendor/ars/academic-pipeline/templates/pipeline_status_template.md +146 -0
  204. package/vendor/ars/agents/report_compiler_agent.md +341 -0
  205. package/vendor/ars/agents/research_architect_agent.md +298 -0
  206. package/vendor/ars/agents/synthesis_agent.md +356 -0
  207. package/vendor/ars/commands/ars-3w.md +10 -0
  208. package/vendor/ars/commands/ars-abstract.md +10 -0
  209. package/vendor/ars/commands/ars-cache-invalidate.md +20 -0
  210. package/vendor/ars/commands/ars-citation-check.md +10 -0
  211. package/vendor/ars/commands/ars-disclosure.md +10 -0
  212. package/vendor/ars/commands/ars-format-convert.md +10 -0
  213. package/vendor/ars/commands/ars-full.md +9 -0
  214. package/vendor/ars/commands/ars-lit-review.md +12 -0
  215. package/vendor/ars/commands/ars-mark-read.md +18 -0
  216. package/vendor/ars/commands/ars-outline.md +10 -0
  217. package/vendor/ars/commands/ars-plan.md +10 -0
  218. package/vendor/ars/commands/ars-rebuttal-audit.md +12 -0
  219. package/vendor/ars/commands/ars-reviewer.md +9 -0
  220. package/vendor/ars/commands/ars-revision-coach.md +9 -0
  221. package/vendor/ars/commands/ars-revision.md +10 -0
  222. package/vendor/ars/commands/ars-unmark-read.md +16 -0
  223. package/vendor/ars/deep-research/SKILL.md +600 -0
  224. package/vendor/ars/deep-research/agents/bibliography_agent.md +473 -0
  225. package/vendor/ars/deep-research/agents/devils_advocate_agent.md +192 -0
  226. package/vendor/ars/deep-research/agents/editor_in_chief_agent.md +167 -0
  227. package/vendor/ars/deep-research/agents/ethics_review_agent.md +267 -0
  228. package/vendor/ars/deep-research/agents/meta_analysis_agent.md +325 -0
  229. package/vendor/ars/deep-research/agents/monitoring_agent.md +209 -0
  230. package/vendor/ars/deep-research/agents/report_compiler_agent.md +341 -0
  231. package/vendor/ars/deep-research/agents/research_architect_agent.md +298 -0
  232. package/vendor/ars/deep-research/agents/research_question_agent.md +216 -0
  233. package/vendor/ars/deep-research/agents/risk_of_bias_agent.md +231 -0
  234. package/vendor/ars/deep-research/agents/socratic_mentor_agent.md +764 -0
  235. package/vendor/ars/deep-research/agents/source_verification_agent.md +219 -0
  236. package/vendor/ars/deep-research/agents/synthesis_agent.md +356 -0
  237. package/vendor/ars/deep-research/agents/timeline_extraction_agent.md +99 -0
  238. package/vendor/ars/deep-research/examples/exploratory_research.md +157 -0
  239. package/vendor/ars/deep-research/examples/fact_check_mode.md +173 -0
  240. package/vendor/ars/deep-research/examples/handoff_to_paper.md +318 -0
  241. package/vendor/ars/deep-research/examples/idea_diversity_coverage_gap_advisory.md +64 -0
  242. package/vendor/ars/deep-research/examples/policy_analysis.md +161 -0
  243. package/vendor/ars/deep-research/examples/review_mode.md +253 -0
  244. package/vendor/ars/deep-research/examples/socratic_guided_research.md +331 -0
  245. package/vendor/ars/deep-research/examples/systematic_review.md +133 -0
  246. package/vendor/ars/deep-research/references/apa7_style_guide.md +162 -0
  247. package/vendor/ars/deep-research/references/argumentation_reasoning_framework.md +68 -0
  248. package/vendor/ars/deep-research/references/arxiv_api_protocol.md +76 -0
  249. package/vendor/ars/deep-research/references/changelog.md +22 -0
  250. package/vendor/ars/deep-research/references/chinese_literature_api_protocol.md +317 -0
  251. package/vendor/ars/deep-research/references/cross_agent_quality_definitions.md +14 -0
  252. package/vendor/ars/deep-research/references/crossref_api_protocol.md +84 -0
  253. package/vendor/ars/deep-research/references/equator_reporting_guidelines.md +482 -0
  254. package/vendor/ars/deep-research/references/ethics_checklist.md +282 -0
  255. package/vendor/ars/deep-research/references/failure_paths.md +355 -0
  256. package/vendor/ars/deep-research/references/interdisciplinary_bridges.md +292 -0
  257. package/vendor/ars/deep-research/references/irb_decision_tree.md +315 -0
  258. package/vendor/ars/deep-research/references/literature_monitoring_strategies.md +263 -0
  259. package/vendor/ars/deep-research/references/logical_fallacies.md +192 -0
  260. package/vendor/ars/deep-research/references/methodology_patterns.md +462 -0
  261. package/vendor/ars/deep-research/references/mode_selection_guide.md +331 -0
  262. package/vendor/ars/deep-research/references/openalex_api_protocol.md +82 -0
  263. package/vendor/ars/deep-research/references/preregistration_guide.md +324 -0
  264. package/vendor/ars/deep-research/references/semantic_scholar_api_protocol.md +107 -0
  265. package/vendor/ars/deep-research/references/socratic_mode_protocol.md +99 -0
  266. package/vendor/ars/deep-research/references/socratic_questioning_framework.md +232 -0
  267. package/vendor/ars/deep-research/references/source_quality_hierarchy.md +188 -0
  268. package/vendor/ars/deep-research/references/systematic_review_protocol.md +95 -0
  269. package/vendor/ars/deep-research/references/systematic_review_toolkit.md +353 -0
  270. package/vendor/ars/deep-research/templates/evidence_assessment_template.md +127 -0
  271. package/vendor/ars/deep-research/templates/literature_matrix_template.md +85 -0
  272. package/vendor/ars/deep-research/templates/preregistration_template.md +318 -0
  273. package/vendor/ars/deep-research/templates/prisma_protocol_template.md +248 -0
  274. package/vendor/ars/deep-research/templates/prisma_report_template.md +415 -0
  275. package/vendor/ars/deep-research/templates/research_brief_template.md +93 -0
  276. package/vendor/ars/package.json +24 -0
  277. package/vendor/ars/pi/README.md +161 -0
  278. package/vendor/ars/pi/package.json +26 -0
  279. package/vendor/ars/pi/wrapper.js +193 -0
  280. package/vendor/ars/pi/wrapper.test.mjs +201 -0
  281. package/vendor/ars/pyproject.toml +2 -0
  282. package/vendor/ars/requirements-pdf-content-classifier.txt +5 -0
  283. package/vendor/ars/scripts/_block_parser.py +396 -0
  284. package/vendor/ars/scripts/_ci_pytest_manifest.toml +661 -0
  285. package/vendor/ars/scripts/_claim_audit_constants.py +268 -0
  286. package/vendor/ars/scripts/_e4_evidence.py +110 -0
  287. package/vendor/ars/scripts/_eval_threshold_gate.py +73 -0
  288. package/vendor/ars/scripts/_markdown_lint_util.py +224 -0
  289. package/vendor/ars/scripts/_next_verified_at_ms.py +176 -0
  290. package/vendor/ars/scripts/_passport_yaml.py +53 -0
  291. package/vendor/ars/scripts/_skill_lint.py +254 -0
  292. package/vendor/ars/scripts/_text_similarity.py +141 -0
  293. package/vendor/ars/scripts/adapters/README.md +89 -0
  294. package/vendor/ars/scripts/adapters/_common.py +209 -0
  295. package/vendor/ars/scripts/adapters/examples/folder_scan/expected_passport.yaml +25 -0
  296. package/vendor/ars/scripts/adapters/examples/folder_scan/expected_rejection_log.yaml +18 -0
  297. package/vendor/ars/scripts/adapters/examples/folder_scan/input_fixture/Chen2024_AIAssessment.pdf +0 -0
  298. package/vendor/ars/scripts/adapters/examples/folder_scan/input_fixture/Wang_2023_formative_feedback.pdf +0 -0
  299. package/vendor/ars/scripts/adapters/examples/folder_scan/input_fixture/paper1.pdf +0 -0
  300. 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
  301. package/vendor/ars/scripts/adapters/examples/obsidian/expected_passport.yaml +40 -0
  302. package/vendor/ars/scripts/adapters/examples/obsidian/expected_rejection_log.yaml +13 -0
  303. package/vendor/ars/scripts/adapters/examples/obsidian/input_fixture/vault/.gitkeep +0 -0
  304. package/vendor/ars/scripts/adapters/examples/obsidian/input_fixture/vault/.obsidian/app.json +1 -0
  305. package/vendor/ars/scripts/adapters/examples/obsidian/input_fixture/vault/_templates/tmpl.md +7 -0
  306. package/vendor/ars/scripts/adapters/examples/obsidian/input_fixture/vault/chen2024ai.md +13 -0
  307. package/vendor/ars/scripts/adapters/examples/obsidian/input_fixture/vault/invalid.md +1 -0
  308. package/vendor/ars/scripts/adapters/examples/obsidian/input_fixture/vault/wang2023formative.md +10 -0
  309. package/vendor/ars/scripts/adapters/examples/zotero/expected_passport.yaml +34 -0
  310. package/vendor/ars/scripts/adapters/examples/zotero/expected_rejection_log.yaml +34 -0
  311. package/vendor/ars/scripts/adapters/examples/zotero/input_fixture/.gitkeep +0 -0
  312. package/vendor/ars/scripts/adapters/examples/zotero/input_fixture/export.json +43 -0
  313. package/vendor/ars/scripts/adapters/folder_scan.py +214 -0
  314. package/vendor/ars/scripts/adapters/obsidian.py +336 -0
  315. package/vendor/ars/scripts/adapters/tests/.gitkeep +0 -0
  316. package/vendor/ars/scripts/adapters/tests/conftest.py +77 -0
  317. package/vendor/ars/scripts/adapters/tests/test_check_corpus_consumer_protocol.py +632 -0
  318. package/vendor/ars/scripts/adapters/tests/test_check_literature_corpus_schema.py +631 -0
  319. package/vendor/ars/scripts/adapters/tests/test_common.py +365 -0
  320. package/vendor/ars/scripts/adapters/tests/test_conftest.py +96 -0
  321. package/vendor/ars/scripts/adapters/tests/test_folder_scan.py +260 -0
  322. package/vendor/ars/scripts/adapters/tests/test_literature_corpus_entry_schema.py +745 -0
  323. package/vendor/ars/scripts/adapters/tests/test_obsidian.py +357 -0
  324. package/vendor/ars/scripts/adapters/tests/test_rejection_log_schema.py +271 -0
  325. package/vendor/ars/scripts/adapters/tests/test_sync_adapter_docs.py +88 -0
  326. package/vendor/ars/scripts/adapters/tests/test_zotero.py +454 -0
  327. package/vendor/ars/scripts/adapters/zotero.py +318 -0
  328. package/vendor/ars/scripts/adjudication_activity.py +1592 -0
  329. package/vendor/ars/scripts/announce-ars-loaded.sh +144 -0
  330. package/vendor/ars/scripts/ars_anchorize_draft.py +170 -0
  331. package/vendor/ars/scripts/ars_apply_revision_patch.py +912 -0
  332. package/vendor/ars/scripts/ars_cache_invalidate.py +40 -0
  333. package/vendor/ars/scripts/ars_mark_read.py +521 -0
  334. package/vendor/ars/scripts/ars_phase_scope_manifest.json +33 -0
  335. package/vendor/ars/scripts/ars_update_check.sh +215 -0
  336. package/vendor/ars/scripts/ars_write_scope_guard.py +506 -0
  337. package/vendor/ars/scripts/arxiv_client.py +222 -0
  338. package/vendor/ars/scripts/audit_snapshot.py +572 -0
  339. package/vendor/ars/scripts/bibliographic_integrity_signals.py +800 -0
  340. package/vendor/ars/scripts/bootstrap_timeline_yaml.py +146 -0
  341. package/vendor/ars/scripts/build_claim_standing_candidate_ledger.py +1238 -0
  342. package/vendor/ars/scripts/build_claim_standing_query_plan.py +643 -0
  343. package/vendor/ars/scripts/build_content_coverage_advisory.py +1205 -0
  344. package/vendor/ars/scripts/build_cross_document_consistency_advisory.py +2332 -0
  345. package/vendor/ars/scripts/build_review_pathway_rule_trace.py +830 -0
  346. package/vendor/ars/scripts/build_submission_packet_manifest.py +2310 -0
  347. package/vendor/ars/scripts/check_215_field_norm.py +173 -0
  348. package/vendor/ars/scripts/check_216_surface_form.py +250 -0
  349. package/vendor/ars/scripts/check_268_nested_commitment_ledger.py +180 -0
  350. package/vendor/ars/scripts/check_390_revision_patch_discipline.py +296 -0
  351. package/vendor/ars/scripts/check_392_citation_verification_intake.py +126 -0
  352. package/vendor/ars/scripts/check_394_submission_policy.py +178 -0
  353. package/vendor/ars/scripts/check_439_format_profile.py +307 -0
  354. package/vendor/ars/scripts/check_619_disclosure_closeout.py +237 -0
  355. package/vendor/ars/scripts/check_630_codex_subscription_transport.py +456 -0
  356. package/vendor/ars/scripts/check_669_review_pathway_rule_trace.py +662 -0
  357. package/vendor/ars/scripts/check_670_revision_roadmap_integration.py +518 -0
  358. package/vendor/ars/scripts/check_673_adjudication_activity.py +684 -0
  359. package/vendor/ars/scripts/check_684_review_criteria_binding.py +557 -0
  360. package/vendor/ars/scripts/check_agents_mirror_sync.py +115 -0
  361. package/vendor/ars/scripts/check_audit_artifact_consistency.py +2313 -0
  362. package/vendor/ars/scripts/check_benchmark_report.py +79 -0
  363. package/vendor/ars/scripts/check_bibliographic_integrity_signals.py +831 -0
  364. package/vendor/ars/scripts/check_calibration_tiers.py +235 -0
  365. package/vendor/ars/scripts/check_changelog_covers_merges.py +289 -0
  366. package/vendor/ars/scripts/check_ci_pytest_manifest.py +204 -0
  367. package/vendor/ars/scripts/check_claim_audit_consistency.py +1664 -0
  368. package/vendor/ars/scripts/check_claim_standing_candidate_ledger_integration.py +500 -0
  369. package/vendor/ars/scripts/check_claim_standing_freshness.py +253 -0
  370. package/vendor/ars/scripts/check_claim_standing_transmissions.py +449 -0
  371. package/vendor/ars/scripts/check_collaboration_depth_rubric.py +180 -0
  372. package/vendor/ars/scripts/check_command_frontmatter_name.py +116 -0
  373. package/vendor/ars/scripts/check_committee_correspondence.py +333 -0
  374. package/vendor/ars/scripts/check_compliance_report.py +108 -0
  375. package/vendor/ars/scripts/check_content_coverage_advisory_integration.py +796 -0
  376. package/vendor/ars/scripts/check_control_availability.py +172 -0
  377. package/vendor/ars/scripts/check_corpus_consumer_protocol.py +404 -0
  378. package/vendor/ars/scripts/check_cross_document_consistency_advisory_integration.py +1191 -0
  379. package/vendor/ars/scripts/check_cross_model_handoff_contract.py +234 -0
  380. package/vendor/ars/scripts/check_cross_model_verification_sync.py +261 -0
  381. package/vendor/ars/scripts/check_data_access_level.py +131 -0
  382. package/vendor/ars/scripts/check_data_flows.py +252 -0
  383. package/vendor/ars/scripts/check_decision_contract.py +464 -0
  384. package/vendor/ars/scripts/check_degradation_registry.py +326 -0
  385. package/vendor/ars/scripts/check_distribution_surface_claims.py +226 -0
  386. package/vendor/ars/scripts/check_domain_evidence_profile.py +538 -0
  387. package/vendor/ars/scripts/check_e4_promotion.py +195 -0
  388. package/vendor/ars/scripts/check_evals_gold_set.py +279 -0
  389. package/vendor/ars/scripts/check_evidence_row_integration.py +396 -0
  390. package/vendor/ars/scripts/check_experiment_provenance.py +117 -0
  391. package/vendor/ars/scripts/check_field_norm_severity.py +144 -0
  392. package/vendor/ars/scripts/check_firm_rules_sync.py +375 -0
  393. package/vendor/ars/scripts/check_heldout_measurement_report.py +1179 -0
  394. package/vendor/ars/scripts/check_human_subjects_output_contract.py +139 -0
  395. package/vendor/ars/scripts/check_human_subjects_reference_migration.py +844 -0
  396. package/vendor/ars/scripts/check_indirect_prompt_injection_no_call.py +328 -0
  397. package/vendor/ars/scripts/check_instruction_data_boundary.py +236 -0
  398. package/vendor/ars/scripts/check_judge_prompt_version.py +125 -0
  399. package/vendor/ars/scripts/check_literature_corpus_schema.py +402 -0
  400. package/vendor/ars/scripts/check_model_tiering.py +223 -0
  401. package/vendor/ars/scripts/check_panel_synthesis.py +1331 -0
  402. package/vendor/ars/scripts/check_passport_reset_contract.py +214 -0
  403. package/vendor/ars/scripts/check_pattern_eval_manifest.py +422 -0
  404. package/vendor/ars/scripts/check_persuasion_invariance_fixtures.py +637 -0
  405. package/vendor/ars/scripts/check_phase_conformance.py +2180 -0
  406. package/vendor/ars/scripts/check_pipeline_boundary_semantics.py +600 -0
  407. package/vendor/ars/scripts/check_pipeline_integrity.py +340 -0
  408. package/vendor/ars/scripts/check_policy_anchor_protocol.py +159 -0
  409. package/vendor/ars/scripts/check_policy_anchor_table.py +286 -0
  410. package/vendor/ars/scripts/check_preprint_venues_consistency.py +123 -0
  411. package/vendor/ars/scripts/check_prisma_trAIce_freshness.py +84 -0
  412. package/vendor/ars/scripts/check_promotion_bakeoff_preregistration.py +1303 -0
  413. package/vendor/ars/scripts/check_ranking_lift.py +323 -0
  414. package/vendor/ars/scripts/check_re_review_synthesis.py +2719 -0
  415. package/vendor/ars/scripts/check_receipt_enum_sync.py +203 -0
  416. package/vendor/ars/scripts/check_repro_lock.py +85 -0
  417. package/vendor/ars/scripts/check_review_pathway_output.py +276 -0
  418. package/vendor/ars/scripts/check_reviewer_data_fences.py +224 -0
  419. package/vendor/ars/scripts/check_reviewer_finding_contract.py +783 -0
  420. package/vendor/ars/scripts/check_reviewer_role_label.py +447 -0
  421. package/vendor/ars/scripts/check_reviewer_scoring_honesty.py +292 -0
  422. package/vendor/ars/scripts/check_reviewer_sprint_prompt_sync.py +409 -0
  423. package/vendor/ars/scripts/check_revision_claim_drift_suite_v2.py +1622 -0
  424. package/vendor/ars/scripts/check_revision_token_conservation.py +263 -0
  425. package/vendor/ars/scripts/check_risk_register.py +280 -0
  426. package/vendor/ars/scripts/check_role_scoped_contract.py +702 -0
  427. package/vendor/ars/scripts/check_rq_framing_patterns.py +184 -0
  428. package/vendor/ars/scripts/check_rubric_weight_consistency.py +32 -0
  429. package/vendor/ars/scripts/check_seeded_defect_fixtures.py +425 -0
  430. package/vendor/ars/scripts/check_setup_cross_model_parity.py +139 -0
  431. package/vendor/ars/scripts/check_spec_consistency.py +1249 -0
  432. package/vendor/ars/scripts/check_sprint_contract.py +371 -0
  433. package/vendor/ars/scripts/check_stage_capability_matrix.py +784 -0
  434. package/vendor/ars/scripts/check_submission_packet_manifest_integration.py +358 -0
  435. package/vendor/ars/scripts/check_surface_form_parity.py +445 -0
  436. package/vendor/ars/scripts/check_task_type.py +22 -0
  437. package/vendor/ars/scripts/check_tools_allowlist.py +538 -0
  438. package/vendor/ars/scripts/check_tortured_phrase_screening_integration.py +1974 -0
  439. package/vendor/ars/scripts/check_v3_10_134_write_scope.py +286 -0
  440. package/vendor/ars/scripts/check_v3_10_policy.py +656 -0
  441. package/vendor/ars/scripts/check_v3_6_6_ab_manifest.py +364 -0
  442. package/vendor/ars/scripts/check_v3_6_7_pattern_protection.py +1366 -0
  443. package/vendor/ars/scripts/check_v3_6_8_audit_scope_block.py +464 -0
  444. package/vendor/ars/scripts/check_v3_6_8_cite_provenance_pipeline.py +231 -0
  445. package/vendor/ars/scripts/check_v3_6_8_frontmatter_trust_schema.py +248 -0
  446. package/vendor/ars/scripts/check_v3_6_8_mark_read_commands.py +79 -0
  447. package/vendor/ars/scripts/check_v3_6_8_pattern_protection.py +941 -0
  448. package/vendor/ars/scripts/check_v3_7_3_three_layer_citation.py +318 -0
  449. package/vendor/ars/scripts/check_v3_8_annotation_literal_sync.py +228 -0
  450. package/vendor/ars/scripts/check_v3_9_0_triangulation.py +366 -0
  451. package/vendor/ars/scripts/check_v3_9_2_phase_boundary.py +270 -0
  452. package/vendor/ars/scripts/check_v3_9_4_temporal_verification.py +139 -0
  453. package/vendor/ars/scripts/check_venue_disclosure_policies.py +63 -0
  454. package/vendor/ars/scripts/check_version_consistency.py +826 -0
  455. package/vendor/ars/scripts/check_workflow_classification.py +223 -0
  456. package/vendor/ars/scripts/chinese_literature_client.py +1938 -0
  457. package/vendor/ars/scripts/citation_verification_summary.py +85 -0
  458. package/vendor/ars/scripts/claim_audit_calibration.py +517 -0
  459. package/vendor/ars/scripts/claim_audit_finalizer.py +456 -0
  460. package/vendor/ars/scripts/claim_audit_pipeline.py +1594 -0
  461. package/vendor/ars/scripts/claim_registry_coverage.py +493 -0
  462. package/vendor/ars/scripts/claim_standing_discovery.py +784 -0
  463. package/vendor/ars/scripts/claim_standing_stance_runner.py +758 -0
  464. package/vendor/ars/scripts/claim_standing_stance_scorer.py +239 -0
  465. package/vendor/ars/scripts/claim_strength_drift_disposition.py +666 -0
  466. package/vendor/ars/scripts/contamination_signals.py +689 -0
  467. package/vendor/ars/scripts/corpus_consumer_manifest.json +19 -0
  468. package/vendor/ars/scripts/cross_model_codex_transport.py +1374 -0
  469. package/vendor/ars/scripts/cross_model_codex_verify.sh +6 -0
  470. package/vendor/ars/scripts/cross_model_handoff.py +359 -0
  471. package/vendor/ars/scripts/cross_model_smoke_test.sh +183 -0
  472. package/vendor/ars/scripts/cross_model_smoke_test_codex.sh +35 -0
  473. package/vendor/ars/scripts/cross_model_verification/gemini_is_grounded.jq +45 -0
  474. package/vendor/ars/scripts/cross_model_verification/gemini_sources.jq +45 -0
  475. package/vendor/ars/scripts/cross_model_verification/normalize_compat_verdict.py +57 -0
  476. package/vendor/ars/scripts/cross_model_verification/openai_has_completed_web_search.jq +15 -0
  477. package/vendor/ars/scripts/cross_model_verification/openai_sources.jq +17 -0
  478. package/vendor/ars/scripts/cross_model_verification/openai_text.jq +11 -0
  479. package/vendor/ars/scripts/crossref_client.py +225 -0
  480. package/vendor/ars/scripts/dispatch_e4_panel.py +2731 -0
  481. package/vendor/ars/scripts/evidence_rows.py +2043 -0
  482. package/vendor/ars/scripts/fixtures/adjudication_activity/author_stage3.json +32 -0
  483. package/vendor/ars/scripts/fixtures/adjudication_activity/author_stage3_input.json +27 -0
  484. package/vendor/ars/scripts/fixtures/adjudication_activity/author_stage3_prime.json +32 -0
  485. package/vendor/ars/scripts/fixtures/adjudication_activity/author_stage3_prime_input.json +27 -0
  486. package/vendor/ars/scripts/fixtures/adjudication_activity/compliance_override.json +50 -0
  487. package/vendor/ars/scripts/fixtures/adjudication_activity/compliance_override_action.json +14 -0
  488. package/vendor/ars/scripts/fixtures/adjudication_activity/compliance_pass.json +44 -0
  489. package/vendor/ars/scripts/fixtures/adjudication_activity/explicit_user_request_log.json +26 -0
  490. package/vendor/ars/scripts/fixtures/adjudication_activity/mandatory_checkpoint_log.json +116 -0
  491. package/vendor/ars/scripts/fixtures/audit_artifact_consistency/README.md +56 -0
  492. 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
  493. package/vendor/ars/scripts/fixtures/audit_artifact_consistency/negative/a1_pass_with_p1/2026-04-30T15-22-04Z-d8f3.jsonl +4 -0
  494. package/vendor/ars/scripts/fixtures/audit_artifact_consistency/negative/a1_pass_with_p1/2026-04-30T15-22-04Z-d8f3.meta.json +43 -0
  495. package/vendor/ars/scripts/fixtures/audit_artifact_consistency/negative/a1_pass_with_p1/2026-04-30T15-22-04Z-d8f3.verdict.yaml +19 -0
  496. package/vendor/ars/scripts/fixtures/audit_artifact_consistency/negative/a7_orphan_completion/2026-04-30T15-22-04Z-d8f3.jsonl +3 -0
  497. package/vendor/ars/scripts/fixtures/audit_artifact_consistency/positive/persisted_minor/2026-04-30T15-22-04Z-d8f3.audit_artifact_entry.json +26 -0
  498. package/vendor/ars/scripts/fixtures/audit_artifact_consistency/positive/persisted_minor/2026-04-30T15-22-04Z-d8f3.jsonl +4 -0
  499. package/vendor/ars/scripts/fixtures/audit_artifact_consistency/positive/persisted_minor/2026-04-30T15-22-04Z-d8f3.meta.json +43 -0
  500. package/vendor/ars/scripts/fixtures/audit_artifact_consistency/positive/persisted_minor/2026-04-30T15-22-04Z-d8f3.verdict.yaml +19 -0
  501. package/vendor/ars/scripts/fixtures/audit_artifact_consistency/positive/proposal_pass/2026-04-30T15-22-04Z-d8f3.audit_artifact_entry.json +24 -0
  502. package/vendor/ars/scripts/fixtures/audit_artifact_consistency/positive/proposal_pass/2026-04-30T15-22-04Z-d8f3.jsonl +4 -0
  503. package/vendor/ars/scripts/fixtures/audit_artifact_consistency/positive/proposal_pass/2026-04-30T15-22-04Z-d8f3.meta.json +43 -0
  504. package/vendor/ars/scripts/fixtures/audit_artifact_consistency/positive/proposal_pass/2026-04-30T15-22-04Z-d8f3.verdict.yaml +12 -0
  505. package/vendor/ars/scripts/fixtures/bibliographic_integrity_signals/retraction.json +46 -0
  506. package/vendor/ars/scripts/fixtures/bibliographic_integrity_signals/retraction_check_attestation.json +44 -0
  507. package/vendor/ars/scripts/fixtures/bibliographic_integrity_signals/tortured_phrase.json +44 -0
  508. package/vendor/ars/scripts/fixtures/bibliographic_integrity_signals/tortured_phrase_v1_2_abstract_missing.json +107 -0
  509. package/vendor/ars/scripts/fixtures/bibliographic_integrity_signals/tortured_phrase_v1_2_detected.json +124 -0
  510. package/vendor/ars/scripts/fixtures/check_evals_gold_set/clean/expected_outcomes.json +77 -0
  511. package/vendor/ars/scripts/fixtures/check_evals_gold_set/clean/manifest.yaml +37 -0
  512. package/vendor/ars/scripts/fixtures/check_evals_gold_set/clean/tuples/001-valid-doi-test.json +20 -0
  513. package/vendor/ars/scripts/fixtures/check_evals_gold_set/clean/tuples/002-valid-arxiv-test.json +19 -0
  514. package/vendor/ars/scripts/fixtures/check_evals_gold_set/clean/tuples/003-fabricated-test.json +20 -0
  515. package/vendor/ars/scripts/fixtures/claim_audit_calibration/gold_set.json +344 -0
  516. package/vendor/ars/scripts/fixtures/claim_standing_candidate_ledger/query_plan.json +108 -0
  517. package/vendor/ars/scripts/fixtures/claim_standing_candidate_ledger/retrieval_input.json +179 -0
  518. package/vendor/ars/scripts/fixtures/committee_correspondence/16fd83f6aec7/concern_tracker.json +129 -0
  519. package/vendor/ars/scripts/fixtures/committee_correspondence/16fd83f6aec7/response_skeleton.md +19 -0
  520. package/vendor/ars/scripts/fixtures/committee_correspondence/16fd83f6aec7/source_letter.txt +9 -0
  521. package/vendor/ars/scripts/fixtures/content_coverage_advisory/base_draft.json +48 -0
  522. package/vendor/ars/scripts/fixtures/content_coverage_advisory/base_inventory.json +38 -0
  523. package/vendor/ars/scripts/fixtures/content_coverage_advisory/packet/consent.txt +1 -0
  524. package/vendor/ars/scripts/fixtures/content_coverage_advisory/session_sources.json +3 -0
  525. package/vendor/ars/scripts/fixtures/cross_document_consistency/README.md +6 -0
  526. package/vendor/ars/scripts/fixtures/cross_document_consistency/accepted_draft.md +35 -0
  527. package/vendor/ars/scripts/fixtures/cross_document_consistency/cases.json +75 -0
  528. package/vendor/ars/scripts/fixtures/cross_document_consistency/preregistration.md +5 -0
  529. package/vendor/ars/scripts/fixtures/cross_model_codex_transport/forbidden_event.jsonl +4 -0
  530. package/vendor/ars/scripts/fixtures/cross_model_codex_transport/grounded_verified.jsonl +3 -0
  531. package/vendor/ars/scripts/fixtures/cross_model_codex_transport/malformed.jsonl +3 -0
  532. package/vendor/ars/scripts/fixtures/cross_model_codex_transport/missing_search.jsonl +2 -0
  533. package/vendor/ars/scripts/fixtures/cross_model_codex_transport/multiple_finals.jsonl +4 -0
  534. package/vendor/ars/scripts/fixtures/cross_model_codex_transport/not_found.jsonl +3 -0
  535. package/vendor/ars/scripts/fixtures/cross_model_codex_transport/unbound_source.jsonl +3 -0
  536. package/vendor/ars/scripts/fixtures/cross_model_codex_transport/wrong_search_shape.jsonl +3 -0
  537. package/vendor/ars/scripts/fixtures/evidence_rows/phase_e_inputs.json +114 -0
  538. package/vendor/ars/scripts/fixtures/evidence_rows/session_sources.json +5 -0
  539. package/vendor/ars/scripts/fixtures/human_subjects_authority/cross-border-us-tw-gdpr.json +71 -0
  540. package/vendor/ars/scripts/fixtures/human_subjects_authority/gdpr-member-state-unresolved.json +62 -0
  541. package/vendor/ars/scripts/fixtures/human_subjects_authority/missing-data-axis.json +45 -0
  542. package/vendor/ars/scripts/fixtures/human_subjects_authority/no-profile.json +33 -0
  543. package/vendor/ars/scripts/fixtures/human_subjects_authority/tw-gdpr-two-axis.json +74 -0
  544. package/vendor/ars/scripts/fixtures/human_subjects_authority/us-gdpr-two-axis.json +74 -0
  545. package/vendor/ars/scripts/fixtures/review_pathway_rule_trace/lint-near-misses.json +72 -0
  546. package/vendor/ars/scripts/fixtures/review_pathway_rule_trace/no-profile-request.json +18 -0
  547. package/vendor/ars/scripts/fixtures/review_pathway_rule_trace/tw-candidates-request.json +63 -0
  548. package/vendor/ars/scripts/fixtures/review_pathway_rule_trace/us-candidates-request.json +77 -0
  549. package/vendor/ars/scripts/fixtures/review_target_context/exact-declaration.json +24 -0
  550. package/vendor/ars/scripts/fixtures/review_target_context/field-general-declaration.json +24 -0
  551. package/vendor/ars/scripts/fixtures/review_target_context/msr-2027-technical-full-declaration.json +24 -0
  552. package/vendor/ars/scripts/fixtures/review_target_context/synthetic-registry.json +92 -0
  553. package/vendor/ars/scripts/fixtures/revision_claim_drift_v2/README.md +21 -0
  554. package/vendor/ars/scripts/fixtures/revision_claim_drift_v2/subject_context_attested_only.json +55 -0
  555. package/vendor/ars/scripts/fixtures/revision_claim_drift_v2/subject_context_machine_supported.json +49 -0
  556. package/vendor/ars/scripts/fixtures/revision_claim_drift_v2/subject_context_not_isolated.json +56 -0
  557. package/vendor/ars/scripts/fixtures/revision_claim_drift_v2/subject_context_unknown.json +49 -0
  558. package/vendor/ars/scripts/fixtures/submission_package/clean/paper.md +16 -0
  559. package/vendor/ars/scripts/fixtures/submission_package/clean/references.bib +13 -0
  560. package/vendor/ars/scripts/fixtures/submission_package/fallback_authoryear/paper.md +11 -0
  561. package/vendor/ars/scripts/fixtures/submission_package/fallback_authoryear/references.bib +13 -0
  562. package/vendor/ars/scripts/fixtures/submission_package/fallback_latex/paper.tex +9 -0
  563. package/vendor/ars/scripts/fixtures/submission_package/fallback_latex/references.bib +13 -0
  564. package/vendor/ars/scripts/fixtures/submission_package/marker_no_join/paper.md +7 -0
  565. package/vendor/ars/scripts/fixtures/submission_package/orphan_intext/paper.md +8 -0
  566. package/vendor/ars/scripts/fixtures/submission_package/orphan_intext/references.bib +6 -0
  567. package/vendor/ars/scripts/fixtures/submission_package/passports/corpus_only.yaml +9 -0
  568. package/vendor/ars/scripts/fixtures/submission_package/passports/summary_join.yaml +16 -0
  569. package/vendor/ars/scripts/fixtures/submission_package/profiles/full.yaml +15 -0
  570. package/vendor/ars/scripts/fixtures/submission_package/profiles/tight.yaml +15 -0
  571. package/vendor/ars/scripts/fixtures/submission_package/summary_join/paper.md +7 -0
  572. package/vendor/ars/scripts/fixtures/submission_package/uncited_reference/paper.md +9 -0
  573. package/vendor/ars/scripts/fixtures/submission_package/uncited_reference/references.bib +13 -0
  574. package/vendor/ars/scripts/fixtures/submission_package/venue_clean/paper.md +26 -0
  575. package/vendor/ars/scripts/fixtures/submission_package/venue_clean/references.bib +13 -0
  576. package/vendor/ars/scripts/fixtures/submission_package/venue_violations/paper.md +20 -0
  577. package/vendor/ars/scripts/fixtures/submission_package/venue_violations/references.bib +13 -0
  578. package/vendor/ars/scripts/fixtures/submission_packet_manifest/base_inventory.json +101 -0
  579. package/vendor/ars/scripts/fixtures/submission_packet_manifest/packet/consent-materials.txt +3 -0
  580. package/vendor/ars/scripts/fixtures/submission_packet_manifest/packet/training-certificate.txt +2 -0
  581. package/vendor/ars/scripts/fixtures/submission_packet_manifest/packet/tw-consent-materials.txt +3 -0
  582. package/vendor/ars/scripts/fixtures/tortured_phrase_screening/corpus_input.yaml +30 -0
  583. package/vendor/ars/scripts/fixtures/tortured_phrase_screening/own_draft.md +36 -0
  584. package/vendor/ars/scripts/fixtures/tortured_phrase_screening/own_draft.tex +21 -0
  585. package/vendor/ars/scripts/fixtures/tortured_phrase_screening/seed_expectations.json +218 -0
  586. package/vendor/ars/scripts/fixtures/tortured_phrase_screening/snapshot.json +164 -0
  587. package/vendor/ars/scripts/fixtures/tortured_phrase_screening/snapshot_manifest.json +29 -0
  588. package/vendor/ars/scripts/fixtures/transport_bodies/README.md +55 -0
  589. package/vendor/ars/scripts/fixtures/transport_bodies/arxiv/empty_feed.xml +10 -0
  590. package/vendor/ars/scripts/fixtures/transport_bodies/arxiv/error_5xx.html +7 -0
  591. package/vendor/ars/scripts/fixtures/transport_bodies/arxiv/id_hit.xml +26 -0
  592. package/vendor/ars/scripts/fixtures/transport_bodies/chinese_literature/README.md +69 -0
  593. package/vendor/ars/scripts/fixtures/transport_bodies/chinese_literature/cnki_landing_page.html +13 -0
  594. package/vendor/ars/scripts/fixtures/transport_bodies/chinese_literature/error_5xx.html +2 -0
  595. package/vendor/ars/scripts/fixtures/transport_bodies/chinese_literature/esearch_coordinate_ambiguous.json +16 -0
  596. package/vendor/ars/scripts/fixtures/transport_bodies/chinese_literature/esearch_coordinate_hit.json +16 -0
  597. package/vendor/ars/scripts/fixtures/transport_bodies/chinese_literature/esearch_coordinate_zero.json +14 -0
  598. package/vendor/ars/scripts/fixtures/transport_bodies/chinese_literature/esearch_coverage_hit.json +15 -0
  599. package/vendor/ars/scripts/fixtures/transport_bodies/chinese_literature/esearch_coverage_zero.json +13 -0
  600. package/vendor/ars/scripts/fixtures/transport_bodies/chinese_literature/esummary_hit.json +43 -0
  601. package/vendor/ars/scripts/fixtures/transport_bodies/chinese_literature/esummary_issn_mismatch.json +31 -0
  602. package/vendor/ars/scripts/fixtures/transport_bodies/chinese_literature/esummary_no_doi.json +31 -0
  603. package/vendor/ars/scripts/fixtures/transport_bodies/chinese_literature/esummary_unknown_ra.json +34 -0
  604. package/vendor/ars/scripts/fixtures/transport_bodies/chinese_literature/esummary_year_mismatch.json +31 -0
  605. package/vendor/ars/scripts/fixtures/transport_bodies/chinese_literature/handle_absent.json +4 -0
  606. package/vendor/ars/scripts/fixtures/transport_bodies/chinese_literature/handle_exists.json +16 -0
  607. package/vendor/ars/scripts/fixtures/transport_bodies/chinese_literature/handle_internal_error.json +4 -0
  608. package/vendor/ars/scripts/fixtures/transport_bodies/chinese_literature/istic_csl_hit.json +25 -0
  609. package/vendor/ars/scripts/fixtures/transport_bodies/chinese_literature/istic_csl_other_title.json +18 -0
  610. package/vendor/ars/scripts/fixtures/transport_bodies/chinese_literature/ra_cnki.json +6 -0
  611. package/vendor/ars/scripts/fixtures/transport_bodies/chinese_literature/ra_crossref.json +6 -0
  612. package/vendor/ars/scripts/fixtures/transport_bodies/chinese_literature/ra_istic.json +6 -0
  613. package/vendor/ars/scripts/fixtures/transport_bodies/chinese_literature/ra_unknown_prefix.json +6 -0
  614. package/vendor/ars/scripts/fixtures/transport_bodies/crossref/doi_hit.json +24 -0
  615. package/vendor/ars/scripts/fixtures/transport_bodies/crossref/error_5xx.html +7 -0
  616. package/vendor/ars/scripts/fixtures/transport_bodies/crossref/title_search_miss.json +15 -0
  617. package/vendor/ars/scripts/fixtures/transport_bodies/openalex/doi_hit.json +29 -0
  618. package/vendor/ars/scripts/fixtures/transport_bodies/openalex/error_5xx.json +4 -0
  619. package/vendor/ars/scripts/fixtures/transport_bodies/openalex/title_search_miss.json +11 -0
  620. package/vendor/ars/scripts/fixtures/transport_bodies/semantic_scholar/doi_hit.json +14 -0
  621. package/vendor/ars/scripts/fixtures/transport_bodies/semantic_scholar/error_5xx.json +3 -0
  622. package/vendor/ars/scripts/fixtures/transport_bodies/semantic_scholar/title_search_miss.json +5 -0
  623. package/vendor/ars/scripts/human_read_attestation_resolver.py +467 -0
  624. package/vendor/ars/scripts/ideation_diversity_assignment_gate.py +430 -0
  625. package/vendor/ars/scripts/inquiry_branch_ledger.py +2540 -0
  626. package/vendor/ars/scripts/legacy/ars_apply_revision_patch_v1_0.py +715 -0
  627. package/vendor/ars/scripts/legacy/check_re_review_synthesis_v1_0.py +2215 -0
  628. package/vendor/ars/scripts/migrate_literature_corpus_to_v3_10.py +223 -0
  629. package/vendor/ars/scripts/migrate_literature_corpus_to_v3_7_3.py +277 -0
  630. package/vendor/ars/scripts/migrate_literature_corpus_to_v3_9_0.py +304 -0
  631. package/vendor/ars/scripts/model_tiering_manifest.json +46 -0
  632. package/vendor/ars/scripts/openalex_client.py +232 -0
  633. package/vendor/ars/scripts/parse_audit_verdict.py +802 -0
  634. package/vendor/ars/scripts/pdf_content_classifier_worker.py +176 -0
  635. package/vendor/ars/scripts/pdf_read_preflight.py +1455 -0
  636. package/vendor/ars/scripts/policy_anchor_disclosure_referee.py +354 -0
  637. package/vendor/ars/scripts/recompute_receipts.py +1414 -0
  638. package/vendor/ars/scripts/render_claim_standing_view.py +374 -0
  639. package/vendor/ars/scripts/render_eval_comment.py +130 -0
  640. package/vendor/ars/scripts/render_harness_retirement_issue.py +167 -0
  641. package/vendor/ars/scripts/repro_lock_validation.py +90 -0
  642. package/vendor/ars/scripts/research_workflow_profile.py +1079 -0
  643. package/vendor/ars/scripts/resolve_human_subjects_authority.py +1158 -0
  644. package/vendor/ars/scripts/resolve_review_target_context.py +683 -0
  645. package/vendor/ars/scripts/resume_e4_record.py +509 -0
  646. package/vendor/ars/scripts/retraction_status.py +484 -0
  647. package/vendor/ars/scripts/review_criteria_binding.py +889 -0
  648. package/vendor/ars/scripts/review_panel_provenance.py +744 -0
  649. package/vendor/ars/scripts/revision_roadmap.py +1967 -0
  650. package/vendor/ars/scripts/run_ci_pytest_manifest.py +116 -0
  651. package/vendor/ars/scripts/run_codex_audit.sh +1191 -0
  652. package/vendor/ars/scripts/run_evals.py +513 -0
  653. package/vendor/ars/scripts/run_ideation_diversity_no_call.py +3505 -0
  654. package/vendor/ars/scripts/run_indirect_prompt_injection_no_call.py +3330 -0
  655. package/vendor/ars/scripts/run_indirect_prompt_injection_probe.py +399 -0
  656. package/vendor/ars/scripts/run_review_criteria_constructive_value.py +1895 -0
  657. package/vendor/ars/scripts/run_role_topology_utility_dry_run.py +606 -0
  658. package/vendor/ars/scripts/score_review_criteria_constructive_value.py +617 -0
  659. package/vendor/ars/scripts/semantic_scholar_client.py +291 -0
  660. package/vendor/ars/scripts/slr_lineage.py +59 -0
  661. package/vendor/ars/scripts/sync_adapter_docs.py +118 -0
  662. package/vendor/ars/scripts/temporal_integrity_audit.py +840 -0
  663. package/vendor/ars/scripts/test_431_exact_or_bust.py +253 -0
  664. package/vendor/ars/scripts/test__eval_threshold_gate.py +125 -0
  665. package/vendor/ars/scripts/test__markdown_lint_util.py +129 -0
  666. package/vendor/ars/scripts/test__next_verified_at_ms.py +256 -0
  667. package/vendor/ars/scripts/test_adjacent_framing_probe_lint.py +171 -0
  668. package/vendor/ars/scripts/test_adjudication_activity.py +1515 -0
  669. package/vendor/ars/scripts/test_ars_anchorize_draft.py +178 -0
  670. package/vendor/ars/scripts/test_ars_apply_revision_patch.py +1335 -0
  671. package/vendor/ars/scripts/test_ars_cache_invalidate.py +51 -0
  672. package/vendor/ars/scripts/test_ars_mark_read.py +910 -0
  673. package/vendor/ars/scripts/test_ars_update_check.py +816 -0
  674. package/vendor/ars/scripts/test_ars_write_scope_guard.py +790 -0
  675. package/vendor/ars/scripts/test_arxiv_client.py +374 -0
  676. package/vendor/ars/scripts/test_audit_schemas.py +560 -0
  677. package/vendor/ars/scripts/test_audit_snapshot_render_section_0.py +105 -0
  678. package/vendor/ars/scripts/test_block_parser.py +259 -0
  679. package/vendor/ars/scripts/test_bootstrap_timeline_yaml.py +148 -0
  680. package/vendor/ars/scripts/test_build_claim_standing_candidate_ledger.py +1203 -0
  681. package/vendor/ars/scripts/test_build_claim_standing_query_plan.py +791 -0
  682. package/vendor/ars/scripts/test_build_submission_packet_manifest.py +2644 -0
  683. package/vendor/ars/scripts/test_check_215_field_norm.py +238 -0
  684. package/vendor/ars/scripts/test_check_216_surface_form.py +341 -0
  685. package/vendor/ars/scripts/test_check_268_nested_commitment_ledger.py +194 -0
  686. package/vendor/ars/scripts/test_check_390_revision_patch_discipline.py +279 -0
  687. package/vendor/ars/scripts/test_check_392_citation_verification_intake.py +144 -0
  688. package/vendor/ars/scripts/test_check_394_submission_policy.py +200 -0
  689. package/vendor/ars/scripts/test_check_439_format_profile.py +252 -0
  690. package/vendor/ars/scripts/test_check_619_disclosure_closeout.py +158 -0
  691. package/vendor/ars/scripts/test_check_630_codex_subscription_transport.py +245 -0
  692. package/vendor/ars/scripts/test_check_669_review_pathway_rule_trace.py +304 -0
  693. package/vendor/ars/scripts/test_check_670_revision_roadmap_integration.py +260 -0
  694. package/vendor/ars/scripts/test_check_673_adjudication_activity.py +367 -0
  695. package/vendor/ars/scripts/test_check_684_review_criteria_binding.py +274 -0
  696. package/vendor/ars/scripts/test_check_agents_mirror_sync.py +137 -0
  697. package/vendor/ars/scripts/test_check_audit_artifact_consistency.py +2133 -0
  698. package/vendor/ars/scripts/test_check_benchmark_report.py +117 -0
  699. package/vendor/ars/scripts/test_check_bibliographic_integrity_signals.py +609 -0
  700. package/vendor/ars/scripts/test_check_calibration_tiers.py +376 -0
  701. package/vendor/ars/scripts/test_check_changelog_covers_merges.py +509 -0
  702. package/vendor/ars/scripts/test_check_ci_pytest_manifest.py +425 -0
  703. package/vendor/ars/scripts/test_check_claim_standing_candidate_ledger_integration.py +256 -0
  704. package/vendor/ars/scripts/test_check_claim_standing_freshness.py +277 -0
  705. package/vendor/ars/scripts/test_check_collaboration_depth_rubric.py +239 -0
  706. package/vendor/ars/scripts/test_check_command_frontmatter_name.py +178 -0
  707. package/vendor/ars/scripts/test_check_committee_correspondence.py +298 -0
  708. package/vendor/ars/scripts/test_check_compliance_report.py +381 -0
  709. package/vendor/ars/scripts/test_check_content_coverage_advisory_integration.py +308 -0
  710. package/vendor/ars/scripts/test_check_control_availability.py +361 -0
  711. package/vendor/ars/scripts/test_check_cross_document_consistency_advisory_integration.py +698 -0
  712. package/vendor/ars/scripts/test_check_cross_model_handoff_contract.py +301 -0
  713. package/vendor/ars/scripts/test_check_cross_model_verification_sync.py +203 -0
  714. package/vendor/ars/scripts/test_check_data_access_level.py +227 -0
  715. package/vendor/ars/scripts/test_check_data_flows.py +382 -0
  716. package/vendor/ars/scripts/test_check_decision_contract.py +387 -0
  717. package/vendor/ars/scripts/test_check_degradation_registry.py +270 -0
  718. package/vendor/ars/scripts/test_check_distribution_surface_claims.py +225 -0
  719. package/vendor/ars/scripts/test_check_domain_evidence_profile.py +439 -0
  720. package/vendor/ars/scripts/test_check_e4_promotion.py +163 -0
  721. package/vendor/ars/scripts/test_check_evals_gold_set.py +312 -0
  722. package/vendor/ars/scripts/test_check_evidence_row_integration.py +187 -0
  723. package/vendor/ars/scripts/test_check_field_norm_severity.py +173 -0
  724. package/vendor/ars/scripts/test_check_firm_rules_sync.py +342 -0
  725. package/vendor/ars/scripts/test_check_heldout_measurement_report.py +1508 -0
  726. package/vendor/ars/scripts/test_check_human_subjects_output_contract.py +129 -0
  727. package/vendor/ars/scripts/test_check_human_subjects_reference_migration.py +756 -0
  728. package/vendor/ars/scripts/test_check_instruction_data_boundary.py +204 -0
  729. package/vendor/ars/scripts/test_check_judge_prompt_version.py +90 -0
  730. package/vendor/ars/scripts/test_check_model_tiering.py +236 -0
  731. package/vendor/ars/scripts/test_check_panel_synthesis.py +1658 -0
  732. package/vendor/ars/scripts/test_check_passport_reset_contract.py +249 -0
  733. package/vendor/ars/scripts/test_check_pattern_eval_manifest.py +381 -0
  734. package/vendor/ars/scripts/test_check_persuasion_invariance_fixtures.py +591 -0
  735. package/vendor/ars/scripts/test_check_phase_conformance.py +4366 -0
  736. package/vendor/ars/scripts/test_check_pipeline_boundary_semantics.py +931 -0
  737. package/vendor/ars/scripts/test_check_pipeline_integrity.py +243 -0
  738. package/vendor/ars/scripts/test_check_policy_anchor_protocol.py +236 -0
  739. package/vendor/ars/scripts/test_check_policy_anchor_table.py +295 -0
  740. package/vendor/ars/scripts/test_check_prisma_trAIce_freshness.py +68 -0
  741. package/vendor/ars/scripts/test_check_promotion_bakeoff_preregistration.py +799 -0
  742. package/vendor/ars/scripts/test_check_ranking_lift.py +377 -0
  743. package/vendor/ars/scripts/test_check_re_review_synthesis.py +3398 -0
  744. package/vendor/ars/scripts/test_check_receipt_enum_sync.py +176 -0
  745. package/vendor/ars/scripts/test_check_repro_lock.py +107 -0
  746. package/vendor/ars/scripts/test_check_reviewer_data_fences.py +334 -0
  747. package/vendor/ars/scripts/test_check_reviewer_finding_contract.py +1107 -0
  748. package/vendor/ars/scripts/test_check_reviewer_role_label.py +491 -0
  749. package/vendor/ars/scripts/test_check_reviewer_scoring_honesty.py +222 -0
  750. package/vendor/ars/scripts/test_check_reviewer_sprint_prompt_sync.py +373 -0
  751. package/vendor/ars/scripts/test_check_revision_claim_drift_suite_v2.py +1925 -0
  752. package/vendor/ars/scripts/test_check_revision_token_conservation.py +398 -0
  753. package/vendor/ars/scripts/test_check_risk_register.py +336 -0
  754. package/vendor/ars/scripts/test_check_role_scoped_contract.py +1104 -0
  755. package/vendor/ars/scripts/test_check_rq_framing_patterns.py +110 -0
  756. package/vendor/ars/scripts/test_check_rubric_weight_consistency.py +32 -0
  757. package/vendor/ars/scripts/test_check_seeded_defect_fixtures.py +392 -0
  758. package/vendor/ars/scripts/test_check_setup_cross_model_parity.py +121 -0
  759. package/vendor/ars/scripts/test_check_spec_consistency.py +1081 -0
  760. package/vendor/ars/scripts/test_check_sprint_contract.py +458 -0
  761. package/vendor/ars/scripts/test_check_stage_capability_matrix.py +698 -0
  762. package/vendor/ars/scripts/test_check_submission_packet_manifest_integration.py +177 -0
  763. package/vendor/ars/scripts/test_check_surface_form_parity.py +417 -0
  764. package/vendor/ars/scripts/test_check_task_type.py +116 -0
  765. package/vendor/ars/scripts/test_check_tools_allowlist.py +835 -0
  766. package/vendor/ars/scripts/test_check_tortured_phrase_screening_integration.py +1306 -0
  767. package/vendor/ars/scripts/test_check_v3_10_134_write_scope.py +251 -0
  768. package/vendor/ars/scripts/test_check_v3_10_policy.py +547 -0
  769. package/vendor/ars/scripts/test_check_v3_6_7_pattern_protection.py +960 -0
  770. package/vendor/ars/scripts/test_check_v3_6_8_audit_scope_block.py +1000 -0
  771. package/vendor/ars/scripts/test_check_v3_6_8_cite_provenance_pipeline.py +454 -0
  772. package/vendor/ars/scripts/test_check_v3_6_8_frontmatter_trust_schema.py +581 -0
  773. package/vendor/ars/scripts/test_check_v3_6_8_mark_read_commands.py +120 -0
  774. package/vendor/ars/scripts/test_check_v3_6_8_pattern_protection.py +1138 -0
  775. package/vendor/ars/scripts/test_check_v3_7_3_three_layer_citation.py +566 -0
  776. package/vendor/ars/scripts/test_check_v3_8_annotation_literal_sync.py +262 -0
  777. package/vendor/ars/scripts/test_check_v3_9_0_triangulation.py +321 -0
  778. package/vendor/ars/scripts/test_check_v3_9_2_phase_boundary.py +190 -0
  779. package/vendor/ars/scripts/test_check_v3_9_4_temporal_verification.py +471 -0
  780. package/vendor/ars/scripts/test_check_version_consistency.py +1462 -0
  781. package/vendor/ars/scripts/test_check_workflow_classification.py +225 -0
  782. package/vendor/ars/scripts/test_chinese_literature_client.py +1889 -0
  783. package/vendor/ars/scripts/test_citation_existence_policy.py +480 -0
  784. package/vendor/ars/scripts/test_citation_verification_summary.py +342 -0
  785. package/vendor/ars/scripts/test_claim_audit_calibration.py +882 -0
  786. package/vendor/ars/scripts/test_claim_audit_finalizer.py +979 -0
  787. package/vendor/ars/scripts/test_claim_audit_pipeline.py +2398 -0
  788. package/vendor/ars/scripts/test_claim_audit_schema.py +1778 -0
  789. package/vendor/ars/scripts/test_claim_intent_manifest.py +666 -0
  790. package/vendor/ars/scripts/test_claim_registry_coverage.py +246 -0
  791. package/vendor/ars/scripts/test_claim_standing_discovery.py +579 -0
  792. package/vendor/ars/scripts/test_claim_standing_pipeline_wiring.py +290 -0
  793. package/vendor/ars/scripts/test_claim_standing_stance_assets.py +399 -0
  794. package/vendor/ars/scripts/test_claim_standing_stance_contracts.py +383 -0
  795. package/vendor/ars/scripts/test_claim_standing_stance_runner.py +349 -0
  796. package/vendor/ars/scripts/test_claim_standing_transmissions.py +605 -0
  797. package/vendor/ars/scripts/test_claim_strength_drift_disposition.py +517 -0
  798. package/vendor/ars/scripts/test_claim_verification_coverage_contract.py +104 -0
  799. package/vendor/ars/scripts/test_contamination_signals.py +1086 -0
  800. package/vendor/ars/scripts/test_content_coverage_advisory.py +1767 -0
  801. package/vendor/ars/scripts/test_cross_document_consistency_advisory.py +1270 -0
  802. package/vendor/ars/scripts/test_cross_model_codex_transport.py +1152 -0
  803. package/vendor/ars/scripts/test_cross_model_handoff.py +571 -0
  804. package/vendor/ars/scripts/test_cross_model_verification_guards.py +792 -0
  805. package/vendor/ars/scripts/test_crossref_client.py +393 -0
  806. package/vendor/ars/scripts/test_dispatch_e4_panel.py +4235 -0
  807. package/vendor/ars/scripts/test_e2e_claim_audit.py +540 -0
  808. package/vendor/ars/scripts/test_eval_harness_workflow.py +140 -0
  809. package/vendor/ars/scripts/test_evals_citation_extraction.py +150 -0
  810. package/vendor/ars/scripts/test_evals_lift_report_schema.py +108 -0
  811. package/vendor/ars/scripts/test_evidence_rows.py +2593 -0
  812. package/vendor/ars/scripts/test_experiment_provenance.py +915 -0
  813. package/vendor/ars/scripts/test_human_read_attestation_resolver.py +477 -0
  814. package/vendor/ars/scripts/test_ideation_diversity_assignment_gate.py +615 -0
  815. package/vendor/ars/scripts/test_indirect_prompt_injection_behavior_probe.py +250 -0
  816. package/vendor/ars/scripts/test_inquiry_branch_ledger.py +2296 -0
  817. package/vendor/ars/scripts/test_migrate_literature_corpus_to_v3_10.py +248 -0
  818. package/vendor/ars/scripts/test_migrate_literature_corpus_to_v3_7_3.py +545 -0
  819. package/vendor/ars/scripts/test_migrate_literature_corpus_to_v3_9_0.py +497 -0
  820. package/vendor/ars/scripts/test_normalize_compat_verdict.py +149 -0
  821. package/vendor/ars/scripts/test_openalex_client.py +490 -0
  822. package/vendor/ars/scripts/test_passport_yaml.py +104 -0
  823. package/vendor/ars/scripts/test_pattern_eval_runtime.py +1295 -0
  824. package/vendor/ars/scripts/test_pdf_read_preflight.py +1943 -0
  825. package/vendor/ars/scripts/test_policy_anchor_disclosure.py +666 -0
  826. package/vendor/ars/scripts/test_reading_probe_lint.py +218 -0
  827. package/vendor/ars/scripts/test_recompute_receipts.py +778 -0
  828. package/vendor/ars/scripts/test_render_claim_standing_view.py +192 -0
  829. package/vendor/ars/scripts/test_render_eval_comment.py +162 -0
  830. package/vendor/ars/scripts/test_render_harness_retirement_issue.py +110 -0
  831. package/vendor/ars/scripts/test_repro_lock_validation_drift.py +100 -0
  832. package/vendor/ars/scripts/test_research_workflow_profile.py +734 -0
  833. package/vendor/ars/scripts/test_resolve_human_subjects_authority.py +1219 -0
  834. package/vendor/ars/scripts/test_resolve_review_target_context.py +703 -0
  835. package/vendor/ars/scripts/test_resume_e4_record.py +315 -0
  836. package/vendor/ars/scripts/test_retraction_status.py +456 -0
  837. package/vendor/ars/scripts/test_review_criteria_binding.py +629 -0
  838. package/vendor/ars/scripts/test_review_panel_provenance.py +565 -0
  839. package/vendor/ars/scripts/test_review_pathway_rule_trace.py +821 -0
  840. package/vendor/ars/scripts/test_revision_roadmap.py +1255 -0
  841. package/vendor/ars/scripts/test_run_ci_pytest_manifest.py +186 -0
  842. package/vendor/ars/scripts/test_run_codex_audit_e2e.py +369 -0
  843. package/vendor/ars/scripts/test_run_evals.py +430 -0
  844. package/vendor/ars/scripts/test_run_guard_launcher.py +500 -0
  845. package/vendor/ars/scripts/test_run_ideation_diversity_no_call.py +1833 -0
  846. package/vendor/ars/scripts/test_run_indirect_prompt_injection_no_call.py +1889 -0
  847. package/vendor/ars/scripts/test_run_review_criteria_constructive_value.py +586 -0
  848. package/vendor/ars/scripts/test_run_role_topology_utility_dry_run.py +428 -0
  849. package/vendor/ars/scripts/test_score_review_criteria_constructive_value.py +340 -0
  850. package/vendor/ars/scripts/test_semantic_scholar_client.py +554 -0
  851. package/vendor/ars/scripts/test_slr_lineage_emission.py +230 -0
  852. package/vendor/ars/scripts/test_socratic_rq_non_generation_contract.py +173 -0
  853. package/vendor/ars/scripts/test_temporal_integrity_audit.py +438 -0
  854. package/vendor/ars/scripts/test_text_similarity.py +95 -0
  855. package/vendor/ars/scripts/test_title_fuzzy_false_positive.py +111 -0
  856. package/vendor/ars/scripts/test_tortured_phrase_screening.py +2959 -0
  857. package/vendor/ars/scripts/test_transport_fixture_citation_gate.py +338 -0
  858. package/vendor/ars/scripts/test_uncited_assertion.py +558 -0
  859. package/vendor/ars/scripts/test_v3_6_7_phase_6_6.py +1279 -0
  860. package/vendor/ars/scripts/test_validate_compliance_fixtures.py +36 -0
  861. package/vendor/ars/scripts/test_validate_ideation_diversity_assets.py +230 -0
  862. package/vendor/ars/scripts/test_venue_disclosure_contract.py +755 -0
  863. package/vendor/ars/scripts/test_verification_cache.py +280 -0
  864. package/vendor/ars/scripts/test_verification_gate.py +461 -0
  865. package/vendor/ars/scripts/test_verify_passport_cli.py +123 -0
  866. package/vendor/ars/scripts/test_verify_submission_package.py +1407 -0
  867. package/vendor/ars/scripts/test_version_records_schema.py +211 -0
  868. package/vendor/ars/scripts/tortured_phrase_screening.py +3502 -0
  869. package/vendor/ars/scripts/uncited_assertion_detector.py +254 -0
  870. package/vendor/ars/scripts/v3_6_7_inversion_manifest.json +9 -0
  871. package/vendor/ars/scripts/v3_6_8_inversion_manifest.json +10 -0
  872. package/vendor/ars/scripts/validate_claim_standing_stance_assets.py +249 -0
  873. package/vendor/ars/scripts/validate_compliance_fixtures.py +56 -0
  874. package/vendor/ars/scripts/validate_ideation_diversity_assets.py +303 -0
  875. package/vendor/ars/scripts/venue_disclosure_contract_harness.py +837 -0
  876. package/vendor/ars/scripts/verification_cache.py +276 -0
  877. package/vendor/ars/scripts/verification_gate/__init__.py +345 -0
  878. package/vendor/ars/scripts/verify_passport.py +133 -0
  879. package/vendor/ars/scripts/verify_submission_package.py +1657 -0
  880. package/vendor/ars/shared/agents/compliance_agent.md +136 -0
  881. package/vendor/ars/shared/artifact_reproducibility_pattern.md +173 -0
  882. package/vendor/ars/shared/benchmark_report.schema.json +81 -0
  883. package/vendor/ars/shared/benchmark_report_pattern.md +180 -0
  884. package/vendor/ars/shared/bibliographic_integrity_signals.md +142 -0
  885. package/vendor/ars/shared/collaboration_depth_rubric.md +154 -0
  886. package/vendor/ars/shared/compliance_checkpoint_protocol.md +162 -0
  887. package/vendor/ars/shared/compliance_report.schema.json +187 -0
  888. package/vendor/ars/shared/contracts/README.md +938 -0
  889. package/vendor/ars/shared/contracts/activity/adjudication_activity_input.schema.json +555 -0
  890. package/vendor/ars/shared/contracts/activity/adjudication_activity_store.schema.json +560 -0
  891. package/vendor/ars/shared/contracts/audit/audit_jsonl.schema.json +128 -0
  892. package/vendor/ars/shared/contracts/audit/audit_sidecar.schema.json +169 -0
  893. package/vendor/ars/shared/contracts/audit/audit_verdict.schema.json +133 -0
  894. package/vendor/ars/shared/contracts/audit/cross_document_consistency_advisory.schema.json +480 -0
  895. package/vendor/ars/shared/contracts/audit/cross_document_consistency_advisory_draft.schema.json +564 -0
  896. package/vendor/ars/shared/contracts/audit/cross_document_source_manifest.schema.json +202 -0
  897. package/vendor/ars/shared/contracts/audit/tortured_phrase_advisory.schema.json +1362 -0
  898. package/vendor/ars/shared/contracts/audit/tortured_phrase_snapshot.schema.json +208 -0
  899. package/vendor/ars/shared/contracts/audit/tortured_phrase_snapshot_manifest.schema.json +335 -0
  900. package/vendor/ars/shared/contracts/capability/stage_capability_matrix.json +434 -0
  901. package/vendor/ars/shared/contracts/claim_standing/candidate_ledger.schema.json +705 -0
  902. package/vendor/ars/shared/contracts/claim_standing/query_plan.schema.json +389 -0
  903. package/vendor/ars/shared/contracts/claim_standing/query_plan_v1_1.schema.json +782 -0
  904. package/vendor/ars/shared/contracts/claim_standing/retrieval_input.schema.json +440 -0
  905. package/vendor/ars/shared/contracts/claim_standing/stance_record.schema.json +460 -0
  906. package/vendor/ars/shared/contracts/claim_standing/transmission_ledger.schema.json +282 -0
  907. package/vendor/ars/shared/contracts/cross_model/codex_citation_receipt.schema.json +157 -0
  908. package/vendor/ars/shared/contracts/cross_model/codex_citation_request.schema.json +23 -0
  909. package/vendor/ars/shared/contracts/cross_model/promotion_bakeoff_sealed_commitment.schema.json +55 -0
  910. package/vendor/ars/shared/contracts/cross_model/promotion_bakeoff_sealed_reveal.schema.json +50 -0
  911. package/vendor/ars/shared/contracts/degradation_registry.json +428 -0
  912. package/vendor/ars/shared/contracts/evaluator/full.json +126 -0
  913. package/vendor/ars/shared/contracts/evidence/claim_registry.schema.json +50 -0
  914. package/vendor/ars/shared/contracts/evidence/claim_registry_coverage_report.schema.json +79 -0
  915. package/vendor/ars/shared/contracts/evidence/evidence_row.schema.json +504 -0
  916. package/vendor/ars/shared/contracts/evidence/evidence_row_v1_1.schema.json +364 -0
  917. package/vendor/ars/shared/contracts/evidence/evidence_row_v1_2.schema.json +714 -0
  918. package/vendor/ars/shared/contracts/evidence/evidence_row_v1_3.schema.json +524 -0
  919. package/vendor/ars/shared/contracts/human_subjects/authority_profile_registry.schema.json +497 -0
  920. package/vendor/ars/shared/contracts/human_subjects/committee_correspondence.schema.json +253 -0
  921. package/vendor/ars/shared/contracts/human_subjects/content_coverage_advisory.schema.json +620 -0
  922. package/vendor/ars/shared/contracts/human_subjects/irb_context_record.schema.json +329 -0
  923. package/vendor/ars/shared/contracts/human_subjects/resolved_authority_context.schema.json +347 -0
  924. package/vendor/ars/shared/contracts/human_subjects/review_pathway_rule_trace.schema.json +265 -0
  925. package/vendor/ars/shared/contracts/human_subjects/review_pathway_trace_request.schema.json +127 -0
  926. package/vendor/ars/shared/contracts/human_subjects/submission_packet_inventory.schema.json +240 -0
  927. package/vendor/ars/shared/contracts/human_subjects/submission_packet_manifest.schema.json +999 -0
  928. package/vendor/ars/shared/contracts/passport/audit_artifact_entry.schema.json +266 -0
  929. package/vendor/ars/shared/contracts/passport/bibliographic_integrity_signal.schema.json +1676 -0
  930. package/vendor/ars/shared/contracts/passport/citation_provenance.schema.json +107 -0
  931. package/vendor/ars/shared/contracts/passport/citation_verification_summary.schema.json +164 -0
  932. package/vendor/ars/shared/contracts/passport/claim_audit_result.schema.json +124 -0
  933. package/vendor/ars/shared/contracts/passport/claim_drift.schema.json +58 -0
  934. package/vendor/ars/shared/contracts/passport/claim_intent_manifest.schema.json +107 -0
  935. package/vendor/ars/shared/contracts/passport/constraint_violation.schema.json +65 -0
  936. package/vendor/ars/shared/contracts/passport/experiment_alignment_result.schema.json +69 -0
  937. package/vendor/ars/shared/contracts/passport/experiment_provenance_entry.schema.json +169 -0
  938. package/vendor/ars/shared/contracts/passport/human_read_log.schema.json +86 -0
  939. package/vendor/ars/shared/contracts/passport/inquiry_ledger_ref.schema.json +22 -0
  940. package/vendor/ars/shared/contracts/passport/literature_corpus_entry.schema.json +650 -0
  941. package/vendor/ars/shared/contracts/passport/preregistration_artifact.schema.json +132 -0
  942. package/vendor/ars/shared/contracts/passport/rejection_log.schema.json +89 -0
  943. package/vendor/ars/shared/contracts/passport/reset_ledger_entry.schema.json +158 -0
  944. package/vendor/ars/shared/contracts/passport/temporal_audit_results.schema.json +208 -0
  945. package/vendor/ars/shared/contracts/passport/terminal_policies.schema.json +50 -0
  946. package/vendor/ars/shared/contracts/passport/timeline.schema.json +102 -0
  947. package/vendor/ars/shared/contracts/passport/uncited_assertion.schema.json +56 -0
  948. package/vendor/ars/shared/contracts/passport/uncited_audit_failure.schema.json +72 -0
  949. package/vendor/ars/shared/contracts/passport/user_attested_read_resolution.schema.json +87 -0
  950. package/vendor/ars/shared/contracts/passport/version_records.schema.json +138 -0
  951. package/vendor/ars/shared/contracts/patch/block_manifest.schema.json +45 -0
  952. package/vendor/ars/shared/contracts/patch/legacy/v1_0/revision_patch.schema.json +110 -0
  953. package/vendor/ars/shared/contracts/patch/revision_patch.schema.json +250 -0
  954. package/vendor/ars/shared/contracts/pdf/pdf_content_classifier_diagnostic.schema.json +39 -0
  955. package/vendor/ars/shared/contracts/pdf/pdf_content_classifier_worker.schema.json +88 -0
  956. package/vendor/ars/shared/contracts/pdf/pdf_read_preflight.schema.json +227 -0
  957. package/vendor/ars/shared/contracts/re_review/input_manifest.schema.json +161 -0
  958. package/vendor/ars/shared/contracts/re_review/legacy/v1_0/input_manifest.schema.json +134 -0
  959. package/vendor/ars/shared/contracts/re_review/legacy/v1_0/precommitment.schema.json +193 -0
  960. package/vendor/ars/shared/contracts/re_review/legacy/v1_0/traceability.schema.json +841 -0
  961. package/vendor/ars/shared/contracts/re_review/legacy/v1_0/verdict_record.schema.json +244 -0
  962. package/vendor/ars/shared/contracts/re_review/precommitment.schema.json +193 -0
  963. package/vendor/ars/shared/contracts/re_review/traceability.schema.json +916 -0
  964. package/vendor/ars/shared/contracts/re_review/verdict_record.schema.json +245 -0
  965. package/vendor/ars/shared/contracts/research_workflow/inquiry_branch_ledger.schema.json +449 -0
  966. package/vendor/ars/shared/contracts/research_workflow/research_workflow_profile.schema.json +222 -0
  967. package/vendor/ars/shared/contracts/research_workflow/research_workflow_profile_selection_receipt.schema.json +111 -0
  968. package/vendor/ars/shared/contracts/review_target/constructive_review_findings.schema.json +172 -0
  969. package/vendor/ars/shared/contracts/review_target/criteria_registry.schema.json +97 -0
  970. package/vendor/ars/shared/contracts/review_target/review_criteria_binding_manifest.schema.json +235 -0
  971. package/vendor/ars/shared/contracts/review_target/review_criteria_source_receipt.schema.json +158 -0
  972. package/vendor/ars/shared/contracts/review_target/review_target_context.schema.json +106 -0
  973. package/vendor/ars/shared/contracts/review_target/review_target_declaration.schema.json +118 -0
  974. package/vendor/ars/shared/contracts/reviewer/full.json +114 -0
  975. package/vendor/ars/shared/contracts/reviewer/methodology_focus.json +75 -0
  976. package/vendor/ars/shared/contracts/reviewer/review_panel_provenance.schema.json +263 -0
  977. package/vendor/ars/shared/contracts/reviewer/review_panel_provenance_carrier.schema.json +122 -0
  978. package/vendor/ars/shared/contracts/reviewer/review_panel_provenance_input.schema.json +120 -0
  979. package/vendor/ars/shared/contracts/revision/author_adjudication.schema.json +251 -0
  980. package/vendor/ars/shared/contracts/revision/author_adjudication_input.schema.json +25 -0
  981. package/vendor/ars/shared/contracts/revision/claim_strength_drift_disposition.schema.json +97 -0
  982. package/vendor/ars/shared/contracts/revision/claim_strength_drift_disposition_input.schema.json +80 -0
  983. package/vendor/ars/shared/contracts/revision/claim_strength_drift_findings.schema.json +139 -0
  984. package/vendor/ars/shared/contracts/revision/claim_surface_manifest.schema.json +99 -0
  985. package/vendor/ars/shared/contracts/revision/integrity_correction_authorization.schema.json +140 -0
  986. package/vendor/ars/shared/contracts/revision/integrity_correction_authorization_input.schema.json +28 -0
  987. package/vendor/ars/shared/contracts/revision/integrity_correction_list.schema.json +48 -0
  988. package/vendor/ars/shared/contracts/revision/integrity_pass_receipt.schema.json +16 -0
  989. package/vendor/ars/shared/contracts/revision/revision_evidence_bundle.schema.json +134 -0
  990. package/vendor/ars/shared/contracts/revision/revision_roadmap.schema.json +334 -0
  991. package/vendor/ars/shared/contracts/submission/format_profile.example.yaml +33 -0
  992. package/vendor/ars/shared/contracts/submission/format_profile.schema.json +102 -0
  993. package/vendor/ars/shared/contracts/submission/submission_verification_report.schema.json +233 -0
  994. package/vendor/ars/shared/contracts/submission/venue_profile.schema.json +114 -0
  995. package/vendor/ars/shared/contracts/writer/full.json +87 -0
  996. package/vendor/ars/shared/cross_model_verification.md +714 -0
  997. package/vendor/ars/shared/evals_lift_report.schema.json +141 -0
  998. package/vendor/ars/shared/ground_truth_isolation_pattern.md +275 -0
  999. package/vendor/ars/shared/handoff_schemas.md +1209 -0
  1000. package/vendor/ars/shared/human_subjects_authority_registry.json +1278 -0
  1001. package/vendor/ars/shared/mode_spectrum.md +57 -0
  1002. package/vendor/ars/shared/model_tiering.md +83 -0
  1003. package/vendor/ars/shared/policy_data/nature_policy.md +56 -0
  1004. package/vendor/ars/shared/prisma_trAIce_protocol.md +157 -0
  1005. package/vendor/ars/shared/raise_framework.md +129 -0
  1006. package/vendor/ars/shared/references/authority_content_coverage_advisory_protocol.md +275 -0
  1007. package/vendor/ars/shared/references/claim_standing_candidate_ledger_protocol.md +66 -0
  1008. package/vendor/ars/shared/references/claim_strength_ladder.md +93 -0
  1009. package/vendor/ars/shared/references/cross_document_consistency_advisory_protocol.md +263 -0
  1010. package/vendor/ars/shared/references/evidence_row_protocol.md +260 -0
  1011. package/vendor/ars/shared/references/firm_rules.md +90 -0
  1012. package/vendor/ars/shared/references/human_subjects_authority_protocol.md +274 -0
  1013. package/vendor/ars/shared/references/intent_clarification_protocol.md +168 -0
  1014. package/vendor/ars/shared/references/irb_terminology_glossary.md +229 -0
  1015. package/vendor/ars/shared/references/protected_hedging_phrases.md +118 -0
  1016. package/vendor/ars/shared/references/psychometric_terminology_glossary.md +109 -0
  1017. package/vendor/ars/shared/references/review_criteria_consumer_protocol.md +238 -0
  1018. package/vendor/ars/shared/references/review_pathway_rule_trace_protocol.md +166 -0
  1019. package/vendor/ars/shared/references/submission_packet_manifest_protocol.md +292 -0
  1020. package/vendor/ars/shared/references/word_count_conventions.md +124 -0
  1021. package/vendor/ars/shared/research_workflow_profiles/field_general.json +1 -0
  1022. package/vendor/ars/shared/review_criteria_registry.json +207 -0
  1023. package/vendor/ars/shared/review_criteria_sources/msr-2027-technical-papers.2026-08-24.json +46 -0
  1024. package/vendor/ars/shared/review_criteria_sources/sigsoft-empirical-standards.2026-08-24.json +31 -0
  1025. package/vendor/ars/shared/sprint_contract.schema.json +482 -0
  1026. package/vendor/ars/shared/style_calibration_protocol.md +151 -0
  1027. package/vendor/ars/shared/templates/codex_audit_multifile_template.md +263 -0
  1028. package/vendor/ars/tools/release-discipline/.toolkit-version +1 -0
  1029. package/vendor/ars/tools/release-discipline/README.md +4 -0
  1030. package/vendor/ars/tools/release-discipline/scripts/_release_doc_alignment_schema.py +1011 -0
  1031. package/vendor/ars/tools/release-discipline/scripts/check_command_invariants.py +497 -0
  1032. package/vendor/ars/tools/release-discipline/scripts/check_release_doc_alignment.py +263 -0
  1033. package/vendor/ars/tools/release-discipline/scripts/sync-toolkit.sh +147 -0
  1034. package/vendor/windows/NOTICE.md +12 -0
  1035. package/vendor/windows/arm64/fd.exe +0 -0
  1036. package/vendor/windows/arm64/licenses/fd/LICENSE-APACHE +201 -0
  1037. package/vendor/windows/arm64/licenses/fd/LICENSE-MIT +21 -0
  1038. package/vendor/windows/arm64/licenses/ripgrep/COPYING +3 -0
  1039. package/vendor/windows/arm64/licenses/ripgrep/LICENSE-MIT +21 -0
  1040. package/vendor/windows/arm64/licenses/ripgrep/UNLICENSE +24 -0
  1041. package/vendor/windows/arm64/rg.exe +0 -0
  1042. package/vendor/windows/x64/fd.exe +0 -0
  1043. package/vendor/windows/x64/licenses/fd/LICENSE-APACHE +201 -0
  1044. package/vendor/windows/x64/licenses/fd/LICENSE-MIT +21 -0
  1045. package/vendor/windows/x64/licenses/ripgrep/COPYING +3 -0
  1046. package/vendor/windows/x64/licenses/ripgrep/LICENSE-MIT +21 -0
  1047. package/vendor/windows/x64/licenses/ripgrep/UNLICENSE +24 -0
  1048. package/vendor/windows/x64/rg.exe +0 -0
@@ -0,0 +1,1081 @@
1
+ """Unit tests for check_spec_consistency.py.
2
+
3
+ Pre-#171, check_spec_consistency.py uses module-level ROOT + ERRORS state.
4
+ These tests monkey-patch ROOT into a TemporaryDirectory containing a minimal
5
+ fixture README, drive a specific checker directly, and read ERRORS. When
6
+ #171 lands the schema-driven manifest, these tests rewrite to call the
7
+ manifest runner instead.
8
+ """
9
+ from __future__ import annotations
10
+
11
+ import unittest
12
+ from pathlib import Path
13
+ from tempfile import TemporaryDirectory
14
+
15
+ from scripts import check_spec_consistency as csc
16
+
17
+
18
+ class TestRelativeMarkdownLinkGrammar(unittest.TestCase):
19
+ """#794: rendered-link grammar, with the old lint scope retained."""
20
+
21
+ def setUp(self) -> None:
22
+ self._old_root = csc.ROOT
23
+ csc.ERRORS.clear()
24
+ self._tmp = TemporaryDirectory()
25
+ csc.ROOT = Path(self._tmp.name)
26
+ (csc.ROOT / "docs").mkdir()
27
+
28
+ def tearDown(self) -> None:
29
+ csc.ROOT = self._old_root
30
+ csc.ERRORS.clear()
31
+ self._tmp.cleanup()
32
+
33
+ def _check(self, text: str) -> list[str]:
34
+ (csc.ROOT / "docs/PAGE.md").write_text(text, encoding="utf-8")
35
+ csc.check_relative_markdown_links("docs/PAGE.md")
36
+ return list(csc.ERRORS)
37
+
38
+ def test_rendered_dead_link_still_fires(self) -> None:
39
+ errors = self._check("[dead](MISSING.md)\n")
40
+ self.assertTrue(any("MISSING.md" in error for error in errors))
41
+
42
+ def test_non_rendering_and_image_targets_do_not_fire(self) -> None:
43
+ errors = self._check(
44
+ "![image](missing-image.png)\n"
45
+ "`[example](missing-inline.md)`\n"
46
+ "<!-- [commented](missing-comment.md) -->\n"
47
+ "```markdown\n[fenced](missing-fenced.md)\n```\n"
48
+ )
49
+ self.assertEqual(errors, [])
50
+
51
+ def test_titled_link_checks_only_its_destination(self) -> None:
52
+ errors = self._check('[dead](MISSING.md "optional title")\n')
53
+ self.assertEqual(
54
+ errors,
55
+ ["docs/PAGE.md: broken relative markdown link 'MISSING.md'"],
56
+ )
57
+
58
+ def test_existing_file_with_unknown_fragment_remains_out_of_scope(self) -> None:
59
+ (csc.ROOT / "docs/TARGET.md").write_text("# Real Heading\n", encoding="utf-8")
60
+ errors = self._check("[pointer](TARGET.md#not-a-real-heading)\n")
61
+ self.assertEqual(errors, [])
62
+
63
+
64
+ # Minimal ja-JP README capturing the version-bearing surfaces the lint needs
65
+ # to police: badge, release tag link, three release blocks (current + two
66
+ # prior so the symmetric structure with check_readme_zh_sections is visible),
67
+ # four localized mode headings, four skill-detail headings, and the DOCX line.
68
+ JA_README_TEMPLATE = """\
69
+ # Academic Research Skills
70
+
71
+ [![Version](https://img.shields.io/badge/version-v{ver}-blue)](https://github.com/Imbad0202/academic-research-skills/releases/tag/v{ver})
72
+
73
+ ## クイックスタート
74
+
75
+ #### Deep Research(8 モード)
76
+ - outline-only モード
77
+ - abstract-only モード
78
+ - disclosure モード
79
+ - review モード
80
+
81
+ #### Academic Paper(11 モード)
82
+
83
+ #### Academic Paper Reviewer(6 モード)
84
+ - calibration モード
85
+
86
+ #### Academic Pipeline(オーケストレーター)
87
+
88
+ ### Deep Research(v2.12.1)
89
+ ### Academic Paper(v3.3.1)
90
+ ### Academic Paper Reviewer(v1.11.1)
91
+ ### Academic Pipeline(v{ver})
92
+
93
+ ### サポートされる出力フォーマット
94
+
95
+ - DOCX(利用可能な場合 Pandoc 経由)
96
+
97
+ ## Changelog
98
+
99
+ ### v3.12.0 (2026-06-08) — latest entry
100
+ ### v3.11.1 (2026-06-06) — prior patch
101
+ ### v3.11.0 (2026-06-04) — prior patch
102
+ ### v3.10.0 (2026-06-01) — prior minor
103
+ ### v3.9.4.2 (2026-05-19) — CI discipline hotfix
104
+ ### v3.9.4.1 (2026-05-19) — previous hotfix
105
+ ### v3.9.4 (2026-05-18) — temporal verification
106
+ ### v3.9.1 (2026-05-18) — client hardening
107
+ ### v3.9.0 (2026-05-17) — triangulation
108
+ ### v3.8.0 (2026-05-16) — L3 audit
109
+ ### v3.7.0 (2026-05-05) — plugin packaging
110
+ ### v3.6.8 (2026-05-03) — generator-evaluator
111
+ ### v3.6.7 (2026-04-30) — pattern protection
112
+ ### v3.6.5 (2026-04-27) — corpus consumer
113
+ ### v3.6.4 (2026-04-25) — corpus input port
114
+ ### v3.6.3 (2026-04-23) — passport reset
115
+ ### v3.6.2 (2026-04-23) — reviewer sprint
116
+ ### v3.5.1 (2026-04-22) — reading-check probe
117
+ ### v3.5.0 (2026-04-21) — collaboration depth
118
+ ### v3.4.0 (2026-04-20) — compliance agent
119
+ ### v3.3.6 (2026-04-15) — README streamlining
120
+ ### v3.3.5 (2026-04-15)
121
+ ### v3.3.4 (2026-04-15) — changelog sync
122
+ ### v3.3.3 (2026-04-15) — release prep
123
+ ### v3.3.2 (2026-04-15) — data access levels
124
+
125
+ ## Version Info
126
+ - **Suite version**: {ver}
127
+ """
128
+
129
+
130
+ def _write_ja_readme(root: Path, version: str) -> None:
131
+ (root / "README.ja-JP.md").write_text(
132
+ JA_README_TEMPLATE.format(ver=version), encoding="utf-8"
133
+ )
134
+
135
+
136
+ # Minimal ko-KR README capturing the version-bearing surfaces check_readme_ko_sections
137
+ # polices: badge, release tag link, the same release-block list as the other locales,
138
+ # four localized mode headings ("N개 모드" with ASCII parens — Korean typographic norm
139
+ # matching English/ja, NOT the full-width zh form), four skill-detail headings (English
140
+ # ASCII-paren form reused verbatim), and the Korean DOCX line.
141
+ KO_README_TEMPLATE = """\
142
+ # Academic Research Skills
143
+
144
+ [![Version](https://img.shields.io/badge/version-v{ver}-blue)](https://github.com/Imbad0202/academic-research-skills/releases/tag/v{ver})
145
+
146
+ ## 빠른 시작
147
+
148
+ #### Deep Research (8개 모드)
149
+ - outline-only 모드
150
+ - abstract-only 모드
151
+ - disclosure 모드
152
+ - review 모드
153
+
154
+ #### Academic Paper (11개 모드)
155
+
156
+ #### Academic Paper Reviewer (6개 모드)
157
+ - calibration 모드
158
+
159
+ #### Academic Pipeline (오케스트레이터)
160
+
161
+ ### Deep Research (v2.12.1)
162
+ ### Academic Paper (v3.3.1)
163
+ ### Academic Paper Reviewer (v1.11.1)
164
+ ### Academic Pipeline (v{ver})
165
+
166
+ ### 지원되는 출력 형식
167
+
168
+ - DOCX (가능한 경우 Pandoc 경유)
169
+
170
+ ## 변경 이력
171
+
172
+ ### v3.21.1 (2026-08-24) — current release
173
+ ### v3.18.0 (2026-07-18) — prior minor
174
+ ### v3.12.0 (2026-06-08) — prior release
175
+ ### v3.11.1 (2026-06-06) — prior patch
176
+ ### v3.11.0 (2026-06-04) — prior patch
177
+ ### v3.10.0 (2026-06-01) — prior minor
178
+ ### v3.9.4.2 (2026-05-19) — CI discipline hotfix
179
+ ### v3.9.4.1 (2026-05-19) — previous hotfix
180
+ ### v3.9.4 (2026-05-18) — temporal verification
181
+ ### v3.9.1 (2026-05-18) — client hardening
182
+ ### v3.9.0 (2026-05-17) — triangulation
183
+ ### v3.8.0 (2026-05-16) — L3 audit
184
+ ### v3.7.0 (2026-05-05) — plugin packaging
185
+ ### v3.6.8 (2026-05-03) — generator-evaluator
186
+ ### v3.6.7 (2026-04-30) — pattern protection
187
+ ### v3.6.5 (2026-04-27) — corpus consumer
188
+ ### v3.6.4 (2026-04-25) — corpus input port
189
+ ### v3.6.3 (2026-04-23) — passport reset
190
+ ### v3.6.2 (2026-04-23) — reviewer sprint
191
+ ### v3.5.1 (2026-04-22) — reading-check probe
192
+ ### v3.5.0 (2026-04-21) — collaboration depth
193
+ ### v3.4.0 (2026-04-20) — compliance agent
194
+ ### v3.3.6 (2026-04-15) — README streamlining
195
+ ### v3.3.5 (2026-04-15)
196
+ ### v3.3.4 (2026-04-15) — changelog sync
197
+ ### v3.3.3 (2026-04-15) — release prep
198
+ ### v3.3.2 (2026-04-15) — data access levels
199
+ """
200
+
201
+
202
+ def _write_ko_readme(root: Path, version: str) -> None:
203
+ (root / "README.ko-KR.md").write_text(
204
+ KO_README_TEMPLATE.format(ver=version), encoding="utf-8"
205
+ )
206
+
207
+
208
+ # Minimal zh-CN README capturing the version-bearing surfaces the lint needs
209
+ # to police via ZH_README_CONFIGS[1]: badge, release tag link, the same
210
+ # release-block list as zh-TW, four Simplified-Chinese localized mode
211
+ # headings, four skill-detail headings, and the Simplified-Chinese DOCX line.
212
+ ZH_CN_README_TEMPLATE = """\
213
+ # Academic Research Skills
214
+
215
+ [![Version](https://img.shields.io/badge/version-v{ver}-blue)](https://github.com/Imbad0202/academic-research-skills/releases/tag/v{ver})
216
+
217
+ #### Deep Research(深度研究,8 种模式)
218
+ - review mode
219
+
220
+ #### Academic Paper(学术论文撰写,11 种模式)
221
+ - outline-only mode
222
+ - abstract-only mode
223
+ - disclosure mode
224
+
225
+ #### Academic Paper Reviewer(论文审查,6 种模式)
226
+ - calibration mode
227
+
228
+ #### Academic Pipeline(全流程调度器)
229
+
230
+ ### Deep Research (v2.12.1)
231
+ ### Academic Paper (v3.3.1)
232
+ ### Academic Paper Reviewer (v1.11.1)
233
+ ### Academic Pipeline (v{ver})
234
+
235
+ ### 支持的输出格式
236
+
237
+ - DOCX(Pandoc 可用时)
238
+
239
+ ## 更新纪录
240
+
241
+ ### v3.12.0(2026-06-08)— latest entry
242
+ ### v3.11.1(2026-06-06)— prior patch
243
+ ### v3.11.0(2026-06-04)— prior patch
244
+ ### v3.10.0(2026-06-01)— prior minor
245
+ ### v3.9.4.2(2026-05-19)— CI discipline hotfix
246
+ ### v3.9.4.1(2026-05-19)— previous hotfix
247
+ ### v3.9.4(2026-05-18)— temporal verification
248
+ ### v3.9.1(2026-05-18)— client hardening
249
+ ### v3.9.0(2026-05-17)— triangulation
250
+ ### v3.8.0(2026-05-16)— L3 audit
251
+ ### v3.7.0(2026-05-05)— plugin packaging
252
+ ### v3.6.8(2026-05-03)— generator-evaluator
253
+ ### v3.6.7(2026-04-30)— pattern protection
254
+ ### v3.6.5(2026-04-27)— corpus consumer
255
+ ### v3.6.4(2026-04-25)— corpus input port
256
+ ### v3.6.3(2026-04-23)— passport reset
257
+ ### v3.6.2(2026-04-23)— reviewer sprint
258
+ ### v3.5.1(2026-04-22)— reading-check probe
259
+ ### v3.5.0(2026-04-21)— collaboration depth
260
+ ### v3.4.0(2026-04-20)— compliance agent
261
+ ### v3.3.6 (2026-04-15) — README streamlining
262
+ ### v3.3.5 (2026-04-15)
263
+ ### v3.3.4 (2026-04-15) — changelog sync
264
+ ### v3.3.3 (2026-04-15) — release prep
265
+ ### v3.3.2 (2026-04-15) — data access levels
266
+ """
267
+
268
+
269
+ def _write_zh_cn_readme(root: Path, version: str) -> None:
270
+ (root / "README.zh-CN.md").write_text(
271
+ ZH_CN_README_TEMPLATE.format(ver=version), encoding="utf-8"
272
+ )
273
+
274
+
275
+ # zh-TW fixture matching ZH_README_CONFIGS[0]. check_readme_zh_sections
276
+ # iterates BOTH configs, so to test the zh-CN branch in isolation we still
277
+ # need a passing zh-TW companion (or vice versa). The minimal zh-TW fixture
278
+ # below uses the same shape with Traditional-Chinese localized strings.
279
+ ZH_TW_README_TEMPLATE = """\
280
+ # Academic Research Skills
281
+
282
+ [![Version](https://img.shields.io/badge/version-v{ver}-blue)](https://github.com/Imbad0202/academic-research-skills/releases/tag/v{ver})
283
+
284
+ #### Deep Research(深度研究,8 種模式)
285
+ - review mode
286
+
287
+ #### Academic Paper(學術論文撰寫,11 種模式)
288
+ - outline-only mode
289
+ - abstract-only mode
290
+ - disclosure mode
291
+
292
+ #### Academic Paper Reviewer(論文審查,6 種模式)
293
+ - calibration mode
294
+
295
+ #### Academic Pipeline(全流程調度器)
296
+
297
+ ### Deep Research (v2.12.1)
298
+ ### Academic Paper (v3.3.1)
299
+ ### Academic Paper Reviewer (v1.11.1)
300
+ ### Academic Pipeline (v{ver})
301
+
302
+ ### 支援的輸出格式
303
+
304
+ - DOCX(Pandoc 可用時)
305
+
306
+ ## 更新紀錄
307
+
308
+ ### v3.12.0(2026-06-08)— latest entry
309
+ ### v3.11.1(2026-06-06)— prior patch
310
+ ### v3.11.0(2026-06-04)— prior patch
311
+ ### v3.10.0(2026-06-01)— prior minor
312
+ ### v3.9.4.2(2026-05-19)— CI discipline hotfix
313
+ ### v3.9.4.1(2026-05-19)— previous hotfix
314
+ ### v3.9.4(2026-05-18)— temporal verification
315
+ ### v3.9.1(2026-05-18)— client hardening
316
+ ### v3.9.0(2026-05-17)— triangulation
317
+ ### v3.8.0(2026-05-16)— L3 audit
318
+ ### v3.7.0(2026-05-05)— plugin packaging
319
+ ### v3.6.8(2026-05-03)— generator-evaluator
320
+ ### v3.6.7(2026-04-30)— pattern protection
321
+ ### v3.6.5(2026-04-27)— corpus consumer
322
+ ### v3.6.4(2026-04-25)— corpus input port
323
+ ### v3.6.3(2026-04-23)— passport reset
324
+ ### v3.6.2(2026-04-23)— reviewer sprint
325
+ ### v3.5.1(2026-04-22)— reading-check probe
326
+ ### v3.5.0(2026-04-21)— collaboration depth
327
+ ### v3.4.0(2026-04-20)— compliance agent
328
+ ### v3.3.6 (2026-04-15) — README streamlining
329
+ ### v3.3.5 (2026-04-15)
330
+ ### v3.3.4 (2026-04-15) — changelog sync
331
+ ### v3.3.3 (2026-04-15) — release prep
332
+ ### v3.3.2 (2026-04-15) — data access levels
333
+ """
334
+
335
+
336
+ def _write_zh_tw_readme(root: Path, version: str) -> None:
337
+ (root / "README.zh-TW.md").write_text(
338
+ ZH_TW_README_TEMPLATE.format(ver=version), encoding="utf-8"
339
+ )
340
+
341
+
342
+ class TestReadmeJaSections(unittest.TestCase):
343
+ def setUp(self) -> None:
344
+ # check_spec_consistency uses module-level ROOT and ERRORS. Reset and
345
+ # restore around each test so state does not leak between cases.
346
+ self._orig_root = csc.ROOT
347
+ self._orig_errors = list(csc.ERRORS)
348
+ csc.ERRORS.clear()
349
+
350
+ def tearDown(self) -> None:
351
+ csc.ROOT = self._orig_root
352
+ csc.ERRORS.clear()
353
+ csc.ERRORS.extend(self._orig_errors)
354
+
355
+ def test_aligned_ja_readme_passes(self) -> None:
356
+ """A README.ja-JP.md whose badge / tag link / release headings all
357
+ agree with the suite version v3.9.4.2 must pass without errors."""
358
+ with TemporaryDirectory() as tmp:
359
+ root = Path(tmp)
360
+ csc.ROOT = root
361
+ _write_ja_readme(root, version="3.21.1")
362
+
363
+ csc.check_readme_ja_sections()
364
+
365
+ self.assertEqual(
366
+ csc.ERRORS, [],
367
+ msg=f"unexpected errors on aligned fixture: {csc.ERRORS!r}",
368
+ )
369
+
370
+ def test_stale_ja_badge_fails(self) -> None:
371
+ """Regression for #170: if README.ja-JP.md keeps a stale v3.9.4.0
372
+ badge while CHANGELOG has moved to v3.9.4.2, the lint must surface
373
+ the drift instead of silently passing (pre-fix behavior: this file
374
+ was outside the lint's needle list and the drift never surfaced)."""
375
+ with TemporaryDirectory() as tmp:
376
+ root = Path(tmp)
377
+ csc.ROOT = root
378
+ # Write the "current" v3.9.4.2 release block but downgrade only
379
+ # the badge and tag link to v3.9.4.0. This is the realistic shape
380
+ # of drift when one place gets forgotten during a release.
381
+ stale = JA_README_TEMPLATE.format(ver="3.21.1").replace(
382
+ "version-v3.21.1-blue", "version-v3.9.4.0-blue"
383
+ ).replace(
384
+ "releases/tag/v3.21.1", "releases/tag/v3.9.4.0"
385
+ )
386
+ (root / "README.ja-JP.md").write_text(stale, encoding="utf-8")
387
+
388
+ csc.check_readme_ja_sections()
389
+
390
+ self.assertTrue(
391
+ any("README.ja-JP.md" in e and "v3.21.1" in e for e in csc.ERRORS),
392
+ msg=f"expected ja-JP drift error in: {csc.ERRORS!r}",
393
+ )
394
+
395
+
396
+ class TestReadmeKoSections(unittest.TestCase):
397
+ def setUp(self) -> None:
398
+ # check_spec_consistency uses module-level ROOT and ERRORS. Reset and
399
+ # restore around each test so state does not leak between cases.
400
+ self._orig_root = csc.ROOT
401
+ self._orig_errors = list(csc.ERRORS)
402
+ csc.ERRORS.clear()
403
+
404
+ def tearDown(self) -> None:
405
+ csc.ROOT = self._orig_root
406
+ csc.ERRORS.clear()
407
+ csc.ERRORS.extend(self._orig_errors)
408
+
409
+ def test_aligned_ko_readme_passes(self) -> None:
410
+ """A README.ko-KR.md whose badge / tag link / release headings / Korean
411
+ mode + skill headings all agree with the suite version must pass."""
412
+ with TemporaryDirectory() as tmp:
413
+ root = Path(tmp)
414
+ csc.ROOT = root
415
+ _write_ko_readme(root, version="3.21.1")
416
+
417
+ csc.check_readme_ko_sections()
418
+
419
+ self.assertEqual(
420
+ csc.ERRORS, [],
421
+ msg=f"unexpected errors on aligned ko fixture: {csc.ERRORS!r}",
422
+ )
423
+
424
+ def test_stale_ko_badge_fails(self) -> None:
425
+ """Symmetric to the ja drift regression: a stale badge / tag link on
426
+ README.ko-KR.md must surface the drift rather than silently passing."""
427
+ with TemporaryDirectory() as tmp:
428
+ root = Path(tmp)
429
+ csc.ROOT = root
430
+ stale = KO_README_TEMPLATE.format(ver="3.21.1").replace(
431
+ "version-v3.21.1-blue", "version-v3.9.4.0-blue"
432
+ ).replace(
433
+ "releases/tag/v3.21.1", "releases/tag/v3.9.4.0"
434
+ )
435
+ (root / "README.ko-KR.md").write_text(stale, encoding="utf-8")
436
+
437
+ csc.check_readme_ko_sections()
438
+
439
+ self.assertTrue(
440
+ any("README.ko-KR.md" in e and "v3.21.1" in e for e in csc.ERRORS),
441
+ msg=f"expected ko-KR drift error in: {csc.ERRORS!r}",
442
+ )
443
+
444
+ def test_missing_korean_mode_heading_fails(self) -> None:
445
+ """If a localized mode heading is dropped (e.g. the "N개 모드" form is
446
+ accidentally written in the English "(8 modes)" shape), the lint must
447
+ catch it — proving the heading checks are load-bearing, not vacuous."""
448
+ with TemporaryDirectory() as tmp:
449
+ root = Path(tmp)
450
+ csc.ROOT = root
451
+ broken = KO_README_TEMPLATE.format(ver="3.21.1").replace(
452
+ "#### Deep Research (8개 모드)", "#### Deep Research (8 modes)"
453
+ )
454
+ (root / "README.ko-KR.md").write_text(broken, encoding="utf-8")
455
+
456
+ csc.check_readme_ko_sections()
457
+
458
+ self.assertTrue(
459
+ any("README.ko-KR.md" in e and "8개 모드" in e for e in csc.ERRORS),
460
+ msg=f"expected missing-heading error in: {csc.ERRORS!r}",
461
+ )
462
+
463
+ def test_full_width_korean_changelog_parentheses_fail(self) -> None:
464
+ """Korean changelog headings use ASCII parentheses, not full-width forms."""
465
+ with TemporaryDirectory() as tmp:
466
+ root = Path(tmp)
467
+ csc.ROOT = root
468
+ broken = KO_README_TEMPLATE.format(ver="3.21.1").replace(
469
+ "### v3.18.0 (2026-07-18)",
470
+ "### v3.18.0(2026-07-18)",
471
+ )
472
+ (root / "README.ko-KR.md").write_text(broken, encoding="utf-8")
473
+
474
+ csc.check_readme_ko_sections()
475
+
476
+ self.assertTrue(
477
+ any(
478
+ "README.ko-KR.md" in e
479
+ and "### v3.18.0 (2026-07-18)" in e
480
+ for e in csc.ERRORS
481
+ ),
482
+ msg=f"expected Korean parenthesis-style error in: {csc.ERRORS!r}",
483
+ )
484
+
485
+
486
+ class TestReadmeZhSections(unittest.TestCase):
487
+ """Coverage for the ZH_README_CONFIGS tuple branch added when zh-CN
488
+ joined zh-TW under check_readme_zh_sections. check_readme_zh_sections
489
+ iterates both configs, so both fixtures must exist on every test path."""
490
+
491
+ def setUp(self) -> None:
492
+ self._orig_root = csc.ROOT
493
+ self._orig_errors = list(csc.ERRORS)
494
+ csc.ERRORS.clear()
495
+
496
+ def tearDown(self) -> None:
497
+ csc.ROOT = self._orig_root
498
+ csc.ERRORS.clear()
499
+ csc.ERRORS.extend(self._orig_errors)
500
+
501
+ def test_aligned_zh_cn_readme_passes(self) -> None:
502
+ """Both zh-TW and zh-CN fixtures aligned to v3.9.4.2 produce no
503
+ lint errors. Locks the new ZH_README_CONFIGS[1] branch."""
504
+ with TemporaryDirectory() as tmp:
505
+ root = Path(tmp)
506
+ csc.ROOT = root
507
+ _write_zh_tw_readme(root, version="3.21.1")
508
+ _write_zh_cn_readme(root, version="3.21.1")
509
+
510
+ csc.check_readme_zh_sections()
511
+
512
+ self.assertEqual(
513
+ csc.ERRORS, [],
514
+ msg=f"unexpected errors on aligned zh fixtures: {csc.ERRORS!r}",
515
+ )
516
+
517
+ def test_stale_zh_cn_badge_fails(self) -> None:
518
+ """Regression symmetric with #170 ja-JP: if README.zh-CN.md keeps
519
+ a stale v3.9.4.0 badge while the rest of the file moved to v3.9.4.2,
520
+ the lint must surface the drift on the zh-CN branch specifically."""
521
+ with TemporaryDirectory() as tmp:
522
+ root = Path(tmp)
523
+ csc.ROOT = root
524
+ _write_zh_tw_readme(root, version="3.21.1")
525
+ stale = ZH_CN_README_TEMPLATE.format(ver="3.21.1").replace(
526
+ "version-v3.21.1-blue", "version-v3.9.4.0-blue"
527
+ ).replace(
528
+ "releases/tag/v3.21.1", "releases/tag/v3.9.4.0"
529
+ )
530
+ (root / "README.zh-CN.md").write_text(stale, encoding="utf-8")
531
+
532
+ csc.check_readme_zh_sections()
533
+
534
+ self.assertTrue(
535
+ any("README.zh-CN.md" in e and "v3.21.1" in e for e in csc.ERRORS),
536
+ msg=f"expected zh-CN drift error in: {csc.ERRORS!r}",
537
+ )
538
+
539
+
540
+ # Minimal docs/ARCHITECTURE.md fixture carrying the THREE marker kinds the invariant-4 check (#345)
541
+ # must distinguish: current-component markers (mermaid node + component/stage rows, which MUST equal
542
+ # the suite version), a feature-history timeline marker (`vX.Y.Z : <feature>`, which must NOT be
543
+ # policed), and a prose mention of `academic-pipeline vX.Y.Z` (provenance narrative, which must also
544
+ # NOT be policed — it is excluded by the table-row anchor). `{comp}` = current-component version;
545
+ # `{hist}` = timeline version; `{prose}` = the version named in the narrative provenance line.
546
+ ARCHITECTURE_TEMPLATE = """\
547
+ # Architecture
548
+
549
+ ```mermaid
550
+ flowchart TD
551
+ Pipeline[academic-pipeline<br/>orchestrator<br/>v{comp}<br/>Agent Team: 5]
552
+ ```
553
+
554
+ | Stage | Gate | ... |
555
+ |-------|------|-----|
556
+ | **2.5 INTEGRITY** | `academic-pipeline` v{comp} (gate) | VERIFIED_ONLY |
557
+ | **6. PROCESS SUMMARY** | `academic-pipeline` v{comp} | VERIFIED_ONLY |
558
+
559
+ | Component | Role |
560
+ |-----------|------|
561
+ | `academic-pipeline` v{comp} | orchestrator (delegates to sub-skill modes) |
562
+
563
+ The `academic-pipeline` v{prose} release first introduced the integrity gate (narrative provenance).
564
+
565
+ ```mermaid
566
+ timeline
567
+ title ARS evolution timeline
568
+ v{hist} : deterministic citation verification gate (#182)
569
+ ```
570
+ """
571
+
572
+
573
+ def _write_architecture_fixture(
574
+ root: Path, *, suite: str, comp: str, hist: str, prose: str | None = None
575
+ ) -> None:
576
+ """Write `.claude/CLAUDE.md` (suite version source) + a docs/ARCHITECTURE.md fixture.
577
+
578
+ `prose` defaults to the suite version so the narrative line is innocuous unless a test
579
+ deliberately sets it to a stale version to assert the prose mention is not policed.
580
+ """
581
+ (root / ".claude").mkdir(parents=True, exist_ok=True)
582
+ (root / ".claude" / "CLAUDE.md").write_text(
583
+ f"# ARS\n\n- **Suite version**: {suite} (per CHANGELOG.md)\n", encoding="utf-8"
584
+ )
585
+ (root / "docs").mkdir(parents=True, exist_ok=True)
586
+ (root / "docs" / "ARCHITECTURE.md").write_text(
587
+ ARCHITECTURE_TEMPLATE.format(comp=comp, hist=hist, prose=prose or suite),
588
+ encoding="utf-8",
589
+ )
590
+
591
+
592
+ class TestArchitectureComponentVersion(unittest.TestCase):
593
+ """#345: invariant-4 lint for docs/ARCHITECTURE.md current-component version markers."""
594
+
595
+ def setUp(self) -> None:
596
+ self._orig_root = csc.ROOT
597
+ self._orig_errors = list(csc.ERRORS)
598
+ csc.ERRORS.clear()
599
+
600
+ def tearDown(self) -> None:
601
+ csc.ROOT = self._orig_root
602
+ csc.ERRORS.clear()
603
+ csc.ERRORS.extend(self._orig_errors)
604
+
605
+ def test_aligned_passes(self) -> None:
606
+ """All component markers at the suite version → no errors (timeline at an older version
607
+ is fine — it records history)."""
608
+ with TemporaryDirectory() as tmp:
609
+ root = Path(tmp)
610
+ csc.ROOT = root
611
+ _write_architecture_fixture(root, suite="3.11.1", comp="3.11.1", hist="3.11.0")
612
+
613
+ csc.check_architecture_component_version()
614
+
615
+ self.assertEqual(
616
+ csc.ERRORS, [], msg=f"unexpected errors on aligned fixture: {csc.ERRORS!r}"
617
+ )
618
+
619
+ def test_stale_component_marker_fails(self) -> None:
620
+ """A current-component marker left at the prior version (the exact #343/#344 drift) must
621
+ fail — both the mermaid node and the rows carry the stale version here."""
622
+ with TemporaryDirectory() as tmp:
623
+ root = Path(tmp)
624
+ csc.ROOT = root
625
+ _write_architecture_fixture(root, suite="3.11.1", comp="3.11.0", hist="3.11.0")
626
+
627
+ csc.check_architecture_component_version()
628
+
629
+ self.assertTrue(
630
+ any("ARCHITECTURE.md" in e and "3.11.0" in e and "3.11.1" in e for e in csc.ERRORS),
631
+ msg=f"expected stale-component drift error in: {csc.ERRORS!r}",
632
+ )
633
+
634
+ def test_stale_timeline_marker_does_not_fail(self) -> None:
635
+ """The critical distinction: a timeline `vX.Y.Z : <feature>` node at a DIFFERENT version
636
+ from the suite must NOT fail — it records which version shipped a feature, and a
637
+ naive `v3.x` scan would wrongly flag it. Component markers are aligned here."""
638
+ with TemporaryDirectory() as tmp:
639
+ root = Path(tmp)
640
+ csc.ROOT = root
641
+ # Component markers all at the suite version; only the timeline records an old version.
642
+ _write_architecture_fixture(root, suite="3.11.1", comp="3.11.1", hist="3.9.4")
643
+
644
+ csc.check_architecture_component_version()
645
+
646
+ self.assertEqual(
647
+ csc.ERRORS, [],
648
+ msg=f"timeline marker must not be policed, but got: {csc.ERRORS!r}",
649
+ )
650
+
651
+ def test_missing_component_marker_fails(self) -> None:
652
+ """If the component markers vanish entirely (e.g. a refactor removes them), the check must
653
+ surface that rather than silently passing on an empty match."""
654
+ with TemporaryDirectory() as tmp:
655
+ root = Path(tmp)
656
+ csc.ROOT = root
657
+ (root / ".claude").mkdir(parents=True, exist_ok=True)
658
+ (root / ".claude" / "CLAUDE.md").write_text(
659
+ "- **Suite version**: 3.11.1 (per CHANGELOG.md)\n", encoding="utf-8"
660
+ )
661
+ (root / "docs").mkdir(parents=True, exist_ok=True)
662
+ (root / "docs" / "ARCHITECTURE.md").write_text(
663
+ "# Architecture\n\nNo component markers here.\n", encoding="utf-8"
664
+ )
665
+
666
+ csc.check_architecture_component_version()
667
+
668
+ self.assertTrue(
669
+ any("no mermaid" in e or "no `academic-pipeline" in e for e in csc.ERRORS),
670
+ msg=f"expected missing-marker error in: {csc.ERRORS!r}",
671
+ )
672
+
673
+ def test_four_component_aligned_passes(self) -> None:
674
+ """#352 P2: the repo's own grammar ships 4-component versions (v3.9.4.2). A suite and
675
+ component markers both at a 4-component version must pass — the version regex must capture
676
+ the FULL token, not truncate to three components."""
677
+ with TemporaryDirectory() as tmp:
678
+ root = Path(tmp)
679
+ csc.ROOT = root
680
+ _write_architecture_fixture(root, suite="3.9.4.2", comp="3.9.4.2", hist="3.9.4")
681
+
682
+ csc.check_architecture_component_version()
683
+
684
+ self.assertEqual(
685
+ csc.ERRORS, [],
686
+ msg=f"unexpected errors on aligned 4-component fixture: {csc.ERRORS!r}",
687
+ )
688
+
689
+ def test_four_component_marker_against_three_component_suite_fails(self) -> None:
690
+ """#352 P2 (the silent-pass this fix closes): suite is the 3-component `3.9.4` but a
691
+ component marker carries the 4-component `3.9.4.2`. A truncating `\\d+\\.\\d+\\.\\d+`
692
+ would capture `3.9.4` from the marker and falsely pass (3.9.4 == 3.9.4). The full-token
693
+ capture must instead see `3.9.4.2` and fail it against the suite."""
694
+ with TemporaryDirectory() as tmp:
695
+ root = Path(tmp)
696
+ csc.ROOT = root
697
+ _write_architecture_fixture(root, suite="3.9.4", comp="3.9.4.2", hist="3.9.4")
698
+
699
+ csc.check_architecture_component_version()
700
+
701
+ # The error must name the FULL 4-component marker as != the 3-component suite. Asserting
702
+ # on `!= suite v3.9.4` (not just substring `3.9.4`, which is contained in `3.9.4.2`)
703
+ # proves the captured marker was the full `3.9.4.2`, i.e. the truncation was closed.
704
+ self.assertTrue(
705
+ any("v3.9.4.2" in e and "!= suite v3.9.4 " in e for e in csc.ERRORS),
706
+ msg=f"expected 4-vs-3-component drift error in: {csc.ERRORS!r}",
707
+ )
708
+
709
+ def test_prose_provenance_mention_does_not_fail(self) -> None:
710
+ """#352 P3: a narrative line naming `academic-pipeline v<old>` (feature provenance) must
711
+ NOT be policed against the suite version — only markdown table-row component cells are.
712
+ Component markers + timeline are aligned/innocuous; only the prose line is stale."""
713
+ with TemporaryDirectory() as tmp:
714
+ root = Path(tmp)
715
+ csc.ROOT = root
716
+ _write_architecture_fixture(
717
+ root, suite="3.11.1", comp="3.11.1", hist="3.9.4", prose="3.9.4"
718
+ )
719
+
720
+ csc.check_architecture_component_version()
721
+
722
+ self.assertEqual(
723
+ csc.ERRORS, [],
724
+ msg=f"prose provenance mention must not be policed, but got: {csc.ERRORS!r}",
725
+ )
726
+
727
+
728
+ # --- #377: SKILL.md frontmatter↔table consistency (all 4) + suite-skill date sanity ---
729
+
730
+ # Minimal SKILL.md carrying the version-bearing surfaces the #377 check polices: a
731
+ # `metadata:` frontmatter block with `version` / `last_updated`, and a Version-Info table
732
+ # with `| Skill Version |` / `| Last Updated |` rows. Mirrors the real four SKILL.md shape.
733
+ SKILL_TEMPLATE = """\
734
+ ---
735
+ name: {name}
736
+ metadata:
737
+ version: "{fm_ver}"
738
+ last_updated: "{fm_date}"
739
+ ---
740
+
741
+ # {name}
742
+
743
+ Body.
744
+
745
+ ## Version Info
746
+
747
+ | Field | Value |
748
+ |-------|-------|
749
+ | Skill Version | {tbl_ver} |
750
+ | Last Updated | {tbl_date} |
751
+ """
752
+
753
+ # The four SKILL.md paths the generalized check must cover, with their real independent
754
+ # versions/dates. `academic-pipeline` tracks the suite; the other three move independently.
755
+ _SKILL_FIXTURES = {
756
+ "academic-pipeline": ("3.12.0", "2026-06-08"),
757
+ "academic-paper": ("3.2.0", "2026-06-01"),
758
+ "academic-paper-reviewer": ("1.10.0", "2026-06-01"),
759
+ "deep-research": ("2.9.4", "2026-05-18"),
760
+ }
761
+
762
+
763
+ def _write_skill_fixtures(root: Path, overrides: dict | None = None) -> None:
764
+ """Write all four SKILL.md with frontmatter == table by default. `overrides` maps a
765
+ skill dir to a partial dict of {fm_ver, fm_date, tbl_ver, tbl_date} to introduce drift."""
766
+ overrides = overrides or {}
767
+ for skill, (ver, date) in _SKILL_FIXTURES.items():
768
+ fields = {"fm_ver": ver, "fm_date": date, "tbl_ver": ver, "tbl_date": date}
769
+ fields.update(overrides.get(skill, {}))
770
+ (root / skill).mkdir(parents=True, exist_ok=True)
771
+ (root / skill / "SKILL.md").write_text(
772
+ SKILL_TEMPLATE.format(name=skill, **fields), encoding="utf-8"
773
+ )
774
+
775
+
776
+ class TestSkillVersionTableConsistency(unittest.TestCase):
777
+ """#377(a): frontmatter version/last_updated ↔ Version-Info table for ALL FOUR SKILL.md
778
+ (pre-#377 only academic-paper-reviewer was checked)."""
779
+
780
+ def setUp(self) -> None:
781
+ self._orig_root = csc.ROOT
782
+ self._orig_errors = list(csc.ERRORS)
783
+ csc.ERRORS.clear()
784
+
785
+ def tearDown(self) -> None:
786
+ csc.ROOT = self._orig_root
787
+ csc.ERRORS.clear()
788
+ csc.ERRORS.extend(self._orig_errors)
789
+
790
+ def test_all_four_aligned_passes(self) -> None:
791
+ """All four SKILL.md with frontmatter matching their table → no errors."""
792
+ with TemporaryDirectory() as tmp:
793
+ root = Path(tmp)
794
+ csc.ROOT = root
795
+ _write_skill_fixtures(root)
796
+
797
+ csc.check_skill_version_blocks()
798
+
799
+ self.assertEqual(
800
+ csc.ERRORS, [], msg=f"unexpected errors on aligned fixtures: {csc.ERRORS!r}"
801
+ )
802
+
803
+ def test_table_date_drift_in_non_reviewer_skill_fails(self) -> None:
804
+ """The exact #377 root cause: a SKILL whose frontmatter date is bumped but whose table
805
+ date is left stale must fail — and crucially for a skill OTHER than reviewer (which is
806
+ the only one the pre-#377 check covered)."""
807
+ with TemporaryDirectory() as tmp:
808
+ root = Path(tmp)
809
+ csc.ROOT = root
810
+ _write_skill_fixtures(
811
+ root, overrides={"academic-pipeline": {"tbl_date": "2026-06-01"}}
812
+ )
813
+
814
+ csc.check_skill_version_blocks()
815
+
816
+ self.assertTrue(
817
+ any(
818
+ "academic-pipeline/SKILL.md" in e and "2026-06-08" in e and "2026-06-01" in e
819
+ for e in csc.ERRORS
820
+ ),
821
+ msg=f"expected frontmatter↔table date drift error in: {csc.ERRORS!r}",
822
+ )
823
+
824
+ def test_table_version_drift_fails(self) -> None:
825
+ """A version (not date) drift between frontmatter and table also fails — for a third
826
+ skill (deep-research) to prove the check is not reviewer-specific."""
827
+ with TemporaryDirectory() as tmp:
828
+ root = Path(tmp)
829
+ csc.ROOT = root
830
+ _write_skill_fixtures(
831
+ root, overrides={"deep-research": {"tbl_ver": "2.9.3"}}
832
+ )
833
+
834
+ csc.check_skill_version_blocks()
835
+
836
+ self.assertTrue(
837
+ any(
838
+ "deep-research/SKILL.md" in e and "2.9.4" in e and "2.9.3" in e
839
+ for e in csc.ERRORS
840
+ ),
841
+ msg=f"expected frontmatter↔table version drift error in: {csc.ERRORS!r}",
842
+ )
843
+
844
+ def test_missing_table_rows_fails(self) -> None:
845
+ """A SKILL.md that loses its Version-Info table rows must surface rather than silently
846
+ pass on an empty match."""
847
+ with TemporaryDirectory() as tmp:
848
+ root = Path(tmp)
849
+ csc.ROOT = root
850
+ _write_skill_fixtures(root)
851
+ (root / "academic-paper" / "SKILL.md").write_text(
852
+ '---\nname: academic-paper\nmetadata:\n version: "3.2.0"\n'
853
+ ' last_updated: "2026-06-01"\n---\n\nNo version table here.\n',
854
+ encoding="utf-8",
855
+ )
856
+
857
+ csc.check_skill_version_blocks()
858
+
859
+ self.assertTrue(
860
+ any("academic-paper/SKILL.md" in e and "Version Info" in e for e in csc.ERRORS),
861
+ msg=f"expected missing-table-rows error in: {csc.ERRORS!r}",
862
+ )
863
+
864
+
865
+ # Minimal CHANGELOG whose latest entry date is the parameter; the suite-date-sanity check
866
+ # compares academic-pipeline/SKILL.md last_updated against this. Two prior entries so the
867
+ # "latest" selection (first `## [X.Y.Z]` after [Unreleased]) is exercised, not just sole-entry.
868
+ CHANGELOG_TEMPLATE = """\
869
+ # Changelog
870
+
871
+ ## [Unreleased]
872
+
873
+ ## [{latest_ver}] - {latest_date} — latest real entry
874
+
875
+ ## [3.11.1] - 2026-06-06 — prior patch
876
+
877
+ ## [3.11.0] - 2026-06-04 — prior minor
878
+ """
879
+
880
+
881
+ def _write_date_sanity_fixtures(
882
+ root: Path, *, changelog_date: str, pipeline_date: str, changelog_ver: str = "3.12.0"
883
+ ) -> None:
884
+ """Write a CHANGELOG with a known latest-entry date + four SKILL.md where only
885
+ academic-pipeline's last_updated is the variable under test."""
886
+ (root / "CHANGELOG.md").write_text(
887
+ CHANGELOG_TEMPLATE.format(latest_ver=changelog_ver, latest_date=changelog_date),
888
+ encoding="utf-8",
889
+ )
890
+ _write_skill_fixtures(
891
+ root,
892
+ overrides={
893
+ "academic-pipeline": {"fm_date": pipeline_date, "tbl_date": pipeline_date}
894
+ },
895
+ )
896
+
897
+
898
+ class TestSuiteSkillDateSanity(unittest.TestCase):
899
+ """#377(b): academic-pipeline/SKILL.md last_updated must be >= the latest CHANGELOG entry
900
+ date. The other three SKILL.md version independently and are NOT date-policed here."""
901
+
902
+ def setUp(self) -> None:
903
+ self._orig_root = csc.ROOT
904
+ self._orig_errors = list(csc.ERRORS)
905
+ csc.ERRORS.clear()
906
+
907
+ def tearDown(self) -> None:
908
+ csc.ROOT = self._orig_root
909
+ csc.ERRORS.clear()
910
+ csc.ERRORS.extend(self._orig_errors)
911
+
912
+ def test_pipeline_date_equal_to_changelog_passes(self) -> None:
913
+ """last_updated == latest CHANGELOG date → fine (the normal aligned-release case)."""
914
+ with TemporaryDirectory() as tmp:
915
+ root = Path(tmp)
916
+ csc.ROOT = root
917
+ _write_date_sanity_fixtures(
918
+ root, changelog_date="2026-06-08", pipeline_date="2026-06-08"
919
+ )
920
+
921
+ csc.check_suite_skill_date_sanity()
922
+
923
+ self.assertEqual(
924
+ csc.ERRORS, [], msg=f"unexpected errors on aligned date: {csc.ERRORS!r}"
925
+ )
926
+
927
+ def test_pipeline_date_after_changelog_passes(self) -> None:
928
+ """last_updated strictly AFTER the latest CHANGELOG date is allowed — a post-release
929
+ doc touch legitimately advances the date past the release entry."""
930
+ with TemporaryDirectory() as tmp:
931
+ root = Path(tmp)
932
+ csc.ROOT = root
933
+ _write_date_sanity_fixtures(
934
+ root, changelog_date="2026-06-08", pipeline_date="2026-06-10"
935
+ )
936
+
937
+ csc.check_suite_skill_date_sanity()
938
+
939
+ self.assertEqual(
940
+ csc.ERRORS, [], msg=f"a later last_updated must pass, got: {csc.ERRORS!r}"
941
+ )
942
+
943
+ def test_pipeline_date_before_changelog_fails(self) -> None:
944
+ """The exact v3.12.0 drift: suite version bumped, last_updated left at the prior release
945
+ date (earlier than the latest CHANGELOG entry) → must fail."""
946
+ with TemporaryDirectory() as tmp:
947
+ root = Path(tmp)
948
+ csc.ROOT = root
949
+ _write_date_sanity_fixtures(
950
+ root, changelog_date="2026-06-08", pipeline_date="2026-06-01"
951
+ )
952
+
953
+ csc.check_suite_skill_date_sanity()
954
+
955
+ self.assertTrue(
956
+ any(
957
+ "academic-pipeline/SKILL.md" in e
958
+ and "2026-06-01" in e
959
+ and "2026-06-08" in e
960
+ for e in csc.ERRORS
961
+ ),
962
+ msg=f"expected stale-suite-date error in: {csc.ERRORS!r}",
963
+ )
964
+
965
+ def test_date_check_is_bound_to_suite_path_only(self) -> None:
966
+ """Out-of-scope guard (#377): the date check polices ONLY `_SUITE_SKILL_PATH`. To prove
967
+ this is genuine scoping and not a vacuous pass, the test demonstrates that the SAME early
968
+ date is ignored when carried by an independent skill but flagged when carried by whatever
969
+ path `_SUITE_SKILL_PATH` names — i.e. repointing the constant repoints the policing.
970
+
971
+ Fixture: pipeline date is current (2026-06-08, == CHANGELOG); academic-paper carries an
972
+ early date (2026-06-01 < CHANGELOG). With the real constant the early academic-paper date
973
+ is NOT flagged; after repointing the constant AT academic-paper, that exact same early
974
+ date IS flagged. If the check ever fanned out across all four skills, the first assertion
975
+ would already fail."""
976
+ orig_suite_path = csc._SUITE_SKILL_PATH
977
+ try:
978
+ with TemporaryDirectory() as tmp:
979
+ root = Path(tmp)
980
+ csc.ROOT = root
981
+ _write_date_sanity_fixtures(
982
+ root, changelog_date="2026-06-08", pipeline_date="2026-06-08"
983
+ )
984
+ # academic-paper keeps its default early date (2026-06-01) from _write_skill_fixtures.
985
+
986
+ # Real constant → only pipeline policed; academic-paper's early date is ignored.
987
+ csc.check_suite_skill_date_sanity()
988
+ self.assertEqual(
989
+ csc.ERRORS, [],
990
+ msg=f"independent-skill early date must not be policed, got: {csc.ERRORS!r}",
991
+ )
992
+
993
+ # Repoint the constant at academic-paper → its early date is now the policed one.
994
+ csc.ERRORS.clear()
995
+ csc._SUITE_SKILL_PATH = "academic-paper/SKILL.md"
996
+ csc.check_suite_skill_date_sanity()
997
+ self.assertTrue(
998
+ any(
999
+ "academic-paper/SKILL.md" in e and "2026-06-01" in e and "2026-06-08" in e
1000
+ for e in csc.ERRORS
1001
+ ),
1002
+ msg=f"repointed suite path must police academic-paper's early date: {csc.ERRORS!r}",
1003
+ )
1004
+ finally:
1005
+ csc._SUITE_SKILL_PATH = orig_suite_path
1006
+
1007
+ def test_malformed_suite_skill_does_not_double_report(self) -> None:
1008
+ """When the suite SKILL.md is unparseable, check_skill_version_blocks() already records the
1009
+ error; check_suite_skill_date_sanity() must NOT re-report the same root cause from its own
1010
+ re-parse. Drives both checks in order (as main() does) and asserts a single pipeline error."""
1011
+ with TemporaryDirectory() as tmp:
1012
+ root = Path(tmp)
1013
+ csc.ROOT = root
1014
+ _write_date_sanity_fixtures(
1015
+ root, changelog_date="2026-06-08", pipeline_date="2026-06-08"
1016
+ )
1017
+ # Strip the suite SKILL's Version-Info table rows so it fails to parse.
1018
+ pipeline_skill = root / "academic-pipeline" / "SKILL.md"
1019
+ text = pipeline_skill.read_text(encoding="utf-8")
1020
+ pipeline_skill.write_text(
1021
+ text.replace("| Skill Version | 3.12.0 |", "").replace(
1022
+ "| Last Updated | 2026-06-08 |", ""
1023
+ ),
1024
+ encoding="utf-8",
1025
+ )
1026
+
1027
+ csc.check_skill_version_blocks()
1028
+ csc.check_suite_skill_date_sanity()
1029
+
1030
+ pipeline_errors = [e for e in csc.ERRORS if "academic-pipeline/SKILL.md" in e]
1031
+ self.assertEqual(
1032
+ len(pipeline_errors), 1,
1033
+ msg=f"expected exactly one pipeline error, got {len(pipeline_errors)}: {pipeline_errors!r}",
1034
+ )
1035
+
1036
+
1037
+ class RebuttalAuditGuardTest(unittest.TestCase):
1038
+ """check_rebuttal_audit_guard() must enforce the integrity-boundary language
1039
+ in the academic-paper Rebuttal-Audit Mode section. Mutation tests prove the
1040
+ guard actually fails when the suppression language is dropped — otherwise the
1041
+ check would be a vacuous pass that lets the false-certification risk back in."""
1042
+
1043
+ _GOOD = (
1044
+ "## Rebuttal-Audit Mode\n\n"
1045
+ "Advisory QA of an existing rebuttal draft.\n\n"
1046
+ "**IRON RULE:** standalone, so it MUST NOT emit a Schema 11 ledger, "
1047
+ "MUST NOT write the Material Passport, and MUST NOT mark ready_to_submit.\n\n"
1048
+ "## Next Section\n"
1049
+ )
1050
+
1051
+ def _run_guard_with(self, skill_text: str) -> list:
1052
+ orig_read = csc.read
1053
+ csc.ERRORS.clear()
1054
+ try:
1055
+ csc.read = lambda rel: skill_text if rel == "academic-paper/SKILL.md" else orig_read(rel)
1056
+ csc.check_rebuttal_audit_guard()
1057
+ return list(csc.ERRORS)
1058
+ finally:
1059
+ csc.read = orig_read
1060
+ csc.ERRORS.clear()
1061
+
1062
+ def test_guard_passes_with_full_suppression_language(self) -> None:
1063
+ self.assertEqual(self._run_guard_with(self._GOOD), [])
1064
+
1065
+ def test_guard_fails_when_section_missing(self) -> None:
1066
+ errs = self._run_guard_with("## Some Other Mode\n\nno rebuttal section here\n")
1067
+ self.assertTrue(any("missing" in e and "Rebuttal-Audit" in e for e in errs), errs)
1068
+
1069
+ def test_guard_fails_when_schema11_suppression_dropped(self) -> None:
1070
+ mutated = self._GOOD.replace("Schema 11", "the tracker")
1071
+ errs = self._run_guard_with(mutated)
1072
+ self.assertTrue(any("Schema 11" in e for e in errs), errs)
1073
+
1074
+ def test_guard_fails_when_must_not_dropped(self) -> None:
1075
+ mutated = self._GOOD.replace("MUST NOT", "should avoid")
1076
+ errs = self._run_guard_with(mutated)
1077
+ self.assertTrue(any("MUST NOT" in e for e in errs), errs)
1078
+
1079
+
1080
+ if __name__ == "__main__":
1081
+ unittest.main()