dominus-sdk-python 6.3.0__tar.gz → 7.0.0__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 (71) hide show
  1. {dominus_sdk_python-6.3.0 → dominus_sdk_python-7.0.0}/PKG-INFO +11 -2
  2. {dominus_sdk_python-6.3.0 → dominus_sdk_python-7.0.0}/README.md +10 -1
  3. {dominus_sdk_python-6.3.0 → dominus_sdk_python-7.0.0}/dominus/__init__.py +3 -1
  4. {dominus_sdk_python-6.3.0 → dominus_sdk_python-7.0.0}/dominus/namespaces/__init__.py +4 -0
  5. {dominus_sdk_python-6.3.0 → dominus_sdk_python-7.0.0}/dominus/namespaces/authority.py +10 -69
  6. {dominus_sdk_python-6.3.0 → dominus_sdk_python-7.0.0}/dominus/start.py +1 -1
  7. {dominus_sdk_python-6.3.0 → dominus_sdk_python-7.0.0}/dominus_sdk_python.egg-info/PKG-INFO +11 -2
  8. {dominus_sdk_python-6.3.0 → dominus_sdk_python-7.0.0}/dominus_sdk_python.egg-info/SOURCES.txt +1 -0
  9. {dominus_sdk_python-6.3.0 → dominus_sdk_python-7.0.0}/pyproject.toml +1 -1
  10. {dominus_sdk_python-6.3.0 → dominus_sdk_python-7.0.0}/tests/test_authority_public_vocabulary.py +28 -56
  11. dominus_sdk_python-7.0.0/tests/test_namespace_barrel_exports.py +26 -0
  12. {dominus_sdk_python-6.3.0 → dominus_sdk_python-7.0.0}/dominus/config/__init__.py +0 -0
  13. {dominus_sdk_python-6.3.0 → dominus_sdk_python-7.0.0}/dominus/config/endpoints.py +0 -0
  14. {dominus_sdk_python-6.3.0 → dominus_sdk_python-7.0.0}/dominus/errors.py +0 -0
  15. {dominus_sdk_python-6.3.0 → dominus_sdk_python-7.0.0}/dominus/helpers/__init__.py +0 -0
  16. {dominus_sdk_python-6.3.0 → dominus_sdk_python-7.0.0}/dominus/helpers/auth.py +0 -0
  17. {dominus_sdk_python-6.3.0 → dominus_sdk_python-7.0.0}/dominus/helpers/cache.py +0 -0
  18. {dominus_sdk_python-6.3.0 → dominus_sdk_python-7.0.0}/dominus/helpers/console_capture.py +0 -0
  19. {dominus_sdk_python-6.3.0 → dominus_sdk_python-7.0.0}/dominus/helpers/core.py +0 -0
  20. {dominus_sdk_python-6.3.0 → dominus_sdk_python-7.0.0}/dominus/helpers/crypto.py +0 -0
  21. {dominus_sdk_python-6.3.0 → dominus_sdk_python-7.0.0}/dominus/helpers/sse.py +0 -0
  22. {dominus_sdk_python-6.3.0 → dominus_sdk_python-7.0.0}/dominus/helpers/trace.py +0 -0
  23. {dominus_sdk_python-6.3.0 → dominus_sdk_python-7.0.0}/dominus/namespaces/admin.py +0 -0
  24. {dominus_sdk_python-6.3.0 → dominus_sdk_python-7.0.0}/dominus/namespaces/ai.py +0 -0
  25. {dominus_sdk_python-6.3.0 → dominus_sdk_python-7.0.0}/dominus/namespaces/artifacts.py +0 -0
  26. {dominus_sdk_python-6.3.0 → dominus_sdk_python-7.0.0}/dominus/namespaces/auth.py +0 -0
  27. {dominus_sdk_python-6.3.0 → dominus_sdk_python-7.0.0}/dominus/namespaces/browser.py +0 -0
  28. {dominus_sdk_python-6.3.0 → dominus_sdk_python-7.0.0}/dominus/namespaces/coder.py +0 -0
  29. {dominus_sdk_python-6.3.0 → dominus_sdk_python-7.0.0}/dominus/namespaces/courier.py +0 -0
  30. {dominus_sdk_python-6.3.0 → dominus_sdk_python-7.0.0}/dominus/namespaces/db.py +0 -0
  31. {dominus_sdk_python-6.3.0 → dominus_sdk_python-7.0.0}/dominus/namespaces/ddl.py +0 -0
  32. {dominus_sdk_python-6.3.0 → dominus_sdk_python-7.0.0}/dominus/namespaces/deployer.py +0 -0
  33. {dominus_sdk_python-6.3.0 → dominus_sdk_python-7.0.0}/dominus/namespaces/fastapi.py +0 -0
  34. {dominus_sdk_python-6.3.0 → dominus_sdk_python-7.0.0}/dominus/namespaces/files.py +0 -0
  35. {dominus_sdk_python-6.3.0 → dominus_sdk_python-7.0.0}/dominus/namespaces/health.py +0 -0
  36. {dominus_sdk_python-6.3.0 → dominus_sdk_python-7.0.0}/dominus/namespaces/jobs.py +0 -0
  37. {dominus_sdk_python-6.3.0 → dominus_sdk_python-7.0.0}/dominus/namespaces/logs.py +0 -0
  38. {dominus_sdk_python-6.3.0 → dominus_sdk_python-7.0.0}/dominus/namespaces/platform.py +0 -0
  39. {dominus_sdk_python-6.3.0 → dominus_sdk_python-7.0.0}/dominus/namespaces/portal.py +0 -0
  40. {dominus_sdk_python-6.3.0 → dominus_sdk_python-7.0.0}/dominus/namespaces/processor.py +0 -0
  41. {dominus_sdk_python-6.3.0 → dominus_sdk_python-7.0.0}/dominus/namespaces/publisher.py +0 -0
  42. {dominus_sdk_python-6.3.0 → dominus_sdk_python-7.0.0}/dominus/namespaces/recipes.py +0 -0
  43. {dominus_sdk_python-6.3.0 → dominus_sdk_python-7.0.0}/dominus/namespaces/redis.py +0 -0
  44. {dominus_sdk_python-6.3.0 → dominus_sdk_python-7.0.0}/dominus/namespaces/secrets.py +0 -0
  45. {dominus_sdk_python-6.3.0 → dominus_sdk_python-7.0.0}/dominus/namespaces/secure.py +0 -0
  46. {dominus_sdk_python-6.3.0 → dominus_sdk_python-7.0.0}/dominus/namespaces/stash.py +0 -0
  47. {dominus_sdk_python-6.3.0 → dominus_sdk_python-7.0.0}/dominus/namespaces/sync.py +0 -0
  48. {dominus_sdk_python-6.3.0 → dominus_sdk_python-7.0.0}/dominus/namespaces/warden.py +0 -0
  49. {dominus_sdk_python-6.3.0 → dominus_sdk_python-7.0.0}/dominus/namespaces/workflow.py +0 -0
  50. {dominus_sdk_python-6.3.0 → dominus_sdk_python-7.0.0}/dominus/services/__init__.py +0 -0
  51. {dominus_sdk_python-6.3.0 → dominus_sdk_python-7.0.0}/dominus_sdk_python.egg-info/dependency_links.txt +0 -0
  52. {dominus_sdk_python-6.3.0 → dominus_sdk_python-7.0.0}/dominus_sdk_python.egg-info/requires.txt +0 -0
  53. {dominus_sdk_python-6.3.0 → dominus_sdk_python-7.0.0}/dominus_sdk_python.egg-info/top_level.txt +0 -0
  54. {dominus_sdk_python-6.3.0 → dominus_sdk_python-7.0.0}/setup.cfg +0 -0
  55. {dominus_sdk_python-6.3.0 → dominus_sdk_python-7.0.0}/tests/test_auth.py +0 -0
  56. {dominus_sdk_python-6.3.0 → dominus_sdk_python-7.0.0}/tests/test_browser_namespace.py +0 -0
  57. {dominus_sdk_python-6.3.0 → dominus_sdk_python-7.0.0}/tests/test_control_plane_namespaces.py +0 -0
  58. {dominus_sdk_python-6.3.0 → dominus_sdk_python-7.0.0}/tests/test_errors.py +0 -0
  59. {dominus_sdk_python-6.3.0 → dominus_sdk_python-7.0.0}/tests/test_flat_commands.py +0 -0
  60. {dominus_sdk_python-6.3.0 → dominus_sdk_python-7.0.0}/tests/test_health.py +0 -0
  61. {dominus_sdk_python-6.3.0 → dominus_sdk_python-7.0.0}/tests/test_logs.py +0 -0
  62. {dominus_sdk_python-6.3.0 → dominus_sdk_python-7.0.0}/tests/test_platform_coder_namespaces.py +0 -0
  63. {dominus_sdk_python-6.3.0 → dominus_sdk_python-7.0.0}/tests/test_provisioning_parity.py +0 -0
  64. {dominus_sdk_python-6.3.0 → dominus_sdk_python-7.0.0}/tests/test_public_exports.py +0 -0
  65. {dominus_sdk_python-6.3.0 → dominus_sdk_python-7.0.0}/tests/test_publisher_namespace.py +0 -0
  66. {dominus_sdk_python-6.3.0 → dominus_sdk_python-7.0.0}/tests/test_recipes_namespace.py +0 -0
  67. {dominus_sdk_python-6.3.0 → dominus_sdk_python-7.0.0}/tests/test_recipes_stash_routing.py +0 -0
  68. {dominus_sdk_python-6.3.0 → dominus_sdk_python-7.0.0}/tests/test_stash_artifact_facade.py +0 -0
  69. {dominus_sdk_python-6.3.0 → dominus_sdk_python-7.0.0}/tests/test_transport_compat.py +0 -0
  70. {dominus_sdk_python-6.3.0 → dominus_sdk_python-7.0.0}/tests/test_workflow_lifecycle.py +0 -0
  71. {dominus_sdk_python-6.3.0 → dominus_sdk_python-7.0.0}/tests/test_workflow_refs.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dominus-sdk-python
