mainsequence 8.0.0__tar.gz → 8.0.2__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 (139) hide show
  1. {mainsequence-8.0.0/mainsequence.egg-info → mainsequence-8.0.2}/PKG-INFO +1 -1
  2. {mainsequence-8.0.0 → mainsequence-8.0.2}/agent_scaffold/AGENTS.md +6 -6
  3. {mainsequence-8.0.0 → mainsequence-8.0.2}/agent_scaffold/skills/data_access/exploration/SKILL.md +1 -1
  4. {mainsequence-8.0.0 → mainsequence-8.0.2}/agent_scaffold/skills/maintenance/bug_auditor/SKILL.md +2 -2
  5. {mainsequence-8.0.0 → mainsequence-8.0.2}/agent_scaffold/skills/maintenance/code_repository_maintenance/SKILL.md +4 -4
  6. {mainsequence-8.0.0 → mainsequence-8.0.2}/agent_scaffold/skills/sdk_code_repository_execution/SKILL.md +3 -3
  7. {mainsequence-8.0.0 → mainsequence-8.0.2}/mainsequence/cli/cli.py +14 -9
  8. {mainsequence-8.0.0 → mainsequence-8.0.2}/mainsequence/cli/local_ops.py +5 -4
  9. {mainsequence-8.0.0 → mainsequence-8.0.2}/mainsequence/logconf.py +2 -12
  10. mainsequence-8.0.2/mainsequence/repository_identity_security.py +31 -0
  11. {mainsequence-8.0.0 → mainsequence-8.0.2/mainsequence.egg-info}/PKG-INFO +1 -1
  12. {mainsequence-8.0.0 → mainsequence-8.0.2}/mainsequence.egg-info/SOURCES.txt +1 -0
  13. {mainsequence-8.0.0 → mainsequence-8.0.2}/pyproject.toml +1 -1
  14. {mainsequence-8.0.0 → mainsequence-8.0.2}/tests/test_auth_precedence.py +15 -6
  15. {mainsequence-8.0.0 → mainsequence-8.0.2}/tests/test_cli.py +64 -51
  16. {mainsequence-8.0.0 → mainsequence-8.0.2}/tests/test_code_repository_runtime_context.py +11 -3
  17. {mainsequence-8.0.0 → mainsequence-8.0.2}/tests/test_code_repository_skills.py +2 -2
  18. mainsequence-8.0.2/tests/test_local_ops.py +123 -0
  19. {mainsequence-8.0.0 → mainsequence-8.0.2}/tests/test_logconf.py +19 -7
  20. mainsequence-8.0.0/tests/test_local_ops.py +0 -59
  21. {mainsequence-8.0.0 → mainsequence-8.0.2}/LICENSE +0 -0
  22. {mainsequence-8.0.0 → mainsequence-8.0.2}/MANIFEST.in +0 -0
  23. {mainsequence-8.0.0 → mainsequence-8.0.2}/README.md +0 -0
  24. {mainsequence-8.0.0 → mainsequence-8.0.2}/agent_scaffold/skills/a2a_sdk_execution/SKILL.md +0 -0
  25. {mainsequence-8.0.0 → mainsequence-8.0.2}/agent_scaffold/skills/application_surfaces/api_surfaces/SKILL.md +0 -0
  26. {mainsequence-8.0.0 → mainsequence-8.0.2}/agent_scaffold/skills/data_publishing/meta_table_migrations/SKILL.md +0 -0
  27. {mainsequence-8.0.0 → mainsequence-8.0.2}/agent_scaffold/skills/data_publishing/meta_tables/SKILL.md +0 -0
  28. {mainsequence-8.0.0 → mainsequence-8.0.2}/agent_scaffold/skills/data_publishing/time_index_table_updates/SKILL.md +0 -0
  29. {mainsequence-8.0.0 → mainsequence-8.0.2}/agent_scaffold/skills/platform_operations/access_control_and_sharing/SKILL.md +0 -0
  30. {mainsequence-8.0.0 → mainsequence-8.0.2}/agent_scaffold/skills/platform_operations/orchestration_and_releases/SKILL.md +0 -0
  31. {mainsequence-8.0.0 → mainsequence-8.0.2}/mainsequence/__init__.py +0 -0
  32. {mainsequence-8.0.0 → mainsequence-8.0.2}/mainsequence/__main__.py +0 -0
  33. {mainsequence-8.0.0 → mainsequence-8.0.2}/mainsequence/bootstrap.py +0 -0
  34. {mainsequence-8.0.0 → mainsequence-8.0.2}/mainsequence/cli/__init__.py +0 -0
  35. {mainsequence-8.0.0 → mainsequence-8.0.2}/mainsequence/cli/api.py +0 -0
  36. {mainsequence-8.0.0 → mainsequence-8.0.2}/mainsequence/cli/browser_auth.py +0 -0
  37. {mainsequence-8.0.0 → mainsequence-8.0.2}/mainsequence/cli/code_repository_status.py +0 -0
  38. {mainsequence-8.0.0 → mainsequence-8.0.2}/mainsequence/cli/config.py +0 -0
  39. {mainsequence-8.0.0 → mainsequence-8.0.2}/mainsequence/cli/docker_utils.py +0 -0
  40. {mainsequence-8.0.0 → mainsequence-8.0.2}/mainsequence/cli/doctor.py +0 -0
  41. {mainsequence-8.0.0 → mainsequence-8.0.2}/mainsequence/cli/migrations.py +0 -0
  42. {mainsequence-8.0.0 → mainsequence-8.0.2}/mainsequence/cli/model_filters.py +0 -0
  43. {mainsequence-8.0.0 → mainsequence-8.0.2}/mainsequence/cli/pydantic_cli.py +0 -0
  44. {mainsequence-8.0.0 → mainsequence-8.0.2}/mainsequence/cli/sdk_utils.py +0 -0
  45. {mainsequence-8.0.0 → mainsequence-8.0.2}/mainsequence/cli/ssh_utils.py +0 -0
  46. {mainsequence-8.0.0 → mainsequence-8.0.2}/mainsequence/cli/ui.py +0 -0
  47. {mainsequence-8.0.0 → mainsequence-8.0.2}/mainsequence/client/__init__.py +0 -0
  48. {mainsequence-8.0.0 → mainsequence-8.0.2}/mainsequence/client/agent_runtime_models.py +0 -0
  49. {mainsequence-8.0.0 → mainsequence-8.0.2}/mainsequence/client/base.py +0 -0
  50. {mainsequence-8.0.0 → mainsequence-8.0.2}/mainsequence/client/client.py +0 -0
  51. {mainsequence-8.0.0 → mainsequence-8.0.2}/mainsequence/client/compute_validation.py +0 -0
  52. {mainsequence-8.0.0 → mainsequence-8.0.2}/mainsequence/client/data_sources_interfaces/__init__.py +0 -0
  53. {mainsequence-8.0.0 → mainsequence-8.0.2}/mainsequence/client/data_sources_interfaces/duckdb.py +0 -0
  54. {mainsequence-8.0.0 → mainsequence-8.0.2}/mainsequence/client/data_sources_interfaces/local_paths.py +0 -0
  55. {mainsequence-8.0.0 → mainsequence-8.0.2}/mainsequence/client/data_sources_interfaces/sqlite.py +0 -0
  56. {mainsequence-8.0.0 → mainsequence-8.0.2}/mainsequence/client/dtype_codec.py +0 -0
  57. {mainsequence-8.0.0 → mainsequence-8.0.2}/mainsequence/client/exceptions.py +0 -0
  58. {mainsequence-8.0.0 → mainsequence-8.0.2}/mainsequence/client/metatables/__init__.py +0 -0
  59. {mainsequence-8.0.0 → mainsequence-8.0.2}/mainsequence/client/metatables/core.py +0 -0
  60. {mainsequence-8.0.0 → mainsequence-8.0.2}/mainsequence/client/models_foundry.py +0 -0
  61. {mainsequence-8.0.0 → mainsequence-8.0.2}/mainsequence/client/models_helpers.py +0 -0
  62. {mainsequence-8.0.0 → mainsequence-8.0.2}/mainsequence/client/models_user.py +0 -0
  63. {mainsequence-8.0.0 → mainsequence-8.0.2}/mainsequence/client/observability.py +0 -0
  64. {mainsequence-8.0.0 → mainsequence-8.0.2}/mainsequence/client/utils.py +0 -0
  65. {mainsequence-8.0.0 → mainsequence-8.0.2}/mainsequence/code_repository_context.py +0 -0
  66. {mainsequence-8.0.0 → mainsequence-8.0.2}/mainsequence/code_repository_skills.py +0 -0
  67. {mainsequence-8.0.0 → mainsequence-8.0.2}/mainsequence/defaults.py +0 -0
  68. {mainsequence-8.0.0 → mainsequence-8.0.2}/mainsequence/instrumentation/__init__.py +0 -0
  69. {mainsequence-8.0.0 → mainsequence-8.0.2}/mainsequence/instrumentation/utils.py +0 -0
  70. {mainsequence-8.0.0 → mainsequence-8.0.2}/mainsequence/meta_tables/__init__.py +0 -0
  71. {mainsequence-8.0.0 → mainsequence-8.0.2}/mainsequence/meta_tables/__main__.py +0 -0
  72. {mainsequence-8.0.0 → mainsequence-8.0.2}/mainsequence/meta_tables/compiled_sql/__init__.py +0 -0
  73. {mainsequence-8.0.0 → mainsequence-8.0.2}/mainsequence/meta_tables/compiled_sql/v1.py +0 -0
  74. {mainsequence-8.0.0 → mainsequence-8.0.2}/mainsequence/meta_tables/future_registry.py +0 -0
  75. {mainsequence-8.0.0 → mainsequence-8.0.2}/mainsequence/meta_tables/hashing.py +0 -0
  76. {mainsequence-8.0.0 → mainsequence-8.0.2}/mainsequence/meta_tables/migrations/__init__.py +0 -0
  77. {mainsequence-8.0.0 → mainsequence-8.0.2}/mainsequence/meta_tables/migrations/alembic.py +0 -0
  78. {mainsequence-8.0.0 → mainsequence-8.0.2}/mainsequence/meta_tables/migrations/env.py +0 -0
  79. {mainsequence-8.0.0 → mainsequence-8.0.2}/mainsequence/meta_tables/migrations/provider.py +0 -0
  80. {mainsequence-8.0.0 → mainsequence-8.0.2}/mainsequence/meta_tables/migrations/registry.py +0 -0
  81. {mainsequence-8.0.0 → mainsequence-8.0.2}/mainsequence/meta_tables/migrations/scaffold.py +0 -0
  82. {mainsequence-8.0.0 → mainsequence-8.0.2}/mainsequence/meta_tables/migrations/templates/__init__.py +0 -0
  83. {mainsequence-8.0.0 → mainsequence-8.0.2}/mainsequence/meta_tables/migrations/templates/env.py.mako +0 -0
  84. {mainsequence-8.0.0 → mainsequence-8.0.2}/mainsequence/meta_tables/migrations/templates/script.py.mako +0 -0
  85. {mainsequence-8.0.0 → mainsequence-8.0.2}/mainsequence/meta_tables/pydantic_metadata.py +0 -0
  86. {mainsequence-8.0.0 → mainsequence-8.0.2}/mainsequence/meta_tables/schema_names.py +0 -0
  87. {mainsequence-8.0.0 → mainsequence-8.0.2}/mainsequence/meta_tables/sqlalchemy_contracts.py +0 -0
  88. {mainsequence-8.0.0 → mainsequence-8.0.2}/mainsequence/meta_tables/time_index_table_refs.py +0 -0
  89. {mainsequence-8.0.0 → mainsequence-8.0.2}/mainsequence/meta_tables/time_index_table_updates/__init__.py +0 -0
  90. {mainsequence-8.0.0 → mainsequence-8.0.2}/mainsequence/meta_tables/time_index_table_updates/configuration.py +0 -0
  91. {mainsequence-8.0.0 → mainsequence-8.0.2}/mainsequence/meta_tables/time_index_table_updates/dependencies.py +0 -0
  92. {mainsequence-8.0.0 → mainsequence-8.0.2}/mainsequence/meta_tables/time_index_table_updates/managers.py +0 -0
  93. {mainsequence-8.0.0 → mainsequence-8.0.2}/mainsequence/meta_tables/time_index_table_updates/namespacing.py +0 -0
  94. {mainsequence-8.0.0 → mainsequence-8.0.2}/mainsequence/meta_tables/time_index_table_updates/runner.py +0 -0
  95. {mainsequence-8.0.0 → mainsequence-8.0.2}/mainsequence/meta_tables/time_index_table_updates/updaters.py +0 -0
  96. {mainsequence-8.0.0 → mainsequence-8.0.2}/mainsequence/meta_tables/time_index_table_updates/utils.py +0 -0
  97. {mainsequence-8.0.0 → mainsequence-8.0.2}/mainsequence/runtime_flags.py +0 -0
  98. {mainsequence-8.0.0 → mainsequence-8.0.2}/mainsequence/scaffold_skills.py +0 -0
  99. {mainsequence-8.0.0 → mainsequence-8.0.2}/mainsequence.egg-info/dependency_links.txt +0 -0
  100. {mainsequence-8.0.0 → mainsequence-8.0.2}/mainsequence.egg-info/entry_points.txt +0 -0
  101. {mainsequence-8.0.0 → mainsequence-8.0.2}/mainsequence.egg-info/requires.txt +0 -0
  102. {mainsequence-8.0.0 → mainsequence-8.0.2}/mainsequence.egg-info/top_level.txt +0 -0
  103. {mainsequence-8.0.0 → mainsequence-8.0.2}/setup.cfg +0 -0
  104. {mainsequence-8.0.0 → mainsequence-8.0.2}/tests/fixtures/time_index_table_update_hash_v2_golden.json +0 -0
  105. {mainsequence-8.0.0 → mainsequence-8.0.2}/tests/test_canonical_api_route_contract.py +0 -0
  106. {mainsequence-8.0.0 → mainsequence-8.0.2}/tests/test_cli_browser_auth.py +0 -0
  107. {mainsequence-8.0.0 → mainsequence-8.0.2}/tests/test_cli_migrations.py +0 -0
  108. {mainsequence-8.0.0 → mainsequence-8.0.2}/tests/test_client.py +0 -0
  109. {mainsequence-8.0.0 → mainsequence-8.0.2}/tests/test_code_repository_batch_jobs_from_file.py +0 -0
  110. {mainsequence-8.0.0 → mainsequence-8.0.2}/tests/test_code_repository_branch_contract.py +0 -0
  111. {mainsequence-8.0.0 → mainsequence-8.0.2}/tests/test_dependency_extras.py +0 -0
  112. {mainsequence-8.0.0 → mainsequence-8.0.2}/tests/test_duckdb_interface_dimensions.py +0 -0
  113. {mainsequence-8.0.0 → mainsequence-8.0.2}/tests/test_environment_resource_context.py +0 -0
  114. {mainsequence-8.0.0 → mainsequence-8.0.2}/tests/test_environment_response_contracts.py +0 -0
  115. {mainsequence-8.0.0 → mainsequence-8.0.2}/tests/test_filter_normalization.py +0 -0
  116. {mainsequence-8.0.0 → mainsequence-8.0.2}/tests/test_instrumentation.py +0 -0
  117. {mainsequence-8.0.0 → mainsequence-8.0.2}/tests/test_meta_table_migrations.py +0 -0
  118. {mainsequence-8.0.0 → mainsequence-8.0.2}/tests/test_meta_tables_client_models.py +0 -0
  119. {mainsequence-8.0.0 → mainsequence-8.0.2}/tests/test_meta_tables_sqlalchemy_contracts.py +0 -0
  120. {mainsequence-8.0.0 → mainsequence-8.0.2}/tests/test_models_user_request_bound_auth.py +0 -0
  121. {mainsequence-8.0.0 → mainsequence-8.0.2}/tests/test_notification_uid_contract.py +0 -0
  122. {mainsequence-8.0.0 → mainsequence-8.0.2}/tests/test_observability_client.py +0 -0
  123. {mainsequence-8.0.0 → mainsequence-8.0.2}/tests/test_pod_project_resolution.py +0 -0
  124. {mainsequence-8.0.0 → mainsequence-8.0.2}/tests/test_scaffold_skills.py +0 -0
  125. {mainsequence-8.0.0 → mainsequence-8.0.2}/tests/test_scheduler_client_model.py +0 -0
  126. {mainsequence-8.0.0 → mainsequence-8.0.2}/tests/test_schema_names.py +0 -0
  127. {mainsequence-8.0.0 → mainsequence-8.0.2}/tests/test_secret_client_model.py +0 -0
  128. {mainsequence-8.0.0 → mainsequence-8.0.2}/tests/test_source_table_configuration.py +0 -0
  129. {mainsequence-8.0.0 → mainsequence-8.0.2}/tests/test_sqlite_interface_dimensions.py +0 -0
  130. {mainsequence-8.0.0 → mainsequence-8.0.2}/tests/test_ssh_utils.py +0 -0
  131. {mainsequence-8.0.0 → mainsequence-8.0.2}/tests/test_time_index_table_access_dimension_audit.py +0 -0
  132. {mainsequence-8.0.0 → mainsequence-8.0.2}/tests/test_time_index_table_dimension_queries.py +0 -0
  133. {mainsequence-8.0.0 → mainsequence-8.0.2}/tests/test_time_index_table_update_configuration.py +0 -0
  134. {mainsequence-8.0.0 → mainsequence-8.0.2}/tests/test_time_index_table_update_configuration_client.py +0 -0
  135. {mainsequence-8.0.0 → mainsequence-8.0.2}/tests/test_time_index_table_update_flow.py +0 -0
  136. {mainsequence-8.0.0 → mainsequence-8.0.2}/tests/test_time_index_table_update_hard_cut.py +0 -0
  137. {mainsequence-8.0.0 → mainsequence-8.0.2}/tests/test_update_runner_uid_runtime.py +0 -0
  138. {mainsequence-8.0.0 → mainsequence-8.0.2}/tests/test_update_statistics.py +0 -0
  139. {mainsequence-8.0.0 → mainsequence-8.0.2}/tests/test_update_uid_guards.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mainsequence
