astroapi-io-client 0.2.4__tar.gz → 0.2.6__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (26) hide show
  1. {astroapi_io_client-0.2.4 → astroapi_io_client-0.2.6}/PKG-INFO +5 -4
  2. {astroapi_io_client-0.2.4 → astroapi_io_client-0.2.6}/README.md +4 -3
  3. {astroapi_io_client-0.2.4 → astroapi_io_client-0.2.6}/pyproject.toml +1 -1
  4. {astroapi_io_client-0.2.4 → astroapi_io_client-0.2.6}/src/astroapi_client/__init__.py +1 -1
  5. {astroapi_io_client-0.2.4 → astroapi_io_client-0.2.6}/src/astroapi_client/_validation.py +10 -0
  6. {astroapi_io_client-0.2.4 → astroapi_io_client-0.2.6}/src/astroapi_client/client.py +7 -3
  7. {astroapi_io_client-0.2.4 → astroapi_io_client-0.2.6}/src/astroapi_client/types.py +10 -0
  8. {astroapi_io_client-0.2.4 → astroapi_io_client-0.2.6}/src/astroapi_io_client.egg-info/PKG-INFO +5 -4
  9. {astroapi_io_client-0.2.4 → astroapi_io_client-0.2.6}/tests/test_client.py +4 -0
  10. {astroapi_io_client-0.2.4 → astroapi_io_client-0.2.6}/LICENSE.txt +0 -0
  11. {astroapi_io_client-0.2.4 → astroapi_io_client-0.2.6}/setup.cfg +0 -0
  12. {astroapi_io_client-0.2.4 → astroapi_io_client-0.2.6}/src/astroapi_client/errors.py +0 -0
  13. {astroapi_io_client-0.2.4 → astroapi_io_client-0.2.6}/src/astroapi_client/py.typed +0 -0
  14. {astroapi_io_client-0.2.4 → astroapi_io_client-0.2.6}/src/astroapi_client/receipts.py +0 -0
  15. {astroapi_io_client-0.2.4 → astroapi_io_client-0.2.6}/src/astroapi_io_client.egg-info/SOURCES.txt +0 -0
  16. {astroapi_io_client-0.2.4 → astroapi_io_client-0.2.6}/src/astroapi_io_client.egg-info/dependency_links.txt +0 -0
  17. {astroapi_io_client-0.2.4 → astroapi_io_client-0.2.6}/src/astroapi_io_client.egg-info/requires.txt +0 -0
  18. {astroapi_io_client-0.2.4 → astroapi_io_client-0.2.6}/src/astroapi_io_client.egg-info/top_level.txt +0 -0
  19. {astroapi_io_client-0.2.4 → astroapi_io_client-0.2.6}/tests/test_aspect_windows_client.py +0 -0
  20. {astroapi_io_client-0.2.4 → astroapi_io_client-0.2.6}/tests/test_calendar_export.py +0 -0
  21. {astroapi_io_client-0.2.4 → astroapi_io_client-0.2.6}/tests/test_davison_input.py +0 -0
  22. {astroapi_io_client-0.2.4 → astroapi_io_client-0.2.6}/tests/test_house_ingresses_client.py +0 -0
  23. {astroapi_io_client-0.2.4 → astroapi_io_client-0.2.6}/tests/test_next_expansions_client.py +0 -0
  24. {astroapi_io_client-0.2.4 → astroapi_io_client-0.2.6}/tests/test_onboarding_context_client.py +0 -0
  25. {astroapi_io_client-0.2.4 → astroapi_io_client-0.2.6}/tests/test_planetary_events_client.py +0 -0
  26. {astroapi_io_client-0.2.4 → astroapi_io_client-0.2.6}/tests/test_varga_input.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: astroapi-io-client
3
- Version: 0.2.4
3
+ Version: 0.2.6
4
4
  Summary: Synchronous Python client for the AstroAPI.io calculation gateway
5
5
  License-Expression: ISC
6
6
  Classifier: Programming Language :: Python :: 3
@@ -14,13 +14,13 @@ Dynamic: license-file
14
14
 
15
15
  # AstroAPI.io Python client
16
16
 