3
- Version: 6.3.0
3
+ Version: 7.0.0
4
4
  Summary: Python SDK for the Dominus gateway-first platform
5
5
  Author-email: CareBridge Systems <dev@carebridge.io>
6
6
  License-Expression: LicenseRef-Proprietary
@@ -35,6 +35,12 @@ Requires-Dist: PyJWT>=2.8.0; extra == "all"
35
35
 
36
36
  Async Python SDK for the Dominus gateway-first service plane.
37
37
 
38
+ ## Agent Guide
39
+
40
+ Start with `docs/agent-guide/INDEX.md`. The current snapshot is
41
+ `docs/agent-guide/2026-06-27-0849-agent-guide/00-reading-order.md`; the latest
42
+ cleanup audit is `docs/janitor/2026-06-27-0849-agent-guide-cleanup-audit.md`.
43
+
38
44
  ## What This Repo Ships
39
45
 
40
46
  - Python 3.9+ asyncio client for Dominus services
@@ -42,7 +48,7 @@ Async Python SDK for the Dominus gateway-first service plane.
42
48
  - Gateway-scoped client mode for MCP and other user-JWT sessions
43
49
  - Transport compatibility for wrapped `{success,data}` responses and unwrapped Warden/control-plane success objects
44
50
  - Local helpers for JWT verification, trace propagation, retries, and console capture
