refactor strict evidence and extend parity layers

This commit is contained in:
732642856
2026-07-15 19:13:05 +08:00
parent beea0f1996
commit ec9c7cf80a
20 changed files with 600 additions and 42 deletions
+2 -1
View File
@@ -97,9 +97,10 @@ For large architecture or release work, also read:
| 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 transit, solar-return, secondary-progression, or solar-arc fields; boundaries still name unavailable progressed angles, converse, parans, midpoints, duration, and interpretation. |
| 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. |
## Fragment Sweep Command Set
@@ -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.