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.
- package/README.md +11 -5
- package/dist/apps/panel/index.html +2 -2
- package/dist/src/adapters/pi/extension.js +225 -92
- package/dist/src/adapters/pi/extension.js.map +1 -1
- package/dist/src/agents/import.js +44 -32
- package/dist/src/agents/import.js.map +1 -1
- package/dist/src/analysis/hooks.d.ts +1 -0
- package/dist/src/analysis/hooks.js +20 -1
- package/dist/src/analysis/hooks.js.map +1 -1
- package/dist/src/ars/bridge.d.ts +20 -0
- package/dist/src/ars/bridge.js +132 -0
- package/dist/src/ars/bridge.js.map +1 -0
- package/dist/src/ars/contracts.d.ts +55 -0
- package/dist/src/ars/contracts.js +2 -0
- package/dist/src/ars/contracts.js.map +1 -0
- package/dist/src/ars/panel-plan.d.ts +4 -0
- package/dist/src/ars/panel-plan.js +11 -0
- package/dist/src/ars/panel-plan.js.map +1 -0
- package/dist/src/ars/pi-panel-executor.d.ts +30 -0
- package/dist/src/ars/pi-panel-executor.js +140 -0
- package/dist/src/ars/pi-panel-executor.js.map +1 -0
- package/dist/src/ars/profile.d.ts +36 -0
- package/dist/src/ars/profile.js +119 -0
- package/dist/src/ars/profile.js.map +1 -0
- package/dist/src/ars/re-review.d.ts +22 -0
- package/dist/src/ars/re-review.js +172 -0
- package/dist/src/ars/re-review.js.map +1 -0
- package/dist/src/branding.d.ts +2 -4
- package/dist/src/branding.js +3 -5
- package/dist/src/branding.js.map +1 -1
- package/dist/src/bundled-tools.d.ts +3 -0
- package/dist/src/bundled-tools.js +21 -0
- package/dist/src/bundled-tools.js.map +1 -0
- package/dist/src/chat.js +6 -5
- package/dist/src/chat.js.map +1 -1
- package/dist/src/creation/contracts.d.ts +38 -0
- package/dist/src/creation/contracts.js +2 -0
- package/dist/src/creation/contracts.js.map +1 -0
- package/dist/src/creation/service.d.ts +7 -0
- package/dist/src/creation/service.js +196 -0
- package/dist/src/creation/service.js.map +1 -0
- package/dist/src/index.d.ts +10 -0
- package/dist/src/index.js +10 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/install/installer.js +32 -10
- package/dist/src/install/installer.js.map +1 -1
- package/dist/src/orchestration/personas.d.ts +15 -0
- package/dist/src/orchestration/personas.js +51 -0
- package/dist/src/orchestration/personas.js.map +1 -0
- package/dist/src/orchestration/pi-executor.d.ts +1 -0
- package/dist/src/orchestration/pi-executor.js +1 -1
- package/dist/src/orchestration/pi-executor.js.map +1 -1
- package/dist/src/panel/extension.js +29 -8
- package/dist/src/panel/extension.js.map +1 -1
- package/dist/src/panel/server.js +14 -5
- package/dist/src/panel/server.js.map +1 -1
- package/dist/src/project/paths.d.ts +3 -0
- package/dist/src/project/paths.js +7 -0
- package/dist/src/project/paths.js.map +1 -1
- package/dist/src/rules/user-rules.d.ts +8 -0
- package/dist/src/rules/user-rules.js +36 -0
- package/dist/src/rules/user-rules.js.map +1 -0
- package/dist/src/skills/contracts.d.ts +4 -4
- package/dist/src/skills/recommended.js +1 -1
- package/dist/src/skills/registry.js +49 -28
- package/dist/src/skills/registry.js.map +1 -1
- package/dist/src/style/cli-ui.js +0 -1
- package/dist/src/style/cli-ui.js.map +1 -1
- package/package.json +14 -3
- package/scripts/rebrand-pi.mjs +6 -0
- package/skills/recommended/catalog.json +2 -11
- package/vendor/ars/.claude/CLAUDE.md +371 -0
- package/vendor/ars/.command-invariants.toml +24 -0
- package/vendor/ars/CITATION.cff +35 -0
- package/vendor/ars/LICENSE +417 -0
- package/vendor/ars/MODE_REGISTRY.md +76 -0
- package/vendor/ars/NOTICE.md +26 -0
- package/vendor/ars/POSITIONING.md +99 -0
- package/vendor/ars/PSYCLAW_SOURCE.json +10 -0
- package/vendor/ars/README.md +751 -0
- package/vendor/ars/SECURITY.md +52 -0
- package/vendor/ars/THIRD_PARTY.md +70 -0
- package/vendor/ars/academic-paper/SKILL.md +542 -0
- package/vendor/ars/academic-paper/agents/abstract_bilingual_agent.md +171 -0
- package/vendor/ars/academic-paper/agents/argument_builder_agent.md +276 -0
- package/vendor/ars/academic-paper/agents/citation_compliance_agent.md +422 -0
- package/vendor/ars/academic-paper/agents/draft_writer_agent.md +656 -0
- package/vendor/ars/academic-paper/agents/formatter_agent.md +999 -0
- package/vendor/ars/academic-paper/agents/intake_agent.md +393 -0
- package/vendor/ars/academic-paper/agents/literature_strategist_agent.md +626 -0
- package/vendor/ars/academic-paper/agents/peer_reviewer_agent.md +516 -0
- package/vendor/ars/academic-paper/agents/revision_coach_agent.md +334 -0
- package/vendor/ars/academic-paper/agents/socratic_mentor_agent.md +527 -0
- package/vendor/ars/academic-paper/agents/structure_architect_agent.md +401 -0
- package/vendor/ars/academic-paper/agents/visualization_agent.md +441 -0
- package/vendor/ars/academic-paper/examples/chinese_paper_example.md +278 -0
- package/vendor/ars/academic-paper/examples/clinical_citation_verification_checklist.md +95 -0
- package/vendor/ars/academic-paper/examples/clinical_epistemic_status_example.md +100 -0
- package/vendor/ars/academic-paper/examples/commitment_ledger_example.md +147 -0
- package/vendor/ars/academic-paper/examples/imrad_hei_example.md +234 -0
- package/vendor/ars/academic-paper/examples/literature_review_example.md +260 -0
- package/vendor/ars/academic-paper/examples/plan_mode_guided_writing.md +600 -0
- package/vendor/ars/academic-paper/examples/revision_mode_example.md +344 -0
- package/vendor/ars/academic-paper/examples/revision_recovery_example.md +506 -0
- package/vendor/ars/academic-paper/examples/version_family_reconciliation_example.md +89 -0
- package/vendor/ars/academic-paper/references/abstract_writing_guide.md +169 -0
- package/vendor/ars/academic-paper/references/academic_writing_style.md +188 -0
- package/vendor/ars/academic-paper/references/anti_leakage_protocol.md +83 -0
- package/vendor/ars/academic-paper/references/apa7_chinese_citation_guide.md +364 -0
- package/vendor/ars/academic-paper/references/apa7_extended_guide.md +198 -0
- package/vendor/ars/academic-paper/references/changelog.md +11 -0
- package/vendor/ars/academic-paper/references/citation_format_switcher.md +228 -0
- package/vendor/ars/academic-paper/references/committee_correspondence_protocol.md +158 -0
- package/vendor/ars/academic-paper/references/credit_authorship_guide.md +308 -0
- package/vendor/ars/academic-paper/references/disclosure_mode_protocol.md +478 -0
- package/vendor/ars/academic-paper/references/domain_evidence_profiles.md +38 -0
- package/vendor/ars/academic-paper/references/failure_paths.md +349 -0
- package/vendor/ars/academic-paper/references/funding_statement_guide.md +319 -0
- package/vendor/ars/academic-paper/references/hei_domain_glossary.md +169 -0
- package/vendor/ars/academic-paper/references/intro_title_rhetoric_guide.md +114 -0
- package/vendor/ars/academic-paper/references/journal_submission_guide.md +249 -0
- package/vendor/ars/academic-paper/references/latex_template_reference.md +378 -0
- package/vendor/ars/academic-paper/references/mode_selection_guide.md +378 -0
- package/vendor/ars/academic-paper/references/paper_structure_patterns.md +330 -0
- package/vendor/ars/academic-paper/references/plan_mode_protocol.md +112 -0
- package/vendor/ars/academic-paper/references/policy_anchor_disclosure_protocol.md +200 -0
- package/vendor/ars/academic-paper/references/policy_anchor_table.md +157 -0
- package/vendor/ars/academic-paper/references/revision_patch_protocol.md +173 -0
- package/vendor/ars/academic-paper/references/statistical_visualization_standards.md +750 -0
- package/vendor/ars/academic-paper/references/venue_disclosure_policies.md +259 -0
- package/vendor/ars/academic-paper/references/vlm_figure_verification.md +126 -0
- package/vendor/ars/academic-paper/references/workflow_phase_details.md +135 -0
- package/vendor/ars/academic-paper/references/writing_judgment_framework.md +59 -0
- package/vendor/ars/academic-paper/references/writing_quality_check.md +173 -0
- package/vendor/ars/academic-paper/templates/bilingual_abstract_template.md +78 -0
- package/vendor/ars/academic-paper/templates/case_study_template.md +129 -0
- package/vendor/ars/academic-paper/templates/conference_paper_template.md +108 -0
- package/vendor/ars/academic-paper/templates/credit_statement_template.md +132 -0
- package/vendor/ars/academic-paper/templates/funding_statement_template.md +290 -0
- package/vendor/ars/academic-paper/templates/imrad_template.md +183 -0
- package/vendor/ars/academic-paper/templates/latex_article_template.tex +199 -0
- package/vendor/ars/academic-paper/templates/literature_review_template.md +135 -0
- package/vendor/ars/academic-paper/templates/policy_brief_template.md +139 -0
- package/vendor/ars/academic-paper/templates/revision_tracking_template.md +199 -0
- package/vendor/ars/academic-paper/templates/theoretical_paper_template.md +119 -0
- package/vendor/ars/academic-paper-reviewer/SKILL.md +491 -0
- package/vendor/ars/academic-paper-reviewer/agents/devils_advocate_reviewer_agent.md +443 -0
- package/vendor/ars/academic-paper-reviewer/agents/domain_reviewer_agent.md +412 -0
- package/vendor/ars/academic-paper-reviewer/agents/editorial_synthesizer_agent.md +478 -0
- package/vendor/ars/academic-paper-reviewer/agents/eic_agent.md +339 -0
- package/vendor/ars/academic-paper-reviewer/agents/field_analyst_agent.md +221 -0
- package/vendor/ars/academic-paper-reviewer/agents/methodology_reviewer_agent.md +449 -0
- package/vendor/ars/academic-paper-reviewer/agents/perspective_reviewer_agent.md +427 -0
- package/vendor/ars/academic-paper-reviewer/examples/hei_paper_review_example.md +391 -0
- package/vendor/ars/academic-paper-reviewer/examples/interdisciplinary_review_example.md +299 -0
- package/vendor/ars/academic-paper-reviewer/examples/subclaim_decomposition_example.md +80 -0
- package/vendor/ars/academic-paper-reviewer/references/calibration_mode_protocol.md +256 -0
- package/vendor/ars/academic-paper-reviewer/references/changelog.md +10 -0
- package/vendor/ars/academic-paper-reviewer/references/editorial_decision_standards.md +236 -0
- package/vendor/ars/academic-paper-reviewer/references/guided_mode_protocol.md +34 -0
- package/vendor/ars/academic-paper-reviewer/references/integration_guide.md +15 -0
- package/vendor/ars/academic-paper-reviewer/references/quality_rubrics.md +84 -0
- package/vendor/ars/academic-paper-reviewer/references/re_review_mode_protocol.md +340 -0
- package/vendor/ars/academic-paper-reviewer/references/review_criteria_framework.md +98 -0
- package/vendor/ars/academic-paper-reviewer/references/review_panel_provenance_protocol.md +197 -0
- package/vendor/ars/academic-paper-reviewer/references/review_quality_thinking.md +58 -0
- package/vendor/ars/academic-paper-reviewer/references/reviewer_sprint_prompt_source.md +324 -0
- package/vendor/ars/academic-paper-reviewer/references/sprint_contract_protocol.md +296 -0
- package/vendor/ars/academic-paper-reviewer/references/statistical_reporting_standards.md +505 -0
- package/vendor/ars/academic-paper-reviewer/references/top_journals_by_field.md +206 -0
- package/vendor/ars/academic-paper-reviewer/templates/editorial_decision_template.md +235 -0
- package/vendor/ars/academic-paper-reviewer/templates/peer_review_report_template.md +305 -0
- package/vendor/ars/academic-paper-reviewer/templates/revision_response_template.md +248 -0
- package/vendor/ars/academic-pipeline/SKILL.md +736 -0
- package/vendor/ars/academic-pipeline/agents/claim_ref_alignment_audit_agent.md +382 -0
- package/vendor/ars/academic-pipeline/agents/collaboration_depth_agent.md +164 -0
- package/vendor/ars/academic-pipeline/agents/integrity_verification_agent.md +870 -0
- package/vendor/ars/academic-pipeline/agents/pipeline_orchestrator_agent.md +1379 -0
- package/vendor/ars/academic-pipeline/agents/state_tracker_agent.md +622 -0
- package/vendor/ars/academic-pipeline/examples/full_pipeline_example.md +482 -0
- package/vendor/ars/academic-pipeline/examples/integrity_failure_recovery.md +389 -0
- package/vendor/ars/academic-pipeline/examples/mid_entry_example.md +414 -0
- package/vendor/ars/academic-pipeline/references/adapters/.gitkeep +0 -0
- package/vendor/ars/academic-pipeline/references/adapters/overview.md +153 -0
- package/vendor/ars/academic-pipeline/references/ai_research_failure_modes.md +185 -0
- package/vendor/ars/academic-pipeline/references/changelog.md +14 -0
- package/vendor/ars/academic-pipeline/references/claim_audit_calibration_protocol.md +175 -0
- package/vendor/ars/academic-pipeline/references/claim_verification_protocol.md +282 -0
- package/vendor/ars/academic-pipeline/references/external_review_protocol.md +131 -0
- package/vendor/ars/academic-pipeline/references/integrity_review_protocol.md +110 -0
- package/vendor/ars/academic-pipeline/references/literature_corpus_consumers.md +193 -0
- package/vendor/ars/academic-pipeline/references/mode_advisor.md +135 -0
- package/vendor/ars/academic-pipeline/references/passport_as_reset_boundary.md +132 -0
- package/vendor/ars/academic-pipeline/references/pipeline_state_machine.md +405 -0
- package/vendor/ars/academic-pipeline/references/plagiarism_detection_protocol.md +239 -0
- package/vendor/ars/academic-pipeline/references/process_summary_protocol.md +209 -0
- package/vendor/ars/academic-pipeline/references/progress_dashboard_template.md +38 -0
- package/vendor/ars/academic-pipeline/references/reinforcement_content.md +15 -0
- package/vendor/ars/academic-pipeline/references/reproducibility_audit.md +55 -0
- package/vendor/ars/academic-pipeline/references/score_trajectory_protocol.md +78 -0
- package/vendor/ars/academic-pipeline/references/team_collaboration_protocol.md +261 -0
- package/vendor/ars/academic-pipeline/references/two_stage_review_protocol.md +27 -0
- package/vendor/ars/academic-pipeline/templates/pipeline_status_template.md +146 -0
- package/vendor/ars/agents/report_compiler_agent.md +341 -0
- package/vendor/ars/agents/research_architect_agent.md +298 -0
- package/vendor/ars/agents/synthesis_agent.md +356 -0
- package/vendor/ars/commands/ars-3w.md +10 -0
- package/vendor/ars/commands/ars-abstract.md +10 -0
- package/vendor/ars/commands/ars-cache-invalidate.md +20 -0
- package/vendor/ars/commands/ars-citation-check.md +10 -0
- package/vendor/ars/commands/ars-disclosure.md +10 -0
- package/vendor/ars/commands/ars-format-convert.md +10 -0
- package/vendor/ars/commands/ars-full.md +9 -0
- package/vendor/ars/commands/ars-lit-review.md +12 -0
- package/vendor/ars/commands/ars-mark-read.md +18 -0
- package/vendor/ars/commands/ars-outline.md +10 -0
- package/vendor/ars/commands/ars-plan.md +10 -0
- package/vendor/ars/commands/ars-rebuttal-audit.md +12 -0
- package/vendor/ars/commands/ars-reviewer.md +9 -0
- package/vendor/ars/commands/ars-revision-coach.md +9 -0
- package/vendor/ars/commands/ars-revision.md +10 -0
- package/vendor/ars/commands/ars-unmark-read.md +16 -0
- package/vendor/ars/deep-research/SKILL.md +600 -0
- package/vendor/ars/deep-research/agents/bibliography_agent.md +473 -0
- package/vendor/ars/deep-research/agents/devils_advocate_agent.md +192 -0
- package/vendor/ars/deep-research/agents/editor_in_chief_agent.md +167 -0
- package/vendor/ars/deep-research/agents/ethics_review_agent.md +267 -0
- package/vendor/ars/deep-research/agents/meta_analysis_agent.md +325 -0
- package/vendor/ars/deep-research/agents/monitoring_agent.md +209 -0
- package/vendor/ars/deep-research/agents/report_compiler_agent.md +341 -0
- package/vendor/ars/deep-research/agents/research_architect_agent.md +298 -0
- package/vendor/ars/deep-research/agents/research_question_agent.md +216 -0
- package/vendor/ars/deep-research/agents/risk_of_bias_agent.md +231 -0
- package/vendor/ars/deep-research/agents/socratic_mentor_agent.md +764 -0
- package/vendor/ars/deep-research/agents/source_verification_agent.md +219 -0
- package/vendor/ars/deep-research/agents/synthesis_agent.md +356 -0
- package/vendor/ars/deep-research/agents/timeline_extraction_agent.md +99 -0
- package/vendor/ars/deep-research/examples/exploratory_research.md +157 -0
- package/vendor/ars/deep-research/examples/fact_check_mode.md +173 -0
- package/vendor/ars/deep-research/examples/handoff_to_paper.md +318 -0
- package/vendor/ars/deep-research/examples/idea_diversity_coverage_gap_advisory.md +64 -0
- package/vendor/ars/deep-research/examples/policy_analysis.md +161 -0
- package/vendor/ars/deep-research/examples/review_mode.md +253 -0
- package/vendor/ars/deep-research/examples/socratic_guided_research.md +331 -0
- package/vendor/ars/deep-research/examples/systematic_review.md +133 -0
- package/vendor/ars/deep-research/references/apa7_style_guide.md +162 -0
- package/vendor/ars/deep-research/references/argumentation_reasoning_framework.md +68 -0
- package/vendor/ars/deep-research/references/arxiv_api_protocol.md +76 -0
- package/vendor/ars/deep-research/references/changelog.md +22 -0
- package/vendor/ars/deep-research/references/chinese_literature_api_protocol.md +317 -0
- package/vendor/ars/deep-research/references/cross_agent_quality_definitions.md +14 -0
- package/vendor/ars/deep-research/references/crossref_api_protocol.md +84 -0
- package/vendor/ars/deep-research/references/equator_reporting_guidelines.md +482 -0
- package/vendor/ars/deep-research/references/ethics_checklist.md +282 -0
- package/vendor/ars/deep-research/references/failure_paths.md +355 -0
- package/vendor/ars/deep-research/references/interdisciplinary_bridges.md +292 -0
- package/vendor/ars/deep-research/references/irb_decision_tree.md +315 -0
- package/vendor/ars/deep-research/references/literature_monitoring_strategies.md +263 -0
- package/vendor/ars/deep-research/references/logical_fallacies.md +192 -0
- package/vendor/ars/deep-research/references/methodology_patterns.md +462 -0
- package/vendor/ars/deep-research/references/mode_selection_guide.md +331 -0
- package/vendor/ars/deep-research/references/openalex_api_protocol.md +82 -0
- package/vendor/ars/deep-research/references/preregistration_guide.md +324 -0
- package/vendor/ars/deep-research/references/semantic_scholar_api_protocol.md +107 -0
- package/vendor/ars/deep-research/references/socratic_mode_protocol.md +99 -0
- package/vendor/ars/deep-research/references/socratic_questioning_framework.md +232 -0
- package/vendor/ars/deep-research/references/source_quality_hierarchy.md +188 -0
- package/vendor/ars/deep-research/references/systematic_review_protocol.md +95 -0
- package/vendor/ars/deep-research/references/systematic_review_toolkit.md +353 -0
- package/vendor/ars/deep-research/templates/evidence_assessment_template.md +127 -0
- package/vendor/ars/deep-research/templates/literature_matrix_template.md +85 -0
- package/vendor/ars/deep-research/templates/preregistration_template.md +318 -0
- package/vendor/ars/deep-research/templates/prisma_protocol_template.md +248 -0
- package/vendor/ars/deep-research/templates/prisma_report_template.md +415 -0
- package/vendor/ars/deep-research/templates/research_brief_template.md +93 -0
- package/vendor/ars/package.json +24 -0
- package/vendor/ars/pi/README.md +161 -0
- package/vendor/ars/pi/package.json +26 -0
- package/vendor/ars/pi/wrapper.js +193 -0
- package/vendor/ars/pi/wrapper.test.mjs +201 -0
- package/vendor/ars/pyproject.toml +2 -0
- package/vendor/ars/requirements-pdf-content-classifier.txt +5 -0
- package/vendor/ars/scripts/_block_parser.py +396 -0
- package/vendor/ars/scripts/_ci_pytest_manifest.toml +661 -0
- package/vendor/ars/scripts/_claim_audit_constants.py +268 -0
- package/vendor/ars/scripts/_e4_evidence.py +110 -0
- package/vendor/ars/scripts/_eval_threshold_gate.py +73 -0
- package/vendor/ars/scripts/_markdown_lint_util.py +224 -0
- package/vendor/ars/scripts/_next_verified_at_ms.py +176 -0
- package/vendor/ars/scripts/_passport_yaml.py +53 -0
- package/vendor/ars/scripts/_skill_lint.py +254 -0
- package/vendor/ars/scripts/_text_similarity.py +141 -0
- package/vendor/ars/scripts/adapters/README.md +89 -0
- package/vendor/ars/scripts/adapters/_common.py +209 -0
- package/vendor/ars/scripts/adapters/examples/folder_scan/expected_passport.yaml +25 -0
- package/vendor/ars/scripts/adapters/examples/folder_scan/expected_rejection_log.yaml +18 -0
- package/vendor/ars/scripts/adapters/examples/folder_scan/input_fixture/Chen2024_AIAssessment.pdf +0 -0
- package/vendor/ars/scripts/adapters/examples/folder_scan/input_fixture/Wang_2023_formative_feedback.pdf +0 -0
- package/vendor/ars/scripts/adapters/examples/folder_scan/input_fixture/paper1.pdf +0 -0
- 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
- package/vendor/ars/scripts/adapters/examples/obsidian/expected_passport.yaml +40 -0
- package/vendor/ars/scripts/adapters/examples/obsidian/expected_rejection_log.yaml +13 -0
- package/vendor/ars/scripts/adapters/examples/obsidian/input_fixture/vault/.gitkeep +0 -0
- package/vendor/ars/scripts/adapters/examples/obsidian/input_fixture/vault/.obsidian/app.json +1 -0
- package/vendor/ars/scripts/adapters/examples/obsidian/input_fixture/vault/_templates/tmpl.md +7 -0
- package/vendor/ars/scripts/adapters/examples/obsidian/input_fixture/vault/chen2024ai.md +13 -0
- package/vendor/ars/scripts/adapters/examples/obsidian/input_fixture/vault/invalid.md +1 -0
- package/vendor/ars/scripts/adapters/examples/obsidian/input_fixture/vault/wang2023formative.md +10 -0
- package/vendor/ars/scripts/adapters/examples/zotero/expected_passport.yaml +34 -0
- package/vendor/ars/scripts/adapters/examples/zotero/expected_rejection_log.yaml +34 -0
- package/vendor/ars/scripts/adapters/examples/zotero/input_fixture/.gitkeep +0 -0
- package/vendor/ars/scripts/adapters/examples/zotero/input_fixture/export.json +43 -0
- package/vendor/ars/scripts/adapters/folder_scan.py +214 -0
- package/vendor/ars/scripts/adapters/obsidian.py +336 -0
- package/vendor/ars/scripts/adapters/tests/.gitkeep +0 -0
- package/vendor/ars/scripts/adapters/tests/conftest.py +77 -0
- package/vendor/ars/scripts/adapters/tests/test_check_corpus_consumer_protocol.py +632 -0
- package/vendor/ars/scripts/adapters/tests/test_check_literature_corpus_schema.py +631 -0
- package/vendor/ars/scripts/adapters/tests/test_common.py +365 -0
- package/vendor/ars/scripts/adapters/tests/test_conftest.py +96 -0
- package/vendor/ars/scripts/adapters/tests/test_folder_scan.py +260 -0
- package/vendor/ars/scripts/adapters/tests/test_literature_corpus_entry_schema.py +745 -0
- package/vendor/ars/scripts/adapters/tests/test_obsidian.py +357 -0
- package/vendor/ars/scripts/adapters/tests/test_rejection_log_schema.py +271 -0
- package/vendor/ars/scripts/adapters/tests/test_sync_adapter_docs.py +88 -0
- package/vendor/ars/scripts/adapters/tests/test_zotero.py +454 -0
- package/vendor/ars/scripts/adapters/zotero.py +318 -0
- package/vendor/ars/scripts/adjudication_activity.py +1592 -0
- package/vendor/ars/scripts/announce-ars-loaded.sh +144 -0
- package/vendor/ars/scripts/ars_anchorize_draft.py +170 -0
- package/vendor/ars/scripts/ars_apply_revision_patch.py +912 -0
- package/vendor/ars/scripts/ars_cache_invalidate.py +40 -0
- package/vendor/ars/scripts/ars_mark_read.py +521 -0
- package/vendor/ars/scripts/ars_phase_scope_manifest.json +33 -0
- package/vendor/ars/scripts/ars_update_check.sh +215 -0
- package/vendor/ars/scripts/ars_write_scope_guard.py +506 -0
- package/vendor/ars/scripts/arxiv_client.py +222 -0
- package/vendor/ars/scripts/audit_snapshot.py +572 -0
- package/vendor/ars/scripts/bibliographic_integrity_signals.py +800 -0
- package/vendor/ars/scripts/bootstrap_timeline_yaml.py +146 -0
- package/vendor/ars/scripts/build_claim_standing_candidate_ledger.py +1238 -0
- package/vendor/ars/scripts/build_claim_standing_query_plan.py +643 -0
- package/vendor/ars/scripts/build_content_coverage_advisory.py +1205 -0
- package/vendor/ars/scripts/build_cross_document_consistency_advisory.py +2332 -0
- package/vendor/ars/scripts/build_review_pathway_rule_trace.py +830 -0
- package/vendor/ars/scripts/build_submission_packet_manifest.py +2310 -0
- package/vendor/ars/scripts/check_215_field_norm.py +173 -0
- package/vendor/ars/scripts/check_216_surface_form.py +250 -0
- package/vendor/ars/scripts/check_268_nested_commitment_ledger.py +180 -0
- package/vendor/ars/scripts/check_390_revision_patch_discipline.py +296 -0
- package/vendor/ars/scripts/check_392_citation_verification_intake.py +126 -0
- package/vendor/ars/scripts/check_394_submission_policy.py +178 -0
- package/vendor/ars/scripts/check_439_format_profile.py +307 -0
- package/vendor/ars/scripts/check_619_disclosure_closeout.py +237 -0
- package/vendor/ars/scripts/check_630_codex_subscription_transport.py +456 -0
- package/vendor/ars/scripts/check_669_review_pathway_rule_trace.py +662 -0
- package/vendor/ars/scripts/check_670_revision_roadmap_integration.py +518 -0
- package/vendor/ars/scripts/check_673_adjudication_activity.py +684 -0
- package/vendor/ars/scripts/check_684_review_criteria_binding.py +557 -0
- package/vendor/ars/scripts/check_agents_mirror_sync.py +115 -0
- package/vendor/ars/scripts/check_audit_artifact_consistency.py +2313 -0
- package/vendor/ars/scripts/check_benchmark_report.py +79 -0
- package/vendor/ars/scripts/check_bibliographic_integrity_signals.py +831 -0
- package/vendor/ars/scripts/check_calibration_tiers.py +235 -0
- package/vendor/ars/scripts/check_changelog_covers_merges.py +289 -0
- package/vendor/ars/scripts/check_ci_pytest_manifest.py +204 -0
- package/vendor/ars/scripts/check_claim_audit_consistency.py +1664 -0
- package/vendor/ars/scripts/check_claim_standing_candidate_ledger_integration.py +500 -0
- package/vendor/ars/scripts/check_claim_standing_freshness.py +253 -0
- package/vendor/ars/scripts/check_claim_standing_transmissions.py +449 -0
- package/vendor/ars/scripts/check_collaboration_depth_rubric.py +180 -0
- package/vendor/ars/scripts/check_command_frontmatter_name.py +116 -0
- package/vendor/ars/scripts/check_committee_correspondence.py +333 -0
- package/vendor/ars/scripts/check_compliance_report.py +108 -0
- package/vendor/ars/scripts/check_content_coverage_advisory_integration.py +796 -0
- package/vendor/ars/scripts/check_control_availability.py +172 -0
- package/vendor/ars/scripts/check_corpus_consumer_protocol.py +404 -0
- package/vendor/ars/scripts/check_cross_document_consistency_advisory_integration.py +1191 -0
- package/vendor/ars/scripts/check_cross_model_handoff_contract.py +234 -0
- package/vendor/ars/scripts/check_cross_model_verification_sync.py +261 -0
- package/vendor/ars/scripts/check_data_access_level.py +131 -0
- package/vendor/ars/scripts/check_data_flows.py +252 -0
- package/vendor/ars/scripts/check_decision_contract.py +464 -0
- package/vendor/ars/scripts/check_degradation_registry.py +326 -0
- package/vendor/ars/scripts/check_distribution_surface_claims.py +226 -0
- package/vendor/ars/scripts/check_domain_evidence_profile.py +538 -0
- package/vendor/ars/scripts/check_e4_promotion.py +195 -0
- package/vendor/ars/scripts/check_evals_gold_set.py +279 -0
- package/vendor/ars/scripts/check_evidence_row_integration.py +396 -0
- package/vendor/ars/scripts/check_experiment_provenance.py +117 -0
- package/vendor/ars/scripts/check_field_norm_severity.py +144 -0
- package/vendor/ars/scripts/check_firm_rules_sync.py +375 -0
- package/vendor/ars/scripts/check_heldout_measurement_report.py +1179 -0
- package/vendor/ars/scripts/check_human_subjects_output_contract.py +139 -0
- package/vendor/ars/scripts/check_human_subjects_reference_migration.py +844 -0
- package/vendor/ars/scripts/check_indirect_prompt_injection_no_call.py +328 -0
- package/vendor/ars/scripts/check_instruction_data_boundary.py +236 -0
- package/vendor/ars/scripts/check_judge_prompt_version.py +125 -0
- package/vendor/ars/scripts/check_literature_corpus_schema.py +402 -0
- package/vendor/ars/scripts/check_model_tiering.py +223 -0
- package/vendor/ars/scripts/check_panel_synthesis.py +1331 -0
- package/vendor/ars/scripts/check_passport_reset_contract.py +214 -0
- package/vendor/ars/scripts/check_pattern_eval_manifest.py +422 -0
- package/vendor/ars/scripts/check_persuasion_invariance_fixtures.py +637 -0
- package/vendor/ars/scripts/check_phase_conformance.py +2180 -0
- package/vendor/ars/scripts/check_pipeline_boundary_semantics.py +600 -0
- package/vendor/ars/scripts/check_pipeline_integrity.py +340 -0
- package/vendor/ars/scripts/check_policy_anchor_protocol.py +159 -0
- package/vendor/ars/scripts/check_policy_anchor_table.py +286 -0
- package/vendor/ars/scripts/check_preprint_venues_consistency.py +123 -0
- package/vendor/ars/scripts/check_prisma_trAIce_freshness.py +84 -0
- package/vendor/ars/scripts/check_promotion_bakeoff_preregistration.py +1303 -0
- package/vendor/ars/scripts/check_ranking_lift.py +323 -0
- package/vendor/ars/scripts/check_re_review_synthesis.py +2719 -0
- package/vendor/ars/scripts/check_receipt_enum_sync.py +203 -0
- package/vendor/ars/scripts/check_repro_lock.py +85 -0
- package/vendor/ars/scripts/check_review_pathway_output.py +276 -0
- package/vendor/ars/scripts/check_reviewer_data_fences.py +224 -0
- package/vendor/ars/scripts/check_reviewer_finding_contract.py +783 -0
- package/vendor/ars/scripts/check_reviewer_role_label.py +447 -0
- package/vendor/ars/scripts/check_reviewer_scoring_honesty.py +292 -0
- package/vendor/ars/scripts/check_reviewer_sprint_prompt_sync.py +409 -0
- package/vendor/ars/scripts/check_revision_claim_drift_suite_v2.py +1622 -0
- package/vendor/ars/scripts/check_revision_token_conservation.py +263 -0
- package/vendor/ars/scripts/check_risk_register.py +280 -0
- package/vendor/ars/scripts/check_role_scoped_contract.py +702 -0
- package/vendor/ars/scripts/check_rq_framing_patterns.py +184 -0
- package/vendor/ars/scripts/check_rubric_weight_consistency.py +32 -0
- package/vendor/ars/scripts/check_seeded_defect_fixtures.py +425 -0
- package/vendor/ars/scripts/check_setup_cross_model_parity.py +139 -0
- package/vendor/ars/scripts/check_spec_consistency.py +1249 -0
- package/vendor/ars/scripts/check_sprint_contract.py +371 -0
- package/vendor/ars/scripts/check_stage_capability_matrix.py +784 -0
- package/vendor/ars/scripts/check_submission_packet_manifest_integration.py +358 -0
- package/vendor/ars/scripts/check_surface_form_parity.py +445 -0
- package/vendor/ars/scripts/check_task_type.py +22 -0
- package/vendor/ars/scripts/check_tools_allowlist.py +538 -0
- package/vendor/ars/scripts/check_tortured_phrase_screening_integration.py +1974 -0
- package/vendor/ars/scripts/check_v3_10_134_write_scope.py +286 -0
- package/vendor/ars/scripts/check_v3_10_policy.py +656 -0
- package/vendor/ars/scripts/check_v3_6_6_ab_manifest.py +364 -0
- package/vendor/ars/scripts/check_v3_6_7_pattern_protection.py +1366 -0
- package/vendor/ars/scripts/check_v3_6_8_audit_scope_block.py +464 -0
- package/vendor/ars/scripts/check_v3_6_8_cite_provenance_pipeline.py +231 -0
- package/vendor/ars/scripts/check_v3_6_8_frontmatter_trust_schema.py +248 -0
- package/vendor/ars/scripts/check_v3_6_8_mark_read_commands.py +79 -0
- package/vendor/ars/scripts/check_v3_6_8_pattern_protection.py +941 -0
- package/vendor/ars/scripts/check_v3_7_3_three_layer_citation.py +318 -0
- package/vendor/ars/scripts/check_v3_8_annotation_literal_sync.py +228 -0
- package/vendor/ars/scripts/check_v3_9_0_triangulation.py +366 -0
- package/vendor/ars/scripts/check_v3_9_2_phase_boundary.py +270 -0
- package/vendor/ars/scripts/check_v3_9_4_temporal_verification.py +139 -0
- package/vendor/ars/scripts/check_venue_disclosure_policies.py +63 -0
- package/vendor/ars/scripts/check_version_consistency.py +826 -0
- package/vendor/ars/scripts/check_workflow_classification.py +223 -0
- package/vendor/ars/scripts/chinese_literature_client.py +1938 -0
- package/vendor/ars/scripts/citation_verification_summary.py +85 -0
- package/vendor/ars/scripts/claim_audit_calibration.py +517 -0
- package/vendor/ars/scripts/claim_audit_finalizer.py +456 -0
- package/vendor/ars/scripts/claim_audit_pipeline.py +1594 -0
- package/vendor/ars/scripts/claim_registry_coverage.py +493 -0
- package/vendor/ars/scripts/claim_standing_discovery.py +784 -0
- package/vendor/ars/scripts/claim_standing_stance_runner.py +758 -0
- package/vendor/ars/scripts/claim_standing_stance_scorer.py +239 -0
- package/vendor/ars/scripts/claim_strength_drift_disposition.py +666 -0
- package/vendor/ars/scripts/contamination_signals.py +689 -0
- package/vendor/ars/scripts/corpus_consumer_manifest.json +19 -0
- package/vendor/ars/scripts/cross_model_codex_transport.py +1374 -0
- package/vendor/ars/scripts/cross_model_codex_verify.sh +6 -0
- package/vendor/ars/scripts/cross_model_handoff.py +359 -0
- package/vendor/ars/scripts/cross_model_smoke_test.sh +183 -0
- package/vendor/ars/scripts/cross_model_smoke_test_codex.sh +35 -0
- package/vendor/ars/scripts/cross_model_verification/gemini_is_grounded.jq +45 -0
- package/vendor/ars/scripts/cross_model_verification/gemini_sources.jq +45 -0
- package/vendor/ars/scripts/cross_model_verification/normalize_compat_verdict.py +57 -0
- package/vendor/ars/scripts/cross_model_verification/openai_has_completed_web_search.jq +15 -0
- package/vendor/ars/scripts/cross_model_verification/openai_sources.jq +17 -0
- package/vendor/ars/scripts/cross_model_verification/openai_text.jq +11 -0
- package/vendor/ars/scripts/crossref_client.py +225 -0
- package/vendor/ars/scripts/dispatch_e4_panel.py +2731 -0
- package/vendor/ars/scripts/evidence_rows.py +2043 -0
- package/vendor/ars/scripts/fixtures/adjudication_activity/author_stage3.json +32 -0
- package/vendor/ars/scripts/fixtures/adjudication_activity/author_stage3_input.json +27 -0
- package/vendor/ars/scripts/fixtures/adjudication_activity/author_stage3_prime.json +32 -0
- package/vendor/ars/scripts/fixtures/adjudication_activity/author_stage3_prime_input.json +27 -0
- package/vendor/ars/scripts/fixtures/adjudication_activity/compliance_override.json +50 -0
- package/vendor/ars/scripts/fixtures/adjudication_activity/compliance_override_action.json +14 -0
- package/vendor/ars/scripts/fixtures/adjudication_activity/compliance_pass.json +44 -0
- package/vendor/ars/scripts/fixtures/adjudication_activity/explicit_user_request_log.json +26 -0
- package/vendor/ars/scripts/fixtures/adjudication_activity/mandatory_checkpoint_log.json +116 -0
- package/vendor/ars/scripts/fixtures/audit_artifact_consistency/README.md +56 -0
- 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
- package/vendor/ars/scripts/fixtures/audit_artifact_consistency/negative/a1_pass_with_p1/2026-04-30T15-22-04Z-d8f3.jsonl +4 -0
- package/vendor/ars/scripts/fixtures/audit_artifact_consistency/negative/a1_pass_with_p1/2026-04-30T15-22-04Z-d8f3.meta.json +43 -0
- package/vendor/ars/scripts/fixtures/audit_artifact_consistency/negative/a1_pass_with_p1/2026-04-30T15-22-04Z-d8f3.verdict.yaml +19 -0
- package/vendor/ars/scripts/fixtures/audit_artifact_consistency/negative/a7_orphan_completion/2026-04-30T15-22-04Z-d8f3.jsonl +3 -0
- package/vendor/ars/scripts/fixtures/audit_artifact_consistency/positive/persisted_minor/2026-04-30T15-22-04Z-d8f3.audit_artifact_entry.json +26 -0
- package/vendor/ars/scripts/fixtures/audit_artifact_consistency/positive/persisted_minor/2026-04-30T15-22-04Z-d8f3.jsonl +4 -0
- package/vendor/ars/scripts/fixtures/audit_artifact_consistency/positive/persisted_minor/2026-04-30T15-22-04Z-d8f3.meta.json +43 -0
- package/vendor/ars/scripts/fixtures/audit_artifact_consistency/positive/persisted_minor/2026-04-30T15-22-04Z-d8f3.verdict.yaml +19 -0
- package/vendor/ars/scripts/fixtures/audit_artifact_consistency/positive/proposal_pass/2026-04-30T15-22-04Z-d8f3.audit_artifact_entry.json +24 -0
- package/vendor/ars/scripts/fixtures/audit_artifact_consistency/positive/proposal_pass/2026-04-30T15-22-04Z-d8f3.jsonl +4 -0
- package/vendor/ars/scripts/fixtures/audit_artifact_consistency/positive/proposal_pass/2026-04-30T15-22-04Z-d8f3.meta.json +43 -0
- package/vendor/ars/scripts/fixtures/audit_artifact_consistency/positive/proposal_pass/2026-04-30T15-22-04Z-d8f3.verdict.yaml +12 -0
- package/vendor/ars/scripts/fixtures/bibliographic_integrity_signals/retraction.json +46 -0
- package/vendor/ars/scripts/fixtures/bibliographic_integrity_signals/retraction_check_attestation.json +44 -0
- package/vendor/ars/scripts/fixtures/bibliographic_integrity_signals/tortured_phrase.json +44 -0
- package/vendor/ars/scripts/fixtures/bibliographic_integrity_signals/tortured_phrase_v1_2_abstract_missing.json +107 -0
- package/vendor/ars/scripts/fixtures/bibliographic_integrity_signals/tortured_phrase_v1_2_detected.json +124 -0
- package/vendor/ars/scripts/fixtures/check_evals_gold_set/clean/expected_outcomes.json +77 -0
- package/vendor/ars/scripts/fixtures/check_evals_gold_set/clean/manifest.yaml +37 -0
- package/vendor/ars/scripts/fixtures/check_evals_gold_set/clean/tuples/001-valid-doi-test.json +20 -0
- package/vendor/ars/scripts/fixtures/check_evals_gold_set/clean/tuples/002-valid-arxiv-test.json +19 -0
- package/vendor/ars/scripts/fixtures/check_evals_gold_set/clean/tuples/003-fabricated-test.json +20 -0
- package/vendor/ars/scripts/fixtures/claim_audit_calibration/gold_set.json +344 -0
- package/vendor/ars/scripts/fixtures/claim_standing_candidate_ledger/query_plan.json +108 -0
- package/vendor/ars/scripts/fixtures/claim_standing_candidate_ledger/retrieval_input.json +179 -0
- package/vendor/ars/scripts/fixtures/committee_correspondence/16fd83f6aec7/concern_tracker.json +129 -0
- package/vendor/ars/scripts/fixtures/committee_correspondence/16fd83f6aec7/response_skeleton.md +19 -0
- package/vendor/ars/scripts/fixtures/committee_correspondence/16fd83f6aec7/source_letter.txt +9 -0
- package/vendor/ars/scripts/fixtures/content_coverage_advisory/base_draft.json +48 -0
- package/vendor/ars/scripts/fixtures/content_coverage_advisory/base_inventory.json +38 -0
- package/vendor/ars/scripts/fixtures/content_coverage_advisory/packet/consent.txt +1 -0
- package/vendor/ars/scripts/fixtures/content_coverage_advisory/session_sources.json +3 -0
- package/vendor/ars/scripts/fixtures/cross_document_consistency/README.md +6 -0
- package/vendor/ars/scripts/fixtures/cross_document_consistency/accepted_draft.md +35 -0
- package/vendor/ars/scripts/fixtures/cross_document_consistency/cases.json +75 -0
- package/vendor/ars/scripts/fixtures/cross_document_consistency/preregistration.md +5 -0
- package/vendor/ars/scripts/fixtures/cross_model_codex_transport/forbidden_event.jsonl +4 -0
- package/vendor/ars/scripts/fixtures/cross_model_codex_transport/grounded_verified.jsonl +3 -0
- package/vendor/ars/scripts/fixtures/cross_model_codex_transport/malformed.jsonl +3 -0
- package/vendor/ars/scripts/fixtures/cross_model_codex_transport/missing_search.jsonl +2 -0
- package/vendor/ars/scripts/fixtures/cross_model_codex_transport/multiple_finals.jsonl +4 -0
- package/vendor/ars/scripts/fixtures/cross_model_codex_transport/not_found.jsonl +3 -0
- package/vendor/ars/scripts/fixtures/cross_model_codex_transport/unbound_source.jsonl +3 -0
- package/vendor/ars/scripts/fixtures/cross_model_codex_transport/wrong_search_shape.jsonl +3 -0
- package/vendor/ars/scripts/fixtures/evidence_rows/phase_e_inputs.json +114 -0
- package/vendor/ars/scripts/fixtures/evidence_rows/session_sources.json +5 -0
- package/vendor/ars/scripts/fixtures/human_subjects_authority/cross-border-us-tw-gdpr.json +71 -0
- package/vendor/ars/scripts/fixtures/human_subjects_authority/gdpr-member-state-unresolved.json +62 -0
- package/vendor/ars/scripts/fixtures/human_subjects_authority/missing-data-axis.json +45 -0
- package/vendor/ars/scripts/fixtures/human_subjects_authority/no-profile.json +33 -0
- package/vendor/ars/scripts/fixtures/human_subjects_authority/tw-gdpr-two-axis.json +74 -0
- package/vendor/ars/scripts/fixtures/human_subjects_authority/us-gdpr-two-axis.json +74 -0
- package/vendor/ars/scripts/fixtures/review_pathway_rule_trace/lint-near-misses.json +72 -0
- package/vendor/ars/scripts/fixtures/review_pathway_rule_trace/no-profile-request.json +18 -0
- package/vendor/ars/scripts/fixtures/review_pathway_rule_trace/tw-candidates-request.json +63 -0
- package/vendor/ars/scripts/fixtures/review_pathway_rule_trace/us-candidates-request.json +77 -0
- package/vendor/ars/scripts/fixtures/review_target_context/exact-declaration.json +24 -0
- package/vendor/ars/scripts/fixtures/review_target_context/field-general-declaration.json +24 -0
- package/vendor/ars/scripts/fixtures/review_target_context/msr-2027-technical-full-declaration.json +24 -0
- package/vendor/ars/scripts/fixtures/review_target_context/synthetic-registry.json +92 -0
- package/vendor/ars/scripts/fixtures/revision_claim_drift_v2/README.md +21 -0
- package/vendor/ars/scripts/fixtures/revision_claim_drift_v2/subject_context_attested_only.json +55 -0
- package/vendor/ars/scripts/fixtures/revision_claim_drift_v2/subject_context_machine_supported.json +49 -0
- package/vendor/ars/scripts/fixtures/revision_claim_drift_v2/subject_context_not_isolated.json +56 -0
- package/vendor/ars/scripts/fixtures/revision_claim_drift_v2/subject_context_unknown.json +49 -0
- package/vendor/ars/scripts/fixtures/submission_package/clean/paper.md +16 -0
- package/vendor/ars/scripts/fixtures/submission_package/clean/references.bib +13 -0
- package/vendor/ars/scripts/fixtures/submission_package/fallback_authoryear/paper.md +11 -0
- package/vendor/ars/scripts/fixtures/submission_package/fallback_authoryear/references.bib +13 -0
- package/vendor/ars/scripts/fixtures/submission_package/fallback_latex/paper.tex +9 -0
- package/vendor/ars/scripts/fixtures/submission_package/fallback_latex/references.bib +13 -0
- package/vendor/ars/scripts/fixtures/submission_package/marker_no_join/paper.md +7 -0
- package/vendor/ars/scripts/fixtures/submission_package/orphan_intext/paper.md +8 -0
- package/vendor/ars/scripts/fixtures/submission_package/orphan_intext/references.bib +6 -0
- package/vendor/ars/scripts/fixtures/submission_package/passports/corpus_only.yaml +9 -0
- package/vendor/ars/scripts/fixtures/submission_package/passports/summary_join.yaml +16 -0
- package/vendor/ars/scripts/fixtures/submission_package/profiles/full.yaml +15 -0
- package/vendor/ars/scripts/fixtures/submission_package/profiles/tight.yaml +15 -0
- package/vendor/ars/scripts/fixtures/submission_package/summary_join/paper.md +7 -0
- package/vendor/ars/scripts/fixtures/submission_package/uncited_reference/paper.md +9 -0
- package/vendor/ars/scripts/fixtures/submission_package/uncited_reference/references.bib +13 -0
- package/vendor/ars/scripts/fixtures/submission_package/venue_clean/paper.md +26 -0
- package/vendor/ars/scripts/fixtures/submission_package/venue_clean/references.bib +13 -0
- package/vendor/ars/scripts/fixtures/submission_package/venue_violations/paper.md +20 -0
- package/vendor/ars/scripts/fixtures/submission_package/venue_violations/references.bib +13 -0
- package/vendor/ars/scripts/fixtures/submission_packet_manifest/base_inventory.json +101 -0
- package/vendor/ars/scripts/fixtures/submission_packet_manifest/packet/consent-materials.txt +3 -0
- package/vendor/ars/scripts/fixtures/submission_packet_manifest/packet/training-certificate.txt +2 -0
- package/vendor/ars/scripts/fixtures/submission_packet_manifest/packet/tw-consent-materials.txt +3 -0
- package/vendor/ars/scripts/fixtures/tortured_phrase_screening/corpus_input.yaml +30 -0
- package/vendor/ars/scripts/fixtures/tortured_phrase_screening/own_draft.md +36 -0
- package/vendor/ars/scripts/fixtures/tortured_phrase_screening/own_draft.tex +21 -0
- package/vendor/ars/scripts/fixtures/tortured_phrase_screening/seed_expectations.json +218 -0
- package/vendor/ars/scripts/fixtures/tortured_phrase_screening/snapshot.json +164 -0
- package/vendor/ars/scripts/fixtures/tortured_phrase_screening/snapshot_manifest.json +29 -0
- package/vendor/ars/scripts/fixtures/transport_bodies/README.md +55 -0
- package/vendor/ars/scripts/fixtures/transport_bodies/arxiv/empty_feed.xml +10 -0
- package/vendor/ars/scripts/fixtures/transport_bodies/arxiv/error_5xx.html +7 -0
- package/vendor/ars/scripts/fixtures/transport_bodies/arxiv/id_hit.xml +26 -0
- package/vendor/ars/scripts/fixtures/transport_bodies/chinese_literature/README.md +69 -0
- package/vendor/ars/scripts/fixtures/transport_bodies/chinese_literature/cnki_landing_page.html +13 -0
- package/vendor/ars/scripts/fixtures/transport_bodies/chinese_literature/error_5xx.html +2 -0
- package/vendor/ars/scripts/fixtures/transport_bodies/chinese_literature/esearch_coordinate_ambiguous.json +16 -0
- package/vendor/ars/scripts/fixtures/transport_bodies/chinese_literature/esearch_coordinate_hit.json +16 -0
- package/vendor/ars/scripts/fixtures/transport_bodies/chinese_literature/esearch_coordinate_zero.json +14 -0
- package/vendor/ars/scripts/fixtures/transport_bodies/chinese_literature/esearch_coverage_hit.json +15 -0
- package/vendor/ars/scripts/fixtures/transport_bodies/chinese_literature/esearch_coverage_zero.json +13 -0
- package/vendor/ars/scripts/fixtures/transport_bodies/chinese_literature/esummary_hit.json +43 -0
- package/vendor/ars/scripts/fixtures/transport_bodies/chinese_literature/esummary_issn_mismatch.json +31 -0
- package/vendor/ars/scripts/fixtures/transport_bodies/chinese_literature/esummary_no_doi.json +31 -0
- package/vendor/ars/scripts/fixtures/transport_bodies/chinese_literature/esummary_unknown_ra.json +34 -0
- package/vendor/ars/scripts/fixtures/transport_bodies/chinese_literature/esummary_year_mismatch.json +31 -0
- package/vendor/ars/scripts/fixtures/transport_bodies/chinese_literature/handle_absent.json +4 -0
- package/vendor/ars/scripts/fixtures/transport_bodies/chinese_literature/handle_exists.json +16 -0
- package/vendor/ars/scripts/fixtures/transport_bodies/chinese_literature/handle_internal_error.json +4 -0
- package/vendor/ars/scripts/fixtures/transport_bodies/chinese_literature/istic_csl_hit.json +25 -0
- package/vendor/ars/scripts/fixtures/transport_bodies/chinese_literature/istic_csl_other_title.json +18 -0
- package/vendor/ars/scripts/fixtures/transport_bodies/chinese_literature/ra_cnki.json +6 -0
- package/vendor/ars/scripts/fixtures/transport_bodies/chinese_literature/ra_crossref.json +6 -0
- package/vendor/ars/scripts/fixtures/transport_bodies/chinese_literature/ra_istic.json +6 -0
- package/vendor/ars/scripts/fixtures/transport_bodies/chinese_literature/ra_unknown_prefix.json +6 -0
- package/vendor/ars/scripts/fixtures/transport_bodies/crossref/doi_hit.json +24 -0
- package/vendor/ars/scripts/fixtures/transport_bodies/crossref/error_5xx.html +7 -0
- package/vendor/ars/scripts/fixtures/transport_bodies/crossref/title_search_miss.json +15 -0
- package/vendor/ars/scripts/fixtures/transport_bodies/openalex/doi_hit.json +29 -0
- package/vendor/ars/scripts/fixtures/transport_bodies/openalex/error_5xx.json +4 -0
- package/vendor/ars/scripts/fixtures/transport_bodies/openalex/title_search_miss.json +11 -0
- package/vendor/ars/scripts/fixtures/transport_bodies/semantic_scholar/doi_hit.json +14 -0
- package/vendor/ars/scripts/fixtures/transport_bodies/semantic_scholar/error_5xx.json +3 -0
- package/vendor/ars/scripts/fixtures/transport_bodies/semantic_scholar/title_search_miss.json +5 -0
- package/vendor/ars/scripts/human_read_attestation_resolver.py +467 -0
- package/vendor/ars/scripts/ideation_diversity_assignment_gate.py +430 -0
- package/vendor/ars/scripts/inquiry_branch_ledger.py +2540 -0
- package/vendor/ars/scripts/legacy/ars_apply_revision_patch_v1_0.py +715 -0
- package/vendor/ars/scripts/legacy/check_re_review_synthesis_v1_0.py +2215 -0
- package/vendor/ars/scripts/migrate_literature_corpus_to_v3_10.py +223 -0
- package/vendor/ars/scripts/migrate_literature_corpus_to_v3_7_3.py +277 -0
- package/vendor/ars/scripts/migrate_literature_corpus_to_v3_9_0.py +304 -0
- package/vendor/ars/scripts/model_tiering_manifest.json +46 -0
- package/vendor/ars/scripts/openalex_client.py +232 -0
- package/vendor/ars/scripts/parse_audit_verdict.py +802 -0
- package/vendor/ars/scripts/pdf_content_classifier_worker.py +176 -0
- package/vendor/ars/scripts/pdf_read_preflight.py +1455 -0
- package/vendor/ars/scripts/policy_anchor_disclosure_referee.py +354 -0
- package/vendor/ars/scripts/recompute_receipts.py +1414 -0
- package/vendor/ars/scripts/render_claim_standing_view.py +374 -0
- package/vendor/ars/scripts/render_eval_comment.py +130 -0
- package/vendor/ars/scripts/render_harness_retirement_issue.py +167 -0
- package/vendor/ars/scripts/repro_lock_validation.py +90 -0
- package/vendor/ars/scripts/research_workflow_profile.py +1079 -0
- package/vendor/ars/scripts/resolve_human_subjects_authority.py +1158 -0
- package/vendor/ars/scripts/resolve_review_target_context.py +683 -0
- package/vendor/ars/scripts/resume_e4_record.py +509 -0
- package/vendor/ars/scripts/retraction_status.py +484 -0
- package/vendor/ars/scripts/review_criteria_binding.py +889 -0
- package/vendor/ars/scripts/review_panel_provenance.py +744 -0
- package/vendor/ars/scripts/revision_roadmap.py +1967 -0
- package/vendor/ars/scripts/run_ci_pytest_manifest.py +116 -0
- package/vendor/ars/scripts/run_codex_audit.sh +1191 -0
- package/vendor/ars/scripts/run_evals.py +513 -0
- package/vendor/ars/scripts/run_ideation_diversity_no_call.py +3505 -0
- package/vendor/ars/scripts/run_indirect_prompt_injection_no_call.py +3330 -0
- package/vendor/ars/scripts/run_indirect_prompt_injection_probe.py +399 -0
- package/vendor/ars/scripts/run_review_criteria_constructive_value.py +1895 -0
- package/vendor/ars/scripts/run_role_topology_utility_dry_run.py +606 -0
- package/vendor/ars/scripts/score_review_criteria_constructive_value.py +617 -0
- package/vendor/ars/scripts/semantic_scholar_client.py +291 -0
- package/vendor/ars/scripts/slr_lineage.py +59 -0
- package/vendor/ars/scripts/sync_adapter_docs.py +118 -0
- package/vendor/ars/scripts/temporal_integrity_audit.py +840 -0
- package/vendor/ars/scripts/test_431_exact_or_bust.py +253 -0
- package/vendor/ars/scripts/test__eval_threshold_gate.py +125 -0
- package/vendor/ars/scripts/test__markdown_lint_util.py +129 -0
- package/vendor/ars/scripts/test__next_verified_at_ms.py +256 -0
- package/vendor/ars/scripts/test_adjacent_framing_probe_lint.py +171 -0
- package/vendor/ars/scripts/test_adjudication_activity.py +1515 -0
- package/vendor/ars/scripts/test_ars_anchorize_draft.py +178 -0
- package/vendor/ars/scripts/test_ars_apply_revision_patch.py +1335 -0
- package/vendor/ars/scripts/test_ars_cache_invalidate.py +51 -0
- package/vendor/ars/scripts/test_ars_mark_read.py +910 -0
- package/vendor/ars/scripts/test_ars_update_check.py +816 -0
- package/vendor/ars/scripts/test_ars_write_scope_guard.py +790 -0
- package/vendor/ars/scripts/test_arxiv_client.py +374 -0
- package/vendor/ars/scripts/test_audit_schemas.py +560 -0
- package/vendor/ars/scripts/test_audit_snapshot_render_section_0.py +105 -0
- package/vendor/ars/scripts/test_block_parser.py +259 -0
- package/vendor/ars/scripts/test_bootstrap_timeline_yaml.py +148 -0
- package/vendor/ars/scripts/test_build_claim_standing_candidate_ledger.py +1203 -0
- package/vendor/ars/scripts/test_build_claim_standing_query_plan.py +791 -0
- package/vendor/ars/scripts/test_build_submission_packet_manifest.py +2644 -0
- package/vendor/ars/scripts/test_check_215_field_norm.py +238 -0
- package/vendor/ars/scripts/test_check_216_surface_form.py +341 -0
- package/vendor/ars/scripts/test_check_268_nested_commitment_ledger.py +194 -0
- package/vendor/ars/scripts/test_check_390_revision_patch_discipline.py +279 -0
- package/vendor/ars/scripts/test_check_392_citation_verification_intake.py +144 -0
- package/vendor/ars/scripts/test_check_394_submission_policy.py +200 -0
- package/vendor/ars/scripts/test_check_439_format_profile.py +252 -0
- package/vendor/ars/scripts/test_check_619_disclosure_closeout.py +158 -0
- package/vendor/ars/scripts/test_check_630_codex_subscription_transport.py +245 -0
- package/vendor/ars/scripts/test_check_669_review_pathway_rule_trace.py +304 -0
- package/vendor/ars/scripts/test_check_670_revision_roadmap_integration.py +260 -0
- package/vendor/ars/scripts/test_check_673_adjudication_activity.py +367 -0
- package/vendor/ars/scripts/test_check_684_review_criteria_binding.py +274 -0
- package/vendor/ars/scripts/test_check_agents_mirror_sync.py +137 -0
- package/vendor/ars/scripts/test_check_audit_artifact_consistency.py +2133 -0
- package/vendor/ars/scripts/test_check_benchmark_report.py +117 -0
- package/vendor/ars/scripts/test_check_bibliographic_integrity_signals.py +609 -0
- package/vendor/ars/scripts/test_check_calibration_tiers.py +376 -0
- package/vendor/ars/scripts/test_check_changelog_covers_merges.py +509 -0
- package/vendor/ars/scripts/test_check_ci_pytest_manifest.py +425 -0
- package/vendor/ars/scripts/test_check_claim_standing_candidate_ledger_integration.py +256 -0
- package/vendor/ars/scripts/test_check_claim_standing_freshness.py +277 -0
- package/vendor/ars/scripts/test_check_collaboration_depth_rubric.py +239 -0
- package/vendor/ars/scripts/test_check_command_frontmatter_name.py +178 -0
- package/vendor/ars/scripts/test_check_committee_correspondence.py +298 -0
- package/vendor/ars/scripts/test_check_compliance_report.py +381 -0
- package/vendor/ars/scripts/test_check_content_coverage_advisory_integration.py +308 -0
- package/vendor/ars/scripts/test_check_control_availability.py +361 -0
- package/vendor/ars/scripts/test_check_cross_document_consistency_advisory_integration.py +698 -0
- package/vendor/ars/scripts/test_check_cross_model_handoff_contract.py +301 -0
- package/vendor/ars/scripts/test_check_cross_model_verification_sync.py +203 -0
- package/vendor/ars/scripts/test_check_data_access_level.py +227 -0
- package/vendor/ars/scripts/test_check_data_flows.py +382 -0
- package/vendor/ars/scripts/test_check_decision_contract.py +387 -0
- package/vendor/ars/scripts/test_check_degradation_registry.py +270 -0
- package/vendor/ars/scripts/test_check_distribution_surface_claims.py +225 -0
- package/vendor/ars/scripts/test_check_domain_evidence_profile.py +439 -0
- package/vendor/ars/scripts/test_check_e4_promotion.py +163 -0
- package/vendor/ars/scripts/test_check_evals_gold_set.py +312 -0
- package/vendor/ars/scripts/test_check_evidence_row_integration.py +187 -0
- package/vendor/ars/scripts/test_check_field_norm_severity.py +173 -0
- package/vendor/ars/scripts/test_check_firm_rules_sync.py +342 -0
- package/vendor/ars/scripts/test_check_heldout_measurement_report.py +1508 -0
- package/vendor/ars/scripts/test_check_human_subjects_output_contract.py +129 -0
- package/vendor/ars/scripts/test_check_human_subjects_reference_migration.py +756 -0
- package/vendor/ars/scripts/test_check_instruction_data_boundary.py +204 -0
- package/vendor/ars/scripts/test_check_judge_prompt_version.py +90 -0
- package/vendor/ars/scripts/test_check_model_tiering.py +236 -0
- package/vendor/ars/scripts/test_check_panel_synthesis.py +1658 -0
- package/vendor/ars/scripts/test_check_passport_reset_contract.py +249 -0
- package/vendor/ars/scripts/test_check_pattern_eval_manifest.py +381 -0
- package/vendor/ars/scripts/test_check_persuasion_invariance_fixtures.py +591 -0
- package/vendor/ars/scripts/test_check_phase_conformance.py +4366 -0
- package/vendor/ars/scripts/test_check_pipeline_boundary_semantics.py +931 -0
- package/vendor/ars/scripts/test_check_pipeline_integrity.py +243 -0
- package/vendor/ars/scripts/test_check_policy_anchor_protocol.py +236 -0
- package/vendor/ars/scripts/test_check_policy_anchor_table.py +295 -0
- package/vendor/ars/scripts/test_check_prisma_trAIce_freshness.py +68 -0
- package/vendor/ars/scripts/test_check_promotion_bakeoff_preregistration.py +799 -0
- package/vendor/ars/scripts/test_check_ranking_lift.py +377 -0
- package/vendor/ars/scripts/test_check_re_review_synthesis.py +3398 -0
- package/vendor/ars/scripts/test_check_receipt_enum_sync.py +176 -0
- package/vendor/ars/scripts/test_check_repro_lock.py +107 -0
- package/vendor/ars/scripts/test_check_reviewer_data_fences.py +334 -0
- package/vendor/ars/scripts/test_check_reviewer_finding_contract.py +1107 -0
- package/vendor/ars/scripts/test_check_reviewer_role_label.py +491 -0
- package/vendor/ars/scripts/test_check_reviewer_scoring_honesty.py +222 -0
- package/vendor/ars/scripts/test_check_reviewer_sprint_prompt_sync.py +373 -0
- package/vendor/ars/scripts/test_check_revision_claim_drift_suite_v2.py +1925 -0
- package/vendor/ars/scripts/test_check_revision_token_conservation.py +398 -0
- package/vendor/ars/scripts/test_check_risk_register.py +336 -0
- package/vendor/ars/scripts/test_check_role_scoped_contract.py +1104 -0
- package/vendor/ars/scripts/test_check_rq_framing_patterns.py +110 -0
- package/vendor/ars/scripts/test_check_rubric_weight_consistency.py +32 -0
- package/vendor/ars/scripts/test_check_seeded_defect_fixtures.py +392 -0
- package/vendor/ars/scripts/test_check_setup_cross_model_parity.py +121 -0
- package/vendor/ars/scripts/test_check_spec_consistency.py +1081 -0
- package/vendor/ars/scripts/test_check_sprint_contract.py +458 -0
- package/vendor/ars/scripts/test_check_stage_capability_matrix.py +698 -0
- package/vendor/ars/scripts/test_check_submission_packet_manifest_integration.py +177 -0
- package/vendor/ars/scripts/test_check_surface_form_parity.py +417 -0
- package/vendor/ars/scripts/test_check_task_type.py +116 -0
- package/vendor/ars/scripts/test_check_tools_allowlist.py +835 -0
- package/vendor/ars/scripts/test_check_tortured_phrase_screening_integration.py +1306 -0
- package/vendor/ars/scripts/test_check_v3_10_134_write_scope.py +251 -0
- package/vendor/ars/scripts/test_check_v3_10_policy.py +547 -0
- package/vendor/ars/scripts/test_check_v3_6_7_pattern_protection.py +960 -0
- package/vendor/ars/scripts/test_check_v3_6_8_audit_scope_block.py +1000 -0
- package/vendor/ars/scripts/test_check_v3_6_8_cite_provenance_pipeline.py +454 -0
- package/vendor/ars/scripts/test_check_v3_6_8_frontmatter_trust_schema.py +581 -0
- package/vendor/ars/scripts/test_check_v3_6_8_mark_read_commands.py +120 -0
- package/vendor/ars/scripts/test_check_v3_6_8_pattern_protection.py +1138 -0
- package/vendor/ars/scripts/test_check_v3_7_3_three_layer_citation.py +566 -0
- package/vendor/ars/scripts/test_check_v3_8_annotation_literal_sync.py +262 -0
- package/vendor/ars/scripts/test_check_v3_9_0_triangulation.py +321 -0
- package/vendor/ars/scripts/test_check_v3_9_2_phase_boundary.py +190 -0
- package/vendor/ars/scripts/test_check_v3_9_4_temporal_verification.py +471 -0
- package/vendor/ars/scripts/test_check_version_consistency.py +1462 -0
- package/vendor/ars/scripts/test_check_workflow_classification.py +225 -0
- package/vendor/ars/scripts/test_chinese_literature_client.py +1889 -0
- package/vendor/ars/scripts/test_citation_existence_policy.py +480 -0
- package/vendor/ars/scripts/test_citation_verification_summary.py +342 -0
- package/vendor/ars/scripts/test_claim_audit_calibration.py +882 -0
- package/vendor/ars/scripts/test_claim_audit_finalizer.py +979 -0
- package/vendor/ars/scripts/test_claim_audit_pipeline.py +2398 -0
- package/vendor/ars/scripts/test_claim_audit_schema.py +1778 -0
- package/vendor/ars/scripts/test_claim_intent_manifest.py +666 -0
- package/vendor/ars/scripts/test_claim_registry_coverage.py +246 -0
- package/vendor/ars/scripts/test_claim_standing_discovery.py +579 -0
- package/vendor/ars/scripts/test_claim_standing_pipeline_wiring.py +290 -0
- package/vendor/ars/scripts/test_claim_standing_stance_assets.py +399 -0
- package/vendor/ars/scripts/test_claim_standing_stance_contracts.py +383 -0
- package/vendor/ars/scripts/test_claim_standing_stance_runner.py +349 -0
- package/vendor/ars/scripts/test_claim_standing_transmissions.py +605 -0
- package/vendor/ars/scripts/test_claim_strength_drift_disposition.py +517 -0
- package/vendor/ars/scripts/test_claim_verification_coverage_contract.py +104 -0
- package/vendor/ars/scripts/test_contamination_signals.py +1086 -0
- package/vendor/ars/scripts/test_content_coverage_advisory.py +1767 -0
- package/vendor/ars/scripts/test_cross_document_consistency_advisory.py +1270 -0
- package/vendor/ars/scripts/test_cross_model_codex_transport.py +1152 -0
- package/vendor/ars/scripts/test_cross_model_handoff.py +571 -0
- package/vendor/ars/scripts/test_cross_model_verification_guards.py +792 -0
- package/vendor/ars/scripts/test_crossref_client.py +393 -0
- package/vendor/ars/scripts/test_dispatch_e4_panel.py +4235 -0
- package/vendor/ars/scripts/test_e2e_claim_audit.py +540 -0
- package/vendor/ars/scripts/test_eval_harness_workflow.py +140 -0
- package/vendor/ars/scripts/test_evals_citation_extraction.py +150 -0
- package/vendor/ars/scripts/test_evals_lift_report_schema.py +108 -0
- package/vendor/ars/scripts/test_evidence_rows.py +2593 -0
- package/vendor/ars/scripts/test_experiment_provenance.py +915 -0
- package/vendor/ars/scripts/test_human_read_attestation_resolver.py +477 -0
- package/vendor/ars/scripts/test_ideation_diversity_assignment_gate.py +615 -0
- package/vendor/ars/scripts/test_indirect_prompt_injection_behavior_probe.py +250 -0
- package/vendor/ars/scripts/test_inquiry_branch_ledger.py +2296 -0
- package/vendor/ars/scripts/test_migrate_literature_corpus_to_v3_10.py +248 -0
- package/vendor/ars/scripts/test_migrate_literature_corpus_to_v3_7_3.py +545 -0
- package/vendor/ars/scripts/test_migrate_literature_corpus_to_v3_9_0.py +497 -0
- package/vendor/ars/scripts/test_normalize_compat_verdict.py +149 -0
- package/vendor/ars/scripts/test_openalex_client.py +490 -0
- package/vendor/ars/scripts/test_passport_yaml.py +104 -0
- package/vendor/ars/scripts/test_pattern_eval_runtime.py +1295 -0
- package/vendor/ars/scripts/test_pdf_read_preflight.py +1943 -0
- package/vendor/ars/scripts/test_policy_anchor_disclosure.py +666 -0
- package/vendor/ars/scripts/test_reading_probe_lint.py +218 -0
- package/vendor/ars/scripts/test_recompute_receipts.py +778 -0
- package/vendor/ars/scripts/test_render_claim_standing_view.py +192 -0
- package/vendor/ars/scripts/test_render_eval_comment.py +162 -0
- package/vendor/ars/scripts/test_render_harness_retirement_issue.py +110 -0
- package/vendor/ars/scripts/test_repro_lock_validation_drift.py +100 -0
- package/vendor/ars/scripts/test_research_workflow_profile.py +734 -0
- package/vendor/ars/scripts/test_resolve_human_subjects_authority.py +1219 -0
- package/vendor/ars/scripts/test_resolve_review_target_context.py +703 -0
- package/vendor/ars/scripts/test_resume_e4_record.py +315 -0
- package/vendor/ars/scripts/test_retraction_status.py +456 -0
- package/vendor/ars/scripts/test_review_criteria_binding.py +629 -0
- package/vendor/ars/scripts/test_review_panel_provenance.py +565 -0
- package/vendor/ars/scripts/test_review_pathway_rule_trace.py +821 -0
- package/vendor/ars/scripts/test_revision_roadmap.py +1255 -0
- package/vendor/ars/scripts/test_run_ci_pytest_manifest.py +186 -0
- package/vendor/ars/scripts/test_run_codex_audit_e2e.py +369 -0
- package/vendor/ars/scripts/test_run_evals.py +430 -0
- package/vendor/ars/scripts/test_run_guard_launcher.py +500 -0
- package/vendor/ars/scripts/test_run_ideation_diversity_no_call.py +1833 -0
- package/vendor/ars/scripts/test_run_indirect_prompt_injection_no_call.py +1889 -0
- package/vendor/ars/scripts/test_run_review_criteria_constructive_value.py +586 -0
- package/vendor/ars/scripts/test_run_role_topology_utility_dry_run.py +428 -0
- package/vendor/ars/scripts/test_score_review_criteria_constructive_value.py +340 -0
- package/vendor/ars/scripts/test_semantic_scholar_client.py +554 -0
- package/vendor/ars/scripts/test_slr_lineage_emission.py +230 -0
- package/vendor/ars/scripts/test_socratic_rq_non_generation_contract.py +173 -0
- package/vendor/ars/scripts/test_temporal_integrity_audit.py +438 -0
- package/vendor/ars/scripts/test_text_similarity.py +95 -0
- package/vendor/ars/scripts/test_title_fuzzy_false_positive.py +111 -0
- package/vendor/ars/scripts/test_tortured_phrase_screening.py +2959 -0
- package/vendor/ars/scripts/test_transport_fixture_citation_gate.py +338 -0
- package/vendor/ars/scripts/test_uncited_assertion.py +558 -0
- package/vendor/ars/scripts/test_v3_6_7_phase_6_6.py +1279 -0
- package/vendor/ars/scripts/test_validate_compliance_fixtures.py +36 -0
- package/vendor/ars/scripts/test_validate_ideation_diversity_assets.py +230 -0
- package/vendor/ars/scripts/test_venue_disclosure_contract.py +755 -0
- package/vendor/ars/scripts/test_verification_cache.py +280 -0
- package/vendor/ars/scripts/test_verification_gate.py +461 -0
- package/vendor/ars/scripts/test_verify_passport_cli.py +123 -0
- package/vendor/ars/scripts/test_verify_submission_package.py +1407 -0
- package/vendor/ars/scripts/test_version_records_schema.py +211 -0
- package/vendor/ars/scripts/tortured_phrase_screening.py +3502 -0
- package/vendor/ars/scripts/uncited_assertion_detector.py +254 -0
- package/vendor/ars/scripts/v3_6_7_inversion_manifest.json +9 -0
- package/vendor/ars/scripts/v3_6_8_inversion_manifest.json +10 -0
- package/vendor/ars/scripts/validate_claim_standing_stance_assets.py +249 -0
- package/vendor/ars/scripts/validate_compliance_fixtures.py +56 -0
- package/vendor/ars/scripts/validate_ideation_diversity_assets.py +303 -0
- package/vendor/ars/scripts/venue_disclosure_contract_harness.py +837 -0
- package/vendor/ars/scripts/verification_cache.py +276 -0
- package/vendor/ars/scripts/verification_gate/__init__.py +345 -0
- package/vendor/ars/scripts/verify_passport.py +133 -0
- package/vendor/ars/scripts/verify_submission_package.py +1657 -0
- package/vendor/ars/shared/agents/compliance_agent.md +136 -0
- package/vendor/ars/shared/artifact_reproducibility_pattern.md +173 -0
- package/vendor/ars/shared/benchmark_report.schema.json +81 -0
- package/vendor/ars/shared/benchmark_report_pattern.md +180 -0
- package/vendor/ars/shared/bibliographic_integrity_signals.md +142 -0
- package/vendor/ars/shared/collaboration_depth_rubric.md +154 -0
- package/vendor/ars/shared/compliance_checkpoint_protocol.md +162 -0
- package/vendor/ars/shared/compliance_report.schema.json +187 -0
- package/vendor/ars/shared/contracts/README.md +938 -0
- package/vendor/ars/shared/contracts/activity/adjudication_activity_input.schema.json +555 -0
- package/vendor/ars/shared/contracts/activity/adjudication_activity_store.schema.json +560 -0
- package/vendor/ars/shared/contracts/audit/audit_jsonl.schema.json +128 -0
- package/vendor/ars/shared/contracts/audit/audit_sidecar.schema.json +169 -0
- package/vendor/ars/shared/contracts/audit/audit_verdict.schema.json +133 -0
- package/vendor/ars/shared/contracts/audit/cross_document_consistency_advisory.schema.json +480 -0
- package/vendor/ars/shared/contracts/audit/cross_document_consistency_advisory_draft.schema.json +564 -0
- package/vendor/ars/shared/contracts/audit/cross_document_source_manifest.schema.json +202 -0
- package/vendor/ars/shared/contracts/audit/tortured_phrase_advisory.schema.json +1362 -0
- package/vendor/ars/shared/contracts/audit/tortured_phrase_snapshot.schema.json +208 -0
- package/vendor/ars/shared/contracts/audit/tortured_phrase_snapshot_manifest.schema.json +335 -0
- package/vendor/ars/shared/contracts/capability/stage_capability_matrix.json +434 -0
- package/vendor/ars/shared/contracts/claim_standing/candidate_ledger.schema.json +705 -0
- package/vendor/ars/shared/contracts/claim_standing/query_plan.schema.json +389 -0
- package/vendor/ars/shared/contracts/claim_standing/query_plan_v1_1.schema.json +782 -0
- package/vendor/ars/shared/contracts/claim_standing/retrieval_input.schema.json +440 -0
- package/vendor/ars/shared/contracts/claim_standing/stance_record.schema.json +460 -0
- package/vendor/ars/shared/contracts/claim_standing/transmission_ledger.schema.json +282 -0
- package/vendor/ars/shared/contracts/cross_model/codex_citation_receipt.schema.json +157 -0
- package/vendor/ars/shared/contracts/cross_model/codex_citation_request.schema.json +23 -0
- package/vendor/ars/shared/contracts/cross_model/promotion_bakeoff_sealed_commitment.schema.json +55 -0
- package/vendor/ars/shared/contracts/cross_model/promotion_bakeoff_sealed_reveal.schema.json +50 -0
- package/vendor/ars/shared/contracts/degradation_registry.json +428 -0
- package/vendor/ars/shared/contracts/evaluator/full.json +126 -0
- package/vendor/ars/shared/contracts/evidence/claim_registry.schema.json +50 -0
- package/vendor/ars/shared/contracts/evidence/claim_registry_coverage_report.schema.json +79 -0
- package/vendor/ars/shared/contracts/evidence/evidence_row.schema.json +504 -0
- package/vendor/ars/shared/contracts/evidence/evidence_row_v1_1.schema.json +364 -0
- package/vendor/ars/shared/contracts/evidence/evidence_row_v1_2.schema.json +714 -0
- package/vendor/ars/shared/contracts/evidence/evidence_row_v1_3.schema.json +524 -0
- package/vendor/ars/shared/contracts/human_subjects/authority_profile_registry.schema.json +497 -0
- package/vendor/ars/shared/contracts/human_subjects/committee_correspondence.schema.json +253 -0
- package/vendor/ars/shared/contracts/human_subjects/content_coverage_advisory.schema.json +620 -0
- package/vendor/ars/shared/contracts/human_subjects/irb_context_record.schema.json +329 -0
- package/vendor/ars/shared/contracts/human_subjects/resolved_authority_context.schema.json +347 -0
- package/vendor/ars/shared/contracts/human_subjects/review_pathway_rule_trace.schema.json +265 -0
- package/vendor/ars/shared/contracts/human_subjects/review_pathway_trace_request.schema.json +127 -0
- package/vendor/ars/shared/contracts/human_subjects/submission_packet_inventory.schema.json +240 -0
- package/vendor/ars/shared/contracts/human_subjects/submission_packet_manifest.schema.json +999 -0
- package/vendor/ars/shared/contracts/passport/audit_artifact_entry.schema.json +266 -0
- package/vendor/ars/shared/contracts/passport/bibliographic_integrity_signal.schema.json +1676 -0
- package/vendor/ars/shared/contracts/passport/citation_provenance.schema.json +107 -0
- package/vendor/ars/shared/contracts/passport/citation_verification_summary.schema.json +164 -0
- package/vendor/ars/shared/contracts/passport/claim_audit_result.schema.json +124 -0
- package/vendor/ars/shared/contracts/passport/claim_drift.schema.json +58 -0
- package/vendor/ars/shared/contracts/passport/claim_intent_manifest.schema.json +107 -0
- package/vendor/ars/shared/contracts/passport/constraint_violation.schema.json +65 -0
- package/vendor/ars/shared/contracts/passport/experiment_alignment_result.schema.json +69 -0
- package/vendor/ars/shared/contracts/passport/experiment_provenance_entry.schema.json +169 -0
- package/vendor/ars/shared/contracts/passport/human_read_log.schema.json +86 -0
- package/vendor/ars/shared/contracts/passport/inquiry_ledger_ref.schema.json +22 -0
- package/vendor/ars/shared/contracts/passport/literature_corpus_entry.schema.json +650 -0
- package/vendor/ars/shared/contracts/passport/preregistration_artifact.schema.json +132 -0
- package/vendor/ars/shared/contracts/passport/rejection_log.schema.json +89 -0
- package/vendor/ars/shared/contracts/passport/reset_ledger_entry.schema.json +158 -0
- package/vendor/ars/shared/contracts/passport/temporal_audit_results.schema.json +208 -0
- package/vendor/ars/shared/contracts/passport/terminal_policies.schema.json +50 -0
- package/vendor/ars/shared/contracts/passport/timeline.schema.json +102 -0
- package/vendor/ars/shared/contracts/passport/uncited_assertion.schema.json +56 -0
- package/vendor/ars/shared/contracts/passport/uncited_audit_failure.schema.json +72 -0
- package/vendor/ars/shared/contracts/passport/user_attested_read_resolution.schema.json +87 -0
- package/vendor/ars/shared/contracts/passport/version_records.schema.json +138 -0
- package/vendor/ars/shared/contracts/patch/block_manifest.schema.json +45 -0
- package/vendor/ars/shared/contracts/patch/legacy/v1_0/revision_patch.schema.json +110 -0
- package/vendor/ars/shared/contracts/patch/revision_patch.schema.json +250 -0
- package/vendor/ars/shared/contracts/pdf/pdf_content_classifier_diagnostic.schema.json +39 -0
- package/vendor/ars/shared/contracts/pdf/pdf_content_classifier_worker.schema.json +88 -0
- package/vendor/ars/shared/contracts/pdf/pdf_read_preflight.schema.json +227 -0
- package/vendor/ars/shared/contracts/re_review/input_manifest.schema.json +161 -0
- package/vendor/ars/shared/contracts/re_review/legacy/v1_0/input_manifest.schema.json +134 -0
- package/vendor/ars/shared/contracts/re_review/legacy/v1_0/precommitment.schema.json +193 -0
- package/vendor/ars/shared/contracts/re_review/legacy/v1_0/traceability.schema.json +841 -0
- package/vendor/ars/shared/contracts/re_review/legacy/v1_0/verdict_record.schema.json +244 -0
- package/vendor/ars/shared/contracts/re_review/precommitment.schema.json +193 -0
- package/vendor/ars/shared/contracts/re_review/traceability.schema.json +916 -0
- package/vendor/ars/shared/contracts/re_review/verdict_record.schema.json +245 -0
- package/vendor/ars/shared/contracts/research_workflow/inquiry_branch_ledger.schema.json +449 -0
- package/vendor/ars/shared/contracts/research_workflow/research_workflow_profile.schema.json +222 -0
- package/vendor/ars/shared/contracts/research_workflow/research_workflow_profile_selection_receipt.schema.json +111 -0
- package/vendor/ars/shared/contracts/review_target/constructive_review_findings.schema.json +172 -0
- package/vendor/ars/shared/contracts/review_target/criteria_registry.schema.json +97 -0
- package/vendor/ars/shared/contracts/review_target/review_criteria_binding_manifest.schema.json +235 -0
- package/vendor/ars/shared/contracts/review_target/review_criteria_source_receipt.schema.json +158 -0
- package/vendor/ars/shared/contracts/review_target/review_target_context.schema.json +106 -0
- package/vendor/ars/shared/contracts/review_target/review_target_declaration.schema.json +118 -0
- package/vendor/ars/shared/contracts/reviewer/full.json +114 -0
- package/vendor/ars/shared/contracts/reviewer/methodology_focus.json +75 -0
- package/vendor/ars/shared/contracts/reviewer/review_panel_provenance.schema.json +263 -0
- package/vendor/ars/shared/contracts/reviewer/review_panel_provenance_carrier.schema.json +122 -0
- package/vendor/ars/shared/contracts/reviewer/review_panel_provenance_input.schema.json +120 -0
- package/vendor/ars/shared/contracts/revision/author_adjudication.schema.json +251 -0
- package/vendor/ars/shared/contracts/revision/author_adjudication_input.schema.json +25 -0
- package/vendor/ars/shared/contracts/revision/claim_strength_drift_disposition.schema.json +97 -0
- package/vendor/ars/shared/contracts/revision/claim_strength_drift_disposition_input.schema.json +80 -0
- package/vendor/ars/shared/contracts/revision/claim_strength_drift_findings.schema.json +139 -0
- package/vendor/ars/shared/contracts/revision/claim_surface_manifest.schema.json +99 -0
- package/vendor/ars/shared/contracts/revision/integrity_correction_authorization.schema.json +140 -0
- package/vendor/ars/shared/contracts/revision/integrity_correction_authorization_input.schema.json +28 -0
- package/vendor/ars/shared/contracts/revision/integrity_correction_list.schema.json +48 -0
- package/vendor/ars/shared/contracts/revision/integrity_pass_receipt.schema.json +16 -0
- package/vendor/ars/shared/contracts/revision/revision_evidence_bundle.schema.json +134 -0
- package/vendor/ars/shared/contracts/revision/revision_roadmap.schema.json +334 -0
- package/vendor/ars/shared/contracts/submission/format_profile.example.yaml +33 -0
- package/vendor/ars/shared/contracts/submission/format_profile.schema.json +102 -0
- package/vendor/ars/shared/contracts/submission/submission_verification_report.schema.json +233 -0
- package/vendor/ars/shared/contracts/submission/venue_profile.schema.json +114 -0
- package/vendor/ars/shared/contracts/writer/full.json +87 -0
- package/vendor/ars/shared/cross_model_verification.md +714 -0
- package/vendor/ars/shared/evals_lift_report.schema.json +141 -0
- package/vendor/ars/shared/ground_truth_isolation_pattern.md +275 -0
- package/vendor/ars/shared/handoff_schemas.md +1209 -0
- package/vendor/ars/shared/human_subjects_authority_registry.json +1278 -0
- package/vendor/ars/shared/mode_spectrum.md +57 -0
- package/vendor/ars/shared/model_tiering.md +83 -0
- package/vendor/ars/shared/policy_data/nature_policy.md +56 -0
- package/vendor/ars/shared/prisma_trAIce_protocol.md +157 -0
- package/vendor/ars/shared/raise_framework.md +129 -0
- package/vendor/ars/shared/references/authority_content_coverage_advisory_protocol.md +275 -0
- package/vendor/ars/shared/references/claim_standing_candidate_ledger_protocol.md +66 -0
- package/vendor/ars/shared/references/claim_strength_ladder.md +93 -0
- package/vendor/ars/shared/references/cross_document_consistency_advisory_protocol.md +263 -0
- package/vendor/ars/shared/references/evidence_row_protocol.md +260 -0
- package/vendor/ars/shared/references/firm_rules.md +90 -0
- package/vendor/ars/shared/references/human_subjects_authority_protocol.md +274 -0
- package/vendor/ars/shared/references/intent_clarification_protocol.md +168 -0
- package/vendor/ars/shared/references/irb_terminology_glossary.md +229 -0
- package/vendor/ars/shared/references/protected_hedging_phrases.md +118 -0
- package/vendor/ars/shared/references/psychometric_terminology_glossary.md +109 -0
- package/vendor/ars/shared/references/review_criteria_consumer_protocol.md +238 -0
- package/vendor/ars/shared/references/review_pathway_rule_trace_protocol.md +166 -0
- package/vendor/ars/shared/references/submission_packet_manifest_protocol.md +292 -0
- package/vendor/ars/shared/references/word_count_conventions.md +124 -0
- package/vendor/ars/shared/research_workflow_profiles/field_general.json +1 -0
- package/vendor/ars/shared/review_criteria_registry.json +207 -0
- package/vendor/ars/shared/review_criteria_sources/msr-2027-technical-papers.2026-08-24.json +46 -0
- package/vendor/ars/shared/review_criteria_sources/sigsoft-empirical-standards.2026-08-24.json +31 -0
- package/vendor/ars/shared/sprint_contract.schema.json +482 -0
- package/vendor/ars/shared/style_calibration_protocol.md +151 -0
- package/vendor/ars/shared/templates/codex_audit_multifile_template.md +263 -0
- package/vendor/ars/tools/release-discipline/.toolkit-version +1 -0
- package/vendor/ars/tools/release-discipline/README.md +4 -0
- package/vendor/ars/tools/release-discipline/scripts/_release_doc_alignment_schema.py +1011 -0
- package/vendor/ars/tools/release-discipline/scripts/check_command_invariants.py +497 -0
- package/vendor/ars/tools/release-discipline/scripts/check_release_doc_alignment.py +263 -0
- package/vendor/ars/tools/release-discipline/scripts/sync-toolkit.sh +147 -0
- package/vendor/windows/NOTICE.md +12 -0
- package/vendor/windows/arm64/fd.exe +0 -0
- package/vendor/windows/arm64/licenses/fd/LICENSE-APACHE +201 -0
- package/vendor/windows/arm64/licenses/fd/LICENSE-MIT +21 -0
- package/vendor/windows/arm64/licenses/ripgrep/COPYING +3 -0
- package/vendor/windows/arm64/licenses/ripgrep/LICENSE-MIT +21 -0
- package/vendor/windows/arm64/licenses/ripgrep/UNLICENSE +24 -0
- package/vendor/windows/arm64/rg.exe +0 -0
- package/vendor/windows/x64/fd.exe +0 -0
- package/vendor/windows/x64/licenses/fd/LICENSE-APACHE +201 -0
- package/vendor/windows/x64/licenses/fd/LICENSE-MIT +21 -0
- package/vendor/windows/x64/licenses/ripgrep/COPYING +3 -0
- package/vendor/windows/x64/licenses/ripgrep/LICENSE-MIT +21 -0
- package/vendor/windows/x64/licenses/ripgrep/UNLICENSE +24 -0
- 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()
|