45
- - Current package version: `6.1.1`
51
+ - Current package version: `7.0.0`
46
52
 
47
53
  ## Install
48
54
 
@@ -223,6 +229,9 @@ JWT and selected scope headers directly through Gateway.
223
229
  | `warden` | Warden | Thin operator control-plane request surface |
224
230
  | `platform` | Platform Worker | Group/repository policy decisions with actor attribution |
225
231
  | `coder` | Coder Runtime | Policy-bound Coder run lifecycle with workflow/pipeline recipe launch sources |
232
+ | `publisher` | Publisher | Release/channel/signing build and artifact operations |
233
+ | `stash` | Stash | Stash items, kinds, bookmarks, watches, artifact facade |
234
+ | `recipes` | Recipe Worker | Recipe type registry, publish, validate, get/list |
226
235
  | `fastapi` | Local decorators | `@jwt`, `@psk`, `@scopes(...)` |
227
236
 
228
237
  ## Root Shortcuts
@@ -2,6 +2,12 @@
2
2
 
3
3
  Async Python SDK for the Dominus gateway-first service plane.
4
4
 
5
+ ## Agent Guide
6
+
7
+ Start with `docs/agent-guide/INDEX.md`. The current snapshot is
8
+ `docs/agent-guide/2026-06-27-0849-agent-guide/00-reading-order.md`; the latest
9
+ cleanup audit is `docs/janitor/2026-06-27-0849-agent-guide-cleanup-audit.md`.
10
+
5
11
  ## What This Repo Ships
6
12
 
7
13
  - Python 3.9+ asyncio client for Dominus services
