mainsequence 5.0.2__tar.gz → 6.0.6__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 (167) hide show
  1. {mainsequence-5.0.2 → mainsequence-6.0.6}/PKG-INFO +16 -10
  2. {mainsequence-5.0.2 → mainsequence-6.0.6}/README.md +6 -2
  3. {mainsequence-5.0.2 → mainsequence-6.0.6}/agent_scaffold/AGENTS.md +8 -21
  4. mainsequence-6.0.6/agent_scaffold/skills/application_surfaces/api_surfaces/SKILL.md +205 -0
  5. {mainsequence-5.0.2 → mainsequence-6.0.6}/agent_scaffold/skills/data_access/exploration/SKILL.md +6 -8
  6. {mainsequence-5.0.2 → mainsequence-6.0.6}/agent_scaffold/skills/data_publishing/data_nodes/SKILL.md +2 -6
  7. {mainsequence-5.0.2 → mainsequence-6.0.6}/agent_scaffold/skills/data_publishing/meta_tables/SKILL.md +4 -9
  8. {mainsequence-5.0.2 → mainsequence-6.0.6}/agent_scaffold/skills/maintenance/bug_auditor/SKILL.md +1 -1
  9. {mainsequence-5.0.2 → mainsequence-6.0.6}/agent_scaffold/skills/maintenance/project-maintenance/SKILL.md +52 -5
  10. {mainsequence-5.0.2 → mainsequence-6.0.6}/agent_scaffold/skills/platform_operations/access_control_and_sharing/SKILL.md +1 -3
  11. {mainsequence-5.0.2 → mainsequence-6.0.6}/agent_scaffold/skills/platform_operations/orchestration_and_releases/SKILL.md +42 -63
  12. {mainsequence-5.0.2 → mainsequence-6.0.6}/agent_scaffold/skills/sdk_project_execution/SKILL.md +39 -13
  13. {mainsequence-5.0.2 → mainsequence-6.0.6}/mainsequence/bootstrap.py +1 -2
  14. {mainsequence-5.0.2 → mainsequence-6.0.6}/mainsequence/cli/api.py +326 -1087
  15. {mainsequence-5.0.2 → mainsequence-6.0.6}/mainsequence/cli/browser_auth.py +87 -3
  16. {mainsequence-5.0.2 → mainsequence-6.0.6}/mainsequence/cli/cli.py +645 -2621
  17. {mainsequence-5.0.2 → mainsequence-6.0.6}/mainsequence/cli/migrations.py +32 -24
  18. {mainsequence-5.0.2 → mainsequence-6.0.6}/mainsequence/cli/project_status.py +7 -17
  19. {mainsequence-5.0.2 → mainsequence-6.0.6}/mainsequence/client/__init__.py +0 -1
  20. {mainsequence-5.0.2 → mainsequence-6.0.6}/mainsequence/client/agent_runtime_models.py +322 -72
  21. {mainsequence-5.0.2 → mainsequence-6.0.6}/mainsequence/client/base.py +24 -44
  22. {mainsequence-5.0.2 → mainsequence-6.0.6}/mainsequence/client/client.py +1 -1
  23. {mainsequence-5.0.2 → mainsequence-6.0.6}/mainsequence/client/metatables/core.py +275 -350
  24. {mainsequence-5.0.2 → mainsequence-6.0.6}/mainsequence/client/models_foundry.py +249 -200
  25. {mainsequence-5.0.2 → mainsequence-6.0.6}/mainsequence/client/models_helpers.py +33 -167
  26. {mainsequence-5.0.2 → mainsequence-6.0.6}/mainsequence/client/models_user.py +17 -31
  27. {mainsequence-5.0.2 → mainsequence-6.0.6}/mainsequence/client/utils.py +4 -4
  28. {mainsequence-5.0.2 → mainsequence-6.0.6}/mainsequence/logconf.py +2 -2
  29. {mainsequence-5.0.2 → mainsequence-6.0.6}/mainsequence/meta_tables/compiled_sql/v1.py +1 -1
  30. {mainsequence-5.0.2 → mainsequence-6.0.6}/mainsequence/meta_tables/data_nodes/build_operations.py +4 -3
  31. {mainsequence-5.0.2 → mainsequence-6.0.6}/mainsequence/meta_tables/data_nodes/data_nodes.py +5 -16
  32. {mainsequence-5.0.2 → mainsequence-6.0.6}/mainsequence/meta_tables/data_nodes/persist_managers.py +5 -9
  33. {mainsequence-5.0.2 → mainsequence-6.0.6}/mainsequence/meta_tables/migrations/__init__.py +5 -5
  34. {mainsequence-5.0.2 → mainsequence-6.0.6}/mainsequence/meta_tables/sqlalchemy_contracts.py +11 -11
  35. mainsequence-6.0.6/mainsequence/project_skills.py +755 -0
  36. {mainsequence-5.0.2 → mainsequence-6.0.6}/mainsequence/runtime_flags.py +1 -2
  37. {mainsequence-5.0.2 → mainsequence-6.0.6}/mainsequence.egg-info/PKG-INFO +16 -10
  38. {mainsequence-5.0.2 → mainsequence-6.0.6}/mainsequence.egg-info/SOURCES.txt +3 -40
  39. {mainsequence-5.0.2 → mainsequence-6.0.6}/mainsequence.egg-info/requires.txt +10 -8
  40. {mainsequence-5.0.2 → mainsequence-6.0.6}/pyproject.toml +27 -17
  41. {mainsequence-5.0.2 → mainsequence-6.0.6}/tests/test_auth_precedence.py +3 -3
  42. mainsequence-6.0.6/tests/test_canonical_api_route_contract.py +173 -0
  43. {mainsequence-5.0.2 → mainsequence-6.0.6}/tests/test_cli.py +1254 -2076
  44. {mainsequence-5.0.2 → mainsequence-6.0.6}/tests/test_cli_browser_auth.py +155 -0
  45. {mainsequence-5.0.2 → mainsequence-6.0.6}/tests/test_cli_migrations.py +34 -37
  46. {mainsequence-5.0.2 → mainsequence-6.0.6}/tests/test_client.py +1 -1
  47. {mainsequence-5.0.2 → mainsequence-6.0.6}/tests/test_data_access_mixin_dimension_audit.py +2 -26
  48. {mainsequence-5.0.2 → mainsequence-6.0.6}/tests/test_data_node_storage_dimension_queries.py +5 -1
  49. {mainsequence-5.0.2 → mainsequence-6.0.6}/tests/test_data_node_update_flow.py +10 -38
  50. {mainsequence-5.0.2 → mainsequence-6.0.6}/tests/test_dependency_extras.py +2 -1
  51. {mainsequence-5.0.2 → mainsequence-6.0.6}/tests/test_filter_normalization.py +322 -29
  52. {mainsequence-5.0.2 → mainsequence-6.0.6}/tests/test_logconf.py +1 -1
  53. {mainsequence-5.0.2 → mainsequence-6.0.6}/tests/test_meta_tables_client_models.py +51 -31
  54. {mainsequence-5.0.2 → mainsequence-6.0.6}/tests/test_meta_tables_sqlalchemy_contracts.py +19 -31
  55. {mainsequence-5.0.2 → mainsequence-6.0.6}/tests/test_models_user_request_bound_auth.py +5 -5
  56. {mainsequence-5.0.2 → mainsequence-6.0.6}/tests/test_pod_project_resolution.py +320 -150
  57. mainsequence-6.0.6/tests/test_project_batch_jobs_from_file.py +119 -0
  58. mainsequence-6.0.6/tests/test_project_branch_contract.py +225 -0
  59. {mainsequence-5.0.2 → mainsequence-6.0.6}/tests/test_project_skills.py +298 -49
  60. {mainsequence-5.0.2 → mainsequence-6.0.6}/tests/test_run_configuration.py +27 -26
  61. {mainsequence-5.0.2 → mainsequence-6.0.6}/tests/test_sqlite_interface_dimensions.py +4 -2
  62. {mainsequence-5.0.2 → mainsequence-6.0.6}/tests/test_update_uid_guards.py +0 -1
  63. mainsequence-5.0.2/agent_scaffold/skills/application_surfaces/api_surfaces/SKILL.md +0 -402
  64. mainsequence-5.0.2/agent_scaffold/skills/command_center/adapter_from_api/SKILL.md +0 -532
  65. mainsequence-5.0.2/agent_scaffold/skills/command_center/api_mock_prototyping/SKILL.md +0 -296
  66. mainsequence-5.0.2/agent_scaffold/skills/command_center/connections/SKILL.md +0 -236
  67. mainsequence-5.0.2/agent_scaffold/skills/command_center/widgets/app_components/SKILL.md +0 -458
  68. mainsequence-5.0.2/agent_scaffold/skills/command_center/widgets/tables/SKILL.md +0 -333
  69. mainsequence-5.0.2/agent_scaffold/skills/command_center/widgets/tabular_transform/SKILL.md +0 -232
  70. mainsequence-5.0.2/agent_scaffold/skills/command_center/workspace_analysis/SKILL.md +0 -244
  71. mainsequence-5.0.2/agent_scaffold/skills/command_center/workspace_builder/SKILL.md +0 -917
  72. mainsequence-5.0.2/agent_scaffold/skills/command_center/workspace_design/SKILL.md +0 -320
  73. mainsequence-5.0.2/agent_scaffold/skills/ms-markets/SKILL.md +0 -51
  74. mainsequence-5.0.2/mainsequence/client/command_center/__init__.py +0 -8
  75. mainsequence-5.0.2/mainsequence/client/command_center/app_component.py +0 -154
  76. mainsequence-5.0.2/mainsequence/client/command_center/connections.py +0 -680
  77. mainsequence-5.0.2/mainsequence/client/command_center/contracts/__init__.py +0 -5
  78. mainsequence-5.0.2/mainsequence/client/command_center/contracts/adapter_from_api.py +0 -204
  79. mainsequence-5.0.2/mainsequence/client/command_center/contracts/response_mapping.py +0 -79
  80. mainsequence-5.0.2/mainsequence/client/command_center/contracts/table_visuals.py +0 -183
  81. mainsequence-5.0.2/mainsequence/client/command_center/contracts/tabular.py +0 -284
  82. mainsequence-5.0.2/mainsequence/client/command_center/contracts/ui.py +0 -23
  83. mainsequence-5.0.2/mainsequence/client/command_center/data_models.py +0 -324
  84. mainsequence-5.0.2/mainsequence/client/command_center/providers/__init__.py +0 -1
  85. mainsequence-5.0.2/mainsequence/client/command_center/providers/adapter_from_api.py +0 -153
  86. mainsequence-5.0.2/mainsequence/client/command_center/widgets/__init__.py +0 -5
  87. mainsequence-5.0.2/mainsequence/client/command_center/widgets/bindings.py +0 -78
  88. mainsequence-5.0.2/mainsequence/client/command_center/widgets/connection_query.py +0 -120
  89. mainsequence-5.0.2/mainsequence/client/command_center/widgets/registry.py +0 -46
  90. mainsequence-5.0.2/mainsequence/client/command_center/widgets/table.py +0 -455
  91. mainsequence-5.0.2/mainsequence/client/command_center/widgets/tabular_transform.py +0 -410
  92. mainsequence-5.0.2/mainsequence/client/command_center/workspace.py +0 -502
  93. mainsequence-5.0.2/mainsequence/client/command_center/workspace_snapshot.py +0 -551
  94. mainsequence-5.0.2/mainsequence/client/command_center/workspaces/__init__.py +0 -2
  95. mainsequence-5.0.2/mainsequence/client/command_center/workspaces/documents.py +0 -43
  96. mainsequence-5.0.2/mainsequence/client/command_center/workspaces/mounted_widgets.py +0 -40
  97. mainsequence-5.0.2/mainsequence/project_skills.py +0 -620
  98. mainsequence-5.0.2/tests/test_command_center_app_component_models.py +0 -92
  99. mainsequence-5.0.2/tests/test_command_center_data_models.py +0 -107
  100. mainsequence-5.0.2/tests/test_command_center_models.py +0 -1020
  101. mainsequence-5.0.2/tests/test_command_center_table_contracts.py +0 -177
  102. mainsequence-5.0.2/tests/test_command_center_tabular_transform.py +0 -212
  103. mainsequence-5.0.2/tests/test_project_batch_jobs_from_file.py +0 -237
  104. mainsequence-5.0.2/tests/test_workspace_snapshot.py +0 -201
  105. {mainsequence-5.0.2 → mainsequence-6.0.6}/LICENSE +0 -0
  106. {mainsequence-5.0.2 → mainsequence-6.0.6}/agent_scaffold/skills/a2a_sdk_execution/SKILL.md +0 -0
  107. {mainsequence-5.0.2 → mainsequence-6.0.6}/agent_scaffold/skills/data_publishing/meta_table_migrations/SKILL.md +0 -0
  108. {mainsequence-5.0.2 → mainsequence-6.0.6}/mainsequence/__init__.py +0 -0
  109. {mainsequence-5.0.2 → mainsequence-6.0.6}/mainsequence/__main__.py +0 -0
  110. {mainsequence-5.0.2 → mainsequence-6.0.6}/mainsequence/cli/__init__.py +0 -0
  111. {mainsequence-5.0.2 → mainsequence-6.0.6}/mainsequence/cli/config.py +0 -0
  112. {mainsequence-5.0.2 → mainsequence-6.0.6}/mainsequence/cli/docker_utils.py +0 -0
  113. {mainsequence-5.0.2 → mainsequence-6.0.6}/mainsequence/cli/doctor.py +0 -0
  114. {mainsequence-5.0.2 → mainsequence-6.0.6}/mainsequence/cli/local_ops.py +0 -0
  115. {mainsequence-5.0.2 → mainsequence-6.0.6}/mainsequence/cli/model_filters.py +0 -0
  116. {mainsequence-5.0.2 → mainsequence-6.0.6}/mainsequence/cli/pydantic_cli.py +0 -0
  117. {mainsequence-5.0.2 → mainsequence-6.0.6}/mainsequence/cli/sdk_utils.py +0 -0
  118. {mainsequence-5.0.2 → mainsequence-6.0.6}/mainsequence/cli/ssh_utils.py +0 -0
  119. {mainsequence-5.0.2 → mainsequence-6.0.6}/mainsequence/cli/ui.py +0 -0
  120. {mainsequence-5.0.2 → mainsequence-6.0.6}/mainsequence/client/compute_validation.py +0 -0
  121. {mainsequence-5.0.2 → mainsequence-6.0.6}/mainsequence/client/data_sources_interfaces/__init__.py +0 -0
  122. {mainsequence-5.0.2 → mainsequence-6.0.6}/mainsequence/client/data_sources_interfaces/duckdb.py +0 -0
  123. {mainsequence-5.0.2 → mainsequence-6.0.6}/mainsequence/client/data_sources_interfaces/local_paths.py +0 -0
  124. {mainsequence-5.0.2 → mainsequence-6.0.6}/mainsequence/client/data_sources_interfaces/sqlite.py +0 -0
  125. {mainsequence-5.0.2 → mainsequence-6.0.6}/mainsequence/client/dtype_codec.py +0 -0
  126. {mainsequence-5.0.2 → mainsequence-6.0.6}/mainsequence/client/exceptions.py +0 -0
  127. {mainsequence-5.0.2 → mainsequence-6.0.6}/mainsequence/client/fastapi/__init__.py +0 -0
  128. {mainsequence-5.0.2 → mainsequence-6.0.6}/mainsequence/client/fastapi/auth.py +0 -0
  129. {mainsequence-5.0.2 → mainsequence-6.0.6}/mainsequence/client/metatables/__init__.py +0 -0
  130. {mainsequence-5.0.2 → mainsequence-6.0.6}/mainsequence/defaults.py +0 -0
  131. {mainsequence-5.0.2 → mainsequence-6.0.6}/mainsequence/instrumentation/__init__.py +0 -0
  132. {mainsequence-5.0.2 → mainsequence-6.0.6}/mainsequence/instrumentation/utils.py +0 -0
  133. {mainsequence-5.0.2 → mainsequence-6.0.6}/mainsequence/meta_tables/__init__.py +0 -0
  134. {mainsequence-5.0.2 → mainsequence-6.0.6}/mainsequence/meta_tables/__main__.py +0 -0
  135. {mainsequence-5.0.2 → mainsequence-6.0.6}/mainsequence/meta_tables/compiled_sql/__init__.py +0 -0
  136. {mainsequence-5.0.2 → mainsequence-6.0.6}/mainsequence/meta_tables/data_nodes/__init__.py +0 -0
  137. {mainsequence-5.0.2 → mainsequence-6.0.6}/mainsequence/meta_tables/data_nodes/models.py +0 -0
  138. {mainsequence-5.0.2 → mainsequence-6.0.6}/mainsequence/meta_tables/data_nodes/namespacing.py +0 -0
  139. {mainsequence-5.0.2 → mainsequence-6.0.6}/mainsequence/meta_tables/data_nodes/run_operations.py +0 -0
  140. {mainsequence-5.0.2 → mainsequence-6.0.6}/mainsequence/meta_tables/data_nodes/utils.py +0 -0
  141. {mainsequence-5.0.2 → mainsequence-6.0.6}/mainsequence/meta_tables/future_registry.py +0 -0
  142. {mainsequence-5.0.2 → mainsequence-6.0.6}/mainsequence/meta_tables/hashing.py +0 -0
  143. {mainsequence-5.0.2 → mainsequence-6.0.6}/mainsequence/meta_tables/migrations/alembic.py +0 -0
  144. {mainsequence-5.0.2 → mainsequence-6.0.6}/mainsequence/meta_tables/migrations/env.py +0 -0
  145. {mainsequence-5.0.2 → mainsequence-6.0.6}/mainsequence/meta_tables/migrations/provider.py +0 -0
  146. {mainsequence-5.0.2 → mainsequence-6.0.6}/mainsequence/meta_tables/migrations/registry.py +0 -0
  147. {mainsequence-5.0.2 → mainsequence-6.0.6}/mainsequence/meta_tables/migrations/scaffold.py +0 -0
  148. {mainsequence-5.0.2 → mainsequence-6.0.6}/mainsequence/meta_tables/migrations/templates/__init__.py +0 -0
  149. {mainsequence-5.0.2 → mainsequence-6.0.6}/mainsequence/meta_tables/migrations/templates/env.py.mako +0 -0
  150. {mainsequence-5.0.2 → mainsequence-6.0.6}/mainsequence/meta_tables/migrations/templates/script.py.mako +0 -0
  151. {mainsequence-5.0.2 → mainsequence-6.0.6}/mainsequence/meta_tables/pydantic_metadata.py +0 -0
  152. {mainsequence-5.0.2 → mainsequence-6.0.6}/mainsequence/meta_tables/schema_names.py +0 -0
  153. {mainsequence-5.0.2 → mainsequence-6.0.6}/mainsequence/scaffold_skills.py +0 -0
  154. {mainsequence-5.0.2 → mainsequence-6.0.6}/mainsequence.egg-info/dependency_links.txt +0 -0
  155. {mainsequence-5.0.2 → mainsequence-6.0.6}/mainsequence.egg-info/entry_points.txt +0 -0
  156. {mainsequence-5.0.2 → mainsequence-6.0.6}/mainsequence.egg-info/top_level.txt +0 -0
  157. {mainsequence-5.0.2 → mainsequence-6.0.6}/setup.cfg +0 -0
  158. {mainsequence-5.0.2 → mainsequence-6.0.6}/tests/test_build_operations_hashing.py +0 -0
  159. {mainsequence-5.0.2 → mainsequence-6.0.6}/tests/test_duckdb_interface_dimensions.py +0 -0
  160. {mainsequence-5.0.2 → mainsequence-6.0.6}/tests/test_instrumentation.py +0 -0
  161. {mainsequence-5.0.2 → mainsequence-6.0.6}/tests/test_meta_table_migrations.py +0 -0
  162. {mainsequence-5.0.2 → mainsequence-6.0.6}/tests/test_scaffold_skills.py +0 -0
  163. {mainsequence-5.0.2 → mainsequence-6.0.6}/tests/test_schema_names.py +0 -0
  164. {mainsequence-5.0.2 → mainsequence-6.0.6}/tests/test_secret_client_model.py +0 -0
  165. {mainsequence-5.0.2 → mainsequence-6.0.6}/tests/test_source_table_configuration.py +0 -0
  166. {mainsequence-5.0.2 → mainsequence-6.0.6}/tests/test_update_runner_uid_runtime.py +0 -0
  167. {mainsequence-5.0.2 → mainsequence-6.0.6}/tests/test_update_statistics.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mainsequence
