Commit Graph
971 Commits
Author SHA1 Message Date
ClaudeandClaude Opus 5.5 eb5e9adcf9 fix(shadbala): move /api/shadbala into shadbala_service; birth data no longer 500 (BUG-1463)
_compute_shadbala called swe.julday with no swe in scope, so any request with
year/month/day/lat/lon raised NameError. The endpoint now lives in
scripts/shadbala_service/api.py, which imports Swiss Ephemeris itself; the
handler only forwards. _shadbala_rule_variants and
_compute_shadbala_advanced_layer moved with it (handler methods 217 -> 215,
baseline lowered). New real-HTTP regression test with ruff F821 on the server,
added to the quick gate.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyeZrYn6ryNcSe5Y2Y
2026-11-01 23:29:30 +08:00
ClaudeandClaude Opus 5.5 1a7aba0280 Merge annual_service refactor (growth budget fix for the staging gate)
Independent Staging Quality Gate / validate (push) Failing after 14m52s
Independent Staging Quality Gate / publish (push) Skipped
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyeZrYn6ryNcSe5Y2Y
2026-11-01 21:09:55 +08:00
ClaudeandClaude Opus 5.5 32fa756bd4 refactor(annual): move the annual package and report facts into annual_service
Staging's backend gate (run 6338) failed three budgets: handler method
count 218 > 217, JyotishAPIHandler.__new__ sites 6 > 5, and the scripts/
root .py count. The package and facts code now live in
scripts/annual_service/ (package.py, report_facts.py, api.py with
compute_annual_package / compute_annual_report_facts and
AnnualServiceInputError). jyotish_api_server.py registers /api/annual
mode=package, /api/annual/package and /api/annual/report_facts thinly
through a module-level _annual_service helper, like /api/chart_points,
with no handler methods: back to 217. Tests call the module functions
and keep a thin-registration test; no cap or baseline changed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyeZrYn6ryNcSe5Y2Y
2026-11-01 20:33:17 +08:00
Claude 5b566af981 Merge annual report generation and entry overlay (#153, #154)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyeZrYn6ryNcSe5Y2Y

# Conflicts:
#	CHANGELOG.md
2026-11-01 20:20:47 +08:00
ClaudeandClaude Opus 5.5 4972fa40a6 feat(annual): annual report generation and annual.full billing (#153)
New report type annual_full on the personal report queue, like
synastry_full. POST /api/reports {reportType: annual_full} reserves
annual.full (20 credits by default, admin-editable), stores the range
and the optional situation, and queues the job; a year already written
for the same subject opens directly without a second charge. The worker
asks /api/annual/report_facts for the server cards, writes the sections
one at a time (person, overview, domains, windows, remaining, close)
with a program gate and one rewrite, saves the snapshot after every
section, then settles; a failure releases the reservation.
GET /api/annual/overview serves the overlay from the slim package.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyeZrYn6ryNcSe5Y2Y
2026-11-01 20:15:45 +08:00
ClaudeandClaude Opus 5.5 7512d3d654 test(audit): the capability audit scans the /learn routes (issue #157)
The app route list is asserted exactly; /learn and /learn/[column]/[slug]
are new public routes from the knowledge base framework.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyeZrYn6ryNcSe5Y2Y
2026-11-01 17:31:25 +08:00
ClaudeandClaude Opus 5.5 1643bad25b feat(annual): report facts and claim cards; slim package (#153)
/api/annual/report_facts returns the annual report's only allowed facts:
natal base (functional roles, house lords, yogas as structure, domain
vargas and A10/A7/UL/DK), the year's phases with a lean from the natal
skeleton lords' functional roles, turning points, 4-6 candidate windows
from computed boundaries and exact contacts (independent systems only),
per-domain signals, conflicts and the technique audit with MEVG and Real
Case Calibration blocked. Open defaults sit in CONFIG / HOUSE_DOMAINS.
The package gains detail=slim for the entry overlay.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyeZrYn6ryNcSe5Y2Y
2026-11-01 17:24:39 +08:00
ClaudeandClaude Opus 5.5 340f0f2b85 feat(annual): annual data package v1 (#152 ruling, phase 1 of #153)
POST /api/annual with mode=package (or /api/annual/package) returns one
versioned package built from the existing producers: year charts with
ascendant/lord, Muntha, Panchadhikari year lord, annual strength, Sahams,
Tajika yogas, Tripataki, Mudda, native Patyayini, Tajika monthly charts;
natal Vimshottari MD/AD/PD and Narayana (legacy + Rath); slow-planet
ingresses, stations, retrograde loops and natal-point crossings; Tithi
Pravesha as an independent view. Report range, year-chart validity and each
period system's own year are separate, every boundary is an exact instant
with timezone, and every block carries computed/blocked/not_applicable with
a reason. The default /api/annual response is unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyeZrYn6ryNcSe5Y2Y
2026-11-01 17:07:54 +08:00
ClaudeandClaude Opus 5.5 5157f96df3 feat(chart): 盘面数据 card beside the board, linked both ways
Independent Staging Quality Gate / validate (push) Successful in 29m39s
Independent Staging Quality Gate / publish (push) Successful in 4m3s
The chart page's tables move into one fixed-height card beside the board
with nine tabs: 行星, 虚星, 特殊点, 映射, 八分点, 星力, 大运, 敌友, 瑜伽.
The point tabs and 八分点 are the board's layers, switched together from
either side. 星力, 大运, 敌友 and 瑜伽 mark, tint, link and fade bodies on
the natal board (lib/chart-board-focus.ts).

The planet table gains the ascendant row, nakshatra lord, pada and the
seven Chara karakas, now produced by /api/chart_points from
jaimini.calc_chara_karaka_7 (blocked on a tie). Every card keeps a fixed
height and scrolls inside; tables never wrap and can be dragged sideways.
Hint captions are gone, 八宫点 reads 八分点, and the deep reading keeps
time, energy and birth data only.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyeZrYn6ryNcSe5Y2Y
2026-10-30 16:27:04 +08:00
jesse-uxandGrok (agent loop) 3bc82acba6 research(d60): ship the G2/G5 script and report per-switch flips (issue #149)
The G2 precheck and the G5 noise floor had only a results file; the script
that produces them is now in scripts/research/d60_two_way_g2_g5.py, with
a test that reproduces the committed JSON byte for byte.

G5 is now reported per switch, with the ayanamsa offset in arcminutes.
Against the Raman baseline all three alternatives flip 77/77. Between the
alternatives themselves the number follows the offset: Lahiri to KP 21/77
(27.3%, 5.81'), KP to True Chitra 19/77 (24.7%, 5.02'), Lahiri to True
Chitra 2/77 (2.6%, 0.83'). The report says so and no longer claims that
any frame change flips every chart; the registered gate is baseline
relative and still triggers.

The report also states that G2's "not evaluable" comes from the registered
same-day answer policy, not from a measurement that D60 does not help.

Co-Authored-By: Grok (agent loop)
2026-10-29 16:32:54 +08:00
jesse-uxandGrok (agent loop) 129313e175 fix(varga): count D60 from the sign itself for every sign (BUG-1500, issue #149)
Independent Staging Quality Gate / validate (push) Successful in 20m59s
Independent Staging Quality Gate / publish (push) Successful in 4m25s
The production D60 branch added one sign to 1-based even signs, with no
source, while the repository's own guide and the vedastro mapping count
from the sign itself. PyJHora agrees with the latter: 33/77 recorded times
before, 77/77 after.

- scripts/varga.py: D60 is (si+pi)%12 for odd and even signs; other
  mappings and the vedastro mode are untouched.
- tests/test_d60_varga_mapping.py: 12 signs x 60 parts against
  PyJHora, plus the even-sign first part.
- scripts/research/d60_two_way_run.py: the G1 reconciliation that found
  this, now in the repository with a test; G1 passes 77/77.
- scripts/varga.py is part of the extended frozen identity, so the sealed
  holdout and the reported-offset sweep were re-frozen per ERR-110. All
  20 and 900 trials match the upstream_sync9b records on every field and
  the metrics and summary are unchanged.

Co-Authored-By: Grok (agent loop)
2026-10-29 14:30:57 +08:00
jesseandClaude Opus 5.5 537beb2934 test: each test gets its own foreground VedAstro pool, drained at teardown (BUG-1498)
Independent Staging Quality Gate / validate (push) Successful in 16m7s
Independent Staging Quality Gate / publish (push) Successful in 4m22s
A task left running wrote its outcome into the next test's cache directory,
so the next test saw a remembered failure and never called the gateway.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 19:39:28 +08:00
Jesse_ChenandClaude f80f3b75f8 Merge origin/staging into upstream sync 9 batch B (issue #159)
Independent Staging Quality Gate / validate (push) Successful in 18m34s
Independent Staging Quality Gate / publish (push) Successful in 5m14s
Co-Authored-By: Claude (agent loop) <noreply@anthropic.com>
2026-10-28 17:23:59 +08:00
jesseandClaude Opus 5.5 cbfb37f7c8 test: list /rectification in the capability audit app routes (issue #145)
Independent Staging Quality Gate / validate (push) Successful in 20m54s
Independent Staging Quality Gate / publish (push) Successful in 5m43s
Staging gate run 2009 failed on test_capability_audit_scans_registry_and_local_sources:
the new app route app/(app)/rectification was not in the expected list.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 17:23:17 +08:00
jesse-uxandGrok (agent loop) cbe665107f test(freeze-guard): keep the sync8 freeze paths in the forbidden list (issue #159)
The sync9b edit replaced the two sync8 entries in
IDENTITY_FORBIDDEN_PREFIXES instead of appending after them, so the guard
covered two records instead of four while still passing. Restore the
sync8 pair under its own comment and keep the sync9b pair after it.

The freshness test passes again (9) and the frontend confirmation-gate
test for the moved sealed report passes (8).

Co-Authored-By: Grok (agent loop)
2026-10-28 17:01:31 +08:00
jesse-uxandGrok (agent loop) 5c5f333d4d fix(varga): port the five sarpa ranges and the 22nd drekkana house (BUG-1494, BUG-1495, issue #159)
Upstream 50847e57, ported semantically:

- Sarpa Drekkana now accepts the five classical ranges (Cancer 2/3,
  Scorpio 1/2, Pisces 3) and partitions on the raw longitude instead of
  the rounded display degrees.
- The 22nd Drekkana is the eighth house of D3 (+7), not +21 zodiacal
  ten-degree divisions.

scripts/varga.py is part of the extended frozen identity, so the sealed
holdout and the reported-offset sweep were re-frozen under ERR-110:
20/20 sealed trials and 900/900 sweep trials match the sync8 records on
every compared field, and the metrics, summary and widening geometry are
unchanged.

Tests: the upstream varga/ sarpa files are added under
tests/test_upstream_sync9b_*.py; the stale +21 assertion and the sarpa
definition string are updated with the original/new/reason columns in
PROGRESS.

Co-Authored-By: Grok (agent loop)
2026-10-28 16:25:45 +08:00
Jesse_ChenandClaude Opus 5.5 8d1cb4a53b Heavy routes run in worker processes, one per heavy slot (issue #133, BUG-1493)
The single ThreadingHTTPServer ran pure-Python v5 score / block_scan / report
reference under one GIL, so the gate's two slots shared a core. start_server
now starts a spawn pool (workers = heavy concurrency, PYTHONHASHSEED=0, engine
pre-imported); those three routes call the same compute method in a worker.
Over HTTP: score alone 4.74 s, two at once 5.01 / 4.58 s (1.06x; in-process
1.56x). Results equal except per-process fingerprints; report markdown equal.
~165 MB extra. A crashed pool answers inline and restarts; off with
JYOTISH_HEAVY_COMPUTE_PROCESSES=0; tests calling compute methods unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 14:28:05 +08:00
Jesse_ChenandClaude Opus 5.5 5fd79a5649 Chart surfaces start Vimshottari from the birth moment, as reports do (issue #137, BUG-1492)
/api/chart, /api/dasha and the analysis layer, daily guidance and the KP
monthly packet used compute_vimshottari_timeline, which hands
build_dasha_timeline only the birth date, so periods started at midnight;
cmd_dasha (reports) starts from the birth clock and lays antardashas from the
full parent with float days. scripts/chart_dasha/birth_moment.py reproduces
cmd_dasha; 60 standard charts: MD and AD 60/60 equal (old chart path 9/60),
51 charts move by at most one day. Frozen scoring files are untouched, so
rectification probes keep the day start (left for a product decision).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 14:27:35 +08:00
Jesse_ChenandClaude Opus 5.5 a614895a2b Loader waits for a module another thread is still importing (issue #132, BUG-1482 reopened)
Independent Staging Quality Gate / validate (push) Successful in 16m40s
Independent Staging Quality Gate / publish (push) Successful in 4m32s
Gate run 5888 failed: the synastry full dossier computes two full readings
on a thread pool, and the second thread got jyotish_engine from sys.modules
while the first was still executing it (no cmd_full_reading yet). Reuse now
goes through importlib.import_module, which waits on the module lock.

Four threads loading one module in a fresh interpreter: before
[False, True, True, True], after all True three times. Dossier scenario
before 4/4 AttributeError, after 6/6 ok; synastry-full-report.test.ts 17/17.
Ledger ERR-117: local npm baseline hid it (system python3 lacks swisseph).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 13:47:30 +08:00
Jesse_ChenandClaude cd6ad9d27a Merge origin/staging into upstream sync 9 (issue #141)
Independent Staging Quality Gate / validate (push) Failing after 14m40s
Independent Staging Quality Gate / publish (push) Skipped
Staging took BUG-1472..1482 while this branch was in review, so the
branch's eight entries move to BUG-1483..1490. Docs and one test
comment only; the branch's commit messages keep the old numbers.

Co-Authored-By: Claude (agent loop) <noreply@anthropic.com>
2026-10-28 12:45:29 +08:00
Jesse_ChenandClaude Opus 5.5 8a72aa5b44 API loader shares one module object per file (issue #132, BUG-1482)
Independent Staging Quality Gate / publish (push) Canceled after 0s
Independent Staging Quality Gate / validate (push) Canceled after 8m49s
_load_local_module always re-executed the file as _jyotish_local_<name>, so
engine, dasha, varga and others ran as extra copies with their own caches.
It now reuses scripts.<name> / <name> when that file is already imported,
else imports it under its plain name so later imports share it; the private
copy remains only as a fallback. Call sites unchanged. Probe after one
consultation and one chart: loader-made copies 19 -> 0.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 12:43:59 +08:00
Jesse_ChenandClaude Opus 5.5 0594afcd5c Remove 11 closure ledger scripts only their own tests used (issue #138, BUG-1481)
Batch 1 of the scripts/ root cleanup: the closure scripts no runtime entry,
other script, workflow, deploy file, ops doc or quality gate reaches, with
their 11 test files (30 cases). Their references/ outputs stay. Scripts still
imported elsewhere, named by the gate, or listed in archived reference indexes
are kept. Root budget 452 -> 441.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 12:43:08 +08:00
jesse-uxandGrok (agent loop) 60116f2813 test(cli): lock Darakaraka to the canonical karaka table (BUG-1478, issue #141)
The D9 smoke case expected Sun, which is what the old reader produced when
it took the 7th highest degree in the 8-karaka variant. The canonical table
and the fixed reader both give Moon for this chart (Moon 3.09 degrees).

Expect Moon and the D9 fields that follow it, and assert the reader agrees
with chara_karaka_8.karaka_table_8.Darakaraka.planet so the test locks
reader/main-table identity instead of one planet name.

Co-Authored-By: Grok (agent loop)
2026-10-28 12:39:55 +08:00
Jesse_ChenandClaude Opus 5.5 b9a5415e71 VedAstro failures are remembered for the day; the rectification check fits the frontend's wait (issue #130, BUG-1479)
Independent Staging Quality Gate / publish (push) Canceled after 0s
Independent Staging Quality Gate / validate (push) Canceled after 2m17s
- Foreground gateway: a run that ended without official data is written to
  the existing same-day negative snapshot store; later turns that day answer
  from it without starting the gateway (second call <= 0.15 s, same fields).
  Success still goes to the positive cache first; a consult-gate deferral and
  a join timeout are not failures.
- /v5/vedastro-validate: a result blocked by VedAstro itself is kept in memory
  for a day per (evidence fingerprint, candidate pair); evidence-decided
  results are not. The whole check has 11 s (frontend waits 12 s); calls with
  time to spare keep the adapter timeout, so normal output is unchanged.
- conftest also isolates the negative store and clears the check memory.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 12:38:17 +08:00
Jesse_ChenandClaude Opus 5.5 18c6e13028 Consult card keeps parsed packets in memory, prewarms each turn, writes 0600 (issue #129, BUG-1476)
Independent Staging Quality Gate / publish (push) Canceled after 0s
Independent Staging Quality Gate / validate (push) Canceled after 11s
- consult_packet_view keeps the last 3 parsed packets with their shared domain
  base (~30 MB each). A hit reads no file and copies nothing: attach for one
  domain 0.106 s -> 0.002 s. Memory holds the file's JSON round trip, i.e.
  exactly what a hit returned before; consult_card_facts sha256 equal old/new.
- Cache files are created 0600, same bytes as before.
- The consult route fires a warm for the turn's chart before reserving credit,
  so the day's first question does not build the packet on the answer path.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 11:57:53 +08:00
jesse-uxandGrok (agent loop) 8aed605a43 fix(aspects): pass planet speed into the three production callers (BUG-1479, upstream e628118d)
aspects.py itself is in d226b0e53 because it was already staged. Ketu and applying/separating behavior are covered by the geometry test. Callers pass numeric speeds, or None when speed is absent. calc_house_aspects does not take speed.

Co-Authored-By: Grok (agent loop)
2026-10-28 09:45:39 +08:00
jesse-uxandGrok (agent loop) bd09485243 fix(arudha): sign-only coordinates, no invented degree (BUG-1477, upstream 8b55630a)
Arudha, A10, and Upapada report the sign and house only. Rectification still reads Bhava, Hora, and Ghati degrees plus frozen jaimini padas. Sealed 20-case replay and 900 reported-offset windows match the sync8 metrics line for line. Frozen-file hash matched.

Co-Authored-By: Grok (agent loop)
2026-10-28 09:45:39 +08:00
jesse-uxandGrok (agent loop) c1bd59e97a test(dasha): keep the upstream boundary contract (upstream 07fc5be3)
A8 is tests only. dasha_analyzer.py is frozen and was not edited. Both contract tests passed.

Co-Authored-By: Grok (agent loop)
2026-10-28 09:45:09 +08:00
jesse-uxandGrok (agent loop) 7bede9c99a fix(darakaraka): sort with the existing Jaimini tables (BUG-1478, upstream 45b3b66b)
Calls calc_chara_karaka_7 and calc_chara_karaka_8. jaimini.py is not edited.

Co-Authored-By: Grok (agent loop)
2026-10-28 09:45:08 +08:00
jesse-uxandGrok (agent loop) 96312893b7 fix(kalachakra): classical sign periods when the Moon longitude is present (BUG-1476, upstream f353a096)
Without a Moon longitude the simplified table remains. Exact pada starts use a local boundary table because shared find_nakshatra misclassifies 50 of 108 starts. Two existing child-period assertions now expect antardasha; original, new value, and reason are in the test comments. 116 source tests passed.

Co-Authored-By: Grok (agent loop)
2026-10-28 09:45:08 +08:00
jesse-uxandGrok (agent loop) b35c424945 fix(ashtottari): source arcs and a shifted sub-period clock (BUG-1475, upstream 0712f98f)
Rahu uses the circular unique start. Output keys are unchanged. Upstream arc and clock tests passed.

Co-Authored-By: Grok (agent loop)
2026-10-28 09:45:07 +08:00
jesse-uxandGrok (agent loop) 16bae00615 fix(saham): apply Table 74 before legacy rows (BUG-1474, upstream cb8a1ca7)
Directed-arc sign stays as BUG-1387. formula_traces remains the 36-row report list. Book rows are no longer overwritten by the old house approximation.

Co-Authored-By: Grok (agent loop)
2026-10-28 09:45:06 +08:00
jesse-uxandGrok (agent loop) 9d3f59a872 fix(tithi): use the source lord order (BUG-1473, upstream 33537b31)
Tithi lords follow tithi_seed. No new scripts/tithi_ashtottari.py. Upstream source tests passed.

Co-Authored-By: Grok (agent loop)
2026-10-28 09:45:06 +08:00
jesse-uxandGrok (agent loop) d226b0e538 fix(yogini): full balance on an exact nakshatra start (BUG-1472, upstream d268d519)
An exact star start belongs to the new nakshatra. Non-finite Moon longitude or year length raises. 31 boundary tests passed. 10000 random longitudes matched the previous balance formula, 0 mismatches.

Co-Authored-By: Grok (agent loop)
2026-10-28 09:45:04 +08:00
Jesse_ChenandClaude Opus 5.5 3eeb898071 Copy the full-data packet once per report, not once per domain (issue #122, BUG-1471)
Independent Staging Quality Gate / validate (push) Successful in 15m27s
Independent Staging Quality Gate / publish (push) Successful in 3m43s
read_full_data_domain deep-copied the shared worksheets on every call; a long
report reads five domains twice, so ten copies for read-only use. The shared
part is now copied once (full_data_domain_base) and reused for every domain's
facts and their leaf check; each domain's facts are still copied out so domains
share no objects. Long reports byte-identical on four fictional charts; with
#121, -24–29% end to end.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoz1Qk3y9buDv1mkmTu
2026-10-28 07:06:32 +08:00
Jesse_ChenandClaude Opus 5.5 0f0fea325e Sidebar session menu and drag on every page (issue #116)
Independent Staging Quality Gate / validate (push) Failing after 15m9s
Independent Staging Quality Gate / publish (push) Skipped
Rename, delete with confirmation, pin, share and reorder moved from Home's
session hook into the shared (app) shell, so /chart, /ephemeris, /reports
and /people rows get the same menu and drag as /. Home only adds its paging
cursor, what the open conversation does when deleted, and which local chats
are unsaved. BUG-1467.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014Ad9rqAB8pXXvyzh7f4X8v
2026-10-28 01:52:47 +08:00
Jesse_ChenandClaude Opus 5.5 941effe803 Chart page data tables and point layers (issue #114, round 2)
Independent Staging Quality Gate / validate (push) Successful in 16m22s
Independent Staging Quality Gate / publish (push) Successful in 4m26s
Adds /api/chart_points, a thin route over existing producers (upagrahas,
Swiss-Ephemeris special lagnas, Yogi points, arudha padas, friendship), and
the chart page's 数据表 (planets, upagrahas, special lagnas, arudhas,
shadbala detail, friendship) plus a 标点 layer that marks every point of one
group on the board. The ashtakavarga matrix gains the ascendant's own row.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014Ad9rqAB8pXXvyzh7f4X8v
2026-10-27 13:31:35 +08:00
Jesse_ChenandClaude Opus 5.5 cad28ddc04 报告前面加一段模型写的解读(issue #113 R1)
引擎在同一份 packet 上给出与对话同源卡相同的事实(include_reading_facts),
报告任务交付前用一次结构化模型调用写八节解读,校验不过或失败就不出解读、
报告照常交付。解读存在计算快照里,读接口一起返回,页面放在引擎正文之前,
后面标「计算依据」。用量按实际 token 记账(BUG-1460、BUG-1461)。

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LutgzyJqNhPpZy1nFsJtN3
2026-10-27 11:17:56 +08:00
Jesse_ChenandClaude Opus 5.5 24d6c9414d merge full-data parity (三) independent annual method reference into staging (issue #93, BUG-1430/1431 renumbered to 1442/1443)
Independent Staging Quality Gate / validate (push) Successful in 20m17s
Independent Staging Quality Gate / publish (push) Successful in 9m16s
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LutgzyJqNhPpZy1nFsJtN3
2026-10-26 22:28:00 +08:00
jesse-uxandGrok (agent loop) 1c428d7b6e 跟上已经换过的界面检查,测试环境才能接着发布(BUG-1439)。
Independent Staging Quality Gate / validate (push) Failing after 19m8s
Independent Staging Quality Gate / publish (push) Skipped
Co-Authored-By: Grok (agent loop)
2026-10-25 15:27:14 +08:00
jesse-uxandGrok (agent loop) 19379fbb41 合并 origin/staging,并补上两处测试替身。
研究章仍在六章之后、口径替换之前。独立年度方法参考仍在口径替换之后,来源说明不会被删掉。两条打回测试的替身补上额外参数,不改报告计算,不改原有断言。指纹记录改称 BUG-1430,因为 BUG-1429 已被研究章占用。

跑过两条打回测试、六章与指纹相关测试,以及 200 张英文扫描,退出码都是 0。

Co-Authored-By: Grok (agent loop)
2026-10-24 11:13:26 +08:00
jesse-uxandGrok (agent loop) c899e36509 把独立年度方法参考算进结果指纹,标准版不再白算这一章。
跑了修复单点名的测试、两次真算 PyJHora,以及 200 张英文扫描。

Co-Authored-By: Grok (agent loop)
2026-10-23 23:55:06 +08:00
jesse-uxandGrok (agent loop) a757af6b4e 标出研究章和 PyJHora 的已知差别(#92)。
10 张虚构盘逐体系对照。不一致的方法在标题下写明差在哪一类。本命 Tithi 顺行一致,逆行没有公开函数。Windows 上 1970 年以前的日出不再用 fromtimestamp。

自测:合同与研究章测试通过;200 张英文扫描约 1956 秒通过。未跑全量 pytest、快速门和前端。

Co-Authored-By: Grok (agent loop)
2026-10-23 22:29:52 +08:00
jesse-uxandGrok (agent loop) c644881a30 feat(report): 完整数据版末尾增加独立年度方法参考
PyJHora 只在子进程里计算请求年及后两年。对话、校正和其余章节保持不导入时的结果。结果指纹不算这一章。

Windows 自测:隐私标记、导入扫描、结果指纹和 S7 退出码 0。阅读页、英文和年运章在此之前已通过。虚构盘 0 中英一起最高 59 秒。

Co-Authored-By: Grok (agent loop)
2026-10-23 20:13:28 +08:00
jesse-uxandGrok (agent loop) d45e65a9ec 完整数据版补上研究口径的推运、次小运和细分盘(#92)。
研究章在渲染时计算,不写入资料包。四种星座大运次小运和 Kalachakra 第三层不改原来的主运、子运。D81、D108、D144 只留在研究章。

自测:test_research_timing、星座大运、域读取、卫生预算、真恒星、jhora 扫描、API 增长、六章标题、英文版。三张虚构盘中英出稿都低于 180 秒。PyJHora 已导入但未做逐层对照。

Co-Authored-By: Grok (agent loop)
2026-10-23 18:20:44 +08:00
jesse-uxandGrok (agent loop) 41cbf38531 补上完整数据版 K4:年运新字段放在原键后面,Yogini 缺字段不再整段失败。
pytest tests/test_annual_tajika_pack.py tests/test_dasha_master_children.py tests/test_report_longform_gaps2.py:30 项,退出码 0。

Co-Authored-By: Grok (agent loop)
2026-10-23 15:24:11 +08:00
jesse-uxandGrok (agent loop) cfd0ab68ac 完整数据版补上行星和宫主解释、后两年年运细项,以及 72 年逐年年返。
定向测试和 200 张英文扫描通过。一张虚构盘中英合计约 20 秒。土星和 KP 结果段仍按修复单让步。

Co-Authored-By: Grok (agent loop)
2026-10-23 15:04:25 +08:00
jesse-uxandGrok (agent loop) 39468f126c 行星解释里的六维力量合计改读已经算出的 rupa 总分。有总分时不再写成「未列出」。
Co-Authored-By: Grok (agent loop)
2026-10-23 10:17:34 +08:00
jesse-uxandGrok (agent loop) 355946cd1a 从报告日期所在月起列出 36 个月的九星表。报告口径和 KP 岁差口径各一张,另有五级大运月采样。黄经仍走本系统恒星计算。
Co-Authored-By: Grok (agent loop)
2026-10-23 10:17:29 +08:00
jesse-uxandGrok (agent loop) 4c405d2a51 当年和后两年写出月返照、原生 Patyayini 和 Tithi Pravesha。已有年主、Muntha、Mudda、Sahams、Tajika 不改写。出生地八年总览会算,72 年生命周期年返先不做。
Co-Authored-By: Grok (agent loop)
2026-10-23 10:17:13 +08:00