mainsequence 8.1.20.dev3__tar.gz → 8.1.20.dev4__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-8.1.20.dev3/mainsequence.egg-info → mainsequence-8.1.20.dev4}/PKG-INFO +1 -1
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/agent_scaffold/skills/data_publishing/meta_table_migrations/SKILL.md +10 -5
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/agent_scaffold/skills/data_publishing/meta_tables/SKILL.md +13 -9
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/agent_scaffold/skills/platform_operations/access_control_and_sharing/SKILL.md +9 -4
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4/mainsequence.egg-info}/PKG-INFO +1 -1
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/pyproject.toml +1 -1
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/tests/test_code_repository_documentation_contract.py +53 -4
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/LICENSE +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/MANIFEST.in +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/README.md +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/agent_scaffold/AGENTS.md +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/agent_scaffold/skills/a2a_sdk_execution/SKILL.md +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/agent_scaffold/skills/application_surfaces/api_surfaces/SKILL.md +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/agent_scaffold/skills/data_access/exploration/SKILL.md +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/agent_scaffold/skills/data_publishing/time_index_table_updates/SKILL.md +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/agent_scaffold/skills/maintenance/bug_auditor/SKILL.md +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/agent_scaffold/skills/maintenance/code_repository_maintenance/SKILL.md +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/agent_scaffold/skills/platform_operations/orchestration_and_releases/SKILL.md +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/agent_scaffold/skills/sdk_code_repository_execution/SKILL.md +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/mainsequence/__init__.py +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/mainsequence/__main__.py +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/mainsequence/bootstrap.py +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/mainsequence/cli/__init__.py +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/mainsequence/cli/api.py +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/mainsequence/cli/browser_auth.py +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/mainsequence/cli/cli.py +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/mainsequence/cli/code_repository_status.py +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/mainsequence/cli/config.py +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/mainsequence/cli/docker_utils.py +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/mainsequence/cli/doctor.py +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/mainsequence/cli/local_ops.py +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/mainsequence/cli/migrations.py +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/mainsequence/cli/model_filters.py +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/mainsequence/cli/pydantic_cli.py +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/mainsequence/cli/sdk_utils.py +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/mainsequence/cli/ssh_utils.py +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/mainsequence/cli/ui.py +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/mainsequence/client/__init__.py +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/mainsequence/client/agent_runtime_models.py +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/mainsequence/client/base.py +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/mainsequence/client/client.py +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/mainsequence/client/compute_validation.py +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/mainsequence/client/data_sources_interfaces/__init__.py +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/mainsequence/client/data_sources_interfaces/duckdb.py +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/mainsequence/client/data_sources_interfaces/local_paths.py +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/mainsequence/client/data_sources_interfaces/sqlite.py +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/mainsequence/client/dtype_codec.py +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/mainsequence/client/exceptions.py +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/mainsequence/client/github_issues.py +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/mainsequence/client/metatables/__init__.py +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/mainsequence/client/metatables/core.py +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/mainsequence/client/models_foundry.py +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/mainsequence/client/models_helpers.py +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/mainsequence/client/models_user.py +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/mainsequence/client/observability.py +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/mainsequence/client/utils.py +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/mainsequence/code_repository_context.py +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/mainsequence/code_repository_skills.py +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/mainsequence/defaults.py +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/mainsequence/instrumentation/__init__.py +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/mainsequence/instrumentation/utils.py +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/mainsequence/logconf.py +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/mainsequence/meta_tables/__init__.py +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/mainsequence/meta_tables/__main__.py +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/mainsequence/meta_tables/compiled_sql/__init__.py +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/mainsequence/meta_tables/compiled_sql/v1.py +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/mainsequence/meta_tables/future_registry.py +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/mainsequence/meta_tables/hashing.py +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/mainsequence/meta_tables/migrations/__init__.py +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/mainsequence/meta_tables/migrations/alembic.py +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/mainsequence/meta_tables/migrations/env.py +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/mainsequence/meta_tables/migrations/provider.py +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/mainsequence/meta_tables/migrations/registry.py +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/mainsequence/meta_tables/migrations/scaffold.py +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/mainsequence/meta_tables/migrations/templates/__init__.py +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/mainsequence/meta_tables/migrations/templates/env.py.mako +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/mainsequence/meta_tables/migrations/templates/script.py.mako +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/mainsequence/meta_tables/pydantic_metadata.py +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/mainsequence/meta_tables/schema_names.py +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/mainsequence/meta_tables/sqlalchemy_contracts.py +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/mainsequence/meta_tables/time_index_table_refs.py +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/mainsequence/meta_tables/time_index_table_updates/__init__.py +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/mainsequence/meta_tables/time_index_table_updates/configuration.py +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/mainsequence/meta_tables/time_index_table_updates/dependencies.py +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/mainsequence/meta_tables/time_index_table_updates/managers.py +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/mainsequence/meta_tables/time_index_table_updates/namespacing.py +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/mainsequence/meta_tables/time_index_table_updates/runner.py +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/mainsequence/meta_tables/time_index_table_updates/updaters.py +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/mainsequence/meta_tables/time_index_table_updates/utils.py +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/mainsequence/repository_identity_security.py +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/mainsequence/runtime_flags.py +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/mainsequence/scaffold_skills.py +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/mainsequence.egg-info/SOURCES.txt +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/mainsequence.egg-info/dependency_links.txt +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/mainsequence.egg-info/entry_points.txt +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/mainsequence.egg-info/requires.txt +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/mainsequence.egg-info/top_level.txt +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/setup.cfg +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/tests/fixtures/time_index_table_update_hash_v2_golden.json +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/tests/test_auth_precedence.py +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/tests/test_canonical_api_route_contract.py +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/tests/test_cli.py +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/tests/test_cli_browser_auth.py +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/tests/test_cli_migrations.py +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/tests/test_client.py +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/tests/test_code_repository_batch_jobs_from_file.py +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/tests/test_code_repository_branch_contract.py +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/tests/test_code_repository_runtime_context.py +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/tests/test_code_repository_skills.py +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/tests/test_dependency_extras.py +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/tests/test_dev_release_version.py +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/tests/test_duckdb_interface_dimensions.py +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/tests/test_environment_resource_context.py +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/tests/test_environment_response_contracts.py +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/tests/test_filter_normalization.py +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/tests/test_github_issues_client.py +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/tests/test_instrumentation.py +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/tests/test_local_ops.py +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/tests/test_logconf.py +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/tests/test_meta_table_migrations.py +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/tests/test_meta_tables_client_models.py +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/tests/test_meta_tables_sqlalchemy_contracts.py +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/tests/test_models_user_request_bound_auth.py +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/tests/test_notification_uid_contract.py +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/tests/test_observability_client.py +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/tests/test_pod_project_resolution.py +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/tests/test_scaffold_skills.py +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/tests/test_schema_names.py +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/tests/test_secret_client_model.py +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/tests/test_source_table_configuration.py +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/tests/test_sqlite_interface_dimensions.py +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/tests/test_ssh_utils.py +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/tests/test_time_index_table_access_dimension_audit.py +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/tests/test_time_index_table_dimension_queries.py +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/tests/test_time_index_table_update_configuration.py +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/tests/test_time_index_table_update_configuration_client.py +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/tests/test_time_index_table_update_flow.py +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/tests/test_time_index_table_update_hard_cut.py +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/tests/test_update_runner_uid_runtime.py +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/tests/test_update_statistics.py +0 -0
- {mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/tests/test_update_uid_guards.py +0 -0
|
@@ -17,11 +17,16 @@ platform-managed application tables outside the migration workflow.
|
|
|
17
17
|
|
|
18
18
|
## Read First
|
|
19
19
|
|
|
20
|
-
1. `docs/
|
|
21
|
-
2. `docs/knowledge/meta_tables/
|
|
22
|
-
3. `docs/
|
|
23
|
-
4. `docs/adr/
|
|
24
|
-
|
|
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`
|
|
24
|
+
|
|
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.
|
|
25
30
|
|
|
26
31
|
## Required Decisions
|
|
27
32
|
|
|
@@ -49,15 +49,19 @@ 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/
|
|
53
|
-
2.
|
|
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
|
|
54
58
|
`.agents/skills/mainsequence/data_publishing/meta_table_migrations/SKILL.md`
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
59
|
+
|
|
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
65
|
|
|
62
66
|
## Inputs This Skill Needs
|
|
63
67
|
|
|
@@ -310,7 +314,7 @@ asset_meta_table = MetaTable.register(asset_request)
|
|
|
310
314
|
|
|
311
315
|
When doing migration work, use
|
|
312
316
|
`.agents/skills/mainsequence/data_publishing/meta_table_migrations/SKILL.md`
|
|
313
|
-
and read `docs/
|
|
317
|
+
and read `docs/knowledge/meta_tables/migrations.md`. The migration skill owns the
|
|
314
318
|
provider-based Alembic lifecycle.
|
|
315
319
|
|
|
316
320
|
Do not apply in-place contract changes by changing a `PlatformManagedMetaTable`
|
|
@@ -61,11 +61,16 @@ This skill only reasons about access to deployed resources such as `ResourceRele
|
|
|
61
61
|
|
|
62
62
|
## Read First
|
|
63
63
|
|
|
64
|
-
1. `docs/
|
|
65
|
-
2. `docs/knowledge/infrastructure/
|
|
66
|
-
3. `docs/knowledge/infrastructure/constants_and_secrets.md`
|
|
64
|
+
1. `docs/knowledge/infrastructure/users_and_access.md`
|
|
65
|
+
2. `docs/knowledge/infrastructure/constants_and_secrets.md`
|
|
67
66
|
|
|
68
|
-
If the task is specifically about a resource type, also read the corresponding knowledge or
|
|
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.
|
|
69
74
|
|
|
70
75
|
## Inputs This Skill Needs
|
|
71
76
|
|
|
@@ -23,6 +23,14 @@ STREAMLIT_REMOVAL_LINK_PATHS = {
|
|
|
23
23
|
Path("docs/SUMMARY.md"),
|
|
24
24
|
Path("docs/index.md"),
|
|
25
25
|
}
|
|
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)`")
|
|
31
|
+
# Skills are copied into a CodeRepository under `.agents/skills/<namespace>/`, so
|
|
32
|
+
# a cross-skill reference maps back to a shipped `agent_scaffold/skills` path.
|
|
33
|
+
SKILL_CROSS_REFERENCE = re.compile(r"`\.agents/skills/[A-Za-z0-9_]+/([A-Za-z0-9_./-]+/SKILL\.md)`")
|
|
26
34
|
RETIRED_PUBLIC_IDENTIFIERS = {
|
|
27
35
|
"project_context": re.compile(r"(?<![A-Za-z0-9_])project_context(?![A-Za-z0-9_])"),
|
|
28
36
|
"project-context": re.compile(r"(?<![A-Za-z0-9_])project-context(?![A-Za-z0-9_])"),
|
|
@@ -46,6 +54,10 @@ RETIRED_PUBLIC_IDENTIFIERS = {
|
|
|
46
54
|
}
|
|
47
55
|
|
|
48
56
|
|
|
57
|
+
def _skill_files() -> tuple[Path, ...]:
|
|
58
|
+
return tuple(sorted(SKILL_ROOT.rglob("SKILL.md")))
|
|
59
|
+
|
|
60
|
+
|
|
49
61
|
def _documentation_files() -> tuple[Path, ...]:
|
|
50
62
|
files = {REPOSITORY_ROOT / "README.md", REPOSITORY_ROOT / "CHANGELOG.md"}
|
|
51
63
|
for root in DOCUMENTATION_ROOTS:
|
|
@@ -74,10 +86,7 @@ def test_current_documentation_excludes_retired_project_identifiers(path: Path)
|
|
|
74
86
|
|
|
75
87
|
def test_code_repository_context_adr_describes_the_current_cutover() -> None:
|
|
76
88
|
adr = (
|
|
77
|
-
REPOSITORY_ROOT
|
|
78
|
-
/ "docs"
|
|
79
|
-
/ "adr"
|
|
80
|
-
/ "0031-process-lifetime-code-repository-branch-context.md"
|
|
89
|
+
REPOSITORY_ROOT / "docs" / "adr" / "0031-process-lifetime-code-repository-branch-context.md"
|
|
81
90
|
).read_text(encoding="utf-8")
|
|
82
91
|
|
|
83
92
|
assert "get_code_repository_context()" in adr
|
|
@@ -121,3 +130,43 @@ def test_current_documentation_does_not_advertise_streamlit_support(path: Path)
|
|
|
121
130
|
assert "streamlit" not in text.lower()
|
|
122
131
|
assert "create_dashboard" not in text
|
|
123
132
|
assert "delete_dashboard" not in text
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
@pytest.mark.parametrize(
|
|
136
|
+
"path",
|
|
137
|
+
_skill_files(),
|
|
138
|
+
ids=lambda path: str(path.relative_to(REPOSITORY_ROOT)),
|
|
139
|
+
)
|
|
140
|
+
def test_skill_documentation_references_resolve(path: Path) -> None:
|
|
141
|
+
relative_path = path.relative_to(REPOSITORY_ROOT)
|
|
142
|
+
text = path.read_text(encoding="utf-8")
|
|
143
|
+
|
|
144
|
+
missing = sorted(
|
|
145
|
+
{
|
|
146
|
+
reference
|
|
147
|
+
for reference in SKILL_DOCUMENTATION_REFERENCE.findall(text)
|
|
148
|
+
if not (REPOSITORY_ROOT / reference).is_file()
|
|
149
|
+
}
|
|
150
|
+
)
|
|
151
|
+
|
|
152
|
+
assert not missing, f"{relative_path} references documentation that does not exist: {missing}"
|
|
153
|
+
|
|
154
|
+
|
|
155
|
+
@pytest.mark.parametrize(
|
|
156
|
+
"path",
|
|
157
|
+
_skill_files(),
|
|
158
|
+
ids=lambda path: str(path.relative_to(REPOSITORY_ROOT)),
|
|
159
|
+
)
|
|
160
|
+
def test_skill_cross_references_resolve(path: Path) -> None:
|
|
161
|
+
relative_path = path.relative_to(REPOSITORY_ROOT)
|
|
162
|
+
text = path.read_text(encoding="utf-8")
|
|
163
|
+
|
|
164
|
+
missing = sorted(
|
|
165
|
+
{
|
|
166
|
+
reference
|
|
167
|
+
for reference in SKILL_CROSS_REFERENCE.findall(text)
|
|
168
|
+
if not (SKILL_ROOT / reference).is_file()
|
|
169
|
+
}
|
|
170
|
+
)
|
|
171
|
+
|
|
172
|
+
assert not missing, f"{relative_path} references skills that are not shipped: {missing}"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/mainsequence/cli/code_repository_status.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/mainsequence/client/agent_runtime_models.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/mainsequence/client/compute_validation.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/mainsequence/client/metatables/__init__.py
RENAMED
|
File without changes
|
{mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/mainsequence/client/metatables/core.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/mainsequence/code_repository_context.py
RENAMED
|
File without changes
|
{mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/mainsequence/code_repository_skills.py
RENAMED
|
File without changes
|
|
File without changes
|
{mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/mainsequence/instrumentation/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/mainsequence/meta_tables/compiled_sql/v1.py
RENAMED
|
File without changes
|
{mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/mainsequence/meta_tables/future_registry.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/mainsequence/meta_tables/migrations/alembic.py
RENAMED
|
File without changes
|
{mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/mainsequence/meta_tables/migrations/env.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/mainsequence/meta_tables/pydantic_metadata.py
RENAMED
|
File without changes
|
{mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/mainsequence/meta_tables/schema_names.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/mainsequence/repository_identity_security.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/mainsequence.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
{mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/mainsequence.egg-info/entry_points.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/tests/test_canonical_api_route_contract.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/tests/test_code_repository_branch_contract.py
RENAMED
|
File without changes
|
{mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/tests/test_code_repository_runtime_context.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/tests/test_duckdb_interface_dimensions.py
RENAMED
|
File without changes
|
{mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/tests/test_environment_resource_context.py
RENAMED
|
File without changes
|
{mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/tests/test_environment_response_contracts.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/tests/test_meta_tables_client_models.py
RENAMED
|
File without changes
|
{mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/tests/test_meta_tables_sqlalchemy_contracts.py
RENAMED
|
File without changes
|
{mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/tests/test_models_user_request_bound_auth.py
RENAMED
|
File without changes
|
{mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/tests/test_notification_uid_contract.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/tests/test_source_table_configuration.py
RENAMED
|
File without changes
|
{mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/tests/test_sqlite_interface_dimensions.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/tests/test_time_index_table_update_flow.py
RENAMED
|
File without changes
|
{mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/tests/test_time_index_table_update_hard_cut.py
RENAMED
|
File without changes
|
{mainsequence-8.1.20.dev3 → mainsequence-8.1.20.dev4}/tests/test_update_runner_uid_runtime.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|