Skip to content

Commit 23bdd91

Browse files
g-battagliaclaude
andcommitted
release: 6.0.0a62 β€” zero-bug review campaign rounds 26–35
Bump 6.0.0a61 -> 6.0.0a62 and consolidate the rounds 26–35 review campaign into the CHANGELOG [Unreleased] Fixed section: error-contract hardening at the ephemeris/date boundary (from_iso_utc_time overflow, all PlanetaryReturnFactory crossing searches, relocate), year-0/BCE calendrical + ISO-offset consistency, serializer cusp-overshoot + zodiac_breakdown fold-back, eclipse/occultation location + occultable-body validation, and doc/type-contract accuracy β€” each runtime-reproduced and regression-tested. Quality gate green (ruff + mypy + pyright + core suite). Known: 15 all-points golden snapshots track the libephemeris 3.0.0rc1 interpolated-apsides (SE_INTP_APOG/PERG) drift documented under CHANGELOG Known limitations; every core position is bit-identical and no as-is code defect is involved. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GYC23HBUowV1CX58MGB1EL
1 parent 463a358 commit 23bdd91

3 files changed

Lines changed: 59 additions & 2 deletions

File tree

β€ŽCHANGELOG.mdβ€Ž

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,63 @@
22

33
## [Unreleased]
44

5+
### Fixed (pre-6.0.0 zero-bug review campaign, rounds 26–35)
6+
7+
Ten further review rounds, each rotating a fresh runtime-reproduced lens. Every
8+
finding below was reproduced offline before fixing and covered by a regression
9+
test; the fixes are error-contract / validation / display-consistency hardening
10+
with no change to any correct computed value.
11+
12+
- **Error contract at the ephemeris/date boundary.** `from_iso_utc_time` wrapped a
13+
raw `OverflowError`/`OSError` for an instant near `datetime.max/min` whose local
14+
wall time overflows during the UTC→local conversion (round 26). The
15+
`PlanetaryReturnFactory` crossing searches (`solcross_ut`/`mooncross_ut` and the
16+
sibling `helio_cross_ut`/`mooncross_node_ut`, forward **and** backward) leaked a
17+
raw `libephemeris` error when the search stepped off the loaded ephemeris range;
18+
all are now normalized to `KerykeionException` like every sibling event factory
19+
(rounds 31–32). `RelocatedChartFactory` leaked the same `astimezone` overflow for
20+
an extended-kernel extreme-year subject (round 27).
21+
- **Year 0 / BCE calendrical & ISO.** Year 0 (1 BCE) stored as the ISO-8601 unsigned
22+
`"0000"` crashed chart rendering because two display helpers
23+
(`format_datetime_with_timezone`, `format_iso_display`) routed it to
24+
`datetime.fromisoformat` (min year 1); both now take the manual branch (round 27).
25+
BCE subjects rendered the local ISO's LMT offset at minute resolution while
26+
deriving the Julian Day / UTC ISO from the exact offset, so the two ISO fields of
27+
one subject disagreed about the instant by up to ~30 s; the offset is now quantized
28+
to the whole second (matching the CE LMT path) and rendered `+HH:MM:SS` (round 34).
29+
- **Serialization / display consistency.** The text and LLM-context serializers
30+
rendered a within-~0.005Β°-of-cusp `position`/`abs_pos` as the impossible `"30.00"`
31+
/ out-of-range `"360.00"`; a shared `format_degrees_below_bound` now clamps just
32+
below the cusp (round 27). `dominants.zodiac_breakdown` raised `IndexError` on a
33+
tiny-negative input; a fold-back guard mirrors `get_kerykeion_point_from_degree`
34+
(round 27).
35+
- **Input validation.** `EclipseFactory.search_from_location` and
36+
`OccultationFactory.search_local` accepted an impossible latitude (`|lat|>90`,
37+
reachable via a lat/lng swap) and returned a bogus "visible" event; both now
38+
`validate_latitude`. Occultation search accepted non-physical calculated points
39+
(nodes, Lilith, Uranian hypotheticals) and fabricated events; it is now restricted
40+
to an occultable-body allowlist (round 35).
41+
- **Documentation & type-contract accuracy.** `KerykeionPointModel.dignity_score`
42+
documented range corrected to its true `[-9, +11]` net-sum span (round 28); the
43+
four Solar/Lunar `PlanetaryReturnFactory` methods narrowed `return_type` from the
44+
4-member `ReturnType` to `Literal["Solar","Lunar"]` (the accepted set); several
45+
`Raises:`/parameter docstrings aligned to the actual `KerykeionException` contract
46+
(rounds 31, 34); stale example output values in the SunTimes docstring and the
47+
README Moon-phase examples refreshed (round 33).
48+
49+
Lenses that ran fully **clean** across these rounds (extensive runtime evidence, no
50+
defect): algebraic/property invariants, aliasing/shared-mutable-state, concurrency &
51+
shared-cache thread-safety, resource lifecycle/long-run stability, cross-field model
52+
internal-consistency, model serialization round-trip (all types), SVG rendering at
53+
degenerate/extreme configs, two-subject techniques (composite/Davison/synastry/score),
54+
transit-series & chart-data assembly, predictive-technique arithmetic (progressions/
55+
returns/directions/zodiacal-releasing), perspective & coordinate transforms, peripheral
56+
reference values (Arabic parts/fixed stars/nodes/ACG/eclipses/nutation), settings &
57+
translation completeness (10 languages), configurable-input correctness & public-API
58+
integrity. The southern-polar quadrant-house MC behavior flagged in round 29 was
59+
confirmed upstream (libephemeris#46) as intended Swiss Ephemeris parity, not a defect β€”
60+
see Known limitations.
61+
562
### Fixed (pre-6.0.0 invariants + calendrical + doc-contract review, round 25)
663

764
- **BCE dates reject an impossible day-of-month instead of silently rolling it

β€Žpyproject.tomlβ€Ž

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[project]
22
name = "kerykeion"
3-
version = "6.0.0a61"
3+
version = "6.0.0a62"
44
authors = [
55
{ name = "Giacomo Battaglia", email = "kerykeion.astrology@gmail.com" }
66
]

β€Žuv.lockβ€Ž

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
Β (0)