3
- Version: 5.0.2
3
+ Version: 6.0.6
4
4
  Summary: Main Sequence SDK
5
5
  Author-email: Main Sequence GmbH <dev@main-sequence.io>
6
6
  License-Expression: LicenseRef-MainSequence-Proprietary
@@ -15,7 +15,7 @@ Description-Content-Type: text/markdown
15
15
  License-File: LICENSE
16
16
  Requires-Dist: alembic>=1.18.4
17
17
  Requires-Dist: cachetools
18
- Requires-Dist: click>=8.3.0
18
+ Requires-Dist: click>=8.3.3
19
19
  Requires-Dist: concurrent-log-handler
20
20
  Requires-Dist: numpy
21
21
  Requires-Dist: opentelemetry-api
@@ -23,22 +23,24 @@ Requires-Dist: opentelemetry-exporter-otlp
23
23
  Requires-Dist: opentelemetry-sdk
24
24
  Requires-Dist: packaging>=24.2
25
25
  Requires-Dist: pandas
26
+ Requires-Dist: protobuf>=6.33.5
26
27
  Requires-Dist: psutil
27
28
  Requires-Dist: psycopg2>=2.9.12
28
29
  Requires-Dist: pydantic<3,>=2.11
30
+ Requires-Dist: pygments>=2.20.0
29
31
  Requires-Dist: pyyaml