17
- The R197 source version `astroapi-io-client==0.2.4` covers all forty-five calculation routes: forty-four standard operations plus the separate Pro Nakshatra Timeline. Minor-body calculations are not part of the contract.
17
+ The R198 client `astroapi-io-client==0.2.6` covers all forty-six calculation routes: forty-five standard operations plus the separate Pro Nakshatra Timeline. Minor-body calculations are not part of the contract.
18
18
 
19
19
  A synchronous client for Python 3.10+, with no runtime dependencies.
20
20
  The package import is `astroapi_client`; the distribution name is
21
- `astroapi-io-client`. Version 0.2.2 is the published R195 package; 0.2.4 is source-only and package availability never implies deployed API capabilities.
21
+ `astroapi-io-client`. Version 0.2.6 is the current published R198 client; package availability never implies that source-only R198 API capabilities are deployed.
22
22
 
23
- Install from PyPI with `python -m pip install astroapi-io-client==0.2.2`, or from a local checkout using `python -m pip install ./clients/python`.
23
+ Install from PyPI with `python -m pip install astroapi-io-client==0.2.6`, or from a local checkout using `python -m pip install ./clients/python`.
24
24
  Building needs setuptools and wheel; the installed client uses only the standard
25
25
  library. Keep API credentials in trusted server or command-line environments.
26
26
 
@@ -98,6 +98,7 @@ Type hints describe the server contract and do not perform response validation.
98
98
  | `chart_robustness` **beta** | `calculateChartRobustness` | unknown or approximate birth time plus 2–3 convention profiles | sampled stability classifications without rectification, ranking, or prediction |
99
99
  | `civil_time_audit` **beta** | `calculateCivilTimeAudit` | pinned place, local date/time, one explicit profile | both repeated-time chart candidates and exact 22-fact differences, or no shifted gap time |
100
100
  | `chart_input_readiness` **beta** | `calculateChartInputReadiness` | pinned place, exact/approximate/unknown time quality, explicit profile | route readiness plus resolved, candidate, or sampled evidence for 22 facts |
101
+ | `house_system_readiness` **beta** | `calculateHouseSystemReadiness` | exact birth and explicit tropical/sidereal profile | fixed 25-system availability matrix with fingerprints and no fallback |
101
102
  | `synastry_svg` **beta** | `calculateSynastrySvg` | two births; optional zodiac/houses/theme/aspects/`include_png` | `result["svg"]`, optional `result["png"]` |
102
103
  | `transit_svg` **beta** | `calculateTransitSvg` | birth and transit date; optional display controls/`include_png` | `result["svg"]`, optional `result["png"]` |
103
104
  | `natal_report` **beta** | `calculateNatalReport` | birth; optional zodiac/houses/theme/SVG/download | `result["html"]`, source-linked `result["facts"]`, optional `result["download"]` |
@@ -1,12 +1,12 @@
1
1
  # AstroAPI.io Python client
2
2
 
3
- The R197 source version `astroapi-io-client==0.2.4` covers all forty-five calculation routes: forty-four standard operations plus the separate Pro Nakshatra Timeline. Minor-body calculations are not part of the contract.
3
+ The R198 client `astroapi-io-client==0.2.6` covers all forty-six calculation routes: forty-five standard operations plus the separate Pro Nakshatra Timeline. Minor-body calculations are not part of the contract.
4
4
 
5
5
  A synchronous client for Python 3.10+, with no runtime dependencies.
6
6
  The package import is `astroapi_client`; the distribution name is
7
- `astroapi-io-client`. Version 0.2.2 is the published R195 package; 0.2.4 is source-only and package availability never implies deployed API capabilities.
7
+ `astroapi-io-client`. Version 0.2.6 is the current published R198 client; package availability never implies that source-only R198 API capabilities are deployed.
8
8
 
9
- Install from PyPI with `python -m pip install astroapi-io-client==0.2.2`, or from a local checkout using `python -m pip install ./clients/python`.
9
+ Install from PyPI with `python -m pip install astroapi-io-client==0.2.6`, or from a local checkout using `python -m pip install ./clients/python`.
10
10
  Building needs setuptools and wheel; the installed client uses only the standard
11
11
  library. Keep API credentials in trusted server or command-line environments.
12
12
 
@@ -84,6 +84,7 @@ Type hints describe the server contract and do not perform response validation.
84
84
  | `chart_robustness` **beta** | `calculateChartRobustness` | unknown or approximate birth time plus 2–3 convention profiles | sampled stability classifications without rectification, ranking, or prediction |
