mainsequence 8.1.20.dev8__tar.gz → 8.1.20.dev9__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 (142) hide show
  1. {mainsequence-8.1.20.dev8/mainsequence.egg-info → mainsequence-8.1.20.dev9}/PKG-INFO +1 -1
  2. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/agent_scaffold/skills/data_access/exploration/SKILL.md +3 -3
  3. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/agent_scaffold/skills/data_publishing/meta_table_migrations/SKILL.md +12 -9
  4. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/agent_scaffold/skills/data_publishing/meta_tables/SKILL.md +13 -16
  5. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/agent_scaffold/skills/data_publishing/time_index_table_updates/SKILL.md +3 -2
  6. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/agent_scaffold/skills/platform_operations/access_control_and_sharing/SKILL.md +6 -9
  7. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/agent_scaffold/skills/platform_operations/orchestration_and_releases/SKILL.md +8 -4
  8. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9/mainsequence.egg-info}/PKG-INFO +1 -1
  9. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/pyproject.toml +1 -1
  10. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/tests/test_code_repository_documentation_contract.py +64 -14
  11. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/LICENSE +0 -0
  12. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/MANIFEST.in +0 -0
  13. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/README.md +0 -0
  14. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/agent_scaffold/AGENTS.md +0 -0
  15. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/agent_scaffold/skills/a2a_sdk_execution/SKILL.md +0 -0
  16. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/agent_scaffold/skills/application_surfaces/api_surfaces/SKILL.md +0 -0
  17. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/agent_scaffold/skills/maintenance/bug_auditor/SKILL.md +0 -0
  18. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/agent_scaffold/skills/maintenance/code_repository_maintenance/SKILL.md +0 -0
  19. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/agent_scaffold/skills/sdk_code_repository_execution/SKILL.md +0 -0
  20. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/mainsequence/__init__.py +0 -0
  21. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/mainsequence/__main__.py +0 -0
  22. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/mainsequence/bootstrap.py +0 -0
  23. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/mainsequence/cli/__init__.py +0 -0
  24. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/mainsequence/cli/api.py +0 -0
  25. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/mainsequence/cli/browser_auth.py +0 -0
  26. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/mainsequence/cli/cli.py +0 -0
  27. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/mainsequence/cli/code_repository_status.py +0 -0
  28. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/mainsequence/cli/config.py +0 -0
  29. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/mainsequence/cli/docker_utils.py +0 -0
  30. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/mainsequence/cli/doctor.py +0 -0
  31. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/mainsequence/cli/local_ops.py +0 -0
  32. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/mainsequence/cli/migrations.py +0 -0
  33. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/mainsequence/cli/model_filters.py +0 -0
  34. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/mainsequence/cli/pydantic_cli.py +0 -0
  35. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/mainsequence/cli/sdk_utils.py +0 -0
  36. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/mainsequence/cli/ssh_utils.py +0 -0
  37. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/mainsequence/cli/ui.py +0 -0
  38. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/mainsequence/client/__init__.py +0 -0
  39. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/mainsequence/client/agent_runtime_models.py +0 -0
  40. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/mainsequence/client/base.py +0 -0
  41. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/mainsequence/client/client.py +0 -0
  42. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/mainsequence/client/compute_validation.py +0 -0
  43. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/mainsequence/client/data_sources_interfaces/__init__.py +0 -0
  44. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/mainsequence/client/data_sources_interfaces/duckdb.py +0 -0
  45. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/mainsequence/client/data_sources_interfaces/local_paths.py +0 -0
  46. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/mainsequence/client/data_sources_interfaces/sqlite.py +0 -0
  47. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/mainsequence/client/dtype_codec.py +0 -0
  48. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/mainsequence/client/exceptions.py +0 -0
  49. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/mainsequence/client/github_issues.py +0 -0
  50. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/mainsequence/client/metatables/__init__.py +0 -0
  51. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/mainsequence/client/metatables/core.py +0 -0
  52. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/mainsequence/client/models_foundry.py +0 -0
  53. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/mainsequence/client/models_helpers.py +0 -0
  54. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/mainsequence/client/models_user.py +0 -0
  55. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/mainsequence/client/observability.py +0 -0
  56. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/mainsequence/client/utils.py +0 -0
  57. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/mainsequence/code_repository_context.py +0 -0
  58. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/mainsequence/code_repository_skills.py +0 -0
  59. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/mainsequence/defaults.py +0 -0
  60. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/mainsequence/instrumentation/__init__.py +0 -0
  61. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/mainsequence/instrumentation/utils.py +0 -0
  62. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/mainsequence/logconf.py +0 -0
  63. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/mainsequence/meta_tables/__init__.py +0 -0
  64. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/mainsequence/meta_tables/__main__.py +0 -0
  65. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/mainsequence/meta_tables/compiled_sql/__init__.py +0 -0
  66. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/mainsequence/meta_tables/compiled_sql/v1.py +0 -0
  67. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/mainsequence/meta_tables/future_registry.py +0 -0
  68. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/mainsequence/meta_tables/hashing.py +0 -0
  69. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/mainsequence/meta_tables/migrations/__init__.py +0 -0
  70. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/mainsequence/meta_tables/migrations/alembic.py +0 -0
  71. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/mainsequence/meta_tables/migrations/env.py +0 -0
  72. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/mainsequence/meta_tables/migrations/provider.py +0 -0
  73. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/mainsequence/meta_tables/migrations/registry.py +0 -0
  74. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/mainsequence/meta_tables/migrations/scaffold.py +0 -0
  75. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/mainsequence/meta_tables/migrations/templates/__init__.py +0 -0
  76. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/mainsequence/meta_tables/migrations/templates/env.py.mako +0 -0
  77. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/mainsequence/meta_tables/migrations/templates/script.py.mako +0 -0
  78. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/mainsequence/meta_tables/pydantic_metadata.py +0 -0
  79. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/mainsequence/meta_tables/schema_names.py +0 -0
  80. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/mainsequence/meta_tables/sqlalchemy_contracts.py +0 -0
  81. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/mainsequence/meta_tables/time_index_table_refs.py +0 -0
  82. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/mainsequence/meta_tables/time_index_table_updates/__init__.py +0 -0
  83. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/mainsequence/meta_tables/time_index_table_updates/configuration.py +0 -0
  84. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/mainsequence/meta_tables/time_index_table_updates/dependencies.py +0 -0
  85. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/mainsequence/meta_tables/time_index_table_updates/managers.py +0 -0
  86. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/mainsequence/meta_tables/time_index_table_updates/namespacing.py +0 -0
  87. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/mainsequence/meta_tables/time_index_table_updates/runner.py +0 -0
  88. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/mainsequence/meta_tables/time_index_table_updates/updaters.py +0 -0
  89. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/mainsequence/meta_tables/time_index_table_updates/utils.py +0 -0
  90. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/mainsequence/repository_identity_security.py +0 -0
  91. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/mainsequence/runtime_flags.py +0 -0
  92. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/mainsequence/scaffold_skills.py +0 -0
  93. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/mainsequence.egg-info/SOURCES.txt +0 -0
  94. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/mainsequence.egg-info/dependency_links.txt +0 -0
  95. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/mainsequence.egg-info/entry_points.txt +0 -0
  96. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/mainsequence.egg-info/requires.txt +0 -0
  97. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/mainsequence.egg-info/top_level.txt +0 -0
  98. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/setup.cfg +0 -0
  99. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/tests/fixtures/time_index_table_update_hash_v2_golden.json +0 -0
  100. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/tests/test_auth_precedence.py +0 -0
  101. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/tests/test_canonical_api_route_contract.py +0 -0
  102. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/tests/test_cli.py +0 -0
  103. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/tests/test_cli_browser_auth.py +0 -0
  104. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/tests/test_cli_migrations.py +0 -0
  105. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/tests/test_client.py +0 -0
  106. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/tests/test_code_repository_batch_jobs_from_file.py +0 -0
  107. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/tests/test_code_repository_branch_contract.py +0 -0
  108. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/tests/test_code_repository_runtime_context.py +0 -0
  109. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/tests/test_code_repository_skills.py +0 -0
  110. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/tests/test_dependency_extras.py +0 -0
  111. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/tests/test_dev_release_version.py +0 -0
  112. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/tests/test_duckdb_interface_dimensions.py +0 -0
  113. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/tests/test_environment_resource_context.py +0 -0
  114. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/tests/test_environment_response_contracts.py +0 -0
  115. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/tests/test_filter_normalization.py +0 -0
  116. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/tests/test_github_issues_client.py +0 -0
  117. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/tests/test_instrumentation.py +0 -0
  118. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/tests/test_local_ops.py +0 -0
  119. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/tests/test_logconf.py +0 -0
  120. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/tests/test_meta_table_migrations.py +0 -0
  121. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/tests/test_meta_tables_client_models.py +0 -0
  122. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/tests/test_meta_tables_sqlalchemy_contracts.py +0 -0
  123. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/tests/test_models_user_request_bound_auth.py +0 -0
  124. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/tests/test_notification_uid_contract.py +0 -0
  125. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/tests/test_observability_client.py +0 -0
  126. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/tests/test_pod_project_resolution.py +0 -0
  127. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/tests/test_scaffold_skills.py +0 -0
  128. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/tests/test_schema_names.py +0 -0
  129. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/tests/test_secret_client_model.py +0 -0
  130. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/tests/test_source_table_configuration.py +0 -0
  131. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/tests/test_sqlite_interface_dimensions.py +0 -0
  132. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/tests/test_ssh_utils.py +0 -0
  133. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/tests/test_time_index_table_access_dimension_audit.py +0 -0
  134. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/tests/test_time_index_table_dimension_queries.py +0 -0
  135. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/tests/test_time_index_table_update_configuration.py +0 -0
  136. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/tests/test_time_index_table_update_configuration_client.py +0 -0
  137. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/tests/test_time_index_table_update_flow.py +0 -0
  138. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/tests/test_time_index_table_update_hard_cut.py +0 -0
  139. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/tests/test_tolerant_response_reading.py +0 -0
  140. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/tests/test_update_runner_uid_runtime.py +0 -0
  141. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/tests/test_update_statistics.py +0 -0
  142. {mainsequence-8.1.20.dev8 → mainsequence-8.1.20.dev9}/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.1.20.dev8