@@ -9,7 +15,7 @@ Async Python SDK for the Dominus gateway-first service plane.
9
15
  - Gateway-scoped client mode for MCP and other user-JWT sessions
10
16
  - Transport compatibility for wrapped `{success,data}` responses and unwrapped Warden/control-plane success objects
11
17
  - Local helpers for JWT verification, trace propagation, retries, and console capture
12
- - Current package version: `6.1.1`
18
+ - Current package version: `7.0.0`
13
19
 
14
20
  ## Install
15
21
 
@@ -190,6 +196,9 @@ JWT and selected scope headers directly through Gateway.
190
196
  | `warden` | Warden | Thin operator control-plane request surface |
191
197
  | `platform` | Platform Worker | Group/repository policy decisions with actor attribution |
192
198
  | `coder` | Coder Runtime | Policy-bound Coder run lifecycle with workflow/pipeline recipe launch sources |
199
+ | `publisher` | Publisher | Release/channel/signing build and artifact operations |
200
+ | `stash` | Stash | Stash items, kinds, bookmarks, watches, artifact facade |
201
+ | `recipes` | Recipe Worker | Recipe type registry, publish, validate, get/list |
193
202
  | `fastapi` | Local decorators | `@jwt`, `@psk`, `@scopes(...)` |
194
203
 
195
204
  ## Root Shortcuts
@@ -115,6 +115,7 @@ from .namespaces.warden import WardenNamespace
115
115
  from .namespaces.platform import PlatformNamespace
116
116
  from .namespaces.coder import CoderNamespace
117
117
  from .namespaces.publisher import PublisherNamespace
118
+ from .namespaces.stash import StashNamespace
118
119
 
119
120
  # Export AI namespace for agent-runtime operations
