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,1279 @@
1
+ """Static checks for ARS v3.6.7 Step 6 Phase 6.6 — orchestrator prompt §3.5
2
+ Audit Artifact Gate subsection.
3
+
4
+ Spec: docs/design/2026-04-30-ars-v3.6.7-step-6-orchestrator-hooks-spec.md
5
+ Implementation plan: docs/design/2026-05-05-phase-6.6-scoping-note.md §5
6
+
7
+ Phase 6.6 ships a ~50-line decision-policy summary of the §5.6 audit gate
8
+ into pipeline_orchestrator_agent.md. The full Path A → Path B procedure
9
+ stays in spec §5.6 as the implementation contract; the prompt only carries
10
+ the policy summary plus P-PA-* / P-PB-* phase IDs as cross-references.
11
+
12
+ Verification gate (per spec §10 Phase 6.6, line 2387 of the spec): the
13
+ orchestrator prompt is no more than +60 lines vs pre-Step-6 baseline; the
14
+ 24 phase IDs (7 P-PA-* + 17 P-PB-*) appear at least once each in the
15
+ prompt as cross-references to spec §5.6.
16
+
17
+ This test file enforces that gate as four assertions:
18
+ 1. The §3.5 Audit Artifact Gate subsection exists.
19
+ 2. All 24 P-PA-* / P-PB-* phase IDs are present.
20
+ 3. The three hard rules from spec §5.6 are present.
21
+ 4. Prompt size is within the +60-line budget over the baseline.
22
+
23
+ Pre-Step-6 baseline is recorded as `BASELINE_LINE_COUNT` below — captured
24
+ from main commit 02b87ae (the SKILL.md drift fix that landed alongside
25
+ the Phase 6.6 prep work, which did not touch the orchestrator prompt).
26
+
27
+ Tests use `unittest` and read pipeline_orchestrator_agent.md directly from
28
+ the working tree. No mutation; no temp dir. Each test is self-contained.
29
+ """
30
+ from __future__ import annotations
31
+
32
+ import unittest
33
+ from pathlib import Path
34
+
35
+ REPO_ROOT = Path(__file__).resolve().parent.parent
36
+ ORCHESTRATOR_PROMPT = (
37
+ REPO_ROOT / "academic-pipeline" / "agents" / "pipeline_orchestrator_agent.md"
38
+ )
39
+
40
+ # Pre-Step-6 baseline line count of pipeline_orchestrator_agent.md, recorded
41
+ # from main commit 02b87ae (the last main commit before any Phase 6.6 prompt
42
+ # work). Confirmed by `wc -l` on that revision: 579 lines.
43
+ BASELINE_LINE_COUNT = 579
44
+
45
+ # Per Phase 6.6 verification gate (spec §10): +60 lines over pre-Step-6
46
+ # baseline. The ~50-line decision-policy summary plus 5–10 lines of headroom.
47
+ LINE_BUDGET_OVER_BASELINE = 60
48
+
49
+ # v3.7.1 Step 3b additionally ships the `## Cite-Time Provenance Finalizer
50
+ # (v3.7.1)` subsection per spec § Step 3b (line 449). The subsection adds
51
+ # the §3.3 4-cell matrix + idempotency + revision-loop preservation +
52
+ # peer-file join semantics. Measured at first-write: 35 content lines
53
+ # (heading + matrix rows + bullets) + horizontal rule + paragraph breaks.
54
+ # Budget includes 5 lines of headroom for codex-round prose adjustments.
55
+ LINE_BUDGET_V3_7_1_STEP_3B = 40
56
+
57
+ # v3.7.3 additionally ships the `## Cite-Time Provenance Finalizer —
58
+ # v3.7.3 extension` subsection per spec
59
+ # docs/design/2026-05-12-ars-v3.7.3-claim-faithfulness-and-contaminated-source-spec.md
60
+ # §3.1+§3.2. The subsection adds the L3-1 precedence-zero NO-LOCATOR check
61
+ # + L3-2 contamination annotation matrix + updated resolution order +
62
+ # audit-trail columns. External motivation: Zhao et al. arXiv:2605.07723
63
+ # (2026-05). Measured at first-write: 44 lines (heading + two H3 subs +
64
+ # matrix rows + bullets + audit-trail paragraph). Budget includes ~15
65
+ # lines of headroom for codex-round prose adjustments since the v3.7.3
66
+ # section is larger than v3.7.1 Step 3b.
67
+ LINE_BUDGET_V3_7_3_EXTENSION = 60
68
+
69
+ # v3.8 additionally ships the `### 3.6 Claim-Faithfulness Audit Gate
70
+ # (v3.8)` subsection per spec
71
+ # docs/design/2026-05-15-issue-103-claim-alignment-audit-spec.md §5
72
+ # The subsection adds the 8-row finalizer matrix + orchestrator dispatch
73
+ # wiring + mode flag + Stage-6 histogram + cross-references for the v3.8
74
+ # L3 claim-faithfulness audit. External motivation: Zhao et al.
75
+ # arXiv:2605.07723 (2026-05). Measured at first-write: 53 lines (heading
76
+ # + matrix + bullets + cross-refs). Budget includes ~7 lines headroom
77
+ # for codex-round prose adjustments; v3.8 matrix prose is more compact
78
+ # than v3.7.3 because the spec section already bears the full table
79
+ # explanation — orchestrator §3.6 only restates the bare table + mode
80
+ # flag + handoff bullets.
81
+ LINE_BUDGET_V3_8_AUDIT_GATE = 60
82
+
83
+ # v3.9.0 additionally ships the `## Cite-Time Provenance Finalizer —
84
+ # v3.9.0 extension (triangulation tiers)` subsection per spec
85
+ # docs/design/2026-05-17-ars-v3.9.0-cross-index-triangulation-measurement-spec.md
86
+ # §3.3. The subsection adds the 4-tier advisory matrix (k=0/1/2/3 over
87
+ # present *_unmatched fields) + preprint composition shapes + gate
88
+ # semantics note + example markers. External motivation: Zhao et al.
89
+ # arXiv:2605.07723 §3 (cross-index triangulation). Measured at first-
90
+ # write: ~38 lines. Budget includes ~12 lines headroom for codex-round
91
+ # prose adjustments.
92
+ LINE_BUDGET_V3_9_0_EXTENSION = 50
93
+
94
+ # v3.10 additionally ships the `## Cite-Time Provenance Finalizer —
95
+ # v3.10 extension (terminal policy layer)` subsection per spec
96
+ # docs/design/2026-05-31-ars-v3.10-policy-layer-rescope-spec.md §3 PR-B items 6-9.
97
+ # The subsection adds the policy_hash slug rules + the two marker grammar
98
+ # shapes (terminal / non-terminal) + strict & strict_articles_only promotion
99
+ # rules + manual-entry exemption + the terminal_blocked[] audit-trail note.
100
+ # It is the largest finalizer extension because it carries the full grammar
101
+ # definition. Measured at first-write: ~64 lines. Like the v3.7.x / v3.9.0 blocks,
102
+ # this v3.10 block has its own scope and MUST be subtracted from the v3.6.7
103
+ # Phase 6.6 +60 budget.
104
+ #
105
+ # v3.11 (#182 Delta 3 / INVARIANT C-V6) adds the `### Citation-existence terminal
106
+ # promotion under strict` subsection INSIDE this same H2 block (the second wired
107
+ # terminal policy alongside contamination_triangulation), plus the C-V6(f) manual-
108
+ # exemption sentence and the C-V6(g) multi-policy co-emit audit-trail paragraph.
109
+ # Measured after C-V6 landed: 84 lines. Budget raised 75 → 90 (rationale: the new
110
+ # policy is a binding spec deliverable carrying C-V6 (a)-(h) requirements, not codex-
111
+ # round prose; ~6 lines headroom retained for review adjustments).
112
+ LINE_BUDGET_V3_10_EXTENSION = 90
113
+
114
+ # #394 slice 4 ships the `## Submission-Package Terminal Gate` H2 block — a
115
+ # package-level Stage 5 post-formatter gate, deliberately compact because the
116
+ # evaluation mechanics live in scripts/verify_submission_package.py and the
117
+ # spec; the block carries the two boundary paragraphs + the six-step
118
+ # procedure whose load-bearing literals check_394_submission_policy.py
119
+ # invariant 2 pins. Measured at landing: 19 lines. Budget 25 (~6 lines
120
+ # headroom, the v3.10 convention).
121
+ LINE_BUDGET_394_GATE = 25
122
+
123
+ # #390 Slice B ships the `## Revision-Round Patch Sequencing (#390)` H2 block —
124
+ # the orchestrator side of diff/patch revision mode: the seven-step normative
125
+ # sequence, the no-rewrite window, the two-layer escalation gate + MANDATORY
126
+ # checkpoint, and the apply-failure path. Its own scope (the patch protocol,
127
+ # not the v3.6.7 audit gate), so like every vX finalizer/gate block it is
128
+ # SUBTRACTED from the v3.6.7 Phase 6.6 +60 budget and carries its own dedicated
129
+ # budget test below. The block embeds a fenced checkpoint template, so it is
130
+ # heading-anchored, not fence-anchored. Spec:
131
+ # docs/design/2026-06-10-390-diff-patch-revision-mode-spec.md §3.3-§3.6.
132
+ # Measured at landing: 47 lines. Budget 55 (~8 lines headroom).
133
+ LINE_BUDGET_390_SEQUENCING = 55
134
+
135
+ # #670 adds the `## Revision Authority and Evidence-Bundle Extension` H2
136
+ # block. It carries the bundle's exact continuous chain plus the separate
137
+ # integrity-correction proposal -> exact author patch approval -> apply ->
138
+ # issuing-gate re-verification path. Keeping it separate preserves the #390
139
+ # sequencing budget instead of silently charging new authority semantics to
140
+ # that older block. Measured at landing: 42 lines. Budget 48 (~6 lines
141
+ # headroom).
142
+ LINE_BUDGET_670_AUTHORITY_EXTENSION = 48
143
+
144
+ # #576 Spec B PR-B2 ships the `## Stage 3' Re-Review Contract Dispatch
145
+ # (#576 Spec B)` H2 block — the orchestrator-side three-gate dispatch
146
+ # contract (manifest emission, gate sequencing, post-2B passes, mandatory
147
+ # checker invocation, deferral loop, abort surfacing, producer obligations,
148
+ # legacy boundary). Like the other extension subsections it has its own
149
+ # scope and budget, subtracted from the v3.6.7 Phase 6.6 measurement.
150
+ # Measured at first-write: 20 lines (heading + intro + 7 numbered steps +
151
+ # producer-obligations + legacy paragraphs). Spec:
152
+ # docs/design/2026-07-27-576-spec-b-re-review-precommitment-contract-spec.md §16.
153
+ LINE_BUDGET_576_STAGE3P_DISPATCH = 30
154
+
155
+ # #656 ships the `##### Phase E Evidence-Row Rendering (#656)` checkpoint
156
+ # block. It carries the source-replay trust boundary, bounded pagination,
157
+ # explicit legacy compatibility, claim-summary consistency, and read-ledger /
158
+ # verdict noninterference rules, plus the checkpoint-template insertion point.
159
+ # This is a separate 2026-08 feature scope, so it is subtracted from the
160
+ # historical v3.6.7 +60 budget and gets its own bounded test. Measured at
161
+ # landing: 54 lines; budget 60 leaves 6 lines of headroom.
162
+ LINE_BUDGET_656_EVIDENCE_RENDERING = 60
163
+
164
+ # #660 ships the `## Tortured-Phrase Advisory Dispatch (#660)` H2 block.
165
+ # It carries the exact pre-format dispatch, explicit-time/no-network boundary,
166
+ # degraded-artifact handoff, advisory-only claim ceiling, and read-only cited
167
+ # carrier rules. This is an independent 2026-08 extension, so it is subtracted
168
+ # from the historical v3.6.7 budget and receives its own bounded test. Measured
169
+ # at landing: 55 lines; budget 60 leaves 5 lines of headroom.
170
+ LINE_BUDGET_660_ADVISORY_DISPATCH = 60
171
+
172
+ # #672 ships the `## Cross-Document Consistency Advisory Dispatch (#672)`
173
+ # H2 block. It binds the preregistration sidecar, exact accepted-draft join,
174
+ # independent #660/#672 failure semantics, and advisory-only Stage-5 routing.
175
+ # This independent 2026-08 extension is subtracted from the historical v3.6.7
176
+ # budget and receives its own bounded test. The measurement includes the
177
+ # nine-line Stage-1 sidecar-continuity paragraph next to the handoff table.
178
+ # Measured at first write: 60 lines; budget 66 leaves 6 lines of headroom.
179
+ LINE_BUDGET_672_ADVISORY_DISPATCH = 66
180
+
181
+ # #673 adds three bounded orchestrator surfaces: the stable run-identity
182
+ # paragraph, the action-time receipt hook, and the post-terminal seal/append
183
+ # sequence. They form one independent 2026-08 advisory side-channel scope, so
184
+ # they are subtracted from the historical v3.6.7 budget and receive a dedicated
185
+ # cap. Measured at landing: 51 lines; budget 57 leaves 6 lines of headroom.
186
+ LINE_BUDGET_673_ADJUDICATION_ACTIVITY = 57
187
+
188
+ # #684 adds one bounded H2 lifecycle that carries the exact manifest pointer,
189
+ # three consumer receipts, paper-blind panel dispatch, mid-entry coverage, and
190
+ # non-gate boundary. It is independent of the historical v3.6.7 audit gate,
191
+ # so it is subtracted and receives its own cap. Measured at first write: 39
192
+ # lines; budget 44 leaves five lines of review headroom.
193
+ LINE_BUDGET_684_REVIEW_CRITERIA_BINDING = 44
194
+
195
+ # #743 adds one bounded H4 checkpoint lifecycle plus the stable-sidecar
196
+ # expansion of the pre-existing passport-reset rule 9. Both are independent
197
+ # of the historical v3.6.7 audit gate, so only the rule-9 growth over its
198
+ # one-line baseline is charged here. Measured at landing: 54 lines; budget 60
199
+ # leaves six lines of review headroom.
200
+ LINE_BUDGET_743_INQUIRY_LEDGER = 60
201
+
202
+ # All 24 failure phase IDs from spec §5.6 inventory (7 P-PA-* + 17 P-PB-*).
203
+ # These must each appear at least once in the orchestrator prompt as
204
+ # cross-references to spec §5.6 (NOT inline procedural definitions —
205
+ # those stay in spec).
206
+ REQUIRED_PHASE_IDS = (
207
+ # 7 Path A phases
208
+ "P-PA-precond",
209
+ "P-PA-schema",
210
+ "P-PA-gate",
211
+ "P-PA-verdict-schema",
212
+ "P-PA-verdict-mirror",
213
+ "P-PA-stale-late",
214
+ "P-PA-supersede-preempt",
215
+ # 17 Path B phases
216
+ "P-PB-empty",
217
+ "P-PB-supersede-missing",
218
+ "P-PB-ambig",
219
+ "P-PB-proposal-schema",
220
+ "P-PB-audit-failed",
221
+ "P-PB-gate",
222
+ "P-PB-verdict-schema",
223
+ "P-PB-verdict-mirror",
224
+ "P-PB-stale-late",
225
+ "P-PB-dup-early",
226
+ "P-PB-dup-other",
227
+ "P-PB-dup-late",
228
+ "P-PB-snapshot",
229
+ "P-PB-persisted-schema",
230
+ "P-PB-passport-write",
231
+ "P-PB-consume-fail",
232
+ "P-PB-crash",
233
+ )
234
+
235
+
236
+ _PROMPT_CACHE: str | None = None
237
+
238
+
239
+ def _read_prompt() -> str:
240
+ """Read pipeline_orchestrator_agent.md once per test pass.
241
+
242
+ Module-level cache: the orchestrator prompt is treated as immutable
243
+ by every test in this file (no mutation, no fixture write). Step 8
244
+ /simplify advisory P2-1 closure — 10 test methods each calling
245
+ `read_text()` produced 10 disk reads of the same ~600-line file per
246
+ `python -m unittest` invocation. The cache collapses to 1× IO with
247
+ zero behavioral change.
248
+
249
+ To bust the cache during a debugger session (e.g. when iterating on
250
+ prompt text and re-running tests in the same process), set
251
+ `_PROMPT_CACHE = None` manually.
252
+ """
253
+ global _PROMPT_CACHE
254
+ if _PROMPT_CACHE is None:
255
+ _PROMPT_CACHE = ORCHESTRATOR_PROMPT.read_text(encoding="utf-8")
256
+ return _PROMPT_CACHE
257
+
258
+
259
+ class Phase66SubsectionPresenceTest(unittest.TestCase):
260
+ """Test 1 — §3.5 Audit Artifact Gate subsection exists."""
261
+
262
+ def test_subsection_heading_present(self) -> None:
263
+ text = _read_prompt()
264
+ self.assertIn(
265
+ "### 3.5 Audit Artifact Gate",
266
+ text,
267
+ "Phase 6.6 deliverable missing: §3.5 Audit Artifact Gate "
268
+ "subsection heading not found in orchestrator prompt. Per spec "
269
+ "§10 Phase 6.6, the subsection must exist between current §3 "
270
+ "Checkpoint Management and §4 Transition Management.",
271
+ )
272
+
273
+
274
+ class Phase66PhaseIdReferencesTest(unittest.TestCase):
275
+ """Test 2 — All 24 P-PA-* / P-PB-* phase IDs are present.
276
+
277
+ Per spec §10 Phase 6.6 verification gate: phase IDs appear "as
278
+ cross-references to spec §5.6, not as inline procedural definitions"
279
+ (the procedural definitions stay in §5.6). This test enforces presence
280
+ only — whether each citation contextualises as a cross-reference is
281
+ not statically verifiable from grep alone; the codex iterative review
282
+ in implementation Step 4 catches drift away from cross-reference framing.
283
+ """
284
+
285
+ def test_all_24_phase_ids_present(self) -> None:
286
+ text = _read_prompt()
287
+ missing = [pid for pid in REQUIRED_PHASE_IDS if pid not in text]
288
+ self.assertFalse(
289
+ missing,
290
+ f"Phase 6.6 deliverable missing {len(missing)} of "
291
+ f"{len(REQUIRED_PHASE_IDS)} required phase IDs in orchestrator "
292
+ f"prompt: {missing}. Per spec §10 Phase 6.6 verification gate, "
293
+ f"the §5.6 inventory's phase IDs (P-PA-* / P-PB-*) appear at "
294
+ f"least once each in the prompt as referenceable handles.",
295
+ )
296
+
297
+
298
+ class Phase66HardRulesTest(unittest.TestCase):
299
+ """Test 3 — Three hard rules from spec §5.6 are present.
300
+
301
+ Spec §5.6 Hard rules block:
302
+ - Audit gate cannot be skipped (no skip-audit option)
303
+ - Audit gate runs BEFORE collaboration_depth_agent + integrity_verification_agent
304
+ - PASS does NOT imply integrity check is skipped
305
+ """
306
+
307
+ def test_hard_rule_no_skip(self) -> None:
308
+ text = _read_prompt()
309
+ self.assertTrue(
310
+ "cannot be skipped" in text or "no skip-audit" in text or
311
+ "no \"skip audit\"" in text or 'no "skip audit"' in text,
312
+ "Phase 6.6 hard rule missing: audit gate cannot be skipped. "
313
+ "Spec §5.6 declares this as the first hard rule.",
314
+ )
315
+
316
+ def test_hard_rule_runs_before_observers(self) -> None:
317
+ text = _read_prompt()
318
+ self.assertIn(
319
+ "BEFORE collaboration_depth_agent",
320
+ text,
321
+ "Phase 6.6 hard rule missing: audit gate runs BEFORE "
322
+ "collaboration_depth_agent. Spec §5.6 declares this as the "
323
+ "second hard rule (audit is first transition-time check).",
324
+ )
325
+ self.assertIn(
326
+ "BEFORE integrity_verification_agent",
327
+ text,
328
+ "Phase 6.6 hard rule missing: audit gate runs BEFORE "
329
+ "integrity_verification_agent. Spec §5.6 declares this as the "
330
+ "second hard rule (audit is first transition-time check).",
331
+ )
332
+
333
+ def test_hard_rule_pass_does_not_skip_integrity(self) -> None:
334
+ text = _read_prompt()
335
+ # Either phrasing is acceptable; both convey the rule.
336
+ self.assertTrue(
337
+ "PASS does not imply integrity check is skipped" in text
338
+ or "PASS does NOT imply integrity check is skipped" in text
339
+ or "Stage 2.5 / 4.5 integrity gates remain mandatory" in text,
340
+ "Phase 6.6 hard rule missing: PASS does not skip integrity "
341
+ "check. Spec §5.6 declares this as the third hard rule "
342
+ "(Stage 2.5 / 4.5 integrity gates remain mandatory).",
343
+ )
344
+
345
+
346
+ def _measure_finalizer_block_lines(text: str) -> int:
347
+ """Return the number of lines in the v3.7.1 Step 3b finalizer
348
+ subsection (`## Cite-Time Provenance Finalizer (v3.7.1)` H2 block).
349
+
350
+ R1 P2-2 closure: keeps the v3.6.7 Phase 6.6 +60 budget test focused
351
+ on its own contract by subtracting the finalizer block lines before
352
+ applying the +60 ceiling. The Step 3b block has its own dedicated
353
+ budget test (`V371Step3bLineBudgetTest`) below.
354
+ """
355
+ import re as _re
356
+ anchor = _re.compile(
357
+ r"(?m)^[ \t]*##[ \t]+Cite-Time Provenance Finalizer \(v3\.7\.1\)[ \t]*$"
358
+ )
359
+ m = anchor.search(text)
360
+ if m is None:
361
+ return 0
362
+ next_h = _re.compile(r"(?m)^[ \t]*#{1,3}[ \t]+")
363
+ head_eol = text.find("\n", m.end())
364
+ search_start = (head_eol + 1) if head_eol >= 0 else len(text)
365
+ nm = next_h.search(text, search_start)
366
+ end = nm.start() if nm else len(text)
367
+ return len(text[m.start():end].splitlines())
368
+
369
+
370
+ def _measure_v3_8_audit_gate_block_lines(text: str) -> int:
371
+ """Return the number of lines in the v3.8 §3.6 Claim-Faithfulness Audit
372
+ Gate subsection (`### 3.6 Claim-Faithfulness Audit Gate (v3.8)` H3 block).
373
+
374
+ v3.8 adds §3.6 as the orchestrator handoff slot between the v3.7.x
375
+ finalizer pass and the formatter hard gate. Like the v3.7.1 / v3.7.3
376
+ blocks, the v3.8 block has its own scope and MUST be subtracted from
377
+ the v3.6.7 Phase 6.6 +60 budget. Spec:
378
+ docs/design/2026-05-15-issue-103-claim-alignment-audit-spec.md §5
379
+
380
+ Returns 0 if the v3.8 H3 heading is absent (e.g. when Step 8 has not
381
+ yet shipped on a given branch).
382
+
383
+ The block-end anchor matches the next H1, H2, OR H3 (`#{1,3} `) so the
384
+ measurer reads exactly the §3.6 H3 block. v3.7.x extension measurers
385
+ use `#{1,2}` because those blocks are H2 — H3 internals are part of
386
+ their scope. §3.6 is itself an H3, so the next H3 closes it.
387
+ """
388
+ import re as _re
389
+ anchor = _re.compile(
390
+ r"(?m)^[ \t]*###[ \t]+3\.6[ \t]+Claim-Faithfulness Audit Gate[ \t]+\(v3\.8\)[^\n]*$"
391
+ )
392
+ m = anchor.search(text)
393
+ if m is None:
394
+ return 0
395
+ next_h = _re.compile(r"(?m)^[ \t]*#{1,3}[ \t]+")
396
+ head_eol = text.find("\n", m.end())
397
+ search_start = (head_eol + 1) if head_eol >= 0 else len(text)
398
+ nm = next_h.search(text, search_start)
399
+ end = nm.start() if nm else len(text)
400
+ return len(text[m.start():end].splitlines())
401
+
402
+
403
+ def _measure_v3_7_3_extension_block_lines(text: str) -> int:
404
+ """Return the number of lines in the v3.7.3 finalizer extension
405
+ subsection (`## Cite-Time Provenance Finalizer — v3.7.3 extension ...`
406
+ H2 block).
407
+
408
+ v3.7.3 adds an L3-1 + L3-2 extension to the finalizer (NO-LOCATOR
409
+ precedence-zero check + contamination annotation). Like the v3.7.1
410
+ Step 3b block, this v3.7.3 block has its own scope and MUST be
411
+ subtracted from the v3.6.7 Phase 6.6 +60 budget. Spec:
412
+ docs/design/2026-05-12-ars-v3.7.3-claim-faithfulness-and-contaminated-source-spec.md §3.1+§3.2
413
+
414
+ Returns 0 if the v3.7.3 H2 heading is absent.
415
+
416
+ The v3.7.3 section uses H3 (`### ...`) subsections internally, so the
417
+ block-end anchor matches the next H1 (`# `) or H2 (`## `) only — NOT
418
+ H3 — distinct from `_measure_finalizer_block_lines()` which uses
419
+ `#{1,3}` because the v3.7.1 Step 3b block has no internal H3.
420
+ """
421
+ import re as _re
422
+ anchor = _re.compile(
423
+ r"(?m)^[ \t]*##[ \t]+Cite-Time Provenance Finalizer "
424
+ r"[—-]+[ \t]*v3\.7\.3 extension[^\n]*$"
425
+ )
426
+ m = anchor.search(text)
427
+ if m is None:
428
+ return 0
429
+ next_h = _re.compile(r"(?m)^[ \t]*#{1,2}[ \t]+")
430
+ head_eol = text.find("\n", m.end())
431
+ search_start = (head_eol + 1) if head_eol >= 0 else len(text)
432
+ nm = next_h.search(text, search_start)
433
+ end = nm.start() if nm else len(text)
434
+ return len(text[m.start():end].splitlines())
435
+
436
+
437
+ def _measure_v3_9_0_extension_block_lines(text: str) -> int:
438
+ """Return the number of lines in the v3.9.0 finalizer extension
439
+ subsection (`## Cite-Time Provenance Finalizer — v3.9.0 extension ...`
440
+ H2 block).
441
+
442
+ Counts from the heading line up to (but not including) the next
443
+ `## ` heading at the same level, or end of file. Mirrors
444
+ `_measure_v3_7_3_extension_block_lines`.
445
+
446
+ Returns 0 if the v3.9.0 H2 heading is absent.
447
+
448
+ The v3.9.0 section uses H3 (`### ...`) subsections internally (like
449
+ v3.7.3), so the block-end anchor matches the next H1 or H2 only —
450
+ NOT H3 — to avoid prematurely closing on internal subheadings.
451
+ """
452
+ import re as _re
453
+ anchor = _re.compile(
454
+ r"(?m)^[ \t]*##[ \t]+Cite-Time Provenance Finalizer "
455
+ r"[—-]+[ \t]*v3\.9\.0 extension[^\n]*$"
456
+ )
457
+ m = anchor.search(text)
458
+ if m is None:
459
+ return 0
460
+ next_h = _re.compile(r"(?m)^[ \t]*#{1,2}[ \t]+")
461
+ head_eol = text.find("\n", m.end())
462
+ search_start = (head_eol + 1) if head_eol >= 0 else len(text)
463
+ nm = next_h.search(text, search_start)
464
+ end = nm.start() if nm else len(text)
465
+ return len(text[m.start():end].splitlines())
466
+
467
+
468
+ def _measure_v3_10_extension_block_lines(text: str) -> int:
469
+ """Return the number of lines in the v3.10 finalizer extension
470
+ subsection (`## Cite-Time Provenance Finalizer — v3.10 extension ...`
471
+ H2 block).
472
+
473
+ v3.10 adds the terminal-policy layer: policy_hash slug rules + the two
474
+ marker grammar shapes + strict / strict_articles_only promotion + the
475
+ terminal_blocked[] audit note. Like the v3.7.x / v3.9.0 blocks, it has
476
+ its own scope and MUST be subtracted from the v3.6.7 Phase 6.6 +60 budget.
477
+ Spec: docs/design/2026-05-31-ars-v3.10-policy-layer-rescope-spec.md §3 PR-B.
478
+
479
+ Returns 0 if the v3.10 H2 heading is absent. The v3.10 section uses H3
480
+ subsections internally, so the block-end anchor matches the next H1/H2
481
+ only — NOT H3.
482
+ """
483
+ import re as _re
484
+ anchor = _re.compile(
485
+ r"(?m)^[ \t]*##[ \t]+Cite-Time Provenance Finalizer "
486
+ r"[—-]+[ \t]*v3\.10 extension[^\n]*$"
487
+ )
488
+ m = anchor.search(text)
489
+ if m is None:
490
+ return 0
491
+ next_h = _re.compile(r"(?m)^[ \t]*#{1,2}[ \t]+")
492
+ head_eol = text.find("\n", m.end())
493
+ search_start = (head_eol + 1) if head_eol >= 0 else len(text)
494
+ nm = next_h.search(text, search_start)
495
+ end = nm.start() if nm else len(text)
496
+ return len(text[m.start():end].splitlines())
497
+
498
+
499
+ def _measure_390_sequencing_block_lines(text: str) -> int:
500
+ """Return the number of lines in the #390 Slice B revision-patch
501
+ sequencing subsection (`## Revision-Round Patch Sequencing (#390)` H2
502
+ block).
503
+
504
+ Slice B adds the orchestrator side of diff/patch revision mode: the
505
+ seven-step sequence, the no-rewrite window, the two-layer escalation
506
+ gate + MANDATORY checkpoint, and the apply-failure path. Like the
507
+ v3.7.x / v3.9.0 / v3.10 / #394 blocks, it has its own scope and MUST be
508
+ subtracted from the v3.6.7 Phase 6.6 +60 budget. Spec:
509
+ docs/design/2026-06-10-390-diff-patch-revision-mode-spec.md §3.3-§3.6.
510
+
511
+ Returns 0 if the H2 heading is absent. The block embeds a fenced
512
+ checkpoint template; the block-end anchor matches the next H1/H2 only
513
+ (`#{1,2}`) so a fenced `## ...` line inside the template would only end
514
+ it if it began at column 0 — the template's content does not, so the
515
+ measure spans the whole block.
516
+ """
517
+ import re as _re
518
+ anchor = _re.compile(
519
+ r"(?m)^[ \t]*##[ \t]+Revision-Round Patch Sequencing[^\n]*$"
520
+ )
521
+ m = anchor.search(text)
522
+ if m is None:
523
+ return 0
524
+ next_h = _re.compile(r"(?m)^[ \t]*#{1,2}[ \t]+")
525
+ head_eol = text.find("\n", m.end())
526
+ search_start = (head_eol + 1) if head_eol >= 0 else len(text)
527
+ nm = next_h.search(text, search_start)
528
+ end = nm.start() if nm else len(text)
529
+ return len(text[m.start():end].splitlines())
530
+
531
+
532
+ def _measure_670_authority_extension_lines(text: str) -> int:
533
+ """Return the number of lines in the #670 authority/bundle H2 block.
534
+
535
+ The exact bundle chain and integrity-correction author-approval path are
536
+ a #670 extension, not part of the older #390 line budget. The next H1/H2
537
+ closes the block; there are no internal H2 headings.
538
+ """
539
+ import re as _re
540
+ anchor = _re.compile(
541
+ r"(?m)^[ \t]*##[ \t]+Revision Authority and Evidence-Bundle "
542
+ r"Extension \(#670\)[ \t]*$"
543
+ )
544
+ m = anchor.search(text)
545
+ if m is None:
546
+ return 0
547
+ next_h = _re.compile(r"(?m)^[ \t]*#{1,2}[ \t]+")
548
+ head_eol = text.find("\n", m.end())
549
+ search_start = (head_eol + 1) if head_eol >= 0 else len(text)
550
+ nm = next_h.search(text, search_start)
551
+ end = nm.start() if nm else len(text)
552
+ return len(text[m.start():end].splitlines())
553
+
554
+
555
+ def _measure_394_gate_block_lines(text: str) -> int:
556
+ """Return the number of lines in the #394 slice-4 submission-package
557
+ gate subsection (`## Submission-Package Terminal Gate ...` H2 block).
558
+
559
+ Slice 4 adds the Stage 5 post-formatter package-level gate: policy
560
+ resolution, the CLI dispatch, token-not-exit-code gating, the bounded
561
+ fix loop, the freshness guard, and the recompute-each-pass rule. Like
562
+ the v3.7.x / v3.9.0 / v3.10 blocks, it has its own scope and MUST be
563
+ subtracted from the v3.6.7 Phase 6.6 +60 budget. Spec:
564
+ docs/design/2026-06-10-394-submission-package-verifier-spec.md §5.
565
+
566
+ Returns 0 if the H2 heading is absent. The block uses one H3
567
+ internally, so the block-end anchor matches the next H1/H2 only —
568
+ NOT H3.
569
+ """
570
+ import re as _re
571
+ anchor = _re.compile(
572
+ r"(?m)^[ \t]*##[ \t]+Submission-Package Terminal Gate[^\n]*$"
573
+ )
574
+ m = anchor.search(text)
575
+ if m is None:
576
+ return 0
577
+ next_h = _re.compile(r"(?m)^[ \t]*#{1,2}[ \t]+")
578
+ head_eol = text.find("\n", m.end())
579
+ search_start = (head_eol + 1) if head_eol >= 0 else len(text)
580
+ nm = next_h.search(text, search_start)
581
+ end = nm.start() if nm else len(text)
582
+ return len(text[m.start():end].splitlines())
583
+
584
+
585
+ def _measure_576_stage3p_dispatch_block_lines(text: str) -> int:
586
+ """Return the number of lines in the #576 Spec B Stage 3' re-review
587
+ contract-dispatch subsection (`## Stage 3' Re-Review Contract Dispatch
588
+ (#576 Spec B)` H2 block).
589
+
590
+ PR-B2 adds the orchestrator-side three-gate dispatch contract. Like
591
+ the v3.7.x / v3.9.0 / v3.10 / #394 / #390 blocks, it has its own
592
+ scope and MUST be subtracted from the v3.6.7 Phase 6.6 +60 budget.
593
+ Spec: docs/design/2026-07-27-576-spec-b-re-review-precommitment-contract-spec.md §16.
594
+
595
+ Returns 0 if the H2 heading is absent. The block has no internal
596
+ headings; the block-end anchor matches the next H1/H2.
597
+ """
598
+ import re as _re
599
+ anchor = _re.compile(
600
+ r"(?m)^[ \t]*##[ \t]+Stage 3' Re-Review Contract Dispatch[^\n]*$"
601
+ )
602
+ m = anchor.search(text)
603
+ if m is None:
604
+ return 0
605
+ next_h = _re.compile(r"(?m)^[ \t]*#{1,2}[ \t]+")
606
+ head_eol = text.find("\n", m.end())
607
+ search_start = (head_eol + 1) if head_eol >= 0 else len(text)
608
+ nm = next_h.search(text, search_start)
609
+ end = nm.start() if nm else len(text)
610
+ return len(text[m.start():end].splitlines())
611
+
612
+
613
+ def _measure_656_evidence_rendering_block_lines(text: str) -> int:
614
+ """Return lines in the complete #656 orchestrator checkpoint scope."""
615
+ import re as _re
616
+
617
+ anchor = _re.compile(
618
+ r"(?m)^[ \t]*#####[ \t]+Phase E Evidence-Row Rendering \(#656\)[ \t]*$"
619
+ )
620
+ m = anchor.search(text)
621
+ if m is None:
622
+ return 0
623
+ next_h = _re.compile(r"(?m)^[ \t]*#{1,5}[ \t]+")
624
+ head_eol = text.find("\n", m.end())
625
+ search_start = (head_eol + 1) if head_eol >= 0 else len(text)
626
+ nm = next_h.search(text, search_start)
627
+ end = nm.start() if nm else len(text)
628
+ policy_lines = len(text[m.start():end].splitlines())
629
+
630
+ template_lines = text.splitlines()
631
+ insertion_start = next(
632
+ (
633
+ index
634
+ for index, line in enumerate(template_lines)
635
+ if line.startswith("[Phase E evidence:")
636
+ ),
637
+ None,
638
+ )
639
+ if insertion_start is None:
640
+ return 0
641
+ insertion_end = next(
642
+ (
643
+ index
644
+ for index in range(insertion_start, len(template_lines))
645
+ if template_lines[index].endswith("evidence.]")
646
+ ),
647
+ None,
648
+ )
649
+ if insertion_end is None:
650
+ return 0
651
+ return policy_lines + insertion_end - insertion_start + 1
652
+
653
+
654
+ def _measure_660_advisory_dispatch_block_lines(text: str) -> int:
655
+ """Return lines in the #660 tortured-phrase dispatch H2 block."""
656
+ import re as _re
657
+
658
+ anchor = _re.compile(
659
+ r"(?m)^[ \t]*##[ \t]+Tortured-Phrase Advisory Dispatch "
660
+ r"\(#660\)[ \t]*$"
661
+ )
662
+ m = anchor.search(text)
663
+ if m is None:
664
+ return 0
665
+ next_h = _re.compile(r"(?m)^[ \t]*#{1,2}[ \t]+")
666
+ head_eol = text.find("\n", m.end())
667
+ search_start = (head_eol + 1) if head_eol >= 0 else len(text)
668
+ nm = next_h.search(text, search_start)
669
+ end = nm.start() if nm else len(text)
670
+ return len(text[m.start():end].splitlines())
671
+
672
+
673
+ def _measure_672_advisory_dispatch_block_lines(text: str) -> int:
674
+ """Return lines in the #672 dispatch H2 plus sidecar handoff paragraph."""
675
+ import re as _re
676
+
677
+ anchor = _re.compile(
678
+ r"(?m)^[ \t]*##[ \t]+Cross-Document Consistency Advisory Dispatch "
679
+ r"\(#672\)[ \t]*$"
680
+ )
681
+ m = anchor.search(text)
682
+ if m is None:
683
+ return 0
684
+ next_h = _re.compile(r"(?m)^[ \t]*#{1,2}[ \t]+")
685
+ head_eol = text.find("\n", m.end())
686
+ search_start = (head_eol + 1) if head_eol >= 0 else len(text)
687
+ nm = next_h.search(text, search_start)
688
+ end = nm.start() if nm else len(text)
689
+ dispatch_lines = len(text[m.start():end].splitlines())
690
+ sidecar_marker = "**#672 sidecar continuity:**"
691
+ sidecar_start = text.find(sidecar_marker)
692
+ if sidecar_start < 0:
693
+ return 0
694
+ sidecar_end = text.find("\n\n", sidecar_start)
695
+ if sidecar_end < 0:
696
+ sidecar_end = len(text)
697
+ sidecar_lines = len(text[sidecar_start:sidecar_end].splitlines())
698
+ return dispatch_lines + sidecar_lines
699
+
700
+
701
+ def _measure_673_adjudication_activity_lines(text: str) -> int:
702
+ """Return the three #673 orchestrator paragraphs/sections."""
703
+ import re as _re
704
+
705
+ run_marker = "**Run identity (#673):**"
706
+ run_start = text.find(run_marker)
707
+ if run_start < 0:
708
+ return 0
709
+ run_end = text.find("\n\n", run_start)
710
+ if run_end < 0:
711
+ return 0
712
+ total = len(text[run_start:run_end].splitlines())
713
+
714
+ for heading, maximum_level in (
715
+ ("#### Adjudication-activity action-time hook (#673)", 4),
716
+ ("### Post-terminal adjudication-activity sequence (#673)", 3),
717
+ ):
718
+ start = text.find(heading)
719
+ if start < 0:
720
+ return 0
721
+ heading_end = text.find("\n", start)
722
+ if heading_end < 0:
723
+ return 0
724
+ next_heading = _re.search(
725
+ rf"(?m)^#{{1,{maximum_level}}}[ \t]+", text[heading_end + 1 :]
726
+ )
727
+ end = (
728
+ heading_end + 1 + next_heading.start()
729
+ if next_heading is not None
730
+ else len(text)
731
+ )
732
+ total += len(text[start:end].splitlines())
733
+ return total
734
+
735
+
736
+ def _measure_684_review_criteria_binding_lines(text: str) -> int:
737
+ """Return lines in the #684 criteria-binding lifecycle H2 block."""
738
+ import re as _re
739
+
740
+ anchor = _re.compile(
741
+ r"(?m)^[ \t]*##[ \t]+Review-target criteria binding lifecycle "
742
+ r"\(#684\)[ \t]*$"
743
+ )
744
+ match = anchor.search(text)
745
+ if match is None:
746
+ return 0
747
+ heading_end = text.find("\n", match.end())
748
+ search_start = heading_end + 1 if heading_end >= 0 else len(text)
749
+ next_heading = _re.search(r"(?m)^[ \t]*#{1,2}[ \t]+", text[search_start:])
750
+ end = search_start + next_heading.start() if next_heading else len(text)
751
+ return len(text[match.start():end].splitlines())
752
+
753
+
754
+ def _measure_743_inquiry_ledger_lines(text: str) -> int:
755
+ """Return #743's H4 block plus reset-rule-9 growth over its baseline line."""
756
+ import re as _re
757
+
758
+ anchor = _re.compile(
759
+ r"(?m)^[ \t]*####[ \t]+Inquiry Branch Ledger "
760
+ r"\(#743, opt-in alpha\)[ \t]*$"
761
+ )
762
+ match = anchor.search(text)
763
+ if match is None:
764
+ return 0
765
+ heading_end = text.find("\n", match.end())
766
+ search_start = heading_end + 1 if heading_end >= 0 else len(text)
767
+ next_heading = _re.search(r"(?m)^[ \t]*#{1,4}[ \t]+", text[search_start:])
768
+ end = search_start + next_heading.start() if next_heading else len(text)
769
+ inquiry_lines = len(text[match.start():end].splitlines())
770
+
771
+ rule_marker = "9. Resume consumption MUST hold an exclusive advisory lock"
772
+ rule_start = text.find(rule_marker)
773
+ if rule_start < 0:
774
+ return 0
775
+ rule_end = text.find("\n\n", rule_start)
776
+ if rule_end < 0:
777
+ return 0
778
+ current_rule_lines = len(text[rule_start:rule_end].splitlines())
779
+ return inquiry_lines + max(0, current_rule_lines - 1)
780
+
781
+
782
+ class Advisory660LineBudgetTest(unittest.TestCase):
783
+ """#660 tortured-phrase dispatch block stays independently bounded."""
784
+
785
+ def test_660_advisory_dispatch_block_within_budget(self) -> None:
786
+ text = _read_prompt()
787
+ block_lines = _measure_660_advisory_dispatch_block_lines(text)
788
+ self.assertGreater(
789
+ block_lines,
790
+ 0,
791
+ "#660 tortured-phrase advisory dispatch block is missing from "
792
+ "pipeline_orchestrator_agent.md",
793
+ )
794
+ self.assertLessEqual(
795
+ block_lines,
796
+ LINE_BUDGET_660_ADVISORY_DISPATCH,
797
+ f"#660 tortured-phrase advisory dispatch block is {block_lines} "
798
+ f"lines, over its {LINE_BUDGET_660_ADVISORY_DISPATCH}-line budget",
799
+ )
800
+
801
+
802
+ class Advisory672LineBudgetTest(unittest.TestCase):
803
+ """#672 dispatch and sidecar continuity stay independently bounded."""
804
+
805
+ def test_672_advisory_dispatch_block_within_budget(self) -> None:
806
+ text = _read_prompt()
807
+ block_lines = _measure_672_advisory_dispatch_block_lines(text)
808
+ self.assertGreater(
809
+ block_lines,
810
+ 0,
811
+ "#672 cross-document advisory dispatch block is missing from "
812
+ "pipeline_orchestrator_agent.md",
813
+ )
814
+ self.assertLessEqual(
815
+ block_lines,
816
+ LINE_BUDGET_672_ADVISORY_DISPATCH,
817
+ f"#672 cross-document advisory dispatch block is {block_lines} "
818
+ f"lines, over its {LINE_BUDGET_672_ADVISORY_DISPATCH}-line budget",
819
+ )
820
+
821
+
822
+ class Advisory673LineBudgetTest(unittest.TestCase):
823
+ """#673 action-time and post-terminal wiring stays independently bounded."""
824
+
825
+ def test_673_adjudication_activity_within_budget(self) -> None:
826
+ text = _read_prompt()
827
+ block_lines = _measure_673_adjudication_activity_lines(text)
828
+ self.assertGreater(
829
+ block_lines,
830
+ 0,
831
+ "#673 adjudication-activity wiring is missing from "
832
+ "pipeline_orchestrator_agent.md",
833
+ )
834
+ self.assertLessEqual(
835
+ block_lines,
836
+ LINE_BUDGET_673_ADJUDICATION_ACTIVITY,
837
+ f"#673 adjudication-activity wiring is {block_lines} lines, "
838
+ f"over its {LINE_BUDGET_673_ADJUDICATION_ACTIVITY}-line budget",
839
+ )
840
+
841
+
842
+ class ReviewCriteria684LineBudgetTest(unittest.TestCase):
843
+ """#684 criteria-binding orchestration stays independently bounded."""
844
+
845
+ def test_684_review_criteria_binding_within_budget(self) -> None:
846
+ text = _read_prompt()
847
+ block_lines = _measure_684_review_criteria_binding_lines(text)
848
+ self.assertGreater(block_lines, 0, "#684 criteria-binding block is missing")
849
+ self.assertLessEqual(
850
+ block_lines,
851
+ LINE_BUDGET_684_REVIEW_CRITERIA_BINDING,
852
+ f"#684 criteria-binding block is {block_lines} lines, over its "
853
+ f"{LINE_BUDGET_684_REVIEW_CRITERIA_BINDING}-line budget",
854
+ )
855
+
856
+
857
+ class InquiryLedger743LineBudgetTest(unittest.TestCase):
858
+ """#743 inquiry-ledger orchestration stays independently bounded."""
859
+
860
+ def test_743_inquiry_ledger_within_budget(self) -> None:
861
+ text = _read_prompt()
862
+ block_lines = _measure_743_inquiry_ledger_lines(text)
863
+ self.assertGreater(block_lines, 0, "#743 inquiry-ledger block is missing")
864
+ self.assertLessEqual(
865
+ block_lines,
866
+ LINE_BUDGET_743_INQUIRY_LEDGER,
867
+ f"#743 inquiry-ledger wiring is {block_lines} lines, over its "
868
+ f"{LINE_BUDGET_743_INQUIRY_LEDGER}-line budget",
869
+ )
870
+
871
+
872
+ class Dispatch576LineBudgetTest(unittest.TestCase):
873
+ """#576 Spec B Stage 3' contract-dispatch block within
874
+ `LINE_BUDGET_576_STAGE3P_DISPATCH` line budget.
875
+
876
+ Dedicated budget test for the `## Stage 3' Re-Review Contract
877
+ Dispatch (#576 Spec B)` subsection, decoupled from the v3.6.7
878
+ Phase 6.6 budget and the other extension-subsection budgets. If a
879
+ future #576 cascade legitimately requires more lines, raise
880
+ `LINE_BUDGET_576_STAGE3P_DISPATCH` explicitly with rationale.
881
+ """
882
+
883
+ def test_576_dispatch_block_within_budget(self) -> None:
884
+ text = _read_prompt()
885
+ block_lines = _measure_576_stage3p_dispatch_block_lines(text)
886
+ self.assertGreater(
887
+ block_lines,
888
+ 0,
889
+ "#576 Stage 3' contract-dispatch subsection missing from "
890
+ "pipeline_orchestrator_agent.md (expected H2 heading "
891
+ "'## Stage 3' Re-Review Contract Dispatch (#576 Spec B)')",
892
+ )
893
+ self.assertLessEqual(
894
+ block_lines,
895
+ LINE_BUDGET_576_STAGE3P_DISPATCH,
896
+ f"#576 Stage 3' contract-dispatch block is {block_lines} lines, "
897
+ f"over its {LINE_BUDGET_576_STAGE3P_DISPATCH}-line budget",
898
+ )
899
+
900
+
901
+ class Evidence656LineBudgetTest(unittest.TestCase):
902
+ """#656 checkpoint-rendering block stays within its own prompt budget."""
903
+
904
+ def test_656_evidence_rendering_block_within_budget(self) -> None:
905
+ text = _read_prompt()
906
+ block_lines = _measure_656_evidence_rendering_block_lines(text)
907
+ self.assertGreater(
908
+ block_lines,
909
+ 0,
910
+ "#656 Phase E evidence-row rendering block is missing from "
911
+ "pipeline_orchestrator_agent.md",
912
+ )
913
+ self.assertLessEqual(
914
+ block_lines,
915
+ LINE_BUDGET_656_EVIDENCE_RENDERING,
916
+ f"#656 Phase E evidence-row rendering block is {block_lines} lines, "
917
+ f"over its {LINE_BUDGET_656_EVIDENCE_RENDERING}-line budget",
918
+ )
919
+
920
+
921
+ class Phase66LineBudgetTest(unittest.TestCase):
922
+ """Test 4 — Prompt size within v3.6.7 Phase 6.6 +60 line budget,
923
+ measured EXCLUDING any v3.7.1+ subsections.
924
+
925
+ Per spec §10 Phase 6.6 verification gate: orchestrator prompt is no
926
+ more than +60 lines vs pre-Step-6 baseline (the ~50-line decision-
927
+ policy summary plus 5–10 lines of headroom).
928
+
929
+ R1 P2-2 closure: v3.7.1 Step 3b adds the `## Cite-Time Provenance
930
+ Finalizer (v3.7.1)` subsection. To preserve the v3.6.7 regression
931
+ signal, this test SUBTRACTS the v3.7.1 Step 3b block's line count
932
+ from the total before applying the +60 ceiling. v3.7.1+ subsections
933
+ have their own dedicated budget tests; the v3.6.7 contract is
934
+ measured against its own scope only.
935
+
936
+ Baseline is BASELINE_LINE_COUNT (579 lines from main commit 02b87ae).
937
+ """
938
+
939
+ def test_prompt_size_within_budget(self) -> None:
940
+ text = _read_prompt()
941
+ total_lines = len(text.splitlines())
942
+ step_3b_lines = _measure_finalizer_block_lines(text)
943
+ v3_7_3_lines = _measure_v3_7_3_extension_block_lines(text)
944
+ v3_8_lines = _measure_v3_8_audit_gate_block_lines(text)
945
+ v3_9_0_lines = _measure_v3_9_0_extension_block_lines(text)
946
+ v3_10_lines = _measure_v3_10_extension_block_lines(text)
947
+ gate_394_lines = _measure_394_gate_block_lines(text)
948
+ seq_390_lines = _measure_390_sequencing_block_lines(text)
949
+ authority_670_lines = _measure_670_authority_extension_lines(text)
950
+ dispatch_576_lines = _measure_576_stage3p_dispatch_block_lines(text)
951
+ evidence_656_lines = _measure_656_evidence_rendering_block_lines(text)
952
+ advisory_660_lines = _measure_660_advisory_dispatch_block_lines(text)
953
+ advisory_672_lines = _measure_672_advisory_dispatch_block_lines(text)
954
+ advisory_673_lines = _measure_673_adjudication_activity_lines(text)
955
+ criteria_684_lines = _measure_684_review_criteria_binding_lines(text)
956
+ inquiry_743_lines = _measure_743_inquiry_ledger_lines(text)
957
+ # v3.6.7-only line count: total minus v3.7.1 Step 3b, v3.7.3
958
+ # finalizer extension, v3.8 §3.6 audit-gate, v3.9.0 triangulation
959
+ # extension, v3.10 terminal-policy extension, the #394 slice-4
960
+ # submission-package gate, the #390 Slice B revision-patch
961
+ # sequencing, the #670 authority/bundle extension, the #576 Spec B
962
+ # Stage 3' contract-dispatch, AND the #656 Phase E evidence-row
963
+ # checkpoint-rendering, the #660 tortured-phrase advisory dispatch,
964
+ # the #672 cross-document advisory dispatch, AND the #673
965
+ # adjudication-activity wiring, the #684 review-criteria binding
966
+ # lifecycle, AND the #743 inquiry-ledger/sidecar extension (each has
967
+ # its own dedicated budget test).
968
+ v367_line_count = (
969
+ total_lines - step_3b_lines - v3_7_3_lines - v3_8_lines
970
+ - v3_9_0_lines - v3_10_lines - gate_394_lines - seq_390_lines
971
+ - authority_670_lines - dispatch_576_lines - evidence_656_lines
972
+ - advisory_660_lines - advisory_672_lines - advisory_673_lines
973
+ - criteria_684_lines - inquiry_743_lines
974
+ )
975
+ ceiling = BASELINE_LINE_COUNT + LINE_BUDGET_OVER_BASELINE
976
+ self.assertLessEqual(
977
+ v367_line_count,
978
+ ceiling,
979
+ f"Phase 6.6 line budget exceeded (v3.6.7-only scope): "
980
+ f"orchestrator prompt is {total_lines} lines, of which "
981
+ f"{step_3b_lines} are in the v3.7.1 Step 3b finalizer "
982
+ f"subsection, {v3_7_3_lines} are in the v3.7.3 finalizer "
983
+ f"extension subsection, {v3_8_lines} are in the v3.8 "
984
+ f"§3.6 audit-gate subsection, {v3_9_0_lines} are in "
985
+ f"the v3.9.0 triangulation extension subsection, "
986
+ f"{v3_10_lines} are in the v3.10 terminal-policy extension "
987
+ f"subsection, {gate_394_lines} are in the #394 submission-"
988
+ f"package gate, {seq_390_lines} are in the #390 revision-patch "
989
+ f"sequencing subsection, {dispatch_576_lines} are in the #576 "
990
+ f"dispatch subsection, {evidence_656_lines} are in the #656 "
991
+ f"evidence-rendering subsection, and {advisory_660_lines} are in "
992
+ f"the #660 advisory-dispatch subsection, and {advisory_672_lines} "
993
+ f"are in the #672 advisory-dispatch subsection, and "
994
+ f"{advisory_673_lines} are in the #673 adjudication-activity "
995
+ f"wiring, and {criteria_684_lines} are in the #684 criteria-"
996
+ f"binding lifecycle, and {inquiry_743_lines} are in the #743 "
997
+ f"inquiry-ledger/sidecar extension; "
998
+ f"v3.6.7-attributed lines = "
999
+ f"{v367_line_count} exceeds {ceiling} (baseline "
1000
+ f"{BASELINE_LINE_COUNT} + Phase 6.6 budget "
1001
+ f"{LINE_BUDGET_OVER_BASELINE}). Tighten the §3.5 Audit "
1002
+ f"Artifact Gate subsection.",
1003
+ )
1004
+
1005
+
1006
+ class V371Step3bLineBudgetTest(unittest.TestCase):
1007
+ """Test 5 — v3.7.1 Step 3b finalizer block within +40 line budget.
1008
+
1009
+ R1 P2-2 closure: dedicated budget test for the
1010
+ `## Cite-Time Provenance Finalizer (v3.7.1)` subsection. Measures
1011
+ ONLY the finalizer block's own lines, decoupled from the v3.6.7
1012
+ Phase 6.6 budget. Spec § Step 3b (line 449) does not specify a
1013
+ line cap; this test pins +40 lines as the contract for ARS prompt
1014
+ hygiene (the canonical subsection at first ship measured 35 lines;
1015
+ +40 leaves 5 lines of codex-round headroom).
1016
+
1017
+ If a future Step 3b cascade legitimately requires more lines, raise
1018
+ `LINE_BUDGET_V3_7_1_STEP_3B` explicitly and document the rationale.
1019
+ """
1020
+
1021
+ def test_step_3b_finalizer_block_within_budget(self) -> None:
1022
+ text = _read_prompt()
1023
+ block_lines = _measure_finalizer_block_lines(text)
1024
+ self.assertGreater(
1025
+ block_lines,
1026
+ 0,
1027
+ "v3.7.1 Step 3b finalizer subsection missing from "
1028
+ "pipeline_orchestrator_agent.md (expected H2 heading "
1029
+ "'## Cite-Time Provenance Finalizer (v3.7.1)').",
1030
+ )
1031
+ self.assertLessEqual(
1032
+ block_lines,
1033
+ LINE_BUDGET_V3_7_1_STEP_3B,
1034
+ f"v3.7.1 Step 3b finalizer block exceeds "
1035
+ f"{LINE_BUDGET_V3_7_1_STEP_3B} lines (measured: "
1036
+ f"{block_lines}). Tighten the subsection or raise the "
1037
+ f"`LINE_BUDGET_V3_7_1_STEP_3B` constant with rationale.",
1038
+ )
1039
+
1040
+
1041
+ class V373ExtensionLineBudgetTest(unittest.TestCase):
1042
+ """Test 6 — v3.7.3 finalizer extension block within
1043
+ `LINE_BUDGET_V3_7_3_EXTENSION` line budget.
1044
+
1045
+ Dedicated budget test for the `## Cite-Time Provenance Finalizer —
1046
+ v3.7.3 extension` subsection. Measures ONLY this block's lines,
1047
+ decoupled from both the v3.6.7 Phase 6.6 budget and the v3.7.1
1048
+ Step 3b budget. External motivation: Zhao et al. arXiv:2605.07723
1049
+ (2026-05). Spec:
1050
+ docs/design/2026-05-12-ars-v3.7.3-claim-faithfulness-and-contaminated-source-spec.md
1051
+ §3.1+§3.2
1052
+
1053
+ If a future v3.7.3 cascade legitimately requires more lines, raise
1054
+ `LINE_BUDGET_V3_7_3_EXTENSION` explicitly and document the rationale.
1055
+ """
1056
+
1057
+ def test_v3_7_3_extension_block_within_budget(self) -> None:
1058
+ text = _read_prompt()
1059
+ block_lines = _measure_v3_7_3_extension_block_lines(text)
1060
+ self.assertGreater(
1061
+ block_lines,
1062
+ 0,
1063
+ "v3.7.3 finalizer extension subsection missing from "
1064
+ "pipeline_orchestrator_agent.md (expected H2 heading "
1065
+ "'## Cite-Time Provenance Finalizer — v3.7.3 extension ...').",
1066
+ )
1067
+ self.assertLessEqual(
1068
+ block_lines,
1069
+ LINE_BUDGET_V3_7_3_EXTENSION,
1070
+ f"v3.7.3 finalizer extension block exceeds "
1071
+ f"{LINE_BUDGET_V3_7_3_EXTENSION} lines (measured: "
1072
+ f"{block_lines}). Tighten the subsection or raise the "
1073
+ f"`LINE_BUDGET_V3_7_3_EXTENSION` constant with rationale.",
1074
+ )
1075
+
1076
+
1077
+ class V38AuditGateLineBudgetTest(unittest.TestCase):
1078
+ """Test 7 — v3.8 §3.6 Claim-Faithfulness Audit Gate block within
1079
+ `LINE_BUDGET_V3_8_AUDIT_GATE` line budget.
1080
+
1081
+ Dedicated budget test for the `### 3.6 Claim-Faithfulness Audit Gate
1082
+ (v3.8)` H3 subsection. Measures ONLY this block's lines, decoupled
1083
+ from the v3.6.7 Phase 6.6 budget AND the v3.7.x subsection budgets.
1084
+ External motivation: Zhao et al. arXiv:2605.07723 (2026-05) +
1085
+ Li et al. RubricEM arXiv:2605.10899. Spec:
1086
+ docs/design/2026-05-15-issue-103-claim-alignment-audit-spec.md §5
1087
+
1088
+ If a future v3.8 cascade legitimately requires more lines, raise
1089
+ `LINE_BUDGET_V3_8_AUDIT_GATE` explicitly and document the rationale.
1090
+ """
1091
+
1092
+ def test_v3_8_audit_gate_block_within_budget(self) -> None:
1093
+ text = _read_prompt()
1094
+ block_lines = _measure_v3_8_audit_gate_block_lines(text)
1095
+ self.assertGreater(
1096
+ block_lines,
1097
+ 0,
1098
+ "v3.8 §3.6 audit-gate subsection missing from "
1099
+ "pipeline_orchestrator_agent.md (expected H3 heading "
1100
+ "'### 3.6 Claim-Faithfulness Audit Gate (v3.8)').",
1101
+ )
1102
+ self.assertLessEqual(
1103
+ block_lines,
1104
+ LINE_BUDGET_V3_8_AUDIT_GATE,
1105
+ f"v3.8 §3.6 audit-gate block exceeds "
1106
+ f"{LINE_BUDGET_V3_8_AUDIT_GATE} lines (measured: "
1107
+ f"{block_lines}). Tighten the subsection or raise the "
1108
+ f"`LINE_BUDGET_V3_8_AUDIT_GATE` constant with rationale.",
1109
+ )
1110
+
1111
+
1112
+ class V390ExtensionLineBudgetTest(unittest.TestCase):
1113
+ """Test 8 — v3.9.0 finalizer extension block within
1114
+ `LINE_BUDGET_V3_9_0_EXTENSION` line budget.
1115
+
1116
+ Dedicated budget test for the `## Cite-Time Provenance Finalizer —
1117
+ v3.9.0 extension (triangulation tiers)` subsection. Measures ONLY
1118
+ this block's lines, decoupled from the v3.6.7 Phase 6.6 budget AND
1119
+ the v3.7.x / v3.8 subsection budgets. External motivation: Zhao et
1120
+ al. arXiv:2605.07723 §3 (cross-index triangulation). Spec:
1121
+ docs/design/2026-05-17-ars-v3.9.0-cross-index-triangulation-measurement-spec.md
1122
+ §3.3
1123
+
1124
+ If a future v3.9.0 cascade legitimately requires more lines, raise
1125
+ `LINE_BUDGET_V3_9_0_EXTENSION` explicitly and document the rationale.
1126
+ """
1127
+
1128
+ def test_v3_9_0_extension_block_within_budget(self) -> None:
1129
+ """v3.9.0 finalizer extension block within +50 line budget.
1130
+
1131
+ Dedicated budget test for the `## Cite-Time Provenance Finalizer —
1132
+ v3.9.0 extension (triangulation tiers)` subsection per spec
1133
+ docs/design/2026-05-17-ars-v3.9.0-cross-index-triangulation-measurement-spec.md §3.3.
1134
+ """
1135
+ text = _read_prompt()
1136
+ block_lines = _measure_v3_9_0_extension_block_lines(text)
1137
+ self.assertGreater(
1138
+ block_lines,
1139
+ 0,
1140
+ "v3.9.0 triangulation extension subsection missing from "
1141
+ "pipeline_orchestrator_agent.md (expected H2 heading "
1142
+ "'## Cite-Time Provenance Finalizer — v3.9.0 extension "
1143
+ "(triangulation tiers)').",
1144
+ )
1145
+ self.assertLessEqual(
1146
+ block_lines,
1147
+ LINE_BUDGET_V3_9_0_EXTENSION,
1148
+ f"v3.9.0 triangulation extension block exceeds "
1149
+ f"{LINE_BUDGET_V3_9_0_EXTENSION}-line budget (currently "
1150
+ f"{block_lines} lines). Tighten the subsection or raise "
1151
+ f"`LINE_BUDGET_V3_9_0_EXTENSION` with rationale.",
1152
+ )
1153
+
1154
+
1155
+ class V310ExtensionLineBudgetTest(unittest.TestCase):
1156
+ """Test 9 — v3.10 finalizer extension block within
1157
+ `LINE_BUDGET_V3_10_EXTENSION` line budget.
1158
+
1159
+ Dedicated budget test for the `## Cite-Time Provenance Finalizer —
1160
+ v3.10 extension (terminal policy layer)` subsection. Measures ONLY this
1161
+ block's lines, decoupled from the v3.6.7 Phase 6.6 budget AND the
1162
+ v3.7.x / v3.8 / v3.9.0 subsection budgets. Spec:
1163
+ docs/design/2026-05-31-ars-v3.10-policy-layer-rescope-spec.md §3 PR-B.
1164
+
1165
+ If a future v3.10 cascade legitimately requires more lines, raise
1166
+ `LINE_BUDGET_V3_10_EXTENSION` explicitly and document the rationale.
1167
+ """
1168
+
1169
+ def test_v3_10_extension_block_within_budget(self) -> None:
1170
+ text = _read_prompt()
1171
+ block_lines = _measure_v3_10_extension_block_lines(text)
1172
+ self.assertGreater(
1173
+ block_lines,
1174
+ 0,
1175
+ "v3.10 terminal-policy extension subsection missing from "
1176
+ "pipeline_orchestrator_agent.md (expected H2 heading "
1177
+ "'## Cite-Time Provenance Finalizer — v3.10 extension "
1178
+ "(terminal policy layer)').",
1179
+ )
1180
+ self.assertLessEqual(
1181
+ block_lines,
1182
+ LINE_BUDGET_V3_10_EXTENSION,
1183
+ f"v3.10 terminal-policy extension block exceeds "
1184
+ f"{LINE_BUDGET_V3_10_EXTENSION}-line budget (currently "
1185
+ f"{block_lines} lines). Tighten the subsection or raise "
1186
+ f"`LINE_BUDGET_V3_10_EXTENSION` with rationale.",
1187
+ )
1188
+
1189
+
1190
+ class Gate394LineBudgetTest(unittest.TestCase):
1191
+ """Test 10 — #394 slice-4 submission-package gate block within
1192
+ `LINE_BUDGET_394_GATE` line budget.
1193
+
1194
+ Dedicated budget test for the `## Submission-Package Terminal Gate`
1195
+ subsection. Measures ONLY this block's lines, decoupled from the
1196
+ v3.6.7 Phase 6.6 budget AND the other extension-subsection budgets.
1197
+ Spec: docs/design/2026-06-10-394-submission-package-verifier-spec.md §5.
1198
+
1199
+ If a future #394 cascade legitimately requires more lines, raise
1200
+ `LINE_BUDGET_394_GATE` explicitly and document the rationale.
1201
+ """
1202
+
1203
+ def test_394_gate_block_within_budget(self) -> None:
1204
+ text = _read_prompt()
1205
+ block_lines = _measure_394_gate_block_lines(text)
1206
+ self.assertGreater(
1207
+ block_lines,
1208
+ 0,
1209
+ "#394 submission-package gate subsection missing from "
1210
+ "pipeline_orchestrator_agent.md (expected H2 heading "
1211
+ "'## Submission-Package Terminal Gate ...').",
1212
+ )
1213
+ self.assertLessEqual(
1214
+ block_lines,
1215
+ LINE_BUDGET_394_GATE,
1216
+ f"#394 submission-package gate block exceeds "
1217
+ f"{LINE_BUDGET_394_GATE}-line budget (currently "
1218
+ f"{block_lines} lines). Tighten the subsection or raise "
1219
+ f"`LINE_BUDGET_394_GATE` with rationale.",
1220
+ )
1221
+
1222
+
1223
+ class Sequencing390LineBudgetTest(unittest.TestCase):
1224
+ """Test 11 — #390 Slice B revision-patch sequencing block within
1225
+ `LINE_BUDGET_390_SEQUENCING` line budget.
1226
+
1227
+ Dedicated budget test for the `## Revision-Round Patch Sequencing
1228
+ (#390)` subsection. Measures ONLY this block's lines, decoupled from
1229
+ the v3.6.7 Phase 6.6 budget AND the other extension-subsection budgets.
1230
+ Spec: docs/design/2026-06-10-390-diff-patch-revision-mode-spec.md §3.3-§3.6.
1231
+
1232
+ If a future #390 cascade legitimately requires more lines, raise
1233
+ `LINE_BUDGET_390_SEQUENCING` explicitly and document the rationale.
1234
+ """
1235
+
1236
+ def test_390_sequencing_block_within_budget(self) -> None:
1237
+ text = _read_prompt()
1238
+ block_lines = _measure_390_sequencing_block_lines(text)
1239
+ self.assertGreater(
1240
+ block_lines,
1241
+ 0,
1242
+ "#390 revision-patch sequencing subsection missing from "
1243
+ "pipeline_orchestrator_agent.md (expected H2 heading "
1244
+ "'## Revision-Round Patch Sequencing (#390)').",
1245
+ )
1246
+ self.assertLessEqual(
1247
+ block_lines,
1248
+ LINE_BUDGET_390_SEQUENCING,
1249
+ f"#390 revision-patch sequencing block exceeds "
1250
+ f"{LINE_BUDGET_390_SEQUENCING}-line budget (currently "
1251
+ f"{block_lines} lines). Tighten the subsection or raise "
1252
+ f"`LINE_BUDGET_390_SEQUENCING` with rationale.",
1253
+ )
1254
+
1255
+
1256
+ class Authority670LineBudgetTest(unittest.TestCase):
1257
+ """#670 authority/bundle extension has its own explicit line budget."""
1258
+
1259
+ def test_670_authority_extension_within_budget(self) -> None:
1260
+ text = _read_prompt()
1261
+ block_lines = _measure_670_authority_extension_lines(text)
1262
+ self.assertGreater(
1263
+ block_lines,
1264
+ 0,
1265
+ "#670 authority/bundle extension missing from "
1266
+ "pipeline_orchestrator_agent.md.",
1267
+ )
1268
+ self.assertLessEqual(
1269
+ block_lines,
1270
+ LINE_BUDGET_670_AUTHORITY_EXTENSION,
1271
+ f"#670 authority/bundle extension exceeds "
1272
+ f"{LINE_BUDGET_670_AUTHORITY_EXTENSION}-line budget (currently "
1273
+ f"{block_lines} lines). Tighten it or raise "
1274
+ "`LINE_BUDGET_670_AUTHORITY_EXTENSION` with rationale.",
1275
+ )
1276
+
1277
+
1278
+ if __name__ == "__main__":
1279
+ unittest.main()