3
+ Version: 8.1.20.dev9
4
4
  Summary: Main Sequence SDK
5
5
  Author-email: Main Sequence GmbH <dev@main-sequence.io>
6
6
  License-Expression: LicenseRef-MainSequence-Proprietary
@@ -60,9 +60,9 @@ This skill discovers and identifies data. It does not publish, redesign, or defi
60
60
  ## Read First
61
61
 
62
62
  1. `AGENTS.md`
63
- 2. `docs/cli/index.md`
64
- 3. `docs/knowledge/time_index_table_updates.md`
65
- 4. `docs/knowledge/meta_tables/index.md` when the exploration touches row-oriented storage
63
+ 2. <https://mainsequence-sdk.github.io/mainsequence-sdk/cli/>
64
+ 3. <https://mainsequence-sdk.github.io/mainsequence-sdk/knowledge/time_index_table_updates/>
65
+ 4. <https://mainsequence-sdk.github.io/mainsequence-sdk/knowledge/meta_tables/> when the exploration touches row-oriented storage
66
66
 
67
67
  ## Inputs This Skill Needs
68
68
 
@@ -17,16 +17,13 @@ platform-managed application tables outside the migration workflow.
17
17
 
18
18
  ## Read First
19
19
 
20
- 1. `docs/knowledge/meta_tables/migrations.md`
21
- 2. `docs/knowledge/meta_tables/api.md`
22
- 3. `docs/adr/0020-metatable-migration-artifact-registry.md`
23
- 4. `docs/adr/0026-sdk-owned-migration-scaffolding.md`
20
+ 1. `AGENTS.md`
21
+ 2. <https://mainsequence-sdk.github.io/mainsequence-sdk/knowledge/meta_tables/migrations/>
22
+ 3. <https://mainsequence-sdk.github.io/mainsequence-sdk/knowledge/meta_tables/api/>
24
23
 
