expose gulika as partial prashna evidence

This commit is contained in:
732642856
2026-07-14 18:13:39 +08:00
parent 7142366dc4
commit e5f7e0ddc0
4 changed files with 19 additions and 5 deletions
+1 -1
View File
@@ -89,7 +89,7 @@ For large architecture or release work, also read:
| 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; registry is `partial` and exposes only the actual calculator until external numeric parity and chart integration are complete. |
| 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. |
## Fragment Sweep Command Set
+2 -1
View File
@@ -430,7 +430,8 @@
"full-reading"
],
"output_paths": [
"scripts/gulika.py:calculate_gulika"
"scripts/gulika.py:calculate_gulika",
"prashna_context.supporting_indicators.gulika"
],
"audit_label": "Upagraha/Gulika/Maandi",
"missing_impact": "Swiss day/night and Prasna Marga Ghatika Gulika are available as supporting evidence; Maandi, other Upagrahas and external numeric parity remain unavailable.",
+14 -2
View File
@@ -9,6 +9,10 @@ try:
from scripts.domain_calculation_service import CalculationError, compute_chart
except ModuleNotFoundError: # pragma: no cover - CLI execution path
from domain_calculation_service import CalculationError, compute_chart
try:
from scripts.gulika import calculate_gulika
except ModuleNotFoundError: # pragma: no cover - CLI execution path
from gulika import calculate_gulika
class PrashnaContextError(ValueError):
@@ -58,6 +62,13 @@ def build_prashna_context(payload: dict[str, Any]) -> dict[str, Any]:
})
except (CalculationError, ValueError, TypeError) as exc:
raise PrashnaContextError(f"Swiss Prashna chart blocked: {exc}") from exc
try:
gulika = calculate_gulika(moment, lat=float(payload["lat"]), lon=float(payload["lon"]), tz=tz)
except Exception as exc:
gulika = {
"status": "blocked",
"reason": f"gulika_supporting_indicator_failed:{type(exc).__name__}",
}
return {
"scope": "prashna_context",
"status": "computed",
@@ -71,6 +82,7 @@ def build_prashna_context(payload: dict[str, Any]) -> dict[str, Any]:
"planets": chart["planets"],
"calculation_contract": chart["calculation_contract"],
"result_hash": chart["result_hash"],
"blocked_layers": ["Gulika", "Trisphuta", "Kunda", "Prashna verdict"],
"boundary": "No client-supplied planets or ascendant are accepted. Approximate Prashna layers are blocked pending validated implementations.",
"supporting_indicators": {"gulika": gulika},
"blocked_layers": ["Trisphuta", "Kunda", "Prashna verdict"],
"boundary": "No client-supplied planets or ascendant are accepted. Gulika is supporting-only pending external numeric parity; Sphuta and verdict layers remain blocked.",
}
+2 -1
View File
@@ -21,7 +21,8 @@ def test_cli_prashna_uses_question_moment_swiss_context_only():
assert payload["status"] == "computed"
assert payload["chart_source"] == "swiss_ephemeris_backend"
assert "Gulika" in payload["blocked_layers"]
assert payload["supporting_indicators"]["gulika"]["status"] == "partial"
assert "Trisphuta" in payload["blocked_layers"]
def test_cli_prashna_blocks_legacy_approximation_modes():