polygres-sdk 0.4.0__tar.gz → 0.4.1__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 (79) hide show
  1. {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/CONTRIBUTING.md +3 -3
  2. {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/PKG-INFO +3 -3
  3. {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/README.md +2 -2
  4. {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/docs/reference-v1.md +1 -1
  5. {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/pyproject.toml +1 -1
  6. {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/src/polygres/_vendor/polygres_lib/auth/enums.py +11 -0
  7. {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/src/polygres/_vendor/polygres_lib/errors/generated.py +108 -15
  8. {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/src/polygres/spec/python-sdk-v1.methods.json +1 -1
  9. {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/tests/test_release_workflow.py +2 -2
  10. {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/tests/test_version.py +6 -6
  11. {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/tests/test_version_notices.py +1 -1
  12. {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/tools/check_pgcontext_compatibility.py +7 -5
  13. {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/.gitignore +0 -0
  14. {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/LICENSE +0 -0
  15. {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/compatibility/0.1.0/README.md +0 -0
  16. {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/compatibility/0.1.0/python-sdk-v1.methods.json +0 -0
  17. {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/compatibility/0.2.1/README.md +0 -0
  18. {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/compatibility/0.2.1/python-sdk-v1.methods.json +0 -0
  19. {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/compatibility/0.3.0/README.md +0 -0
  20. {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/compatibility/0.3.0/python-sdk-v1.methods.json +0 -0
  21. {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/migrations/README.md +0 -0
  22. {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/migrations/pgcontext-0.2.0-names.md +0 -0
  23. {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/migrations/vector-configuration-creation.md +0 -0
  24. {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/src/polygres/__init__.py +0 -0
  25. {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/src/polygres/_api_version.py +0 -0
  26. {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/src/polygres/_method_metadata.py +0 -0
  27. {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/src/polygres/_vendor/__init__.py +0 -0
  28. {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/src/polygres/_vendor/polygres_lib/__init__.py +0 -0
  29. {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/src/polygres/_vendor/polygres_lib/api_versions.py +0 -0
  30. {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/src/polygres/_vendor/polygres_lib/auth/__init__.py +0 -0
  31. {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/src/polygres/_vendor/polygres_lib/auth/api_keys.py +0 -0
  32. {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/src/polygres/_vendor/polygres_lib/auth/errors.py +0 -0
  33. {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/src/polygres/_vendor/polygres_lib/auth/models.py +0 -0
  34. {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/src/polygres/_vendor/polygres_lib/auth/ports.py +0 -0
  35. {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/src/polygres/_vendor/polygres_lib/auth/principals.py +0 -0
  36. {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/src/polygres/_vendor/polygres_lib/auth/records.py +0 -0
  37. {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/src/polygres/_vendor/polygres_lib/auth/types.py +0 -0
  38. {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/src/polygres/_vendor/polygres_lib/context/__init__.py +0 -0
  39. {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/src/polygres/_vendor/polygres_lib/context/enums.py +0 -0
  40. {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/src/polygres/_vendor/polygres_lib/context/errors.py +0 -0
  41. {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/src/polygres/_vendor/polygres_lib/context/models.py +0 -0
  42. {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/src/polygres/_vendor/polygres_lib/context/validation.py +0 -0
  43. {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/src/polygres/_vendor/polygres_lib/core/__init__.py +0 -0
  44. {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/src/polygres/_vendor/polygres_lib/core/models.py +0 -0
  45. {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/src/polygres/_vendor/polygres_lib/core/types.py +0 -0
  46. {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/src/polygres/_vendor/polygres_lib/errors/__init__.py +0 -0
  47. {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/src/polygres/_vendor/polygres_lib/errors/catalog.py +0 -0
  48. {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/src/polygres/_version.py +0 -0
  49. {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/src/polygres/client.py +0 -0
  50. {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/src/polygres/context.py +0 -0
  51. {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/src/polygres/context_models.py +0 -0
  52. {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/src/polygres/context_validation.py +0 -0
  53. {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/src/polygres/context_wait.py +0 -0
  54. {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/src/polygres/errors.py +0 -0
  55. {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/src/polygres/models.py +0 -0
  56. {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/src/polygres/py.typed +0 -0
  57. {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/src/polygres/rows.py +0 -0
  58. {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/src/polygres/spec/__init__.py +0 -0
  59. {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/src/polygres/spec/pgcontext-0.2.0-compatibility.json +0 -0
  60. {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/src/polygres/spec/python-sdk-v1.methods.schema.json +0 -0
  61. {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/src/polygres/spec/runtime-v1.openapi.json +0 -0
  62. {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/src/polygres/version_notices.py +0 -0
  63. {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/tests/conftest.py +0 -0
  64. {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/tests/fixtures/context/contract-fixtures.json +0 -0
  65. {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/tests/test_client.py +0 -0
  66. {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/tests/test_compatibility.py +0 -0
  67. {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/tests/test_context.py +0 -0
  68. {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/tests/test_method_spec.py +0 -0
  69. {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/tests/test_packaged_resources.py +0 -0
  70. {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/tests/test_rows.py +0 -0
  71. {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/tools/check_sdk_compatibility.py +0 -0
  72. {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/tools/extract_release_notes.py +0 -0
  73. {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/tools/generate_runtime_openapi_snapshot.py +0 -0
  74. {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/tools/generate_sdk_method_spec.py +0 -0
  75. {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/tools/run_context_live_test.sh +0 -0
  76. {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/tools/runtime_operation_exclusions.json +0 -0
  77. {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/tools/test_context_live.py +0 -0
  78. {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/tools/verify_distribution.py +0 -0
  79. {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/tools/verify_release_version.py +0 -0
@@ -60,7 +60,7 @@ Release rehearsal happens first on TestPyPI:
60
60
  /tmp/polygres-sdk-testpypi/bin/python -m pip install \
61
61
  --index-url https://test.pypi.org/simple/ \
62
62
  --extra-index-url https://pypi.org/simple/ \
63
- polygres-sdk==0.4.0
63
+ polygres-sdk==0.4.1
64
64
  /tmp/polygres-sdk-testpypi/bin/python - <<'PY'
65
65
  import importlib.metadata
66
66
  from polygres import Polygres
@@ -74,8 +74,8 @@ Publish to PyPI only after the same commit has passed TestPyPI validation. Push
74
74
  a release tag from the public repository:
75
75
 
76
76
  ```bash
77
- git tag polygres-sdk-v0.4.0
78
- git push origin polygres-sdk-v0.4.0
77
+ git tag polygres-sdk-v0.4.1
78
+ git push origin polygres-sdk-v0.4.1
79
79
  ```
80
80
 
81
81
  The `pypi` GitHub environment must be approved before the upload proceeds.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: polygres-sdk
3
- Version: 0.4.0
3
+ Version: 0.4.1
4
4
  Summary: Python SDK for Polygres
5
5
  Project-URL: Homepage, https://polygres.com
6
6
  Project-URL: Documentation, https://docs.polygres.com/sdk
@@ -365,11 +365,11 @@ payload and idempotency key.
365
365
 
366
366
  ## Version and support
367
367
 
368
- Package version: [`0.4.0`](https://github.com/Evokoa/polygres-sdk/releases/tag/polygres-sdk-v0.4.0).
368
+ Package version: [`0.4.1`](https://github.com/Evokoa/polygres-sdk/releases/tag/polygres-sdk-v0.4.1).
369
369
 
370
370
  When contacting support, include the installed SDK version and the request ID.
371
371
 
372
- See the [SDK 0.4.0 release notes](https://github.com/Evokoa/polygres-sdk/releases/tag/polygres-sdk-v0.4.0) for release changes.
372
+ See the [SDK 0.4.1 release notes](https://github.com/Evokoa/polygres-sdk/releases/tag/polygres-sdk-v0.4.1) for release changes.
373
373
 
374
374
  ## Optional Agent Skill
375
375
 
@@ -323,11 +323,11 @@ payload and idempotency key.
323
323
 
324
324
  ## Version and support
325
325
 
326
- Package version: [`0.4.0`](https://github.com/Evokoa/polygres-sdk/releases/tag/polygres-sdk-v0.4.0).
326
+ Package version: [`0.4.1`](https://github.com/Evokoa/polygres-sdk/releases/tag/polygres-sdk-v0.4.1).
327
327
 
328
328
  When contacting support, include the installed SDK version and the request ID.
329
329
 
330
- See the [SDK 0.4.0 release notes](https://github.com/Evokoa/polygres-sdk/releases/tag/polygres-sdk-v0.4.0) for release changes.
330
+ See the [SDK 0.4.1 release notes](https://github.com/Evokoa/polygres-sdk/releases/tag/polygres-sdk-v0.4.1) for release changes.
331
331
 
332
332
  ## Optional Agent Skill
333
333
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  This file is generated. Edit Python method metadata, docstrings, or the Runtime OpenAPI contract instead.
4
4
 
5
- - SDK package version: `0.4.0`
5
+ - SDK package version: `0.4.1`
6
6
  - HTTP API family: `v1`
7
7
  - Default API behavior version: `2026-08-04`
8
8
  - Method specification schema: `1`
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "polygres-sdk"
3
- version = "0.4.0"
3
+ version = "0.4.1"
4
4
  description = "Python SDK for Polygres"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.10"
@@ -257,6 +257,16 @@ class ProjectMode(str, Enum):
257
257
  SYNCED = "synced"
258
258
 
259
259
 
260
+ class ProjectDataSource(str, Enum):
261
+ """The data-source option selected when a project is created."""
262
+
263
+ NEON = "neon"
264
+ SUPABASE = "supabase"
265
+ PLANETSCALE = "planetscale"
266
+ POSTGRES = "postgres"
267
+ POLYGRES = "polygres"
268
+
269
+
260
270
  class ProjectApiKeyScope(str, Enum):
261
271
  PROJECT_FULL = "project_full"
262
272
  SYNCED_PROJECT = "synced_project"
@@ -377,6 +387,7 @@ class PolicyId(str, Enum):
377
387
  PORTAL_SESSION = "portal_session"
378
388
  DASHBOARD_ONLY = "dashboard_only"
379
389
  DASHBOARD_OR_CLI = "dashboard_or_cli"
390
+ CLI_ACCESS_USER = "cli_access_user"
380
391
  ACTIVE_ACCOUNT = "active_account"
381
392
  ADMIN_OPERATOR = "admin_operator"
382
393
  ORGANIZATION_MEMBER = "organization_member"
@@ -1037,6 +1037,20 @@ ERROR_CATALOG_DATA: tuple[dict[str, object], ...] = tuple([{'code': 'ACCOUNT_CRE
1037
1037
  'reset_class': 'none',
1038
1038
  'cli_exit_code': 2,
1039
1039
  'variants': {}},
1040
+ {'code': 'CONTEXT_COLLECTION_SYNC_FAILED',
1041
+ 'family': 'context',
1042
+ 'category': 'dependency',
1043
+ 'kind': ['public', 'persisted_operation'],
1044
+ 'visibility': 'public',
1045
+ 'http_status': 500,
1046
+ 'message': 'Context collection sync failed. Retry the operation. If it fails again, contact '
1047
+ 'support with the operation ID.',
1048
+ 'message_key': 'polygres.error.context_collection_sync_failed',
1049
+ 'safe_detail_fields': ['failure_stage', 'operation_id', 'underlying_code'],
1050
+ 'retry_class': 'after_delay',
1051
+ 'reset_class': 'none',
1052
+ 'cli_exit_code': 8,
1053
+ 'variants': {}},
1040
1054
  {'code': 'CONTEXT_COLLECTION_TARGET_MISMATCH',
1041
1055
  'family': 'context',
1042
1056
  'category': 'validation',
@@ -1306,12 +1320,12 @@ ERROR_CATALOG_DATA: tuple[dict[str, object], ...] = tuple([{'code': 'ACCOUNT_CRE
1306
1320
  {'code': 'CONTEXT_HNSW_UNSUPPORTED',
1307
1321
  'family': 'context',
1308
1322
  'category': 'conflict',
1309
- 'kind': ['public'],
1323
+ 'kind': ['public', 'persisted_operation'],
1310
1324
  'visibility': 'public',
1311
1325
  'http_status': 409,
1312
1326
  'message': 'Hnsw unsupported.',
1313
1327
  'message_key': 'polygres.error.context_hnsw_unsupported',
1314
- 'safe_detail_fields': ['field'],
1328
+ 'safe_detail_fields': ['failure_stage', 'field', 'operation_id'],
1315
1329
  'retry_class': 'after_user_action',
1316
1330
  'reset_class': 'none',
1317
1331
  'cli_exit_code': 6,
@@ -1372,6 +1386,34 @@ ERROR_CATALOG_DATA: tuple[dict[str, object], ...] = tuple([{'code': 'ACCOUNT_CRE
1372
1386
  'constraint and cannot '
1373
1387
  'be converted safely.',
1374
1388
  'http_status': 409}}},
1389
+ {'code': 'CONTEXT_INDEX_CORRUPT',
1390
+ 'family': 'context',
1391
+ 'category': 'dependency',
1392
+ 'kind': ['public', 'persisted_operation'],
1393
+ 'visibility': 'public',
1394
+ 'http_status': 500,
1395
+ 'message': 'The Context index failed its integrity check. Rebuild the index. If rebuilding '
1396
+ 'fails, contact support with the operation ID.',
1397
+ 'message_key': 'polygres.error.context_index_corrupt',
1398
+ 'safe_detail_fields': ['failure_stage', 'operation_id'],
1399
+ 'retry_class': 'after_user_action',
1400
+ 'reset_class': 'none',
1401
+ 'cli_exit_code': 8,
1402
+ 'variants': {}},
1403
+ {'code': 'CONTEXT_INDEX_MEMORY_BUDGET_EXCEEDED',
1404
+ 'family': 'context',
1405
+ 'category': 'conflict',
1406
+ 'kind': ['public', 'persisted_operation'],
1407
+ 'visibility': 'public',
1408
+ 'http_status': 409,
1409
+ 'message': 'The HNSW index needs more build memory than this project currently allows. Contact '
1410
+ 'support with the operation ID to increase the index-build budget, then retry.',
1411
+ 'message_key': 'polygres.error.context_index_memory_budget_exceeded',
1412
+ 'safe_detail_fields': ['failure_stage', 'operation_id'],
1413
+ 'retry_class': 'after_user_action',
1414
+ 'reset_class': 'none',
1415
+ 'cli_exit_code': 6,
1416
+ 'variants': {}},
1375
1417
  {'code': 'CONTEXT_INDEX_MISSING',
1376
1418
  'family': 'context',
1377
1419
  'category': 'conflict',
@@ -1397,7 +1439,7 @@ ERROR_CATALOG_DATA: tuple[dict[str, object], ...] = tuple([{'code': 'ACCOUNT_CRE
1397
1439
  'http_status': 409,
1398
1440
  'message': 'Context index not ready.',
1399
1441
  'message_key': 'polygres.error.context_index_not_ready',
1400
- 'safe_detail_fields': [],
1442
+ 'safe_detail_fields': ['failure_stage', 'operation_id'],
1401
1443
  'retry_class': 'after_user_action',
1402
1444
  'reset_class': 'none',
1403
1445
  'cli_exit_code': 6,
@@ -1449,7 +1491,7 @@ ERROR_CATALOG_DATA: tuple[dict[str, object], ...] = tuple([{'code': 'ACCOUNT_CRE
1449
1491
  'http_status': 400,
1450
1492
  'message': 'Context request exceeds a limit.',
1451
1493
  'message_key': 'polygres.error.context_limit_exceeded',
1452
- 'safe_detail_fields': ['field', 'limit'],
1494
+ 'safe_detail_fields': ['failure_stage', 'field', 'limit', 'operation_id'],
1453
1495
  'retry_class': 'after_user_action',
1454
1496
  'reset_class': 'none',
1455
1497
  'cli_exit_code': 2,
@@ -1462,18 +1504,24 @@ ERROR_CATALOG_DATA: tuple[dict[str, object], ...] = tuple([{'code': 'ACCOUNT_CRE
1462
1504
  {'code': 'CONTEXT_MEMORY_PRESSURE',
1463
1505
  'family': 'context',
1464
1506
  'category': 'conflict',
1465
- 'kind': ['public'],
1507
+ 'kind': ['public', 'persisted_operation'],
1466
1508
  'visibility': 'public',
1467
1509
  'http_status': 409,
1468
1510
  'message': 'Memory pressure.',
1469
1511
  'message_key': 'polygres.error.context_memory_pressure',
1470
- 'safe_detail_fields': ['field', 'project_id'],
1512
+ 'safe_detail_fields': ['failure_stage', 'field', 'operation_id', 'project_id'],
1471
1513
  'retry_class': 'after_user_action',
1472
1514
  'reset_class': 'none',
1473
1515
  'cli_exit_code': 6,
1474
1516
  'variants': {'context_heavy_work_blocked_by_project': {'message': 'Context heavy work is blocked '
1475
1517
  'by project memory pressure.',
1476
- 'http_status': 409}}},
1518
+ 'http_status': 409},
1519
+ 'context_operation_database_memory_exhausted': {'message': 'The Context operation '
1520
+ 'stopped because the '
1521
+ 'project database ran '
1522
+ 'out of available '
1523
+ 'memory.',
1524
+ 'http_status': 503}}},
1477
1525
  {'code': 'CONTEXT_ONBOARDING_NOT_AVAILABLE',
1478
1526
  'family': 'context',
1479
1527
  'category': 'conflict',
@@ -1612,7 +1660,7 @@ ERROR_CATALOG_DATA: tuple[dict[str, object], ...] = tuple([{'code': 'ACCOUNT_CRE
1612
1660
  'http_status': 500,
1613
1661
  'message': 'The Context operation could not be completed.',
1614
1662
  'message_key': 'polygres.error.context_operation_failed',
1615
- 'safe_detail_fields': ['operation_id', 'underlying_code'],
1663
+ 'safe_detail_fields': ['failure_stage', 'operation_id', 'underlying_code'],
1616
1664
  'retry_class': 'after_delay',
1617
1665
  'reset_class': 'none',
1618
1666
  'cli_exit_code': 8,
@@ -1699,6 +1747,19 @@ ERROR_CATALOG_DATA: tuple[dict[str, object], ...] = tuple([{'code': 'ACCOUNT_CRE
1699
1747
  'dispatch_attempts_exhausted': {'message': 'The Context operation could not be '
1700
1748
  'scheduled after several attempts.',
1701
1749
  'http_status': 500}}},
1750
+ {'code': 'CONTEXT_OPERATION_TIMED_OUT',
1751
+ 'family': 'context',
1752
+ 'category': 'dependency',
1753
+ 'kind': ['public', 'persisted_operation'],
1754
+ 'visibility': 'public',
1755
+ 'http_status': 504,
1756
+ 'message': 'The Context operation exceeded the processing time limit. Retry the operation.',
1757
+ 'message_key': 'polygres.error.context_operation_timed_out',
1758
+ 'safe_detail_fields': ['failure_stage', 'operation_id'],
1759
+ 'retry_class': 'after_delay',
1760
+ 'reset_class': 'none',
1761
+ 'cli_exit_code': 8,
1762
+ 'variants': {}},
1702
1763
  {'code': 'CONTEXT_OUTBOX_PUBLICATION_FAILED',
1703
1764
  'family': 'context',
1704
1765
  'category': 'dependency',
@@ -1945,7 +2006,7 @@ ERROR_CATALOG_DATA: tuple[dict[str, object], ...] = tuple([{'code': 'ACCOUNT_CRE
1945
2006
  'http_status': 409,
1946
2007
  'message': 'Result column invalid.',
1947
2008
  'message_key': 'polygres.error.context_result_column_invalid',
1948
- 'safe_detail_fields': ['field'],
2009
+ 'safe_detail_fields': ['failure_stage', 'field', 'operation_id'],
1949
2010
  'retry_class': 'after_user_action',
1950
2011
  'reset_class': 'none',
1951
2012
  'cli_exit_code': 6,
@@ -2167,7 +2228,7 @@ ERROR_CATALOG_DATA: tuple[dict[str, object], ...] = tuple([{'code': 'ACCOUNT_CRE
2167
2228
  'message': 'Polygres does not have the source-table permissions required to read data and '
2168
2229
  'install synchronization triggers.',
2169
2230
  'message_key': 'polygres.error.context_source_privilege_required',
2170
- 'safe_detail_fields': ['field'],
2231
+ 'safe_detail_fields': ['failure_stage', 'field', 'operation_id'],
2171
2232
  'retry_class': 'after_user_action',
2172
2233
  'reset_class': 'none',
2173
2234
  'cli_exit_code': 6,
@@ -2207,7 +2268,7 @@ ERROR_CATALOG_DATA: tuple[dict[str, object], ...] = tuple([{'code': 'ACCOUNT_CRE
2207
2268
  'http_status': 409,
2208
2269
  'message': 'The Context collection source table is unavailable.',
2209
2270
  'message_key': 'polygres.error.context_source_unavailable',
2210
- 'safe_detail_fields': ['reason', 'schema', 'table'],
2271
+ 'safe_detail_fields': ['failure_stage', 'operation_id', 'reason', 'schema', 'table'],
2211
2272
  'retry_class': 'after_user_action',
2212
2273
  'reset_class': 'none',
2213
2274
  'cli_exit_code': 6,
@@ -2219,16 +2280,29 @@ ERROR_CATALOG_DATA: tuple[dict[str, object], ...] = tuple([{'code': 'ACCOUNT_CRE
2219
2280
  {'code': 'CONTEXT_SOURCE_VECTOR_INVALID',
2220
2281
  'family': 'context',
2221
2282
  'category': 'conflict',
2222
- 'kind': ['public'],
2283
+ 'kind': ['public', 'persisted_operation'],
2223
2284
  'visibility': 'public',
2224
2285
  'http_status': 409,
2225
2286
  'message': 'One or more source vectors are invalid.',
2226
2287
  'message_key': 'polygres.error.context_source_vector_invalid',
2227
- 'safe_detail_fields': ['collection_id', 'count', 'reason'],
2288
+ 'safe_detail_fields': ['collection_id', 'count', 'failure_stage', 'operation_id', 'reason'],
2228
2289
  'retry_class': 'after_user_action',
2229
2290
  'reset_class': 'none',
2230
2291
  'cli_exit_code': 6,
2231
2292
  'variants': {}},
2293
+ {'code': 'CONTEXT_STORAGE_PRESSURE',
2294
+ 'family': 'context',
2295
+ 'category': 'dependency',
2296
+ 'kind': ['public', 'persisted_operation'],
2297
+ 'visibility': 'public',
2298
+ 'http_status': 503,
2299
+ 'message': 'The Context operation stopped because the project database ran out of storage.',
2300
+ 'message_key': 'polygres.error.context_storage_pressure',
2301
+ 'safe_detail_fields': ['failure_stage', 'operation_id'],
2302
+ 'retry_class': 'after_user_action',
2303
+ 'reset_class': 'none',
2304
+ 'cli_exit_code': 8,
2305
+ 'variants': {}},
2232
2306
  {'code': 'CONTEXT_SYNC_TRIGGER_UNAVAILABLE',
2233
2307
  'family': 'context',
2234
2308
  'category': 'conflict',
@@ -2372,7 +2446,7 @@ ERROR_CATALOG_DATA: tuple[dict[str, object], ...] = tuple([{'code': 'ACCOUNT_CRE
2372
2446
  'message': 'The vector column type is not supported for this collection. Use a native pgContext '
2373
2447
  'vector or a compatible pgvector column.',
2374
2448
  'message_key': 'polygres.error.context_vector_type_unsupported',
2375
- 'safe_detail_fields': ['field'],
2449
+ 'safe_detail_fields': ['failure_stage', 'field', 'operation_id'],
2376
2450
  'retry_class': 'after_user_action',
2377
2451
  'reset_class': 'none',
2378
2452
  'cli_exit_code': 6,
@@ -3031,7 +3105,9 @@ ERROR_CATALOG_DATA: tuple[dict[str, object], ...] = tuple([{'code': 'ACCOUNT_CRE
3031
3105
  'message_key': 'polygres.error.data_plane_connection_failed',
3032
3106
  'safe_detail_fields': ['connection',
3033
3107
  'database',
3108
+ 'failure_stage',
3034
3109
  'host',
3110
+ 'operation_id',
3035
3111
  'port',
3036
3112
  'project_external_id',
3037
3113
  'reason',
@@ -3040,7 +3116,11 @@ ERROR_CATALOG_DATA: tuple[dict[str, object], ...] = tuple([{'code': 'ACCOUNT_CRE
3040
3116
  'retry_class': 'after_delay',
3041
3117
  'reset_class': 'none',
3042
3118
  'cli_exit_code': 8,
3043
- 'variants': {}},
3119
+ 'variants': {'context_operation_connection_lost': {'message': 'Connection to the project '
3120
+ 'database was lost during the '
3121
+ 'Context operation. Retry the '
3122
+ 'operation.',
3123
+ 'http_status': 503}}},
3044
3124
  {'code': 'DATA_PLANE_CONNECTION_INVALID',
3045
3125
  'family': 'data_plane',
3046
3126
  'category': 'dependency',
@@ -7401,6 +7481,19 @@ ERROR_CATALOG_DATA: tuple[dict[str, object], ...] = tuple([{'code': 'ACCOUNT_CRE
7401
7481
  'reset_class': 'none',
7402
7482
  'cli_exit_code': 8,
7403
7483
  'variants': {}},
7484
+ {'code': 'RUNTIME_JOINT_QUERY_BUSY',
7485
+ 'family': 'runtime',
7486
+ 'category': 'dependency',
7487
+ 'kind': ['public'],
7488
+ 'visibility': 'public',
7489
+ 'http_status': 503,
7490
+ 'message': 'Hybrid retrieval is busy. Try again shortly.',
7491
+ 'message_key': 'polygres.error.runtime_joint_query_busy',
7492
+ 'safe_detail_fields': ['retry_after_seconds'],
7493
+ 'retry_class': 'after_delay',
7494
+ 'reset_class': 'none',
7495
+ 'cli_exit_code': 8,
7496
+ 'variants': {}},
7404
7497
  {'code': 'RUNTIME_KEY_SYNC_FAILED',
7405
7498
  'family': 'runtime',
7406
7499
  'category': 'dependency',
@@ -8079,5 +8079,5 @@
8079
8079
  "openapi_sha256": "db23d7178d295d7bac0b5168061c59fcbcf6eb96e1e12bc2e21670452b8cb506",
8080
8080
  "schema_version": 1,
8081
8081
  "sdk": "polygres-sdk",
8082
- "sdk_version": "0.4.0"
8082
+ "sdk_version": "0.4.1"
8083
8083
  }
@@ -95,11 +95,11 @@ def test_publish_workflow_creates_release_after_pypi() -> None:
95
95
  assert "releases/latest" in workflow
96
96
 
97
97
 
98
- def test_publish_workflow_checks_the_0_4_0_release_against_0_3_0() -> None:
98
+ def test_publish_workflow_checks_the_0_4_1_release_against_0_3_0() -> None:
99
99
  workflow = (ROOT / ".github" / "workflows" / "publish-python-sdk.yml").read_text(
100
100
  encoding="utf-8"
101
101
  )
102
102
 
103
103
  assert "--baseline compatibility/0.3.0/python-sdk-v1.methods.json" in workflow
104
- assert "--expect-current-version 0.4.0" in workflow
104
+ assert "--expect-current-version 0.4.1" in workflow
105
105
  assert "--baseline compatibility/0.2.1/python-sdk-v1.methods.json" not in workflow
@@ -26,12 +26,12 @@ def test_release_metadata_and_documentation_name_current_sdk_version() -> None:
26
26
  )
27
27
  )
28
28
 
29
- assert __version__ == "0.4.0"
30
- assert methods["sdk_version"] == "0.4.0"
31
- assert "Package version: [`0.4.0`]" in readme
32
- assert "polygres-sdk-v0.4.0" in readme
33
- assert "SDK 0.4.0 release notes" in readme
34
- assert "## 0.4.0 - 2026-08-16" in changelog
29
+ assert __version__ == "0.4.1"
30
+ assert methods["sdk_version"] == "0.4.1"
31
+ assert "Package version: [`0.4.1`]" in readme
32
+ assert "polygres-sdk-v0.4.1" in readme
33
+ assert "SDK 0.4.1 release notes" in readme
34
+ assert "## 0.4.1 - 2026-08-25" in changelog
35
35
 
36
36
 
37
37
  def test_uninstalled_source_uses_non_release_fallback(monkeypatch: pytest.MonkeyPatch) -> None:
@@ -207,4 +207,4 @@ def test_sdk_does_not_emit_notice_from_an_intermediate_retry(
207
207
 
208
208
 
209
209
  def test_public_sdk_version_matches_current_release() -> None:
210
- assert __version__ == "0.4.0"
210
+ assert __version__ == "0.4.1"
@@ -40,14 +40,16 @@ def _load_json(path: Path) -> dict[str, Any]:
40
40
  def _arguments() -> argparse.Namespace:
41
41
  package_root = Path(__file__).resolve().parents[1]
42
42
  repository_root = package_root.parents[1]
43
+ packaged_manifest = package_root / "src/polygres/spec/pgcontext-0.2.0-compatibility.json"
44
+ repository_manifest = (
45
+ repository_root
46
+ / "packages/polygres-lib/contracts/context/pgcontext-0.2.0-compatibility.json"
47
+ )
43
48
  parser = argparse.ArgumentParser()
44
49
  parser.add_argument(
45
50
  "--manifest",
46
51
  type=Path,
47
- default=(
48
- repository_root
49
- / "packages/polygres-lib/contracts/context/pgcontext-0.2.0-compatibility.json"
50
- ),
52
+ default=(repository_manifest if repository_manifest.exists() else packaged_manifest),
51
53
  )
52
54
  parser.add_argument(
53
55
  "--method-spec",
@@ -57,7 +59,7 @@ def _arguments() -> argparse.Namespace:
57
59
  parser.add_argument(
58
60
  "--packaged-manifest",
59
61
  type=Path,
60
- default=package_root / "src/polygres/spec/pgcontext-0.2.0-compatibility.json",
62
+ default=packaged_manifest,
61
63
  )
62
64
  return parser.parse_args()
63
65
 
File without changes
File without changes