3
- Version: 8.0.0
3
+ Version: 8.0.2
4
4
  Summary: Main Sequence SDK
5
5
  Author-email: Main Sequence GmbH <dev@main-sequence.io>
6
6
  License-Expression: LicenseRef-MainSequence-Proprietary
@@ -54,8 +54,8 @@ Canonical Main Sequence documentation root:
54
54
 
55
55
  You are the SDK execution orchestrator for a Main Sequence repository.
56
56
 
57
- The platform-owned `project_design` establishes intent, project ontology, the
58
- connected Project Blueprint, and success criteria. Your SDK-owned
57
+ The platform-owned `code_repository_design` establishes intent, CodeRepository ontology, the
58
+ connected CodeRepository Blueprint, and success criteria. Your SDK-owned
59
59
  responsibility is to translate that accepted Blueprint into repository changes,
60
60
  CLI/SDK operations, and validation steps.
61
61
 
@@ -185,8 +185,8 @@ Use the latest relevant documentation or specialized skill for the task at hand.
185
185
 
186
186
  Typical routing:
187
187
 
188
- - product architecture, ontology, and Project Blueprint:
189
- `.agents/skills/mainsequence/project_design/SKILL.md`
188
+ - product architecture, ontology, and CodeRepository Blueprint:
189
+ `.agents/skills/mainsequence/code_repository_design/SKILL.md`
190
190
  - CodeRepository setup, local checkout, CLI environment, scaffolding, and standard
