mainsequence 8.1.22.dev21__tar.gz → 8.1.22.dev23__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.22.dev21/mainsequence.egg-info → mainsequence-8.1.22.dev23}/PKG-INFO +1 -1
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/agent_scaffold/skills/application_surfaces/api_surfaces/SKILL.md +71 -12
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23/mainsequence.egg-info}/PKG-INFO +1 -1
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/pyproject.toml +1 -1
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/LICENSE +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/MANIFEST.in +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/README.md +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/agent_scaffold/AGENTS.md +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/agent_scaffold/skills/a2a_sdk_execution/SKILL.md +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/agent_scaffold/skills/data_access/exploration/SKILL.md +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/agent_scaffold/skills/data_publishing/meta_table_migrations/SKILL.md +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/agent_scaffold/skills/data_publishing/meta_tables/SKILL.md +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/agent_scaffold/skills/data_publishing/time_index_table_updates/SKILL.md +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/agent_scaffold/skills/maintenance/bug_auditor/SKILL.md +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/agent_scaffold/skills/maintenance/code_repository_maintenance/SKILL.md +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/agent_scaffold/skills/platform_operations/access_control_and_sharing/SKILL.md +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/agent_scaffold/skills/platform_operations/orchestration_and_releases/SKILL.md +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/agent_scaffold/skills/sdk_code_repository_execution/SKILL.md +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/mainsequence/__init__.py +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/mainsequence/__main__.py +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/mainsequence/bootstrap.py +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/mainsequence/cli/__init__.py +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/mainsequence/cli/api.py +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/mainsequence/cli/browser_auth.py +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/mainsequence/cli/cli.py +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/mainsequence/cli/code_repository_status.py +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/mainsequence/cli/config.py +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/mainsequence/cli/docker_utils.py +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/mainsequence/cli/doctor.py +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/mainsequence/cli/local_ops.py +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/mainsequence/cli/migrations.py +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/mainsequence/cli/model_filters.py +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/mainsequence/cli/pydantic_cli.py +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/mainsequence/cli/sdk_utils.py +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/mainsequence/cli/ssh_utils.py +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/mainsequence/cli/ui.py +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/mainsequence/client/__init__.py +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/mainsequence/client/agent_runtime_models.py +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/mainsequence/client/base.py +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/mainsequence/client/client.py +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/mainsequence/client/compute_validation.py +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/mainsequence/client/data_sources_interfaces/__init__.py +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/mainsequence/client/data_sources_interfaces/duckdb.py +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/mainsequence/client/data_sources_interfaces/local_paths.py +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/mainsequence/client/data_sources_interfaces/sqlite.py +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/mainsequence/client/dtype_codec.py +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/mainsequence/client/exceptions.py +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/mainsequence/client/github_issues.py +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/mainsequence/client/metatables/__init__.py +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/mainsequence/client/metatables/core.py +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/mainsequence/client/models_foundry.py +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/mainsequence/client/models_helpers.py +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/mainsequence/client/models_user.py +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/mainsequence/client/observability.py +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/mainsequence/client/utils.py +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/mainsequence/client/value_sets.py +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/mainsequence/code_repository_context.py +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/mainsequence/code_repository_skills.py +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/mainsequence/defaults.py +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/mainsequence/instrumentation/__init__.py +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/mainsequence/instrumentation/utils.py +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/mainsequence/logconf.py +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/mainsequence/meta_tables/__init__.py +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/mainsequence/meta_tables/__main__.py +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/mainsequence/meta_tables/compiled_sql/__init__.py +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/mainsequence/meta_tables/compiled_sql/v1.py +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/mainsequence/meta_tables/future_registry.py +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/mainsequence/meta_tables/hashing.py +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/mainsequence/meta_tables/migrations/__init__.py +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/mainsequence/meta_tables/migrations/alembic.py +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/mainsequence/meta_tables/migrations/env.py +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/mainsequence/meta_tables/migrations/provider.py +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/mainsequence/meta_tables/migrations/registry.py +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/mainsequence/meta_tables/migrations/scaffold.py +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/mainsequence/meta_tables/migrations/templates/__init__.py +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/mainsequence/meta_tables/migrations/templates/env.py.mako +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/mainsequence/meta_tables/migrations/templates/script.py.mako +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/mainsequence/meta_tables/pydantic_metadata.py +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/mainsequence/meta_tables/schema_names.py +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/mainsequence/meta_tables/sqlalchemy_contracts.py +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/mainsequence/meta_tables/time_index_table_refs.py +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/mainsequence/meta_tables/time_index_table_updates/__init__.py +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/mainsequence/meta_tables/time_index_table_updates/configuration.py +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/mainsequence/meta_tables/time_index_table_updates/dependencies.py +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/mainsequence/meta_tables/time_index_table_updates/managers.py +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/mainsequence/meta_tables/time_index_table_updates/namespacing.py +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/mainsequence/meta_tables/time_index_table_updates/runner.py +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/mainsequence/meta_tables/time_index_table_updates/updaters.py +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/mainsequence/meta_tables/time_index_table_updates/utils.py +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/mainsequence/repository_identity_security.py +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/mainsequence/runtime_flags.py +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/mainsequence/scaffold_skills.py +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/mainsequence.egg-info/SOURCES.txt +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/mainsequence.egg-info/dependency_links.txt +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/mainsequence.egg-info/entry_points.txt +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/mainsequence.egg-info/requires.txt +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/mainsequence.egg-info/top_level.txt +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/setup.cfg +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/tests/fixtures/time_index_table_update_hash_v2_golden.json +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/tests/test_auth_precedence.py +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/tests/test_canonical_api_route_contract.py +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/tests/test_cli.py +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/tests/test_cli_browser_auth.py +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/tests/test_cli_migrations.py +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/tests/test_client.py +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/tests/test_code_repository_batch_jobs_from_file.py +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/tests/test_code_repository_branch_contract.py +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/tests/test_code_repository_documentation_contract.py +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/tests/test_code_repository_runtime_context.py +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/tests/test_code_repository_skills.py +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/tests/test_dependency_extras.py +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/tests/test_dev_release_version.py +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/tests/test_duckdb_interface_dimensions.py +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/tests/test_environment_resource_context.py +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/tests/test_environment_response_contracts.py +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/tests/test_filter_normalization.py +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/tests/test_github_issues_client.py +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/tests/test_instrumentation.py +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/tests/test_local_ops.py +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/tests/test_logconf.py +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/tests/test_meta_table_migrations.py +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/tests/test_meta_tables_client_models.py +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/tests/test_meta_tables_sqlalchemy_contracts.py +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/tests/test_models_user_request_bound_auth.py +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/tests/test_notification_uid_contract.py +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/tests/test_observability_client.py +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/tests/test_pod_project_resolution.py +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/tests/test_scaffold_skills.py +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/tests/test_schema_names.py +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/tests/test_secret_client_model.py +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/tests/test_source_table_configuration.py +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/tests/test_sqlite_interface_dimensions.py +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/tests/test_ssh_utils.py +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/tests/test_time_index_table_access_dimension_audit.py +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/tests/test_time_index_table_dimension_queries.py +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/tests/test_time_index_table_update_configuration.py +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/tests/test_time_index_table_update_configuration_client.py +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/tests/test_time_index_table_update_flow.py +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/tests/test_time_index_table_update_hard_cut.py +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/tests/test_tolerant_response_reading.py +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/tests/test_tolerant_value_sets.py +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/tests/test_update_runner_uid_runtime.py +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/tests/test_update_statistics.py +0 -0
- {mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/tests/test_update_uid_guards.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: mainsequence-command-center-fastapi
|
|
3
|
-
description: Build, contract-test, release, and verify a FastAPI code repository resource
|
|
3
|
+
description: Build, contract-test, release, and verify a FastAPI code repository resource serving the Command Center frontend, including applications with public OAuth callback or webhook routes. Use when implementing a Command Center wire contract, declaring exact public ingress, or validating the deployed API.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Command Center FastAPI Release Lifecycle
|
|
@@ -92,7 +92,7 @@ Record:
|
|
|
92
92
|
- whether the API uses backend transport or a contract-defined direct
|
|
93
93
|
development transport
|
|
94
94
|
|
|
95
|
-
FastAPI
|
|
95
|
+
Authenticated FastAPI routes receive the human caller from the Main Sequence
|
|
96
96
|
platform through injected request state. No SDK authentication setup is
|
|
97
97
|
required in repository code:
|
|
98
98
|
|
|
@@ -111,21 +111,74 @@ def get_me(request: Request) -> dict[str, str | None]:
|
|
|
111
111
|
}
|
|
112
112
|
```
|
|
113
113
|
|
|
114
|
-
|
|
115
|
-
authentication headers, or resolve the request user itself. Consume
|
|
114
|
+
Protected route code must not detect local versus deployed execution, parse
|
|
115
|
+
authentication headers, or resolve the request user itself. Consume the
|
|
116
116
|
platform-injected human caller identity:
|
|
117
117
|
|
|
118
118
|
- `request.state.user` contains canonical `uid` and optional `username`
|
|
119
119
|
- `request.state.user_uid` is the canonical public user UUID
|
|
120
120
|
- `request.state.user_id` does not exist
|
|
121
121
|
|
|
122
|
-
|
|
123
|
-
release creator, deployment owner, runtime workload
|
|
124
|
-
target. Pass request state explicitly to shared services;
|
|
125
|
-
`User.get_logged_user()` as a FastAPI entry point. Platform-injected identity is
|
|
122
|
+
On a protected route, this identity is the human making the current HTTP
|
|
123
|
+
request. It is not the release creator, deployment owner, runtime workload
|
|
124
|
+
principal, or runtime target. Pass request state explicitly to shared services;
|
|
125
|
+
do not use `User.get_logged_user()` as a FastAPI entry point. Platform-injected identity is
|
|
126
126
|
not resource authorization; use `request.state.user_uid` when applying the
|
|
127
127
|
endpoint's authorization policy.
|
|
128
128
|
|
|
129
|
+
### Public provider callbacks and webhooks
|
|
130
|
+
|
|
131
|
+
An external OAuth redirect or webhook cannot supply a Main Sequence Bearer token.
|
|
132
|
+
For a FastAPI release that needs one, use the platform's exact `public_ingress`
|
|
133
|
+
policy. CORS configuration and an app-declared route alone do not make a path
|
|
134
|
+
public. Ordinary routes remain Bearer authenticated.
|
|
135
|
+
|
|
136
|
+
1. Implement the provider handler in the FastAPI app loaded by the workflow's
|
|
137
|
+
`source_path`. Declare only its exact `GET` or `POST` method and literal
|
|
138
|
+
root-relative path under the `kind: fastapi` resource's
|
|
139
|
+
`spec.public_ingress`. The policy is not inferred from decorators or OpenAPI.
|
|
140
|
+
Do not include query strings, route parameters, wildcards, or a hostname.
|
|
141
|
+
The default empty list exposes no public paths. In a validated workflow
|
|
142
|
+
resource, the declaration has this shape:
|
|
143
|
+
|
|
144
|
+
```yaml
|
|
145
|
+
kind: fastapi
|
|
146
|
+
spec:
|
|
147
|
+
source_path: api/provider/main.py
|
|
148
|
+
public_ingress:
|
|
149
|
+
- method: GET
|
|
150
|
+
path: /integrations/provider/oauth/callback/
|
|
151
|
+
- method: POST
|
|
152
|
+
path: /integrations/provider/webhook/
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
2. Fetch the exact CodeRepositoryBranch's current workflow template; use its
|
|
156
|
+
advertised version and fields. Validate the proposed workflow file through
|
|
157
|
+
the branch's `validate-workflow` action, then commit the handler and workflow
|
|
158
|
+
file and push the intended branch. Do not set the reserved
|
|
159
|
+
`FASTAPI_PUBLIC_INGRESS` environment value yourself.
|
|
160
|
+
3. Follow the repository event and DeploymentRun to a ready active revision.
|
|
161
|
+
A validated file or successful push is not proof of public admission. Read
|
|
162
|
+
`resource_release.get` and confirm the pair appears in both desired
|
|
163
|
+
`public_ingress` and active `effective_public_ingress`. Only then append the
|
|
164
|
+
declared path to the backend-returned `public_url` and register that full
|
|
165
|
+
callback or webhook URI with the provider. Do not construct a hostname.
|
|
166
|
+
4. Send a provider-style request without a Main Sequence Bearer token to the
|
|
167
|
+
exact public pair. Check that an unlisted path or wrong method is denied.
|
|
168
|
+
An admitted request has `request.state.user` and `user_uid` set to `None`
|
|
169
|
+
and `request.state.auth_outcome == "public_ingress"`. The handler must verify
|
|
170
|
+
OAuth state and exchange codes, or verify the webhook signature against the
|
|
171
|
+
original body and reject replays. Public admission supplies no User or
|
|
172
|
+
provider identity. Keep provider secrets and live codes out of workflow YAML,
|
|
173
|
+
logs, and test evidence.
|
|
174
|
+
|
|
175
|
+
An existing release can change its desired policy through the canonical
|
|
176
|
+
`resource_release.update` operation. Adding a pair still requires a later ready
|
|
177
|
+
revision containing the route before it becomes public. Removing a desired pair
|
|
178
|
+
denies it immediately. The platform skill
|
|
179
|
+
`mainsequence://platform/skills/code-repository-workflows` owns the detailed
|
|
180
|
+
automatic deployment procedure and current workflow shape.
|
|
181
|
+
|
|
129
182
|
### 2. Implement the provider
|
|
130
183
|
|
|
131
184
|
Keep Command Center contract-bearing route code focused on transport and
|
|
@@ -203,6 +256,7 @@ Verify that:
|
|
|
203
256
|
- resource discovery found that path at the exact deployed commit
|
|
204
257
|
- Django resolved and built the exact image for the workflow event
|
|
205
258
|
- the resulting release kind is `fastapi`
|
|
259
|
+
- any declared `public_ingress` pair matches a mounted FastAPI handler
|
|
206
260
|
- compute and spot settings are intentional
|
|
207
261
|
|
|
208
262
|
Enable automatic deployment in the repository workflow when the route paths,
|
|
@@ -211,11 +265,13 @@ events to promote exact images.
|
|
|
211
265
|
|
|
212
266
|
### 6. Verify the deployed API
|
|
213
267
|
|
|
214
|
-
Request runtime access for the deployed FastAPI
|
|
215
|
-
Django and wait for Django's ready result. Use the
|
|
216
|
-
|
|
268
|
+
Request runtime access for protected routes on the deployed FastAPI
|
|
269
|
+
`ResourceRelease` through Django and wait for Django's ready result. Use the
|
|
270
|
+
returned access bundle for authenticated checks. For declared public routes,
|
|
271
|
+
use the provider URI without a Main Sequence Bearer token:
|
|
217
272
|
|
|
218
|
-
1. verify authentication
|
|
273
|
+
1. verify protected-route authentication and, when configured, exact
|
|
274
|
+
unauthenticated public-ingress method/path behavior
|
|
219
275
|
2. execute representative contract-bearing requests
|
|
220
276
|
3. validate returned JSON against the same repository-pinned schemas
|
|
221
277
|
4. exercise the consuming Command Center frontend flow
|
|
@@ -235,6 +291,9 @@ Report:
|
|
|
235
291
|
- Git commit, code repository image UID, code repository resource UID, and release identity
|
|
236
292
|
- deployed contract validation and Command Center frontend result
|
|
237
293
|
- whether automatic deployment is enabled and why
|
|
294
|
+
- for public provider routes, the declared method/path pairs, observed
|
|
295
|
+
`effective_public_ingress`, backend-returned provider URI, and unauthenticated
|
|
296
|
+
positive and negative request results
|
|
238
297
|
|
|
239
298
|
The Command Center-facing release is complete only when the frontend consumes
|
|
240
299
|
the deployed contract-bearing responses and they pass the contracts from the
|
|
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
|
|
File without changes
|
|
File without changes
|
{mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/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.22.dev21 → mainsequence-8.1.22.dev23}/mainsequence/client/agent_runtime_models.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/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
|
{mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/mainsequence/client/github_issues.py
RENAMED
|
File without changes
|
{mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/mainsequence/client/metatables/__init__.py
RENAMED
|
File without changes
|
{mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/mainsequence/client/metatables/core.py
RENAMED
|
File without changes
|
{mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/mainsequence/client/models_foundry.py
RENAMED
|
File without changes
|
{mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/mainsequence/client/models_helpers.py
RENAMED
|
File without changes
|
|
File without changes
|
{mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/mainsequence/client/observability.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/mainsequence/code_repository_context.py
RENAMED
|
File without changes
|
{mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/mainsequence/code_repository_skills.py
RENAMED
|
File without changes
|
|
File without changes
|
{mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/mainsequence/instrumentation/__init__.py
RENAMED
|
File without changes
|
{mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/mainsequence/instrumentation/utils.py
RENAMED
|
File without changes
|
|
File without changes
|
{mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/mainsequence/meta_tables/__init__.py
RENAMED
|
File without changes
|
{mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/mainsequence/meta_tables/__main__.py
RENAMED
|
File without changes
|
|
File without changes
|
{mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/mainsequence/meta_tables/compiled_sql/v1.py
RENAMED
|
File without changes
|
{mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/mainsequence/meta_tables/future_registry.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/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
|
|
File without changes
|
{mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/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.22.dev21 → mainsequence-8.1.22.dev23}/mainsequence/repository_identity_security.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/mainsequence.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
{mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/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.22.dev21 → mainsequence-8.1.22.dev23}/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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/tests/test_code_repository_skills.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/tests/test_duckdb_interface_dimensions.py
RENAMED
|
File without changes
|
{mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/tests/test_environment_resource_context.py
RENAMED
|
File without changes
|
{mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/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.22.dev21 → mainsequence-8.1.22.dev23}/tests/test_meta_tables_client_models.py
RENAMED
|
File without changes
|
|
File without changes
|
{mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/tests/test_models_user_request_bound_auth.py
RENAMED
|
File without changes
|
{mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/tests/test_notification_uid_contract.py
RENAMED
|
File without changes
|
|
File without changes
|
{mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/tests/test_pod_project_resolution.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/tests/test_source_table_configuration.py
RENAMED
|
File without changes
|
{mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/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.22.dev21 → mainsequence-8.1.22.dev23}/tests/test_time_index_table_update_flow.py
RENAMED
|
File without changes
|
|
File without changes
|
{mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/tests/test_tolerant_response_reading.py
RENAMED
|
File without changes
|
|
File without changes
|
{mainsequence-8.1.22.dev21 → mainsequence-8.1.22.dev23}/tests/test_update_runner_uid_runtime.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|