30
- Requires-Dist: requests
32
+ Requires-Dist: requests>=2.33.0
31
33
  Requires-Dist: sqlalchemy<3,>=2
32
34
  Requires-Dist: starlette
33
35
  Requires-Dist: structlog
34
36
  Requires-Dist: tqdm
35
37
  Requires-Dist: typer
36
- Requires-Dist: urllib3
38
+ Requires-Dist: urllib3>=2.7.0
39
+ Provides-Extra: fastapi
40
+ Requires-Dist: fastapi<1,>=0.115; extra == "fastapi"
37
41
  Provides-Extra: local-data
38
- Requires-Dist: duckdb; extra == "local-data"
39
- Requires-Dist: pyarrow; extra == "local-data"
40
- Provides-Extra: workspace-snapshots
41
- Requires-Dist: playwright; extra == "workspace-snapshots"
42
+ Requires-Dist: duckdb>=1.4.2; extra == "local-data"
43
+ Requires-Dist: pyarrow>=23.0.1; extra == "local-data"
42
44
  Dynamic: license-file
43
45
 
44
46
  <p align="center">
@@ -107,8 +109,6 @@ Recommended entry points:
107
109
  - [Turn Your Project Into an Agent](docs/tutorial/project_to_agent.md)
108
110
  - Knowledge:
