feat(skill): advance tajika annual oracle closure

This commit is contained in:
732642856
2026-06-27 03:09:17 +08:00
parent 0f1c1406bb
commit cbfb9eac5d
19 changed files with 503 additions and 54 deletions
+2 -1
View File
@@ -145,6 +145,7 @@ description: 印度占星(Jyotish)专业解盘与推运系统。核心能力
- Dasha-only 外部证据当前目标集已闭环:`dasha_external_oracle_evidence_validation.valid_dasha_packets: 3/3`Steve Jobs / Lahiri、REDACTED_YEAR Lahiri 模板与 1800 Delhi historical epoch 的 Vimshottari 起始边界来自 PyJHora 4.8.7 隔离黑盒 stdout artifact。
- 全局 Dasha/Shadbala Calibration Status 仍未完成:`external_oracle_evidence_validation.valid_packets: 4``ready_for_calibration: 4`;Shadbala 外部绝对值当前目标集已通过 4/4,Raman 扩展样本与非 Dasha 靶点尚未封顶。
- Tajika/Sahams 年运外部样本已开始闭环:`tajika_sahams_annual_benchmark_dashboard.ready_for_calibration: 1/5`Steve Jobs 1984 Varshaphala/Lahiri 的 solar return、Varsha Lagna、Muntha、Year Lord、Mudda Dasha 首主、三项 Sahams 与 Tajika Yogas 已由 PyJHora 4.8.7 隔离黑盒 artifact 验证,下一优先级为 Einstein 1905。仍不得声称 Tajika/Sahams 年运体系已全局封顶。
- D1/D9/SAV 高可信;Dasha 精细日期可引用已验证 Dasha-only 样本的局部进度,但不得把全部大运边界、Shadbala 绝对值或全局精度说成已完成外部校准。
- `production_tuning_allowed: false` 前,禁止为了贴合单份 PDF、单个 JHora 截图或本仓库本地输出而改生产常数。
- 对普通用户的建议话术:基础落座、D9、SAV 可作为稳定证据;当前 Dasha-only 目标集已完成外部黑盒验证,但多 Dasha 家族、Antardasha/Pratyantar 细边界仍需扩展;Shadbala 当前目标集已有四个外部六分量样本,绝对值断语可引用 4/4 闭合进度;但跨软件差异、Raman 扩展样本与公开书例仍需更多证据后再提升到全局置信。
@@ -270,7 +271,7 @@ python3 scripts/validate_interpretation_templates.py --format markdown
5. **Prashna 分支工作流**
- 问事类型分支、裁决链、时机判断仍需更稳定的传统链路
6. **Varshaphala / Tajika / Sahams 年运裁决深度**
- 年盘骨架已在,事件裁决权重层仍需继续成熟
- 年盘骨架已在,第一条 Steve Jobs 1984 外部年运样本已闭环;但整体仍只有 `1/5`事件裁决权重层、Einstein 1905 等后续样本仍需继续成熟
7. **Kalachakra / Narayana 等替代 Dasha 的成熟度边界**
- 已有覆盖,但部分子层、边界口径、外部黑盒对照仍需继续收紧
8. **高阶解释层整合**
@@ -1,12 +1,12 @@
# Jyotish External Oracle Closure Master Dashboard
Generated: `2026-06-26T18:30:41.843216+00:00`
Generated: `2026-06-26T19:05:03.531931+00:00`
## Summary
- total_tasks: `12`
- external_verified_tasks: `7`
- open_tasks: `5`
- external_verified_tasks: `8`
- open_tasks: `4`
- can_claim_global_oracle_closure: `false`
- production_tuning_allowed: `false`
@@ -15,20 +15,20 @@ Generated: `2026-06-26T18:30:41.843216+00:00`
| front | tasks | verified | first priority | missing fields | manual entries | metadata missing | target missing |
|---|---:|---:|---|---:|---:|---:|---:|
| `dasha` | 3 | 3 | `complete` | 0 | 0 | 0 | 0 |
| `tajika_sahams` | 5 | 0 | `template_steve_jobs_varshaphala_1984_lahiri` | 15 | 15 | 5 | 10 |
| `tajika_sahams` | 5 | 1 | `template_einstein_varshaphala_1905_lahiri` | 15 | 15 | 5 | 10 |
| `shadbala` | 4 | 4 | `template_redacted_place_shadbala_raman` | 55 | 55 | 5 | 50 |
## Next Action Order
### tajika_sahams
- case_id: `template_steve_jobs_varshaphala_1984_lahiri`
- capture_id: `external_template_steve_jobs_varshaphala_1984_lahiri`
- case_id: `template_einstein_varshaphala_1905_lahiri`
- capture_id: `external_template_einstein_varshaphala_1905_lahiri`
- missing_field_count: `15`
- manual_entry_count: `15`
```bash
python3 scripts/tajika_annual_oracle_queue.py --oracle-file references/oracle/tajika_annual_oracle_cases.json --apply-packet references/oracle/artifacts/pending_packets/external_template_steve_jobs_varshaphala_1984_lahiri.json --format json
python3 scripts/tajika_annual_oracle_queue.py --oracle-file references/oracle/tajika_annual_oracle_cases.json --apply-packet references/oracle/artifacts/pending_packets/external_template_einstein_varshaphala_1905_lahiri.json --format json
```
## Boundary
@@ -1,6 +1,6 @@
# Jyotish Skill Gap Truth Audit
Generated: `2026-06-26T18:30:42.500897+00:00`
Generated: `2026-06-26T19:05:04.292300+00:00`
## Public Claim Boundary
@@ -19,8 +19,8 @@ Generated: `2026-06-26T18:30:42.500897+00:00`
## External Oracle Closure
- total_tasks: `12`
- external_verified_tasks: `7`
- open_tasks: `5`
- external_verified_tasks: `8`
- open_tasks: `4`
- can_claim_global_oracle_closure: `false`
## Remaining Hard Fronts
@@ -51,7 +51,7 @@ Generated: `2026-06-26T18:30:42.500897+00:00`
- id: `tajika_sahams_annual_closure`
- priority: `P0`
- status: `active_gap`
- current_truth: Varshaphala, Muntha, Year Lord, Mudda Dasha and Sahams have local structure, but annual judgment depth and external sample closure remain incomplete.
- current_truth: Varshaphala, Muntha, Year Lord, Mudda Dasha and Sahams have local structure, and the first annual external packet is now accepted at 1/5 for Steve Jobs 1984 Lahiri via PyJHora 4.8.7 black-box artifact; annual judgment depth, Einstein 1905 and the remaining external sample set are still incomplete.
### Article-level interpretation template industrialization
@@ -0,0 +1,26 @@
# Tajika/Sahams Annual Benchmark Dashboard
Generated: `2026-06-26T19:05:02.797254+00:00`
## Annual Oracle Readiness
- total_tasks: `5`
- ready_for_collection: `4`
- ready_for_calibration: `1`
- production_tuning_allowed: `false`
## Annual Closure Claim
- can_claim_tajika_sahams_closure: `false`
- reason: Do not claim annual-chart closure until every template row is promoted to external_verified with human-reviewable artifacts.
## Remaining Gap
Solar return exact time, Varsha Lagna, Muntha, Year Lord, Mudda Dasha first lord, Sahams and Tajika Yogas still need external JHora/PyJHora/book-example evidence before the Jyotish skill can claim Tajika/Sahams annual closure.
## Next Actions
- Fill the next annual evidence packet from JHora or PyJHora: template_einstein_varshaphala_1905_lahiri.
- Add solar return datetime and Varsha Lagna tolerance checks after the first external row exists.
- Add Saham-specific tolerance checks for Punya, Rajya and Vivah Saham.
- Expand the annual benchmark with at least one printed Varshaphala example.
@@ -0,0 +1,81 @@
# Tajika/Sahams Annual Closure Status
- annual_task_count: `5`
- external_verified_annual_tasks: `1`
- can_claim_tajika_sahams_closure: `false`
- production_tuning_allowed: `false`
## First Priority Packet
- case_id: `template_einstein_varshaphala_1905_lahiri`
- capture_id: `external_template_einstein_varshaphala_1905_lahiri`
- packet_path: `references/oracle/artifacts/pending_packets/external_template_einstein_varshaphala_1905_lahiri.json`
- required_target_fields: `target.solar_return_datetime, target.varsha_lagna_deg, target.muntha_sign, target.year_lord, target.mudda_dasha_first_lord, target.sahams.punya_saham, target.sahams.rajya_saham, target.sahams.vivah_saham, target.tajika_yogas, target.source_artifact`
## Missing Summary
- metadata: `5`
- target: `10`
## Prefilled Fields
- status: `draft`
- promotion_status_after_fill: `external_verified`
- metadata:
- ayanamsa: `lahiri`
- node_mode: `mean`
- timezone: `0.883333`
- annual_system: `varshaphala`
- target_year: `1905`
- settings:
- ayanamsa: `lahiri`
- node_mode: `mean`
- annual_system: `varshaphala`
- target_year: `1905`
## Manual Fill Plan
- status_value: `external_verified`
- manual_entry_count: `15`
## Missing Fields
- `metadata.tool_name`
- `metadata.tool_version_or_url`
- `metadata.capture_date`
- `metadata.operator_note`
- `metadata.source_artifact`
- `target.solar_return_datetime`
- `target.varsha_lagna_deg`
- `target.muntha_sign`
- `target.year_lord`
- `target.mudda_dasha_first_lord`
- `target.sahams.punya_saham`
- `target.sahams.rajya_saham`
- `target.sahams.vivah_saham`
- `target.tajika_yogas`
- `target.source_artifact`
## Commands
```bash
python3 scripts/tajika_annual_oracle_queue.py --oracle-file references/oracle/tajika_annual_oracle_cases.json --apply-packet references/oracle/artifacts/pending_packets/external_template_einstein_varshaphala_1905_lahiri.json --format json
```
```bash
python3 scripts/tajika_annual_oracle_queue.py --oracle-file references/oracle/tajika_annual_oracle_cases.json --format json && python3 scripts/tajika_annual_benchmark_dashboard.py --oracle-file references/oracle/tajika_annual_oracle_cases.json --format json
```
## Next Actions
- Fill solar return datetime, Varsha Lagna, Muntha, Year Lord, first Mudda Dasha lord, three Sahams and Tajika Yogas from an external annual source.
- Document timezone/DST and solar-return convention before promoting the row.
- Set the row to external_verified only after target.source_artifact and metadata.source_artifact point to reviewable evidence.
- Regenerate the annual queue and benchmark dashboard.
## Boundary
This board isolates Tajika/Sahams annual closure. Local scripts/varshaphala.py output is not an external oracle and must not be used as production tuning evidence.
+7 -6
View File
@@ -99,12 +99,13 @@
## 四、缓解因素
| 因素 | 缓解效果 |
|------|---------|
| 土星入庙/旺相(本命或Transit) | 大幅减轻 → "刺痛"变"磨练" |
| Lagna主星强(Shadbala高) | 中度减轻 |
| 土星与Jupiter形成相位 | 吉星保护 |
| Ashtakavarga该宫SAV分高(>30 | 该领域抗压力强 |
| 因素 | 缓解效果 | 实战表现 |
|------|---------|---------|
| **本命形成强 Yoga(如 Sasa Yoga)且 Dasha 支持** | 显著调制负面效应 | "刺痛"更可能转化为训练、责任、竞争、考试、赛事或职场压力;是否获得奖项/地位必须再看10宫、11宫、D10、Dasha、AV与现实领域证据。 |
| 土星入庙/旺相(本命或Transit但非贵格) | 大幅减轻 | "刺痛"变"磨练",最终有收获 |
| Lagna主星强(Shadbala高) | 中度减轻 | 能扛住压力 |
| 土星与Jupiter形成相位 | 吉星保护 | 遇到困难有贵人兜底 |
| Ashtakavarga该宫SAV分高(>30) | 该领域抗压力强 | 外部动荡但核心盘面不崩 |
## 五、实战案例:示例案例命盘
@@ -0,0 +1,139 @@
{
"capture_id": "external_template_steve_jobs_varshaphala_1984_lahiri",
"status": "external_verified",
"case_id": "template_steve_jobs_varshaphala_1984_lahiri",
"birth": {
"year": 1955,
"month": 2,
"day": 24,
"hour": 19,
"minute": 15,
"second": 0,
"lat": 37.7749,
"lon": -122.4194,
"tz": -8
},
"settings": {
"ayanamsa": "lahiri",
"node_mode": "true",
"annual_system": "varshaphala",
"target_year": 1984
},
"required_metadata_fields": [
"tool_name",
"tool_version_or_url",
"capture_date",
"source_artifact",
"ayanamsa",
"node_mode",
"timezone",
"annual_system",
"target_year",
"operator_note"
],
"metadata": {
"tool_name": "PyJHora",
"tool_version_or_url": "PyJHora 4.8.7 isolated /tmp black-box run",
"capture_date": "2026-06-27",
"source_artifact": "references/oracle/artifacts/pyjhora_steve_jobs_varshaphala_1984_lahiri_stdout_20260627.txt",
"ayanamsa": "lahiri",
"node_mode": "PyJHora default",
"timezone": "UTC-08:00",
"annual_system": "Varshaphala/Tajika",
"target_year": 1984,
"operator_note": "Black-box annual output from isolated /tmp virtualenv. PyJHora AGPL code was not copied into this repository; only generated output is stored as external evidence. Year Lord direct call raised KeyError when Rahu appeared in candidates; packet records the filtered classical-planet workaround per PyJHora docstring boundary."
},
"target_placeholders": {
"target.solar_return_datetime": "1984-02-25T05:41:37-08:00",
"target.varsha_lagna_deg": 287.4007,
"target.muntha_sign": "Cancer",
"target.year_lord": "Mars",
"target.mudda_dasha_first_lord": "Sun",
"target.sahams.punya_saham": 249.1148,
"target.sahams.rajya_saham": 207.6343,
"target.sahams.vivah_saham": 8.8762,
"target.tajika_yogas": {
"eesarpha": [
[
0,
5
],
[
1,
3
],
[
2,
6
],
[
4,
5
]
],
"gairi_kamboola": null,
"ithasala": [
[
0,
1,
1
],
[
0,
4,
2
],
[
1,
4,
3
]
],
"kamboola": [
true,
[
[
1,
4
]
],
[
[
0,
4
],
[
1,
4
],
[
0,
1
],
[
0,
4
]
]
],
"khallasara": null,
"manahoo": [
[
0,
4,
10
]
],
"nakta": [],
"yamaya": []
},
"target.source_artifact": "references/oracle/artifacts/pyjhora_steve_jobs_varshaphala_1984_lahiri_stdout_20260627.txt"
},
"integrity_checks": {
"must_not_come_from_local_engine": true,
"requires_external_artifact": true,
"requires_status_external_verified_before_calibration": true,
"requires_solar_return_convention": true
},
"promotion_status_after_fill": "external_verified"
}
@@ -0,0 +1,30 @@
panchanga /Users/wuyongnaren added to system path ['', '/Library/Frameworks/Python.framework/Versions/3.11/lib/python311.zip', '/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11', '/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/lib-dynload', '/private/tmp/jyotish_pyjhora_blackbox/lib/python3.11/site-packages', '/Users/wuyongnaren']
/Users added to system path ['', '/Library/Frameworks/Python.framework/Versions/3.11/lib/python311.zip', '/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11', '/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/lib-dynload', '/private/tmp/jyotish_pyjhora_blackbox/lib/python3.11/site-packages', '/Users/wuyongnaren', '/Users']
house_planet_dict ['', '7', '', '', '', '', '2/6', '8', '1/4', 'L/5', '0/3', '']
house_planet_dict ['', '7', '', '', '', '', '2/6', '8', '1/4', 'L/5', '0/3', '']
house_planet_dict ['', '7', '', '', '', '', '2/6', '8', '1/4', 'L/5', '0/3', '']
_get_nakta_triples iy_list [(0, [(1, 4)])]
_get_nakta_triples iylist1 [(4, [(0, 1)])]
_get_nakta_triples iy_list [(0, [(1, 4)]), (4, [(0, 1)])]
house_planet_dict ['', '7', '', '', '', '', '2/6', '8', '1/4', 'L/5', '0/3', '']
ithasala_yoga_planet_pairs [(0, 1, 1), (0, 4, 2), (1, 4, 3)]
_get_nakta_triples iy_list [(0, [(1, 4)])]
_get_nakta_triples iylist1 [(4, [(0, 1)])]
_get_nakta_triples iy_list [(0, [(1, 4)]), (4, [(0, 1)])]
_yamaya_triples [(0, [(1, 4)]), (4, [(0, 1)])]
checking triples 0 12.51819523474876 1 4.232244722579111 4 4 12.51819523474876
checking triples 4 13.495962116843629 0 12.51819523474876 1 1 13.495962116843629
yamaya planet triples []
house_planet_dict ['', '7', '', '', '', '', '2/6', '8', '1/4', 'L/5', '0/3', '']
PYJHORA_BLACKBOX_VERSION 4.8.7
CASE_ID template_steve_jobs_varshaphala_1984_lahiri
DOB (1955, 2, 24)
TOB (19, 15, 0)
PLACE Place(Place='San Francisco, CA Steve Jobs Varshaphala 1984 template', latitude=37.7749, longitude=-122.4194, timezone=-8.0, elevation=0.0)
AYANAMSA LAHIRI
NODE_MODE PyJHora default
TARGET_YEAR 1984
YEARS_FROM_DOB_USED 30
NATAL_JD 2435163.3020833335
ANNUAL_CHART_RAW [['L', (9, 17.400729761262824)], [0, (10, 12.51819523474876)], [1, (8, 4.232244722579111)], [2, (6, 26.729647475518334)], [3, (10, 2.592766661293183)], [4, (8, 13.495962116843629)], [5, (9, 14.22730692496367)], [6, (6, 22.75179249306666)], [7, (1, 18.443240534378823)], [8, (7, 18.443240534378816)]]
TAJIKA_ANNUAL_VALUES_JSON {"mudda_dasha_first_lord": "Sun", "mudda_first_raw": [[0, 0], [1985, 2, 9, 7.255877505987883], 0.91], "muntha_sign": "Cancer", "muntha_sign_index": 3, "sahams": {"punya_saham": 249.1148, "rajya_saham": 207.6343, "vivah_saham": 8.8762}, "solar_return_datetime": "1984-02-25T05:41:37-08:00", "solar_return_raw": [[1984, 2, 25], "05:41:37"], "tajika_yogas": {"eesarpha": [[0, 5], [1, 3], [2, 6], [4, 5]], "gairi_kamboola": null, "ithasala": [[0, 1, 1], [0, 4, 2], [1, 4, 3]], "kamboola": [true, [[1, 4]], [[0, 4], [1, 4], [0, 1], [0, 4]]], "khallasara": null, "manahoo": [[0, 4, 10]], "nakta": [], "yamaya": []}, "varsha_lagna_deg": 287.4007, "year_lord": "Mars", "year_lord_boundary": {"candidate_policy": "PyJHora docstring says Rahu/Ketu do not form lord of the year; filtered candidates to classical planets 0..6 after direct call raised KeyError.", "direct": {"error": "KeyError: 7", "ok": false, "value": null}, "filtered_candidates": [0, 2, 5], "jd_at_years": 2446120.9930033335, "night_time_birth": false, "raw_candidates": [7, 0, 2, 5]}, "year_lord_raw": 2}
+102 -12
View File
@@ -9,7 +9,7 @@
"template_cases": [
{
"id": "template_steve_jobs_varshaphala_1984_lahiri",
"status": "template_only",
"status": "external_verified",
"source": "JHora Varshaphala screenshot / PyJHora black-box annual output / printed example",
"privacy": "public_figure_template",
"birth": {
@@ -30,20 +30,110 @@
"target_year": 1984
},
"target": {
"solar_return_datetime": null,
"varsha_lagna_deg": null,
"muntha_sign": null,
"year_lord": null,
"mudda_dasha_first_lord": null,
"solar_return_datetime": "1984-02-25T05:41:37-08:00",
"varsha_lagna_deg": 287.4007,
"muntha_sign": "Cancer",
"year_lord": "Mars",
"mudda_dasha_first_lord": "Sun",
"sahams": {
"punya_saham": null,
"rajya_saham": null,
"vivah_saham": null
"punya_saham": 249.1148,
"rajya_saham": 207.6343,
"vivah_saham": 8.8762
},
"tajika_yogas": null,
"source_artifact": null
"tajika_yogas": {
"eesarpha": [
[
0,
5
],
[
1,
3
],
[
2,
6
],
[
4,
5
]
],
"gairi_kamboola": null,
"ithasala": [
[
0,
1,
1
],
[
0,
4,
2
],
[
1,
4,
3
]
],
"kamboola": [
true,
[
[
1,
4
]
],
[
[
0,
4
],
[
1,
4
],
[
0,
1
],
[
0,
4
]
]
],
"khallasara": null,
"manahoo": [
[
0,
4,
10
]
],
"nakta": [],
"yamaya": []
},
"source_artifact": "references/oracle/artifacts/pyjhora_steve_jobs_varshaphala_1984_lahiri_stdout_20260627.txt"
},
"verification_note": "Fill only from external annual-chart output. Local scripts/varshaphala.py output is not valid evidence."
"verification_note": "Fill only from external annual-chart output. Local scripts/varshaphala.py output is not valid evidence.",
"evidence_packet": {
"capture_id": "external_template_steve_jobs_varshaphala_1984_lahiri",
"status": "external_verified",
"metadata": {
"tool_name": "PyJHora",
"tool_version_or_url": "PyJHora 4.8.7 isolated /tmp black-box run",
"capture_date": "2026-06-27",
"source_artifact": "references/oracle/artifacts/pyjhora_steve_jobs_varshaphala_1984_lahiri_stdout_20260627.txt",
"ayanamsa": "lahiri",
"node_mode": "PyJHora default",
"timezone": "UTC-08:00",
"annual_system": "Varshaphala/Tajika",
"target_year": 1984,
"operator_note": "Black-box annual output from isolated /tmp virtualenv. PyJHora AGPL code was not copied into this repository; only generated output is stored as external evidence. Year Lord direct call raised KeyError when Rahu appeared in candidates; packet records the filtered classical-planet workaround per PyJHora docstring boundary."
}
}
},
{
"id": "template_einstein_varshaphala_1905_lahiri",
+4 -4
View File
@@ -55,7 +55,7 @@
"title": "Tajika / Sahams annual closure",
"priority": "P0",
"status": "active_gap",
"current_truth": "Varshaphala, Muntha, Year Lord, Mudda Dasha and Sahams have local structure, but annual judgment depth and external sample closure remain incomplete.",
"current_truth": "Varshaphala, Muntha, Year Lord, Mudda Dasha and Sahams have local structure, and the first annual external packet is now accepted at 1/5 for Steve Jobs 1984 Lahiri via PyJHora 4.8.7 black-box artifact; annual judgment depth, Einstein 1905 and the remaining external sample set are still incomplete.",
"completion_standard": [
"External annual packets include solar return time, Varsha Lagna, Muntha, Year Lord, Mudda Dasha, key Sahams and Tajika Yogas.",
"Annual interpretation templates distinguish calculation evidence from judgment confidence.",
@@ -67,9 +67,9 @@
"Local Varshaphala output alone is external oracle evidence"
],
"next_actions": [
"Use scripts/tajika_annual_closure_status.py to fill the first annual packet.",
"Freeze the annual judgment template around Muntha, Year Lord, Mudda Dasha and Sahams.",
"Add public benchmark rows only after external annual evidence exists."
"Use scripts/tajika_annual_closure_status.py to fill the next annual packet: template_einstein_varshaphala_1905_lahiri.",
"Freeze the annual judgment template around Muntha, Year Lord, Mudda Dasha and Sahams without treating one annual sample as predictive closure.",
"Add public benchmark rows only after external annual evidence exists and scripts/tajika_annual_benchmark_dashboard.py reports readiness."
]
},
"article_template_industrialization": {
+12
View File
@@ -39,6 +39,18 @@
| 土星 | ~2.5年 | 人生阶段/业力 | 季度-年度 |
| Rahu/Ketu | ~1.5年 | 深层欲望/灵性 | 半年-年度 |
### 1.3 Natal Promise First Protocol(本命承诺优先协议)⚠️
**核心规则**:在判定任何凶星(特别是土星、火星、Rahu/Ketu)过境带来的压力、延迟或风险前,**必须首先核验本命盘是否承诺该主题、该星在原盘中的功能性角色、尊贵度、Yoga、Shadbala/Ashtakavarga 支撑,以及当前 Dasha 是否允许兑现**。
| 本命与时运状态 | 流年过境(Gochara)修正法则 | 实战表现 |
|-------------|----------------------------|---------|
| **本命承诺强 + Yoga 成立 + Dasha 支持**(如 Mahapurusha Yoga、强 Parivartana、强宫主) | 过境凶星更常表现为高压激活、责任加重、竞争升级或结构化突破;不可直接套用灾难断语。 | 例如 Sasa Yoga 成立且相关 Dasha/事业宫位被激活时,Kantaka/Ashtama 类压力可能转为训练、赛事、考试、职场竞争或责任上升。仍需看 Dasha、宫位主题、AV 分数与实际事件背景。 |
| **入旺 / 极旺**Exalted / Moolatrikona)但缺少明确事件承诺 | 负面效应通常减轻,压力更像必须完成的磨练;不能自动推断为大奖、升迁或胜利。 | 压力存在,但若 Dasha 与目标宫位配合,结果更容易有建设性。 |
| **落陷 / 受克 / 功能性凶且 Dasha 同步**Debilitated / Afflicted | 负面条文可信度上升,但仍应避免单因素绝对化;需与健康、事业、家庭等主题宫位和分盘交叉。 | 更可能出现压抑、延迟、失败、病痛或成本增加,但具体事件类型必须由本命承诺和 Dasha 指定。 |
> **⚠️ 误区提醒**:禁止脱离本命承诺、Dasha 与分盘,直接套用“某凶星过某宫就必然发生某类坏事”的静态流年断语。更严谨的说法是:本命盘决定事件可发生的范围,Dasha 决定主题是否进入兑现期,Transit 主要负责触发、调制压力形态和缩小时间窗口。
---
## 二、Double Transit 理论(双过境理论)
+8 -1
View File
@@ -33,6 +33,8 @@ def _run_json(command: list[str]) -> dict[str, Any]:
def build_dashboard(oracle_file: str) -> dict[str, Any]:
queue = _run_json([PYTHON, "scripts/tajika_annual_oracle_queue.py", "--oracle-file", oracle_file, "--format", "json"])
summary = queue["summary"]
next_task = next((task for task in queue["tasks"] if not task["ready_for_calibration"]), None)
next_case = next_task["case_id"] if next_task else None
can_claim_closure = bool(summary["production_tuning_allowed"] and summary["ready_for_calibration"] == summary["total_tasks"])
remaining_gap = (
"Solar return exact time, Varsha Lagna, Muntha, Year Lord, Mudda Dasha first lord, "
@@ -58,8 +60,13 @@ def build_dashboard(oracle_file: str) -> dict[str, Any]:
),
},
"remaining_gap": remaining_gap,
"first_priority": next_task,
"next_actions": [
"Fill one Steve Jobs annual evidence packet from JHora or PyJHora.",
(
f"Fill the next annual evidence packet from JHora or PyJHora: {next_case}."
if next_case
else "All annual evidence packets are filled; review tolerance checks before any production tuning."
),
"Add solar return datetime and Varsha Lagna tolerance checks after the first external row exists.",
"Add Saham-specific tolerance checks for Punya, Rajya and Vivah Saham.",
"Expand the annual benchmark with at least one printed Varshaphala example.",
+8 -2
View File
@@ -131,7 +131,9 @@ def _validate_command(oracle_file: str) -> str:
def build_status(oracle_file: str) -> dict[str, Any]:
queue = _run_json([PYTHON, "scripts/tajika_annual_oracle_queue.py", "--oracle-file", oracle_file, "--format", "json"])
annual_tasks = queue.get("tasks", [])
priority = next((task for task in annual_tasks if task.get("case_id") == FIRST_PRIORITY_CASE_ID), None)
priority = next((task for task in annual_tasks if not task.get("ready_for_calibration")), None)
if priority is None:
priority = next((task for task in annual_tasks if task.get("case_id") == FIRST_PRIORITY_CASE_ID), None)
if priority is None and annual_tasks:
priority = annual_tasks[0]
if priority is None:
@@ -141,7 +143,11 @@ def build_status(oracle_file: str) -> dict[str, Any]:
capture_id = queue_packet["capture_id"]
packet_path = f"references/oracle/artifacts/pending_packets/{capture_id}.json"
template_path = FIRST_PRIORITY_TEMPLATE_PATH if priority["case_id"] == FIRST_PRIORITY_CASE_ID else packet_path
packet = json.loads((ROOT / template_path).read_text(encoding="utf-8"))
template_file = ROOT / template_path
if template_file.exists():
packet = json.loads(template_file.read_text(encoding="utf-8"))
else:
packet = queue_packet
missing_fields = _metadata_missing(packet) + _target_missing(packet)
missing_groups = _group_missing_fields(missing_fields)
external_verified = [
+12 -2
View File
@@ -69,6 +69,8 @@ def _write_json(path: str, value: dict[str, Any]) -> None:
def _target_fields(value: Any, prefix: str = "target") -> list[str]:
if prefix == "target.tajika_yogas":
return [prefix]
if prefix == "target" and isinstance(value, dict):
fields: list[str] = []
for key, child in value.items():
@@ -93,6 +95,10 @@ def _target_value(target: dict[str, Any], field: str) -> Any:
def _missing_target_fields(value: Any, prefix: str = "target") -> list[str]:
missing: list[str] = []
if prefix == "target.tajika_yogas":
if value is None or value == "" or value == {}:
return [prefix]
return []
if isinstance(value, dict):
for key, child in value.items():
missing.extend(_missing_target_fields(child, f"{prefix}.{key}"))
@@ -117,9 +123,13 @@ def _evidence_packet(case: dict[str, Any], target_fields: list[str]) -> dict[str
"target_year": settings.get("target_year", ""),
"operator_note": "",
}
existing = case.get("evidence_packet", {})
existing_metadata = existing.get("metadata", {}) if isinstance(existing, dict) else {}
if isinstance(existing_metadata, dict):
metadata.update(existing_metadata)
return {
"capture_id": f"external_{case_id}",
"status": "draft",
"capture_id": existing.get("capture_id") or f"external_{case_id}" if isinstance(existing, dict) else f"external_{case_id}",
"status": existing.get("status", "draft") if isinstance(existing, dict) else "draft",
"case_id": case_id,
"birth": case.get("birth", {}),
"settings": settings,
@@ -39,8 +39,8 @@ def test_oracle_closure_master_dashboard_aggregates_all_hard_fronts() -> None:
assert report["scope"] == "jyotish_external_oracle_closure_master_dashboard"
assert report["schema_version"] == 1
assert report["summary"]["total_tasks"] == 12
assert report["summary"]["external_verified_tasks"] == 7
assert report["summary"]["open_tasks"] == 5
assert report["summary"]["external_verified_tasks"] == 8
assert report["summary"]["open_tasks"] == 4
assert report["summary"]["can_claim_global_oracle_closure"] is False
assert report["fronts"]["dasha"]["task_count"] == 3
assert report["fronts"]["shadbala"]["task_count"] == 4
@@ -49,7 +49,9 @@ def test_oracle_closure_master_dashboard_aggregates_all_hard_fronts() -> None:
assert report["fronts"]["dasha"]["first_priority"] is None
assert report["fronts"]["shadbala"]["external_verified_tasks"] == 4
assert report["fronts"]["shadbala"]["first_priority"]["case_id"] == "template_redacted_place_shadbala_raman"
assert report["fronts"]["tajika_sahams"]["first_priority"]["case_id"] == "template_steve_jobs_varshaphala_1984_lahiri"
assert report["fronts"]["tajika_sahams"]["external_verified_tasks"] == 1
assert report["fronts"]["tajika_sahams"]["open_tasks"] == 4
assert report["fronts"]["tajika_sahams"]["first_priority"]["case_id"] == "template_einstein_varshaphala_1905_lahiri"
assert report["fronts"]["tajika_sahams"]["first_priority"]["missing_groups"]["target"]["count"] == 10
assert report["fronts"]["shadbala"]["first_priority"]["manual_fill_plan"]["manual_entry_count"] == 55
assert report["next_action_order"][0]["front"] == "tajika_sahams"
@@ -68,6 +70,6 @@ def test_oracle_closure_master_dashboard_markdown_can_be_written(tmp_path: Path)
assert "can_claim_global_oracle_closure: `false`" in markdown
assert "`dasha` | 3 | 3 | `complete`" in markdown
assert "template_redacted_place_shadbala_raman" in markdown
assert "template_steve_jobs_varshaphala_1984_lahiri" in markdown
assert "template_einstein_varshaphala_1905_lahiri" in markdown
assert "manual entries" in markdown
assert "metadata missing" in markdown
+21
View File
@@ -92,3 +92,24 @@ def test_skill_gap_truth_audit_markdown_is_human_readable() -> None:
assert "can_claim_global_first: `false`" in markdown
assert "Dasha external oracle" in markdown
assert "Past Corrections" in markdown
def test_transit_reference_blocks_single_factor_override_claims() -> None:
transit = (ROOT / "references" / "transit-comprehensive-guide.md").read_text(encoding="utf-8")
kantaka = (ROOT / "references" / "navatara-kantaka-shani-guide.md").read_text(encoding="utf-8")
combined = transit + "\n" + kantaka
assert "Natal Promise First Protocol" in transit
assert "本命盘决定事件可发生的范围" in transit
assert "Dasha 决定主题是否进入兑现期" in transit
assert "Transit 主要负责触发" in transit
assert "是否获得奖项/地位必须再看10宫、11宫、D10、Dasha、AV与现实领域证据" in kantaka
forbidden_overclaims = [
"一票否决",
"完全反转",
"免疫纯粹灾难",
"土星过4宫必主",
]
for phrase in forbidden_overclaims:
assert phrase not in combined
@@ -38,7 +38,7 @@ def test_tajika_annual_dashboard_outputs_stable_json_summary() -> None:
assert report["scope"] == "tajika_sahams_annual_benchmark_dashboard"
assert report["schema_version"] == 1
assert report["summary"]["total_tasks"] == 5
assert report["summary"]["ready_for_calibration"] == 0
assert report["summary"]["ready_for_calibration"] == 1
assert report["summary"]["production_tuning_allowed"] is False
assert report["annual_claim"]["can_claim_tajika_sahams_closure"] is False
assert "Solar return" in report["remaining_gap"]
+7 -5
View File
@@ -37,10 +37,10 @@ def test_tajika_annual_closure_status_identifies_first_annual_packet() -> None:
assert report["scope"] == "tajika_sahams_annual_closure_status"
assert report["schema_version"] == 1
assert report["summary"]["annual_task_count"] == 5
assert report["summary"]["external_verified_annual_tasks"] == 0
assert report["summary"]["external_verified_annual_tasks"] == 1
assert report["summary"]["can_claim_tajika_sahams_closure"] is False
assert report["first_priority"]["case_id"] == "template_steve_jobs_varshaphala_1984_lahiri"
assert report["first_priority"]["capture_id"] == "external_template_steve_jobs_varshaphala_1984_lahiri"
assert report["first_priority"]["case_id"] == "template_einstein_varshaphala_1905_lahiri"
assert report["first_priority"]["capture_id"] == "external_template_einstein_varshaphala_1905_lahiri"
assert report["first_priority"]["required_target_fields"] == [
"target.solar_return_datetime",
"target.varsha_lagna_deg",
@@ -58,7 +58,9 @@ def test_tajika_annual_closure_status_identifies_first_annual_packet() -> None:
assert "target.sahams.punya_saham" in report["first_priority"]["missing_fields"]
assert report["first_priority"]["missing_groups"]["metadata"]["count"] == 5
assert report["first_priority"]["missing_groups"]["target"]["count"] == 10
assert report["first_priority"]["prefilled_fields"]["metadata"]["annual_system"] == "Varshaphala/Tajika"
assert report["first_priority"]["prefilled_fields"]["metadata"]["annual_system"] == "varshaphala"
assert report["first_priority"]["prefilled_fields"]["metadata"]["target_year"] == 1905
assert report["first_priority"]["prefilled_fields"]["settings"]["node_mode"] == "mean"
assert report["first_priority"]["manual_fill_plan"]["status_value"] == "external_verified"
assert report["first_priority"]["manual_fill_plan"]["manual_entry_count"] == 15
assert report["first_priority"]["validate_command"]
@@ -73,7 +75,7 @@ def test_tajika_annual_closure_status_markdown_can_be_written(tmp_path: Path) ->
markdown = output.read_text(encoding="utf-8")
assert "# Tajika/Sahams Annual Closure Status" in markdown
assert "can_claim_tajika_sahams_closure: `false`" in markdown
assert "external_template_steve_jobs_varshaphala_1984_lahiri" in markdown
assert "external_template_einstein_varshaphala_1905_lahiri" in markdown
assert "target.sahams.punya_saham" in markdown
assert "## Missing Summary" in markdown
assert "## Prefilled Fields" in markdown
+26 -5
View File
@@ -32,20 +32,41 @@ def test_tajika_annual_queue_outputs_collection_tasks() -> None:
assert queue["scope"] == "tajika_sahams_annual_oracle_collection_queue"
assert queue["schema_version"] == 1
assert queue["summary"]["total_tasks"] == 5
assert queue["summary"]["ready_for_calibration"] == 0
assert queue["summary"]["ready_for_calibration"] == 1
assert queue["summary"]["production_tuning_allowed"] is False
assert "solar return" in queue["boundary"].lower()
first = queue["tasks"][0]
assert first["task_id"].startswith("collect_")
assert first["status"] == "template_only"
assert first["ready_for_collection"] is True
assert first["ready_for_calibration"] is False
assert first["case_id"] == "template_steve_jobs_varshaphala_1984_lahiri"
assert first["status"] == "external_verified"
assert first["ready_for_collection"] is False
assert first["ready_for_calibration"] is True
assert "target.solar_return_datetime" in first["target_fields"]
assert "target.sahams.punya_saham" in first["missing_target_fields"]
assert first["missing_target_fields"] == []
assert first["target_fields"] == [
"target.solar_return_datetime",
"target.varsha_lagna_deg",
"target.muntha_sign",
"target.year_lord",
"target.mudda_dasha_first_lord",
"target.sahams.punya_saham",
"target.sahams.rajya_saham",
"target.sahams.vivah_saham",
"target.tajika_yogas",
"target.source_artifact",
]
assert first["evidence_packet"]["metadata"]["tool_name"] == "PyJHora"
assert first["evidence_packet"]["target_placeholders"]["target.year_lord"] == "Mars"
assert first["evidence_packet"]["target_placeholders"]["target.mudda_dasha_first_lord"] == "Sun"
assert "JHora Varshaphala screenshot" in first["preferred_sources"]
assert first["evidence_packet"]["integrity_checks"]["requires_external_artifact"] is True
second = queue["tasks"][1]
assert second["case_id"] == "template_einstein_varshaphala_1905_lahiri"
assert second["ready_for_collection"] is True
assert "target.sahams.punya_saham" in second["missing_target_fields"]
def test_tajika_annual_queue_markdown_lists_sahams_and_yogas() -> None:
completed = run_queue("--format", "markdown")