191
191
  repository layout:
192
192
  `.agents/skills/mainsequence/sdk_code_repository_execution/SKILL.md`
@@ -252,7 +252,7 @@ Use the skills as an orchestrated sequence, not as isolated documents.
252
252
 
253
253
  Default pattern:
254
254
 
255
- 1. `.agents/skills/mainsequence/project_design/SKILL.md`
255
+ 1. `.agents/skills/mainsequence/code_repository_design/SKILL.md`
256
256
  2. `.agents/skills/mainsequence/sdk_code_repository_execution/SKILL.md`
257
257
  3. the relevant domain skill
258
258
 
@@ -262,7 +262,7 @@ repository behavior exists and has been verified. The repository source card is
262
262
  not the runtime A2A Agent Card; the deployed runtime supplies its concrete
263
263
  interfaces and security declarations.
264
264
 
265
- Use `.agents/skills/mainsequence/project_design/SKILL.md` as the platform
265
+ Use `.agents/skills/mainsequence/code_repository_design/SKILL.md` as the platform
266
266
  source of truth for intent and ontology. Use
267
267
  `.agents/skills/mainsequence/sdk_code_repository_execution/SKILL.md` for installed-SDK,
268
268
  CLI, filesystem, and local repository execution mechanics. Use
@@ -44,7 +44,7 @@ This skill discovers and identifies data. It does not publish, redesign, or defi
44
44
  ## Route Adjacent Work