25
- `docs/knowledge/meta_tables/migrations.md` is the authoritative SDK reference for
26
- provider behavior and migration contracts. The runnable beginner migration
27
- walkthrough is maintained in the separate canonical tutorial CodeRepository at
28
- <https://github.com/mainsequence-projects/mainsequence-sdk-tutorial>; read it
29
- only when a runnable end-to-end example is needed.
24
+ The pages above are the authoritative reference for provider behavior and
25
+ migration contracts. This skill states the contract it needs; read those pages
26
+ for the full provider and catalog-binding detail.
30
27
 
31
28
  ## Required Decisions
32
29
 
@@ -103,6 +100,12 @@ platform-managed, Alembic-managed reservations and are validated before HTTP.
103
100
 
104
101
  - Keep Alembic as the schema migration engine; do not build custom operation
105
102
  lists or fake migration payload formats.
103
+ - These are intentionally unsupported and must not be reintroduced: SDK-managed
104
+ migration artifact table models, packaged migration rows,
105
+ `load_packaged_migration`, `sync_packaged_migration`,
106
+ `build_migration_registry_row`, custom `operations()` migration modules, and
107
+ operation names such as `add_column` or `create_index`. Use provider-selected
108
+ Alembic revisions and Alembic-rendered SQL only.
106
109
  - Keep provider scope explicit. Do not scan all imported models or installed
