mainsequence 4.1.8__tar.gz → 4.1.9__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.
- {mainsequence-4.1.8 → mainsequence-4.1.9}/PKG-INFO +1 -1
- {mainsequence-4.1.8 → mainsequence-4.1.9}/agent_scaffold/skills/data_publishing/data_nodes/SKILL.md +10 -1
- {mainsequence-4.1.8 → mainsequence-4.1.9}/agent_scaffold/skills/data_publishing/meta_tables/SKILL.md +28 -9
- {mainsequence-4.1.8 → mainsequence-4.1.9}/mainsequence/meta_tables/__init__.py +1 -0
- {mainsequence-4.1.8 → mainsequence-4.1.9}/mainsequence/meta_tables/sqlalchemy_contracts.py +500 -199
- {mainsequence-4.1.8 → mainsequence-4.1.9}/mainsequence.egg-info/PKG-INFO +1 -1
- {mainsequence-4.1.8 → mainsequence-4.1.9}/pyproject.toml +1 -1
- {mainsequence-4.1.8 → mainsequence-4.1.9}/tests/test_meta_tables_sqlalchemy_contracts.py +302 -72
- {mainsequence-4.1.8 → mainsequence-4.1.9}/LICENSE +0 -0
- {mainsequence-4.1.8 → mainsequence-4.1.9}/README.md +0 -0
- {mainsequence-4.1.8 → mainsequence-4.1.9}/agent_scaffold/AGENTS.md +0 -0
- {mainsequence-4.1.8 → mainsequence-4.1.9}/agent_scaffold/skills/a2a_communication/SKILL.md +0 -0
- {mainsequence-4.1.8 → mainsequence-4.1.9}/agent_scaffold/skills/application_surfaces/api_surfaces/SKILL.md +0 -0
- {mainsequence-4.1.8 → mainsequence-4.1.9}/agent_scaffold/skills/command_center/adapter_from_api/SKILL.md +0 -0
- {mainsequence-4.1.8 → mainsequence-4.1.9}/agent_scaffold/skills/command_center/api_mock_prototyping/SKILL.md +0 -0
- {mainsequence-4.1.8 → mainsequence-4.1.9}/agent_scaffold/skills/command_center/app_components/SKILL.md +0 -0
- {mainsequence-4.1.8 → mainsequence-4.1.9}/agent_scaffold/skills/command_center/connections/SKILL.md +0 -0
- {mainsequence-4.1.8 → mainsequence-4.1.9}/agent_scaffold/skills/command_center/workspace_analysis/SKILL.md +0 -0
- {mainsequence-4.1.8 → mainsequence-4.1.9}/agent_scaffold/skills/command_center/workspace_builder/SKILL.md +0 -0
- {mainsequence-4.1.8 → mainsequence-4.1.9}/agent_scaffold/skills/command_center/workspace_design/SKILL.md +0 -0
- {mainsequence-4.1.8 → mainsequence-4.1.9}/agent_scaffold/skills/dashboards/streamlit/SKILL.md +0 -0
- {mainsequence-4.1.8 → mainsequence-4.1.9}/agent_scaffold/skills/data_access/exploration/SKILL.md +0 -0
- {mainsequence-4.1.8 → mainsequence-4.1.9}/agent_scaffold/skills/maintenance/bug_auditor/SKILL.md +0 -0
- {mainsequence-4.1.8 → mainsequence-4.1.9}/agent_scaffold/skills/ms-markets/SKILL.md +0 -0
- {mainsequence-4.1.8 → mainsequence-4.1.9}/agent_scaffold/skills/platform_operations/access_control_and_sharing/SKILL.md +0 -0
- {mainsequence-4.1.8 → mainsequence-4.1.9}/agent_scaffold/skills/platform_operations/orchestration_and_releases/SKILL.md +0 -0
- {mainsequence-4.1.8 → mainsequence-4.1.9}/agent_scaffold/skills/project_builder/SKILL.md +0 -0
- {mainsequence-4.1.8 → mainsequence-4.1.9}/agent_scaffold/skills/project_to_agent/SKILL.md +0 -0
- {mainsequence-4.1.8 → mainsequence-4.1.9}/mainsequence/__init__.py +0 -0
- {mainsequence-4.1.8 → mainsequence-4.1.9}/mainsequence/__main__.py +0 -0
- {mainsequence-4.1.8 → mainsequence-4.1.9}/mainsequence/bootstrap.py +0 -0
- {mainsequence-4.1.8 → mainsequence-4.1.9}/mainsequence/cli/__init__.py +0 -0
- {mainsequence-4.1.8 → mainsequence-4.1.9}/mainsequence/cli/api.py +0 -0
- {mainsequence-4.1.8 → mainsequence-4.1.9}/mainsequence/cli/browser_auth.py +0 -0
- {mainsequence-4.1.8 → mainsequence-4.1.9}/mainsequence/cli/cli.py +0 -0
- {mainsequence-4.1.8 → mainsequence-4.1.9}/mainsequence/cli/config.py +0 -0
- {mainsequence-4.1.8 → mainsequence-4.1.9}/mainsequence/cli/docker_utils.py +0 -0
- {mainsequence-4.1.8 → mainsequence-4.1.9}/mainsequence/cli/doctor.py +0 -0
- {mainsequence-4.1.8 → mainsequence-4.1.9}/mainsequence/cli/local_ops.py +0 -0
- {mainsequence-4.1.8 → mainsequence-4.1.9}/mainsequence/cli/model_filters.py +0 -0
- {mainsequence-4.1.8 → mainsequence-4.1.9}/mainsequence/cli/project_status.py +0 -0
- {mainsequence-4.1.8 → mainsequence-4.1.9}/mainsequence/cli/pydantic_cli.py +0 -0
- {mainsequence-4.1.8 → mainsequence-4.1.9}/mainsequence/cli/sdk_utils.py +0 -0
- {mainsequence-4.1.8 → mainsequence-4.1.9}/mainsequence/cli/ssh_utils.py +0 -0
- {mainsequence-4.1.8 → mainsequence-4.1.9}/mainsequence/cli/ui.py +0 -0
- {mainsequence-4.1.8 → mainsequence-4.1.9}/mainsequence/client/__init__.py +0 -0
- {mainsequence-4.1.8 → mainsequence-4.1.9}/mainsequence/client/agent_runtime_models.py +0 -0
- {mainsequence-4.1.8 → mainsequence-4.1.9}/mainsequence/client/base.py +0 -0
- {mainsequence-4.1.8 → mainsequence-4.1.9}/mainsequence/client/client.py +0 -0
- {mainsequence-4.1.8 → mainsequence-4.1.9}/mainsequence/client/command_center/__init__.py +0 -0
- {mainsequence-4.1.8 → mainsequence-4.1.9}/mainsequence/client/command_center/app_component.py +0 -0
- {mainsequence-4.1.8 → mainsequence-4.1.9}/mainsequence/client/command_center/connections.py +0 -0
- {mainsequence-4.1.8 → mainsequence-4.1.9}/mainsequence/client/command_center/data_models.py +0 -0
- {mainsequence-4.1.8 → mainsequence-4.1.9}/mainsequence/client/command_center/workspace.py +0 -0
- {mainsequence-4.1.8 → mainsequence-4.1.9}/mainsequence/client/command_center/workspace_snapshot.py +0 -0
- {mainsequence-4.1.8 → mainsequence-4.1.9}/mainsequence/client/compute_validation.py +0 -0
- {mainsequence-4.1.8 → mainsequence-4.1.9}/mainsequence/client/data_sources_interfaces/__init__.py +0 -0
- {mainsequence-4.1.8 → mainsequence-4.1.9}/mainsequence/client/data_sources_interfaces/duckdb.py +0 -0
- {mainsequence-4.1.8 → mainsequence-4.1.9}/mainsequence/client/data_sources_interfaces/local_paths.py +0 -0
- {mainsequence-4.1.8 → mainsequence-4.1.9}/mainsequence/client/data_sources_interfaces/sqlite.py +0 -0
- {mainsequence-4.1.8 → mainsequence-4.1.9}/mainsequence/client/dtype_codec.py +0 -0
- {mainsequence-4.1.8 → mainsequence-4.1.9}/mainsequence/client/exceptions.py +0 -0
- {mainsequence-4.1.8 → mainsequence-4.1.9}/mainsequence/client/fastapi/__init__.py +0 -0
- {mainsequence-4.1.8 → mainsequence-4.1.9}/mainsequence/client/fastapi/auth.py +0 -0
- {mainsequence-4.1.8 → mainsequence-4.1.9}/mainsequence/client/models_foundry.py +0 -0
- {mainsequence-4.1.8 → mainsequence-4.1.9}/mainsequence/client/models_helpers.py +0 -0
- {mainsequence-4.1.8 → mainsequence-4.1.9}/mainsequence/client/models_metatables.py +0 -0
- {mainsequence-4.1.8 → mainsequence-4.1.9}/mainsequence/client/models_user.py +0 -0
- {mainsequence-4.1.8 → mainsequence-4.1.9}/mainsequence/client/utils.py +0 -0
- {mainsequence-4.1.8 → mainsequence-4.1.9}/mainsequence/defaults.py +0 -0
- {mainsequence-4.1.8 → mainsequence-4.1.9}/mainsequence/instrumentation/__init__.py +0 -0
- {mainsequence-4.1.8 → mainsequence-4.1.9}/mainsequence/instrumentation/utils.py +0 -0
- {mainsequence-4.1.8 → mainsequence-4.1.9}/mainsequence/logconf.py +0 -0
- {mainsequence-4.1.8 → mainsequence-4.1.9}/mainsequence/meta_tables/__main__.py +0 -0
- {mainsequence-4.1.8 → mainsequence-4.1.9}/mainsequence/meta_tables/compiled_sql/__init__.py +0 -0
- {mainsequence-4.1.8 → mainsequence-4.1.9}/mainsequence/meta_tables/compiled_sql/v1.py +0 -0
- {mainsequence-4.1.8 → mainsequence-4.1.9}/mainsequence/meta_tables/data_nodes/__init__.py +0 -0
- {mainsequence-4.1.8 → mainsequence-4.1.9}/mainsequence/meta_tables/data_nodes/build_operations.py +0 -0
- {mainsequence-4.1.8 → mainsequence-4.1.9}/mainsequence/meta_tables/data_nodes/data_nodes.py +0 -0
- {mainsequence-4.1.8 → mainsequence-4.1.9}/mainsequence/meta_tables/data_nodes/models.py +0 -0
- {mainsequence-4.1.8 → mainsequence-4.1.9}/mainsequence/meta_tables/data_nodes/namespacing.py +0 -0
- {mainsequence-4.1.8 → mainsequence-4.1.9}/mainsequence/meta_tables/data_nodes/persist_managers.py +0 -0
- {mainsequence-4.1.8 → mainsequence-4.1.9}/mainsequence/meta_tables/data_nodes/run_operations.py +0 -0
- {mainsequence-4.1.8 → mainsequence-4.1.9}/mainsequence/meta_tables/data_nodes/utils.py +0 -0
- {mainsequence-4.1.8 → mainsequence-4.1.9}/mainsequence/meta_tables/future_registry.py +0 -0
- {mainsequence-4.1.8 → mainsequence-4.1.9}/mainsequence/meta_tables/hashing.py +0 -0
- {mainsequence-4.1.8 → mainsequence-4.1.9}/mainsequence/meta_tables/pydantic_metadata.py +0 -0
- {mainsequence-4.1.8 → mainsequence-4.1.9}/mainsequence/runtime_flags.py +0 -0
- {mainsequence-4.1.8 → mainsequence-4.1.9}/mainsequence.egg-info/SOURCES.txt +0 -0
- {mainsequence-4.1.8 → mainsequence-4.1.9}/mainsequence.egg-info/dependency_links.txt +0 -0
- {mainsequence-4.1.8 → mainsequence-4.1.9}/mainsequence.egg-info/entry_points.txt +0 -0
- {mainsequence-4.1.8 → mainsequence-4.1.9}/mainsequence.egg-info/requires.txt +0 -0
- {mainsequence-4.1.8 → mainsequence-4.1.9}/mainsequence.egg-info/top_level.txt +0 -0
- {mainsequence-4.1.8 → mainsequence-4.1.9}/setup.cfg +0 -0
- {mainsequence-4.1.8 → mainsequence-4.1.9}/tests/test_auth_precedence.py +0 -0
- {mainsequence-4.1.8 → mainsequence-4.1.9}/tests/test_build_operations_hashing.py +0 -0
- {mainsequence-4.1.8 → mainsequence-4.1.9}/tests/test_cli.py +0 -0
- {mainsequence-4.1.8 → mainsequence-4.1.9}/tests/test_cli_browser_auth.py +0 -0
- {mainsequence-4.1.8 → mainsequence-4.1.9}/tests/test_client.py +0 -0
- {mainsequence-4.1.8 → mainsequence-4.1.9}/tests/test_command_center_app_component_models.py +0 -0
- {mainsequence-4.1.8 → mainsequence-4.1.9}/tests/test_command_center_data_models.py +0 -0
- {mainsequence-4.1.8 → mainsequence-4.1.9}/tests/test_command_center_models.py +0 -0
- {mainsequence-4.1.8 → mainsequence-4.1.9}/tests/test_data_access_mixin_dimension_audit.py +0 -0
- {mainsequence-4.1.8 → mainsequence-4.1.9}/tests/test_data_node_storage_dimension_queries.py +0 -0
- {mainsequence-4.1.8 → mainsequence-4.1.9}/tests/test_data_node_update_flow.py +0 -0
- {mainsequence-4.1.8 → mainsequence-4.1.9}/tests/test_dependency_extras.py +0 -0
- {mainsequence-4.1.8 → mainsequence-4.1.9}/tests/test_duckdb_interface_dimensions.py +0 -0
- {mainsequence-4.1.8 → mainsequence-4.1.9}/tests/test_filter_normalization.py +0 -0
- {mainsequence-4.1.8 → mainsequence-4.1.9}/tests/test_logconf.py +0 -0
- {mainsequence-4.1.8 → mainsequence-4.1.9}/tests/test_meta_tables_client_models.py +0 -0
- {mainsequence-4.1.8 → mainsequence-4.1.9}/tests/test_models_user_request_bound_auth.py +0 -0
- {mainsequence-4.1.8 → mainsequence-4.1.9}/tests/test_pod_project_resolution.py +0 -0
- {mainsequence-4.1.8 → mainsequence-4.1.9}/tests/test_project_batch_jobs_from_file.py +0 -0
- {mainsequence-4.1.8 → mainsequence-4.1.9}/tests/test_run_configuration.py +0 -0
- {mainsequence-4.1.8 → mainsequence-4.1.9}/tests/test_secret_client_model.py +0 -0
- {mainsequence-4.1.8 → mainsequence-4.1.9}/tests/test_source_table_configuration.py +0 -0
- {mainsequence-4.1.8 → mainsequence-4.1.9}/tests/test_sqlite_interface_dimensions.py +0 -0
- {mainsequence-4.1.8 → mainsequence-4.1.9}/tests/test_update_runner_uid_runtime.py +0 -0
- {mainsequence-4.1.8 → mainsequence-4.1.9}/tests/test_update_statistics.py +0 -0
- {mainsequence-4.1.8 → mainsequence-4.1.9}/tests/test_update_uid_guards.py +0 -0
- {mainsequence-4.1.8 → mainsequence-4.1.9}/tests/test_workspace_snapshot.py +0 -0
{mainsequence-4.1.8 → mainsequence-4.1.9}/agent_scaffold/skills/data_publishing/data_nodes/SKILL.md
RENAMED
|
@@ -353,7 +353,16 @@ Do not construct dependency graphs dynamically inside `update()`.
|
|
|
353
353
|
### 8. Foreign Keys Belong To The Storage Contract
|
|
354
354
|
|
|
355
355
|
For new code, model foreign keys on the `PlatformTimeIndexMetaData` storage
|
|
356
|
-
class or route the storage-contract work to the MetaTable skill.
|
|
356
|
+
class or route the storage-contract work to the MetaTable skill. When a
|
|
357
|
+
DataNode storage table needs a platform-managed FK, use
|
|
358
|
+
`MetaTableForeignKey(TargetModel, column=...)` on the storage class. Do not use
|
|
359
|
+
`ForeignKey(Target.__table__.c.uid)`, table fullnames, or explicit target UID
|
|
360
|
+
maps in DataNode examples.
|
|
361
|
+
|
|
362
|
+
Registration of the storage class follows the MetaTable lifecycle:
|
|
363
|
+
`register()` recursively registers unresolved FK target model classes, uses the
|
|
364
|
+
local process registry keyed by `storage_hash`, and writes the target
|
|
365
|
+
`MetaTable.uid` into the FK contract.
|
|
357
366
|
|
|
358
367
|
Do not add DataNode configuration fields just to mutate storage metadata.
|
|
359
368
|
|
{mainsequence-4.1.8 → mainsequence-4.1.9}/agent_scaffold/skills/data_publishing/meta_tables/SKILL.md
RENAMED
|
@@ -152,29 +152,48 @@ Do not add a `MAINSEQUENCE_META_TABLE_REGISTER` toggle in registration examples.
|
|
|
152
152
|
|
|
153
153
|
Foreign-key contracts reference the target `MetaTable` UID.
|
|
154
154
|
|
|
155
|
-
For `PlatformManagedMetaTable`,
|
|
155
|
+
For `PlatformManagedMetaTable`, define foreign keys with
|
|
156
|
+
`MetaTableForeignKey(TargetModel, column=...)`. Do not write raw SQLAlchemy
|
|
157
|
+
table fullnames, `Parent.__table__.c.<column>` targets, or explicit target UID
|
|
158
|
+
maps in the platform-managed path. Registration is the lifecycle path:
|
|
159
|
+
`register()` recursively registers unresolved target model classes, stores each
|
|
160
|
+
returned `MetaTable` in a local process registry keyed by `storage_hash`, and
|
|
161
|
+
uses the target `MetaTable.uid` in the child FK contract.
|
|
162
|
+
|
|
163
|
+
Use this pattern:
|
|
164
|
+
|
|
165
|
+
```python
|
|
166
|
+
account_uid: Mapped[uuid.UUID] = mapped_column(
|
|
167
|
+
Uuid,
|
|
168
|
+
MetaTableForeignKey(Account, column="uid", ondelete="RESTRICT"),
|
|
169
|
+
nullable=False,
|
|
170
|
+
)
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
Every participating table must include `__metatable_description__` describing
|
|
174
|
+
both the schema and the table's intention.
|
|
156
175
|
|
|
157
176
|
Example registration order:
|
|
158
177
|
|
|
159
178
|
```python
|
|
160
|
-
account_meta_table = Account.register(...)
|
|
161
179
|
asset_meta_table = Asset.register(...)
|
|
162
180
|
```
|
|
163
181
|
|
|
164
|
-
The child registration
|
|
165
|
-
|
|
166
|
-
|
|
182
|
+
The child registration registers `Account` first if it has not already been
|
|
183
|
+
registered in the current process. The local registry prevents duplicate backend
|
|
184
|
+
registration attempts for the same `storage_hash` and raises a clear error for
|
|
185
|
+
recursive registration cycles.
|
|
167
186
|
|
|
168
|
-
For `external_registered`, there is no platform-managed parent lookup
|
|
187
|
+
For `external_registered`, there is no platform-managed parent lookup. Register
|
|
188
|
+
the parent first, then build the child registration request with
|
|
189
|
+
`target_meta_tables={Account: account_meta_table}`:
|
|
169
190
|
|
|
170
191
|
```python
|
|
171
192
|
account_meta_table = MetaTable.register(account_request)
|
|
172
193
|
asset_request = external_registered_registration_request_from_sqlalchemy_model(
|
|
173
194
|
Asset,
|
|
174
195
|
data_source_uid=data_source_uid,
|
|
175
|
-
|
|
176
|
-
Account.__table__.fullname: account_meta_table.uid,
|
|
177
|
-
},
|
|
196
|
+
target_meta_tables={Account: account_meta_table},
|
|
178
197
|
)
|
|
179
198
|
asset_meta_table = MetaTable.register(asset_request)
|
|
180
199
|
```
|
|
@@ -9,6 +9,7 @@ _LAZY_IMPORTS = {
|
|
|
9
9
|
".sqlalchemy_contracts",
|
|
10
10
|
"DEFAULT_PLATFORM_MANAGED_PROVISIONING",
|
|
11
11
|
),
|
|
12
|
+
"MetaTableForeignKey": (".sqlalchemy_contracts", "MetaTableForeignKey"),
|
|
12
13
|
"PlatformManagedMetaTable": (".sqlalchemy_contracts", "PlatformManagedMetaTable"),
|
|
13
14
|
"PlatformTimeIndexMetaData": (".sqlalchemy_contracts", "PlatformTimeIndexMetaData"),
|
|
14
15
|
"POSTGRES_IDENTIFIER_MAX_LENGTH": (".hashing", "POSTGRES_IDENTIFIER_MAX_LENGTH"),
|