109
111
  - [Data Nodes](docs/knowledge/data_nodes.md)
110
- - [Command Center](docs/knowledge/command_center/index.md)
111
- - [Command Center Widget Data Contracts](docs/knowledge/command_center/widget_data_contracts.md)
112
112
  - [MetaTables](docs/knowledge/meta_tables/index.md)
113
113
  - [Constants and Secrets](docs/knowledge/infrastructure/constants_and_secrets.md)
114
114
  - [Scheduling Jobs](docs/knowledge/infrastructure/scheduling_jobs.md)
@@ -130,6 +130,12 @@ Authenticate:
130
130
  mainsequence login
131
131
  ```
132
132
 
133
+ An already MCP-authenticated coding agent can establish the same persisted CLI
134
+ session with `mainsequence login --mcp`, then call the printed
135
+ `auth.cli_authorize` tool while the command waits. The backend supplies the
136
+ callback URI; tokens return directly to the CLI and are never exposed through
137
+ MCP.
138
+
133
139
  Check that you can see your projects:
134
140
 
135
141
  ```bash
@@ -64,8 +64,6 @@ Recommended entry points:
64
64
  - [Turn Your Project Into an Agent](docs/tutorial/project_to_agent.md)
65
65
  - Knowledge:
66
66
  - [Data Nodes](docs/knowledge/data_nodes.md)
67
- - [Command Center](docs/knowledge/command_center/index.md)
68
- - [Command Center Widget Data Contracts](docs/knowledge/command_center/widget_data_contracts.md)
69
67
  - [MetaTables](docs/knowledge/meta_tables/index.md)
70
68
  - [Constants and Secrets](docs/knowledge/infrastructure/constants_and_secrets.md)
71
69
  - [Scheduling Jobs](docs/knowledge/infrastructure/scheduling_jobs.md)
@@ -87,6 +85,12 @@ Authenticate:
87
85
  mainsequence login
88
86
  ```
89
87
 
88
+ An already MCP-authenticated coding agent can establish the same persisted CLI
89
+ session with `mainsequence login --mcp`, then call the printed
90
+ `auth.cli_authorize` tool while the command waits. The backend supplies the
91
+ callback URI; tokens return directly to the CLI and are never exposed through
92
+ MCP.
93
+
90
94
  Check that you can see your projects:
91
95
 
92
96
  ```bash
@@ -63,11 +63,11 @@ Core responsibilities:
63
63
 
64
64
  - translate user intent into the correct Main Sequence implementation path:
65
65
  - for data publishing and data pipelines, use `DataNode`s and `MetaTable`s
