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,783 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""Reviewer finding-contract lint (#574 behavior batch: A1/A2/A3/B1).
|
|
3
|
+
|
|
4
|
+
Pins the behavior batch's prompt surfaces so the drift classes it retired
|
|
5
|
+
cannot silently return:
|
|
6
|
+
|
|
7
|
+
- A1 — finding quotas removed + Coverage Receipt: the four scoring agents and
|
|
8
|
+
the peer-review template carry NO `(3-5 items)` / `List 3-5` quotas, carry
|
|
9
|
+
the canonical `## Finding Contract` block verbatim, and carry the Coverage
|
|
10
|
+
Receipt surface (zero findings requires a receipt, not silence).
|
|
11
|
+
- A2 — typed evidence anchors: the template owns the six-type anchor
|
|
12
|
+
vocabulary + the Critical/Major MUST-anchor rule; the DA tables carry the
|
|
13
|
+
`Evidence Anchor` column; the skill's Specificity standard is anchor-typed.
|
|
14
|
+
- A3 — severity single source + transport: Schema 6 carries the canonical
|
|
15
|
+
enum sentence + the optional `evidence_anchor` / `confidence` /
|
|
16
|
+
`competence_basis` fields; the synthesizer transports (never re-derives)
|
|
17
|
+
severity/confidence with visible fallback tags; the decision standards use
|
|
18
|
+
no parallel severity scale.
|
|
19
|
+
- B1 — register/severity separation + no base-rate anchoring: the decision
|
|
20
|
+
standards carry the Decision Symmetry section; the EIC and synthesizer
|
|
21
|
+
carry no acceptance-rate/base-rate anchors.
|
|
22
|
+
|
|
23
|
+
COMMIT-TIME text pin only (witnesses are hardcoded literals per the repo's
|
|
24
|
+
defrift-lock discipline); it does not measure runtime reviewer behavior — that
|
|
25
|
+
is the E4 seeded-defect held-out set's job. Companion mutation test:
|
|
26
|
+
test_check_reviewer_finding_contract.py.
|
|
27
|
+
|
|
28
|
+
Threat model: ACCIDENTAL drift by well-intentioned edits — deletions,
|
|
29
|
+
rewordings, relocations, renames, and ordinary quota re-spellings. An
|
|
30
|
+
adversarial repo editor is explicitly out of scope: anyone who can craft a
|
|
31
|
+
pathological decoy in these files can equally edit this lint, so the terminal
|
|
32
|
+
defense for that class is human review of lint-file diffs, not ever-deeper
|
|
33
|
+
witness scoping.
|
|
34
|
+
|
|
35
|
+
Usage:
|
|
36
|
+
python scripts/check_reviewer_finding_contract.py
|
|
37
|
+
python scripts/check_reviewer_finding_contract.py --root PATH (for fixtures)
|
|
38
|
+
|
|
39
|
+
Exit codes: 0 pass / 1 fail / 2 invocation error (missing file).
|
|
40
|
+
"""
|
|
41
|
+
from __future__ import annotations
|
|
42
|
+
|
|
43
|
+
import argparse
|
|
44
|
+
import re
|
|
45
|
+
import sys
|
|
46
|
+
from pathlib import Path
|
|
47
|
+
|
|
48
|
+
from _skill_lint import heading_section, norm_ws as _norm, read_or_exit2
|
|
49
|
+
|
|
50
|
+
REPO_ROOT = Path(__file__).resolve().parents[1]
|
|
51
|
+
|
|
52
|
+
SCORING_AGENTS = (
|
|
53
|
+
"academic-paper-reviewer/agents/eic_agent.md",
|
|
54
|
+
"academic-paper-reviewer/agents/methodology_reviewer_agent.md",
|
|
55
|
+
"academic-paper-reviewer/agents/domain_reviewer_agent.md",
|
|
56
|
+
"academic-paper-reviewer/agents/perspective_reviewer_agent.md",
|
|
57
|
+
)
|
|
58
|
+
DA_REL = "academic-paper-reviewer/agents/devils_advocate_reviewer_agent.md"
|
|
59
|
+
SYNTH_REL = "academic-paper-reviewer/agents/editorial_synthesizer_agent.md"
|
|
60
|
+
TEMPLATE_REL = "academic-paper-reviewer/templates/peer_review_report_template.md"
|
|
61
|
+
DECISION_TEMPLATE_REL = "academic-paper-reviewer/templates/editorial_decision_template.md"
|
|
62
|
+
STANDARDS_REL = "academic-paper-reviewer/references/editorial_decision_standards.md"
|
|
63
|
+
SKILL_REL = "academic-paper-reviewer/SKILL.md"
|
|
64
|
+
SCHEMAS_REL = "shared/handoff_schemas.md"
|
|
65
|
+
CALIBRATION_REL = "academic-paper-reviewer/references/calibration_mode_protocol.md"
|
|
66
|
+
GUIDED_REL = "academic-paper-reviewer/references/guided_mode_protocol.md"
|
|
67
|
+
RQT_REL = "academic-paper-reviewer/references/review_quality_thinking.md"
|
|
68
|
+
RESPONSE_TEMPLATE_REL = "academic-paper-reviewer/templates/revision_response_template.md"
|
|
69
|
+
STATS_REL = "academic-paper-reviewer/references/statistical_reporting_standards.md"
|
|
70
|
+
RCF_REL = "academic-paper-reviewer/references/review_criteria_framework.md"
|
|
71
|
+
XM_REL = "shared/cross_model_verification.md"
|
|
72
|
+
FIELD_ANALYST_REL = "academic-paper-reviewer/agents/field_analyst_agent.md"
|
|
73
|
+
|
|
74
|
+
# The canonical Finding Contract block — byte-identical across the four scoring
|
|
75
|
+
# agents, and located INSIDE the delivered Phase 2 subsection (sprint runs
|
|
76
|
+
# inject ONLY that subsection as the system prompt, so a contract placed
|
|
77
|
+
# anywhere else is never delivered — codex round-2 P1). The lint OWNS this
|
|
78
|
+
# string.
|
|
79
|
+
SPRINT_HEADING = "## v3.6.2 Sprint Contract Protocol"
|
|
80
|
+
PHASE2_HEADING = "### Phase 2 — Paper-visible review"
|
|
81
|
+
FINDING_CONTRACT_HEADING = (
|
|
82
|
+
"**Finding Contract (#574 A1/A2/A3)** — governs every finding you report "
|
|
83
|
+
"in `## Review Body` here, and the standard-mode report (§ Output Format "
|
|
84
|
+
"below) alike:"
|
|
85
|
+
)
|
|
86
|
+
FINDING_CONTRACT_BODY = (
|
|
87
|
+
"- List every strength and weakness you actually found — no minimum, no "
|
|
88
|
+
"maximum. Do not manufacture findings to fill a quota; do not omit real "
|
|
89
|
+
"ones to seem agreeable.\n"
|
|
90
|
+
"- Every strength carries a typed Evidence Anchor too (the same six-type "
|
|
91
|
+
"vocabulary; a section-level locator suffices for a strength, and a "
|
|
92
|
+
"`text` anchor still carries its short verbatim quote — the Schema 6 "
|
|
93
|
+
"conditional member applies to both polarities) — A2's every-finding "
|
|
94
|
+
"rule covers strengths and weaknesses alike.\n"
|
|
95
|
+
"- If either list is empty, you MUST emit a `### Coverage Receipt` "
|
|
96
|
+
"section: state which polarity it covers (Strengths / Weaknesses / "
|
|
97
|
+
"both), then one row per review dimension you examined (your Detailed "
|
|
98
|
+
"Comments sub-sections in standard mode; the contract's "
|
|
99
|
+
"`acceptance_dimensions` under a sprint contract), with what you checked "
|
|
100
|
+
"and the basis for finding nothing of that polarity. An empty finding "
|
|
101
|
+
"list without its receipt is invalid.\n"
|
|
102
|
+
"- Every weakness carries three fields "
|
|
103
|
+
"(`templates/peer_review_report_template.md` § Evidence Anchor Types + "
|
|
104
|
+
"§ Severity Levels):\n"
|
|
105
|
+
" - **Severity**: Critical / Major / Minor — the Schema 6 enum, set by "
|
|
106
|
+
"decision impact alone; register never lowers it, rigor-signaling never "
|
|
107
|
+
"raises it (#574 B1).\n"
|
|
108
|
+
" - **Evidence Anchor**: one typed anchor (`text` / `table` / `figure` "
|
|
109
|
+
"/ `equation` / `dataset` / `absence`). REQUIRED with an adequate, "
|
|
110
|
+
"applicable type for Critical/Major; an `absence` anchor names the "
|
|
111
|
+
"surfaces you checked.\n"
|
|
112
|
+
" - **Confidence**: 1-5 plus a one-phrase competence basis."
|
|
113
|
+
)
|
|
114
|
+
|
|
115
|
+
# The DA's delivered Phase 2 contract — pinned verbatim (round-7 P1).
|
|
116
|
+
DA_FINDING_CONTRACT = (
|
|
117
|
+
"**Finding Contract (#574 A2/A3)** — governs every issue you report in "
|
|
118
|
+
"`## Review Body` here, and the standard-mode Issue List (§ Output Format "
|
|
119
|
+
"below) alike: every issue carries a typed evidence anchor (`text` / "
|
|
120
|
+
"`table` / `figure` / `equation` / `dataset` / `absence`; CRITICAL/MAJOR "
|
|
121
|
+
"require an adequate, applicable one, and an `absence` anchor names the "
|
|
122
|
+
"surfaces you checked), every issue carries a Confidence (1-5 "
|
|
123
|
+
"plus a one-phrase competence basis), and severity is assigned by "
|
|
124
|
+
"decision impact alone — adversarial register never inflates a band, and "
|
|
125
|
+
"the same defect class with the same decision impact lands in the same "
|
|
126
|
+
"band on every seat (#574 B1)."
|
|
127
|
+
)
|
|
128
|
+
|
|
129
|
+
BAND_ANCHORS = (
|
|
130
|
+
"- **Band anchors (per finding, never distributional targets):** Critical "
|
|
131
|
+
"means this single defect, uncorrected, invalidates the core claim or makes "
|
|
132
|
+
"acceptance impossible; it alone would justify `block` on a mandatory "
|
|
133
|
+
"dimension. Major materially weakens a core claim and requires substantial "
|
|
134
|
+
"re-analysis, rewriting, or new data, while the core survives. Minor "
|
|
135
|
+
"improves quality or clarity without changing core claims.\n"
|
|
136
|
+
"- **Anti-bundling:** assign each finding the band justified by its own "
|
|
137
|
+
"decision impact; it never inherits a cluster or narrative's band. Joint "
|
|
138
|
+
"impact belongs in the dimension score and synthesis.\n"
|
|
139
|
+
"- **Singleton-Critical:** if a defect needs sibling findings to reach "
|
|
140
|
+
"rejection-level impact, it is not Critical alone. These tests "
|
|
141
|
+
"operationalize severity-by-decision-impact and never prescribe expected "
|
|
142
|
+
"band frequencies."
|
|
143
|
+
)
|
|
144
|
+
TEMPLATE_BAND_WITNESS = (
|
|
145
|
+
"Apply the test to each finding independently, never to its surrounding "
|
|
146
|
+
"narrative or defect cluster. A finding never inherits a higher band from "
|
|
147
|
+
"siblings; joint impact belongs in the criterion judgement and synthesis. If "
|
|
148
|
+
"a defect needs siblings to reach rejection-level impact, it is not "
|
|
149
|
+
"Critical alone. These are per-finding decision-impact tests, never "
|
|
150
|
+
"distributional targets: there is no expected frequency for any band."
|
|
151
|
+
)
|
|
152
|
+
|
|
153
|
+
# The per-weakness field line in the four agents' output skeletons.
|
|
154
|
+
WEAKNESS_FIELD_LINE = (
|
|
155
|
+
"- **Severity**: [Critical / Major / Minor] | **Evidence Anchor**: "
|
|
156
|
+
"[`<type>: <locator>`] | **Confidence**: [1-5 — competence basis]"
|
|
157
|
+
)
|
|
158
|
+
|
|
159
|
+
COVERAGE_RECEIPT_SKELETON = (
|
|
160
|
+
"### Coverage Receipt (only when Strengths or Weaknesses is empty)"
|
|
161
|
+
)
|
|
162
|
+
COVERAGE_RECEIPT_COVERS = "**Covers**: [Strengths / Weaknesses / both]"
|
|
163
|
+
|
|
164
|
+
# Quota regressions (A1). Beyond the retired literals, these patterns catch the
|
|
165
|
+
# fail-open class codex round 1 demonstrated: any numeric floor/range attached
|
|
166
|
+
# to the finding nouns ("include at least 3 weaknesses", "3–5 strengths",
|
|
167
|
+
# "between three and five weaknesses"). The noun set is deliberately findings-
|
|
168
|
+
# only — counts on questions, words, or scale anchors (1-5, 0-100, 150-250
|
|
169
|
+
# words, 2-4 questions) are not finding quotas and must not false-fire.
|
|
170
|
+
_QUOTA_NOUNS = r"(?:strengths|weaknesses|findings|issues)"
|
|
171
|
+
_QUOTA_NUMS = r"(?:\d+|one|two|three|four|five|six|seven|eight|nine|ten)"
|
|
172
|
+
# Up to two ordinary modifiers may sit between the count and the finding noun
|
|
173
|
+
# ("3 major issues", "five high-priority findings"). 'points' is deliberately
|
|
174
|
+
# NOT a finding noun — "Award at most 5 points" is scoring language, not a
|
|
175
|
+
# quota; only the retired "Still find 2-3 points" literal is pinned.
|
|
176
|
+
_QUOTA_GAP = r"(?:[\w-]+\s+){0,2}"
|
|
177
|
+
QUOTA_PATTERNS = (
|
|
178
|
+
# Bound to the finding nouns: a "(2-4 items)" count on a NON-finding
|
|
179
|
+
# section (Questions) is legitimately exempt and must not false-fire.
|
|
180
|
+
re.compile(rf"{_QUOTA_NOUNS}\s*\(\s*\d+\s*[-–]\s*\d+\s+items\s*\)", re.I),
|
|
181
|
+
# Ranges with a non-zero floor ("3-5 weaknesses", "three to five
|
|
182
|
+
# weaknesses"). A 0-N range ("0-3 issues", the E7 blocker cap) allows zero
|
|
183
|
+
# and is not a quota. Acknowledged precision-over-recall tradeoff: these
|
|
184
|
+
# fire ANYWHERE in the five scanned prompt surfaces, including would-be
|
|
185
|
+
# descriptive prose ("select 1-3 major issues" in a survey example) — on
|
|
186
|
+
# curated reviewer-prompt files a numeric range on a finding noun is
|
|
187
|
+
# near-always a quota, and a rare false fire is a visible CI failure
|
|
188
|
+
# resolved by rewording, which beats a silent quota regression.
|
|
189
|
+
re.compile(rf"\b[1-9]\d*\s*[-–—]\s*\d+\s+{_QUOTA_GAP}{_QUOTA_NOUNS}\b", re.I),
|
|
190
|
+
re.compile(
|
|
191
|
+
rf"\b(?:[1-9]\d*|one|two|three|four|five|six|seven|eight|nine|ten)"
|
|
192
|
+
rf"\s+to\s+{_QUOTA_NUMS}\s+{_QUOTA_GAP}{_QUOTA_NOUNS}\b", re.I),
|
|
193
|
+
re.compile(rf"\bat (?:least|minimum|most)\s+{_QUOTA_NUMS}\s+{_QUOTA_GAP}{_QUOTA_NOUNS}\b", re.I),
|
|
194
|
+
# Imperative direct counts ("List 3 weaknesses", "Identify 3 major
|
|
195
|
+
# issues") and maximums ("no more than 5 findings") — both contradict the
|
|
196
|
+
# no-minimum/no-maximum contract.
|
|
197
|
+
re.compile(rf"\b(?:list|find|include|provide|identify|give|report|produce|select|choose|pick|name)\s+"
|
|
198
|
+
rf"(?:exactly\s+)?{_QUOTA_NUMS}\s+{_QUOTA_GAP}{_QUOTA_NOUNS}\b", re.I),
|
|
199
|
+
re.compile(rf"\b(?:no more than|a maximum(?: of)?|maximum of|up to)\s+{_QUOTA_NUMS}\s+{_QUOTA_GAP}{_QUOTA_NOUNS}\b", re.I),
|
|
200
|
+
# Limit/cap constructions ("Limit findings to five", "Cap weaknesses at 5").
|
|
201
|
+
re.compile(rf"\blimit\s+{_QUOTA_GAP}{_QUOTA_NOUNS}\s+to\s+{_QUOTA_NUMS}\b", re.I),
|
|
202
|
+
re.compile(rf"\bcap\s+{_QUOTA_GAP}{_QUOTA_NOUNS}\s+at\s+{_QUOTA_NUMS}\b", re.I),
|
|
203
|
+
re.compile(rf"\b(?:a\s+)?minimum of\s+{_QUOTA_NUMS}\s+{_QUOTA_GAP}{_QUOTA_NOUNS}\b", re.I),
|
|
204
|
+
re.compile(rf"\b(?:no|not) fewer than\s+{_QUOTA_NUMS}\s+{_QUOTA_GAP}{_QUOTA_NOUNS}\b", re.I),
|
|
205
|
+
re.compile(rf"\b{_QUOTA_NUMS}\s+or more\s+{_QUOTA_GAP}{_QUOTA_NOUNS}\b", re.I),
|
|
206
|
+
re.compile(rf"\b[1-9]\d*\+\s+{_QUOTA_GAP}{_QUOTA_NOUNS}\b", re.I),
|
|
207
|
+
re.compile(rf"\bexactly\s+{_QUOTA_NUMS}\s+{_QUOTA_GAP}{_QUOTA_NOUNS}\b", re.I),
|
|
208
|
+
# Top-N forms ("Report the top 3 weaknesses", "the 3 most serious
|
|
209
|
+
# weaknesses") — a fixed selection count is a quota (round-10 P2).
|
|
210
|
+
re.compile(rf"\b(?:the\s+)?top\s+{_QUOTA_NUMS}\s+{_QUOTA_GAP}{_QUOTA_NOUNS}\b", re.I),
|
|
211
|
+
re.compile(rf"\bthe\s+{_QUOTA_NUMS}\s+most\s+{_QUOTA_GAP}{_QUOTA_NOUNS}\b", re.I),
|
|
212
|
+
# Both endpoints must be numeric — "between major and minor issues" is
|
|
213
|
+
# ordinary prose, not a quota.
|
|
214
|
+
re.compile(rf"\bbetween\s+{_QUOTA_NUMS}\s+and\s+{_QUOTA_NUMS}\s+{_QUOTA_GAP}{_QUOTA_NOUNS}\b", re.I),
|
|
215
|
+
# Noun-first heading forms: "Weaknesses (at least 3)", "Strengths (3+)",
|
|
216
|
+
# "Weaknesses (minimum 3)", "Strengths (3-5)". Floor must be non-zero — a
|
|
217
|
+
# 0-N cap ("Issues (0-3, ranked)") allows zero and is not a quota.
|
|
218
|
+
re.compile(
|
|
219
|
+
rf"{_QUOTA_NOUNS}\s*\(\s*(?:at least |at minimum |a )?"
|
|
220
|
+
rf"(?:minimum(?: of)? |no fewer than |not fewer than )?"
|
|
221
|
+
rf"(?:[1-9]\d*|one|two|three|four|five|six|seven|eight|nine|ten)"
|
|
222
|
+
rf"\s*(?:[-–—]\s*\d+|\+)?\s*[,)]", re.I),
|
|
223
|
+
re.compile(r"\bStill find 2-3 points\b"),
|
|
224
|
+
)
|
|
225
|
+
|
|
226
|
+
ANCHOR_TYPES = ("`text`", "`table`", "`figure`", "`equation`", "`dataset`", "`absence`")
|
|
227
|
+
|
|
228
|
+
# The same six-type vocabulary, in every spelling the suite carries it — all
|
|
229
|
+
# derived from ANCHOR_TYPES so one hardcoded tuple pins every surface:
|
|
230
|
+
# Schema 6's machine-facing enum cell (escaped pipes inside a markdown table)…
|
|
231
|
+
SCHEMA6_ANCHOR_ENUM = " \\| ".join(f'"{t.strip("`")}"' for t in ANCHOR_TYPES)
|
|
232
|
+
# …and the inline prose list (Finding Contract blocks, DA footnote + discipline).
|
|
233
|
+
ANCHOR_LIST_INLINE = " / ".join(ANCHOR_TYPES)
|
|
234
|
+
|
|
235
|
+
|
|
236
|
+
def _read(root: Path, rel: str) -> str:
|
|
237
|
+
return read_or_exit2(root, rel)
|
|
238
|
+
|
|
239
|
+
|
|
240
|
+
def _require(errors: list[str], haystack_norm: str, rel: str, witness: str, label: str) -> None:
|
|
241
|
+
if _norm(witness) not in haystack_norm:
|
|
242
|
+
errors.append(f"{rel}: {label} witness missing: {witness[:70]!r}...")
|
|
243
|
+
|
|
244
|
+
|
|
245
|
+
def check(root: Path) -> list[str]:
|
|
246
|
+
errors: list[str] = []
|
|
247
|
+
|
|
248
|
+
# --- A1 + A2 + A3: the four scoring agents -------------------------------
|
|
249
|
+
for rel in SCORING_AGENTS:
|
|
250
|
+
raw = _read(root, rel)
|
|
251
|
+
norm = _norm(raw)
|
|
252
|
+
|
|
253
|
+
n = norm.count(_norm(FINDING_CONTRACT_HEADING))
|
|
254
|
+
if n != 1:
|
|
255
|
+
errors.append(f"{rel}: expected exactly one Finding Contract heading, found {n}")
|
|
256
|
+
if _norm(FINDING_CONTRACT_BODY) not in norm:
|
|
257
|
+
errors.append(
|
|
258
|
+
f"{rel}: Finding Contract body missing or does not match the "
|
|
259
|
+
f"canonical verbatim block"
|
|
260
|
+
)
|
|
261
|
+
# Delivery scoping: sprint runs inject ONLY the Phase 2 subsection as
|
|
262
|
+
# the system prompt, so the contract must live INSIDE it (parent-bound
|
|
263
|
+
# — a decoy heading elsewhere is not the injected block).
|
|
264
|
+
sprint = heading_section(raw, SPRINT_HEADING)
|
|
265
|
+
phase2 = heading_section(sprint, PHASE2_HEADING) if sprint is not None else None
|
|
266
|
+
if phase2 is None:
|
|
267
|
+
errors.append(f"{rel}: missing '{PHASE2_HEADING}' under '{SPRINT_HEADING}'")
|
|
268
|
+
elif _norm(FINDING_CONTRACT_HEADING) not in _norm(phase2) \
|
|
269
|
+
or _norm(FINDING_CONTRACT_BODY) not in _norm(phase2):
|
|
270
|
+
errors.append(
|
|
271
|
+
f"{rel}: Finding Contract sits OUTSIDE the delivered Phase 2 "
|
|
272
|
+
f"subsection — sprint-mode calls would never receive the "
|
|
273
|
+
f"A1/A2/A3 rules"
|
|
274
|
+
)
|
|
275
|
+
if phase2 is not None and _norm(BAND_ANCHORS) not in _norm(phase2):
|
|
276
|
+
errors.append(
|
|
277
|
+
f"{rel}: B1 band anchors missing from the delivered Phase 2 "
|
|
278
|
+
"Finding Contract"
|
|
279
|
+
)
|
|
280
|
+
_require(errors, norm, rel, WEAKNESS_FIELD_LINE, "per-weakness field line")
|
|
281
|
+
_require(errors, norm, rel, COVERAGE_RECEIPT_SKELETON, "coverage-receipt skeleton")
|
|
282
|
+
_require(errors, norm, rel, COVERAGE_RECEIPT_COVERS, "coverage-receipt Covers line")
|
|
283
|
+
for pat in QUOTA_PATTERNS:
|
|
284
|
+
if pat.search(raw):
|
|
285
|
+
errors.append(f"{rel}: finding-quota regression: pattern {pat.pattern!r} present")
|
|
286
|
+
if rel.endswith("/eic_agent.md"):
|
|
287
|
+
# B1: the EIC seat is the one that carried the acceptance-rate anchor.
|
|
288
|
+
_require(errors, norm, rel, "never from acceptance-rate base rates",
|
|
289
|
+
"EIC venue-criteria rule (B1)")
|
|
290
|
+
if "acceptance rate ~" in raw:
|
|
291
|
+
errors.append(f"{rel}: acceptance-rate anchor regression")
|
|
292
|
+
if rel.endswith("/domain_reviewer_agent.md"):
|
|
293
|
+
# Ungroundable field norms → canonical Minor, never off-enum
|
|
294
|
+
# 'advisory' (round-2 P1; check_215 pins the rest of Step 5).
|
|
295
|
+
_require(errors, norm, rel,
|
|
296
|
+
"down-rate the finding's severity to **Minor**",
|
|
297
|
+
"field-norm enum disposition (A3)")
|
|
298
|
+
if "down-rate the finding to advisory" in raw:
|
|
299
|
+
errors.append(f"{rel}: off-enum severity disposition regression")
|
|
300
|
+
if rel.endswith("/perspective_reviewer_agent.md"):
|
|
301
|
+
# The assumption-audit gate is conditional, never a mini-quota
|
|
302
|
+
# (round-3 P1).
|
|
303
|
+
_require(errors, norm, rel,
|
|
304
|
+
"do not manufacture one, #574 A1",
|
|
305
|
+
"conditional assumption-audit gate (A1)")
|
|
306
|
+
if "at least 1 implicit assumption" in raw:
|
|
307
|
+
errors.append(f"{rel}: assumption-audit quota regression")
|
|
308
|
+
|
|
309
|
+
# --- A2 + A3: Devil's Advocate tables ------------------------------------
|
|
310
|
+
# Column checks parse the HEADER ROW directly, not the whole subsection —
|
|
311
|
+
# the shared six-type footnote inside a subsection otherwise masks a
|
|
312
|
+
# renamed column (codex round-1 P2).
|
|
313
|
+
da = _read(root, DA_REL)
|
|
314
|
+
da_norm = _norm(da)
|
|
315
|
+
# Scope to the Output Format section first — a correctly-shaped decoy
|
|
316
|
+
# table elsewhere in the file must not satisfy the check (round-3 P2).
|
|
317
|
+
da_output = heading_section(da, "## Output Format")
|
|
318
|
+
if da_output is None:
|
|
319
|
+
errors.append(f"{DA_REL}: missing '## Output Format' section")
|
|
320
|
+
da_output = ""
|
|
321
|
+
required_cols = {"CRITICAL": ("Evidence Anchor", "Confidence"),
|
|
322
|
+
"MAJOR": ("Evidence Anchor", "Confidence"),
|
|
323
|
+
"MINOR": ("Evidence Anchor", "Confidence")}
|
|
324
|
+
for severity, cols in required_cols.items():
|
|
325
|
+
sub = re.search(rf"^#### {severity}\n(.*?)(?=^#### |^### |\Z)", da_output, re.M | re.S)
|
|
326
|
+
if sub is None:
|
|
327
|
+
errors.append(f"{DA_REL}: missing '#### {severity}' table")
|
|
328
|
+
continue
|
|
329
|
+
header = re.search(r"^\| # \| Dimension \| Issue Description \|.*$", sub.group(1), re.M)
|
|
330
|
+
if header is None:
|
|
331
|
+
errors.append(f"{DA_REL} {severity} table: missing header row")
|
|
332
|
+
continue
|
|
333
|
+
# Exact cell compare — substring membership lets a renamed superset
|
|
334
|
+
# ("Evidence Anchor Note") pass (codex round-2 P2).
|
|
335
|
+
cells = [c.strip() for c in header.group(0).strip().strip("|").split("|")]
|
|
336
|
+
for column in cols:
|
|
337
|
+
if column not in cells:
|
|
338
|
+
errors.append(f"{DA_REL} {severity} table: missing column {column!r}")
|
|
339
|
+
_require(errors, da_norm, DA_REL,
|
|
340
|
+
"the same defect class with the same decision impact lands in the "
|
|
341
|
+
"same band every time", "band-consistency (A3/B1)")
|
|
342
|
+
_require(errors, da_norm, DA_REL,
|
|
343
|
+
"OBSERVATION is a non-defect channel and never enters `weaknesses[]`",
|
|
344
|
+
"OBSERVATION mapping (A3)")
|
|
345
|
+
_require(errors, da_norm, DA_REL, "**Typed evidence anchors**", "typed-anchor discipline (A2)")
|
|
346
|
+
n_lists = da_norm.count(ANCHOR_LIST_INLINE)
|
|
347
|
+
if n_lists != 3:
|
|
348
|
+
errors.append(
|
|
349
|
+
f"{DA_REL}: six-type anchor vocabulary must appear exactly 3 times "
|
|
350
|
+
f"(Phase 2 contract + table footnote + discipline rule), found {n_lists}"
|
|
351
|
+
)
|
|
352
|
+
# DA CRITICAL band definition must share the canonical decision-impact bar
|
|
353
|
+
# (a fixable acceptance-blocker is Critical on every seat — codex round-1 P1).
|
|
354
|
+
_require(errors, da_norm, DA_REL, "blocks acceptance until fixed",
|
|
355
|
+
"DA CRITICAL decision-impact definition (A3)")
|
|
356
|
+
if "cannot be rescued by revision | Must be reflected" in da_norm:
|
|
357
|
+
errors.append(f"{DA_REL}: CRITICAL band regressed to the unfixable-only definition")
|
|
358
|
+
# Manufactured-balance regression guards (A1/B1).
|
|
359
|
+
_require(errors, da_norm, DA_REL,
|
|
360
|
+
"Skip the affirmation rather than manufacture one",
|
|
361
|
+
"DA genuine-strengths rule (A1/B1)")
|
|
362
|
+
# The concession ladder stays (v3.0 anti-sycophancy), WITH its B1 bridge:
|
|
363
|
+
# pressure-time procedure, never first-pass severity (round-3 adjudication).
|
|
364
|
+
_require(errors, da_norm, DA_REL,
|
|
365
|
+
"a dispositive score-5 rebuttal always prevails regardless of sequence",
|
|
366
|
+
"concession-ladder B1 bridge")
|
|
367
|
+
if "(for fairness)" in da:
|
|
368
|
+
errors.append(f"{DA_REL}: forced-balance regression ('for fairness' affirmation)")
|
|
369
|
+
# DA's contract must also ride the delivered Phase 2 subsection, pinned
|
|
370
|
+
# VERBATIM — a heading-only check lets the modalities weaken while later,
|
|
371
|
+
# undelivered sections still carry the strong rules (round-7 P1).
|
|
372
|
+
da_sprint = heading_section(da, SPRINT_HEADING)
|
|
373
|
+
da_phase2 = heading_section(da_sprint, PHASE2_HEADING) if da_sprint is not None else None
|
|
374
|
+
if da_phase2 is None or _norm(DA_FINDING_CONTRACT) not in _norm(da_phase2):
|
|
375
|
+
errors.append(
|
|
376
|
+
f"{DA_REL}: delivered Finding Contract (#574 A2/A3) missing from the "
|
|
377
|
+
f"Phase 2 subsection or does not match the canonical verbatim block"
|
|
378
|
+
)
|
|
379
|
+
if da_phase2 is not None and _norm(BAND_ANCHORS) not in _norm(da_phase2):
|
|
380
|
+
errors.append(
|
|
381
|
+
f"{DA_REL}: B1 band anchors missing from the delivered Phase 2 "
|
|
382
|
+
"Finding Contract"
|
|
383
|
+
)
|
|
384
|
+
# Ungroundable field norms take a canonical enum disposition, never an
|
|
385
|
+
# off-enum 'advisory' tier (round-2 P1).
|
|
386
|
+
for phrase in ("down-rate to advisory", "down-rates to advisory"):
|
|
387
|
+
if phrase in da:
|
|
388
|
+
errors.append(f"{DA_REL}: off-enum severity disposition regression ({phrase!r})")
|
|
389
|
+
|
|
390
|
+
# --- A2: template owns the anchor vocabulary ------------------------------
|
|
391
|
+
tmpl = _read(root, TEMPLATE_REL)
|
|
392
|
+
tmpl_norm = _norm(tmpl)
|
|
393
|
+
_require(errors, tmpl_norm, TEMPLATE_REL, "### Evidence Anchor Types (#574 A2)",
|
|
394
|
+
"anchor vocabulary section")
|
|
395
|
+
_require(
|
|
396
|
+
errors, tmpl_norm, TEMPLATE_REL, TEMPLATE_BAND_WITNESS,
|
|
397
|
+
"expanded B1 per-finding/anti-bundling/singleton-Critical rules",
|
|
398
|
+
)
|
|
399
|
+
for t in ANCHOR_TYPES:
|
|
400
|
+
if not re.search(rf"^\| {re.escape(t)} \|", tmpl, re.M):
|
|
401
|
+
errors.append(f"{TEMPLATE_REL}: anchor vocabulary missing type row {t}")
|
|
402
|
+
_require(errors, tmpl_norm, TEMPLATE_REL,
|
|
403
|
+
"**Critical/Major findings MUST carry an adequate anchor of an "
|
|
404
|
+
"applicable type** (#574 A2)", "MUST-anchor rule")
|
|
405
|
+
_require(errors, tmpl_norm, TEMPLATE_REL, "## Coverage Receipt (conditional *)",
|
|
406
|
+
"coverage-receipt section")
|
|
407
|
+
_require(errors, tmpl_norm, TEMPLATE_REL,
|
|
408
|
+
"An empty finding list without its Coverage Receipt is invalid.",
|
|
409
|
+
"receipt-required rule")
|
|
410
|
+
_require(errors, tmpl_norm, TEMPLATE_REL, COVERAGE_RECEIPT_COVERS,
|
|
411
|
+
"receipt polarity (Covers) line")
|
|
412
|
+
_require(errors, tmpl_norm, TEMPLATE_REL,
|
|
413
|
+
"a one-polarity review mentions only that polarity",
|
|
414
|
+
"polarity-conditional summary requirement (A1)")
|
|
415
|
+
_require(errors, tmpl_norm, TEMPLATE_REL,
|
|
416
|
+
"**Non-finding channel (#574 A2/A3 boundary):**",
|
|
417
|
+
"Minor-Issues channel boundary (A2/A3)")
|
|
418
|
+
_require(errors, tmpl_norm, TEMPLATE_REL,
|
|
419
|
+
"the single source for finding severity across the reviewer stack (#574 A3)",
|
|
420
|
+
"severity single-source note")
|
|
421
|
+
_require(errors, tmpl_norm, TEMPLATE_REL, "Tone is register, not severity (#574 B1)",
|
|
422
|
+
"register-independence line")
|
|
423
|
+
for field in ("**Evidence Anchor**:", "**Severity**:", "**Confidence**:"):
|
|
424
|
+
if field not in tmpl:
|
|
425
|
+
errors.append(f"{TEMPLATE_REL}: weakness entry field missing: {field!r}")
|
|
426
|
+
for pat in QUOTA_PATTERNS:
|
|
427
|
+
if pat.search(tmpl):
|
|
428
|
+
errors.append(f"{TEMPLATE_REL}: finding-quota regression: pattern {pat.pattern!r} present")
|
|
429
|
+
|
|
430
|
+
# --- A3: Schema 6 canonical fields ----------------------------------------
|
|
431
|
+
# Scoped to the Schema 6 section — a witness that migrated into a
|
|
432
|
+
# neighbouring schema would leave the ReviewerReport contract incomplete
|
|
433
|
+
# while a file-wide search still passed (round-5 P2).
|
|
434
|
+
schemas_raw = _read(root, SCHEMAS_REL)
|
|
435
|
+
schema6 = heading_section(
|
|
436
|
+
schemas_raw, "## Schema 6: Review Report (academic-paper-reviewer -> pipeline)")
|
|
437
|
+
if schema6 is None:
|
|
438
|
+
errors.append(f"{SCHEMAS_REL}: missing the Schema 6 section heading")
|
|
439
|
+
schema6 = ""
|
|
440
|
+
schemas_norm = _norm(schema6)
|
|
441
|
+
_require(errors, schemas_norm, SCHEMAS_REL,
|
|
442
|
+
"the CANONICAL single source for finding severity across the "
|
|
443
|
+
"reviewer stack (#574 A3)", "Schema 6 canonical-severity sentence")
|
|
444
|
+
# Full row-start witnesses — a bare backticked field name appears in other
|
|
445
|
+
# schemas' prose, so presence-of-name alone cannot pin the row (codex
|
|
446
|
+
# round-1 P1: the confidence row was unpinned).
|
|
447
|
+
for row in ("| `evidence_anchor` | object | *(optional, #574 A2)*",
|
|
448
|
+
"| `confidence` | integer | *(optional, #574 A3)*",
|
|
449
|
+
"| `competence_basis` | string | *(optional, #574 A3)*"):
|
|
450
|
+
_require(errors, schemas_norm, SCHEMAS_REL, row, "Schema 6 weakness field row")
|
|
451
|
+
# The machine-facing anchor_type enum must spell the SAME six values as the
|
|
452
|
+
# template vocabulary — both pinned to the one ANCHOR_TYPES tuple, so the
|
|
453
|
+
# prose layer and the schema layer cannot silently desync.
|
|
454
|
+
_require(errors, schemas_norm, SCHEMAS_REL, SCHEMA6_ANCHOR_ENUM,
|
|
455
|
+
"Schema 6 anchor_type enum (lockstep with ANCHOR_TYPES)")
|
|
456
|
+
# Type-conditional members: a text anchor without its quote or an absence
|
|
457
|
+
# anchor without the checked surfaces must not conform (codex round-1 P2).
|
|
458
|
+
_require(errors, schemas_norm, SCHEMAS_REL,
|
|
459
|
+
'REQUIRED when `anchor_type = "text"`', "Schema 6 conditional quote member")
|
|
460
|
+
_require(errors, schemas_norm, SCHEMAS_REL,
|
|
461
|
+
'REQUIRED when `anchor_type = "absence"`', "Schema 6 conditional absence members")
|
|
462
|
+
# Strength anchors are machine-addressable too (round-4 P2).
|
|
463
|
+
_require(errors, schemas_norm, SCHEMAS_REL,
|
|
464
|
+
"Strength objects `{description: string, evidence_anchor: object}`",
|
|
465
|
+
"Schema 6 structured strengths (A2)")
|
|
466
|
+
# Receipt + report-level confidence survive serialization (rounds 14-15).
|
|
467
|
+
_require(errors, schemas_norm, SCHEMAS_REL,
|
|
468
|
+
"| `coverage_receipt` | object | *(conditional, #574 A1)*",
|
|
469
|
+
"Schema 6 coverage_receipt field (A1)")
|
|
470
|
+
_require(errors, schemas_norm, SCHEMAS_REL,
|
|
471
|
+
"| `reviewer_confidence` | integer | *(optional, #574 A3)*",
|
|
472
|
+
"Schema 6 reviewer_confidence field (A3)")
|
|
473
|
+
|
|
474
|
+
# --- A3: synthesizer transports, never re-derives -------------------------
|
|
475
|
+
synth = _read(root, SYNTH_REL)
|
|
476
|
+
synth_norm = _norm(synth)
|
|
477
|
+
_require(errors, synth_norm, SYNTH_REL, "TRANSPORTED, never re-derived (#574 A3)",
|
|
478
|
+
"severity-transport rule")
|
|
479
|
+
_require(errors, synth_norm, SYNTH_REL, "[SEVERITY-SOURCE: letter-fallback]",
|
|
480
|
+
"severity fallback tag")
|
|
481
|
+
_require(errors, synth_norm, SYNTH_REL, "[CONFIDENCE-SOURCE: report-level]",
|
|
482
|
+
"confidence fallback tag")
|
|
483
|
+
if not re.search(r"^\| sub_claim_id \|.*\| severity \| confidence \|", synth, re.M):
|
|
484
|
+
errors.append(f"{SYNTH_REL}: Step 1b inventory header lacks severity+confidence columns")
|
|
485
|
+
|
|
486
|
+
# --- B1: no base-rate anchoring, symmetric standards -----------------------
|
|
487
|
+
_require(errors, synth_norm, SYNTH_REL,
|
|
488
|
+
"never a base rate or target distribution (#574 B1)", "B1 accept rule")
|
|
489
|
+
if "Rare — most papers don't pass" in synth:
|
|
490
|
+
errors.append(f"{SYNTH_REL}: base-rate anchor regression ('Rare — most papers…')")
|
|
491
|
+
_require(errors, synth_norm, SYNTH_REL, "**Unresolved-dissent principle**",
|
|
492
|
+
"symmetric unresolved-dissent arbitration rule (B1)")
|
|
493
|
+
if "rather than directly dismissing" in synth:
|
|
494
|
+
errors.append(f"{SYNTH_REL}: asymmetric arbitration regression ('lean toward … rather than directly dismissing')")
|
|
495
|
+
_require(errors, synth_norm, SYNTH_REL,
|
|
496
|
+
"never manufacture praise to soften a Reject (#574 A1/B1)",
|
|
497
|
+
"genuine-merits rule (A1/B1)")
|
|
498
|
+
if "(they always exist)" in synth:
|
|
499
|
+
errors.append(f"{SYNTH_REL}: mandatory-merit regression ('they always exist')")
|
|
500
|
+
# Edge Case 1 must not retain a directional split prior (round-2 P1).
|
|
501
|
+
_require(errors, synth_norm, SYNTH_REL,
|
|
502
|
+
"never from a strictness prior (#574 B1)",
|
|
503
|
+
"divergence-weighting edge case (B1)")
|
|
504
|
+
if "lean toward Major Revision" in synth:
|
|
505
|
+
errors.append(f"{SYNTH_REL}: directional split prior regression ('lean toward Major Revision')")
|
|
506
|
+
# A lone Major recommendation arbitrates before escalating (round-4 P1).
|
|
507
|
+
_require(errors, synth_norm, SYNTH_REL,
|
|
508
|
+
"A lone Major recommendation goes through arbitration FIRST",
|
|
509
|
+
"lone-Major arbitration rule (B1)")
|
|
510
|
+
# Sub-claims inherit the parent's transported severity (round-6 P1).
|
|
511
|
+
_require(errors, synth_norm, SYNTH_REL,
|
|
512
|
+
"All sub-claims decomposed from one parent share the parent's "
|
|
513
|
+
"transported severity", "sub-claim severity inheritance (A3)")
|
|
514
|
+
if "Conditions: Any reviewer recommends Major Revision" in synth:
|
|
515
|
+
errors.append(f"{SYNTH_REL}: unconditional lone-Major escalation regression")
|
|
516
|
+
|
|
517
|
+
dt = _read(root, DECISION_TEMPLATE_REL)
|
|
518
|
+
_require(errors, _norm(dt), DECISION_TEMPLATE_REL,
|
|
519
|
+
"unresolved-dissent principle (#574 B1)", "arbitration rationale vocabulary (B1)")
|
|
520
|
+
if "conservative principle" in dt:
|
|
521
|
+
errors.append(f"{DECISION_TEMPLATE_REL}: asymmetric arbitration regression ('conservative principle')")
|
|
522
|
+
|
|
523
|
+
std = _read(root, STANDARDS_REL)
|
|
524
|
+
std_norm = _norm(std)
|
|
525
|
+
_require(errors, std_norm, STANDARDS_REL,
|
|
526
|
+
"### Decision Symmetry and Register Independence (#574 B1)", "B1 section")
|
|
527
|
+
for bold in ("**Symmetric evidence standards.**",
|
|
528
|
+
"**Decisions follow criteria, not distributions.**",
|
|
529
|
+
"**Register is independent of severity.**"):
|
|
530
|
+
_require(errors, std_norm, STANDARDS_REL, bold, "B1 principle")
|
|
531
|
+
if "< 5% of submissions" in std:
|
|
532
|
+
errors.append(f"{STANDARDS_REL}: base-rate anchor regression ('< 5% of submissions')")
|
|
533
|
+
if "uncommon in practice" in std:
|
|
534
|
+
errors.append(f"{STANDARDS_REL}: qualitative base-rate cue regression ('uncommon in practice')")
|
|
535
|
+
_require(errors, std_norm, STANDARDS_REL,
|
|
536
|
+
"never a frequency expectation (#574 B1: no base-rate anchoring, qualitative or numeric)",
|
|
537
|
+
"frequency-free first-pass acceptance (B1)")
|
|
538
|
+
if "| Serious |" in std or "| Moderate |" in std:
|
|
539
|
+
errors.append(f"{STANDARDS_REL}: parallel severity scale regression (Serious/Moderate)")
|
|
540
|
+
# The Cross-Dimension table is decision-impact-only: it must not grow back a
|
|
541
|
+
# severity-assignment column (a second severity path — codex round-1 P1).
|
|
542
|
+
_require(errors, std_norm, STANDARDS_REL, "### Cross-Dimension Decision Impact",
|
|
543
|
+
"decision-impact table heading (A3)")
|
|
544
|
+
_require(errors, std_norm, STANDARDS_REL, "| Situation | Decision impact |",
|
|
545
|
+
"decision-impact table header (A3)")
|
|
546
|
+
_require(errors, std_norm, STANDARDS_REL, "this table assigns NO severities (#574 A3)",
|
|
547
|
+
"no-severity-assignment note (A3)")
|
|
548
|
+
if "| Situation | Severity" in std:
|
|
549
|
+
errors.append(f"{STANDARDS_REL}: severity-assignment column regression in the cross-dimension table")
|
|
550
|
+
_require(errors, std_norm, STANDARDS_REL,
|
|
551
|
+
"not a policy of rounding splits toward the stricter verdict (#574 B1)",
|
|
552
|
+
"symmetric split-resolution rule (B1)")
|
|
553
|
+
if "Lean toward conservative strategy" in std:
|
|
554
|
+
errors.append(f"{STANDARDS_REL}: asymmetric split-handling regression ('Lean toward conservative strategy')")
|
|
555
|
+
_require(errors, std_norm, STANDARDS_REL, "Affirm genuine merits where they exist",
|
|
556
|
+
"genuine-merits Reject rule (A1/B1)")
|
|
557
|
+
|
|
558
|
+
# External calibration evidence may motivate a hypothesis, but it cannot be
|
|
559
|
+
# imported as a decision prior or numeric correction for a live review.
|
|
560
|
+
cal_norm = _norm(_read(root, CALIBRATION_REL))
|
|
561
|
+
_require(errors, cal_norm, CALIBRATION_REL,
|
|
562
|
+
"External studies can motivate hypotheses about leniency or harshness",
|
|
563
|
+
"external-evidence scope note")
|
|
564
|
+
_require(errors, cal_norm, CALIBRATION_REL,
|
|
565
|
+
"must not be imported as correction factors, thresholds, or target-profile measurements",
|
|
566
|
+
"no imported decision-prior rule")
|
|
567
|
+
|
|
568
|
+
# Mandatory-strength mirrors (round-2 P2): guided mode's opener and the
|
|
569
|
+
# review-quality balance check are genuine-merit-conditional, never quotas.
|
|
570
|
+
guided = _read(root, GUIDED_REL)
|
|
571
|
+
_require(errors, _norm(guided), GUIDED_REL,
|
|
572
|
+
"when they exist — never manufactured praise, #574 A1/B1",
|
|
573
|
+
"guided-mode conditional-strengths opener")
|
|
574
|
+
if "building confidence" in guided:
|
|
575
|
+
errors.append(f"{GUIDED_REL}: mandatory-strength opener regression")
|
|
576
|
+
rqt = _read(root, RQT_REL)
|
|
577
|
+
_require(errors, _norm(rqt), RQT_REL,
|
|
578
|
+
"and manufacture none? (Evidence-driven balance check, #574 A1/B1)",
|
|
579
|
+
"review-quality balance check")
|
|
580
|
+
if "at least one genuine strength" in rqt:
|
|
581
|
+
errors.append(f"{RQT_REL}: minimum-strength check regression")
|
|
582
|
+
_require(errors, _norm(rqt), RQT_REL,
|
|
583
|
+
"never an author-population base rate (#574 B1)",
|
|
584
|
+
"criterion-only generalizability heuristic (B1)")
|
|
585
|
+
if "Most authors overstate" in rqt:
|
|
586
|
+
errors.append(f"{RQT_REL}: author-population base-rate regression")
|
|
587
|
+
|
|
588
|
+
# Downstream response template must accept unbounded weakness lists
|
|
589
|
+
# (round-3 P1: a W6 finding must never lose its author response).
|
|
590
|
+
resp = _read(root, RESPONSE_TEMPLATE_REL)
|
|
591
|
+
resp_norm = _norm(resp)
|
|
592
|
+
_require(errors, resp_norm, RESPONSE_TEMPLATE_REL,
|
|
593
|
+
"EVERY additional weakness in the report", "unbounded response skeleton (A1)")
|
|
594
|
+
# EACH mirror (R2 + R3) must carry its own unbounded witness exactly once —
|
|
595
|
+
# a file-wide count would accept a duplicated-R2/deleted-R3 arrangement
|
|
596
|
+
# (round-5 P2).
|
|
597
|
+
# (Plain string slicing, not heading_section: the whole template body is
|
|
598
|
+
# legitimately fenced ```markdown content — the fenced text IS the surface
|
|
599
|
+
# under check here.)
|
|
600
|
+
mirror_witness = "W1..Wn (every emitted weakness, unbounded — #574 A1)"
|
|
601
|
+
for mirror_heading, next_heading in (
|
|
602
|
+
("## Response to Reviewer 2 (Domain Expert)",
|
|
603
|
+
"## Response to Reviewer 3"),
|
|
604
|
+
("## Response to Reviewer 3 (Interdisciplinary Perspective)",
|
|
605
|
+
"## Response to Required Revisions"),
|
|
606
|
+
):
|
|
607
|
+
start = resp.find(mirror_heading)
|
|
608
|
+
if start == -1:
|
|
609
|
+
errors.append(f"{RESPONSE_TEMPLATE_REL}: missing '{mirror_heading}' section")
|
|
610
|
+
continue
|
|
611
|
+
end = resp.find(next_heading, start + len(mirror_heading))
|
|
612
|
+
seg = resp[start:end] if end != -1 else resp[start:]
|
|
613
|
+
n = _norm(seg).count(mirror_witness)
|
|
614
|
+
if n != 1:
|
|
615
|
+
errors.append(
|
|
616
|
+
f"{RESPONSE_TEMPLATE_REL}: '{mirror_heading}' must carry the "
|
|
617
|
+
f"unbounded W1..Wn witness exactly once, found {n}"
|
|
618
|
+
)
|
|
619
|
+
# Reject bounded W-range grammar generally: any separator, multi-digit
|
|
620
|
+
# endpoints, worded ranges ("W1 to W5", "the first five weaknesses").
|
|
621
|
+
if re.search(r"\bW1\s*(?:[-–—…]|\.\.+|\s+to\s+)\s*W?\d+\b", resp):
|
|
622
|
+
errors.append(f"{RESPONSE_TEMPLATE_REL}: bounded W-range mirror regression")
|
|
623
|
+
if re.search(rf"\bthe first\s+{_QUOTA_NUMS}\s+weaknesses\b", resp, re.I):
|
|
624
|
+
errors.append(f"{RESPONSE_TEMPLATE_REL}: bounded first-N mirror regression")
|
|
625
|
+
_require(errors, resp_norm, RESPONSE_TEMPLATE_REL,
|
|
626
|
+
"skip this block rather than invent praise to fill it (#574 A1)",
|
|
627
|
+
"conditional strengths-acknowledged block (A1)")
|
|
628
|
+
|
|
629
|
+
# The statistical red-flag HIGH/MEDIUM/LOW labels are triage, never a
|
|
630
|
+
# competing severity vocabulary (round-4 P1).
|
|
631
|
+
stats_norm = _norm(_read(root, STATS_REL))
|
|
632
|
+
_require(errors, stats_norm, STATS_REL,
|
|
633
|
+
"**Triage levels, not finding severities (#574 A3).**",
|
|
634
|
+
"red-flag triage note (A3)")
|
|
635
|
+
_require(errors, stats_norm, STATS_REL,
|
|
636
|
+
"never copied from the triage label", "triage-to-enum rule (A3)")
|
|
637
|
+
|
|
638
|
+
# Developmental register never softens the verdict (round-10 P2).
|
|
639
|
+
fa = _read(root, FIELD_ANALYST_REL)
|
|
640
|
+
_require(errors, _norm(fa), FIELD_ANALYST_REL,
|
|
641
|
+
"tone changes wording, never the verdict", "developmental-register rule (B1)")
|
|
642
|
+
if 'rather than strict "accept/reject" judgment' in fa:
|
|
643
|
+
errors.append(f"{FIELD_ANALYST_REL}: register-softens-verdict regression")
|
|
644
|
+
|
|
645
|
+
# Remaining affirm-first mirrors are genuine-merit-conditional (round-4 P2).
|
|
646
|
+
rcf_norm = _norm(_read(root, RCF_REL))
|
|
647
|
+
_require(errors, rcf_norm, RCF_REL,
|
|
648
|
+
"Acknowledge genuine strengths",
|
|
649
|
+
"conditional hypercriticism guidance (A1/B1)")
|
|
650
|
+
|
|
651
|
+
# The cross-model DA prompt carries no fixed finding count (round-7 P1),
|
|
652
|
+
# and the ACTIVE prompt block passes the same quota grammar as every other
|
|
653
|
+
# prompt surface (round-9 P2: the retired literal alone is not the class).
|
|
654
|
+
xm = _read(root, XM_REL)
|
|
655
|
+
_require(errors, _norm(xm), XM_REL,
|
|
656
|
+
"no fixed count, and do not pad to reach one (#574 A1)",
|
|
657
|
+
"cross-model DA no-quota prompt (A1)")
|
|
658
|
+
if "the 3 most serious weaknesses" in xm:
|
|
659
|
+
errors.append(f"{XM_REL}: cross-model DA fixed-count regression")
|
|
660
|
+
p_start = xm.find("a simplified DA prompt to the cross-model:")
|
|
661
|
+
p_end = xm.find("2. Compare cross-model findings", p_start)
|
|
662
|
+
if p_start == -1 or p_end == -1:
|
|
663
|
+
errors.append(f"{XM_REL}: cross-model DA prompt block not found")
|
|
664
|
+
else:
|
|
665
|
+
for pat in QUOTA_PATTERNS:
|
|
666
|
+
if pat.search(xm[p_start:p_end]):
|
|
667
|
+
errors.append(
|
|
668
|
+
f"{XM_REL}: finding-quota regression in the cross-model DA "
|
|
669
|
+
f"prompt: pattern {pat.pattern[:50]!r}..."
|
|
670
|
+
)
|
|
671
|
+
|
|
672
|
+
# Transported metadata reaches the emitted decision package on EVERY row
|
|
673
|
+
# (round-7 P1, extended round-8: Confidence + Evidence Anchor columns too,
|
|
674
|
+
# and the template's tables in lockstep).
|
|
675
|
+
n_sev_tables = synth.count(
|
|
676
|
+
"| Transport ref | Revision Item | Sub-Claim(s) | Severity | Evidence Anchor | Confidence | Source | Obligation class | Cost scope | Bounded consequence |")
|
|
677
|
+
if n_sev_tables != 2:
|
|
678
|
+
errors.append(
|
|
679
|
+
f"{SYNTH_REL}: expected the transported-metadata columns on both "
|
|
680
|
+
f"roadmap tables (Required + Suggested), found {n_sev_tables}"
|
|
681
|
+
)
|
|
682
|
+
template_header = (
|
|
683
|
+
"| Transport ref | Revision Item | Sub-Claim(s) | Severity | Evidence Anchor | "
|
|
684
|
+
"Confidence | Source Reviewer | Obligation class | Cost scope | Bounded consequence |"
|
|
685
|
+
)
|
|
686
|
+
if dt.count(template_header) != 2:
|
|
687
|
+
errors.append(
|
|
688
|
+
f"{DECISION_TEMPLATE_REL}: expected the non-ranking transported-metadata "
|
|
689
|
+
f"columns on both roadmap tables, found {dt.count(template_header)}"
|
|
690
|
+
)
|
|
691
|
+
_require(errors, synth_norm, SYNTH_REL,
|
|
692
|
+
"never dies in the Step 1b working inventory (#574 A2/A3)",
|
|
693
|
+
"emitted-package metadata rule (A3)")
|
|
694
|
+
# Machine handoff carries ALL transported fields + fallback provenance,
|
|
695
|
+
# scoped to the Schema 7 section (round-8 P1; round-9 P1: witnessing only
|
|
696
|
+
# severity left evidence_anchor/confidence deletable).
|
|
697
|
+
schema7 = heading_section(
|
|
698
|
+
schemas_raw, "## Schema 7: Revision Roadmap (reviewer -> academic-paper revision)")
|
|
699
|
+
if schema7 is None:
|
|
700
|
+
errors.append(f"{SCHEMAS_REL}: missing the Schema 7 section heading")
|
|
701
|
+
else:
|
|
702
|
+
s7_norm = _norm(schema7)
|
|
703
|
+
# Witnesses cover the transport SEMANTICS, not just row existence — a
|
|
704
|
+
# description rewritten to contradict A2/A3 must fail (round-10 P2).
|
|
705
|
+
for row in ("| `severity` | enum | *(optional, #574 A3)* Transported Schema 6 "
|
|
706
|
+
"finding severity (`critical`/`major`/`minor`) of the driving sub-claim",
|
|
707
|
+
"| `severity_source` | string | *(optional, #574 A3)* Fallback "
|
|
708
|
+
"provenance for `severity` — the verbatim tag",
|
|
709
|
+
"| `evidence_anchor` | object | *(optional, #574 A2)* The driving "
|
|
710
|
+
"finding's typed anchor — same shape as the Schema 6 Weakness",
|
|
711
|
+
"| `confidence` | integer | *(optional, #574 A3)* The driving "
|
|
712
|
+
"finding's per-finding confidence 1-5",
|
|
713
|
+
"| `confidence_source` | string | *(optional, #574 A3)* Fallback "
|
|
714
|
+
"provenance for `confidence` — the verbatim tag",
|
|
715
|
+
"| `corroborating_sources` | list[object] | *(optional, #574 A2/A3)*",
|
|
716
|
+
"| `source_kind` | enum | *(optional, #574 A3)*"):
|
|
717
|
+
_require(errors, s7_norm, SCHEMAS_REL, row, "Schema 7 RoadmapItem transported-field row")
|
|
718
|
+
_require(errors, s7_norm, SCHEMAS_REL,
|
|
719
|
+
"nothing is dropped or merged", "Schema 7 multi-source rule (A2/A3)")
|
|
720
|
+
for rel_, txt in ((SYNTH_REL, synth), (DECISION_TEMPLATE_REL, dt)):
|
|
721
|
+
if "transported from the finding (#574 A2)" not in _norm(txt):
|
|
722
|
+
errors.append(f"{rel_}: Top Blocking Issues anchor cell lost its typed-anchor form (A2)")
|
|
723
|
+
|
|
724
|
+
# DA-CRITICAL is adjudicated, never an automatic veto (round-7 P1).
|
|
725
|
+
_require(errors, synth_norm, SYNTH_REL,
|
|
726
|
+
"never an automatic veto (#574 B1)", "DA-CRITICAL adjudication rule (B1)")
|
|
727
|
+
|
|
728
|
+
# --- P0-3 residue + A1/A2 skill-level standards ----------------------------
|
|
729
|
+
skill = _read(root, SKILL_REL)
|
|
730
|
+
skill_norm = _norm(skill)
|
|
731
|
+
_require(errors, skill_norm, SKILL_REL,
|
|
732
|
+
"overlapping findings may corroborate one another, but role/persona separation is not evidence of independent errors",
|
|
733
|
+
"overlap-corroboration standard (P0-3)")
|
|
734
|
+
_require(errors, skill_norm, SKILL_REL,
|
|
735
|
+
"no manufactured balance and no finding quotas (#574 A1/B1)",
|
|
736
|
+
"evidence-driven balance standard")
|
|
737
|
+
_require(errors, skill_norm, SKILL_REL, "**Overlap suppression**",
|
|
738
|
+
"overlap-suppression anti-pattern row (P0-3)")
|
|
739
|
+
_require(errors, skill_norm, SKILL_REL,
|
|
740
|
+
"Journal-Fit Reviewer opens with genuine strengths when they exist",
|
|
741
|
+
"conditional guided-mode summary (A1/B1)")
|
|
742
|
+
# DA-CRITICAL: visible adjudication on both SKILL surfaces, no
|
|
743
|
+
# unconditional veto (round-7 P1).
|
|
744
|
+
n_adjudicated = skill_norm.count("adjudicated visibly")
|
|
745
|
+
if n_adjudicated < 2:
|
|
746
|
+
errors.append(
|
|
747
|
+
f"{SKILL_REL}: DA-CRITICAL adjudication wording missing from the "
|
|
748
|
+
f"Checkpoint Rule and/or the anti-pattern row (found {n_adjudicated})"
|
|
749
|
+
)
|
|
750
|
+
if "Decision cannot be Accept (Checkpoint Rule #4)" in skill \
|
|
751
|
+
or "the Editorial Decision cannot be Accept." in skill:
|
|
752
|
+
errors.append(f"{SKILL_REL}: unconditional DA-CRITICAL veto regression")
|
|
753
|
+
for phrase in ("no duplicate criticisms", "fake diversity"):
|
|
754
|
+
if phrase in skill:
|
|
755
|
+
errors.append(f"{SKILL_REL}: overlap-prohibition regression ({phrase!r})")
|
|
756
|
+
|
|
757
|
+
# --- A3: decision template does not re-derive severity ---------------------
|
|
758
|
+
dt_norm = _norm(_read(root, DECISION_TEMPLATE_REL))
|
|
759
|
+
_require(errors, dt_norm, DECISION_TEMPLATE_REL,
|
|
760
|
+
"transported from the reviewer cards (#574 A3)", "roadmap severity-transport note")
|
|
761
|
+
|
|
762
|
+
return errors
|
|
763
|
+
|
|
764
|
+
|
|
765
|
+
def main() -> int:
|
|
766
|
+
parser = argparse.ArgumentParser(description=__doc__)
|
|
767
|
+
parser.add_argument("--root", type=Path, default=REPO_ROOT,
|
|
768
|
+
help="tree root to lint (default: repo root)")
|
|
769
|
+
args = parser.parse_args()
|
|
770
|
+
|
|
771
|
+
errors = check(args.root)
|
|
772
|
+
if errors:
|
|
773
|
+
for e in errors:
|
|
774
|
+
print(f"FAIL: {e}", file=sys.stderr)
|
|
775
|
+
print(f"\ncheck_reviewer_finding_contract: {len(errors)} failure(s)", file=sys.stderr)
|
|
776
|
+
return 1
|
|
777
|
+
print("check_reviewer_finding_contract: OK (A1 quotas/receipt + A2 anchors + "
|
|
778
|
+
"A3 severity transport + B1 symmetry pinned)")
|
|
779
|
+
return 0
|
|
780
|
+
|
|
781
|
+
|
|
782
|
+
if __name__ == "__main__":
|
|
783
|
+
sys.exit(main())
|