mainsequence 8.0.0__tar.gz → 8.0.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 (138) hide show
  1. {mainsequence-8.0.0/mainsequence.egg-info → mainsequence-8.0.1}/PKG-INFO +1 -1
  2. {mainsequence-8.0.0 → mainsequence-8.0.1}/agent_scaffold/AGENTS.md +6 -6
  3. {mainsequence-8.0.0 → mainsequence-8.0.1}/agent_scaffold/skills/data_access/exploration/SKILL.md +1 -1
  4. {mainsequence-8.0.0 → mainsequence-8.0.1}/agent_scaffold/skills/maintenance/bug_auditor/SKILL.md +2 -2
  5. {mainsequence-8.0.0 → mainsequence-8.0.1}/agent_scaffold/skills/maintenance/code_repository_maintenance/SKILL.md +4 -4
  6. {mainsequence-8.0.0 → mainsequence-8.0.1}/agent_scaffold/skills/sdk_code_repository_execution/SKILL.md +3 -3
  7. {mainsequence-8.0.0 → mainsequence-8.0.1}/mainsequence/cli/cli.py +5 -7
  8. {mainsequence-8.0.0 → mainsequence-8.0.1}/mainsequence/logconf.py +2 -12
  9. mainsequence-8.0.1/mainsequence/repository_identity_security.py +31 -0
  10. {mainsequence-8.0.0 → mainsequence-8.0.1/mainsequence.egg-info}/PKG-INFO +1 -1
  11. {mainsequence-8.0.0 → mainsequence-8.0.1}/mainsequence.egg-info/SOURCES.txt +1 -0
  12. {mainsequence-8.0.0 → mainsequence-8.0.1}/pyproject.toml +1 -1
  13. {mainsequence-8.0.0 → mainsequence-8.0.1}/tests/test_auth_precedence.py +15 -6
  14. {mainsequence-8.0.0 → mainsequence-8.0.1}/tests/test_cli.py +58 -50
  15. {mainsequence-8.0.0 → mainsequence-8.0.1}/tests/test_code_repository_runtime_context.py +11 -3
  16. {mainsequence-8.0.0 → mainsequence-8.0.1}/tests/test_code_repository_skills.py +2 -2
  17. {mainsequence-8.0.0 → mainsequence-8.0.1}/tests/test_logconf.py +19 -7
  18. {mainsequence-8.0.0 → mainsequence-8.0.1}/LICENSE +0 -0
  19. {mainsequence-8.0.0 → mainsequence-8.0.1}/MANIFEST.in +0 -0
  20. {mainsequence-8.0.0 → mainsequence-8.0.1}/README.md +0 -0
  21. {mainsequence-8.0.0 → mainsequence-8.0.1}/agent_scaffold/skills/a2a_sdk_execution/SKILL.md +0 -0
  22. {mainsequence-8.0.0 → mainsequence-8.0.1}/agent_scaffold/skills/application_surfaces/api_surfaces/SKILL.md +0 -0
  23. {mainsequence-8.0.0 → mainsequence-8.0.1}/agent_scaffold/skills/data_publishing/meta_table_migrations/SKILL.md +0 -0
  24. {mainsequence-8.0.0 → mainsequence-8.0.1}/agent_scaffold/skills/data_publishing/meta_tables/SKILL.md +0 -0
  25. {mainsequence-8.0.0 → mainsequence-8.0.1}/agent_scaffold/skills/data_publishing/time_index_table_updates/SKILL.md +0 -0
  26. {mainsequence-8.0.0 → mainsequence-8.0.1}/agent_scaffold/skills/platform_operations/access_control_and_sharing/SKILL.md +0 -0
  27. {mainsequence-8.0.0 → mainsequence-8.0.1}/agent_scaffold/skills/platform_operations/orchestration_and_releases/SKILL.md +0 -0
  28. {mainsequence-8.0.0 → mainsequence-8.0.1}/mainsequence/__init__.py +0 -0
  29. {mainsequence-8.0.0 → mainsequence-8.0.1}/mainsequence/__main__.py +0 -0
  30. {mainsequence-8.0.0 → mainsequence-8.0.1}/mainsequence/bootstrap.py +0 -0
  31. {mainsequence-8.0.0 → mainsequence-8.0.1}/mainsequence/cli/__init__.py +0 -0
  32. {mainsequence-8.0.0 → mainsequence-8.0.1}/mainsequence/cli/api.py +0 -0
  33. {mainsequence-8.0.0 → mainsequence-8.0.1}/mainsequence/cli/browser_auth.py +0 -0
  34. {mainsequence-8.0.0 → mainsequence-8.0.1}/mainsequence/cli/code_repository_status.py +0 -0
  35. {mainsequence-8.0.0 → mainsequence-8.0.1}/mainsequence/cli/config.py +0 -0
  36. {mainsequence-8.0.0 → mainsequence-8.0.1}/mainsequence/cli/docker_utils.py +0 -0
  37. {mainsequence-8.0.0 → mainsequence-8.0.1}/mainsequence/cli/doctor.py +0 -0
  38. {mainsequence-8.0.0 → mainsequence-8.0.1}/mainsequence/cli/local_ops.py +0 -0
  39. {mainsequence-8.0.0 → mainsequence-8.0.1}/mainsequence/cli/migrations.py +0 -0
  40. {mainsequence-8.0.0 → mainsequence-8.0.1}/mainsequence/cli/model_filters.py +0 -0
  41. {mainsequence-8.0.0 → mainsequence-8.0.1}/mainsequence/cli/pydantic_cli.py +0 -0
  42. {mainsequence-8.0.0 → mainsequence-8.0.1}/mainsequence/cli/sdk_utils.py +0 -0
  43. {mainsequence-8.0.0 → mainsequence-8.0.1}/mainsequence/cli/ssh_utils.py +0 -0
  44. {mainsequence-8.0.0 → mainsequence-8.0.1}/mainsequence/cli/ui.py +0 -0
  45. {mainsequence-8.0.0 → mainsequence-8.0.1}/mainsequence/client/__init__.py +0 -0
  46. {mainsequence-8.0.0 → mainsequence-8.0.1}/mainsequence/client/agent_runtime_models.py +0 -0
  47. {mainsequence-8.0.0 → mainsequence-8.0.1}/mainsequence/client/base.py +0 -0
  48. {mainsequence-8.0.0 → mainsequence-8.0.1}/mainsequence/client/client.py +0 -0
  49. {mainsequence-8.0.0 → mainsequence-8.0.1}/mainsequence/client/compute_validation.py +0 -0
  50. {mainsequence-8.0.0 → mainsequence-8.0.1}/mainsequence/client/data_sources_interfaces/__init__.py +0 -0
  51. {mainsequence-8.0.0 → mainsequence-8.0.1}/mainsequence/client/data_sources_interfaces/duckdb.py +0 -0
  52. {mainsequence-8.0.0 → mainsequence-8.0.1}/mainsequence/client/data_sources_interfaces/local_paths.py +0 -0
  53. {mainsequence-8.0.0 → mainsequence-8.0.1}/mainsequence/client/data_sources_interfaces/sqlite.py +0 -0
  54. {mainsequence-8.0.0 → mainsequence-8.0.1}/mainsequence/client/dtype_codec.py +0 -0
  55. {mainsequence-8.0.0 → mainsequence-8.0.1}/mainsequence/client/exceptions.py +0 -0
  56. {mainsequence-8.0.0 → mainsequence-8.0.1}/mainsequence/client/metatables/__init__.py +0 -0
  57. {mainsequence-8.0.0 → mainsequence-8.0.1}/mainsequence/client/metatables/core.py +0 -0
  58. {mainsequence-8.0.0 → mainsequence-8.0.1}/mainsequence/client/models_foundry.py +0 -0
  59. {mainsequence-8.0.0 → mainsequence-8.0.1}/mainsequence/client/models_helpers.py +0 -0
  60. {mainsequence-8.0.0 → mainsequence-8.0.1}/mainsequence/client/models_user.py +0 -0
  61. {mainsequence-8.0.0 → mainsequence-8.0.1}/mainsequence/client/observability.py +0 -0
  62. {mainsequence-8.0.0 → mainsequence-8.0.1}/mainsequence/client/utils.py +0 -0
  63. {mainsequence-8.0.0 → mainsequence-8.0.1}/mainsequence/code_repository_context.py +0 -0
  64. {mainsequence-8.0.0 → mainsequence-8.0.1}/mainsequence/code_repository_skills.py +0 -0
  65. {mainsequence-8.0.0 → mainsequence-8.0.1}/mainsequence/defaults.py +0 -0
  66. {mainsequence-8.0.0 → mainsequence-8.0.1}/mainsequence/instrumentation/__init__.py +0 -0
  67. {mainsequence-8.0.0 → mainsequence-8.0.1}/mainsequence/instrumentation/utils.py +0 -0
  68. {mainsequence-8.0.0 → mainsequence-8.0.1}/mainsequence/meta_tables/__init__.py +0 -0
  69. {mainsequence-8.0.0 → mainsequence-8.0.1}/mainsequence/meta_tables/__main__.py +0 -0
  70. {mainsequence-8.0.0 → mainsequence-8.0.1}/mainsequence/meta_tables/compiled_sql/__init__.py +0 -0
  71. {mainsequence-8.0.0 → mainsequence-8.0.1}/mainsequence/meta_tables/compiled_sql/v1.py +0 -0
  72. {mainsequence-8.0.0 → mainsequence-8.0.1}/mainsequence/meta_tables/future_registry.py +0 -0
  73. {mainsequence-8.0.0 → mainsequence-8.0.1}/mainsequence/meta_tables/hashing.py +0 -0
  74. {mainsequence-8.0.0 → mainsequence-8.0.1}/mainsequence/meta_tables/migrations/__init__.py +0 -0
  75. {mainsequence-8.0.0 → mainsequence-8.0.1}/mainsequence/meta_tables/migrations/alembic.py +0 -0
  76. {mainsequence-8.0.0 → mainsequence-8.0.1}/mainsequence/meta_tables/migrations/env.py +0 -0
  77. {mainsequence-8.0.0 → mainsequence-8.0.1}/mainsequence/meta_tables/migrations/provider.py +0 -0
  78. {mainsequence-8.0.0 → mainsequence-8.0.1}/mainsequence/meta_tables/migrations/registry.py +0 -0
  79. {mainsequence-8.0.0 → mainsequence-8.0.1}/mainsequence/meta_tables/migrations/scaffold.py +0 -0
  80. {mainsequence-8.0.0 → mainsequence-8.0.1}/mainsequence/meta_tables/migrations/templates/__init__.py +0 -0
  81. {mainsequence-8.0.0 → mainsequence-8.0.1}/mainsequence/meta_tables/migrations/templates/env.py.mako +0 -0
  82. {mainsequence-8.0.0 → mainsequence-8.0.1}/mainsequence/meta_tables/migrations/templates/script.py.mako +0 -0
  83. {mainsequence-8.0.0 → mainsequence-8.0.1}/mainsequence/meta_tables/pydantic_metadata.py +0 -0
  84. {mainsequence-8.0.0 → mainsequence-8.0.1}/mainsequence/meta_tables/schema_names.py +0 -0
  85. {mainsequence-8.0.0 → mainsequence-8.0.1}/mainsequence/meta_tables/sqlalchemy_contracts.py +0 -0
  86. {mainsequence-8.0.0 → mainsequence-8.0.1}/mainsequence/meta_tables/time_index_table_refs.py +0 -0
  87. {mainsequence-8.0.0 → mainsequence-8.0.1}/mainsequence/meta_tables/time_index_table_updates/__init__.py +0 -0
  88. {mainsequence-8.0.0 → mainsequence-8.0.1}/mainsequence/meta_tables/time_index_table_updates/configuration.py +0 -0
  89. {mainsequence-8.0.0 → mainsequence-8.0.1}/mainsequence/meta_tables/time_index_table_updates/dependencies.py +0 -0
  90. {mainsequence-8.0.0 → mainsequence-8.0.1}/mainsequence/meta_tables/time_index_table_updates/managers.py +0 -0
  91. {mainsequence-8.0.0 → mainsequence-8.0.1}/mainsequence/meta_tables/time_index_table_updates/namespacing.py +0 -0
  92. {mainsequence-8.0.0 → mainsequence-8.0.1}/mainsequence/meta_tables/time_index_table_updates/runner.py +0 -0
  93. {mainsequence-8.0.0 → mainsequence-8.0.1}/mainsequence/meta_tables/time_index_table_updates/updaters.py +0 -0
  94. {mainsequence-8.0.0 → mainsequence-8.0.1}/mainsequence/meta_tables/time_index_table_updates/utils.py +0 -0
  95. {mainsequence-8.0.0 → mainsequence-8.0.1}/mainsequence/runtime_flags.py +0 -0
  96. {mainsequence-8.0.0 → mainsequence-8.0.1}/mainsequence/scaffold_skills.py +0 -0
  97. {mainsequence-8.0.0 → mainsequence-8.0.1}/mainsequence.egg-info/dependency_links.txt +0 -0
  98. {mainsequence-8.0.0 → mainsequence-8.0.1}/mainsequence.egg-info/entry_points.txt +0 -0
  99. {mainsequence-8.0.0 → mainsequence-8.0.1}/mainsequence.egg-info/requires.txt +0 -0
  100. {mainsequence-8.0.0 → mainsequence-8.0.1}/mainsequence.egg-info/top_level.txt +0 -0
  101. {mainsequence-8.0.0 → mainsequence-8.0.1}/setup.cfg +0 -0
  102. {mainsequence-8.0.0 → mainsequence-8.0.1}/tests/fixtures/time_index_table_update_hash_v2_golden.json +0 -0
  103. {mainsequence-8.0.0 → mainsequence-8.0.1}/tests/test_canonical_api_route_contract.py +0 -0
  104. {mainsequence-8.0.0 → mainsequence-8.0.1}/tests/test_cli_browser_auth.py +0 -0
  105. {mainsequence-8.0.0 → mainsequence-8.0.1}/tests/test_cli_migrations.py +0 -0
  106. {mainsequence-8.0.0 → mainsequence-8.0.1}/tests/test_client.py +0 -0
  107. {mainsequence-8.0.0 → mainsequence-8.0.1}/tests/test_code_repository_batch_jobs_from_file.py +0 -0
  108. {mainsequence-8.0.0 → mainsequence-8.0.1}/tests/test_code_repository_branch_contract.py +0 -0
  109. {mainsequence-8.0.0 → mainsequence-8.0.1}/tests/test_dependency_extras.py +0 -0
  110. {mainsequence-8.0.0 → mainsequence-8.0.1}/tests/test_duckdb_interface_dimensions.py +0 -0
  111. {mainsequence-8.0.0 → mainsequence-8.0.1}/tests/test_environment_resource_context.py +0 -0
  112. {mainsequence-8.0.0 → mainsequence-8.0.1}/tests/test_environment_response_contracts.py +0 -0
  113. {mainsequence-8.0.0 → mainsequence-8.0.1}/tests/test_filter_normalization.py +0 -0
  114. {mainsequence-8.0.0 → mainsequence-8.0.1}/tests/test_instrumentation.py +0 -0
  115. {mainsequence-8.0.0 → mainsequence-8.0.1}/tests/test_local_ops.py +0 -0
  116. {mainsequence-8.0.0 → mainsequence-8.0.1}/tests/test_meta_table_migrations.py +0 -0
  117. {mainsequence-8.0.0 → mainsequence-8.0.1}/tests/test_meta_tables_client_models.py +0 -0
  118. {mainsequence-8.0.0 → mainsequence-8.0.1}/tests/test_meta_tables_sqlalchemy_contracts.py +0 -0
  119. {mainsequence-8.0.0 → mainsequence-8.0.1}/tests/test_models_user_request_bound_auth.py +0 -0
  120. {mainsequence-8.0.0 → mainsequence-8.0.1}/tests/test_notification_uid_contract.py +0 -0
  121. {mainsequence-8.0.0 → mainsequence-8.0.1}/tests/test_observability_client.py +0 -0
  122. {mainsequence-8.0.0 → mainsequence-8.0.1}/tests/test_pod_project_resolution.py +0 -0
  123. {mainsequence-8.0.0 → mainsequence-8.0.1}/tests/test_scaffold_skills.py +0 -0
  124. {mainsequence-8.0.0 → mainsequence-8.0.1}/tests/test_scheduler_client_model.py +0 -0
  125. {mainsequence-8.0.0 → mainsequence-8.0.1}/tests/test_schema_names.py +0 -0
  126. {mainsequence-8.0.0 → mainsequence-8.0.1}/tests/test_secret_client_model.py +0 -0
  127. {mainsequence-8.0.0 → mainsequence-8.0.1}/tests/test_source_table_configuration.py +0 -0
  128. {mainsequence-8.0.0 → mainsequence-8.0.1}/tests/test_sqlite_interface_dimensions.py +0 -0
  129. {mainsequence-8.0.0 → mainsequence-8.0.1}/tests/test_ssh_utils.py +0 -0
  130. {mainsequence-8.0.0 → mainsequence-8.0.1}/tests/test_time_index_table_access_dimension_audit.py +0 -0
  131. {mainsequence-8.0.0 → mainsequence-8.0.1}/tests/test_time_index_table_dimension_queries.py +0 -0
  132. {mainsequence-8.0.0 → mainsequence-8.0.1}/tests/test_time_index_table_update_configuration.py +0 -0
  133. {mainsequence-8.0.0 → mainsequence-8.0.1}/tests/test_time_index_table_update_configuration_client.py +0 -0
  134. {mainsequence-8.0.0 → mainsequence-8.0.1}/tests/test_time_index_table_update_flow.py +0 -0
  135. {mainsequence-8.0.0 → mainsequence-8.0.1}/tests/test_time_index_table_update_hard_cut.py +0 -0
  136. {mainsequence-8.0.0 → mainsequence-8.0.1}/tests/test_update_runner_uid_runtime.py +0 -0
  137. {mainsequence-8.0.0 → mainsequence-8.0.1}/tests/test_update_statistics.py +0 -0
  138. {mainsequence-8.0.0 → mainsequence-8.0.1}/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.1
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()
@@ -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.1
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.1"
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):