66
- - for serving application or widget-facing surfaces, use `FastAPI`
66
+ - for APIs serving the Command Center frontend, use the contract-authoritative
67
+ FastAPI release workflow
67
68
  - for visualization, confirm the delivery target with the user:
68
69
  - if they want a Streamlit app, treat app design and implementation as project-owned code and
69
70
  use Main Sequence skills only for platform deployment and release verification
70
- - if they want reusable components and a more structured product surface, use Command Center
71
71
  - for scheduled execution, releases, and backend operations, use jobs, images, resources, and
72
72
  other platform objects through the proper platform skills
73
73
  - break work into independent executions according to the skill each part requires
@@ -82,8 +82,9 @@ Typical outcomes include:
82
82
 
83
83
  - build a `DataNode` to publish a data pipeline
84
84
  - build a `MetaTable` to record operational or application data
85
- - build a `FastAPI` API that reads project data and returns widget-ready or
86
- application-ready responses
85
+ - build and release a `FastAPI` API whose Command Center contract-bearing
86
+ responses conform to a recorded revision of the canonical Command Center SDK
87
+ GitHub contracts
87
88
  - confirm whether a visualization should be a project-owned Streamlit app or a reusable Command
88
89
  Center surface before building or deploying it
89
90
  - build reusable business logic in `src/` and keep thin integration layers in APIs, jobs, and
@@ -196,22 +197,8 @@ Typical routing:
196
197
  `.agents/skills/mainsequence/data_publishing/meta_tables/SKILL.md`
197
198
  - platform data discovery, published table search, and object identification before implementation:
198
199
  `.agents/skills/mainsequence/data_access/exploration/SKILL.md`
199
- - APIs, FastAPI, request and response contracts, and widget-facing API responses:
200
+ - FastAPI APIs serving the Command Center frontend and their release lifecycle:
200
201
  `.agents/skills/mainsequence/application_surfaces/api_surfaces/SKILL.md`
201
- - Command Center workspace design, widget selection, layout narrative, and visualization strategy:
202
- `.agents/skills/mainsequence/command_center/workspace_design/SKILL.md`
203
- - Command Center workspace JSON creation/update and mounted widget mutation:
204
- `.agents/skills/mainsequence/command_center/workspace_builder/SKILL.md`
205
- - AppComponents, custom forms, and widget input or output contracts:
206
- `.agents/skills/mainsequence/command_center/widgets/app_components/SKILL.md`
207
- - Command Center table/pro-table widgets, tabular frames, table visual metadata, formulas,
208
- selections, and live merge mappings:
209
- `.agents/skills/mainsequence/command_center/widgets/tables/SKILL.md`
210
- - Command Center tabular transform widgets, projection, filtering, aggregate, pivot, unpivot,
211
- computed columns, and seed/live update bindings:
212
- `.agents/skills/mainsequence/command_center/widgets/tabular_transform/SKILL.md`
213
- - predeployment AppComponent/API contract testing through `apiTargetMode: "mock-json"`:
214
- `.agents/skills/mainsequence/command_center/api_mock_prototyping/SKILL.md`
215
202
  - jobs, schedules, images, project resources, releases, and Artifacts:
216
203
  `.agents/skills/mainsequence/platform_operations/orchestration_and_releases/SKILL.md`
217
204
  - RBAC, sharing, constants, secrets, and access verification:
@@ -311,8 +298,8 @@ Typical verification commands:
311
298
 
312
299
  - `mainsequence project current --debug`
313
300
  - `mainsequence project jobs list`
314
- - `mainsequence project jobs runs list <JOB_ID>`
315
- - `mainsequence project jobs runs logs <JOB_RUN_ID> --max-wait-seconds 900`
301
+ - `mainsequence project jobs runs list <JOB_UID>`
302
+ - `mainsequence project jobs runs logs <JOB_RUN_UID> --max-wait-seconds 900`
316
303
  - `mainsequence project images list`
317
304
  - `mainsequence project project_resource list`
318
305
 