107
110
  packages.
108
111
  - For one-model or configured dynamic providers, use `metadata_for_models(...)`
@@ -49,19 +49,16 @@ If the user is still in the discovery process and does not yet know what data ex
49
49
 
50
50
  ## Read First
51
51
 
52
- 1. `docs/knowledge/meta_tables/index.md`
53
- 2. `docs/knowledge/meta_tables/sqlalchemy.md`
54
- 3. `docs/knowledge/meta_tables/compiled_sql.md`
55
- 4. `docs/knowledge/meta_tables/migrations.md`
56
- 5. `docs/knowledge/meta_tables/api.md`
57
- 6. For migration work, use
52
+ 1. `AGENTS.md`
53
+ 2. <https://mainsequence-sdk.github.io/mainsequence-sdk/knowledge/meta_tables/>
54
+ 3. <https://mainsequence-sdk.github.io/mainsequence-sdk/knowledge/meta_tables/sqlalchemy/>
55
+ 4. <https://mainsequence-sdk.github.io/mainsequence-sdk/knowledge/meta_tables/compiled_sql/>
56
+ 5. <https://mainsequence-sdk.github.io/mainsequence-sdk/knowledge/meta_tables/migrations/>
57
+ 6. <https://mainsequence-sdk.github.io/mainsequence-sdk/knowledge/meta_tables/api/>
58
+ 7. For migration work, use
58
59
  `.agents/skills/mainsequence/data_publishing/meta_table_migrations/SKILL.md`
59
60
 
60
- The knowledge pages above are the authoritative SDK reference for MetaTables.
61
- The runnable beginner walkthrough is maintained in the separate canonical
62
- tutorial CodeRepository at
63
- <https://github.com/mainsequence-projects/mainsequence-sdk-tutorial>; read it
64
- only when a runnable end-to-end example is needed.
61
+ The pages above are the authoritative reference for MetaTables.
65
62
 