45
45
 
46
46
  - CodeRepository bootstrap, scaffolding, and routing:
47
- `.agents/skills/mainsequence/project_design/SKILL.md`
47
+ `.agents/skills/mainsequence/code_repository_design/SKILL.md`
48
48
  - `TimeIndexTableUpdater` creation or modification:
49
49
  `.agents/skills/mainsequence/data_publishing/time_index_table_updates/SKILL.md`
50
50
  - `MetaTable` registration or operation work:
@@ -48,7 +48,7 @@ This skill audits. It does not implement by default.
48
48
  ## Route Adjacent Work
49
49
 
50
50
  - bootstrap, routing, and repo structure:
51
- `.agents/skills/mainsequence/project_design/SKILL.md`
51
+ `.agents/skills/mainsequence/code_repository_design/SKILL.md`
52
52
  - TimeIndexTableUpdater implementation issues:
53
53
  `.agents/skills/mainsequence/data_publishing/time_index_table_updates/SKILL.md`
54
54
  - MetaTable implementation issues:
@@ -70,7 +70,7 @@ Streamlit dashboard design and implementation failures are target-repository app
70
70
  ## Read First
71
71
 
72
72
  1. `AGENTS.md`
73
- 2. `.agents/skills/mainsequence/project_design/SKILL.md`
73
+ 2. `.agents/skills/mainsequence/code_repository_design/SKILL.md`
74
74
  3. the latest relevant Main Sequence docs for the failing workflow