120
121
  from .namespaces.ai import (
@@ -172,7 +173,7 @@ from .errors import (
172
173
  TimeoutError as DominusTimeoutError,
173
174
  )
174
175
 
175
- __version__ = "6.3.0"
176
+ __version__ = "7.0.0"
176
177
  __all__ = [
177
178
  # Main SDK instance
178
179
  "dominus",
@@ -226,6 +227,7 @@ __all__ = [
226
227
  "PlatformNamespace",
227
228
  "CoderNamespace",
228
229
  "PublisherNamespace",
230
+ "StashNamespace",
229
231
  # AI namespace for agent-runtime operations
230
232
  "AiNamespace",
231
233
  "RagSubNamespace",
@@ -21,6 +21,8 @@ from .deployer import DeployerNamespace
21
21
  from .warden import WardenNamespace
22
22
  from .platform import PlatformNamespace
23
23
  from .coder import CoderNamespace
24
+ from .publisher import PublisherNamespace
25
+ from .stash import StashNamespace
24
26
  from .ai import (
25
27
  AiNamespace,
26
28
  RagSubNamespace,
@@ -52,6 +54,8 @@ __all__ = [
52
54
  "WardenNamespace",
53
55
  "PlatformNamespace",
54
56
  "CoderNamespace",
57
+ "PublisherNamespace",
58
+ "StashNamespace",
55
59
  "AiNamespace",
56
60
  "RagSubNamespace",
57
61
  "ArtifactsSubNamespace",
@@ -3,7 +3,7 @@ Authority Namespace - Dominus Authority service surface.
3
3
 
4
4
  Canonical SDK entry point for the dominus-authority service. Mirrors the MCP
5
5
  ``authority_*`` tool surface so application code can drive runs, provisioning
6
- targets, deploys, managed clients, timelines, dossiers, and Authority context resolution
6
+ targets, deploys, managed clients, timelines, verdicts, and Authority context resolution
7
7
  without touching workflow-manager / client-worker / deploy-worker routes
8
8
  directly.
9
9
 
@@ -13,7 +13,7 @@ All methods route through the gateway (``use_gateway=True``) which maps
13
13
  Run launch is also exposed as ``dominus.workflow.ensure(...)``. Both call
14
14
  ``/api/authority/runs/ensure``. Use ``dominus.workflow.ensure`` for the
15
15
  canonical recipe-backed launch path; use ``dominus.authority.ensure_run`` when
16
- you want to think in Authority terms (run lifecycle, run dossiers, retries,
16
+ you want to think in Authority terms (run lifecycle, verdicts, retries,
17
17
  cancels).
18
18
  """
19
19
  from __future__ import annotations
@@ -74,7 +74,7 @@ class AuthorityNamespace:
74
74
  subject="PCM47474562",
75
75
  )
76
76
  await dominus.authority.list_provisioning_targets()
77
- await dominus.authority.get_run_dossier(run_id)
77
+ await dominus.authority.get_run_verdict(run_id)
78
78
  """
79
79
 
80
80
  def __init__(self, client: "Dominus"):
@@ -489,27 +489,17 @@ class AuthorityNamespace:
489
489
  timeout=self._http_timeout(timeout, 30.0),
490
490
  )
491
491
 
492
- async def get_run_dossier(
492
+ async def get_run_verdict(
493
493
  self,
494
494
  run_id: str,
495
495
  *,
496
- since: Optional[str] = None,
497
- until: Optional[str] = None,
498
- window_hours: Optional[int] = None,
499
- limit: Optional[int] = None,
500
496
  timeout: Optional[float] = None,
501
497
  ) -> Dict[str, Any]:
502
- """Get the full Authority dossier for a run. ``GET /api/authority/dossiers/run/{run_id}``."""
498
+ """Get the compact Authority verdict for a run. ``GET /api/authority/runs/{run_id}/verdict``."""
503
499
  if not run_id:
504
500
  raise ValueError("run_id is required")
505
- qs = _query_string({
506
- "since": since,
507
- "until": until,
508
- "window_hours": window_hours,
509
- "limit": limit,
510
- })
511
501
  return await self._get(
512
- f"/api/authority/dossiers/run/{quote(run_id, safe='')}{qs}",
502
+ f"/api/authority/runs/{quote(run_id, safe='')}/verdict",
513
503
  timeout=self._http_timeout(timeout, 30.0),
514
504
  )
515
505
 
@@ -984,39 +974,6 @@ class AuthorityNamespace:
984
974
  timeout=self._http_timeout(timeout, 30.0),
985
975
  )
986
976
 
987
- async def get_provisioning_target_dossier(
988
- self,
989
- provisioning_target_slug: str,
990
- *,
991
- app_slug: Optional[str] = None,
992
- env: Optional[str] = None,
993
- target_org_id: Optional[str] = None,
994
- target_env: Optional[str] = None,
995
- since: Optional[str] = None,
996
- until: Optional[str] = None,
997
- window_hours: Optional[int] = None,
998
- limit: Optional[int] = None,
999
- timeout: Optional[float] = None,
1000
- ) -> Dict[str, Any]:
1001
- """Get full Authority dossier for a provisioning target. ``GET /api/authority/dossiers/provisioning-target/{provisioning_target_slug}``."""
1002
- if not provisioning_target_slug:
1003
- raise ValueError("provisioning_target_slug is required")
1004
- tid, tev = self._target_query_params(target_org_id, target_env)
1005
- qs = _query_string({
1006
- "app_slug": app_slug,
1007
- "env": env,
1008
- "target_org_id": tid,
1009
- "target_env": tev,
1010
- "since": since,
1011
- "until": until,
1012
- "window_hours": window_hours,
1013
- "limit": limit,
1014
- })
1015
- return await self._get(
1016
- f"/api/authority/dossiers/provisioning-target/{quote(provisioning_target_slug, safe='')}{qs}",
1017
- timeout=self._http_timeout(timeout, 30.0),
1018
- )
1019
-
1020
977
  # ==================================================================
1021
978
  # Deploys
1022
979
  # ==================================================================
@@ -1147,36 +1104,20 @@ class AuthorityNamespace:
1147
1104
  timeout=self._http_timeout(timeout, 30.0),
1148
1105
  )
1149
1106
 
1150
- async def get_deploy_dossier(
1107
+ async def get_deploy_verdict(
1151
1108
  self,
1152
1109
  deploy_id: str,
1153
1110
  *,
1154
- since: Optional[str] = None,
1155
- until: Optional[str] = None,
1156
- window_hours: Optional[int] = None,
1157
- limit: Optional[int] = None,
1158
- full: bool = False,
1159
1111
  timeout: Optional[float] = None,
1160
1112
  ) -> Dict[str, Any]:
1161
1113
  """
1162
- Get the full Authority dossier for a deploy.
1163
- ``GET /api/authority/dossiers/deploy/{deploy_id}``.
1164
-
1165
- Mirrors the MCP ``authority_get_deploy_dossier`` tool. If the dossier
1166
- route is not yet enabled in dominus-authority the gateway will return
1167
- 404 — the SDK surface is intentionally aligned with MCP.
1114
+ Get the compact Authority verdict for a deploy.
1115
+ ``GET /api/authority/deploys/{deploy_id}/verdict``.
1168
1116
  """
1169
1117
  if not deploy_id:
1170
1118
  raise ValueError("deploy_id is required")
1171
- qs = _query_string({
1172
- "since": since,
1173
- "until": until,
1174
- "window_hours": window_hours,
1175
- "limit": limit,
1176
- "full": 1 if full else None,
1177
- })
1178
1119
  return await self._get(
1179
- f"/api/authority/dossiers/deploy/{quote(deploy_id, safe='')}{qs}",
1120
+ f"/api/authority/deploys/{quote(deploy_id, safe='')}/verdict",
1180
1121
  timeout=self._http_timeout(timeout, 30.0),
1181
1122
  )
1182
1123
 
@@ -168,7 +168,7 @@ class Dominus:
168
168
  from .namespaces.sync import SyncNamespace
169
169
  self.sync = SyncNamespace(self)
170
170
 
171
- # Authority service (runs, provisioning targets, deploys, managed clients, dossiers)
171
+ # Authority service (runs, provisioning targets, deploys, managed clients, verdicts)
172
172
  from .namespaces.authority import AuthorityNamespace
173
173
  self.authority = AuthorityNamespace(self)
174
174
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dominus-sdk-python
3
- Version: 6.3.0
3
+ Version: 7.0.0
4
4
  Summary: Python SDK for the Dominus gateway-first platform
5
5
  Author-email: CareBridge Systems <dev@carebridge.io>
6
6
  License-Expression: LicenseRef-Proprietary
@@ -35,6 +35,12 @@ Requires-Dist: PyJWT>=2.8.0; extra == "all"
35
35
 
36
36
  Async Python SDK for the Dominus gateway-first service plane.
37
37
 
38
+ ## Agent Guide
39
+
40
+ Start with `docs/agent-guide/INDEX.md`. The current snapshot is
41
+ `docs/agent-guide/2026-06-27-0849-agent-guide/00-reading-order.md`; the latest
42
+ cleanup audit is `docs/janitor/2026-06-27-0849-agent-guide-cleanup-audit.md`.
43
+
38
44
  ## What This Repo Ships
39
45
 
40
46
  - Python 3.9+ asyncio client for Dominus services
@@ -42,7 +48,7 @@ Async Python SDK for the Dominus gateway-first service plane.
42
48
  - Gateway-scoped client mode for MCP and other user-JWT sessions
43
49
  - Transport compatibility for wrapped `{success,data}` responses and unwrapped Warden/control-plane success objects
44
50
  - Local helpers for JWT verification, trace propagation, retries, and console capture
45
- - Current package version: `6.1.1`
51
+ - Current package version: `7.0.0`
46
52
 
47
53
  ## Install
48
54
 
@@ -223,6 +229,9 @@ JWT and selected scope headers directly through Gateway.
223
229
  | `warden` | Warden | Thin operator control-plane request surface |
224
230
  | `platform` | Platform Worker | Group/repository policy decisions with actor attribution |
225
231
  | `coder` | Coder Runtime | Policy-bound Coder run lifecycle with workflow/pipeline recipe launch sources |
232
+ | `publisher` | Publisher | Release/channel/signing build and artifact operations |
233
+ | `stash` | Stash | Stash items, kinds, bookmarks, watches, artifact facade |
234
+ | `recipes` | Recipe Worker | Recipe type registry, publish, validate, get/list |
226
235
  | `fastapi` | Local decorators | `@jwt`, `@psk`, `@scopes(...)` |
227
236
 
228
237
  ## Root Shortcuts
@@ -56,6 +56,7 @@ tests/test_errors.py
56
56
  tests/test_flat_commands.py
57
57
  tests/test_health.py
58
58
  tests/test_logs.py
59
+ tests/test_namespace_barrel_exports.py
59
60
  tests/test_platform_coder_namespaces.py
60
61
  tests/test_provisioning_parity.py
61
62
  tests/test_public_exports.py
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "dominus-sdk-python"
7
- version = "6.3.0"
7
+ version = "7.0.0"
8
8
  description = "Python SDK for the Dominus gateway-first platform"
9
9
  readme = "README.md"
10
10
  license = "LicenseRef-Proprietary"
@@ -193,32 +193,11 @@ async def test_authority_scope_methods_use_canonical_context_wire_names():
193
193
  window_hours=24,
194
194
  limit=150,
195
195
  )
196
- await namespace.get_run_dossier(
197
- "run-1",
198
- since="2026-04-11T08:33:00Z",
199
- until="2026-04-11T09:33:00Z",
200
- window_hours=24,
201
- limit=150,
202
- )
203
- await namespace.get_provisioning_target_dossier(
204
- "summit-radiology",
205
- app_slug="carebridge",
206
- env="production",
207
- target_org_id="target-org-1",
208
- target_env="production",
209
- since="2026-04-11T08:33:00Z",
210
- until="2026-04-11T09:33:00Z",
211
- window_hours=24,
212
- limit=150,
213
- )
214
- await namespace.get_deploy_dossier(
215
- "deploy-1",
216
- since="2026-04-11T08:33:00Z",
217
- until="2026-04-11T09:33:00Z",
218
- window_hours=24,
219
- limit=150,
220
- full=True,
221
- )
196
+ assert not hasattr(namespace, "get_run_dossier")
197
+ assert not hasattr(namespace, "get_provisioning_target_dossier")
198
+ assert not hasattr(namespace, "get_deploy_dossier")
199
+ await namespace.get_run_verdict("run-1")
200
+ await namespace.get_deploy_verdict("deploy-1")
222
201
  await namespace.query_timelines(
223
202
  subject="PCM47474562",
224
203
  company="summit-radiology",
@@ -305,19 +284,12 @@ async def test_authority_scope_methods_use_canonical_context_wire_names():
305
284
  "since=2026-04-11T08%3A33%3A00Z&until=2026-04-11T09%3A33%3A00Z&window_hours=24&limit=150"
306
285
  )
307
286
  assert client.calls[5]["endpoint"] == (
308
- "/api/authority/dossiers/run/run-1?"
309
- "since=2026-04-11T08%3A33%3A00Z&until=2026-04-11T09%3A33%3A00Z&window_hours=24&limit=150"
287
+ "/api/authority/runs/run-1/verdict"
310
288
  )
311
289
  assert client.calls[6]["endpoint"] == (
312
- "/api/authority/dossiers/provisioning-target/summit-radiology?"
313
- "app_slug=carebridge&env=production&target_org_id=target-org-1&target_env=production"
314
- "&since=2026-04-11T08%3A33%3A00Z&until=2026-04-11T09%3A33%3A00Z&window_hours=24&limit=150"
315
- )
316
- assert client.calls[7]["endpoint"] == (
317
- "/api/authority/dossiers/deploy/deploy-1?"
318
- "since=2026-04-11T08%3A33%3A00Z&until=2026-04-11T09%3A33%3A00Z&window_hours=24&limit=150&full=1"
290
+ "/api/authority/deploys/deploy-1/verdict"
319
291
  )
320
- assert client.calls[8]["body"] == {
292
+ assert client.calls[7]["body"] == {
321
293
  "subject": "PCM47474562",
322
294
  "company": "summit-radiology",
323
295
  "run_id": "run-1",
@@ -326,37 +298,37 @@ async def test_authority_scope_methods_use_canonical_context_wire_names():
326
298
  "window_hours": 24,
327
299
  "limit": 150,
328
300
  }
329
- assert client.calls[9]["endpoint"] == (
301
+ assert client.calls[8]["endpoint"] == (
330
302
  "/api/authority/timelines/archive-status?"
331
303
  "all_scopes=true&app_slug=carebridge&env=production&limit=5"
332
304
  )
333
- assert client.calls[10]["endpoint"] == "/api/authority/timelines/archive"
334
- assert client.calls[10]["method"] == "POST"
335
- assert client.calls[10]["body"] == {
305
+ assert client.calls[9]["endpoint"] == "/api/authority/timelines/archive"
306
+ assert client.calls[9]["method"] == "POST"
307
+ assert client.calls[9]["body"] == {
336
308
  "max_hours": 24,
337
309
  "max_runtime_ms": 600000,
338
310
  }
339
- assert client.calls[11]["endpoint"] == "/api/authority/timelines/archive-repair"
340
- assert client.calls[11]["method"] == "POST"
341
- assert client.calls[11]["body"] == {
311
+ assert client.calls[10]["endpoint"] == "/api/authority/timelines/archive-repair"
312
+ assert client.calls[10]["method"] == "POST"
313
+ assert client.calls[10]["body"] == {
342
314
  "since": "2026-04-01T00:00:00Z",
343
315
  "until": "2026-04-02T00:00:00Z",
344
316
  }
345
- assert client.calls[12]["endpoint"] == "/api/authority/timelines/archive-verify"
346
- assert client.calls[12]["body"] == {
317
+ assert client.calls[11]["endpoint"] == "/api/authority/timelines/archive-verify"
318
+ assert client.calls[11]["body"] == {
347
319
  "since": "2026-04-01T00:00:00Z",
348
320
  "until": "2026-04-02T00:00:00Z",
349
321
  }
350
- assert client.calls[13]["endpoint"] == "/api/authority/timelines/archive-prune"
351
- assert client.calls[13]["body"] == {
322
+ assert client.calls[12]["endpoint"] == "/api/authority/timelines/archive-prune"
323
+ assert client.calls[12]["body"] == {
352
324
  "since": "2026-01-01T00:00:00Z",
353
325
  "until": "2026-01-02T00:00:00Z",
354
326
  "retention_days": 365,
355
327
  "dry_run": False,
356
328
  "confirm": "DELETE_EXPIRED_ARCHIVE_OBJECTS",
357
329
  }
358
- assert client.calls[14]["endpoint"] == "/api/authority/schedules"
359
- assert client.calls[14]["body"] == {
330
+ assert client.calls[13]["endpoint"] == "/api/authority/schedules"
331
+ assert client.calls[13]["body"] == {
360
332
  "schedule_key": "demo.hourly",
361
333
  "owner_app_slug": "carebridge",
362
334
  "owner_env": "production",
@@ -364,16 +336,16 @@ async def test_authority_scope_methods_use_canonical_context_wire_names():
364
336
  "frequency_kind": "hourly",
365
337
  "max_runtime_ms": 600000,
366
338
  }
367
- assert client.calls[15]["endpoint"] == "/api/authority/schedules/demo.hourly"
368
- assert client.calls[15]["method"] == "PATCH"
369
- assert client.calls[15]["body"] == {
339
+ assert client.calls[14]["endpoint"] == "/api/authority/schedules/demo.hourly"
340
+ assert client.calls[14]["method"] == "PATCH"
341
+ assert client.calls[14]["body"] == {
370
342
  "enabled": False,
371
343
  "next_due_at": "2026-04-19T00:00:00Z",
372
344
  }
373
- assert client.calls[16]["endpoint"] == "/api/authority/schedules/claim-due"
374
- assert client.calls[16]["body"] == {"limit": 5, "lock_seconds": 900}
375
- assert client.calls[17]["endpoint"] == "/api/authority/schedules/demo.hourly/runs/run-1/complete"
376
- assert client.calls[18]["endpoint"] == "/api/authority/schedules/demo.hourly/runs/run-2/fail"
345
+ assert client.calls[15]["endpoint"] == "/api/authority/schedules/claim-due"
346
+ assert client.calls[15]["body"] == {"limit": 5, "lock_seconds": 900}
347
+ assert client.calls[16]["endpoint"] == "/api/authority/schedules/demo.hourly/runs/run-1/complete"
348
+ assert client.calls[17]["endpoint"] == "/api/authority/schedules/demo.hourly/runs/run-2/fail"
377
349
 
378
350
 
379
351
  @pytest.mark.asyncio
@@ -0,0 +1,26 @@
1
+ import dominus
2
+ import dominus.namespaces
3
+
4
+
5
+ def test_stash_and_publisher_importable_from_top_level_barrel():
6
+ from dominus import StashNamespace, PublisherNamespace
7
+
8
+ assert StashNamespace is not None
9
+ assert PublisherNamespace is not None
10
+
11
+
12
+ def test_stash_and_publisher_importable_from_namespaces_barrel():
13
+ from dominus.namespaces import StashNamespace, PublisherNamespace
14
+
15
+ assert StashNamespace is not None
16
+ assert PublisherNamespace is not None
17
+
18
+
19
+ def test_top_level_all_lists_stash_and_publisher():
20
+ assert "StashNamespace" in dominus.__all__
21
+ assert "PublisherNamespace" in dominus.__all__
22
+
23
+
24
+ def test_namespaces_all_lists_stash_and_publisher():
25
+ assert "StashNamespace" in dominus.namespaces.__all__
26
+ assert "PublisherNamespace" in dominus.namespaces.__all__