85
85
  | `civil_time_audit` **beta** | `calculateCivilTimeAudit` | pinned place, local date/time, one explicit profile | both repeated-time chart candidates and exact 22-fact differences, or no shifted gap time |
86
86
  | `chart_input_readiness` **beta** | `calculateChartInputReadiness` | pinned place, exact/approximate/unknown time quality, explicit profile | route readiness plus resolved, candidate, or sampled evidence for 22 facts |
87
+ | `house_system_readiness` **beta** | `calculateHouseSystemReadiness` | exact birth and explicit tropical/sidereal profile | fixed 25-system availability matrix with fingerprints and no fallback |
87
88
  | `synastry_svg` **beta** | `calculateSynastrySvg` | two births; optional zodiac/houses/theme/aspects/`include_png` | `result["svg"]`, optional `result["png"]` |
88
89
  | `transit_svg` **beta** | `calculateTransitSvg` | birth and transit date; optional display controls/`include_png` | `result["svg"]`, optional `result["png"]` |
89
90
  | `natal_report` **beta** | `calculateNatalReport` | birth; optional zodiac/houses/theme/SVG/download | `result["html"]`, source-linked `result["facts"]`, optional `result["download"]` |
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "astroapi-io-client"
7
- version = "0.2.4"
7
+ version = "0.2.6"
8
8
  description = "Synchronous Python client for the AstroAPI.io calculation gateway"
9
9
  readme = "README.md"
10
10
  license = "ISC"
@@ -30,7 +30,7 @@ from .types import (
30
30
  PlaceSearchInput, TimezoneResolveInput, NatalContextInput,
31
31
  )
32
32
 