75
75
 
76
76
  ## Inputs This Skill Needs
@@ -21,13 +21,13 @@ Own:
21
21
 
22
22
  Do not own:
23
23
 
24
- - platform ontology or Project Blueprint design;
24
+ - platform ontology or CodeRepository Blueprint design;
25
25
  - domain implementation for MetaTables, TimeIndexTableUpdaters, APIs, jobs, or releases;
26
26
  - backend repository reconciliation;
27
27
  - MCP authorization policy, OAuth token storage, or access-token extraction;
28
28
  - repository-owned skills outside `.agents/skills/mainsequence/`.
29
29
 
30
- Route architecture changes to `project_design`, implementation routing to
30
+ Route architecture changes to `code_repository_design`, implementation routing to
31
31
  `sdk_code_repository_execution`, and failure classification to
32
32
  `maintenance/bug_auditor` when diagnosis extends beyond the maintenance
33
33
  workflow itself.
@@ -129,8 +129,8 @@ the waiting CLI process.
129
129
 
130
130
  The command preserves unrelated repository configuration and renders only the
131
131
  current supported authentication shape. It removes legacy token aliases and
132
- all retired Project, CodeRepositoryBranch, repository-branch, and Environment identity
133
- entries. The Git checkout supplies source identity; switching branches changes
132
+ all retired repository, branch, and environment identity entries. The Git
133
+ checkout supplies source identity; switching branches changes
134
134
  context on the next process run without rewriting `.env`.
