One shared table in yoga-status-words.ts (YOGA_STATUS_MAPPING / yogaStatus)
that the 解读依据 line uses now and #182's model wording must import:
candidate / support_only_candidate, computed, formed_under_source,
conditions_not_met, blocked / not_available_yet. Only formation.status can
say 成立 or 必要条件未满足; a hits-only name is 当前无法确认 with the gap named.
The grey line never clips a status text. Tests: one per table row plus the
hits-only case (13 in the file).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
- to_sign was taken from the JD instead of a longitude, and direction read a
direct 0° Aries ingress as retrograde; both now come from the step's
longitudes.
- shadow_entry / shadow_exit / both stations carry outside_requested_window
as the brief requires; the window end uses the end day's UTC offset.
- 3 regression tests.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
test_python_hygiene_budget forbids new root-level scripts/*.py; the brief named
scripts/muhurta_search_api.py. Same code at scripts/ondemand_calc/muhurta_search.py;
route, CLI import and tests follow.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
transit_date counted house_from_moon from the transit Moon when the caller gave
no natal Moon; the natal reference is now only what the caller supplied.
resolve_profile now refuses an unsupported ayanamsa name instead of passing it
to the engine.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
The fixtures were captured on Windows; on Linux the Moon longitude differs in
the 13th digit (41.48538690748626 vs 41.485386907488675), so the exact-equality
freshness test failed. Rounding both sides to 9 decimals still catches any real
engine change.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
- career layer gets the D1 longitudes, so the paksha has one source (Obama
base vs career mismatch fixed)
- card carries movable_lagna_moon.reason, Narayana ad_status / ad_reason and
the mahadasha cycle_index; running line says "sub-period undecided"
- engine keeps the MD when the AD is undecided; timingFollowing skips
zero_duration rows explicitly
- timingKeys allowlist: adstatus / adreason / cycleindex / zeroduration
- fixtures + capture script, 16 engine tests, 7 card tests, PROGRESS, BUG-1812
Co-Authored-By: Grok (agent loop)
Owner 2026-11-09: the R2 widening is on hold until the astrologer rules on it.
STRENGTH_SCOPE_DEFAULT returns to seed_only_v0. All R2 code stays: local
propagation, the selected / equal / unresolved statuses, and
seed_ad_start_p43d_v1 as a named non-default profile. profile_config and the
cache keys record strength_scope = seed_only_v0. R1 and R3 are unchanged.
Tests that pinned the widened scope now pass it explicitly, with
原值 / 新值 / 原因 notes. Evidence-card golden recaptured (TTL=0; only the
profile labels changed).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
Found in the round-7 cross-branch check: on public charts (Zidane, Obama)
the Neecha Bhanga row never reached yogas_detail. The compact detector entry
dropped formation_evidence, and the row sat past the 30-row cap. Keep the
witness fields when compacting and never cut a row that carries them (the
cap stays 30). The card's Narayana method_status also dropped the engine's
profile_config (timing key allowlist); carry it through.
Evidence-card golden recaptured with TTL=0 (Obama: row 30 is now Neecha
Bhanga); the load-dependent VedAstro closure reason is kept as before.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
The 简明解读 list's grey line is the receipt row's result_line (fallback: what
the layer computed); firm → 已算, conditional → 有条件. One backstage filter
(isBackstageAuditRow: external / MEVG / real-case, plus provider, engine,
packet, calibration, Western) is shared by withTechniqueEvidence and the list.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
Contract keeps BUG-1794 (no web / external / MEVG / real-case wording in either
mode) with BUG-1795's 深度解读 / 简明解读 names; the missing-audit-table repair
prompt keeps BUG-1794's "no verification rows" wording under the new name.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
r8 blind eval: 「这一层给出的结构与 D1 同向:土星在巨蟹」 in a D10 line was read
as a D1 claim (3 false mismatches). A layer token followed by 同向 / 一致 /
对照 … no longer opens its own span; the matched-claim note is only shown on
mismatches.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
The high-rigor path overwrote can_apply with the technique contract's
confirmation_allowed, so a passing external validation could turn a
low-confidence or provisional engine result into an applicable one.
Both must now agree; otherwise the contract continues rectification
with local_engine_cannot_apply.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
Raw totals are only compared when every candidate computed the same
(event, layer) evidence units. Otherwise winning_segment stays the raw
leader (provisional_leader) and comparable_leader re-ranks over the
units all candidates share; a missing unit is dropped for everyone,
never scored 0. The live stage Python engine now skips an event whose
Narayana is unavailable instead of scoring it 0, repeated facts count
once, and the stage labels an unequal-coverage leader as provisional.
占星师 2026-11-08 验收清单 §6 / §9 / §10.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
- R1: default AD direction rath_p50_md_parity_v1 (start parity kept as a research
profile); full profile config + algorithm version on every Narayana output, cache
keys (consult, api chart, probes, long report, synastry) and the rectification run.
- R2: one strength profile at the seed, AD start and p.43 (d); selected / equal /
unresolved kept apart; unresolved nodes block only what depends on them (seed
candidates kept, dated MDs before an unresolved length kept, AD-only loss in
rectification keeps the MD).
- R3: Neecha Bhanga witness fields (reference, relative_house, self_reference,
independent_confirmation_allowed, self_reference_only) from the main detector to
the evidence card yogas_detail rows; self-reference-only never counts as support.
- Sync her b54812c3 KP clock validation; port her round-5 / round-6 tests.
- BUG-1783..1787; golden recaptured with TTL 0.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
产品 2026-11-08 决定,偏离占星师「缺口不能隐藏」裁定(第五轮裁定 6 / 8):产品
选择不向用户展示;后台保留记录. The plain-mode gap sentence (BUG-1757) and the
professional audit table's four verification rows are no longer asked for;
the receipt's MEVG / Real Case Calibration rows are unchanged, and 「不写已验证 /
已校准」 stays.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8