From add2d8a0408b9638571e9603ce8f1df581641633 Mon Sep 17 00:00:00 2001 From: 732642856 <732642856@qq.com> Date: Thu, 2 Jul 2026 14:51:16 +0800 Subject: [PATCH] Add priority1 reference promotion audit --- ...ty1_batch1_promotion_audit_2026_07_02.json | 352 ++++++++++++++++++ ...rity1_batch1_promotion_audit_2026_07_02.md | 79 ++++ progress.md | 8 + ...pretation_source_priority1_batch1_audit.py | 85 +++++ 4 files changed, 524 insertions(+) create mode 100644 docs/research/interpretation_source_priority1_batch1_promotion_audit_2026_07_02.json create mode 100644 docs/research/interpretation_source_priority1_batch1_promotion_audit_2026_07_02.md create mode 100644 tests/test_interpretation_source_priority1_batch1_audit.py diff --git a/docs/research/interpretation_source_priority1_batch1_promotion_audit_2026_07_02.json b/docs/research/interpretation_source_priority1_batch1_promotion_audit_2026_07_02.json new file mode 100644 index 00000000..32daef54 --- /dev/null +++ b/docs/research/interpretation_source_priority1_batch1_promotion_audit_2026_07_02.json @@ -0,0 +1,352 @@ +{ + "scope": "interpretation_source_priority1_batch1_promotion_audit", + "status": "triaged", + "created_at": "2026-07-02", + "source_inventory_baseline": "docs/research/interpretation_source_full_classification_2026_07_02.md", + "runtime_effect": "none_audit_only", + "boundary": "This audit classifies a first batch of priority_1 references candidates. It does not directly promote files into the runtime source pack; promotion still requires source review, conflict arbitration, and focused tests.", + "summary": { + "batch_size": 30, + "disposition_counts": { + "promote": 16, + "reference-only": 6, + "obsolete": 3, + "duplicate": 3, + "quarantine": 2 + }, + "selection_rule": "Picked 30 files from references/ that look closest to rule-source material, while deliberately including duplicate, obsolete, and privacy-sensitive traps.", + "next_gate": "Only promote entries after mapping each file to a source-pack layer and adding workflow visibility tests." + }, + "entries": [ + { + "path": "references/argala-complete-guide.md", + "inventory_priority": "priority_1", + "inventory_classification": "reference_candidate", + "disposition": "promote", + "promotion_layer": "reference_layer_candidate", + "technique_area": "Jaimini Argala", + "reason": "Contains structured Argala/Virodha Argala rules and evaluation order; this is closer to a technique rule source than a research note.", + "source_caution": "Mixed classical/traditional/modern source label; require conflict notes before treating scoring details as authoritative.", + "next_action": "Promote as a Jaimini reference layer with a source-caution field and smoke test that strict workflows can see the layer." + }, + { + "path": "references/ashtakavarga-complete-system.md", + "inventory_priority": "priority_1", + "inventory_classification": "reference_candidate", + "disposition": "promote", + "promotion_layer": "reference_layer_candidate", + "technique_area": "Ashtakavarga", + "reason": "Provides BAV/SAV concepts, scoring thresholds, and usage rules needed by timing and transit interpretation.", + "source_caution": "Do not override existing calibrated Ashtakavarga code or oracle artifacts without parity evidence.", + "next_action": "Promote as a reference layer only after linking it to existing Ashtakavarga calculation outputs." + }, + { + "path": "references/badhaka-obstacle-planet-guide.md", + "inventory_priority": "priority_1", + "inventory_classification": "reference_candidate", + "disposition": "promote", + "promotion_layer": "reference_layer_candidate", + "technique_area": "Badhaka", + "reason": "Contains ascendant-based Badhaka lord rules and interpretive constraints that are currently underrepresented in the source pack.", + "source_caution": "Needs functional benefic/malefic arbitration when Badhaka lord also owns auspicious houses.", + "next_action": "Promote behind a Badhaka source layer and add a test requiring the layer in high-rigor audits." + }, + { + "path": "references/condition-dasha-complete.md", + "inventory_priority": "priority_1", + "inventory_classification": "reference_candidate", + "disposition": "promote", + "promotion_layer": "reference_layer_candidate", + "technique_area": "Conditional Dashas", + "reason": "Catalogs conditional Dasha applicability, which is important for avoiding single-system timing claims.", + "source_caution": "Applicability conditions must be machine-checked before the rule is used in interpretation.", + "next_action": "Promote as a conditional Dasha reference; keep runtime use gated by explicit condition checks." + }, + { + "path": "references/divisional-chart-deep-reading.md", + "inventory_priority": "priority_1", + "inventory_classification": "reference_candidate", + "disposition": "promote", + "promotion_layer": "primary_truth_candidate", + "technique_area": "Varga / Divisional Charts", + "reason": "Defines domain-specific divisional chart reading logic and directly supports D10/D2/D11/D9 high-rigor requirements.", + "source_caution": "Must be reconciled with existing frontend varga summaries before becoming a single truth source.", + "next_action": "Promote as the primary divisional-chart methodology candidate, then map quick references as duplicate/reference-only." + }, + { + "path": "references/event_judgment_skeleton.md", + "inventory_priority": "priority_1", + "inventory_classification": "reference_candidate", + "disposition": "promote", + "promotion_layer": "primary_truth_candidate", + "technique_area": "Event Judgment Workflow", + "reason": "Matches the current strict-workflow direction: promise, activation, evidence ledger, MEVG, and confidence downgrade boundaries.", + "source_caution": "Workflow source only; it does not itself supply classical rule content.", + "next_action": "Promote as a primary workflow source after adding tests that fortune workflows expose this layer." + }, + { + "path": "references/jaimini-complete-system.md", + "inventory_priority": "priority_1", + "inventory_classification": "reference_candidate", + "disposition": "promote", + "promotion_layer": "reference_layer_candidate", + "technique_area": "Jaimini", + "reason": "Contains Karaka, Karakamsha, Chara Dasha, and Jaimini aspect material needed for non-Vimshottari cross-checks.", + "source_caution": "Document itself states Chara Dasha timing is partial and needs KN Rao/PVN Rao/Iranganti regression validation.", + "next_action": "Promote with a partial-timing boundary; do not use it to claim Chara Dasha closure." + }, + { + "path": "references/kp-astrology-complete-system.md", + "inventory_priority": "priority_1", + "inventory_classification": "reference_candidate", + "disposition": "promote", + "promotion_layer": "reference_layer_candidate", + "technique_area": "KP Astrology", + "reason": "A complete KP system reference is useful for event timing cross-checks and source-pack awareness.", + "source_caution": "KP is a separate school; it must be labeled as KP reference, not silently merged into Parashari/Jaimini logic.", + "next_action": "Promote as a separate KP reference layer with school-boundary metadata." + }, + { + "path": "references/planetary-dignity-complete-reference.md", + "inventory_priority": "priority_1", + "inventory_classification": "reference_candidate", + "disposition": "promote", + "promotion_layer": "primary_truth_candidate", + "technique_area": "Planetary Dignity", + "reason": "Contains core dignity, exaltation/debilitation, moolatrikona, and friendship rules used across all interpretive domains.", + "source_caution": "Disputed dignity ranges must be represented as conflicts rather than flattened.", + "next_action": "Promote as a core rule-source candidate with conflict metadata for disputed traditions." + }, + { + "path": "references/pratyantar-calculation-guide.md", + "inventory_priority": "priority_1", + "inventory_classification": "reference_candidate", + "disposition": "promote", + "promotion_layer": "reference_layer_candidate", + "technique_area": "Sub-period Dashas", + "reason": "Gives calculation logic for Pratyantar/Sookshma/Prana layers needed for month-level or event-level timing checks.", + "source_caution": "Calculation formulas must defer to tested code and oracle parity; this file is explanatory until validated.", + "next_action": "Promote as a calculation reference and link to Dasha calculator tests." + }, + { + "path": "references/retrograde-combustion-war-guide.md", + "inventory_priority": "priority_1", + "inventory_classification": "reference_candidate", + "disposition": "promote", + "promotion_layer": "primary_truth_candidate", + "technique_area": "Planetary Conditions", + "reason": "Retrograde, combustion, and planetary war rules are cross-domain modifiers and should be visible to every serious interpretation workflow.", + "source_caution": "Combustion thresholds vary by tradition; rule output must preserve threshold source.", + "next_action": "Promote as a planetary-condition source after adding source-pack exposure tests." + }, + { + "path": "references/shadbala-complete-methodology.md", + "inventory_priority": "priority_1", + "inventory_classification": "reference_candidate", + "disposition": "promote", + "promotion_layer": "reference_layer_candidate", + "technique_area": "Shadbala", + "reason": "Provides Shadbala dimensions and interpretive boundaries needed for high-rigor raw-data delivery.", + "source_caution": "The file itself marks absolute calibration as partial; use as methodology, not as proof of numeric closure.", + "next_action": "Promote with an explicit calibration-boundary field and pair with oracle evidence." + }, + { + "path": "references/tajika-yoga-complete-guide.md", + "inventory_priority": "priority_1", + "inventory_classification": "reference_candidate", + "disposition": "promote", + "promotion_layer": "reference_layer_candidate", + "technique_area": "Tajika / Varshaphala", + "reason": "A complete Tajika yoga reference is needed for annual prediction work and 2027-2030 year-window analysis.", + "source_caution": "Current Tajika implementation remains target-set closed rather than full traditional annual prediction closure.", + "next_action": "Promote as a Tajika reference layer without claiming annual prediction closure." + }, + { + "path": "references/transit-multi-reference-guide.md", + "inventory_priority": "priority_1", + "inventory_classification": "reference_candidate", + "disposition": "promote", + "promotion_layer": "primary_truth_candidate", + "technique_area": "Transit", + "reason": "Codifies multi-reference transit evaluation from Lagna, Moon, AL, and divisional anchors, preventing single-anchor transit claims.", + "source_caution": "Transit interpretation still needs MEVG and real-case calibration for outcome language.", + "next_action": "Promote as a primary transit methodology source and wire into technique audit visibility." + }, + { + "path": "references/vimshottari_dasha_guide.md", + "inventory_priority": "priority_1", + "inventory_classification": "reference_candidate", + "disposition": "promote", + "promotion_layer": "primary_truth_candidate", + "technique_area": "Vimshottari Dasha", + "reason": "Core Vimshottari Dasha guide; required for timing baseline and for explaining Dasha boundaries.", + "source_caution": "Must not be used alone for high-rigor timing; pair with Narayana/Jaimini where required.", + "next_action": "Promote as a primary Dasha methodology source with dual-Dasha boundary text." + }, + { + "path": "references/prediction-boundary-protocol.md", + "inventory_priority": "priority_1", + "inventory_classification": "reference_candidate", + "disposition": "promote", + "promotion_layer": "primary_truth_candidate", + "technique_area": "Prediction Boundaries", + "reason": "Provides explicit promise-vs-activation, confidence, and precision boundaries that should govern user-facing forecasts.", + "source_caution": "Modern synthesis; it is a governance boundary, not a classical rule source.", + "next_action": "Promote as a boundary/governance source and require audit tables to reference it when downgrading claims." + }, + { + "path": "references/dasa-convergence-methodology.md", + "inventory_priority": "priority_1", + "inventory_classification": "reference_candidate", + "disposition": "reference-only", + "promotion_layer": "reference_layer_candidate", + "technique_area": "Dasha Convergence", + "reason": "Useful methodology, but parts are older than the current strict dual-Dasha and oracle-closure direction.", + "source_caution": "Contains historical statements about Narayana/PDF/software availability that require reconciliation.", + "next_action": "Keep as reference-only until reconciled against current multi-Dasha convergence protocol and Narayana status." + }, + { + "path": "references/dasha-transit-method.md", + "inventory_priority": "priority_1", + "inventory_classification": "reference_candidate", + "disposition": "reference-only", + "promotion_layer": "reference_layer_candidate", + "technique_area": "Dasha + Transit", + "reason": "Good explanatory bridge between Dasha and transit, but it overlaps newer event-judgment and transit multi-reference sources.", + "source_caution": "Examples and wording may predate MEVG and real-case calibration gates.", + "next_action": "Use as supporting reference after primary workflow sources are promoted." + }, + { + "path": "references/multi-dasha-convergence-protocol.md", + "inventory_priority": "priority_1", + "inventory_classification": "reference_candidate", + "disposition": "reference-only", + "promotion_layer": "reference_layer_candidate", + "technique_area": "Multi-Dasha Convergence", + "reason": "Valuable modern convergence framework, but it is explicitly derived and should not outrank classical or validated engine outputs.", + "source_caution": "Treat as a governance method; do not treat weighted scores as traditional authority.", + "next_action": "Keep as reference-only until score weights are backed by benchmark tests." + }, + { + "path": "references/varga-divisional-charts-quick-reference.md", + "inventory_priority": "priority_1", + "inventory_classification": "reference_candidate", + "disposition": "reference-only", + "promotion_layer": "reference_layer_candidate", + "technique_area": "Varga Quick Reference", + "reason": "Useful quick map of divisional chart domains, but less source-like than the deeper divisional reading guide.", + "source_caution": "Quick references can omit conflict conditions and should not be the sole truth layer.", + "next_action": "Keep as operator-facing reference after the deep divisional guide is promoted." + }, + { + "path": "references/yoga-strength-scoring-system.md", + "inventory_priority": "priority_1", + "inventory_classification": "reference_candidate", + "disposition": "reference-only", + "promotion_layer": "reference_layer_candidate", + "technique_area": "Yoga Scoring", + "reason": "The scoring framework is useful for consistency, but it is a modern derived layer rather than a primary textual authority.", + "source_caution": "Scores need benchmark calibration and must not overwrite named-yoga detection rules.", + "next_action": "Keep as reference-only until benchmark-backed weights exist." + }, + { + "path": "references/comprehensive-reading-workflow.md", + "inventory_priority": "priority_1", + "inventory_classification": "reference_candidate", + "disposition": "reference-only", + "promotion_layer": "reference_layer_candidate", + "technique_area": "Reading Workflow", + "reason": "Broad workflow document that can guide reader structure, but it is not itself a rule-source file.", + "source_caution": "May duplicate newer strict workflow and event judgment skeleton requirements.", + "next_action": "Keep as reference-only; extract only non-duplicative checklist items in a later batch." + }, + { + "path": "references/varga-system-quick-reference.md", + "inventory_priority": "priority_1", + "inventory_classification": "reference_candidate", + "disposition": "duplicate", + "promotion_layer": "not_truth_source", + "technique_area": "Varga Quick Reference", + "reason": "Overlaps the deeper divisional chart guide and the other varga quick reference.", + "source_caution": "Duplicate quick references are high-risk for inconsistent domain maps.", + "next_action": "Do not promote; compare against the deep divisional guide and merge only unique deltas." + }, + { + "path": "references/yoga-list-chinese.md", + "inventory_priority": "priority_1", + "inventory_classification": "reference_candidate", + "disposition": "duplicate", + "promotion_layer": "not_truth_source", + "technique_area": "Yoga List", + "reason": "A Chinese yoga list duplicates existing yoga rule assets and frontend yoga detail files.", + "source_caution": "List-only material can drift from machine-readable yoga rules.", + "next_action": "Use only as translation/reference comparison after `references/yoga_rules.json` remains canonical." + }, + { + "path": "references/analysis-full-reading-v4.0.md", + "inventory_priority": "priority_1", + "inventory_classification": "reference_candidate", + "disposition": "duplicate", + "promotion_layer": "not_truth_source", + "technique_area": "Full Reading Workflow", + "reason": "Historical full-reading workflow overlaps the current source-pack and strict workflow architecture.", + "source_caution": "Versioned reading docs can silently reintroduce old output standards.", + "next_action": "Do not promote directly; compare only for missing checklist deltas." + }, + { + "path": "references/analysis-full-reading-v1.8-review.md", + "inventory_priority": "priority_1", + "inventory_classification": "reference_candidate", + "disposition": "obsolete", + "promotion_layer": "not_truth_source", + "technique_area": "Historical Review", + "reason": "Older review document superseded by later workflow and strict source-pack governance.", + "source_caution": "Using it as truth could roll back MEVG/source-pack improvements.", + "next_action": "Keep as historical context only." + }, + { + "path": "references/audit-skill-full-test-2026-05-04.md", + "inventory_priority": "priority_1", + "inventory_classification": "reference_candidate", + "disposition": "obsolete", + "promotion_layer": "not_truth_source", + "technique_area": "Historical Audit", + "reason": "Test/audit snapshot from an earlier skill state; it is evidence history rather than a rule source.", + "source_caution": "Historical pass/fail claims can conflict with current July source inventory.", + "next_action": "Archive as audit history; do not expose in interpretation source pack." + }, + { + "path": "references/feature-gap-matrix-2026.md", + "inventory_priority": "priority_1", + "inventory_classification": "reference_candidate", + "disposition": "obsolete", + "promotion_layer": "not_truth_source", + "technique_area": "Gap Matrix", + "reason": "A gap matrix is useful planning history but is not a stable rule or interpretive source.", + "source_caution": "Older gap claims may already be closed by later commits.", + "next_action": "Use only when researching historical priorities." + }, + { + "path": "references/kp-practical-event-timing.md", + "inventory_priority": "priority_1", + "inventory_classification": "reference_candidate", + "disposition": "quarantine", + "promotion_layer": "not_truth_source", + "technique_area": "KP Event Timing", + "reason": "The file is a privacy-protected placeholder whose substantive content was removed.", + "source_caution": "Do not infer rules from removed private consultation material.", + "next_action": "Keep quarantined; rebuild KP event timing only from public sources or synthetic smoke cases." + }, + { + "path": "references/consultation-case-library.md", + "inventory_priority": "priority_1", + "inventory_classification": "reference_candidate", + "disposition": "quarantine", + "promotion_layer": "not_truth_source", + "technique_area": "Consultation Cases", + "reason": "A case-library index can support real-case calibration, but it is not a rules source and may contain sourced-case/privacy boundaries.", + "source_caution": "Requires source licensing, privacy review, and MEVG evidence grading before any runtime use.", + "next_action": "Keep outside source pack; later classify under real-case calibration rather than interpretation truth." + } + ] +} diff --git a/docs/research/interpretation_source_priority1_batch1_promotion_audit_2026_07_02.md b/docs/research/interpretation_source_priority1_batch1_promotion_audit_2026_07_02.md new file mode 100644 index 00000000..0158c7cf --- /dev/null +++ b/docs/research/interpretation_source_priority1_batch1_promotion_audit_2026_07_02.md @@ -0,0 +1,79 @@ +# Priority 1 第一批升格审计 + +日期:2026-07-02 +范围:`references/` 中最像“规则源头”的 30 个 priority_1 `reference_candidate` 文件。 +基线:[interpretation_source_full_classification_2026_07_02.md](interpretation_source_full_classification_2026_07_02.md) + +这份审计只做分级,不直接接入 runtime source pack。后续真正升格时,还需要 source-pack 显式调用链、冲突仲裁、可见性测试,以及必要的 oracle / MEVG / real-case 校准。In short: promotion still requires tested wiring, not just a nicer label. + +## 处置定义 + +- `promote`:可以进入下一步升格设计,作为 primary truth candidate 或 reference layer candidate。 +- `reference-only`:有参考价值,但不能压过主规则源头,或需要等待权重/旧状态 reconciliation。 +- `obsolete`:历史状态、旧审计、旧缺口矩阵;可保留追溯,不应进入解释主链。 +- `duplicate`:与更强源头重复,后续只抽差异,不直接升格。 +- `quarantine`:隐私、来源、内容移除、或案例边界不清;不得作为解释规则源。 + +## 汇总 + +| disposition | count | meaning | +|---|---:|---| +| `promote` | 16 | 第一批可进入升格候选 | +| `reference-only` | 6 | 辅助参考,暂不做主规则 | +| `obsolete` | 3 | 历史文件 | +| `duplicate` | 3 | 重复源 | +| `quarantine` | 2 | 隔离,不进主链 | + +## Promote + +| file | layer | reason | +|---|---|---| +| `references/argala-complete-guide.md` | reference layer | Argala/Virodha Argala 规则结构完整 | +| `references/ashtakavarga-complete-system.md` | reference layer | BAV/SAV 与 transit 评分方法需要可见 | +| `references/badhaka-obstacle-planet-guide.md` | reference layer | Badhaka lord 规则目前未充分接入 | +| `references/condition-dasha-complete.md` | reference layer | 条件大运适用性可防止单系统误判 | +| `references/divisional-chart-deep-reading.md` | primary candidate | 分盘深读支持 D10/D2/D11/D9 等硬约束 | +| `references/event_judgment_skeleton.md` | primary candidate | 与 strict workflow、MEVG、evidence ledger 一致 | +| `references/jaimini-complete-system.md` | reference layer | Jaimini Karaka/Chara/Karakamsha 可做非 Vimshottari 交叉 | +| `references/kp-astrology-complete-system.md` | reference layer | KP 可作为独立学派的事件 timing 参考 | +| `references/planetary-dignity-complete-reference.md` | primary candidate | 庙旺陷、moolatrikona、友敌关系是跨领域基础规则 | +| `references/pratyantar-calculation-guide.md` | reference layer | 子周期计算解释支持月级和事件级 timing | +| `references/retrograde-combustion-war-guide.md` | primary candidate | 逆行、燃烧、星战是跨领域修正层 | +| `references/shadbala-complete-methodology.md` | reference layer | Shadbala 方法论需要进入高严谨原始依据层 | +| `references/tajika-yoga-complete-guide.md` | reference layer | Tajika 年运需要规则可见,但不能声称完整闭环 | +| `references/transit-multi-reference-guide.md` | primary candidate | 多参考点 transit 可防止单锚点判断 | +| `references/vimshottari_dasha_guide.md` | primary candidate | Vimshottari 是 timing baseline | +| `references/prediction-boundary-protocol.md` | primary candidate | 预测精度、promise vs activation、降级边界必须显式存在 | + +## Reference Only + +| file | reason | +|---|---| +| `references/dasa-convergence-methodology.md` | 有价值,但包含旧 Narayana/PDF/software 状态,需要与当前实现核对 | +| `references/dasha-transit-method.md` | 有解释价值,但被 event skeleton 与 transit multi-reference 覆盖一部分 | +| `references/multi-dasha-convergence-protocol.md` | 现代评分框架,需 benchmark 支撑权重 | +| `references/varga-divisional-charts-quick-reference.md` | 快速参考,不应压过 deep reading 源头 | +| `references/yoga-strength-scoring-system.md` | 现代评分层,不能覆盖 yoga detection 真源 | +| `references/comprehensive-reading-workflow.md` | 广义流程参考,不是规则源头 | + +## Duplicate / Obsolete / Quarantine + +| disposition | file | reason | +|---|---|---| +| `duplicate` | `references/varga-system-quick-reference.md` | 与 deep reading 和 quick reference 重复 | +| `duplicate` | `references/yoga-list-chinese.md` | 与 machine-readable yoga rules / frontend yoga details 重复 | +| `duplicate` | `references/analysis-full-reading-v4.0.md` | 历史 full-reading workflow,与当前 strict source-pack 架构重复 | +| `obsolete` | `references/analysis-full-reading-v1.8-review.md` | 旧版 review,不应回灌主链 | +| `obsolete` | `references/audit-skill-full-test-2026-05-04.md` | 旧审计快照 | +| `obsolete` | `references/feature-gap-matrix-2026.md` | 旧缺口矩阵,后续状态可能已变化 | +| `quarantine` | `references/kp-practical-event-timing.md` | 内容已移除且有隐私保护声明 | +| `quarantine` | `references/consultation-case-library.md` | 案例库索引,需隐私/来源/MEVG 分级;不能作为规则源 | + +## 下一步 + +第一批真正升格时建议按这个顺序: + +1. 先接 `prediction-boundary-protocol`、`event_judgment_skeleton`、`planetary-dignity-complete-reference`、`retrograde-combustion-war-guide`、`transit-multi-reference-guide`。 +2. 再接分盘、Dasha、Ashtakavarga、Shadbala、Tajika、Jaimini、KP 等专题 reference layer。 +3. 对 duplicate 只做差异抽取;对 obsolete 只保留历史;对 quarantine 不进入 source pack。 + diff --git a/progress.md b/progress.md index 0e7ac91f..4565c218 100644 --- a/progress.md +++ b/progress.md @@ -752,3 +752,11 @@ - 重点优先层已覆盖:`references/` -> reference_candidate,`references/real_case_studies/` -> real_case_calibration,`open_source_sources/rishi-ai-mcp` 与 `vedic-astro-skills` -> open_source_reference。 - 普通研究流水账与本地草稿已降级:`docs/research` -> research_governance,`docs/research/local_drafts` -> quarantined_draft / not_truth_source。 - 新增快照文档:`docs/research/interpretation_source_full_classification_2026_07_02.md`。 + +## 2026-07-02T14:44:00+08:00 - priority_1 references 第一批升格审计 + +- 从 `references/` 的 priority_1 `reference_candidate` 中挑出 30 个最像规则源头的文件,形成第一批升格审计包。 +- 新增机器可测审计 JSON:`docs/research/interpretation_source_priority1_batch1_promotion_audit_2026_07_02.json`。 +- 新增人读审计说明:`docs/research/interpretation_source_priority1_batch1_promotion_audit_2026_07_02.md`。 +- 当前处置:`promote=16`、`reference-only=6`、`obsolete=3`、`duplicate=3`、`quarantine=2`。 +- 明确边界:本批只做 audit-only 分级,不直接接入 runtime source pack;后续升格仍需调用链、冲突仲裁、可见性测试。 diff --git a/tests/test_interpretation_source_priority1_batch1_audit.py b/tests/test_interpretation_source_priority1_batch1_audit.py new file mode 100644 index 00000000..b82cfef0 --- /dev/null +++ b/tests/test_interpretation_source_priority1_batch1_audit.py @@ -0,0 +1,85 @@ +#!/usr/bin/env python3 +"""Regression tests for the first priority-1 reference promotion audit.""" + +from __future__ import annotations + +import json +from pathlib import Path + + +ROOT = Path(__file__).resolve().parents[1] +AUDIT_JSON = ROOT / "docs" / "research" / "interpretation_source_priority1_batch1_promotion_audit_2026_07_02.json" +AUDIT_MD = ROOT / "docs" / "research" / "interpretation_source_priority1_batch1_promotion_audit_2026_07_02.md" +INVENTORY_REPORT = ROOT / "docs" / "research" / "interpretation_source_full_classification_2026_07_02.md" + + +def _load_audit() -> dict: + return json.loads(AUDIT_JSON.read_text(encoding="utf-8")) + + +def test_priority1_batch1_audit_has_required_shape_and_dispositions() -> None: + audit = _load_audit() + entries = audit["entries"] + + assert audit["scope"] == "interpretation_source_priority1_batch1_promotion_audit" + assert audit["status"] == "triaged" + assert 20 <= len(entries) <= 30 + assert audit["summary"]["batch_size"] == len(entries) + assert audit["source_inventory_baseline"] == str(INVENTORY_REPORT.relative_to(ROOT)) + assert audit["runtime_effect"] == "none_audit_only" + + dispositions = {entry["disposition"] for entry in entries} + assert dispositions == {"promote", "reference-only", "obsolete", "duplicate", "quarantine"} + + for entry in entries: + assert entry["path"].startswith("references/") + assert entry["inventory_priority"] == "priority_1" + assert entry["inventory_classification"] == "reference_candidate" + assert entry["promotion_layer"] in { + "primary_truth_candidate", + "reference_layer_candidate", + "not_truth_source", + } + assert entry["reason"].strip() + assert entry["next_action"].strip() + assert entry["source_caution"].strip() + + +def test_priority1_batch1_audit_locks_high_risk_source_decisions() -> None: + by_path = {entry["path"]: entry for entry in _load_audit()["entries"]} + + promote_paths = { + "references/argala-complete-guide.md", + "references/badhaka-obstacle-planet-guide.md", + "references/event_judgment_skeleton.md", + "references/planetary-dignity-complete-reference.md", + "references/retrograde-combustion-war-guide.md", + "references/transit-multi-reference-guide.md", + "references/vimshottari_dasha_guide.md", + } + for path in promote_paths: + assert by_path[path]["disposition"] == "promote" + assert by_path[path]["promotion_layer"] in { + "primary_truth_candidate", + "reference_layer_candidate", + } + + assert by_path["references/kp-practical-event-timing.md"]["disposition"] == "quarantine" + assert by_path["references/analysis-full-reading-v1.8-review.md"]["disposition"] == "obsolete" + assert by_path["references/varga-system-quick-reference.md"]["disposition"] == "duplicate" + assert by_path["references/yoga-list-chinese.md"]["disposition"] == "duplicate" + assert by_path["references/dasa-convergence-methodology.md"]["disposition"] == "reference-only" + assert by_path["references/yoga-strength-scoring-system.md"]["disposition"] == "reference-only" + + +def test_priority1_batch1_audit_markdown_states_boundaries() -> None: + text = AUDIT_MD.read_text(encoding="utf-8") + + assert "第一批升格审计" in text + assert "`promote`" in text + assert "`reference-only`" in text + assert "`obsolete`" in text + assert "`duplicate`" in text + assert "`quarantine`" in text + assert "不直接接入 runtime source pack" in text + assert "promotion still requires" in text