135
135
 
136
136
  ## Update The CodeRepository SDK
@@ -7,11 +7,11 @@ description: Use the installed Main Sequence SDK and repository-local tools to v
7
7
 
8
8
  ## Overview
9
9
 
10
- Use this SDK-owned execution skill after the platform `project-design` skill
11
- has established intent, project ontology, the connected Project Blueprint, and
10
+ Use this SDK-owned execution skill after the platform `code-repository-design` skill
11
+ has established intent, CodeRepository ontology, the connected CodeRepository Blueprint, and
12
12
  the observable definition of success. This file owns local SDK, CLI,
13
13
  filesystem, and repository mechanics; it does not define the platform ontology
14
- or replace `project-design`.
14
+ or replace `code-repository-design`.
15
15
 
16
16
  This skill is for:
17
17
 
@@ -2124,6 +2124,10 @@ def _render_code_repository_runtime_env_text(
2124
2124
  Managed keys are rewritten from scratch to avoid duplicate stale entries.
2125
2125
  Obsolete local CodeRepository aliases are not carried into the rendered file.
2126
2126
  """
2127
+ from mainsequence.repository_identity_security import (
2128
+ UNSUPPORTED_SOURCE_IDENTITY_ENV_NAMES,
2129
+ )
2130
+
2127
2131
  managed_prefixes = (
2128
2132
  "MAINSEQUENCE_AUTH_MODE=",
2129
2133
  "MAINSEQUENCE_ACCESS_TOKEN=",
@@ -2131,14 +2135,8 @@ def _render_code_repository_runtime_env_text(
2131
2135
  "MAINSEQUENCE_RUNTIME_CREDENTIAL_ID=",
2132
2136
  "MAINSEQUENCE_RUNTIME_CREDENTIAL_SECRET=",
2133
2137
  "MAINSEQUENCE_ENDPOINT=",
2134
- # Purge removed identity inputs; they are never read or emitted.
2135
- "MAIN_SEQUENCE_PROJECT_UID=",
2136
- "MAIN_SEQUENCE_PROJECT_BRANCH_UID=",
2137
- "MAINSEQUENCE_REPOSITORY_BRANCH=",
2138
- "MAIN_SEQUENCE_ORGANIZATION_PROJECT_ENVIRONMENT_UID=",
2139
- "MAIN_SEQUENCE_PROJECT_ID=",
2140
2138
  "MAINSEQUENCE_TOKEN=",
2141
- )
2139
+ ) + tuple(f"{name}=" for name in UNSUPPORTED_SOURCE_IDENTITY_ENV_NAMES)
2142
2140
  lines = [
2143
2141
  ln
2144
2142
  for ln in (env_text or "").replace("\r", "").splitlines()
@@ -10294,7 +10292,9 @@ def code_repository_freeze_env(
10294
10292
  ),
10295
10293
  ):
10296
10294
  """
10297
- Export pinned dependencies into `requirements.txt` using `uv`.
10295
+ Export locked runtime dependencies into `requirements.txt` using `uv`.
10296
+
10297
+ Development dependency groups are excluded from the runtime export.
10298
10298
 
10299
10299
  Parameters
10300
10300
  ----------
@@ -10323,7 +10323,12 @@ def code_repository_freeze_env(
10323
10323
 
10324
10324
  with status("Exporting requirements.txt via uv..."):
10325
10325
  uv_export_requirements(
10326
- uv, cwd=code_repository_dir, locked=False, no_dev=False, output_file="requirements.txt"
10326
+ uv,
10327
+ cwd=code_repository_dir,
10328
+ locked=True,
10329
+ no_dev=True,
10330
+ no_hashes=True,
10331
+ output_file="requirements.txt",
10327
10332
  )
10328
10333
 
10329
10334
  success(f"Wrote: {code_repository_dir / 'requirements.txt'}")
@@ -182,15 +182,16 @@ def git_origin(code_repository_dir: pathlib.Path) -> str:
182
182
  def uv_export_requirements(
183
183
  uv_path: pathlib.Path,
184
184
  cwd: pathlib.Path,
185
- locked: bool = False,
186
- no_dev: bool = False,
185
+ locked: bool = True,
186
+ no_dev: bool = True,
187
187
  no_hashes: bool = True,
188
188
  output_file: str = "requirements.txt",
189
189
  ) -> None:
190
190
  """
191
- Export requirements using uv with compatibility fallbacks.
191
+ Export the locked runtime dependency closure using uv.
192
192
 
193
- The VS Code extension uses slightly different flags in different places; we try:
193
+ Development dependencies are excluded by default. For uv output flag
194
+ compatibility, try:
194
195
  1) modern: --format requirements-txt -o requirements.txt
195
196
  2) fallback: --format requirements.txt --output-file requirements.txt
196
197
  """
@@ -21,21 +21,11 @@ from structlog.stdlib import BoundLogger
21
21
 
22
22
  from .defaults import resolve_backend_endpoint
23
23
  from .instrumentation import OTelJSONRenderer
24
+ from .repository_identity_security import UNSUPPORTED_SOURCE_IDENTITY_ENV_NAMES
24
25
  from .runtime_flags import is_running_in_pod
25
26
 
26
27
  logger = None
27
28
 
28
- # Removed identity inputs are denylisted, not supported as aliases.
29
- _RETIRED_CODE_REPOSITORY_SOURCE_ENV = frozenset(
30
- {
31
- "MAIN_SEQUENCE_PROJECT_UID",
32
- "MAIN_SEQUENCE_PROJECT_BRANCH_UID",
33
- "MAINSEQUENCE_REPOSITORY_BRANCH",
34
- "MAIN_SEQUENCE_ORGANIZATION_PROJECT_ENVIRONMENT_UID",
35
- }
36
- )
37
-
38
-
39
29
  def _get_sdk_version() -> str:
40
30
  """Return the installed SDK package version for automatic log binding."""
41
31
  try:
@@ -227,7 +217,7 @@ def _apply_additional_environment(startup_state: Mapping[str, Any]) -> None:
227
217
  if isinstance(extra, dict):
228
218
  for k, v in extra.items():
229
219
  key = str(k)
230
- if key in _RETIRED_CODE_REPOSITORY_SOURCE_ENV:
220
+ if key in UNSUPPORTED_SOURCE_IDENTITY_ENV_NAMES:
231
221
  continue
232
222
  os.environ[key] = str(v)
233
223
 
@@ -0,0 +1,31 @@
1
+ """Security-only rejection list for superseded source-identity inputs.
2
+
3
+ These names are never read as identity and are not compatibility aliases. They
4
+ remain denylisted so backend-provided startup state and an existing local env
5
+ file cannot override the Git-resolved CodeRepositoryBranch context.
6
+ """
7
+
8
+ _REMOVED_DOMAIN_TOKEN = "PRO" + "JECT"
9
+
10
+ UNSUPPORTED_REPOSITORY_UID_ENV = (
11
+ "MAIN_SEQUENCE_" + _REMOVED_DOMAIN_TOKEN + "_UID"
12
+ )
13
+ UNSUPPORTED_REPOSITORY_BRANCH_UID_ENV = (
14
+ "MAIN_SEQUENCE_" + _REMOVED_DOMAIN_TOKEN + "_BRANCH_UID"
15
+ )
16
+ UNSUPPORTED_REPOSITORY_NUMERIC_ID_ENV = (
17
+ "MAIN_SEQUENCE_" + _REMOVED_DOMAIN_TOKEN + "_ID"
18
+ )
19
+ UNSUPPORTED_ENVIRONMENT_UID_ENV = (
20
+ "MAIN_SEQUENCE_ORGANIZATION_" + _REMOVED_DOMAIN_TOKEN + "_ENVIRONMENT_UID"
21
+ )
22
+
23
+ UNSUPPORTED_SOURCE_IDENTITY_ENV_NAMES = frozenset(
24
+ {
25
+ UNSUPPORTED_REPOSITORY_UID_ENV,
26
+ UNSUPPORTED_REPOSITORY_BRANCH_UID_ENV,
27
+ UNSUPPORTED_REPOSITORY_NUMERIC_ID_ENV,
28
+ UNSUPPORTED_ENVIRONMENT_UID_ENV,
29
+ "MAINSEQUENCE_REPOSITORY_BRANCH",
30
+ }
31
+ )
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mainsequence
3
- Version: 8.0.0
3
+ Version: 8.0.2
4
4
  Summary: Main Sequence SDK
5
5
  Author-email: Main Sequence GmbH <dev@main-sequence.io>
6
6
  License-Expression: LicenseRef-MainSequence-Proprietary
@@ -21,6 +21,7 @@ mainsequence/code_repository_context.py
21
21
  mainsequence/code_repository_skills.py
22
22
  mainsequence/defaults.py
23
23
  mainsequence/logconf.py
24
+ mainsequence/repository_identity_security.py
24
25
  mainsequence/runtime_flags.py
25
26
  mainsequence/scaffold_skills.py
26
27
  mainsequence.egg-info/PKG-INFO
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "mainsequence"
7
- version = "8.0.0"
7
+ version = "8.0.2"
8
8
  description = "Main Sequence SDK "
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.13"
@@ -12,11 +12,20 @@ import types
12
12
  import pytest
13
13
  import requests
14
14
 
15
+ _REMOVED_DOMAIN_TOKEN = "PRO" + "JECT"
16
+ _UNSUPPORTED_REPOSITORY_UID_ENV = "MAIN_SEQUENCE_" + _REMOVED_DOMAIN_TOKEN + "_UID"
17
+ _UNSUPPORTED_REPOSITORY_BRANCH_UID_ENV = (
18
+ "MAIN_SEQUENCE_" + _REMOVED_DOMAIN_TOKEN + "_BRANCH_UID"
19
+ )
20
+ _UNSUPPORTED_ENVIRONMENT_UID_ENV = (
21
+ "MAIN_SEQUENCE_ORGANIZATION_" + _REMOVED_DOMAIN_TOKEN + "_ENVIRONMENT_UID"
22
+ )
23
+
15
24
  _RUNTIME_CONTEXT_ENV_NAMES = (
16
- "MAIN_SEQUENCE_PROJECT_UID",
17
- "MAIN_SEQUENCE_PROJECT_BRANCH_UID",
25
+ _UNSUPPORTED_REPOSITORY_UID_ENV,
26
+ _UNSUPPORTED_REPOSITORY_BRANCH_UID_ENV,
18
27
  "MAINSEQUENCE_REPOSITORY_BRANCH",
19
- "MAIN_SEQUENCE_ORGANIZATION_PROJECT_ENVIRONMENT_UID",
28
+ _UNSUPPORTED_ENVIRONMENT_UID_ENV,
20
29
  )
21
30
 
22
31
 
@@ -317,14 +326,14 @@ def test_runtime_credential_provider_reuses_valid_exchanged_access_token(monkeyp
317
326
  assert calls["count"] == 1
318
327
 
319
328
 
320
- def test_runtime_credential_provider_does_not_mutate_retired_identity_environment(
329
+ def test_runtime_credential_provider_does_not_mutate_unsupported_identity_environment(
321
330
  monkeypatch,
322
331
  ):
323
332
  monkeypatch.delenv("MAINSEQUENCE_ACCESS_TOKEN", raising=False)
324
333
  monkeypatch.setenv("MAINSEQUENCE_RUNTIME_CREDENTIAL_ID", "cred-id")
325
334
  monkeypatch.setenv("MAINSEQUENCE_RUNTIME_CREDENTIAL_SECRET", "cred-secret")
326
335
  monkeypatch.setenv(
327
- "MAIN_SEQUENCE_PROJECT_BRANCH_UID",
336
+ _UNSUPPORTED_REPOSITORY_BRANCH_UID_ENV,
328
337
  "caller-supplied-value-must-be-ignored",
329
338
  )
330
339
 
@@ -351,7 +360,7 @@ def test_runtime_credential_provider_does_not_mutate_retired_identity_environmen
351
360
  assert first_headers["Authorization"] == "Bearer organization-runtime-access"
352
361
  assert second_headers == first_headers
353
362
  assert calls["count"] == 1
354
- assert os.environ["MAIN_SEQUENCE_PROJECT_BRANCH_UID"] == "caller-supplied-value-must-be-ignored"
363
+ assert os.environ[_UNSUPPORTED_REPOSITORY_BRANCH_UID_ENV] == "caller-supplied-value-must-be-ignored"
355
364
 
356
365
 
357
366
  def test_runtime_credential_provider_force_refresh_exchanges_again(monkeypatch):