@@ -0,0 +1,205 @@
1
+ ---
2
+ name: mainsequence-command-center-fastapi
3
+ description: Build, contract-test, release, and verify a FastAPI project resource that serves the Command Center frontend. Use when a Main Sequence API must implement a wire contract defined by the mainsequence-sdk/command-center-sdk GitHub repository and then move through local testing, project sync, image and resource resolution, FastAPI ResourceRelease creation, and deployed frontend validation.
4
+ ---
5
+
6
+ # Command Center FastAPI Release Lifecycle
7
+
8
+ ## Goal
9
+
10
+ Build a FastAPI provider that the Command Center frontend can use, prove that
11
+ its Command Center contract-bearing payloads conform to the selected Command
12
+ Center SDK repository revision, and release the exact tested commit through the
13
+ Main Sequence platform.
14
+
15
+ This skill coordinates the provider lifecycle. The canonical
16
+ [`mainsequence-sdk/command-center-sdk`](https://github.com/mainsequence-sdk/command-center-sdk)
17
+ GitHub repository is authoritative for every endpoint that adopts a Command
18
+ Center wire contract.
19
+
20
+ ## Contract Authority
21
+
22
+ Apply the Command Center SDK default per endpoint, not to the whole API.
23
+
24
+ - When an endpoint is being created to serve a frontend, first treat the pinned
25
+ Command Center SDK repository contracts as the default unless the user
26
+ explicitly names another frontend or contract authority.
27
+ - Classify every endpoint independently. A single FastAPI application can mix
28
+ Command Center-facing routes with health, internal, administrative, webhook,
29
+ external-integration, and backend-to-backend routes.
30
+ - Do not force non-frontend endpoints into Command Center contracts merely
31
+ because they share an application with frontend-serving routes.
32
+ - Do not force every frontend operation into one generic envelope. Select the
33
+ exact manifest contract whose role and semantics match that endpoint.
34
+
35
+ For each endpoint classified as Command Center contract-bearing, before
36
+ designing Pydantic models or route serialization:
37
+
38
+ 1. Select a branch, tag, or commit from
39
+ `https://github.com/mainsequence-sdk/command-center-sdk`. Use `main` unless
40
+ the user or consuming frontend requires a specific compatible revision, and
41
+ record the resolved commit SHA.
42
+ 2. Open `command-center-sdk/contracts/manifest.json` at that exact revision:
43
+ `https://github.com/mainsequence-sdk/command-center-sdk/blob/<revision>/command-center-sdk/contracts/manifest.json`.
44
+ 3. Select the exact contract by contract ID and role.
45
+ 4. Load the manifest-referenced draft-2020-12 JSON Schema and every indexed
46
+ valid and invalid fixture.
47
+ 5. Load the corresponding contract skill from
48
+ `command-center-sdk/agent_scaffold/skills/contracts/` at the same revision
49
+ when one exists. Otherwise use `implement-command-center-contract` there.
50
+
51
+ The manifest, referenced schema, and indexed fixtures define the wire format.
52
+ TypeScript declarations and human documentation explain the contract but do not
53
+ replace that language-neutral definition.
54
+
55
+ Do not install the Node package in the Python API environment to discover or
56
+ validate these contracts. Read them from a checkout or GitHub URLs pinned to the
57
+ resolved repository commit.
58
+
59
+ Do not copy schemas, fixture payloads, contract IDs, or field inventories into
60
+ this skill or into Main Sequence SDK client models. Generate or maintain
61
+ provider-side Python models against the selected repository schema and validate
62
+ serialized responses at the HTTP boundary.
63
+
64
+ If no published contract applies to an application-specific frontend endpoint,
65
+ record that decision and define an explicit application-owned route contract.
66
+ Do not mislabel it as a Command Center SDK contract or distort a nearby schema
67
+ to make it fit.
68
+
69
+ If the endpoint claims an existing Command Center contract but that contract
70
+ cannot express the required behavior, stop that endpoint implementation and
71
+ produce a Command Center SDK handoff containing:
72
+
73
+ - Command Center SDK repository commit SHA
74
+ - contract ID and schema `$id`
75
+ - rejected payload or failing fixture
76
+ - exact missing capability or compatibility requirement
77
+
78
+ Do not invent a local wire extension while waiting for a contract change.
79
+
80
+ ## Lifecycle
81
+
82
+ ### 1. Establish the API boundary
83
+
84
+ Record:
85
+
86
+ - the Command Center frontend flow consuming the API
87
+ - the per-endpoint classification: frontend-facing, health, internal,
88
+ administrative, webhook, external integration, or backend-to-backend
89
+ - the exact contract ID and role for each request or response body
90
+ - route paths, HTTP methods, authentication expectations, and error semantics
91
+ - upstream `APIDataNode`, MetaTable, service, or external data dependencies
92
+ - whether the API uses backend transport or a contract-defined direct
93
+ development transport
94
+
95
+ Use `LoggedUserContextMiddleware` when the platform-authenticated request user
96
+ must be available through `request.state`. This middleware binds request headers
97
+ to the SDK request context; it is not an authorization policy by itself.
98
+
99
+ ### 2. Implement the provider
100
+
101
+ Keep Command Center contract-bearing route code focused on transport and
102
+ application behavior:
103
+
104
+ 1. validate request bodies and parameters
105
+ 2. invoke project-owned services and Main Sequence data access
106
+ 3. serialize the declared Command Center contract
107
+ 4. validate the serialized body against the schema from the selected repository
108
+ commit before it crosses the HTTP boundary
109
+
110
+ Python and Pydantic models are implementation tools, not contract authority.
111
+ Preserve schema requirements, nullability, enums, numeric constraints,
112
+ additional-property policy, contract IDs, and semantic rules from the selected
113
+ Command Center SDK repository revision.
114
+
115
+ ### 3. Prove contract conformance
116
+
117
+ Tests for each selected Command Center contract must:
118
+
119
+ - compile the selected schema using draft 2020-12
120
+ - accept every manifest-indexed valid fixture
121
+ - reject every manifest-indexed invalid fixture
122
+ - validate representative route responses after JSON serialization
123
+ - test request validation, authentication context, authorization decisions, and
124
+ declared errors
125
+ - assert that secrets and runtime-only objects never enter response payloads
126
+ - record the Command Center SDK repository commit SHA, contract ID, and schema
127
+ `$id` in test evidence
128
+
129
+ An OpenAPI document and passing Pydantic validation are useful but do not replace
130
+ validation against the authoritative Command Center SDK schema and fixtures.
131
+
132
+ ### 4. Test with the frontend before release
133
+
134
+ Run the FastAPI application locally and exercise it through the actual Command
135
+ Center frontend flow, not only with isolated HTTP calls.
136
+
137
+ For Adapter From API development, use the direct transport mode defined by the
138
+ selected Command Center SDK repository contract and expose the local API through
139
+ a temporary authenticated Cloudflare tunnel. This allows the workspace
140
+ connection to be tested against local code before creating repeated API
141
+ deployments. Validate discovery, queries, health behavior, exact response
142
+ contracts, and secret redaction through that path.
143
+
144
+ Do not guess transport field names or values from this skill. Read them from the
145
+ Adapter From API schema and fixtures at the selected repository commit.
146
+
147
+ ### 5. Release the tested commit
148
+
149
+ Before release, verify local project resolution:
150
+
151
+ ```bash
152
+ mainsequence project current --debug --json
153
+ ```
154
+
155
+ Then move the tested code through the canonical lifecycle:
156
+
157
+ ```bash
158
+ mainsequence project sync -m "Release Command Center API"
159
+ mainsequence project images create
160
+ mainsequence project project_resource list --filter resource_type=fastapi
161
+ mainsequence project project_resource create_fastapi
162
+ ```
163
+
164
+ Verify that:
165
+
166
+ - project sync used the intended Git branch
167
+ - the selected image contains the exact tested commit
168
+ - resource discovery found the expected FastAPI path at that commit
169
+ - the selected resource UID and image UID refer to the same commit
170
+ - the created release kind is `fastapi`
171
+ - compute and spot settings are intentional
172
+
173
+ Use `--automatic-deployment` only after the route paths, resource path, and
174
+ frontend contracts are stable and the release should follow future repository
175
+ syncs. Otherwise keep the release pinned and create deliberate replacements.
176
+
177
+ ### 6. Verify the deployed API
178
+
179
+ Do not treat local success or release creation as completion. Through the
180
+ deployed platform route:
181
+
182
+ 1. verify health and authentication behavior
183
+ 2. execute representative contract-bearing requests
184
+ 3. validate returned JSON against the same repository-pinned schemas
185
+ 4. exercise the consuming Command Center frontend flow
186
+ 5. inspect platform logs for serialization, authorization, and runtime failures
187
+
188
+ When automatic deployment is enabled, also inspect the deployment run and prove
189
+ that it selected the expected repository revision, resource path, and image.
190
+
191
+ ## Completion Evidence
192
+
193
+ Report:
194
+
195
+ - Command Center SDK repository URL and resolved commit SHA
196
+ - implemented contract IDs and schema `$id` values
197
+ - conformance and route-test results
198
+ - local frontend integration path used
199
+ - Git commit, project image UID, project resource UID, and release identity
200
+ - deployed contract validation and Command Center frontend result
201
+ - whether automatic deployment is enabled and why
202
+
203
+ The Command Center-facing release is complete only when the frontend consumes
204
+ the deployed contract-bearing responses and they pass the contracts from the
205
+ recorded Command Center SDK repository revision.
@@ -49,12 +49,10 @@ This skill discovers and identifies data. It does not publish, redesign, or defi
49
49
  `.agents/skills/mainsequence/data_publishing/data_nodes/SKILL.md`
50
50
  - `MetaTable` registration or operation work:
51
51
  `.agents/skills/mainsequence/data_publishing/meta_tables/SKILL.md`
52
- - FastAPI or application-facing implementation:
52
+ - FastAPI providers serving the Command Center frontend:
53
53
  `.agents/skills/mainsequence/application_surfaces/api_surfaces/SKILL.md`
54
54
  - Streamlit dashboard deployment:
55
55
  `.agents/skills/mainsequence/platform_operations/orchestration_and_releases/SKILL.md`
56
- - Command Center surfaces:
57
- `.agents/skills/mainsequence/command_center/workspace_builder/SKILL.md`
58
56
  - blocker and failure analysis:
59
57
  `.agents/skills/mainsequence/maintenance/bug_auditor/SKILL.md`
60
58
 
@@ -99,13 +97,13 @@ Discovery priority:
99
97
  - use column lookup only when the user is specifically searching for a schema or column name
100
98
  - use detail only after you have identified the candidate object you want to inspect
101
99
 
102
- Semantic description discovery searches `MetaTable` metadata rows through:
100
+ Semantic description discovery for published DataNode storage searches
101
+ `TimeIndexMetaTable` metadata rows through:
103
102
 
104
- - `GET /orm/api/ts_manager/meta_table/description-search/?q=<text>`
103
+ - `GET /api/v1/time-index-meta-tables/description-search/?q=<text>`
105
104
 
106
- The same discovery surface applies to `MetaTable` metadata and to published
107
- `DataNode` storage tables, because `DataNode` storage is represented by
108
- `TimeIndexMetaTable` metadata.
105
+ This is the DataNode discovery surface because published DataNode storage is
106
+ represented by `TimeIndexMetaTable` metadata.
109
107
 
110
108
  Typical semantic discovery commands:
111
109
 
@@ -56,12 +56,8 @@ If the task depends on one of those areas, route it explicitly instead of guessi
56
56
 
57
57
  - MetaTables and storage contracts:
58
58
  `.agents/skills/mainsequence/data_publishing/meta_tables/SKILL.md`
59
- - APIs and FastAPI:
59
+ - Command Center-serving FastAPI providers:
60
60
  `.agents/skills/mainsequence/application_surfaces/api_surfaces/SKILL.md`
61
- - Command Center workspaces:
62
- `.agents/skills/mainsequence/command_center/workspace_builder/SKILL.md`
63
- - AppComponents and custom forms:
64
- `.agents/skills/mainsequence/command_center/widgets/app_components/SKILL.md`
65
61
  - Jobs, images, resources, and releases:
66
62
  `.agents/skills/mainsequence/platform_operations/orchestration_and_releases/SKILL.md`
67
63
  - RBAC and sharing:
@@ -349,7 +345,7 @@ delete helpers to clean DataNode storage rows.
349
345
  The SDK call targets:
350
346
 
351
347
  ```text
352
- POST /orm/api/ts_manager/dynamic_table/<dynamic_table_uid>/delete_after_date/
348
+ POST /api/v1/time-index-meta-tables/<table_uid>/delete-after-date/
353
349
  ```
354
350
 
355
351
  Use a global tail delete only when all streams in the table should be rolled
@@ -28,8 +28,7 @@ This skill is for schema-driven application tables registered through TS Manager
28
28
  This skill must not claim ownership of:
29
29
 
30
30
  - DataNode producer contracts
31
- - FastAPI route contracts
32
- - widget response contracts
31
+ - Command Center FastAPI wire contracts
33
32
  - workspace payloads
34
33
  - job scheduling, image pinning, or releases
35
34
  - RBAC or sharing policy
@@ -44,12 +43,8 @@ If the user is still in the discovery process and does not yet know what data ex
44
43
  `.agents/skills/mainsequence/data_publishing/meta_table_migrations/SKILL.md`
45
44
  - DataNodes:
46
45
  `.agents/skills/mainsequence/data_publishing/data_nodes/SKILL.md`
47
- - APIs and FastAPI:
46
+ - Command Center-serving FastAPI providers:
48
47
  `.agents/skills/mainsequence/application_surfaces/api_surfaces/SKILL.md`
49
- - Command Center workspaces:
50
- `.agents/skills/mainsequence/command_center/workspace_builder/SKILL.md`
51
- - AppComponents and custom forms:
52
- `.agents/skills/mainsequence/command_center/widgets/app_components/SKILL.md`
53
48
  - Jobs, images, resources, and releases:
54
49
  `.agents/skills/mainsequence/platform_operations/orchestration_and_releases/SKILL.md`
55
50
 
@@ -75,7 +70,7 @@ Before changing code, collect or infer:
75
70
  - expected read patterns
76
71
  - expected mutation patterns
77
72
  - whether TS Manager should create the physical table
78
- - for `external_registered`, the target `DynamicTableDataSource` UID
73
+ - for `external_registered`, the target canonical `DataSource` UID
79
74
  - for contract changes, the selected `AlembicMetaTableMigration` provider or provider module path
80
75
  - for contract changes, the provider's `AlembicVersionMetaTable` binding and whether it has been registered
81
76
  - for contract changes, the intended Alembic revision, parent/current revision, target revision, and updated SQLAlchemy declarations
@@ -397,7 +392,7 @@ stream cleanup. Route that work to the DataNode skill and use
397
392
  The DataNode delete path is:
398
393
 
399
394
  ```text
400
- POST /orm/api/ts_manager/dynamic_table/<dynamic_table_uid>/delete_after_date/
395
+ POST /api/v1/time-index-meta-tables/<table_uid>/delete-after-date/
401
396
  ```
402
397
 
403
398
  Use `after_date` for global tail rollback. Use `dimension_filters` or
@@ -53,7 +53,7 @@ This skill audits. It does not implement by default.
53
53
  `.agents/skills/mainsequence/data_publishing/data_nodes/SKILL.md`
54
54
  - MetaTable implementation issues:
55
55
  `.agents/skills/mainsequence/data_publishing/meta_tables/SKILL.md`
56
- - API implementation issues:
56
+ - Command Center FastAPI contract or release issues:
57
57
  `.agents/skills/mainsequence/application_surfaces/api_surfaces/SKILL.md`
58
58
  - jobs, images, releases, and runtime environment issues:
59
59
  `.agents/skills/mainsequence/platform_operations/orchestration_and_releases/SKILL.md`
@@ -24,7 +24,7 @@ Do not own:
24
24
  - platform ontology or Project Blueprint design;
25
25
  - domain implementation for MetaTables, DataNodes, APIs, jobs, or releases;
26
26
  - backend repository reconciliation;
27
- - MCP authentication or access-token extraction;
27
+ - MCP authorization policy, OAuth token storage, or access-token extraction;
28
28
  - project-owned skills outside `.agents/skills/mainsequence/`.
29
29
 
30
30
  Route architecture changes to `project_design`, implementation routing to
@@ -32,6 +32,13 @@ Route architecture changes to `project_design`, implementation routing to
32
32
  `maintenance/bug_auditor` when diagnosis extends beyond the maintenance
33
33
  workflow itself.
34
34
 
35
+ The local identity contract has one persisted platform identifier:
36
+ `MAIN_SEQUENCE_PROJECT_UID`, the logical Project UID. The checked-out Git
37
+ branch selects the active ProjectBranch. Never ask the user for a
38
+ ProjectBranch UID, persist `MAIN_SEQUENCE_PROJECT_BRANCH_UID`, or treat a
39
+ ProjectBranch UID as local project configuration. The CLI may resolve that UID
40
+ internally when a branch-owned platform API requires it.
41
+
35
42
  ## Inspect Before Changing State
36
43
 
37
44
  1. Read `AGENTS.md` and the relevant repository skills.
@@ -44,6 +51,12 @@ workflow itself.
44
51
  git status --short
45
52
  ```
46
53
 
54
+ The `project current` result must report the logical `project_uid`, current
55
+ `git_branch`, `project_branch_uid`, and `project_branch_status=resolved`.
56
+ Treat a detached checkout, missing logical Project UID, or unresolved/
57
+ unregistered Git branch as a maintenance preflight failure before any
58
+ mutating workflow.
59
+
47
60
  4. Separate existing user changes from changes created by the maintenance
48
61
  task. Never assume every uncommitted file belongs to the current task.
49
62
  5. Read command help when the installed SDK differs from the instructions in
@@ -77,6 +90,27 @@ documentation.
77
90
 
78
91
  ## Refresh Project Authentication
79
92
 
93
+ Establish CLI authentication before refreshing a project. Select exactly one
94
+ existing authentication lane:
95
+
96
+ - When `MAINSEQUENCE_AUTH_MODE=runtime_credential`, run `mainsequence login`.
97
+ The CLI exchanges the injected runtime credential without a browser or a
98
+ refresh-backed user handoff.
99
+ - When the coding agent has an authenticated Main Sequence MCP connection but
100
+ the CLI has no session, run `mainsequence login --mcp` in a terminal that can
101
+ remain active. The command asks the configured backend to create the
102
+ handoff, prints a JSON object naming `auth.cli_authorize` and its exact
103
+ `handoff_uid`, and waits. Call that MCP tool with only the printed arguments.
104
+ The backend-issued callback completes the waiting command and the CLI stores
105
+ the normal tracked JWT pair locally.
106
+ - When neither lane is available, use the existing interactive browser login.
107
+
108
+ Never use `--export` with MCP handoff login, pass access or refresh tokens to
109
+ the model, invent a callback URI, or substitute a handoff UID from another
110
+ terminal. If `auth.cli_authorize` returns an error, preserve the pending local
111
+ workflow output and report that exact error rather than starting multiple
112
+ handoffs blindly.
113
+
80
114
  Refresh only the CLI-managed runtime authentication entries in the project
81
115
  `.env`:
82
116
 
@@ -84,10 +118,18 @@ Refresh only the CLI-managed runtime authentication entries in the project
84
118
  mainsequence project refresh_token --path .
85
119
  ```
86
120
 
87
- Require normal Main Sequence CLI login first. Never print, inspect, summarize,
88
- copy, or return access and refresh token values. Do not attempt to extract the
89
- calling MCP host's protected bearer token. If authentication is unavailable,
90
- stop and request login through the normal CLI or development integration.
121
+ Require one supported Main Sequence CLI login lane first. Never print,
122
+ inspect, summarize, copy, or return access and refresh token values. Do not
123
+ attempt to extract the calling MCP host's protected bearer token: the handoff
124
+ authorizes a new PKCE grant and the backend returns credentials directly to
125
+ the waiting CLI process.
126
+
127
+ The command preserves unrelated project configuration and renders only the
128
+ current supported authentication shape. Existing `MAINSEQUENCE_TOKEN` and
129
+ `MAIN_SEQUENCE_PROJECT_ID` entries are not carried into the rewritten file;
130
+ this is not a separate cleanup routine. It preserves the logical
131
+ `MAIN_SEQUENCE_PROJECT_UID` and never writes a ProjectBranch UID; switching Git
132
+ branches changes local branch context without rewriting `.env`.
91
133
 
92
134
  ## Update The Project SDK
93
135
 
@@ -145,6 +187,11 @@ mainsequence project sync --path . -m "<specific commit message>" --dry-run
145
187
  Review every pending file because the command stages with `git add -A`. Do not
146
188
  continue when unrelated or unexplained changes would be included.
147
189
 
190
+ The command performs the same branch preflight even for `--dry-run`: it rejects
191
+ a detached checkout and rejects a Git branch that is not registered under the
192
+ logical Project. Do not bypass that validation or supply a ProjectBranch UID
193
+ manually. Register or select the correct Git branch first.
194
+
148
195
  After review:
149
196
 
150
197
  ```bash
@@ -56,12 +56,10 @@ This skill must not claim ownership of:
56
56
  `.agents/skills/mainsequence/data_publishing/data_nodes/SKILL.md`
57
57
  - MetaTables:
58
58
  `.agents/skills/mainsequence/data_publishing/meta_tables/SKILL.md`
59
- - APIs and FastAPI:
59
+ - Command Center-serving FastAPI providers:
60
60
  `.agents/skills/mainsequence/application_surfaces/api_surfaces/SKILL.md`
61
61
  - Streamlit dashboard deployment:
62
62
  `.agents/skills/mainsequence/platform_operations/orchestration_and_releases/SKILL.md`
63
- - Command Center workspaces:
64
- `.agents/skills/mainsequence/command_center/workspace_builder/SKILL.md`
65
63
 
66
64
  Streamlit dashboard implementation is app-owned project code. This skill only reasons about access to deployed resources such as `ResourceRelease`.
67
65