psyclaw 0.27.23 → 0.28.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +11 -5
- package/agents/recommended/catalog.json +99 -0
- package/dist/apps/panel/index.html +5 -5
- package/dist/src/adapters/pi/extension.js +339 -94
- package/dist/src/adapters/pi/extension.js.map +1 -1
- package/dist/src/adapters/pi/rpc.d.ts +2 -0
- package/dist/src/adapters/pi/rpc.js +9 -2
- package/dist/src/adapters/pi/rpc.js.map +1 -1
- package/dist/src/agents/import.js +44 -32
- package/dist/src/agents/import.js.map +1 -1
- package/dist/src/agents/recommended-personas.d.ts +42 -0
- package/dist/src/agents/recommended-personas.js +135 -0
- package/dist/src/agents/recommended-personas.js.map +1 -0
- 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/cli.js +6 -3
- package/dist/src/cli.js.map +1 -1
- package/dist/src/creation/contracts.d.ts +41 -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 +208 -0
- package/dist/src/creation/service.js.map +1 -0
- package/dist/src/index.d.ts +11 -0
- package/dist/src/index.js +11 -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/bundled-personas.d.ts +16 -0
- package/dist/src/orchestration/bundled-personas.js +101 -0
- package/dist/src/orchestration/bundled-personas.js.map +1 -0
- package/dist/src/orchestration/effects.d.ts +8 -0
- package/dist/src/orchestration/effects.js +39 -0
- package/dist/src/orchestration/effects.js.map +1 -0
- package/dist/src/orchestration/personas.d.ts +16 -0
- package/dist/src/orchestration/personas.js +64 -0
- package/dist/src/orchestration/personas.js.map +1 -0
- package/dist/src/orchestration/pi-executor.d.ts +9 -4
- package/dist/src/orchestration/pi-executor.js +55 -22
- package/dist/src/orchestration/pi-executor.js.map +1 -1
- package/dist/src/orchestration/research-agents.d.ts +3 -7
- package/dist/src/orchestration/research-agents.js +5 -69
- package/dist/src/orchestration/research-agents.js.map +1 -1
- package/dist/src/panel/server.js +19 -4
- 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.d.ts +14 -0
- package/dist/src/style/cli-ui.js +45 -1
- package/dist/src/style/cli-ui.js.map +1 -1
- package/dist/src/tui/skill-manager.js +1 -1
- package/dist/src/tui/skill-manager.js.map +1 -1
- package/dist/src/updates/update.js +9 -3
- package/dist/src/updates/update.js.map +1 -1
- package/package.json +15 -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,656 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""v3.10 policy-layer lint (#127 PR-B).
|
|
3
|
+
|
|
4
|
+
Runs ALONGSIDE check_v3_9_0_triangulation.py (NOT a rename — per spec §3 PR-B
|
|
5
|
+
item 14 / checkpoint open decision resolved to "alongside"). Verifies the v3.10
|
|
6
|
+
terminal-policy-layer contract across the schema, the finalizer prompt, and the
|
|
7
|
+
formatter prompt.
|
|
8
|
+
|
|
9
|
+
Coverage (spec §3 PR-B item 14):
|
|
10
|
+
1. venue_type / venue_type_provenance / venue_type_source schema fields exist
|
|
11
|
+
(incl. the explicit `unknown` enum member).
|
|
12
|
+
2. No `_inferred` provenance value accepted (openalex_inferred / crossref_inferred).
|
|
13
|
+
3. Pair-dependency allOf branches present (type⟹provenance, provenance⟹type,
|
|
14
|
+
unknown-type⟹unknown-provenance one-way, trusted_source⟹venue_type_source).
|
|
15
|
+
4. trusted_source laundering guard. Two surfaces: (a) the lint's RUNTIME check
|
|
16
|
+
(`check_laundering_guard_doc`) asserts the schema's `venue_type_source`
|
|
17
|
+
description documents the guard AND the finalizer prompt forbids deriving
|
|
18
|
+
venue_type from index type fields; (b) `assert_venue_type_source_clean` is the
|
|
19
|
+
reusable SEMANTIC check (a `venue_type_source` naming a lookup index, or empty
|
|
20
|
+
under `trusted_source_declared`, is rejected) — the lint ships no corpus, so
|
|
21
|
+
adapter/corpus tests exercise this helper against real values rather than the
|
|
22
|
+
lint running it in CI.
|
|
23
|
+
5. terminal_policies schema home is the STANDALONE file, NOT the entry schema
|
|
24
|
+
(Invariant 11).
|
|
25
|
+
6. Marker grammar: `severity=HIGH-BLOCK` parses ONLY inside `<!--ref:...-->`;
|
|
26
|
+
bare-prose HIGH-BLOCK does NOT refuse; advisory-suffix slot well-formed;
|
|
27
|
+
policy_hash present on finalized markers; legacy (no-stamp) markers recognized.
|
|
28
|
+
Parser fixtures live in this module (parse_ref_marker) and are exercised by the
|
|
29
|
+
companion test.
|
|
30
|
+
7. Generic-rule shape: formatter rule 11 is a single generic severity=HIGH-BLOCK
|
|
31
|
+
refusal, NOT a per-subtype list.
|
|
32
|
+
8. Formatter STAMP-ONLY: the formatter section declares it does not re-evaluate
|
|
33
|
+
policy logic (Invariant 13).
|
|
34
|
+
9. terminal_policies enum closed; temporal_integrity accepts only `advisory`
|
|
35
|
+
(Invariant 3). citation_existence (v3.11 / C-V6) closed enum {advisory, strict}
|
|
36
|
+
with no JSON-Schema `default`; the finalizer section documents the
|
|
37
|
+
citation_existence terminal token (policy=citation_existence
|
|
38
|
+
reason=lookup_verified_false) and the recompute-each-pass / no-cache property.
|
|
39
|
+
|
|
40
|
+
Usage:
|
|
41
|
+
python scripts/check_v3_10_policy.py
|
|
42
|
+
python scripts/check_v3_10_policy.py --entry-schema PATH --terminal-policies-schema PATH \
|
|
43
|
+
--formatter-path PATH --orchestrator-path PATH (for test fixtures)
|
|
44
|
+
|
|
45
|
+
Exit codes:
|
|
46
|
+
0 — all checks pass
|
|
47
|
+
1 — one or more checks failed
|
|
48
|
+
2 — invocation error (e.g., file missing)
|
|
49
|
+
"""
|
|
50
|
+
from __future__ import annotations
|
|
51
|
+
|
|
52
|
+
import argparse
|
|
53
|
+
import json
|
|
54
|
+
import re
|
|
55
|
+
import sys
|
|
56
|
+
from pathlib import Path
|
|
57
|
+
from typing import Any
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
REPO_ROOT = Path(__file__).resolve().parents[1]
|
|
61
|
+
DEFAULT_ENTRY_SCHEMA = REPO_ROOT / "shared/contracts/passport/literature_corpus_entry.schema.json"
|
|
62
|
+
DEFAULT_TP_SCHEMA = REPO_ROOT / "shared/contracts/passport/terminal_policies.schema.json"
|
|
63
|
+
DEFAULT_FORMATTER = REPO_ROOT / "academic-paper/agents/formatter_agent.md"
|
|
64
|
+
DEFAULT_ORCHESTRATOR = REPO_ROOT / "academic-pipeline/agents/pipeline_orchestrator_agent.md"
|
|
65
|
+
|
|
66
|
+
# The three lookup index names that MUST NOT be a venue_type_source (laundering
|
|
67
|
+
# guard, R2-P1). Matched on WORD BOUNDARIES (not bare substrings) so a legitimate
|
|
68
|
+
# source like "OpenAlexandria University Press" or "crossreference publisher feed"
|
|
69
|
+
# is NOT false-flagged. `semantic scholar` tolerates space / underscore / hyphen
|
|
70
|
+
# between the two words. The (?<![A-Za-z0-9]) / (?![A-Za-z0-9]) lookarounds are the
|
|
71
|
+
# ASCII-safe word-boundary form (Python `\b` is unreliable across some boundaries).
|
|
72
|
+
_LOOKUP_INDEX_RE = re.compile(
|
|
73
|
+
r"(?<![A-Za-z0-9])(?:openalex|crossref|semantic[-_\s]+scholar)(?![A-Za-z0-9])",
|
|
74
|
+
re.IGNORECASE,
|
|
75
|
+
)
|
|
76
|
+
|
|
77
|
+
V3_10_FINALIZER_HEADER = "## Cite-Time Provenance Finalizer — v3.10 extension"
|
|
78
|
+
V3_10_FORMATTER_HEADER = "## Cite-Time Terminal Policy Gate (v3.10)"
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
# ---------------------------------------------------------------------------
|
|
82
|
+
# Marker grammar parser (rule 6) — the reusable load-bearing piece
|
|
83
|
+
# ---------------------------------------------------------------------------
|
|
84
|
+
|
|
85
|
+
# A finalized v3.10 ref marker, either shape:
|
|
86
|
+
# non-terminal: <!--ref:<slug> <base-status> [<advisory-suffix>] policy_hash=<slug>-->
|
|
87
|
+
# terminal: <!--ref:<slug> <base-status> [<advisory-suffix>] TERMINAL-BLOCK
|
|
88
|
+
# severity=HIGH-BLOCK policy=<p> reason=<r> mode=<m> policy_hash=<slug>-->
|
|
89
|
+
# Legacy v3.9.0 markers carry NO policy_hash and are recognized separately.
|
|
90
|
+
_REF_MARKER_RE = re.compile(r"<!--ref:(?P<inner>[^>]*?)-->")
|
|
91
|
+
# #513: LOW-WARN-PARTIAL-COVERAGE is the acknowledged-partial state emitted by the
|
|
92
|
+
# read-scope-aware promotion — it behaves as LOW-WARN for every base-status
|
|
93
|
+
# mechanism (contamination suffixes, policy_hash stamping, terminal policies).
|
|
94
|
+
_BASE_STATUS = ("ok", "LOW-WARN", "LOW-WARN-PARTIAL-COVERAGE")
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
# Recognized key=value prefixes inside a finalized marker. A token that is
|
|
98
|
+
# neither a base-status, an advisory suffix, the TERMINAL-BLOCK sentinel, nor one
|
|
99
|
+
# of these prefixes is an unrecognized residual token → the marker is malformed.
|
|
100
|
+
_KV_PREFIXES = ("severity=", "policy=", "reason=", "mode=", "policy_hash=")
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
class ParsedMarker:
|
|
104
|
+
"""Structured parse of a single <!--ref:...--> marker."""
|
|
105
|
+
|
|
106
|
+
def __init__(self, *, slug, base_status, advisory_suffix, terminal,
|
|
107
|
+
severity, policy, reason, mode, policy_hash, unknown_tokens=None,
|
|
108
|
+
terminal_blocks=None):
|
|
109
|
+
self.slug = slug
|
|
110
|
+
self.base_status = base_status
|
|
111
|
+
self.advisory_suffix = advisory_suffix
|
|
112
|
+
self.terminal = terminal
|
|
113
|
+
self.severity = severity
|
|
114
|
+
self.policy = policy
|
|
115
|
+
self.reason = reason
|
|
116
|
+
self.mode = mode
|
|
117
|
+
self.policy_hash = policy_hash
|
|
118
|
+
self.unknown_tokens = unknown_tokens or []
|
|
119
|
+
# Per-block terminal metadata (C-V6(g) multi-policy co-emission): one dict
|
|
120
|
+
# {severity,policy,reason,mode} per TERMINAL-BLOCK sentinel. is_well_formed
|
|
121
|
+
# validates each block independently rather than the flattened fields,
|
|
122
|
+
# which "last value wins" and cannot prove per-block completeness (#329).
|
|
123
|
+
self.terminal_blocks = terminal_blocks or []
|
|
124
|
+
|
|
125
|
+
@property
|
|
126
|
+
def terminal_block_count(self) -> int:
|
|
127
|
+
return len(self.terminal_blocks)
|
|
128
|
+
|
|
129
|
+
@property
|
|
130
|
+
def is_legacy(self) -> bool:
|
|
131
|
+
"""A v3.9.0 marker: no policy_hash stamp, no terminal token."""
|
|
132
|
+
return self.policy_hash is None and not self.terminal
|
|
133
|
+
|
|
134
|
+
@property
|
|
135
|
+
def is_high_block(self) -> bool:
|
|
136
|
+
return self.severity == "HIGH-BLOCK"
|
|
137
|
+
|
|
138
|
+
@property
|
|
139
|
+
def is_well_formed(self) -> bool:
|
|
140
|
+
"""A grammatical marker: has a base-status ∈ {ok, LOW-WARN} and no
|
|
141
|
+
unrecognized residual tokens. A marker lacking a base-status (e.g.
|
|
142
|
+
`<!--ref:smith2024 policy_hash=...-->`) is malformed — the v3.7.3 5-cell
|
|
143
|
+
base resolution always produces one.
|
|
144
|
+
|
|
145
|
+
A terminal marker (#329) must carry, for EACH TERMINAL-BLOCK independently,
|
|
146
|
+
severity=HIGH-BLOCK + non-empty policy / reason / mode (validated per block
|
|
147
|
+
so a complete later block in a C-V6(g) co-emission cannot mask an earlier
|
|
148
|
+
block's stripped metadata), plus the marker-level shared policy_hash. Empty
|
|
149
|
+
tokens (`policy=`) count as missing — the formatter gate needs the value."""
|
|
150
|
+
if self.base_status not in _BASE_STATUS:
|
|
151
|
+
return False
|
|
152
|
+
if self.unknown_tokens:
|
|
153
|
+
return False
|
|
154
|
+
if self.terminal:
|
|
155
|
+
# Each TERMINAL-BLOCK must be individually complete (C-V6(g)).
|
|
156
|
+
for block in self.terminal_blocks:
|
|
157
|
+
if block.get("severity") != "HIGH-BLOCK":
|
|
158
|
+
return False
|
|
159
|
+
if not all((block.get("policy"), block.get("reason"), block.get("mode"))):
|
|
160
|
+
return False
|
|
161
|
+
# policy_hash is marker-level (one shared slug encoding all keys),
|
|
162
|
+
# required on any finalized terminal marker.
|
|
163
|
+
if not self.policy_hash:
|
|
164
|
+
return False
|
|
165
|
+
return True
|
|
166
|
+
|
|
167
|
+
|
|
168
|
+
def parse_ref_marker(text: str) -> ParsedMarker | None:
|
|
169
|
+
"""Parse the FIRST <!--ref:...--> marker found in `text`. Returns None if no
|
|
170
|
+
ref marker is present (e.g. a bare `HIGH-BLOCK` token in prose — which must
|
|
171
|
+
NOT be treated as a refusal trigger, anti-false-refuse Inv. 12). A present but
|
|
172
|
+
grammatically malformed marker is returned with `is_well_formed == False` and
|
|
173
|
+
its `unknown_tokens` populated, so a lint can flag it rather than silently
|
|
174
|
+
accept it."""
|
|
175
|
+
m = _REF_MARKER_RE.search(text)
|
|
176
|
+
if not m:
|
|
177
|
+
return None
|
|
178
|
+
return _parse_inner(m.group("inner").strip())
|
|
179
|
+
|
|
180
|
+
|
|
181
|
+
def _parse_inner(inner: str) -> ParsedMarker | None:
|
|
182
|
+
toks = inner.split()
|
|
183
|
+
if not toks:
|
|
184
|
+
return None
|
|
185
|
+
slug = toks[0]
|
|
186
|
+
rest = toks[1:]
|
|
187
|
+
|
|
188
|
+
base_status = None
|
|
189
|
+
if rest and rest[0] in _BASE_STATUS:
|
|
190
|
+
base_status = rest[0]
|
|
191
|
+
rest = rest[1:]
|
|
192
|
+
|
|
193
|
+
# Optional advisory suffix: a single CONTAMINATED-* token, before TERMINAL-BLOCK.
|
|
194
|
+
advisory_suffix = None
|
|
195
|
+
if rest and rest[0].startswith("CONTAMINATED-"):
|
|
196
|
+
advisory_suffix = rest[0]
|
|
197
|
+
rest = rest[1:]
|
|
198
|
+
|
|
199
|
+
terminal = False
|
|
200
|
+
severity = policy = reason = mode = policy_hash = None
|
|
201
|
+
unknown_tokens: list[str] = []
|
|
202
|
+
# Per-block terminal metadata (C-V6(g)): each TERMINAL-BLOCK sentinel opens a
|
|
203
|
+
# new block; its severity/policy/reason/mode tokens belong to THAT block.
|
|
204
|
+
# policy_hash is marker-level (one shared slug encoding all keys), not
|
|
205
|
+
# per-block — it is kept in the flat field only. The flat severity/policy/
|
|
206
|
+
# reason/mode keep the legacy "last value wins" semantics for backward compat;
|
|
207
|
+
# is_well_formed reads terminal_blocks for per-block completeness (#329).
|
|
208
|
+
terminal_blocks: list[dict[str, str | None]] = []
|
|
209
|
+
|
|
210
|
+
# key=value tokens + the TERMINAL-BLOCK sentinel. Anything else is residual.
|
|
211
|
+
for tok in rest:
|
|
212
|
+
if tok == "TERMINAL-BLOCK":
|
|
213
|
+
terminal = True
|
|
214
|
+
terminal_blocks.append(
|
|
215
|
+
{"severity": None, "policy": None, "reason": None, "mode": None}
|
|
216
|
+
)
|
|
217
|
+
elif tok.startswith("severity="):
|
|
218
|
+
severity = tok.split("=", 1)[1]
|
|
219
|
+
if terminal_blocks:
|
|
220
|
+
terminal_blocks[-1]["severity"] = severity
|
|
221
|
+
elif tok.startswith("policy="):
|
|
222
|
+
policy = tok.split("=", 1)[1]
|
|
223
|
+
if terminal_blocks:
|
|
224
|
+
terminal_blocks[-1]["policy"] = policy
|
|
225
|
+
elif tok.startswith("reason="):
|
|
226
|
+
reason = tok.split("=", 1)[1]
|
|
227
|
+
if terminal_blocks:
|
|
228
|
+
terminal_blocks[-1]["reason"] = reason
|
|
229
|
+
elif tok.startswith("mode="):
|
|
230
|
+
mode = tok.split("=", 1)[1]
|
|
231
|
+
if terminal_blocks:
|
|
232
|
+
terminal_blocks[-1]["mode"] = mode
|
|
233
|
+
elif tok.startswith("policy_hash="):
|
|
234
|
+
policy_hash = tok.split("=", 1)[1]
|
|
235
|
+
else:
|
|
236
|
+
unknown_tokens.append(tok)
|
|
237
|
+
|
|
238
|
+
return ParsedMarker(
|
|
239
|
+
slug=slug, base_status=base_status, advisory_suffix=advisory_suffix,
|
|
240
|
+
terminal=terminal, severity=severity, policy=policy, reason=reason,
|
|
241
|
+
mode=mode, policy_hash=policy_hash, unknown_tokens=unknown_tokens,
|
|
242
|
+
terminal_blocks=terminal_blocks,
|
|
243
|
+
)
|
|
244
|
+
|
|
245
|
+
|
|
246
|
+
def iter_ref_markers(text: str):
|
|
247
|
+
"""Yield a ParsedMarker for EVERY <!--ref:...--> marker in `text` (not just
|
|
248
|
+
the first). A document carries many citation markers; refusal scanning must
|
|
249
|
+
cover all of them."""
|
|
250
|
+
for m in _REF_MARKER_RE.finditer(text):
|
|
251
|
+
pm = _parse_inner(m.group("inner").strip())
|
|
252
|
+
if pm is not None:
|
|
253
|
+
yield pm
|
|
254
|
+
|
|
255
|
+
|
|
256
|
+
def any_marker_triggers_refusal(text: str) -> bool:
|
|
257
|
+
"""Rule 11 over a whole document: True iff ANY <!--ref:...--> marker carries a
|
|
258
|
+
severity=HIGH-BLOCK token. A clean first marker followed by a terminal one
|
|
259
|
+
still refuses (the single-marker `marker_triggers_refusal` would miss that)."""
|
|
260
|
+
return any(pm.is_high_block for pm in iter_ref_markers(text))
|
|
261
|
+
|
|
262
|
+
|
|
263
|
+
def marker_triggers_refusal(text: str) -> bool:
|
|
264
|
+
"""Rule 11 semantics for a SINGLE marker: refuses iff a `severity=HIGH-BLOCK`
|
|
265
|
+
token is present INSIDE the first <!--ref:...--> marker. A bare-prose
|
|
266
|
+
HIGH-BLOCK does not. For whole-document scanning use `any_marker_triggers_refusal`."""
|
|
267
|
+
pm = parse_ref_marker(text)
|
|
268
|
+
if pm is None:
|
|
269
|
+
return False
|
|
270
|
+
return pm.is_high_block
|
|
271
|
+
|
|
272
|
+
|
|
273
|
+
# ---------------------------------------------------------------------------
|
|
274
|
+
# Schema checks (rules 1-5, 9)
|
|
275
|
+
# ---------------------------------------------------------------------------
|
|
276
|
+
|
|
277
|
+
def check_entry_schema(entry_schema: dict[str, Any]) -> list[str]:
|
|
278
|
+
fail: list[str] = []
|
|
279
|
+
props = entry_schema.get("properties", {})
|
|
280
|
+
|
|
281
|
+
# Rule 1: three venue fields exist.
|
|
282
|
+
for field in ("venue_type", "venue_type_provenance", "venue_type_source"):
|
|
283
|
+
if field not in props:
|
|
284
|
+
fail.append(f"rule 1: entry schema missing {field}")
|
|
285
|
+
|
|
286
|
+
# Rule 1: venue_type enum includes the explicit `unknown` member.
|
|
287
|
+
vt_enum = props.get("venue_type", {}).get("enum", [])
|
|
288
|
+
if "unknown" not in vt_enum:
|
|
289
|
+
fail.append("rule 1: venue_type enum missing explicit 'unknown' member")
|
|
290
|
+
expected_vt = {
|
|
291
|
+
"journal-article", "conference-paper", "book", "chapter", "dissertation",
|
|
292
|
+
"preprint", "report", "dataset", "other", "unknown",
|
|
293
|
+
}
|
|
294
|
+
if set(vt_enum) != expected_vt:
|
|
295
|
+
fail.append(f"rule 1: venue_type enum mismatch: {set(vt_enum) ^ expected_vt}")
|
|
296
|
+
|
|
297
|
+
# Rule 2: no _inferred provenance values.
|
|
298
|
+
prov_enum = props.get("venue_type_provenance", {}).get("enum", [])
|
|
299
|
+
for forbidden in ("openalex_inferred", "crossref_inferred"):
|
|
300
|
+
if forbidden in prov_enum:
|
|
301
|
+
fail.append(f"rule 2: venue_type_provenance must NOT accept {forbidden} (R-L3-2-D)")
|
|
302
|
+
expected_prov = {"adapter_declared", "user_declared", "trusted_source_declared", "unknown"}
|
|
303
|
+
if set(prov_enum) != expected_prov:
|
|
304
|
+
fail.append(f"rule 2: venue_type_provenance enum mismatch: {set(prov_enum) ^ expected_prov}")
|
|
305
|
+
|
|
306
|
+
# Rule 3: the four pair-dependency allOf branches are present (matched by a
|
|
307
|
+
# distinctive phrase in each branch description).
|
|
308
|
+
branch_descs = " ".join(
|
|
309
|
+
b.get("description", "") for b in entry_schema.get("allOf", []) if isinstance(b, dict)
|
|
310
|
+
)
|
|
311
|
+
required_branch_markers = [
|
|
312
|
+
("venue_type present ⟹ venue_type_provenance present", "type⟹provenance forward"),
|
|
313
|
+
("venue_type_provenance present ⟹ venue_type present", "provenance⟹type reverse"),
|
|
314
|
+
("venue_type == unknown ⟹ venue_type_provenance == unknown", "unknown one-way"),
|
|
315
|
+
("venue_type_provenance == trusted_source_declared ⟹ venue_type_source REQUIRED",
|
|
316
|
+
"trusted_source required"),
|
|
317
|
+
]
|
|
318
|
+
for phrase, label in required_branch_markers:
|
|
319
|
+
if phrase not in branch_descs:
|
|
320
|
+
fail.append(f"rule 3: missing pair-dependency branch ({label}): {phrase!r}")
|
|
321
|
+
|
|
322
|
+
# Rule 5: terminal_policies must NOT be hosted in the entry schema (Inv. 11).
|
|
323
|
+
if "terminal_policies" in props:
|
|
324
|
+
fail.append(
|
|
325
|
+
"rule 5: terminal_policies MUST NOT appear in literature_corpus_entry.schema.json "
|
|
326
|
+
"(it is passport-level, not entry-level — Invariant 11)"
|
|
327
|
+
)
|
|
328
|
+
|
|
329
|
+
return fail
|
|
330
|
+
|
|
331
|
+
|
|
332
|
+
def check_terminal_policies_schema(tp_schema: dict[str, Any]) -> list[str]:
|
|
333
|
+
fail: list[str] = []
|
|
334
|
+
props = tp_schema.get("properties", {})
|
|
335
|
+
|
|
336
|
+
# Rule 9: contamination_triangulation closed enum.
|
|
337
|
+
ct_enum = props.get("contamination_triangulation", {}).get("enum", [])
|
|
338
|
+
expected_ct = {"advisory", "strict", "strict_articles_only"}
|
|
339
|
+
if set(ct_enum) != expected_ct:
|
|
340
|
+
fail.append(f"rule 9: contamination_triangulation enum mismatch: {set(ct_enum) ^ expected_ct}")
|
|
341
|
+
|
|
342
|
+
# Rule 9: temporal_integrity accepts ONLY advisory (Inv. 3).
|
|
343
|
+
ti_enum = props.get("temporal_integrity", {}).get("enum", [])
|
|
344
|
+
if set(ti_enum) != {"advisory"}:
|
|
345
|
+
fail.append(
|
|
346
|
+
f"rule 9: temporal_integrity must accept ONLY 'advisory' (Inv. 3); got {ti_enum}"
|
|
347
|
+
)
|
|
348
|
+
|
|
349
|
+
# Rule 9 (v3.11 / C-V6): citation_existence closed enum {advisory, strict}.
|
|
350
|
+
# No strict_articles_only member — the narrowed-false already carries the
|
|
351
|
+
# precision the venue-scoped contamination mode needed (C-V6(a)). And no
|
|
352
|
+
# JSON-Schema `default` keyword (per-key absence advisory is a runtime
|
|
353
|
+
# evaluator convention, not a non-operational schema default — R1 P1).
|
|
354
|
+
ce = props.get("citation_existence", {})
|
|
355
|
+
ce_enum = ce.get("enum", [])
|
|
356
|
+
expected_ce = {"advisory", "strict"}
|
|
357
|
+
if set(ce_enum) != expected_ce:
|
|
358
|
+
fail.append(f"rule 9: citation_existence enum mismatch: {set(ce_enum) ^ expected_ce}")
|
|
359
|
+
if "default" in ce:
|
|
360
|
+
fail.append(
|
|
361
|
+
"rule 9: citation_existence MUST NOT carry a JSON-Schema `default` "
|
|
362
|
+
"(per-key-absence advisory is a runtime evaluator convention; a schema "
|
|
363
|
+
"default is non-operational false safety — R1 P1)"
|
|
364
|
+
)
|
|
365
|
+
|
|
366
|
+
# Rule 9: the object is closed (additionalProperties false).
|
|
367
|
+
if tp_schema.get("additionalProperties") is not False:
|
|
368
|
+
fail.append("rule 9: terminal_policies schema must set additionalProperties: false")
|
|
369
|
+
|
|
370
|
+
return fail
|
|
371
|
+
|
|
372
|
+
|
|
373
|
+
# ---------------------------------------------------------------------------
|
|
374
|
+
# Prompt checks (rules 4, 6, 7, 8)
|
|
375
|
+
# ---------------------------------------------------------------------------
|
|
376
|
+
|
|
377
|
+
def _extract_section(text: str, header: str) -> str:
|
|
378
|
+
"""Return the section body from `header` (a ## line) to the next ## or EOF."""
|
|
379
|
+
lines = text.splitlines()
|
|
380
|
+
out: list[str] = []
|
|
381
|
+
in_section = False
|
|
382
|
+
for line in lines:
|
|
383
|
+
if line.startswith(header):
|
|
384
|
+
in_section = True
|
|
385
|
+
out.append(line)
|
|
386
|
+
continue
|
|
387
|
+
if in_section:
|
|
388
|
+
if line.startswith("## "):
|
|
389
|
+
break
|
|
390
|
+
out.append(line)
|
|
391
|
+
return "\n".join(out)
|
|
392
|
+
|
|
393
|
+
|
|
394
|
+
def _strict_promotion_sentence(section: str) -> str | None:
|
|
395
|
+
"""Return the single line (markdown bullet) that carries the citation_existence
|
|
396
|
+
strict promotion rule — the one emitting the terminal token. Identified by the
|
|
397
|
+
co-occurrence of `the finalizer appends the terminal token` and
|
|
398
|
+
`policy=citation_existence` on one line. Returns None if no such line exists.
|
|
399
|
+
|
|
400
|
+
Scoping the strict-only predicate check to THIS line (not the whole H2 section)
|
|
401
|
+
is what makes the predicate pin un-bypassable: the predicate strings recur in
|
|
402
|
+
sibling paragraphs, so a section-wide membership test would pass even if this
|
|
403
|
+
rule were widened (codex round-2 P1)."""
|
|
404
|
+
for line in section.splitlines():
|
|
405
|
+
if "policy=citation_existence" in line and "appends the terminal token" in line:
|
|
406
|
+
return line
|
|
407
|
+
return None
|
|
408
|
+
|
|
409
|
+
|
|
410
|
+
def check_finalizer_prompt(orchestrator_text: str) -> list[str]:
|
|
411
|
+
fail: list[str] = []
|
|
412
|
+
section = _extract_section(orchestrator_text, V3_10_FINALIZER_HEADER)
|
|
413
|
+
if not section:
|
|
414
|
+
fail.append(f"rule 6/4: finalizer v3.10 section not found ({V3_10_FINALIZER_HEADER!r})")
|
|
415
|
+
return fail
|
|
416
|
+
|
|
417
|
+
# Rule 6: both marker shapes documented (TERMINAL-BLOCK token + policy_hash).
|
|
418
|
+
if "TERMINAL-BLOCK" not in section:
|
|
419
|
+
fail.append("rule 6: finalizer section missing the TERMINAL-BLOCK token")
|
|
420
|
+
if "policy_hash" not in section:
|
|
421
|
+
fail.append("rule 6: finalizer section missing policy_hash stamp")
|
|
422
|
+
if "severity=HIGH-BLOCK" not in section:
|
|
423
|
+
fail.append("rule 6: finalizer section missing severity=HIGH-BLOCK token")
|
|
424
|
+
|
|
425
|
+
# Rule 4: finalizer must forbid deriving venue_type from index type fields.
|
|
426
|
+
if "MUST NOT infer venue_type" not in section and "MUST NOT infer venue_type from" not in section:
|
|
427
|
+
fail.append(
|
|
428
|
+
"rule 4: finalizer section must forbid inferring venue_type from free-form "
|
|
429
|
+
"venue / index type fields (R-L3-2-D)"
|
|
430
|
+
)
|
|
431
|
+
|
|
432
|
+
# Rule 6 (sole evaluator): the finalizer is declared the SOLE policy evaluator.
|
|
433
|
+
if "sole policy evaluator" not in section:
|
|
434
|
+
fail.append("rule 6: finalizer section must declare it is the sole policy evaluator")
|
|
435
|
+
|
|
436
|
+
# Rule 9 (v3.11 / C-V6): the finalizer must document the citation_existence
|
|
437
|
+
# terminal promotion grammar — the canonical token fragments must be present so
|
|
438
|
+
# the writer (the prompt) emits the exact shape the parser / formatter rule 11
|
|
439
|
+
# recognize. Also pin the recompute-each-pass property (C-V6(h)) so a future
|
|
440
|
+
# edit cannot silently introduce cached status.
|
|
441
|
+
if "policy=citation_existence" not in section:
|
|
442
|
+
fail.append(
|
|
443
|
+
"rule 9: finalizer section must document the citation_existence terminal "
|
|
444
|
+
"token (policy=citation_existence) per C-V6(c)"
|
|
445
|
+
)
|
|
446
|
+
if "reason=lookup_verified_false" not in section:
|
|
447
|
+
fail.append(
|
|
448
|
+
"rule 9: finalizer section must carry reason=lookup_verified_false in the "
|
|
449
|
+
"citation_existence terminal token per C-V6(c)"
|
|
450
|
+
)
|
|
451
|
+
# Rule 9 (C-V6(c)/(d)): pin the STRICT-ONLY gate predicate WITHIN the strict
|
|
452
|
+
# promotion rule itself — NOT merely somewhere in the H2 section. The predicate
|
|
453
|
+
# strings recur elsewhere in the section (the narrowed-false intro, the
|
|
454
|
+
# multi-policy co-emit paragraph), so a section-wide `in` check is bypassable:
|
|
455
|
+
# the strict bullet could be widened/removed while a sibling paragraph keeps the
|
|
456
|
+
# strings and lint still passes (codex round-2 P1). We isolate the sentence that
|
|
457
|
+
# carries the terminal-token emission rule (the one with
|
|
458
|
+
# `the finalizer appends the terminal token ... policy=citation_existence`) and
|
|
459
|
+
# require BOTH `citation_existence == strict` AND `lookup_verified == false` IN
|
|
460
|
+
# THAT sentence — the conjunction that gates promotion. This is the prompt-contract
|
|
461
|
+
# pin the test oracle mirrors.
|
|
462
|
+
if "policy=citation_existence" in section:
|
|
463
|
+
promo = _strict_promotion_sentence(section)
|
|
464
|
+
if promo is None:
|
|
465
|
+
fail.append(
|
|
466
|
+
"rule 9: finalizer section must carry the citation_existence strict "
|
|
467
|
+
"promotion rule in one sentence (`the finalizer appends the terminal "
|
|
468
|
+
"token ... policy=citation_existence`) per C-V6(c)"
|
|
469
|
+
)
|
|
470
|
+
elif ("citation_existence == strict" not in promo
|
|
471
|
+
or "lookup_verified == false" not in promo):
|
|
472
|
+
fail.append(
|
|
473
|
+
"rule 9: the citation_existence strict promotion rule must state the "
|
|
474
|
+
"strict-only gate predicate verbatim IN THAT SAME RULE "
|
|
475
|
+
"(`citation_existence == strict` AND `lookup_verified == false`), so a "
|
|
476
|
+
"prompt edit cannot silently widen the gate while a sibling paragraph "
|
|
477
|
+
"keeps the strings (C-V6(c)/(d))"
|
|
478
|
+
)
|
|
479
|
+
if "Recompute each pass" not in section:
|
|
480
|
+
fail.append(
|
|
481
|
+
"rule 9: finalizer section must document recompute-each-pass / no-cache "
|
|
482
|
+
"for citation_existence per C-V6(h)"
|
|
483
|
+
)
|
|
484
|
+
|
|
485
|
+
# Rule 8 (strict_articles_only PRECISION conjunction + by-design FN): the
|
|
486
|
+
# finalizer must enumerate the full conjunction (DOI ∧ venue_type ∧ provenance)
|
|
487
|
+
# AND document the by-design false-negative, so a future edit cannot silently
|
|
488
|
+
# widen strict_articles_only into all-journal hard-block (§4.4).
|
|
489
|
+
if "strict_articles_only" in section:
|
|
490
|
+
if "DOI present" not in section:
|
|
491
|
+
fail.append("rule 8: strict_articles_only conjunction must require 'DOI present'")
|
|
492
|
+
if "journal-article, conference-paper" not in section:
|
|
493
|
+
fail.append(
|
|
494
|
+
"rule 8: strict_articles_only must scope to venue_type ∈ "
|
|
495
|
+
"{journal-article, conference-paper}"
|
|
496
|
+
)
|
|
497
|
+
if "STAYS ADVISORY by design" not in section and "by-design false-negative" not in section:
|
|
498
|
+
fail.append(
|
|
499
|
+
"rule 8: strict_articles_only must document the by-design false-negative "
|
|
500
|
+
"(DOI-less / unknown-venue stays advisory) — §4.4 recall-limit disclosure"
|
|
501
|
+
)
|
|
502
|
+
|
|
503
|
+
return fail
|
|
504
|
+
|
|
505
|
+
|
|
506
|
+
def check_formatter_prompt(formatter_text: str) -> list[str]:
|
|
507
|
+
fail: list[str] = []
|
|
508
|
+
section = _extract_section(formatter_text, V3_10_FORMATTER_HEADER)
|
|
509
|
+
if not section:
|
|
510
|
+
fail.append(f"rule 7/8: formatter v3.10 section not found ({V3_10_FORMATTER_HEADER!r})")
|
|
511
|
+
return fail
|
|
512
|
+
|
|
513
|
+
# Rule 8: STAMP-ONLY — formatter must NOT re-evaluate policy logic (Inv. 13).
|
|
514
|
+
if "STAMP-ONLY" not in section and "stamp-checking gate" not in section:
|
|
515
|
+
fail.append("rule 8: formatter section must declare STAMP-ONLY (no policy re-evaluation)")
|
|
516
|
+
if "MUST NOT re-evaluate" not in section:
|
|
517
|
+
fail.append("rule 8: formatter section must state it MUST NOT re-evaluate strict logic")
|
|
518
|
+
|
|
519
|
+
# Rule 6: bare-prose HIGH-BLOCK does NOT refuse (anti-false-refuse).
|
|
520
|
+
# The rule must be stated in the refusal-rule-11 text (which sits above this
|
|
521
|
+
# section), so scan the whole formatter for it.
|
|
522
|
+
if "in plain prose" not in formatter_text and "outside any `<!--ref" not in formatter_text:
|
|
523
|
+
fail.append(
|
|
524
|
+
"rule 6: formatter must state a bare-prose HIGH-BLOCK (outside <!--ref-->) "
|
|
525
|
+
"does NOT trigger refusal (anti-false-refuse)"
|
|
526
|
+
)
|
|
527
|
+
|
|
528
|
+
# Rule 7: generic-rule shape — exactly ONE refusal rule keyed on severity=HIGH-BLOCK,
|
|
529
|
+
# not a per-subtype list. Assert rule 11 references the GENERIC severity token and
|
|
530
|
+
# does NOT enumerate per-policy subtypes as separate refusal rules.
|
|
531
|
+
if "severity=HIGH-BLOCK" not in formatter_text:
|
|
532
|
+
fail.append("rule 7: formatter rule 11 must key on the generic severity=HIGH-BLOCK token")
|
|
533
|
+
# Two ordered gates (R4-P1 no short-circuit) must be documented.
|
|
534
|
+
if "Gate 1" not in section or "Gate 2" not in section:
|
|
535
|
+
fail.append("rule 6: formatter two-gate (Gate 1 freshness + Gate 2 refusal) not documented")
|
|
536
|
+
if "STALE-POLICY-EVALUATION" not in section:
|
|
537
|
+
fail.append("rule 6: formatter freshness guard must emit [STALE-POLICY-EVALUATION]")
|
|
538
|
+
|
|
539
|
+
# C-V6(b) #333: a default-advisory `lookup_verified == false` carries NO marker
|
|
540
|
+
# suffix (marker stays byte-equivalent v3.9.x), so its visibility MUST be carried
|
|
541
|
+
# by the formatter's mandatory provenance_summary `Citation Existence Advisories`
|
|
542
|
+
# section — otherwise an advisory false (a provably-bogus DOI) is buried in an
|
|
543
|
+
# aggregate the user must open separately. Assert the formatter documents it, and
|
|
544
|
+
# that the carrier (provenance_summary) is named INSIDE that subsection — scanning
|
|
545
|
+
# the whole prompt would false-pass on the pre-existing contamination/version-family
|
|
546
|
+
# provenance_summary mentions (codex P2).
|
|
547
|
+
ce_section = _extract_section(formatter_text, "## Citation Existence Advisory")
|
|
548
|
+
if not ce_section:
|
|
549
|
+
fail.append(
|
|
550
|
+
"C-V6(b): formatter must document a mandatory provenance_summary "
|
|
551
|
+
"'Citation Existence Advisories' section that lists every advisory "
|
|
552
|
+
"lookup_verified==false row (the advisory's visibility carrier, #333)"
|
|
553
|
+
)
|
|
554
|
+
else:
|
|
555
|
+
# The section must name BOTH the carrier file (provenance_summary) AND the
|
|
556
|
+
# exact deliverable-visible section label (`Citation Existence Advisories`),
|
|
557
|
+
# both INSIDE the subsection — renaming either silently drops the only
|
|
558
|
+
# visibility path for an advisory false (codex P2).
|
|
559
|
+
if "provenance_summary" not in ce_section:
|
|
560
|
+
fail.append(
|
|
561
|
+
"C-V6(b): the Citation Existence Advisory section must name "
|
|
562
|
+
"provenance_summary.md as its visibility carrier (#333)"
|
|
563
|
+
)
|
|
564
|
+
if "Citation Existence Advisories" not in ce_section:
|
|
565
|
+
fail.append(
|
|
566
|
+
"C-V6(b): the section must reference the exact provenance_summary "
|
|
567
|
+
"label 'Citation Existence Advisories' (the deliverable-visible "
|
|
568
|
+
"section name a consumer greps for, #333)"
|
|
569
|
+
)
|
|
570
|
+
|
|
571
|
+
return fail
|
|
572
|
+
|
|
573
|
+
|
|
574
|
+
def check_laundering_guard_doc(entry_schema: dict[str, Any]) -> list[str]:
|
|
575
|
+
"""Rule 4: the schema venue_type_source description must document the
|
|
576
|
+
laundering guard (source ∉ three lookup indexes)."""
|
|
577
|
+
fail: list[str] = []
|
|
578
|
+
desc = entry_schema.get("properties", {}).get("venue_type_source", {}).get("description", "")
|
|
579
|
+
if "lookup index" not in desc.lower() and "three lookup" not in desc.lower():
|
|
580
|
+
fail.append(
|
|
581
|
+
"rule 4: venue_type_source description must document the laundering guard "
|
|
582
|
+
"(source must NOT name one of the three lookup indexes)"
|
|
583
|
+
)
|
|
584
|
+
return fail
|
|
585
|
+
|
|
586
|
+
|
|
587
|
+
def assert_venue_type_source_clean(value: str, provenance: str) -> list[str]:
|
|
588
|
+
"""Reusable semantic laundering check for a corpus entry (used by fixtures):
|
|
589
|
+
when provenance == trusted_source_declared, venue_type_source must be non-empty
|
|
590
|
+
and NOT name a lookup index."""
|
|
591
|
+
problems: list[str] = []
|
|
592
|
+
if provenance != "trusted_source_declared":
|
|
593
|
+
return problems
|
|
594
|
+
if not value or not value.strip():
|
|
595
|
+
problems.append("venue_type_source is empty under trusted_source_declared")
|
|
596
|
+
return problems
|
|
597
|
+
m = _LOOKUP_INDEX_RE.search(value)
|
|
598
|
+
if m:
|
|
599
|
+
problems.append(
|
|
600
|
+
f"venue_type_source {value!r} names lookup index {m.group(0)!r} (laundering, R2-P1)"
|
|
601
|
+
)
|
|
602
|
+
return problems
|
|
603
|
+
|
|
604
|
+
|
|
605
|
+
# ---------------------------------------------------------------------------
|
|
606
|
+
# Main
|
|
607
|
+
# ---------------------------------------------------------------------------
|
|
608
|
+
|
|
609
|
+
def _load_json(path: Path) -> dict[str, Any]:
|
|
610
|
+
with path.open(encoding="utf-8") as f:
|
|
611
|
+
return json.load(f)
|
|
612
|
+
|
|
613
|
+
|
|
614
|
+
def main() -> int:
|
|
615
|
+
parser = argparse.ArgumentParser(description="v3.10 policy-layer lint")
|
|
616
|
+
parser.add_argument("--entry-schema", default=str(DEFAULT_ENTRY_SCHEMA))
|
|
617
|
+
parser.add_argument("--terminal-policies-schema", default=str(DEFAULT_TP_SCHEMA))
|
|
618
|
+
parser.add_argument("--formatter-path", default=str(DEFAULT_FORMATTER))
|
|
619
|
+
parser.add_argument("--orchestrator-path", default=str(DEFAULT_ORCHESTRATOR))
|
|
620
|
+
args = parser.parse_args()
|
|
621
|
+
|
|
622
|
+
paths = {
|
|
623
|
+
"entry schema": Path(args.entry_schema),
|
|
624
|
+
"terminal_policies schema": Path(args.terminal_policies_schema),
|
|
625
|
+
"formatter": Path(args.formatter_path),
|
|
626
|
+
"orchestrator": Path(args.orchestrator_path),
|
|
627
|
+
}
|
|
628
|
+
for label, p in paths.items():
|
|
629
|
+
if not p.exists():
|
|
630
|
+
print(f"ERROR: {label} not found: {p}", file=sys.stderr)
|
|
631
|
+
return 2
|
|
632
|
+
|
|
633
|
+
entry_schema = _load_json(Path(args.entry_schema))
|
|
634
|
+
tp_schema = _load_json(Path(args.terminal_policies_schema))
|
|
635
|
+
formatter_text = Path(args.formatter_path).read_text(encoding="utf-8")
|
|
636
|
+
orchestrator_text = Path(args.orchestrator_path).read_text(encoding="utf-8")
|
|
637
|
+
|
|
638
|
+
failures: list[str] = []
|
|
639
|
+
failures += check_entry_schema(entry_schema)
|
|
640
|
+
failures += check_terminal_policies_schema(tp_schema)
|
|
641
|
+
failures += check_laundering_guard_doc(entry_schema)
|
|
642
|
+
failures += check_finalizer_prompt(orchestrator_text)
|
|
643
|
+
failures += check_formatter_prompt(formatter_text)
|
|
644
|
+
|
|
645
|
+
if failures:
|
|
646
|
+
print("v3.10 policy-layer lint FAILED:", file=sys.stderr)
|
|
647
|
+
for f in failures:
|
|
648
|
+
print(f" - {f}", file=sys.stderr)
|
|
649
|
+
return 1
|
|
650
|
+
|
|
651
|
+
print("v3.10 policy-layer lint OK")
|
|
652
|
+
return 0
|
|
653
|
+
|
|
654
|
+
|
|
655
|
+
if __name__ == "__main__":
|
|
656
|
+
sys.exit(main())
|