mainsequence 9.0.5.dev35__tar.gz → 9.0.6.dev37__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 (101) hide show
  1. {mainsequence-9.0.5.dev35/mainsequence.egg-info → mainsequence-9.0.6.dev37}/PKG-INFO +1 -1
  2. {mainsequence-9.0.5.dev35 → mainsequence-9.0.6.dev37}/agent_scaffold/skills/maintenance/code_repository_maintenance/SKILL.md +81 -2
  3. {mainsequence-9.0.5.dev35 → mainsequence-9.0.6.dev37}/agent_scaffold/skills/platform_operations/orchestration_and_releases/SKILL.md +1 -1
  4. {mainsequence-9.0.5.dev35 → mainsequence-9.0.6.dev37}/mainsequence/client/models_helpers.py +2 -2
  5. {mainsequence-9.0.5.dev35 → mainsequence-9.0.6.dev37/mainsequence.egg-info}/PKG-INFO +1 -1
  6. {mainsequence-9.0.5.dev35 → mainsequence-9.0.6.dev37}/pyproject.toml +1 -1
  7. {mainsequence-9.0.5.dev35 → mainsequence-9.0.6.dev37}/LICENSE +0 -0
  8. {mainsequence-9.0.5.dev35 → mainsequence-9.0.6.dev37}/README.md +0 -0
  9. {mainsequence-9.0.5.dev35 → mainsequence-9.0.6.dev37}/agent_scaffold/AGENTS.md +0 -0
  10. {mainsequence-9.0.5.dev35 → mainsequence-9.0.6.dev37}/agent_scaffold/skills/a2a_sdk_execution/SKILL.md +0 -0
  11. {mainsequence-9.0.5.dev35 → mainsequence-9.0.6.dev37}/agent_scaffold/skills/application_surfaces/api_surfaces/SKILL.md +0 -0
  12. {mainsequence-9.0.5.dev35 → mainsequence-9.0.6.dev37}/agent_scaffold/skills/mainsequence-inference/SKILL.md +0 -0
  13. {mainsequence-9.0.5.dev35 → mainsequence-9.0.6.dev37}/agent_scaffold/skills/maintenance/bug_auditor/SKILL.md +0 -0
  14. {mainsequence-9.0.5.dev35 → mainsequence-9.0.6.dev37}/agent_scaffold/skills/maintenance/metatables_transition/SKILL.md +0 -0
  15. {mainsequence-9.0.5.dev35 → mainsequence-9.0.6.dev37}/agent_scaffold/skills/platform_operations/access_control_and_sharing/SKILL.md +0 -0
  16. {mainsequence-9.0.5.dev35 → mainsequence-9.0.6.dev37}/agent_scaffold/skills/sdk_code_repository_execution/SKILL.md +0 -0
  17. {mainsequence-9.0.5.dev35 → mainsequence-9.0.6.dev37}/mainsequence/__init__.py +0 -0
  18. {mainsequence-9.0.5.dev35 → mainsequence-9.0.6.dev37}/mainsequence/__main__.py +0 -0
  19. {mainsequence-9.0.5.dev35 → mainsequence-9.0.6.dev37}/mainsequence/_request_identity.py +0 -0
  20. {mainsequence-9.0.5.dev35 → mainsequence-9.0.6.dev37}/mainsequence/bootstrap.py +0 -0
  21. {mainsequence-9.0.5.dev35 → mainsequence-9.0.6.dev37}/mainsequence/cli/__init__.py +0 -0
  22. {mainsequence-9.0.5.dev35 → mainsequence-9.0.6.dev37}/mainsequence/cli/api.py +0 -0
  23. {mainsequence-9.0.5.dev35 → mainsequence-9.0.6.dev37}/mainsequence/cli/browser_auth.py +0 -0
  24. {mainsequence-9.0.5.dev35 → mainsequence-9.0.6.dev37}/mainsequence/cli/cli.py +0 -0
  25. {mainsequence-9.0.5.dev35 → mainsequence-9.0.6.dev37}/mainsequence/cli/code_repository_status.py +0 -0
  26. {mainsequence-9.0.5.dev35 → mainsequence-9.0.6.dev37}/mainsequence/cli/config.py +0 -0
  27. {mainsequence-9.0.5.dev35 → mainsequence-9.0.6.dev37}/mainsequence/cli/docker_utils.py +0 -0
  28. {mainsequence-9.0.5.dev35 → mainsequence-9.0.6.dev37}/mainsequence/cli/doctor.py +0 -0
  29. {mainsequence-9.0.5.dev35 → mainsequence-9.0.6.dev37}/mainsequence/cli/local_ops.py +0 -0
  30. {mainsequence-9.0.5.dev35 → mainsequence-9.0.6.dev37}/mainsequence/cli/model_filters.py +0 -0
  31. {mainsequence-9.0.5.dev35 → mainsequence-9.0.6.dev37}/mainsequence/cli/pydantic_cli.py +0 -0
  32. {mainsequence-9.0.5.dev35 → mainsequence-9.0.6.dev37}/mainsequence/cli/sdk_utils.py +0 -0
  33. {mainsequence-9.0.5.dev35 → mainsequence-9.0.6.dev37}/mainsequence/cli/ssh_utils.py +0 -0
  34. {mainsequence-9.0.5.dev35 → mainsequence-9.0.6.dev37}/mainsequence/cli/ui.py +0 -0
  35. {mainsequence-9.0.5.dev35 → mainsequence-9.0.6.dev37}/mainsequence/client/__init__.py +0 -0
  36. {mainsequence-9.0.5.dev35 → mainsequence-9.0.6.dev37}/mainsequence/client/agent_runtime_models.py +0 -0
  37. {mainsequence-9.0.5.dev35 → mainsequence-9.0.6.dev37}/mainsequence/client/base.py +0 -0
  38. {mainsequence-9.0.5.dev35 → mainsequence-9.0.6.dev37}/mainsequence/client/client.py +0 -0
  39. {mainsequence-9.0.5.dev35 → mainsequence-9.0.6.dev37}/mainsequence/client/compute_validation.py +0 -0
  40. {mainsequence-9.0.5.dev35 → mainsequence-9.0.6.dev37}/mainsequence/client/exceptions.py +0 -0
  41. {mainsequence-9.0.5.dev35 → mainsequence-9.0.6.dev37}/mainsequence/client/github_issues.py +0 -0
  42. {mainsequence-9.0.5.dev35 → mainsequence-9.0.6.dev37}/mainsequence/client/inference.py +0 -0
  43. {mainsequence-9.0.5.dev35 → mainsequence-9.0.6.dev37}/mainsequence/client/models_foundry.py +0 -0
  44. {mainsequence-9.0.5.dev35 → mainsequence-9.0.6.dev37}/mainsequence/client/models_user.py +0 -0
  45. {mainsequence-9.0.5.dev35 → mainsequence-9.0.6.dev37}/mainsequence/client/observability.py +0 -0
  46. {mainsequence-9.0.5.dev35 → mainsequence-9.0.6.dev37}/mainsequence/client/utils.py +0 -0
  47. {mainsequence-9.0.5.dev35 → mainsequence-9.0.6.dev37}/mainsequence/client/value_sets.py +0 -0
  48. {mainsequence-9.0.5.dev35 → mainsequence-9.0.6.dev37}/mainsequence/code_repository_context.py +0 -0
  49. {mainsequence-9.0.5.dev35 → mainsequence-9.0.6.dev37}/mainsequence/code_repository_skills.py +0 -0
  50. {mainsequence-9.0.5.dev35 → mainsequence-9.0.6.dev37}/mainsequence/defaults.py +0 -0
  51. {mainsequence-9.0.5.dev35 → mainsequence-9.0.6.dev37}/mainsequence/instrumentation/__init__.py +0 -0
  52. {mainsequence-9.0.5.dev35 → mainsequence-9.0.6.dev37}/mainsequence/instrumentation/utils.py +0 -0
  53. {mainsequence-9.0.5.dev35 → mainsequence-9.0.6.dev37}/mainsequence/logconf.py +0 -0
  54. {mainsequence-9.0.5.dev35 → mainsequence-9.0.6.dev37}/mainsequence/repository_identity_security.py +0 -0
  55. {mainsequence-9.0.5.dev35 → mainsequence-9.0.6.dev37}/mainsequence/runtime_flags.py +0 -0
  56. {mainsequence-9.0.5.dev35 → mainsequence-9.0.6.dev37}/mainsequence/scaffold_skills.py +0 -0
  57. {mainsequence-9.0.5.dev35 → mainsequence-9.0.6.dev37}/mainsequence/server/__init__.py +0 -0
  58. {mainsequence-9.0.5.dev35 → mainsequence-9.0.6.dev37}/mainsequence/server/caller_assertions.py +0 -0
  59. {mainsequence-9.0.5.dev35 → mainsequence-9.0.6.dev37}/mainsequence/server/fastapi.py +0 -0
  60. {mainsequence-9.0.5.dev35 → mainsequence-9.0.6.dev37}/mainsequence.egg-info/SOURCES.txt +0 -0
  61. {mainsequence-9.0.5.dev35 → mainsequence-9.0.6.dev37}/mainsequence.egg-info/dependency_links.txt +0 -0
  62. {mainsequence-9.0.5.dev35 → mainsequence-9.0.6.dev37}/mainsequence.egg-info/entry_points.txt +0 -0
  63. {mainsequence-9.0.5.dev35 → mainsequence-9.0.6.dev37}/mainsequence.egg-info/requires.txt +0 -0
  64. {mainsequence-9.0.5.dev35 → mainsequence-9.0.6.dev37}/mainsequence.egg-info/top_level.txt +0 -0
  65. {mainsequence-9.0.5.dev35 → mainsequence-9.0.6.dev37}/setup.cfg +0 -0
  66. {mainsequence-9.0.5.dev35 → mainsequence-9.0.6.dev37}/tests/test_auth_bootstrap.py +0 -0
  67. {mainsequence-9.0.5.dev35 → mainsequence-9.0.6.dev37}/tests/test_auth_precedence.py +0 -0
  68. {mainsequence-9.0.5.dev35 → mainsequence-9.0.6.dev37}/tests/test_caller_assertions.py +0 -0
  69. {mainsequence-9.0.5.dev35 → mainsequence-9.0.6.dev37}/tests/test_canonical_api_route_contract.py +0 -0
  70. {mainsequence-9.0.5.dev35 → mainsequence-9.0.6.dev37}/tests/test_cli.py +0 -0
  71. {mainsequence-9.0.5.dev35 → mainsequence-9.0.6.dev37}/tests/test_cli_auth_contract.py +0 -0
  72. {mainsequence-9.0.5.dev35 → mainsequence-9.0.6.dev37}/tests/test_cli_browser_auth.py +0 -0
  73. {mainsequence-9.0.5.dev35 → mainsequence-9.0.6.dev37}/tests/test_cli_secure_storage.py +0 -0
  74. {mainsequence-9.0.5.dev35 → mainsequence-9.0.6.dev37}/tests/test_client.py +0 -0
  75. {mainsequence-9.0.5.dev35 → mainsequence-9.0.6.dev37}/tests/test_code_repository_branch_contract.py +0 -0
  76. {mainsequence-9.0.5.dev35 → mainsequence-9.0.6.dev37}/tests/test_code_repository_documentation_contract.py +0 -0
  77. {mainsequence-9.0.5.dev35 → mainsequence-9.0.6.dev37}/tests/test_code_repository_runtime_context.py +0 -0
  78. {mainsequence-9.0.5.dev35 → mainsequence-9.0.6.dev37}/tests/test_code_repository_skills.py +0 -0
  79. {mainsequence-9.0.5.dev35 → mainsequence-9.0.6.dev37}/tests/test_dependency_extras.py +0 -0
  80. {mainsequence-9.0.5.dev35 → mainsequence-9.0.6.dev37}/tests/test_dev_release_version.py +0 -0
  81. {mainsequence-9.0.5.dev35 → mainsequence-9.0.6.dev37}/tests/test_environment_resource_context.py +0 -0
  82. {mainsequence-9.0.5.dev35 → mainsequence-9.0.6.dev37}/tests/test_environment_response_contracts.py +0 -0
  83. {mainsequence-9.0.5.dev35 → mainsequence-9.0.6.dev37}/tests/test_fastapi_request_identity.py +0 -0
  84. {mainsequence-9.0.5.dev35 → mainsequence-9.0.6.dev37}/tests/test_filter_normalization.py +0 -0
  85. {mainsequence-9.0.5.dev35 → mainsequence-9.0.6.dev37}/tests/test_github_issues_client.py +0 -0
  86. {mainsequence-9.0.5.dev35 → mainsequence-9.0.6.dev37}/tests/test_independent_context.py +0 -0
  87. {mainsequence-9.0.5.dev35 → mainsequence-9.0.6.dev37}/tests/test_inference_client.py +0 -0
  88. {mainsequence-9.0.5.dev35 → mainsequence-9.0.6.dev37}/tests/test_instrumentation.py +0 -0
  89. {mainsequence-9.0.5.dev35 → mainsequence-9.0.6.dev37}/tests/test_job_client.py +0 -0
  90. {mainsequence-9.0.5.dev35 → mainsequence-9.0.6.dev37}/tests/test_local_ops.py +0 -0
  91. {mainsequence-9.0.5.dev35 → mainsequence-9.0.6.dev37}/tests/test_logconf.py +0 -0
  92. {mainsequence-9.0.5.dev35 → mainsequence-9.0.6.dev37}/tests/test_models_user_request_bound_auth.py +0 -0
  93. {mainsequence-9.0.5.dev35 → mainsequence-9.0.6.dev37}/tests/test_notification_uid_contract.py +0 -0
  94. {mainsequence-9.0.5.dev35 → mainsequence-9.0.6.dev37}/tests/test_observability_client.py +0 -0
  95. {mainsequence-9.0.5.dev35 → mainsequence-9.0.6.dev37}/tests/test_scaffold_skills.py +0 -0
  96. {mainsequence-9.0.5.dev35 → mainsequence-9.0.6.dev37}/tests/test_secret_client_model.py +0 -0
  97. {mainsequence-9.0.5.dev35 → mainsequence-9.0.6.dev37}/tests/test_source_ownership.py +0 -0
  98. {mainsequence-9.0.5.dev35 → mainsequence-9.0.6.dev37}/tests/test_ssh_utils.py +0 -0
  99. {mainsequence-9.0.5.dev35 → mainsequence-9.0.6.dev37}/tests/test_tolerant_response_reading.py +0 -0
  100. {mainsequence-9.0.5.dev35 → mainsequence-9.0.6.dev37}/tests/test_tolerant_value_sets.py +0 -0
  101. {mainsequence-9.0.5.dev35 → mainsequence-9.0.6.dev37}/tests/test_user_application_facts.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mainsequence