66
63
  ## Inputs This Skill Needs
67
64
 
@@ -313,9 +310,9 @@ asset_meta_table = MetaTable.register(asset_request)
313
310
  ### 4. Schema changes use Alembic
314
311
 
315
312
  When doing migration work, use
316
- `.agents/skills/mainsequence/data_publishing/meta_table_migrations/SKILL.md`
317
- and read `docs/knowledge/meta_tables/migrations.md`. The migration skill owns the
318
- provider-based Alembic lifecycle.
313
+ `.agents/skills/mainsequence/data_publishing/meta_table_migrations/SKILL.md`,
314
+ which owns the provider-based Alembic lifecycle and carries the migration
315
+ reading list.
319
316
 
320
317
  Do not apply in-place contract changes by changing a `PlatformManagedMetaTable`
321
318
  SQLAlchemy class and calling normal registration again. Shape-addressed
@@ -355,8 +352,8 @@ physical table and Alembic version table names. Use `suffix` for a namespace or
355
352
  variant, for example `schema_table_name("msm", "positions", suffix="broker")`.
356
353
 
357
354
  Do not ask users to construct backend migration payloads or call low-level
358
- migration request models. The backend request shape is reference material in
359
- the tutorial; the user-facing path is:
355
+ migration request models. The backend request shape is internal; the
356
+ user-facing path is:
360
357
 
361
358
  ```bash
362
359
  mainsequence migrations current --provider sdk_examples.migrations:migration
@@ -64,8 +64,9 @@ If the task depends on one of those areas, route it explicitly instead of guessi
64
64
 
65
65
  ## Read First
66
66
 
67
- 1. `docs/knowledge/time_index_table_updates.md`
68
- 2. `docs/knowledge/meta_tables/sqlalchemy.md`
67
+ 1. `AGENTS.md`
68
+ 2. <https://mainsequence-sdk.github.io/mainsequence-sdk/knowledge/time_index_table_updates/>
69
+ 3. <https://mainsequence-sdk.github.io/mainsequence-sdk/knowledge/meta_tables/sqlalchemy/>
69
70
 
70
71
  ## Inputs This Skill Needs
71
72
 
@@ -61,16 +61,13 @@ This skill only reasons about access to deployed resources such as `ResourceRele
61
61
 
62
62
  ## Read First
63
63
 
64
- 1. `docs/knowledge/infrastructure/users_and_access.md`
65
- 2. `docs/knowledge/infrastructure/constants_and_secrets.md`
64
+ 1. `AGENTS.md`
65
+ 2. <https://mainsequence-sdk.github.io/mainsequence-sdk/knowledge/infrastructure/users_and_access/>
66
+ 3. <https://mainsequence-sdk.github.io/mainsequence-sdk/knowledge/infrastructure/constants_and_secrets/>
66
67
 
67
- If the task is specifically about a resource type, also read the corresponding knowledge or CLI page for that resource.
68
-
69
- The knowledge pages above are the authoritative SDK reference for access control
70
- and sharing. The runnable beginner walkthrough is maintained in the separate
71
- canonical tutorial CodeRepository at
72
- <https://github.com/mainsequence-projects/mainsequence-sdk-tutorial>; read it
73
- only when a runnable end-to-end example is needed.
68
+ The pages above are the authoritative reference for access control and sharing.
69
+ If the task is specifically about a resource type, also read that resource's own
70
+ page from the documentation root at <https://mainsequence-sdk.github.io/mainsequence-sdk/>.
74
71
 
75
72
  ## Inputs This Skill Needs
76
73
 
@@ -57,10 +57,14 @@ This skill must not claim ownership of:
57
57
 
58
58
  ## Read First
59
59
 
