Merge remote-tracking branch 'upstream/codex/release-hygiene-ci'

# Conflicts:
#	docs/research/pre_work_error_ledger.md
#	jyotish-app/api-bridge.js
#	mcp_server.py
#	references/technique_registry.json
#	scripts/jyotish_api_server.py
#	scripts/skill_release_package.py
This commit is contained in:
Jesse_Chen
2026-07-17 11:10:52 +08:00
119 changed files with 47750 additions and 1960 deletions
+45 -1
View File
@@ -64,7 +64,51 @@ For large architecture or release work, also read:
| ERR-031 | Premium skill zip can ship without user install prompts or replay schemas, leaving users and future oracle imports without a contract. | mitigated 2026-07-09 | `skill_release_package.py` must inject `INSTALL.md` and `USER_PROMPTS.md`; replay contracts must live in `references/real_case_calibration/` and `references/oracle/`. |
| ERR-032 | Full smoke files can time out while focused slices pass; `test_full_reading_reports_ayanamsa_metadata_and_ai_prompt_pack` currently exposes `external_oracle_gap_summary=null`. | observed 2026-07-10 | Do not claim full `tests/test_cli_smoke.py` or full `tests/test_vedastro_external_technique_evidence.py` passed unless run to completion; use focused slices for related changes and track the prompt-pack gap separately. |
| ERR-033 | Premium skill zip validation can accidentally depend on a parent Git repository, so a cloud-drive user may fail in a clean unzip directory. | mitigated 2026-07-10 | Release acceptance must include `tests/test_skill_release_clean_trial.py`; scripts such as `public_release_privacy_scan.py` must support non-Git unpacked zip directories. |
| ERR-034 | On this macOS host, bare `python3` resolves to Python 3.9 without pytest, while the project uses PEP 604 annotations; rerunning with `.venv/bin/python` reaches the tests but `test_preflight_fragment_scan_reports_authority_layers_and_risk_buckets` has a stale `high_value_unpromoted_count >= 1` assertion even when the scanner correctly reports zero. | observed 2026-07-15 | Run the gate with the project venv on this host and do not claim the full pre-work gate passed until the fragment-governance assertion is reconciled with the valid zero-unpromoted state. |
| ERR-034 | A single `historical_event_backtest.build_report()` strict replay can exceed 120 seconds before returning a case result. | observed 2026-07-11 | Use `scripts/public_real_case_benchmark.py` for bounded batch evidence replay; keep strict workflow as a separately timed probe and report timeout as blocked. |
| ERR-035 | `benchmarks/jyotish/scripts/run_pyjhora_compare.py --help` executes the benchmark and crashes when canonical fixtures are absent. | observed 2026-07-11 | Do not claim PyJHora parity from readiness. Generate canonical fixtures or harden the runner before the next same-chart batch. |
| ERR-036 | `public_real_case_benchmark.py --rule-version compare` originally replayed both rule versions and exceeded the 120-second command budget. | mitigated 2026-07-11 | Compare mode must read precomputed `--comparison-v1` and `--comparison-v2` reports; never duplicate engine replay inside comparison. |
| ERR-037 | `scripts/muntha.py` failed at import because `List` was used in an annotation but not imported. | resolved 2026-07-11 | Keep `tests/test_muntha_module.py`; a technique file does not count as available unless it imports and runs independently. |
| ERR-038 | Real-case scoring counted the same planet twice when MD and AD had the same lord, inflating strong-hit scores and duplicating signals. | mitigated 2026-07-11 | V2.1 must deduplicate active lords before `_planet_score`; keep the same-MD/AD regression test and preserve legacy V2 reports for audit only. |
| ERR-039 | `exact_label_rate` looked like classification accuracy even though the benchmark already knew the event domain and assigned the expected label at the strong threshold. | mitigated 2026-07-11 | Use `known_event_activation_rate` and `strong_activation_rate`; keep old names deprecated and never present them as predictive accuracy. |
| ERR-040 | `.gitignore` excluded only parts of `scratch/`, leaving local helper files and `.serena/` visible to `git add .`. | resolved 2026-07-11 | Ignore `/scratch/` and `/.serena/` at repo root; keep a regression test for both private workspace directories. |
| ERR-041 | Positive-event replay scores were interpreted as timing evidence even though nearby non-target dates could receive equal or higher scores. | mitigated 2026-07-11 | Keep the negative-control date-ranking pilot and `timing_precision_gate`; block exact-day/month claims while Top-3 ranking remains below the gate. |
| ERR-042 | REST duplicated natal chart, Vimshottari and Sade Sati calculations, so True Node was ignored, the first Dasha balance drifted, and Saturn transit was fabricated. | resolved 2026-07-11 | Keep `tests/test_calculation_p0_regressions.py`; domain/CLI/REST must share `domain_calculation_service.py`, effective parameters and `result_hash`. |
| ERR-043 | Localhost POST requests trusted CORS response headers as an execution guard; report Chromium could load external/local resources; async job IDs were predictable and persisted without capability authentication or TTL. | mitigated 2026-07-11 | Keep `tests/test_runtime_security_p0.py`; enforce Origin/Host/JSON, sandbox report resources, use random capability tokens, `0600` atomic records, TTL deletion and a bounded worker queue. Run an isolated Chromium network PoC before declaring the renderer fully hardened. |
| ERR-044 | Focused selections that include legacy full chart API tests can still exceed the 120-second desktop command budget even after pure calculation tests pass. | observed 2026-07-11 | Keep P0 calculation/security tests pure and fast; profile the legacy chart fixture separately before using the full API file as a blocking CI gate. |
| ERR-045 | Three-engine readiness was mistaken for completed same-chart parity. Public replay on 2026-07-13 captured jyotishganit raw and found only a PyJHora dasha artifact; VedAstro still had no official raw response. | active external blocker | Keep `three_engine_parity_runner.py`; status remains `blocked`/`partial` until all required raw artifacts are normalized into comparison rows. Latest blocker: `official_vedastro_raw_missing_or_unverified`. |
| ERR-046 | Report-renderer SSRF/file PoC was blocked until a Playwright Chromium binary was installed. | mitigated 2026-07-13 | Keep route/JS-denial tests and run `scripts/report_renderer_isolation_poc.py`; only `status=pass` with zero HTTP probe requests and blocked file/http resources proves isolated rendering. Verified 2026-07-13: `status=pass`, `http_probe_requests=0`, blocked schemes `file/http`. |
| ERR-047 | Initial `slow` marker partition for `test_api_server_security.py` still exceeded the 120-second desktop budget; heavy paths extend beyond VedAstro/high-rigor prefix groups. | active profiling blocker | Profile test node IDs in bounded subprocess batches, mark only measured heavy tests, and keep fast-security acceptance separate from long CI integration coverage. |
| ERR-048 | Candidate-time scanner assumed all documented D4/D24/D30 divisions were exposed by `jyotish_engine.py varga`; actual `--d4` failed at runtime. | mitigated 2026-07-12 | Candidate scans must record unsupported Varga flags as `unavailable_vargas`; only successfully computed D1/D9/D10 fields may drive local sensitivity output until a unified Varga contract exists. |
| ERR-049 | PyJHora benchmark runner executed on `--help`, used a wrong repository-root path in `run_skill_baseline.py`, and failed when reused without pre-created output directories. | mitigated 2026-07-12 | Keep `tests/test_pyjhora_compare_cli.py`; require explicit `--build-local`, safe argparse help, correct repo root, and directory creation inside `run_sample()`. |
| ERR-050 | Prashna CLI/API/UI could synthesize or accept a non-question chart; legacy Tajika/Saham/Sphuta/Kunda paths also exposed approximate values as usable evidence. | mitigated 2026-07-14 | Require backend Swiss `PrashnaContext` with question text/time/location/timezone; reject client planets/ascendant. The engine's deterministic fallback branch has been removed. Block legacy Sphuta/Kunda/Gulika/Panchavargiya and no-location Saham paths; keep seven-planet Tajika interactions partial until named-yoga golden cases and formula parity exist. |
| ERR-051 | Privacy redaction can replace executable numeric test fixtures with bare placeholder identifiers such as `REDACTED_YEAR`, causing `NameError` before a regression reaches its target. | observed 2026-07-12 | Public tests must use generic fixtures (for example 1990) or quoted placeholders only; run `rg -n "REDACTED_YEAR" tests` before release and repair executable occurrences. |
| ERR-052 | Text-only privacy scanning cannot distinguish a harmless quoted placeholder from a bare Python identifier that will fail at runtime. | mitigated 2026-07-13 | `public_release_privacy_scan.py` parses shipped Python files and rejects executable `REDACTED_*` names; keep the AST regression test. |
| ERR-053 | A parity manifest could label an external engine `official_verified` without a raw artifact, hash, or calculation settings, making claimed oracle closure unverifiable. | mitigated 2026-07-13 | `three_engine_parity_replay_validator.py` requires raw artifact existence, SHA-256 and settings for verified/imported external engines; otherwise parity is `invalid`. |
| ERR-054 | Candidate-time sensitivity scanning used the legacy `varga` CLI, so D4/D24/D30 could appear unavailable despite being supported by `varga-full`. | resolved 2026-07-13 | Scanner calls `varga-full --divisions D4,D9,D10,D24,D30` once per candidate and reads its canonical `Ascendant.sign` fields. |
| ERR-055 | The full-reading path called `calc_all_sahams()` without lat/lon/tz, so an otherwise computable Swiss day/night context was silently blocked. | resolved 2026-07-14 | Pass the calculation arguments' lat/lon/tz into the Saham layer; keep Saham formula maturity `partial` until oracle parity exists. |
| ERR-056 | A WorkBuddy checkout of the same remote diverged substantially from the active source branch and can be mistaken for a mergeable mirror. | active | Read `whole_machine_fragment_sweep_2026_07_14.md`; do not copy or merge it without explicit commit-level review on a separate branch. |
| ERR-057 | The release quality profile checked untracked files but did not execute the privacy AST scan or the real Chromium report-isolation probe. | mitigated 2026-07-14 | `release_hygiene_check()` now requires `public_release_privacy_scan.py --json` and `report_renderer_isolation_poc.py --strict`; parity manifest validation also runs as a contract check. |
| ERR-058 | Formula-based Sahams used the day/night operand rules but omitted the documented zodiacal-order `+30°` exception. | mitigated 2026-07-14 | `_calc_formula_saham()` applies the `references/saham_rules.json` forward-arc condition and one-sign correction; keep external numeric oracle parity as a separate `partial` requirement. |
| ERR-059 | Gulika was either an approximate fallback or falsely implied as a chart module output. | mitigated 2026-07-14 | `scripts/gulika.py` computes Prasna Marga Ghatika segment Ascendant with Swiss sunrise/sunset and Lahiri sidereal houses. It is exposed only as `prashna_context.supporting_indicators.gulika`, remains `partial`, and cannot unlock Sphuta or verdict layers until external numeric parity exists. |
| ERR-060 | Legacy Sphuta functions combined approximate Gulika with interpretive signals, while the exact formula could not be inspected in the production question context. | mitigated 2026-07-14 | `prashna_sphuta.py` exposes formula-only Trisphuta/Catusphuta/Pancasphuta from the partial Gulika evidence. It is supporting-only; Kunda, life-sensitive Sphutas and Prashna verdicts remain blocked pending external numeric parity. |
| ERR-061 | Full-reading passed longitude-only data to the Tajika layer, permanently blocking its speed-dependent seven-planet interaction evidence. | mitigated 2026-07-14 | Pass actual Swiss longitude/speed pairs. The output may expose only partial Ithasala/Easarapha candidates; named chains and event verdicts stay blocked pending golden cases. |
| ERR-062 | A release gate could validate a parity manifest's shape without requiring all external engines to actually match, allowing “contract valid” to be mistaken for “oracle verified.” | mitigated 2026-07-14 | `three_engine_parity_replay_validator.py --require-pass` fails unless parity status is pass; `run_quality_gate.py --require-external-parity` exposes this as an explicit high-standard release requirement. |
| ERR-063 | High-rigor API output could omit the three-engine parity state, especially on plan-only responses, allowing downstream UI or MCP callers to overstate verification. | mitigated 2026-07-14 | Every high-rigor execution and plan response carries `high_rigor_external_parity`; `require_external_parity=true` sets `success=false` unless parity is pass. |
| ERR-064 | Western cross-system support accepted external JSON but did not calculate a tropical natal chart from standard birth input, inviting agents to treat missing Western data as a completed cross-check. | mitigated 2026-07-14 | `western_chart_engine.py` computes Swiss Ephemeris tropical natal evidence for direct-chart/rectification only. It remains `partial` until separately materialized timing evidence exists; Prashna and external-payload precedence are regression-tested. |
| ERR-065 | A newly added release-critical script can be absent from a zip before its first Git commit because the package enumerates tracked files only. | mitigated 2026-07-14 | List `scripts/western_chart_engine.py` in `REQUIRED_CONTRACTS`; the release-package test proves both editions include it before commit. |
| ERR-066 | The pre-work fragment sweep invoked a retired `audit-capabilities --mode strict` contract, so governance tests and the mandatory preflight failed before real checks ran. | mitigated 2026-07-14 | Invoke the supported `--mode validate`; `tests/test_preflight_fragment_scan.py` and `pre_work_check.py` must remain green before substantive work. |
| ERR-067 | A generic “Western timing” label can imply techniques that have not been computed. | mitigated 2026-07-15 | Native timing requires explicit fields for each layer. Current native layers cover transit, solar-return, secondary-progression, solar-arc, converse, midpoint, lunar-return and daily duration scan; progressed angles, parans and interpretation remain explicitly blocked/partial. |
| ERR-068 | PyJHora comparison reports hard-coded `2026-06-03` as generation time, making fresh external benchmark artifacts appear stale and weakening audit traceability. | mitigated 2026-07-15 | `write_report()` records an injected-or-current UTC ISO timestamp; keep the deterministic timestamp regression. |
| ERR-069 | Yoga validation tests and helper runner still imported rules from a `.workbuddy` mirror, so full pytest could fail or silently validate a divergent checkout. | mitigated 2026-07-15 | Resolve repo root from each file location; retain runtime-boundary and focused Yoga regressions. |
| ERR-070 | PyJHora parity for D2/D4/BAV/SAV can pass while Shadbala total virupas still mismatch, so a row-filled Shadbala oracle packet can be mistaken for absolute-value parity. | active external formula blocker | Keep `docs/research/pyjhora_d2_d4_ashtakavarga_shadbala_parity_2026_07_15.md`; do not claim Shadbala external absolute closure until component-level formulas reconcile with PyJHora/JHora raw values. |
| ERR-071 | `runtime-truth` required an untracked `scratch/local/pdf_review_123456` JHora packet, so a clean public checkout failed before it could report the actual external-oracle boundary. | resolved 2026-07-16 | Release truth reads `references/evidence_manifests/jhora_master_evidence_manifest.json`; scratch is optional and may be repaired only through explicit `sync_final_evidence_packet_status.py --sync-local`. Manifest must retain `external_raw_required_for_official_verified=true`. |
| ERR-072 | The 2026-07-14 sweep did not enumerate two `.workbuddy/backups` Jyotish Git snapshots, a Codex `audit_tmp` extraction, or the Kimi training archive, so a later window could mistake them for undiscovered production truth. | active 2026-07-16 | Read `whole_machine_fragment_sweep_2026_07_16.md`; classify every candidate by Git ancestry, relative-path diff, content, privacy, and supersession before any import. Never bulk-copy a backup or archive. |
| ERR-073 | The external article warehouse contains 50 Jyotish source artifacts whose techniques can be absent from the repo even when broad labels such as Jaimini, Arudha, or Tajika are already marked covered. | active 2026-07-16 | Before technique expansion, build a source-ingestion manifest with hashes, provenance, extracted formula IDs, variant identity, copyright boundary, production coverage, and validation state. Broad registry labels must not imply article-level coverage. |
| ERR-074 | Absent local-only quarantined drafts were counted as missing runtime references, causing clean strict workflows to degrade despite all production sources being present. | resolved 2026-07-16 | Keep quarantined paths as declared audit inventory, exclude non-runtime absence from readiness, and never promote them into runtime source refs. |
| ERR-075 | `real_case_calibration_catalog()` unconditionally opened an untracked holdout manifest, so clean installs could silently lose the MCP runtime evidence log. | resolved 2026-07-16 | Missing optional holdout assets return structured `blocked` metadata instead of raising. |
| ERR-076 | Fragment/inventory tests required machine-local drafts, workspace residue, or a fixed minimum file count. | resolved 2026-07-16 | Assert count invariants and stable tracked classifications; validate optional local categories only when present. |
| ERR-077 | VedAstro request previews serialized the live `x-api-key` header, allowing logs and failed test output to expose credentials. | resolved; credential rotation required 2026-07-16 | Preview/metadata profiles never contain authentication headers. Inject `VEDASTRO_API_KEY` only immediately before network execution; rotate any key exposed before this fix. |
| ERR-078 | On this macOS host, bare `python3` resolves to Python 3.9 without pytest, while the project uses PEP 604 annotations; rerunning with `.venv/bin/python` reaches the tests but `test_preflight_fragment_scan_reports_authority_layers_and_risk_buckets` has a stale `high_value_unpromoted_count >= 1` assertion even when the scanner correctly reports zero. | observed 2026-07-15 | Run the gate with the project venv on this host and do not claim the full pre-work gate passed until the fragment-governance assertion is reconciled with the valid zero-unpromoted state. |
## Fragment Sweep Command Set
@@ -0,0 +1,113 @@
# 20 个公开真实案例回放与技法闭环(2026-07-11)
## 结论
本轮新增 10 个独立 holdout 案例,与首批 10 案例合并为 20 个公开事件。V2 规则在查看 holdout 结果前冻结,只增加三层通用技术:Rahu/Ketu 定位星、D9/D10 上升主与主题宫主、Amatyakaraka/Darakaraka。
holdout 上,V1 正事件激活召回从 `0.70` 升至 `0.80`,精确标签率保持 `0.30`blocked 保持 `0`。按预注册门槛,V2 可以进入主链。这个 `0.80` 不是科学预测准确率:样本全是已发生的正事件,没有负样本,无法计算 specificity、false-positive rate 或 balanced accuracy。
机器报告:
- `docs/benchmark/public_real_case_holdout_v1_2026_07_11.json`
- `docs/benchmark/public_real_case_holdout_v2_2026_07_11.json`
- `docs/benchmark/public_real_case_holdout_comparison_2026_07_11.json`
- `docs/benchmark/public_real_case_20_case_closure_2026_07_11.json`
## 样本设计
- 出生时间:Astro-Databank Rodden `A/AA`
- 事件:事业公开成就或法律婚姻的明确日期。
- 事件来源:官方机构优先;官方资料缺失时使用已核验二手资料。
- 域平衡:事业 10,婚姻 10。
- holdout 平衡:事业 5,婚姻 5A 5,AA 5。
- 隐私:只使用公众人物公开资料,不含用户出生信息或个人反馈。
## 20 案例结果
| # | 人物 | 事件域 | 日期 | V2 分数 | 结果 |
|---|---|---|---|---:|---|
| 1 | Steve Jobs | career | 2007-01-09 | 7 | strong_hit |
| 2 | Barack Obama | career | 2008-11-04 | 1 | miss |
| 3 | Arnold Schwarzenegger | career | 2003-10-07 | 2 | miss |
| 4 | Meryl Streep | career | 1983-04-11 | 6 | weak_hit |
| 5 | Jennifer Aniston | career | 2002-09-22 | 7 | strong_hit |
| 6 | William, Prince of Wales | marriage | 2011-04-29 | 6 | weak_hit |
| 7 | Angelina Jolie | marriage | 2014-08-23 | 6 | weak_hit |
| 8 | Frida Kahlo | marriage | 1929-08-21 | 7 | strong_hit |
| 9 | Snoop Dogg | marriage | 1997-06-14 | 10 | strong_hit |
| 10 | Walt Disney | marriage | 1925-07-13 | 10 | strong_hit |
| 11 | Albert II, Prince of Monaco | career | 2005-04-06 | 9 | strong_hit |
| 12 | Boy George | career | 1984-02-28 | 6 | weak_hit |
| 13 | Ingrid Bergman | career | 1945-03-15 | 8 | strong_hit |
| 14 | Alanis Morissette | career | 1996-02-28 | 4 | weak_hit |
| 15 | Celine Dion | career | 1988-04-30 | 5 | weak_hit |
| 16 | Paul McCartney | marriage | 1969-03-12 | 7 | strong_hit |
| 17 | Johnny Depp | marriage | 2015-02-03 | 6 | weak_hit |
| 18 | Nicole Kidman | marriage | 2006-06-25 | 3 | miss |
| 19 | Demi Moore | marriage | 1987-11-21 | 0 | miss |
| 20 | Chelsea Clinton | marriage | 2010-07-31 | 5 | weak_hit |
合并结果:`8 strong + 8 weak + 4 miss + 0 blocked`。事业与婚姻两域各自都是 `0.80` 正事件激活召回、`0.40` 精确标签率。
## V2 带来的可复现变化
- 首批训练集:正事件召回仍为 `0.80`,精确标签率由 `0.30` 升至 `0.50`。Jobs 和 Aniston 从 weak 升为 strong。
- 未见 holdoutCeline Dion 从 `3/miss` 升为 `5/weak_hit`,依据为 Mercury 同时成为 D10 上升主与 Amatyakaraka。
- Boy George、Ingrid Bergman、Johnny Depp、Chelsea Clinton 得分增加,但未跨越结果等级或只增强已有等级。
- V2 没有增加 blocked,也没有改变阈值。
## 四个剩余漏判揭示的技法债
### 1. Obama 与 Schwarzenegger:普通事业层不足以覆盖政治身份跃迁
当前回放把所有事业事件统一映射到 `10/6/9/11 + D10/A10`。总统当选、州长当选属于公众权力与国家身份跃迁,还需要独立审计:D10 Raja Yoga、D10 宫主相位、A10/AL 联动、Sun/AmK/政治权力指标、年度 Varshaphala。不能为两个 miss 临时提高通用事业分数。
### 2. Kidman 与 Demi MooreNarayana 只审计 MD,遗漏 AD/PD 语义
两案事件时的 Narayana 包中都出现 Venus 主导的下级周期,但 V2 只对 Narayana MD 的主题星座和宫主加分。完整 MD/AD/PD 主题收敛是明确的 V3 候选;它必须在第三批新 holdout 上验证后才能进入生产评分,不能用当前两案反向调参。
### 3. PD/PrAD 已能展开,但尚非外部验证闭环
`scripts/vimshottari_subperiod_timeline.py` 可从本仓 AD 边界按标准比例展开 PD/PrAD。它适合提供月/周级候选窗,不应在没有 JHora/PyJHora/VedAstro 同盘原始输出时当作已验证 oracle。
### 4. 年度层与 KP 仍是 partial
- `Varshaphala/Muntha` 可运行,但年主裁决仍有简化实现,外部 Tajika oracle 未闭环。
- 本地 KP 可算 sub-lord/significator,但宫位层仍含“星座中点代替精确 cusp”的近似,不能称为完整 KP 事件裁决。
- 本轮修复了 `scripts/muntha.py` 独立导入时遗漏 `List` 导致的崩溃,并新增回归测试;这只是恢复可运行性,不等于年度预测精度已验证。
## Technique Audit Table
| Technique | 状态 | 说明 |
|---|---|---|
| D1 + Functional Benefic/Malefic | used | 20/20 |
| D9 + UL + Darakaraka | used | 10 个婚姻事件 |
| D10 + A10 + Amatyakaraka | used | 10 个事业事件 |
| Vimshottari MD/AD | used | 20/20 |
| Narayana Dasha | used | 20/20AD/PD 完整语义仍待 V3 |
| Double Transit PAC | used | 20/20 |
| Rahu/Ketu dispositor | used | V2 正式评分层 |
| Vimshottari PD/PrAD | partial | 比例展开可用,外部同盘未验证 |
| Tajika/Varshaphala/Muntha | partial | 本地简化层;外部 oracle 未闭环 |
| KP exact cusp/significators | partial | sub-lord 可用;精确 cusp 闭环不足 |
| VedAstro official raw | blocked | `official_snapshot_budget_exhausted` |
| PyJHora/JHora/jyotishganit parity | blocked | canonical raw comparison 未完成 |
| MEVG / Global Web Evidence | used | 20 组公开出生/事件来源 |
| Real Case Calibration | used | 10 discovery + 10 frozen holdout |
| Negative controls | blocked | 无已核验“不发生事件”日期 |
## 新增 holdout 主要来源
- 出生时间:Astro-Databank VIP 页面,逐案 URL 已保存在 `references/real_case_calibration/replay_manifest_holdout_v2.json`
- 事业事件:[Monaco Palace](https://www.palais.mc/en/princely-family/h-s-h-prince-albert-ii/biography-1-9.html)、[Oscars 1945](https://www.oscars.org/oscars/ceremonies/1945)、[Eurovision 1988](https://eurovision.tv/event/dublin-1988)。
- 婚姻事件:[Variety - Johnny Depp](https://variety.com/2016/biz/news/johnny-depp-amber-heard-divorce-settlement-1201837685/)、其余核验二手来源逐案保存在 holdout manifest。
## 已落地优化
1. V2 通过 holdout 门槛,统一 orchestrator 改读 20 案例合并报告。
2. 新增 V1/V2 纯比较模式,禁止比较命令重复跑两遍底层引擎导致超时。
3. 合并报告自动输出 domain summary、holdout promotion、Technique Audit 与 technique debt。
4. 修复 Muntha 独立模块导入错误并加测试。
5. 保留四个 miss,不用事后调参掩盖。
下一次真正提高可信度的最小方案:第三批 10 案例冻结 holdout,其中加入政治/公众身份事件与经核验负样本;只验证 Narayana AD/PD、D10 Raja Yoga/相位和年度层,不再扩展更多名称。
@@ -0,0 +1,82 @@
# Public Real-Case Jyotish Benchmark - 2026-07-11
## Result
Ten public cases with Astro-Databank Rodden `A/AA` birth times were replayed through the local evidence stack. No user birth data or private feedback was used.
| Metric | Result | Boundary |
|---|---:|---|
| Cases / dated events | 10 / 10 | 5 career, 5 marriage |
| Positive-event activation recall | 80% | 8 of 10 known events reached weak or strong activation |
| Strong hits | 30% | 3 of 10 |
| Exact-label rate | 30% | Weak domain activation is not exact event classification |
| Blocked local replays | 0% | All lightweight local evidence packets completed |
| Balanced accuracy / specificity | blocked | No independently verified negative-control dates |
This is not scientific predictive accuracy. It is a positive-event technical activation replay. Full machine output: [`docs/benchmark/public_real_case_benchmark_2026_07_11.json`](../benchmark/public_real_case_benchmark_2026_07_11.json).
## Cases
| Case | Event | Domain | Rodden | Result | Score |
|---|---|---|---|---|---:|
| Steve Jobs | iPhone introduction, 2007-01-09 | career | AA | weak | 5 |
| Barack Obama | presidential election, 2008-11-04 | career | AA | miss | 1 |
| Arnold Schwarzenegger | California recall election, 2003-10-07 | career | A | miss | 2 |
| Meryl Streep | Best Actress Oscar, 1983-04-11 | career | AA | weak | 5 |
| Jennifer Aniston | lead-actress Emmy, 2002-09-22 | career | AA | weak | 5 |
| Prince William | legal marriage, 2011-04-29 | marriage | AA | weak | 6 |
| Angelina Jolie | legal marriage, 2014-08-23 | marriage | AA | weak | 4 |
| Frida Kahlo | legal marriage, 1929-08-21 | marriage | AA | strong | 7 |
| Snoop Dogg | legal marriage, 1997-06-14 | marriage | AA | strong | 10 |
| Walt Disney | legal marriage, 1925-07-13 | marriage | A | strong | 8 |
## Sources
Birth times: [Jobs](https://www.astro.com/adbvip/adbvip_02_24.htm), [Obama](https://www.astro.com/adbvip/adbvip_08_04.htm), [Schwarzenegger](https://www.astro.com/adbvip/adbvip_07_30.htm), [Streep](https://www.astro.com/adbvip/adbvip_06_22.htm), [Aniston](https://www.astro.com/adbvip/adbvip_02_11.htm), [Prince William](https://www.astro.com/adbvip/adbvip_06_21.htm), [Jolie](https://www.astro.com/adbvip/adbvip_06_04.htm), [Kahlo](https://www.astro.com/adbvip/adbvip_07_06.htm), [Snoop Dogg](https://www.astro.com/adbvip/adbvip_10_20.htm), [Disney](https://www.astro.com/adbvip/adbvip_12_05.htm).
Event dates: [Apple Newsroom](https://www.apple.com/newsroom/2007/01/09Apple-Reinvents-the-Phone-with-iPhone/), [FEC Federal Elections 2008](https://www.fec.gov/introduction-campaign-finance/election-results-and-voting-information/federal-elections-2008/), [California Secretary of State](https://elections.cdn.sos.ca.gov/sov/2003-special/sov-complete.pdf), [Oscars 1983](https://www.oscars.org/oscars/ceremonies/1983), [Television Academy 2002](https://www.televisionacademy.com/awards/nominees-winners/2002/outstanding-lead-actress-in-a-comedy-series), [Royal Family wedding record](https://www.royal.uk/wedding-prince-william-and-miss-catherine-middleton), [Angelina Jolie biography](https://en.wikipedia.org/wiki/Angelina_Jolie), [Frida Kahlo biography](https://en.wikipedia.org/wiki/Frida_Kahlo), [Snoop Dogg biography](https://en.wikipedia.org/wiki/Snoop_Dogg), [Walt Disney Family Museum](https://www.waltdisney.org/blog/who-did-walt-disney-marry).
## Pre-Registered Replay Logic
- D1 event-house ownership and occupation.
- D10 for career; D9 for marriage.
- A10 for career; UL for marriage.
- Functional Benefic/Malefic by Lagna.
- Vimshottari Mahadasha and Antardasha at the event date.
- Narayana Dasha at event age.
- Jupiter-Saturn Double Transit PAC for house 10 or 7.
Thresholds were frozen before the batch run: `>=7 strong`, `4-6 weak`, `<4 miss`.
## Findings
1. Marriage timing is stronger in this sample: `5/5` activation recall, including three strong hits.
2. Career timing is weaker: `3/5` activation recall and no strong hit. Public-office elevation is not captured well by direct 10/6/9/11 ownership alone.
3. General missing career layers: D10 Lagna/10L hierarchy, A10 sign activation, Amatyakaraka, Raja-yoga activation, Rahu/Ketu dispositor results, and Varshaphala/Tajika annual confirmation.
4. Double Transit is confirmation, not a standalone verdict.
5. `80%` must not be advertised as predictive accuracy: five hits are weak, exact-label rate is `30%`, and no negative controls were tested.
6. Do not tune thresholds on these same ten cases. Freeze v2 rules, then validate on a new holdout batch.
## Technique Audit
| Technique | Status | Notes |
|---|---|---|
| D1 | used | All 10 cases |
| D9 / D10 | used | Domain-specific |
| UL / A10 | used | Lord linkage included |
| Functional Benefic/Malefic | used | Lagna-specific roles retained |
| Vimshottari MD/AD | used | Event-date boundaries |
| Narayana Dasha | used | Event-age sign/lord |
| Double Transit PAC | used | House 7 or 10 |
| MEVG / Global Web Evidence | used | Astro-Databank plus independent event sources |
| Real Case Calibration | used | 10 structured cases; positive events only |
| VedAstro official raw | blocked | `official_snapshot_budget_exhausted` |
| PyJHora / JHora parity | blocked | Missing canonical fixture; JHora automation absent |
| jyotishganit | partial | Importable readiness only; not event-timing oracle |
## Next Holdout Design
- Add 10 new cases not used here: 5 public-status career events and 5 marriages.
- Add sourced negative-control windows to estimate specificity and balanced accuracy.
- Freeze v2 career rules before holdout: node dispositor, D10 10L, A10 transit/dasha, AmK, Raja yoga, annual chart.
- Keep v1 and v2 reports side by side; reject rules that improve training cases but fail holdout.
@@ -0,0 +1,33 @@
# Public Real-Case Calibration Release Boundary
Date: 2026-07-12
This release publishes reproducible public-case calibration safeguards, not a
claim of predictive accuracy. It contains no user birth data, private feedback,
or private event history.
## Included Evidence
- V2.1 scoring correction: `public_real_case_23_case_v21_corrected_observation_2026_07_11.json`
- Date-control pilot: `public_real_case_negative_control_pilot_2026_07_11.json`
- Annual-control pilot: `public_real_case_annual_control_pilot_2026_07_11.json`
- Human-readable correction and control reports in this directory.
## Current Interpretation Boundary
- V2.1 removes duplicate MD/AD scoring and labels legacy precision-like fields
as deprecated.
- SAV/BAV remains descriptive, non-scoring evidence.
- The date-control and annual-control pilots do not support exact-day or
exact-month claims from the current replay score.
- The calibration corpus uses known positive events and partially adjudicated
control dates. It does not establish specificity, balanced accuracy, or
general predictive accuracy.
- External same-chart parity is separate. Local replay must not be described as
VedAstro, PyJHora/JHora, or jyotishganit verified until all required raw
oracle fields are imported and compared.
## Excluded Local Material
Earlier V1/V2 snapshots, probe outputs, comparison intermediates, and planning
files remain local. They are retained for audit but are not release evidence.
@@ -0,0 +1,45 @@
# 真实案例负样本日期排序 Pilot2026-07-11
## 设计
对 Trump 就职、DiCaprio 奥斯卡、Markle 婚姻三个 AA 案例,分别取真实事件日前后 `30/60/90/120` 天,共 8 个控制日期。控制日期只保证没有发生该项精确目标事件,不保证没有其他人生事件。
统一使用 V2.1;SAV/BAV 仍为非评分证据。并列采用保守排名:控制日期与真实日期同分时,控制日期排在真实日期前。
## 汇总
- 真实日期 Top-1`0/3`
- 真实日期 Top-3`0/3`
- Mean Reciprocal Rank`0.1407`
- 平均真实日分数边际:`-1.3333`
- 24 个控制日期中,`10/24 = 41.67%` 达到 activation 阈值。
- `10/24 = 41.67%` 达到 strong 阈值。
## 逐案
| 案例 | 真实分 | 最高控制分 | 真实日排名/9 | 结论 |
|---|---:|---:|---:|---|
| Trump 2017 就职 | 3 | 7 | 5 | 两个更早控制日期反而 strong |
| DiCaprio 2016 奥斯卡 | 1 | 1 | 9 | 九个日期全部同分,完全无日期区分力 |
| Markle 2018 婚姻 | 7 | 7 | 9 | 真实日和八个控制日期全部 strong |
## 裁决
当前评分器主要识别持续数月或更长的 Dasha、分盘与慢行星背景,不能从该背景中确定具体月日。进一步使用 `±1年/±2年` 的 12 个年度控制日期后,真实日 Top-1/Top-3 也只有 `33.33%`Trump、DiCaprio 均排最后,只有 Markle 婚姻排第一。
由此新增硬门:
- `exact_day`blocked。
- `exact_month_from_current_replay_score`blocked。
- 当前最大支持精度:`unvalidated_broad_window`
- 事业 timingblocked。
- 婚姻宽窗口:partial candidate,仍需更多样本。
月级或日级输出只有在 PD/PrAD、Mudda/Varshaphala、精确 KP cusp、快速过境加入后,并在新的控制日期排名中通过,才能解除门控。
本 pilot 仍不能计算完整 balanced accuracy,因为控制日期未被独立核验为“所有同领域事件均未发生”。但它足以反证当前分数具有精确日期识别能力。
机器报告:
- `docs/benchmark/public_real_case_negative_control_pilot_2026_07_11.json`
- `docs/benchmark/public_real_case_annual_control_pilot_2026_07_11.json`
@@ -0,0 +1,44 @@
# 3 个独立公开案例补充检测(2026-07-11)
## 设计
沿用冻结 V2,不修改阈值、不先看星盘选人。三案全部为 Astro-Databank Rodden AA,且与前 20 人不重复:
| 人物 | 领域 | 公开事件 | 来源 |
|---|---|---|---|
| Donald Trump | career/public power | 2017-01-20 就任美国总统 | [美国国会就职委员会](https://www.inaugural.senate.gov/58th-inaugural-ceremonies/) |
| Leonardo DiCaprio | career/award | 2016-02-28 获奥斯卡最佳男主角 | [Academy Awards](https://www.oscars.org/oscars/ceremonies/2016) |
| Meghan Markle | legal marriage | 2018-05-19 与 Prince Harry 结婚 | [The Royal Family](https://www.royal.uk/wedding-duke-and-duchess-sussex) |
出生资料逐案保存在 `references/real_case_calibration/replay_manifest_probe3_v2.json`
## 结果
| 人物 | 分数 | 判定 | 主要命中证据 |
|---|---:|---|---|
| Donald Trump | 3 | miss | Narayana lord 事业宫关联;Double Transit strong |
| Leonardo DiCaprio | 1 | miss | Jupiter 落事业事件宫 6 |
| Meghan Markle | 7 | strong_hit | Jupiter 婚姻 karakaSaturn 为 7LD9 7LDouble Transit strong |
补充样本:`1 strong + 0 weak + 2 miss`,正事件激活召回和精确标签率均为 `1/3`。样本太小,不能据此晋级或降级规则,但必须作为 V2 泛化反证公开。
合并 23 案例后:
- 总体:`9 strong + 8 weak + 6 miss`,正事件激活召回 `17/23 = 0.7391`,精确标签率 `9/23 = 0.3913`
- 事业:`8/12 = 0.6667` 激活召回,`4/12 = 0.3333` 精确标签率。
- 婚姻:`9/11 = 0.8182` 激活召回,`5/11 = 0.4545` 精确标签率。
- balanced accuracy 仍 blocked:没有负事件控制样本。
## 新发现
1. 事业缺口不只限政治身份。DiCaprio 的明确奖项事件同样漏判,说明当前 D10/A10 层只检查活动大运星是否等于上升主、10L、AmK 或落 10 宫,覆盖不足。
2. Trump 的 Jupiter/Jupiter 与强双重过境仍未跨阈值,证明通用宫位加分不能替代 D10 Raja Yoga、行星相位、AL-A10、年度盘及公众权力专项裁决。
3. Meghan 的婚姻事件完整命中,支持现有 D1 功能宫主 + D9 7L + karaka + Double Transit 的婚姻组合,但单案不能证明整体准确率。
4. 不应按这三案立即新增分数。下一步应先冻结 V3 候选:D10 宫主相位/Raja Yoga、Narayana AD/PD、Varshaphala;再用新的至少 10 案例验证。
机器报告:
- `docs/benchmark/public_real_case_probe3_v2_2026_07_11.json`
- `docs/benchmark/public_real_case_23_case_observation_2026_07_11.json`
边界:全部是正事件回放,不是科学预测准确率;VedAstro official raw 与三引擎 parity 未因此闭环。
@@ -0,0 +1,42 @@
# 真实案例 V2.1 计分修正与 SAV/BAV 审计(2026-07-11
## 修正内容
1. MD 与 AD 为同一颗星时,不再重复执行整套宫位、落宫和 karaka 加分。
2. 保留旧字段兼容,但新增真实指标名:
- `known_event_activation_rate`
- `strong_activation_rate`
3. `positive_event_recall``exact_label_rate` 标记为 deprecated。
4. 23 案例全部加入 D1 SAV/BAV、事件宫 SAV、事件日 Jupiter/Saturn 过境 SAV/BAV;本轮不参与评分。
## V2.1 观察结果
- 总体:`7 strong + 10 weak + 6 miss`
- known-event activation`17/23 = 0.7391`
- strong activation`7/23 = 0.3043`
- 事业:activation `8/12 = 0.6667`strong `2/12 = 0.1667`
- 婚姻:activation `9/11 = 0.8182`strong `5/11 = 0.4545`
旧 23 案例 strong activation 为 `9/23 = 0.3913`。去重后降为 `7/23 = 0.3043`,确认重复 MD/AD 计分曾抬高强命中数量。
## SAV/BAV 描述性结果
| 分组 | 事件宫 SAV 均值 | Jupiter/Saturn 过境 SAV 均值 | 过境星自身 BAV 均值 |
|---|---:|---:|---:|
| 已激活 strong/weak | 28.809 | 28.735 | 3.882 |
| miss | 30.375 | 27.583 | 3.917 |
当前正样本中,miss 的事件宫 SAV 均值反而高于已激活组,过境 BAV 几乎没有差异。因此:
- SAV 不能直接作为“高分即发生事件”的加分器。
- SAV 更适合作为本命承载力背景,与大运、宫主、BAV 和过境共同分析。
- 是否具有日期区分能力,必须用同人物同年度负样本验证。
## 技术边界
- 本仓 SAV 总数和七曜 BAV 总数不变量已由 `tests/test_ashtakavarga_invariants.py` 守门。
- 本轮 23/23 案例 SAV/BAV 状态为 `used_non_scoring`
- 尚未完成 JHora/PyJHora 的逐星座 SAV/BAV raw parity。
- 本结果使用已见正事件,只是校正观察,不构成 V2.1 晋级验证。
机器报告:`docs/benchmark/public_real_case_23_case_v21_corrected_observation_2026_07_11.json`
@@ -0,0 +1,48 @@
# PyJHora D2/D4/Ashtakavarga/Shadbala Parity Note 2026-07-15
## Scope
Same-chart replay for `smoke_beijing_1990_noon` after extending `run_pyjhora_compare.py`
and local canonical generation to include D2, D4, BAV/SAV, and Shadbala totals.
Command:
```bash
python3 benchmarks/jyotish/scripts/run_pyjhora_compare.py --sample-id smoke_beijing_1990_noon --refresh-local --output-prefix pyjhora_d4_fix
```
## Result
| Section | Rows | Status |
|---|---:|---|
| D2 | 20 | match |
| D4 | 20 | match |
| D9 | 20 | match |
| D10 | 20 | match |
| Ashtakavarga BAV | 96 | match |
| Ashtakavarga SAV | 12 | match |
| Shadbala total virupas | 7 | mismatch |
Total matrix: `232 match / 7 mismatch / 239 fields`.
The D4 mismatch was fixed by aligning local BPHS/Parashara Chaturthamsa to the
PyJHora traditional mapping:
```text
D4 target sign = natal sign + 3 * quarter_index
```
## Shadbala Boundary
The remaining mismatch is not a missing row problem. It is an absolute-value
formula mismatch between local `modules.shadbala.planets.*.total_virupas` and
PyJHora `strength.shad_bala(...)[6]`.
Current boundary:
- D2/D4/D9/D10: externally replayed against PyJHora for the smoke chart.
- Ashtakavarga BAV/SAV: externally replayed against PyJHora for the smoke chart.
- Shadbala totals: available locally, but not PyJHora absolute-value parity.
Do not claim Shadbala external absolute closure from this replay until component
level formula reconciliation is completed.
@@ -0,0 +1,51 @@
# PyJHora Same-Chart Parity: Public Smoke Batch
Date: 2026-07-12
## Scope
Ten public/synthetic smoke birth records were replayed through the local
canonical baseline and an isolated PyJHora comparison runner. Both sides used
Lahiri ayanamsa and Mean Node mode. No user birth record or private event data
was used.
## Result
| Field status | Count |
|---|---:|
| `match` | 836 |
| `boundary_sensitive` | 4 |
| `mismatch` | 0 |
| Total compared | 840 |
The four boundary-sensitive rows are D10 values at divisional boundaries. They
are retained as downgraded evidence, not silently counted as exact matches.
Covered outputs:
- D1: ascendant and nine planetary rows
- D9
- D10
- current Vimshottari boundaries
Not yet compared:
- D2 / D4
- Shadbala
- Ashtakavarga
- VedAstro official raw snapshot
- JHora desktop export
- jyotishganit outside its Panchanga-oriented raw coverage
## Reproduction
Use `benchmarks/jyotish/scripts/run_pyjhora_compare.py` with explicit
`--build-local --node-mode mean`. Use `--output-prefix` for resumable batches.
Summarize each matrix through `scripts/pyjhora_parity_summary.py`.
## Boundary
This is partial external verification for the listed outputs only. It does not
establish full three-engine parity, global algorithmic accuracy, or event
prediction accuracy. VedAstro remains `official_blocked` until an official raw
response is captured and normalized.
@@ -1,7 +1,7 @@
{
"scope": "vedastro_parity_matrix",
"schema_version": 1,
"generated_at": "2026-06-28T23:49:39.845848+00:00",
"generated_at": "2026-07-16T11:53:05.440396+00:00",
"summary": {
"row_count": 13,
"p0_count": 11,
@@ -24,7 +24,7 @@
"rest_adapter": 2,
"external_evidence_only": 1
},
"local_registry_technique_count": 89
"local_registry_technique_count": 91
},
"boundary": {
"not_a_clone_claim": true,
@@ -1,9 +1,9 @@
# VedAstro Parity Matrix
- Generated: `2026-06-28T23:49:39.845848+00:00`
- Generated: `2026-07-16T11:53:05.440396+00:00`
- Rows: `13`
- P0 rows: `11`
- Local registry technique count: `89`
- Local registry technique count: `91`
## Honesty Boundary
@@ -0,0 +1,41 @@
# Whole-Machine Fragment Sweep: 2026-07-14
## Scope
Bounded read-only scan of `Documents`, `WorkBuddy`, `.workbuddy`, `Downloads`,
`Desktop`, and Codex attachments. Search depth followed the command set in
`pre_work_error_ledger.md`.
## Runtime Truth
- Primary source/runtime repo: `/Users/wuyongnaren/Documents/印度占星`.
- Active branch at scan time: `codex/release-hygiene-ci`.
- `.workbuddy/skills/jyotish-vedic-astrology` is an unversioned historical
distribution mirror. It is never a runtime source or merge source.
## Divergent Repository
- `/Users/wuyongnaren/WorkBuddy/2026-07-05-19-03-49/yinduzhanxing` is a Git
checkout of the same remote, on `main` at `8b53983`.
- It is not a clean fast-forward copy of the active source branch. Symmetric
comparison against active source commit `c5404ec` found 432 source-only and
390 WorkBuddy-only commits, with merge base `a5bbba2`.
- No files were copied, merged, deleted, or treated as authoritative.
## Classified Artifacts
- Desktop and Obsidian contain personal reports and research notes. They are
private reference material, excluded from public release and source imports.
- Main repo contains benchmark outputs, raw local smoke artifacts, and clean
release trial material. They remain subject to existing privacy scan and
`.gitignore` boundaries.
- Existing local planning, benchmark, and real-case drafts in the active repo
remain uncommitted and were not changed by this sweep.
## Required Guard
1. Before adapter, oracle, release, or entrypoint work, read this sweep plus
the two earlier sweep records.
2. Do not merge or copy from the WorkBuddy checkout without an explicit,
commit-by-commit review and a separate branch.
3. Do not publish private desktop/Obsidian reports or use them as test fixtures.
@@ -0,0 +1,67 @@
# Whole-Machine Fragment Sweep: 2026-07-16
## Scope
Bounded read-only scan before Rangacharya/Jaimini and VedAstro architecture work.
Scanned `Documents`, `WorkBuddy`, `.workbuddy`, `Downloads`, `Desktop`,
`文件仓库`, `.codex`, and known Codex audit attachments. Compared Git ancestry,
relative source paths, archives, article corpora, and content terms. No source,
private report, credential, or oracle artifact was copied into the main repo.
## Runtime Authority
- Main repo: `/Users/wuyongnaren/Documents/印度占星`.
- `.workbuddy` and WorkBuddy checkouts remain recovery/reference sources only.
- Existing dirty main-worktree changes were preserved.
## Repository And Backup Fragments
1. `/Users/wuyongnaren/WorkBuddy/2026-07-05-19-03-49/yinduzhanxing`
remains a heavily divergent checkout. Relative-path comparison found 16 paths
absent from the current main worktree. Most are private user reports, pending
user-specific oracle templates, or an old B.V. Raman report-export tool/test.
They are not safe merge candidates.
2. `/Users/wuyongnaren/.workbuddy/backups/jyotish-vedic-astrology-20260711-154109`
is a dirty historical Git backup. Its unique meaningful source paths are
`scripts/event_judgment_engine.py` and `tests/test_strict_workflow.py`; current
main already has a newer MCP/engine adjudication chain and broader focused
strict-workflow tests. Treat both files as historical comparison only.
3. The retired backup contains no meaningful relative source path absent from
main. `.workbuddy/skills/jyotish-vedic-astrology` adds only a distribution
`skill-manifest.json` relative to main.
4. The Codex `audit_tmp` folder contains five old extracted engine modules.
Current main copies are identical or longer/newer; no unique production
implementation was identified.
5. `dist/jyotish-vedic-astrology-6.9.14.tar.gz` is a 260-entry release archive,
not a newer source tree.
## Knowledge And Attachment Fragments
1. `/Users/wuyongnaren/文件仓库/印度占星文章` contains 50 source artifacts,
including article DOCX files, screenshots, Tithi, Panchapakshi, Rashi Tulya
Navamsa, Bhrigu Pada Dasha, Tajika, Darakaraka, spouse-combination, and the
2026-07-16 Rangacharya/Arudha screenshots. These are discovery sources; their
full content is not represented by current repo filenames or registry status.
2. `/Users/wuyongnaren/Downloads/_整理候选/安装包与压缩包/Kimi_Agent_高维印度占星师.zip`
contains 35 training/research files. It includes a broad Jaimini source map
and general AL/UL/Argala material, but no text hit for the screenshot-specific
`Sanmukha` or `Yogada` formulas. Treat as secondary research, not formula truth.
3. Desktop contains private chart reports and research drafts already classified
by prior sweeps. They remain excluded from source imports and public fixtures.
## Rangacharya Design Impact
- Do not scope from the six screenshots alone.
- Build a source-ingestion manifest first: artifact hash, title, author/source,
extraction status, formula IDs, variant, license/copyright boundary, and whether
the rule exists in production.
- Keep Rangacharya formulas separate from common Jaimini, KN Rao, Sanjay Rath,
Parashara, and secondary article interpretations.
- No discovered fragment may unlock adjudication. Source transcription, original
text verification, golden cases, and real-case calibration remain separate gates.
## Required Guard
Future substantial Jyotish work must read this sweep after the 2026-07-14 and
Round 25 sweeps. Re-run the bounded scan when a new window, backup, attachment,
archive, or external-engine checkout appears.