3
- Version: 9.0.5.dev35
3
+ Version: 9.0.6.dev37
4
4
  Summary: Main Sequence SDK
5
5
  Author-email: Main Sequence GmbH <dev@main-sequence.io>
6
6
  License-Expression: MIT
@@ -248,8 +248,8 @@ The platform deploys from the push according to the repository's
248
248
  pushes deploy:
249
249
 
250
250
  - omitted or `null`: every push to the branch deploys;
251
- - a regular expression: a push deploys only when a matching tag points at the
252
- branch's latest commit.
251
+ - a regular expression: a matching tag deploys the commit it points at, whether
252
+ that is the branch's latest commit or an older commit on the branch.
253
253
 
254
254
  Automatic deployment and `tag_regex` are set in the workflow file only; a
255
255
  `ResourceRelease` or `Job` update does not accept them. The Main Sequence
@@ -300,6 +300,85 @@ only the commits CI tagged. Details:
300
300
  Do not call `sync-after-commit` or any backend repair endpoint. The GitHub
301
301
  branch-push webhook owns backend repository reconciliation.
302
302
 
303
+ ### Development Deploys Every Push, Production Deploys Tags
304
+
305
+ A common setup uses two workflow files scoped to Environments. On the
306
+ production branch only the first applies; on the development branch only the
307
+ second:
308
+
309
+ ```yaml
310
+ # .mainsequence/workflows/api-production.yaml
311
+ api_version: "2.3.0"
312
+ name: api-production
313
+ scope:
314
+ environments: [production]
315
+ resources:
316
+ - key: api
317
+ kind: fastapi
318
+ spec:
319
+ source_path: api/main.py
320
+ automatic_deployment: true
321
+ automatic_redeployment:
322
+ enabled: true
323
+ tag_regex: "^v[0-9]+\\.[0-9]+\\.[0-9]+$"
324
+ ```
325
+
326
+ ```yaml
327
+ # .mainsequence/workflows/api-development.yaml
328
+ api_version: "2.3.0"
329
+ name: api-development
330
+ scope:
331
+ environments: [development] # the development Environment's exact name
332
+ resources:
333
+ - key: api
334
+ kind: fastapi
335
+ spec:
336
+ source_path: api/main.py
337
+ automatic_deployment: true
338
+ automatic_redeployment:
339
+ enabled: true
340
+ ```
341
+
342
+ A push to the development branch deploys at once. A merge to `main` deploys
343
+ nothing until a matching tag points at a commit on `main`; with the release job
344
+ above, CI creates that tag after the tests pass. Take the exact fields from the
345
+ branch's workflow template and validate each file through the branch's
346
+ `validate-workflow` action before committing it, as the
347
+ `platform_operations/orchestration_and_releases` skill describes.
348
+
349
+ ### Creating A Release Tag
350
+
351
+ The platform reacts to the tag push, however the tag was made. The short tag
352
+ name must fully match `tag_regex`, and the tagged commit must be on the
353
+ target's branch (its latest commit or an older one).
354
+
355
+ - CI, as in the release job above. This is the recommended path.
356
+ - By hand, only when the user asks for it:
357
+
358
+ ```bash
359
+ git tag v1.3.0 <commit>
360
+ git push origin v1.3.0
361
+ ```
362
+
363
+ Lightweight and annotated tags both work. Push one tag at a time: GitHub
364
+ sends no event when more than three tags are pushed at once, so
365
+ `git push --tags` can deploy nothing.
366
+ - A GitHub Release: publishing a release with a new tag, in the web UI or with
367
+ `gh release create v1.3.0 --target main`, creates the tag, and that tag
368
+ deploys like a pushed one.
369
+
370
+ A tag created with the Actions `GITHUB_TOKEN` starts no other GitHub Actions
371
+ workflow, but it still reaches Main Sequence. Deleting a tag deploys nothing
372
+ and removes nothing. A tag that does not match, or whose commit is only on
373
+ another branch, deploys nothing for that target.
374
+
375
+ ### Going Back To An Older Version
376
+
377
+ Revert the change and release a new version: `git revert <commit>`, raise the
378
+ patch version with `uv version --bump patch`, commit, push, and let CI tag the
379
+ result. The version keeps moving forward and every deployed commit matches its
380
+ tag.
381
+
303
382
  ## Diagnose Partial Completion Before Retrying
304
383
 
305
384
  Never rerun an entire mutating workflow blindly.
@@ -224,7 +224,7 @@ Automatic deployment and its `tag_regex` are set in the repository's `.mainseque
224
224
  The declaration's `tag_regex` decides which pushes deploy:
225
225
 
226
226
  - omitted or `null`: every push to the branch deploys
227
- - a regular expression: a push deploys only when a matching tag points at the branch's latest commit
227
+ - a regular expression: a matching tag deploys the commit it points at, whether that is the branch's latest commit or an older commit on the branch
228
228
 
229
229
  The platform does not create or name tags. Release tags come from the repository's own CI, for example a GitHub Actions workflow that tags the version declared in `pyproject.toml` after the tests pass. The maintenance skill `.agents/skills/mainsequence/maintenance/code_repository_maintenance/SKILL.md` has an example. `mainsequence code-repository sync` only refreshes `uv.lock`, the local environment, and `requirements.txt`; it does not commit, tag, or push.
230
230
 
@@ -107,8 +107,8 @@ class AutomaticRedeploymentPolicy(BaseModel):
107
107
  description=(
108
108
  "Regular expression matched against repository tags, set by `tag_regex` "
109
109
  "in the repository's `.mainsequence/workflows/*.yaml`. Null deploys every "
110
- "push; a regex deploys only when a matching tag points at the branch's "
111
- "latest commit."
110
+ "push; a regex deploys the commit a matching tag points at, whether it is "
111
+ "the branch's latest commit or an older commit on the branch."
112
112
  ),
113
113
  examples=[None, r"^v(?:0|[1-9][0-9]*)\.(?:0|[1-9][0-9]*)\.(?:0|[1-9][0-9]*)$"],
114
114
  )
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mainsequence
3
- Version: 9.0.5.dev35
3
+ Version: 9.0.6.dev37
4
4
  Summary: Main Sequence SDK
5
5
  Author-email: Main Sequence GmbH <dev@main-sequence.io>
6
6
  License-Expression: MIT
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "mainsequence"
7
- version = "9.0.5.dev35"
7
+ version = "9.0.6.dev37"
8
8
  description = "Main Sequence SDK"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.13"