60
- 1. `docs/knowledge/infrastructure/scheduling_jobs.md`
61
- 2. `docs/knowledge/infrastructure/artifacts.md`
62
- 3. `docs/knowledge/infrastructure/owner_observability.md` when inspecting logs or resource usage
63
- If the task touches deployed FastAPI APIs, also read the relevant API skill/docs before changing the operational workflow.
60
+ 1. `AGENTS.md`
61
+ 2. <https://mainsequence-sdk.github.io/mainsequence-sdk/knowledge/infrastructure/scheduling_jobs/>
62
+ 3. <https://mainsequence-sdk.github.io/mainsequence-sdk/knowledge/infrastructure/artifacts/>
63
+ 4. <https://mainsequence-sdk.github.io/mainsequence-sdk/knowledge/infrastructure/owner_observability/> when inspecting logs or resource usage
64
+
65
+ If the task touches deployed FastAPI APIs, also use
66
+ `.agents/skills/mainsequence/application_surfaces/api_surfaces/SKILL.md` before
67
+ changing the operational workflow.
64
68
 
65
69
  ## Inputs This Skill Needs
66
70
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mainsequence
3
- Version: 8.1.20.dev8
3
+ Version: 8.1.20.dev9
4
4
  Summary: Main Sequence SDK
5
5
  Author-email: Main Sequence GmbH <dev@main-sequence.io>
6
6
  License-Expression: LicenseRef-MainSequence-Proprietary
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "mainsequence"
7
- version = "8.1.20.dev8"
7
+ version = "8.1.20.dev9"
8
8
  description = "Main Sequence SDK "
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.13"
@@ -24,10 +24,14 @@ STREAMLIT_REMOVAL_LINK_PATHS = {
24
24
  Path("docs/index.md"),
25
25
  }
26
26
  SKILL_ROOT = REPOSITORY_ROOT / "agent_scaffold" / "skills"
27
- # Skills ship inside the wheel but reference repository documentation by its
28
- # repository-relative path, so every referenced path must exist in the tree that
29
- # produced the release.
30
- SKILL_DOCUMENTATION_REFERENCE = re.compile(r"`(docs/[A-Za-z0-9_./-]+\.md)`")
27
+ DOCUMENTATION_SITE_ROOT = "https://mainsequence-sdk.github.io/mainsequence-sdk"
28
+ # The wheel ships `agent_scaffold/skills` and no `docs/`, and the CLI copies those
29
+ # skills into a user's CodeRepository under `.agents/skills/<namespace>/`. There,
30
+ # `docs/` is that repository's own directory, so a skill that names an SDK
31
+ # documentation page by repository-relative path names a file the agent reading it
32
+ # cannot open. Skills cite the published documentation site instead.
33
+ SKILL_REPOSITORY_DOCUMENTATION_PATH = re.compile(r"`(docs/[A-Za-z0-9_./-]+\.md)`")
34
+ SKILL_DOCUMENTATION_URL = re.compile(re.escape(DOCUMENTATION_SITE_ROOT) + r"(/[A-Za-z0-9_./-]*)")
31
35
  # Skills are copied into a CodeRepository under `.agents/skills/<namespace>/`, so
32
36
  # a cross-skill reference maps back to a shipped `agent_scaffold/skills` path.
33
37
  SKILL_CROSS_REFERENCE = re.compile(r"`\.agents/skills/[A-Za-z0-9_]+/([A-Za-z0-9_./-]+/SKILL\.md)`")
@@ -54,8 +58,33 @@ RETIRED_PUBLIC_IDENTIFIERS = {
54
58
  }
55
59
 
56
60
 