33
- __version__ = "0.2.4"
33
+ __version__ = "0.2.6"
34
34
  __all__ = [
35
35
  "NumerologyInput", "verify_calculation_receipt",
36
36
  "AstroAPIClient", "AstroAPIError", "ClientBusyError", "HTTPError", "DavisonInput",
@@ -702,6 +702,16 @@ def encode_request(route: str, payload: Any) -> bytes:
702
702
  _invalid("tropical profiles cannot include ayanamsa.")
703
703
  if profile["zodiac"] == "sidereal" and ("ayanamsa" not in profile or profile["ayanamsa"] not in _AYANAMSAS):
704
704
  _invalid("sidereal profiles require a supported ayanamsa.")
705
+ elif route == "house-system-readiness":
706
+ _object(data, {"birth", "profile"}, {"birth", "profile"})
707
+ birth = _object(data["birth"], {"date", "time", "timezone", "lat", "lon"}, {"date", "time", "timezone", "lat", "lon"})
708
+ _birth(birth)
709
+ profile = _object(data["profile"], {"zodiac", "ayanamsa"}, {"zodiac"})
710
+ _enum(profile["zodiac"], {"tropical", "sidereal"}, "zodiac must be tropical or sidereal.")
711
+ if profile["zodiac"] == "tropical" and "ayanamsa" in profile:
712
+ _invalid("tropical profiles cannot include ayanamsa.")
713
+ if profile["zodiac"] == "sidereal" and ("ayanamsa" not in profile or profile["ayanamsa"] not in _AYANAMSAS):
714
+ _invalid("sidereal profiles require a supported ayanamsa.")
705
715
  elif route == "chart-robustness":
706
716
  _object(data, {"birth_time", "lat", "lon", "profiles"}, {"birth_time", "lat", "lon", "profiles"})
707
717
  workflow = _object(data["birth_time"], {"status", "date", "time", "timezone", "uncertainty_minutes"}, {"status"})
@@ -32,7 +32,7 @@ from .types import (
32
32
  MoonPhaseInput, MoonPhaseResponse, DavisonInput, PlanetaryEventsInput, PlanetaryEventsResponse,
33
33
  HouseIngressesInput, HouseIngressesResponse,
34
34
  AspectWindowsInput, AspectWindowsResponse,
35
- EventRuleSearchInput, ConventionCompareInput, ReleaseCompareInput, ChartRobustnessInput, CivilTimeAuditInput, ChartInputReadinessInput,
35
+ EventRuleSearchInput, ConventionCompareInput, ReleaseCompareInput, ChartRobustnessInput, CivilTimeAuditInput, ChartInputReadinessInput, HouseSystemReadinessInput,
36
36
  EventCalendarInput, SynastrySvgInput, TransitSvgInput, NatalReportInput,
37
37
  BirthTimeSensitivityInput, RelocationChartInput, AstrocartographyInput,
38
38
  PlaceSearchInput, TimezoneResolveInput, NatalContextInput,
@@ -181,7 +181,7 @@ def _perform(
181
181
  "Content-Type": "application/json",
182
182
  "Accept": "application/json",
183
183
  "Accept-Encoding": "identity",
184
- "User-Agent": "astroapi-io-client/0.2.4",
184
+ "User-Agent": "astroapi-io-client/0.2.6",
185
185
  "Connection": "close",
186
186
  **({"X-AstroAPI-Receipt": "v1"} if request_receipt else {}),
187
187
  })
@@ -285,7 +285,7 @@ class AstroAPIClient:
285
285
 
286
286
  def _request(self, route: str, payload: object) -> JSONResponse:
287
287
  body = encode_request(route, payload)
288
- timeout = (self._timeline_timeout if route in {"nakshatra-timeline", "birth-time-sensitivity", "chart-robustness", "chart-input-readiness"}
288
+ timeout = (self._timeline_timeout if route in {"nakshatra-timeline", "birth-time-sensitivity", "chart-robustness", "chart-input-readiness", "house-system-readiness"}
289
289
  else self._planetary_events_timeout if route in {"planetary-events", "house-ingresses", "eclipse-geometry", "electional-search", "event-rule-search"}
290
290
  else self._aspect_windows_timeout if route == "aspect-windows"
291
291
  else self._timeout)
@@ -436,6 +436,10 @@ class AstroAPIClient:
436
436
  """BETA: gate exact chart workflows against birth-time data quality."""
437
437
  return self._request("chart-input-readiness", payload)
438
438
 
439
+ def house_system_readiness(self, payload: HouseSystemReadinessInput) -> JSONResponse:
440
+ """BETA: preflight the fixed 25-system inventory without fallback."""
441
+ return self._request("house-system-readiness", payload)
442
+
439
443
  def synastry_svg(self, payload: SynastrySvgInput) -> JSONResponse:
440
444
  """BETA: original deterministic double-wheel relationship SVG."""
441
445
  return self._request("synastry-svg", payload)
@@ -409,6 +409,16 @@ class ChartInputReadinessInput(TypedDict):
409
409
  profile: ConventionProfile
410
410
 
411
411
 
412
+ class HouseSystemReadinessProfile(TypedDict, total=False):
413
+ zodiac: Zodiac
414
+ ayanamsa: Ayanamsa
415
+
416
+
417
+ class HouseSystemReadinessInput(TypedDict):
418
+ birth: BirthInput
419
+ profile: HouseSystemReadinessProfile
420
+
421
+
412
422
  class ReleaseCompareInput(TypedDict):
413
423
  releases: list[JSONResponse]
414
424
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: astroapi-io-client
3
- Version: 0.2.4
3
+ Version: 0.2.6
4
4
  Summary: Synchronous Python client for the AstroAPI.io calculation gateway
5
5
  License-Expression: ISC
6
6
  Classifier: Programming Language :: Python :: 3
@@ -14,13 +14,13 @@ Dynamic: license-file
14
14
 
15
15
  # AstroAPI.io Python client
16
16
 
17
- The R197 source version `astroapi-io-client==0.2.4` covers all forty-five calculation routes: forty-four standard operations plus the separate Pro Nakshatra Timeline. Minor-body calculations are not part of the contract.
17
+ The R198 client `astroapi-io-client==0.2.6` covers all forty-six calculation routes: forty-five standard operations plus the separate Pro Nakshatra Timeline. Minor-body calculations are not part of the contract.
18
18
 
19
19
  A synchronous client for Python 3.10+, with no runtime dependencies.
20
20
  The package import is `astroapi_client`; the distribution name is
21
- `astroapi-io-client`. Version 0.2.2 is the published R195 package; 0.2.4 is source-only and package availability never implies deployed API capabilities.
21
+ `astroapi-io-client`. Version 0.2.6 is the current published R198 client; package availability never implies that source-only R198 API capabilities are deployed.
22
22
 
23
- Install from PyPI with `python -m pip install astroapi-io-client==0.2.2`, or from a local checkout using `python -m pip install ./clients/python`.
23
+ Install from PyPI with `python -m pip install astroapi-io-client==0.2.6`, or from a local checkout using `python -m pip install ./clients/python`.
24
24
  Building needs setuptools and wheel; the installed client uses only the standard
25
25
  library. Keep API credentials in trusted server or command-line environments.
26
26
 
@@ -98,6 +98,7 @@ Type hints describe the server contract and do not perform response validation.
98
98
  | `chart_robustness` **beta** | `calculateChartRobustness` | unknown or approximate birth time plus 2–3 convention profiles | sampled stability classifications without rectification, ranking, or prediction |
99
99
  | `civil_time_audit` **beta** | `calculateCivilTimeAudit` | pinned place, local date/time, one explicit profile | both repeated-time chart candidates and exact 22-fact differences, or no shifted gap time |
100
100
  | `chart_input_readiness` **beta** | `calculateChartInputReadiness` | pinned place, exact/approximate/unknown time quality, explicit profile | route readiness plus resolved, candidate, or sampled evidence for 22 facts |
101
+ | `house_system_readiness` **beta** | `calculateHouseSystemReadiness` | exact birth and explicit tropical/sidereal profile | fixed 25-system availability matrix with fingerprints and no fallback |
101
102
  | `synastry_svg` **beta** | `calculateSynastrySvg` | two births; optional zodiac/houses/theme/aspects/`include_png` | `result["svg"]`, optional `result["png"]` |
102
103
  | `transit_svg` **beta** | `calculateTransitSvg` | birth and transit date; optional display controls/`include_png` | `result["svg"]`, optional `result["png"]` |
103
104
  | `natal_report` **beta** | `calculateNatalReport` | birth; optional zodiac/houses/theme/SVG/download | `result["html"]`, source-linked `result["facts"]`, optional `result["download"]` |
@@ -64,6 +64,7 @@ RULE_INPUT = {"rule_version": 1, "start_utc": "2026-01-01T00:00:00Z", "end_utc":
64
64
  CONVENTION_INPUT = {"birth": BIRTH, "profiles": [{"zodiac": "tropical", "house_system": "equal"}, {"zodiac": "sidereal", "ayanamsa": "lahiri", "house_system": "whole_sign"}]}
65
65
  CIVIL_TIME_AUDIT_INPUT = {"place_id": "geonames:5128581:2026-10-02", "date": "2024-11-03", "time": "01:30", "profile": {"zodiac": "tropical", "house_system": "equal"}}
66
66
  CHART_INPUT_READINESS_INPUT = {"place_id": "geonames:5128581:2026-10-02", "birth_time": {"status": "exact", "date": "2024-11-03", "time": "01:30"}, "profile": {"zodiac": "tropical", "house_system": "equal"}}
67
+ HOUSE_SYSTEM_READINESS_INPUT = {"birth": BIRTH, "profile": {"zodiac": "tropical"}}
67
68
  CHART_ROBUSTNESS_INPUT = {"birth_time": {"status": "approximate", "date": "2000-01-01", "time": "12:00", "timezone": "UTC", "uncertainty_minutes": 30}, "lat": 0, "lon": 0, "profiles": [{"zodiac": "tropical", "house_system": "equal"}, {"zodiac": "sidereal", "ayanamsa": "lahiri", "house_system": "whole_sign"}]}
68
69
  ROUTES += [
69
70
  ("event_rule_search", "event-rule-search", RULE_INPUT, {"type": "event_rule_search", "status": "beta", "rule_analysis": {}, "matching_samples": [], "sampled_candidate_windows": [], "metadata": {}}),
@@ -71,6 +72,7 @@ ROUTES += [
71
72
  ("chart_robustness", "chart-robustness", CHART_ROBUSTNESS_INPUT, {"type": "chart_robustness", "status": "beta", "profiles": [{}, {}], "facts": [{} for _ in range(22)], "summary": {}, "evidence": {}, "metadata": {}}),
72
73
  ("civil_time_audit", "civil-time-audit", CIVIL_TIME_AUDIT_INPUT, {"type": "civil_time_audit", "status": "beta", "resolution": {}, "profile": {}, "calculation_ready": False, "requires_selection": True, "candidates": [], "comparison": {}, "metadata": {}}),
73
74
  ("chart_input_readiness", "chart-input-readiness", CHART_INPUT_READINESS_INPUT, {"type": "chart_input_readiness", "status": "beta", "birth_time_status": "exact", "profile": {}, "resolution": {}, "exact_chart_ready": False, "next_action": "select_civil_time_candidate", "workflows": [{}, {}, {}, {}], "fact_evidence": [], "summary": {}, "evidence": {}, "metadata": {}}),
75
+ ("house_system_readiness", "house-system-readiness", HOUSE_SYSTEM_READINESS_INPUT, {"type": "house_system_readiness", "status": "beta", "input": BIRTH, "profile": {}, "systems": [{} for _ in range(25)], "summary": {}, "fallback": {"performed": False, "selected_system": None}, "metadata": {}}),
74
76
  ]
75
77
 
76
78
  @contextmanager
@@ -155,6 +157,7 @@ RULE_INPUT = {"rule_version": 1, "start_utc": "2026-01-01T00:00:00Z", "end_utc":
155
157
  CONVENTION_INPUT = {"birth": BIRTH, "profiles": [{"zodiac": "tropical", "house_system": "equal"}, {"zodiac": "sidereal", "ayanamsa": "lahiri", "house_system": "whole_sign"}]}
156
158
  CIVIL_TIME_AUDIT_INPUT = {"place_id": "geonames:5128581:2026-10-02", "date": "2024-11-03", "time": "01:30", "profile": {"zodiac": "tropical", "house_system": "equal"}}
157
159
  CHART_INPUT_READINESS_INPUT = {"place_id": "geonames:5128581:2026-10-02", "birth_time": {"status": "exact", "date": "2024-11-03", "time": "01:30"}, "profile": {"zodiac": "tropical", "house_system": "equal"}}
160
+ HOUSE_SYSTEM_READINESS_INPUT = {"birth": BIRTH, "profile": {"zodiac": "tropical"}}
158
161
  CHART_ROBUSTNESS_INPUT = {"birth_time": {"status": "approximate", "date": "2000-01-01", "time": "12:00", "timezone": "UTC", "uncertainty_minutes": 30}, "lat": 0, "lon": 0, "profiles": [{"zodiac": "tropical", "house_system": "equal"}, {"zodiac": "sidereal", "ayanamsa": "lahiri", "house_system": "whole_sign"}]}
159
162
  ROUTES += [
160
163
  ("event_rule_search", "event-rule-search", RULE_INPUT, {"type": "event_rule_search", "status": "beta", "rule_analysis": {}, "matching_samples": [], "sampled_candidate_windows": [], "metadata": {}}),
@@ -162,6 +165,7 @@ ROUTES += [
162
165
  ("chart_robustness", "chart-robustness", CHART_ROBUSTNESS_INPUT, {"type": "chart_robustness", "status": "beta", "profiles": [{}, {}], "facts": [{} for _ in range(22)], "summary": {}, "evidence": {}, "metadata": {}}),
163
166
  ("civil_time_audit", "civil-time-audit", CIVIL_TIME_AUDIT_INPUT, {"type": "civil_time_audit", "status": "beta", "resolution": {}, "profile": {}, "calculation_ready": False, "requires_selection": True, "candidates": [], "comparison": {}, "metadata": {}}),
164
167
  ("chart_input_readiness", "chart-input-readiness", CHART_INPUT_READINESS_INPUT, {"type": "chart_input_readiness", "status": "beta", "birth_time_status": "exact", "profile": {}, "resolution": {}, "exact_chart_ready": False, "next_action": "select_civil_time_candidate", "workflows": [{}, {}, {}, {}], "fact_evidence": [], "summary": {}, "evidence": {}, "metadata": {}}),
168
+ ("house_system_readiness", "house-system-readiness", HOUSE_SYSTEM_READINESS_INPUT, {"type": "house_system_readiness", "status": "beta", "input": BIRTH, "profile": {}, "systems": [{} for _ in range(25)], "summary": {}, "fallback": {"performed": False, "selected_system": None}, "metadata": {}}),
165
169
  ]
166
170
 
167
171
  @contextmanager