57
- def _skill_files() -> tuple[Path, ...]:
58
- return tuple(sorted(SKILL_ROOT.rglob("SKILL.md")))
61
+ def _shipped_scaffold_documents() -> tuple[Path, ...]:
62
+ """Every Markdown file the wheel ships under `agent_scaffold`.
63
+
64
+ `AGENTS.md` ships beside the skills and several skills make it their first
65
+ mandatory read, so it carries the same reference obligations they do.
66
+ """
67
+
68
+ return tuple(sorted((REPOSITORY_ROOT / "agent_scaffold").rglob("*.md")))
69
+
70
+
71
+ def _documentation_page_for_url_path(url_path: str) -> Path | None:
72
+ """Resolve a documentation-site URL path to the `docs/` page that renders it.
73
+
74
+ MkDocs serves directory URLs, so `/knowledge/meta_tables/migrations/` renders
75
+ `docs/knowledge/meta_tables/migrations.md` and `/knowledge/meta_tables/`
76
+ renders that directory's `index.md`. The transform is pure, so a skill's
77
+ documentation links are checkable without reaching the network.
78
+ """
79
+
80
+ relative = url_path.strip("/")
81
+ if not relative:
82
+ return REPOSITORY_ROOT / "docs" / "index.md"
83
+ candidates = (
84
+ REPOSITORY_ROOT / "docs" / f"{relative}.md",
85
+ REPOSITORY_ROOT / "docs" / relative / "index.md",
86
+ )
87
+ return next((candidate for candidate in candidates if candidate.is_file()), None)
59
88
 
60
89
 
61
90
  def _documentation_files() -> tuple[Path, ...]:
@@ -134,27 +163,48 @@ def test_current_documentation_does_not_advertise_streamlit_support(path: Path)
134
163
 
135
164
  @pytest.mark.parametrize(
136
165
  "path",
137
- _skill_files(),
166
+ _shipped_scaffold_documents(),
138
167
  ids=lambda path: str(path.relative_to(REPOSITORY_ROOT)),
139
168
  )
140
- def test_skill_documentation_references_resolve(path: Path) -> None:
169
+ def test_skills_do_not_cite_repository_relative_documentation_paths(path: Path) -> None:
141
170
  relative_path = path.relative_to(REPOSITORY_ROOT)
142
171
  text = path.read_text(encoding="utf-8")
143
172
 
144
- missing = sorted(
173
+ repository_paths = sorted(set(SKILL_REPOSITORY_DOCUMENTATION_PATH.findall(text)))
174
+
175
+ assert not repository_paths, (
176
+ f"{relative_path} cites SDK documentation by repository-relative path: "
177
+ f"{repository_paths}. The wheel ships no `docs/`, so cite "
178
+ f"{DOCUMENTATION_SITE_ROOT}/... instead."
179
+ )
180
+
181
+
182
+ @pytest.mark.parametrize(
183
+ "path",
184
+ _shipped_scaffold_documents(),
185
+ ids=lambda path: str(path.relative_to(REPOSITORY_ROOT)),
186
+ )
187
+ def test_skill_documentation_urls_render_an_existing_page(path: Path) -> None:
188
+ relative_path = path.relative_to(REPOSITORY_ROOT)
189
+ text = path.read_text(encoding="utf-8")
190
+
191
+ unrendered = sorted(
145
192
  {
146
- reference
147
- for reference in SKILL_DOCUMENTATION_REFERENCE.findall(text)
148
- if not (REPOSITORY_ROOT / reference).is_file()
193
+ url_path
194
+ for url_path in SKILL_DOCUMENTATION_URL.findall(text)
195
+ if _documentation_page_for_url_path(url_path) is None
149
196
  }
150
197
  )
151
198
 
152
- assert not missing, f"{relative_path} references documentation that does not exist: {missing}"
199
+ assert not unrendered, (
200
+ f"{relative_path} links documentation-site paths that no `docs/` page "
201
+ f"renders: {unrendered}"
202
+ )
153
203
 
154
204
 
155
205
  @pytest.mark.parametrize(
156
206
  "path",
157
- _skill_files(),
207
+ _shipped_scaffold_documents(),
158
208
  ids=lambda path: str(path.relative_to(REPOSITORY_ROOT)),
159
209
  )
160
210
  def test_skill_cross_references_resolve(path: Path) -> None: