Skip to content

feat(storage): route quarantined data to a dedicated root prefix (BLDX-1644) - #3664

Draft
hariharanatlan wants to merge 1 commit into
mainfrom
feat/quarantined-storage
Draft

hariharanatlan wants to merge 1 commit into
mainfrom
feat/quarantined-storage

Conversation

@hariharanatlan

Copy link
Copy Markdown
Contributor

Implements the storage standard agreed in the platform design discussion on raw-context asks (Slack thread) — BLDX-1644.

Why

Connectors have started downloading raw files straight from the source system into object storage so downstream apps can read the original artifact rather than the metadata extracted from it. Tableau (REQ-1635) and PowerBI (REQ-1636) do this today; more ECL use-cases are expected to need raw source context.

Raw source files are a different kind of data from anything the SDK previously stored. A connector's own artifacts are metadata it produced; a raw source file is content the customer authored, and it routinely carries warehouse hostnames, database and schema references, usernames, authoring filesystem paths, and literal filter values. Inspecting each file to decide how sensitive it is does not scale and fails open on the first shape nobody predicted.

The existing tiers were designed for apps consuming files internally. Without a standard, each connector picks its own prefix — that is already happening — and every such choice is a governance decision made by whoever wrote the upload call.

What

A quarantined boolean, orthogonal to StorageTier, that roots a tier's ordinary prefix under QUARANTINE_PREFIX (default quarantine, settable via ATLAN_QUARANTINE_PREFIX).

Tier Default quarantined=True
TRANSIENT file_refs/… quarantine/file_refs/…
RETAINED artifacts/apps/{app}/workflows/{wf}/{run}/… quarantine/artifacts/apps/{app}/workflows/{wf}/{run}/…
PERSISTENT persistent-artifacts/apps/{app}/… quarantine/persistent-artifacts/apps/{app}/…

Following the thread's four conclusions:

  1. A parameter, not a new tier. Tier is lifecycle; quarantine is kind of data. They are independent, so raw content can legitimately be transient, retained, or persistent. A fourth tier would force every quarantined object to share one lifecycle.
  2. Sensitive by default, no content inspection. An app declares the write is raw source content; it does not classify what is inside.
  3. One root, per-tier sub-prefixes beneath it. Each tier gets its own default location under a single root, so one access/retention policy covers everything. Prepending rather than inventing a flat layout is deliberate — run-scoping, app-scoping and per-tier cleanup keep working unchanged.
  4. Opt-in. Defaults to False everywhere; no existing key moves.

StorageTier stays the single source of truth for path generation, so every caller inherits the routing.

Two correctness details worth reviewing

  • PROTECTED_STORAGE_PREFIXES gains quarantine/persistent-artifacts/. It does not start with persistent-artifacts/, so without its own entry, cleanup would delete quarantined persistent data that the unquarantined tier protects.
  • cleanup_storage sweeps the quarantined run prefix alongside the ordinary one. build_output_path() returns only the unquarantined prefix, so quarantined RETAINED data would otherwise survive a cleanup its unquarantined equivalent clears — the wrong default for sensitive bytes.

One deliberate restriction

UploadInput rejects quarantined=True combined with an explicit storage_path. An explicit key is used verbatim and bypasses tier resolution, so the pair reads as "quarantine this" while writing an ordinary key — the exact silent failure the flag exists to prevent. storage_subdir is the supported way to place files within the resolved prefix, and it is also the shape the first consumer needs (moving off a hand-picked verbatim key onto tier mode).

Out of scope — named, not hidden

  • The blob-storage proxy allowlist must add the quarantine root. The proxy allowlists writable top-level prefixes and rejects anything else with 403 (code 1009); today it admits artifacts/ and persistent-artifacts/ (see application_sdk/storage/preflight.py). Until that entry exists, quarantined writes succeed against a deployment-owned store but fail against the upstream store. ATLAN_QUARANTINE_PREFIX is env-settable so a deployment can align the root without an SDK release.
  • The actual security guarantee — restricted IAM, encryption, org retention on the root — is platform work. Quarantine is a location and a routing guarantee, not redaction: the bytes still exist at rest, so a raw payload containing live credentials should not be stored at all.

This is the contract-now / platform-later split proposed in the thread: the contract lands fast and unblocks the two connector consumers, the infrastructure trails.

Known tradeoff

Opt-in is fail-open. A new raw-from-source write lands in an ordinary prefix if its author does not set the flag. Opt-in was chosen deliberately — default-on would relocate every existing connector's artifacts, a breaking change no consumer asked for. A conformance rule flagging un-quarantined source-download writes is the natural follow-up once adoption exists. Recorded under Consequences in the ADR rather than left implicit.

Testing

  • uv run pytest tests/unit → 9823 passed, 0 failed, 9 skipped. This is the load-bearing assertion: every pre-existing test passes untouched, so no object-store key changed and the flag really is opt-in.
  • 26 new tests: per-tier routing with the flag on and off, the opt-in guarantee asserted explicitly, _file_ref_base quarantining as a pure prefix, RETAINED still requiring a run prefix, round-trip through model_dump, payloads written before the field existed still deserialising, the UploadInput guard, the flag reaching the returned ref on all three upload branches (including the cross-pod deployment-store fallback), persisted/materialised refs, and all three cleanup behaviours.
  • ruff check + ruff format clean; pyright 0 errors (11 pre-existing warnings on untouched lines).
  • uv run poe regen-capabilities run; manifest committed.

uv run pre-commit run --all-files could not complete locally — a hook's Go toolchain fails to parse its own go.mod (invalid go version '1.25.0'). It fails identically on an untouched file, so it is a pre-existing local environment issue, not this change; the Python hooks were run directly instead.

Adoption

A connector already on App.upload moves from a verbatim key to tier= + quarantined=True + storage_subdir=. Tableau is the first consumer once a release ships.

Docs: ADR-0021, docs/concepts/storage.md, docs/concepts/file-reference.md, docs/configuration.md.

🤖 Generated with Claude Code

Connectors have started downloading raw files straight from the source
system into object storage. Raw source content carries warehouse
hostnames, schema references, usernames, authoring filesystem paths and
literal filter values, so it has a materially different security posture
from the metadata artifacts the storage tiers were designed for.

Add a `quarantined` boolean, orthogonal to StorageTier, that roots a
tier's ordinary prefix under QUARANTINE_PREFIX (default `quarantine`,
settable via ATLAN_QUARANTINE_PREFIX). Tier stays lifecycle-only, so
quarantined data still exists at all three lifecycles and each tier gets
its own default location beneath one root — a single access/retention
policy can then cover every quarantined object.

Prepending rather than inventing a flat layout keeps run-scoping,
app-scoping and per-tier cleanup working unchanged.

Opt-in: defaults to False everywhere, so every existing storage key is
unchanged and no connector is relocated.

Two correctness details:

- PROTECTED_STORAGE_PREFIXES gains `quarantine/persistent-artifacts/`,
  which does not start with `persistent-artifacts/` and would otherwise
  be unprotected from cleanup.
- cleanup_storage sweeps the quarantined run prefix alongside the
  ordinary one, so an explicit run cleanup does not leave sensitive
  bytes behind.

UploadInput rejects `quarantined=True` combined with an explicit
storage_path: the explicit key is used verbatim and bypasses tier
resolution, so the pair would silently write a non-quarantined key.
storage_subdir is the supported way to place files within the prefix.

Quarantine is a location and a routing guarantee, not redaction — the
restricted IAM, encryption and retention that make the root meaningfully
secure are provisioned outside the SDK. Atlan's blob-storage proxy also
allowlists writable top-level prefixes, so the quarantine root must be
added there before quarantined writes can reach the upstream store.

See ADR-0021.
@linear

linear Bot commented Sep 4, 2026

Copy link
Copy Markdown

BLDX-1644

@github-actions

github-actions Bot commented Sep 4, 2026

Copy link
Copy Markdown
Contributor

📜 Docstring Coverage Report

RESULT: PASSED (minimum: 30.0%, actual: 81.1%)

Detailed Coverage Report
======= Coverage for /home/runner/work/application-sdk/application-sdk/ ========
----------------------------------- Summary ------------------------------------
| Name                                                                                           | Total |  Miss | Cover | Cover% |
|------------------------------------------------------------------------------------------------|-------|-------|-------|--------|
| .claude/skills/capability-manifest/references/extractor.py                                     |    31 |     2 |    29 |    94% |
| application_sdk/__init__.py                                                                    |     1 |     0 |     1 |   100% |
| application_sdk/_discovery_errors.py                                                           |     7 |     0 |     7 |   100% |
| application_sdk/constants.py                                                                   |     5 |     2 |     3 |    60% |
| application_sdk/discovery.py                                                                   |    12 |     3 |     9 |    75% |
| application_sdk/main.py                                                                        |    42 |    10 |    32 |    76% |
| application_sdk/main_errors.py                                                                 |     5 |     0 |     5 |   100% |
| application_sdk/version.py                                                                     |     1 |     0 |     1 |   100% |
| application_sdk/_runtime/__init__.py                                                           |     1 |     0 |     1 |   100% |
| application_sdk/_runtime/offload.py                                                            |    11 |     1 |    10 |    91% |
| application_sdk/_runtime/progress.py                                                           |    32 |     2 |    30 |    94% |
| application_sdk/app/__init__.py                                                                |     1 |     0 |     1 |   100% |
| application_sdk/app/_artifact_schema_guard.py                                                  |     8 |     0 |     8 |   100% |
| application_sdk/app/_ep_registration.py                                                        |     6 |     0 |     6 |   100% |
| application_sdk/app/base.py                                                                    |    81 |    19 |    62 |    77% |
| application_sdk/app/base_errors.py                                                             |     6 |     0 |     6 |   100% |
| application_sdk/app/client.py                                                                  |     1 |     0 |     1 |   100% |
| application_sdk/app/context.py                                                                 |    40 |     2 |    38 |    95% |
| application_sdk/app/entrypoint.py                                                              |    21 |     5 |    16 |    76% |
| application_sdk/app/registry.py                                                                |    40 |    11 |    29 |    72% |
| application_sdk/app/task.py                                                                    |    17 |     6 |    11 |    65% |
| application_sdk/clients/__init__.py                                                            |     2 |     1 |     1 |    50% |
| application_sdk/clients/_interface.py                                                          |     4 |     1 |     3 |    75% |
| application_sdk/clients/base.py                                                                |     6 |     1 |     5 |    83% |
| application_sdk/clients/models.py                                                              |     2 |     0 |     2 |   100% |
| application_sdk/clients/redis.py                                                               |    27 |     0 |    27 |   100% |
| application_sdk/clients/redis_errors.py                                                        |     5 |     0 |     5 |   100% |
| application_sdk/clients/sql.py                                                                 |    23 |     1 |    22 |    96% |
| application_sdk/clients/sql_errors.py                                                          |    11 |     0 |    11 |   100% |
| application_sdk/clients/sql_typecasters.py                                                     |    14 |     4 |    10 |    71% |
| application_sdk/clients/ssl_utils.py                                                           |     8 |     0 |     8 |   100% |
| application_sdk/clients/azure/__init__.py                                                      |     1 |     0 |     1 |   100% |
| application_sdk/clients/azure/auth.py                                                          |     7 |     0 |     7 |   100% |
| application_sdk/clients/azure/azure_errors.py                                                  |     8 |     0 |     8 |   100% |
| application_sdk/clients/azure/client.py                                                        |    13 |     0 |    13 |   100% |
| application_sdk/common/__init__.py                                                             |     1 |     0 |     1 |   100% |
| application_sdk/common/_env.py                                                                 |     2 |     0 |     2 |   100% |
| application_sdk/common/_listing.py                                                             |     6 |     0 |     6 |   100% |
| application_sdk/common/atomic.py                                                               |    13 |     0 |    13 |   100% |
| application_sdk/common/aws_utils.py                                                            |    10 |     1 |     9 |    90% |
| application_sdk/common/aws_utils_errors.py                                                     |     7 |     0 |     7 |   100% |
| application_sdk/common/concurrency.py                                                          |     3 |     0 |     3 |   100% |
| application_sdk/common/dispatch.py                                                             |     3 |     0 |     3 |   100% |
| application_sdk/common/env_warnings.py                                                         |     2 |     0 |     2 |   100% |
| application_sdk/common/error_codes.py                                                          |    15 |     3 |    12 |    80% |
| application_sdk/common/errors.py                                                               |     7 |     0 |     7 |   100% |
| application_sdk/common/file_converter.py                                                       |     9 |     5 |     4 |    44% |
| application_sdk/common/file_ops.py                                                             |    16 |     1 |    15 |    94% |
| application_sdk/common/filter_matching.py                                                      |     9 |     3 |     6 |    67% |
| application_sdk/common/models.py                                                               |     4 |     2 |     2 |    50% |
| application_sdk/common/path.py                                                                 |     2 |     1 |     1 |    50% |
| application_sdk/common/spillable_dict.py                                                       |    17 |    11 |     6 |    35% |
| application_sdk/common/sql_filters.py                                                          |    14 |     2 |    12 |    86% |
| application_sdk/common/sql_filters_errors.py                                                   |     2 |     0 |     2 |   100% |
| application_sdk/common/task_queue.py                                                           |    10 |     0 |    10 |   100% |
| application_sdk/common/transforms.py                                                           |     5 |     0 |     5 |   100% |
| application_sdk/common/types.py                                                                |     2 |     0 |     2 |   100% |
| application_sdk/common/utils.py                                                                |     2 |     0 |     2 |   100% |
| application_sdk/common/incremental/__init__.py                                                 |     3 |     0 |     3 |   100% |
| application_sdk/common/incremental/helpers.py                                                  |    11 |     0 |    11 |   100% |
| application_sdk/common/incremental/incremental_errors.py                                       |    11 |     0 |    11 |   100% |
| application_sdk/common/incremental/marker.py                                                   |     5 |     0 |     5 |   100% |
| application_sdk/common/incremental/models.py                                                   |    10 |     0 |    10 |   100% |
| application_sdk/common/incremental/column_extraction/__init__.py                               |     1 |     0 |     1 |   100% |
| application_sdk/common/incremental/column_extraction/analysis.py                               |     3 |     0 |     3 |   100% |
| application_sdk/common/incremental/column_extraction/backfill.py                               |     3 |     0 |     3 |   100% |
| application_sdk/common/incremental/state/__init__.py                                           |     1 |     1 |     0 |     0% |
| application_sdk/common/incremental/state/incremental_diff.py                                   |     8 |     0 |     8 |   100% |
| application_sdk/common/incremental/state/state_reader.py                                       |     2 |     0 |     2 |   100% |
| application_sdk/common/incremental/state/state_writer.py                                       |    10 |     0 |    10 |   100% |
| application_sdk/common/incremental/state/table_scope.py                                        |     8 |     0 |     8 |   100% |
| application_sdk/common/incremental/storage/__init__.py                                         |     1 |     1 |     0 |     0% |
| application_sdk/common/incremental/storage/duckdb_utils.py                                     |    12 |     2 |    10 |    83% |
| application_sdk/common/incremental/storage/rocksdb_utils.py                                    |     3 |     0 |     3 |   100% |
| application_sdk/contracts/__init__.py                                                          |     1 |     0 |     1 |   100% |
| application_sdk/contracts/base.py                                                              |    37 |     7 |    30 |    81% |
| application_sdk/contracts/cleanup.py                                                           |     5 |     0 |     5 |   100% |
| application_sdk/contracts/compat.py                                                            |     9 |     1 |     8 |    89% |
| application_sdk/contracts/events.py                                                            |    12 |     0 |    12 |   100% |
| application_sdk/contracts/storage.py                                                           |     7 |     2 |     5 |    71% |
| application_sdk/contracts/types.py                                                             |    16 |     0 |    16 |   100% |
| application_sdk/contracts/types_errors.py                                                      |     2 |     0 |     2 |   100% |
| application_sdk/credentials/__init__.py                                                        |     1 |     0 |     1 |   100% |
| application_sdk/credentials/agent.py                                                           |    13 |     3 |    10 |    77% |
| application_sdk/credentials/atlan.py                                                           |    12 |     6 |     6 |    50% |
| application_sdk/credentials/atlan_client.py                                                    |     6 |     0 |     6 |   100% |
| application_sdk/credentials/errors.py                                                          |    20 |    12 |     8 |    40% |
| application_sdk/credentials/git.py                                                             |     9 |     6 |     3 |    33% |
| application_sdk/credentials/ingress.py                                                         |     8 |     0 |     8 |   100% |
| application_sdk/credentials/oauth.py                                                           |    13 |     2 |    11 |    85% |
| application_sdk/credentials/ref.py                                                             |    17 |     1 |    16 |    94% |
| application_sdk/credentials/registry.py                                                        |    11 |     3 |     8 |    73% |
| application_sdk/credentials/resolver.py                                                        |    11 |     4 |     7 |    64% |
| application_sdk/credentials/spec.py                                                            |     6 |     1 |     5 |    83% |
| application_sdk/credentials/types.py                                                           |    35 |    17 |    18 |    51% |
| application_sdk/credentials/utils.py                                                           |     4 |     1 |     3 |    75% |
| application_sdk/dev/__init__.py                                                                |     1 |     0 |     1 |   100% |
| application_sdk/dev/_dapr.py                                                                   |    11 |     2 |     9 |    82% |
| application_sdk/dev/_dapr_errors.py                                                            |     7 |     6 |     1 |    14% |
| application_sdk/dev/_embedded.py                                                               |     3 |     0 |     3 |   100% |
| application_sdk/errors/__init__.py                                                             |     4 |     1 |     3 |    75% |
| application_sdk/errors/base.py                                                                 |    11 |     2 |     9 |    82% |
| application_sdk/errors/categories.py                                                           |     3 |     0 |     3 |   100% |
| application_sdk/errors/leaves.py                                                               |    22 |     8 |    14 |    64% |
| application_sdk/errors/wire.py                                                                 |     4 |     1 |     3 |    75% |
| application_sdk/execution/__init__.py                                                          |     1 |     0 |     1 |   100% |
| application_sdk/execution/decorators.py                                                        |     3 |     2 |     1 |    33% |
| application_sdk/execution/errors.py                                                            |     2 |     0 |     2 |   100% |
| application_sdk/execution/heartbeat.py                                                         |    19 |     3 |    16 |    84% |
| application_sdk/execution/progress.py                                                          |     6 |     0 |     6 |   100% |
| application_sdk/execution/progress_telemetry.py                                                |     7 |     1 |     6 |    86% |
| application_sdk/execution/retry.py                                                             |     9 |     0 |     9 |   100% |
| application_sdk/execution/run_length.py                                                        |     7 |     1 |     6 |    86% |
| application_sdk/execution/sandbox.py                                                           |     4 |     0 |     4 |   100% |
| application_sdk/execution/settings.py                                                          |     9 |     2 |     7 |    78% |
| application_sdk/execution/shutdown.py                                                          |     4 |     0 |     4 |   100% |
| application_sdk/execution/_temporal/__init__.py                                                |     1 |     1 |     0 |     0% |
| application_sdk/execution/_temporal/_activity_errors.py                                        |     8 |     0 |     8 |   100% |
| application_sdk/execution/_temporal/_backend_errors.py                                         |     6 |     4 |     2 |    33% |
| application_sdk/execution/_temporal/_lock_errors.py                                            |     5 |     0 |     5 |   100% |
| application_sdk/execution/_temporal/activities.py                                              |    11 |     0 |    11 |   100% |
| application_sdk/execution/_temporal/activity_utils.py                                          |     6 |     0 |     6 |   100% |
| application_sdk/execution/_temporal/auth.py                                                    |    16 |     0 |    16 |   100% |
| application_sdk/execution/_temporal/backend.py                                                 |    16 |     1 |    15 |    94% |
| application_sdk/execution/_temporal/converter.py                                               |     3 |     0 |     3 |   100% |
| application_sdk/execution/_temporal/eviction_retry.py                                          |     3 |     0 |     3 |   100% |
| application_sdk/execution/_temporal/lock_activities.py                                         |     3 |     0 |     3 |   100% |
| application_sdk/execution/_temporal/poll_state.py                                              |     7 |     1 |     6 |    86% |
| application_sdk/execution/_temporal/preflight_gate.py                                          |    46 |     4 |    42 |    91% |
| application_sdk/execution/_temporal/preflight_persist.py                                       |    14 |     0 |    14 |   100% |
| application_sdk/execution/_temporal/sdr.py                                                     |    18 |     8 |    10 |    56% |
| application_sdk/execution/_temporal/worker.py                                                  |    17 |     6 |    11 |    65% |
| application_sdk/execution/_temporal/workflows.py                                               |     3 |     0 |     3 |   100% |
| application_sdk/execution/_temporal/interceptors/__init__.py                                   |     1 |     0 |     1 |   100% |
| application_sdk/execution/_temporal/interceptors/events.py                                     |    13 |     0 |    13 |   100% |
| application_sdk/execution/_temporal/interceptors/liveness.py                                   |    11 |     9 |     2 |    18% |
| application_sdk/execution/_temporal/interceptors/lock.py                                       |    10 |     2 |     8 |    80% |
| application_sdk/execution/_temporal/interceptors/log.py                                        |    22 |    12 |    10 |    45% |
| application_sdk/execution/_temporal/interceptors/metrics.py                                    |    18 |    15 |     3 |    17% |
| application_sdk/execution/_temporal/interceptors/outputs.py                                    |     9 |     0 |     9 |   100% |
| application_sdk/execution/_temporal/interceptors/sizing.py                                     |    10 |     6 |     4 |    40% |
| application_sdk/execution/_temporal/interceptors/trace.py                                      |     6 |     4 |     2 |    33% |
| application_sdk/handler/__init__.py                                                            |     1 |     0 |     1 |   100% |
| application_sdk/handler/base.py                                                                |    14 |     3 |    11 |    79% |
| application_sdk/handler/context.py                                                             |    18 |     5 |    13 |    72% |
| application_sdk/handler/contracts.py                                                           |    41 |     6 |    35 |    85% |
| application_sdk/handler/manifest.py                                                            |     5 |     0 |     5 |   100% |
| application_sdk/handler/service.py                                                             |    66 |    24 |    42 |    64% |
| application_sdk/handler/service_errors.py                                                      |     4 |     0 |     4 |   100% |
| application_sdk/infrastructure/__init__.py                                                     |     1 |     0 |     1 |   100% |
| application_sdk/infrastructure/_secret_utils.py                                                |     2 |     0 |     2 |   100% |
| application_sdk/infrastructure/bindings.py                                                     |    16 |     3 |    13 |    81% |
| application_sdk/infrastructure/capacity.py                                                     |    11 |     0 |    11 |   100% |
| application_sdk/infrastructure/context.py                                                      |     6 |     0 |     6 |   100% |
| application_sdk/infrastructure/credential_vault.py                                             |     7 |     3 |     4 |    57% |
| application_sdk/infrastructure/pubsub.py                                                       |    13 |     3 |    10 |    77% |
| application_sdk/infrastructure/secrets.py                                                      |    25 |     8 |    17 |    68% |
| application_sdk/infrastructure/state.py                                                        |    10 |     7 |     3 |    30% |
| application_sdk/infrastructure/_dapr/__init__.py                                               |     1 |     0 |     1 |   100% |
| application_sdk/infrastructure/_dapr/_dapr_errors.py                                           |     3 |     0 |     3 |   100% |
| application_sdk/infrastructure/_dapr/client.py                                                 |    31 |     4 |    27 |    87% |
| application_sdk/infrastructure/_dapr/credential_vault.py                                       |    18 |     7 |    11 |    61% |
| application_sdk/infrastructure/_dapr/http.py                                                   |    22 |    14 |     8 |    36% |
| application_sdk/infrastructure/_redis/__init__.py                                              |     1 |     0 |     1 |   100% |
| application_sdk/infrastructure/_redis/capacity.py                                              |     9 |     4 |     5 |    56% |
| application_sdk/observability/__init__.py                                                      |     1 |     1 |     0 |     0% |
| application_sdk/observability/_objectstore_metric_exporter.py                                  |    14 |     8 |     6 |    43% |
| application_sdk/observability/_objectstore_metric_reader.py                                    |     2 |     0 |     2 |   100% |
| application_sdk/observability/_prometheus_enrichment.py                                        |     6 |     3 |     3 |    50% |
| application_sdk/observability/cgroup.py                                                        |    20 |     1 |    19 |    95% |
| application_sdk/observability/context.py                                                       |     6 |     0 |     6 |   100% |
| application_sdk/observability/correlation.py                                                   |     6 |     0 |     6 |   100% |
| application_sdk/observability/dapr_log_forwarder.py                                            |    14 |     4 |    10 |    71% |
| application_sdk/observability/events.py                                                        |     1 |     0 |     1 |   100% |
| application_sdk/observability/logger_adaptor.py                                                |    56 |    10 |    46 |    82% |
| application_sdk/observability/logger_adaptor_errors.py                                         |     2 |     0 |     2 |   100% |
| application_sdk/observability/metrics.py                                                       |     8 |     6 |     2 |    25% |
| application_sdk/observability/metrics_adaptor.py                                               |    13 |     2 |    11 |    85% |
| application_sdk/observability/models.py                                                        |     6 |     0 |     6 |   100% |
| application_sdk/observability/observability.py                                                 |    22 |     4 |    18 |    82% |
| application_sdk/observability/pushgateway.py                                                   |    16 |    11 |     5 |    31% |
| application_sdk/observability/pushgateway_errors.py                                            |     3 |     0 |     3 |   100% |
| application_sdk/observability/resource_sampler.py                                              |     6 |     0 |     6 |   100% |
| application_sdk/observability/segment_client.py                                                |    15 |     1 |    14 |    93% |
| application_sdk/observability/sizing.py                                                        |    16 |     7 |     9 |    56% |
| application_sdk/observability/sizing_census.py                                                 |     8 |     3 |     5 |    62% |
| application_sdk/observability/sizing_inputs.py                                                 |    13 |     3 |    10 |    77% |
| application_sdk/observability/sizing_sink.py                                                   |    13 |     2 |    11 |    85% |
| application_sdk/observability/trace_context.py                                                 |     2 |     0 |     2 |   100% |
| application_sdk/observability/traces_adaptor.py                                                |    15 |     1 |    14 |    93% |
| application_sdk/observability/utils.py                                                         |     8 |     1 |     7 |    88% |
| application_sdk/observability/decorators/observability_decorator.py                            |     7 |     4 |     3 |    43% |
| application_sdk/outputs/__init__.py                                                            |     2 |     0 |     2 |   100% |
| application_sdk/outputs/collector.py                                                           |     9 |     0 |     9 |   100% |
| application_sdk/outputs/models.py                                                              |     3 |     0 |     3 |   100% |
| application_sdk/server/__init__.py                                                             |     1 |     0 |     1 |   100% |
| application_sdk/server/health.py                                                               |    24 |     0 |    24 |   100% |
| application_sdk/server/fastapi/models.py                                                       |    21 |    17 |     4 |    19% |
| application_sdk/server/fastapi/utils.py                                                        |     5 |     0 |     5 |   100% |
| application_sdk/server/mcp/__init__.py                                                         |     2 |     2 |     0 |     0% |
| application_sdk/server/mcp/decorators.py                                                       |     3 |     1 |     2 |    67% |
| application_sdk/server/mcp/models.py                                                           |     2 |     2 |     0 |     0% |
| application_sdk/server/mcp/server.py                                                           |     7 |     1 |     6 |    86% |
| application_sdk/server/middleware/__init__.py                                                  |     1 |     0 |     1 |   100% |
| application_sdk/server/middleware/_constants.py                                                |     1 |     0 |     1 |   100% |
| application_sdk/server/middleware/log.py                                                       |     4 |     3 |     1 |    25% |
| application_sdk/storage/__init__.py                                                            |     1 |     0 |     1 |   100% |
| application_sdk/storage/_concurrency.py                                                        |     3 |     1 |     2 |    67% |
| application_sdk/storage/_credential_providers.py                                               |     6 |     0 |     6 |   100% |
| application_sdk/storage/_locks.py                                                              |     5 |     1 |     4 |    80% |
| application_sdk/storage/_obstore_config.py                                                     |    13 |     0 |    13 |   100% |
| application_sdk/storage/_telemetry.py                                                          |     5 |     0 |     5 |   100% |
| application_sdk/storage/batch.py                                                               |    17 |     4 |    13 |    76% |
| application_sdk/storage/binding.py                                                             |    27 |     1 |    26 |    96% |
| application_sdk/storage/chunked.py                                                             |    12 |     0 |    12 |   100% |
| application_sdk/storage/cloud.py                                                               |    24 |     6 |    18 |    75% |
| application_sdk/storage/errors.py                                                              |    39 |    25 |    14 |    36% |
| application_sdk/storage/factory.py                                                             |     3 |     0 |     3 |   100% |
| application_sdk/storage/file_ref_sync.py                                                       |    15 |     3 |    12 |    80% |
| application_sdk/storage/integrity.py                                                           |    14 |     0 |    14 |   100% |
| application_sdk/storage/ops.py                                                                 |    33 |     1 |    32 |    97% |
| application_sdk/storage/preflight.py                                                           |    13 |     0 |    13 |   100% |
| application_sdk/storage/reference.py                                                           |    11 |     1 |    10 |    91% |
| application_sdk/storage/rolling.py                                                             |    33 |    12 |    21 |    64% |
| application_sdk/storage/rolling_errors.py                                                      |     4 |     0 |     4 |   100% |
| application_sdk/storage/transfer.py                                                            |    15 |     3 |    12 |    80% |
| application_sdk/storage/formats/__init__.py                                                    |    32 |     0 |    32 |   100% |
| application_sdk/storage/formats/format_errors.py                                               |    16 |     0 |    16 |   100% |
| application_sdk/storage/formats/json.py                                                        |    16 |     6 |    10 |    62% |
| application_sdk/storage/formats/parquet.py                                                     |    33 |     5 |    28 |    85% |
| application_sdk/storage/formats/utils.py                                                       |    10 |     2 |     8 |    80% |
| application_sdk/templates/__init__.py                                                          |     2 |     1 |     1 |    50% |
| application_sdk/templates/_template_errors.py                                                  |    10 |     0 |    10 |   100% |
| application_sdk/templates/base_metadata_extractor.py                                           |     4 |     1 |     3 |    75% |
| application_sdk/templates/incremental_sql_metadata_extractor.py                                |    19 |     2 |    17 |    89% |
| application_sdk/templates/sql_app.py                                                           |    46 |     6 |    40 |    87% |
| application_sdk/templates/sql_app_errors.py                                                    |     8 |     0 |     8 |   100% |
| application_sdk/templates/sql_metadata_extractor.py                                            |    14 |     1 |    13 |    93% |
| application_sdk/templates/sql_query_extractor.py                                               |     6 |     1 |     5 |    83% |
| application_sdk/templates/contracts/__init__.py                                                |     1 |     0 |     1 |   100% |
| application_sdk/templates/contracts/base_metadata_extraction.py                                |     3 |     0 |     3 |   100% |
| application_sdk/templates/contracts/incremental_sql.py                                         |    26 |     5 |    21 |    81% |
| application_sdk/templates/contracts/sql_metadata.py                                            |    33 |     8 |    25 |    76% |
| application_sdk/templates/contracts/sql_query.py                                               |     7 |     0 |     7 |   100% |
| application_sdk/test_utils/integration/__init__.py                                             |     1 |     1 |     0 |     0% |
| application_sdk/testing/__init__.py                                                            |     2 |     0 |     2 |   100% |
| application_sdk/testing/_errors.py                                                             |     4 |     0 |     4 |   100% |
| application_sdk/testing/_mustache.py                                                           |     2 |     0 |     2 |   100% |
| application_sdk/testing/fake_source.py                                                         |    59 |    16 |    43 |    73% |
| application_sdk/testing/fixtures.py                                                            |    11 |     0 |    11 |   100% |
| application_sdk/testing/golden.py                                                              |    26 |    10 |    16 |    62% |
| application_sdk/testing/mocks.py                                                               |    68 |    17 |    51 |    75% |
| application_sdk/testing/preflight.py                                                           |    20 |     6 |    14 |    70% |
| application_sdk/testing/volatile_fields.py                                                     |     1 |     0 |     1 |   100% |
| application_sdk/testing/e2e/__init__.py                                                        |     1 |     0 |     1 |   100% |
| application_sdk/testing/e2e/_errors.py                                                         |    13 |     0 |    13 |   100% |
| application_sdk/testing/e2e/_manifest_identity.py                                              |    11 |     0 |    11 |   100% |
| application_sdk/testing/e2e/base.py                                                            |   102 |     6 |    96 |    94% |
| application_sdk/testing/e2e/client.py                                                          |    29 |     7 |    22 |    76% |
| application_sdk/testing/e2e/config.py                                                          |     5 |     0 |     5 |   100% |
| application_sdk/testing/e2e/credential.py                                                      |     2 |     0 |     2 |   100% |
| application_sdk/testing/e2e/logs.py                                                            |     9 |     1 |     8 |    89% |
| application_sdk/testing/e2e/payload.py                                                         |    11 |     0 |    11 |   100% |
| application_sdk/testing/e2e/portforward.py                                                     |     1 |     0 |     1 |   100% |
| application_sdk/testing/e2e/sql_app.py                                                         |    10 |     0 |    10 |   100% |
| application_sdk/testing/e2e/substitutions.py                                                   |     3 |     0 |     3 |   100% |
| application_sdk/testing/e2e/workflows.py                                                       |     6 |     1 |     5 |    83% |
| application_sdk/testing/full_dag/__init__.py                                                   |     1 |     0 |     1 |   100% |
| application_sdk/testing/full_dag/_errors.py                                                    |     1 |     0 |     1 |   100% |
| application_sdk/testing/full_dag/base.py                                                       |    18 |     2 |    16 |    89% |
| application_sdk/testing/full_dag/client.py                                                     |     1 |     0 |     1 |   100% |
| application_sdk/testing/full_dag/payload.py                                                    |     8 |     0 |     8 |   100% |
| application_sdk/testing/full_dag/sql_app.py                                                    |     6 |     1 |     5 |    83% |
| application_sdk/testing/harness/__init__.py                                                    |     1 |     0 |     1 |   100% |
| application_sdk/testing/harness/_errors.py                                                     |    13 |     0 |    13 |   100% |
| application_sdk/testing/harness/_poll.py                                                       |    15 |     0 |    15 |   100% |
| application_sdk/testing/harness/bridge.py                                                      |     5 |     0 |     5 |   100% |
| application_sdk/testing/harness/budgets.py                                                     |     6 |     0 |     6 |   100% |
| application_sdk/testing/harness/evidence.py                                                    |    15 |     1 |    14 |    93% |
| application_sdk/testing/harness/expectations.py                                                |     9 |     0 |     9 |   100% |
| application_sdk/testing/harness/fixtures.py                                                    |    43 |     4 |    39 |    91% |
| application_sdk/testing/harness/identity.py                                                    |    11 |     1 |    10 |    91% |
| application_sdk/testing/harness/outcome.py                                                     |    14 |     0 |    14 |   100% |
| application_sdk/testing/harness/preconditions.py                                               |    19 |     4 |    15 |    79% |
| application_sdk/testing/harness/spec.py                                                        |     2 |     0 |     2 |   100% |
| application_sdk/testing/harness/substrate.py                                                   |     3 |     0 |     3 |   100% |
| application_sdk/testing/harness/teardown.py                                                    |     8 |     0 |     8 |   100% |
| application_sdk/testing/harness/waiting.py                                                     |     8 |     0 |     8 |   100% |
| application_sdk/testing/harness/atlas/__init__.py                                              |    19 |     4 |    15 |    79% |
| application_sdk/testing/harness/atlas/_errors.py                                               |     2 |     0 |     2 |   100% |
| application_sdk/testing/harness/automation_engine/__init__.py                                  |     1 |     0 |     1 |   100% |
| application_sdk/testing/harness/automation_engine/_errors.py                                   |    10 |     0 |    10 |   100% |
| application_sdk/testing/harness/automation_engine/client.py                                    |    34 |     4 |    30 |    88% |
| application_sdk/testing/harness/automation_engine/retry.py                                     |    17 |     1 |    16 |    94% |
| application_sdk/testing/harness/automation_engine/wire.py                                      |    24 |     2 |    22 |    92% |
| application_sdk/testing/harness/cluster/__init__.py                                            |     1 |     0 |     1 |   100% |
| application_sdk/testing/harness/cluster/_errors.py                                             |     4 |     0 |     4 |   100% |
| application_sdk/testing/harness/cluster/_portforward.py                                        |    15 |     2 |    13 |    87% |
| application_sdk/testing/harness/cluster/_protocols.py                                          |     9 |     0 |     9 |   100% |
| application_sdk/testing/harness/cluster/_states.py                                             |     9 |     0 |     9 |   100% |
| application_sdk/testing/harness/cluster/kube.py                                                |    50 |     7 |    43 |    86% |
| application_sdk/testing/harness/starters/__init__.py                                           |     2 |     0 |     2 |   100% |
| application_sdk/testing/harness/starters/_ae.py                                                |     4 |     0 |     4 |   100% |
| application_sdk/testing/harness/starters/_errors.py                                            |     4 |     0 |     4 |   100% |
| application_sdk/testing/harness/starters/_queue.py                                             |     3 |     0 |     3 |   100% |
| application_sdk/testing/harness/starters/_specs.py                                             |    12 |     0 |    12 |   100% |
| application_sdk/testing/harness/temporal/__init__.py                                           |     1 |     0 |     1 |   100% |
| application_sdk/testing/harness/temporal/_errors.py                                            |     5 |     0 |     5 |   100% |
| application_sdk/testing/harness/temporal/_protocols.py                                         |     4 |     0 |     4 |   100% |
| application_sdk/testing/harness/temporal/_states.py                                            |     6 |     0 |     6 |   100% |
| application_sdk/testing/harness/temporal/client.py                                             |    23 |     1 |    22 |    96% |
| application_sdk/testing/hypothesis/__init__.py                                                 |     1 |     1 |     0 |     0% |
| application_sdk/testing/hypothesis/strategies/__init__.py                                      |     1 |     1 |     0 |     0% |
| application_sdk/testing/hypothesis/strategies/sql_client.py                                    |     1 |     1 |     0 |     0% |
| application_sdk/testing/hypothesis/strategies/clients/__init__.py                              |     1 |     1 |     0 |     0% |
| application_sdk/testing/hypothesis/strategies/clients/sql.py                                   |     1 |     1 |     0 |     0% |
| application_sdk/testing/hypothesis/strategies/common/__init__.py                               |     1 |     1 |     0 |     0% |
| application_sdk/testing/hypothesis/strategies/common/logger.py                                 |     3 |     0 |     3 |   100% |
| application_sdk/testing/hypothesis/strategies/handlers/__init__.py                             |     1 |     1 |     0 |     0% |
| application_sdk/testing/hypothesis/strategies/handlers/sql/__init__.py                         |     1 |     1 |     0 |     0% |
| application_sdk/testing/hypothesis/strategies/handlers/sql/sql_metadata.py                     |     1 |     1 |     0 |     0% |
| application_sdk/testing/hypothesis/strategies/handlers/sql/sql_preflight.py                    |     1 |     1 |     0 |     0% |
| application_sdk/testing/hypothesis/strategies/inputs/__init__.py                               |     1 |     1 |     0 |     0% |
| application_sdk/testing/hypothesis/strategies/inputs/json_input.py                             |     1 |     1 |     0 |     0% |
| application_sdk/testing/hypothesis/strategies/inputs/parquet_input.py                          |     1 |     1 |     0 |     0% |
| application_sdk/testing/hypothesis/strategies/outputs/__init__.py                              |     1 |     1 |     0 |     0% |
| application_sdk/testing/hypothesis/strategies/outputs/json_output.py                           |     2 |     1 |     1 |    50% |
| application_sdk/testing/hypothesis/strategies/outputs/statestore.py                            |     3 |     1 |     2 |    67% |
| application_sdk/testing/hypothesis/strategies/server/__init__.py                               |     1 |     1 |     0 |     0% |
| application_sdk/testing/hypothesis/strategies/server/fastapi/__init__.py                       |     1 |     1 |     0 |     0% |
| application_sdk/testing/integration/__init__.py                                                |     3 |     1 |     2 |    67% |
| application_sdk/testing/integration/_errors.py                                                 |    17 |     0 |    17 |   100% |
| application_sdk/testing/integration/assertions.py                                              |    55 |    25 |    30 |    55% |
| application_sdk/testing/integration/client.py                                                  |    18 |     0 |    18 |   100% |
| application_sdk/testing/integration/comparison.py                                              |    12 |     1 |    11 |    92% |
| application_sdk/testing/integration/corpus.py                                                  |    25 |     7 |    18 |    72% |
| application_sdk/testing/integration/fixtures.py                                                |    26 |     1 |    25 |    96% |
| application_sdk/testing/integration/lazy.py                                                    |    10 |     0 |    10 |   100% |
| application_sdk/testing/integration/models.py                                                  |     9 |     0 |     9 |   100% |
| application_sdk/testing/integration/runner.py                                                  |    27 |     2 |    25 |    93% |
| application_sdk/testing/integration/source.py                                                  |     8 |     0 |     8 |   100% |
| application_sdk/testing/integration/validation.py                                              |     7 |     0 |     7 |   100% |
| application_sdk/testing/parity/__init__.py                                                     |     1 |     0 |     1 |   100% |
| application_sdk/testing/parity/__main__.py                                                     |     2 |     1 |     1 |    50% |
| application_sdk/testing/parity/comparator.py                                                   |     8 |     0 |     8 |   100% |
| application_sdk/testing/parity/models.py                                                       |     5 |     1 |     4 |    80% |
| application_sdk/testing/parity/report.py                                                       |     4 |     0 |     4 |   100% |
| application_sdk/testing/scale_data_generator/__init__.py                                       |     1 |     0 |     1 |   100% |
| application_sdk/testing/scale_data_generator/config_loader.py                                  |    11 |     4 |     7 |    64% |
| application_sdk/testing/scale_data_generator/data_generator.py                                 |    10 |     3 |     7 |    70% |
| application_sdk/testing/scale_data_generator/driver.py                                         |     3 |     3 |     0 |     0% |
| application_sdk/testing/scale_data_generator/output_handler/__init__.py                        |     1 |     1 |     0 |     0% |
| application_sdk/testing/scale_data_generator/output_handler/base.py                            |     7 |     3 |     4 |    57% |
| application_sdk/testing/scale_data_generator/output_handler/csv_handler.py                     |     6 |     6 |     0 |     0% |
| application_sdk/testing/scale_data_generator/output_handler/json_handler.py                    |     5 |     5 |     0 |     0% |
| application_sdk/testing/scale_data_generator/output_handler/parquet_handler.py                 |     6 |     6 |     0 |     0% |
| application_sdk/testing/sdr/__init__.py                                                        |     1 |     0 |     1 |   100% |
| application_sdk/testing/sdr/base.py                                                            |    14 |     3 |    11 |    79% |
| application_sdk/tools/__init__.py                                                              |     1 |     1 |     0 |     0% |
| application_sdk/tools/provision_credentials.py                                                 |     2 |     1 |     1 |    50% |
| application_sdk/transformers/__init__.py                                                       |     4 |     2 |     2 |    50% |
| application_sdk/transformers/errors.py                                                         |     2 |     1 |     1 |    50% |
| application_sdk/transformers/atlas/__init__.py                                                 |     6 |     1 |     5 |    83% |
| application_sdk/transformers/atlas/errors.py                                                   |     8 |     7 |     1 |    12% |
| application_sdk/transformers/atlas/sql.py                                                      |    25 |     4 |    21 |    84% |
| application_sdk/transformers/common/__init__.py                                                |     1 |     1 |     0 |     0% |
| application_sdk/transformers/common/last_sync.py                                               |     5 |     0 |     5 |   100% |
| application_sdk/transformers/common/utils.py                                                   |     6 |     0 |     6 |   100% |
| application_sdk/transformers/query/__init__.py                                                 |    19 |     2 |    17 |    89% |
| application_sdk/transformers/query/errors.py                                                   |     5 |     3 |     2 |    40% |
| application_sdk/validation/__init__.py                                                         |     1 |     0 |     1 |   100% |
| application_sdk/validation/artifacts.py                                                        |    24 |     1 |    23 |    96% |
| application_sdk/validation/assets.py                                                           |    23 |     2 |    21 |    91% |
| application_sdk/validation/interceptor.py                                                      |    15 |     0 |    15 |   100% |
| application_sdk/validation/ndjson.py                                                           |    22 |     4 |    18 |    82% |
| application_sdk/validation/parquet.py                                                          |    15 |     0 |    15 |   100% |
| application_sdk/validation/protocols.py                                                        |     9 |     0 |     9 |   100% |
| application_sdk/validation/sources.py                                                          |    15 |     0 |    15 |   100% |
| application_sdk/validation/wrapper.py                                                          |     8 |     0 |     8 |   100% |
| contract-toolkit/examples/agent-e2e/app/generated/__init__.py                                  |     1 |     1 |     0 |     0% |
| contract-toolkit/examples/agent-e2e/app/generated/_e2e_base.py                                 |     2 |     2 |     0 |     0% |
| contract-toolkit/examples/agent-e2e/app/generated/_e2e_credential.py                           |     3 |     3 |     0 |     0% |
| contract-toolkit/examples/agent-e2e/app/generated/_e2e_substitutions.py                        |     2 |     2 |     0 |     0% |
| contract-toolkit/examples/agent-e2e/app/generated/_input.py                                    |     2 |     2 |     0 |     0% |
| contract-toolkit/examples/artifact-schemas/app/generated/__init__.py                           |     1 |     1 |     0 |     0% |
| contract-toolkit/examples/artifact-schemas/app/generated/_e2e_base.py                          |     2 |     2 |     0 |     0% |
| contract-toolkit/examples/artifact-schemas/app/generated/_e2e_substitutions.py                 |     2 |     2 |     0 |     0% |
| contract-toolkit/examples/artifact-schemas/app/generated/_input.py                             |     2 |     2 |     0 |     0% |
| contract-toolkit/examples/behind-the-scenes/app/generated/__init__.py                          |     1 |     1 |     0 |     0% |
| contract-toolkit/examples/behind-the-scenes/app/generated/_e2e_base.py                         |     2 |     2 |     0 |     0% |
| contract-toolkit/examples/behind-the-scenes/app/generated/_e2e_substitutions.py                |     2 |     2 |     0 |     0% |
| contract-toolkit/examples/behind-the-scenes/app/generated/_input.py                            |     2 |     2 |     0 |     0% |
| contract-toolkit/examples/bundle/app/generated/crawler/__init__.py                             |     1 |     1 |     0 |     0% |
| contract-toolkit/examples/bundle/app/generated/crawler/_e2e_base.py                            |     2 |     2 |     0 |     0% |
| contract-toolkit/examples/bundle/app/generated/crawler/_e2e_credential.py                      |     3 |     3 |     0 |     0% |
| contract-toolkit/examples/bundle/app/generated/crawler/_input.py                               |     2 |     2 |     0 |     0% |
| contract-toolkit/examples/bundle/app/generated/miner/__init__.py                               |     1 |     1 |     0 |     0% |
| contract-toolkit/examples/bundle/app/generated/miner/_e2e_base.py                              |     2 |     2 |     0 |     0% |
| contract-toolkit/examples/bundle/app/generated/miner/_e2e_substitutions.py                     |     2 |     2 |     0 |     0% |
| contract-toolkit/examples/bundle/app/generated/miner/_input.py                                 |     2 |     2 |     0 |     0% |
| contract-toolkit/examples/connection-ref/app/generated/__init__.py                             |     1 |     1 |     0 |     0% |
| contract-toolkit/examples/connection-ref/app/generated/_e2e_base.py                            |     2 |     2 |     0 |     0% |
| contract-toolkit/examples/connection-ref/app/generated/_input.py                               |     2 |     2 |     0 |     0% |
| contract-toolkit/examples/deploy/app/generated/__init__.py                                     |     1 |     1 |     0 |     0% |
| contract-toolkit/examples/deploy/app/generated/_e2e_base.py                                    |     2 |     2 |     0 |     0% |
| contract-toolkit/examples/deploy/app/generated/_e2e_substitutions.py                           |     2 |     2 |     0 |     0% |
| contract-toolkit/examples/deploy/app/generated/_input.py                                       |     2 |     2 |     0 |     0% |
| contract-toolkit/examples/fanin/app/generated/__init__.py                                      |     1 |     1 |     0 |     0% |
| contract-toolkit/examples/fanin/app/generated/_e2e_base.py                                     |     2 |     2 |     0 |     0% |
| contract-toolkit/examples/fanin/app/generated/_e2e_credential.py                               |     3 |     3 |     0 |     0% |
| contract-toolkit/examples/fanin/app/generated/_input.py                                        |     2 |     2 |     0 |     0% |
| contract-toolkit/examples/full/app/generated/__init__.py                                       |     1 |     1 |     0 |     0% |
| contract-toolkit/examples/full/app/generated/_e2e_base.py                                      |     2 |     2 |     0 |     0% |
| contract-toolkit/examples/full/app/generated/_e2e_credential.py                                |     3 |     3 |     0 |     0% |
| contract-toolkit/examples/full/app/generated/_e2e_substitutions.py                             |     2 |     2 |     0 |     0% |
| contract-toolkit/examples/full/app/generated/_input.py                                         |     3 |     3 |     0 |     0% |
| contract-toolkit/examples/minimal/app/generated/__init__.py                                    |     1 |     1 |     0 |     0% |
| contract-toolkit/examples/minimal/app/generated/_e2e_base.py                                   |     2 |     2 |     0 |     0% |
| contract-toolkit/examples/minimal/app/generated/_e2e_substitutions.py                          |     2 |     2 |     0 |     0% |
| contract-toolkit/examples/minimal/app/generated/_input.py                                      |     2 |     2 |     0 |     0% |
| contract-toolkit/examples/pools/app/generated/__init__.py                                      |     1 |     1 |     0 |     0% |
| contract-toolkit/examples/pools/app/generated/_e2e_base.py                                     |     2 |     2 |     0 |     0% |
| contract-toolkit/examples/pools/app/generated/_e2e_substitutions.py                            |     2 |     2 |     0 |     0% |
| contract-toolkit/examples/pools/app/generated/_input.py                                        |     2 |     2 |     0 |     0% |
| contract-toolkit/examples/publish-controls/app/generated/__init__.py                           |     1 |     1 |     0 |     0% |
| contract-toolkit/examples/publish-controls/app/generated/_e2e_base.py                          |     2 |     2 |     0 |     0% |
| contract-toolkit/examples/publish-controls/app/generated/_e2e_credential.py                    |     3 |     3 |     0 |     0% |
| contract-toolkit/examples/publish-controls/app/generated/_e2e_substitutions.py                 |     2 |     2 |     0 |     0% |
| contract-toolkit/examples/publish-controls/app/generated/_input.py                             |     2 |     2 |     0 |     0% |
| contract-toolkit/examples/scheduled/app/generated/__init__.py                                  |     1 |     1 |     0 |     0% |
| contract-toolkit/examples/scheduled/app/generated/_e2e_base.py                                 |     2 |     2 |     0 |     0% |
| contract-toolkit/examples/scheduled/app/generated/_e2e_substitutions.py                        |     2 |     2 |     0 |     0% |
| contract-toolkit/examples/scheduled/app/generated/_input.py                                    |     2 |     2 |     0 |     0% |
| contract-toolkit/scripts/test-sdk-import.py                                                    |     5 |     1 |     4 |    80% |
| packages/conformance/conformance/__init__.py                                                   |     1 |     0 |     1 |   100% |
| packages/conformance/conformance/cli.py                                                        |    14 |    12 |     2 |    14% |
| packages/conformance/conformance/bootstrap/__init__.py                                         |     1 |     0 |     1 |   100% |
| packages/conformance/conformance/bootstrap/args.py                                             |     5 |     0 |     5 |   100% |
| packages/conformance/conformance/bootstrap/autodetect.py                                       |    10 |     0 |    10 |   100% |
| packages/conformance/conformance/bootstrap/command.py                                          |    20 |     2 |    18 |    90% |
| packages/conformance/conformance/bootstrap/extract.py                                          |    24 |     0 |    24 |   100% |
| packages/conformance/conformance/bootstrap/render.py                                           |     3 |     0 |     3 |   100% |
| packages/conformance/conformance/bootstrap/templates/build_conformance_args.py                 |     3 |     0 |     3 |   100% |
| packages/conformance/conformance/bootstrap/templates/probe_code_scanning.py                    |     6 |     0 |     6 |   100% |
| packages/conformance/conformance/renovate/__init__.py                                          |     1 |     0 |     1 |   100% |
| packages/conformance/conformance/renovate/classify.py                                          |    17 |     1 |    16 |    94% |
| packages/conformance/conformance/renovate/models.py                                            |    11 |     2 |     9 |    82% |
| packages/conformance/conformance/renovate/scan.py                                              |    11 |     6 |     5 |    45% |
| packages/conformance/conformance/scorecard/__init__.py                                         |     1 |     0 |     1 |   100% |
| packages/conformance/conformance/scorecard/cli.py                                              |     7 |     3 |     4 |    57% |
| packages/conformance/conformance/scorecard/compute.py                                          |     9 |     3 |     6 |    67% |
| packages/conformance/conformance/scorecard/readers.py                                          |    11 |     0 |    11 |   100% |
| packages/conformance/conformance/scorecard/rubric.py                                           |    10 |     5 |     5 |    50% |
| packages/conformance/conformance/scorecard/schema.py                                           |    15 |     2 |    13 |    87% |
| packages/conformance/conformance/scorecard/validate.py                                         |     4 |     1 |     3 |    75% |
| packages/conformance/conformance/suite/__init__.py                                             |     1 |     0 |     1 |   100% |
| packages/conformance/conformance/suite/runner.py                                               |    10 |     2 |     8 |    80% |
| packages/conformance/conformance/suite/checks/__init__.py                                      |     1 |     1 |     0 |     0% |
| packages/conformance/conformance/suite/checks/_entrypoint_contract_classes.py                  |     7 |     0 |     7 |   100% |
|

This message was truncated. Download full message

@github-actions

github-actions Bot commented Sep 4, 2026

Copy link
Copy Markdown
Contributor

📦 Trivy Vulnerability Scan Results

Schema Version Created At Artifact Type
2 2026-09-04T17:53:06.536554106Z . repository

Report Summary

Could not generate summary table (data length mismatch: 9 vs 8).

Scan Result Details

packages/conformance/uv.lock
uv.lock

@github-actions

github-actions Bot commented Sep 4, 2026

Copy link
Copy Markdown
Contributor

📦 Trivy Secret Scan Results

Schema Version Created At Artifact Type
2 2026-09-04T17:53:11.102547563Z . repository

Report Summary

Could not generate summary table (data length mismatch: 9 vs 8).

Scan Result Details

packages/conformance/uv.lock
uv.lock

@atlan-app-fleet

atlan-app-fleet Bot commented Sep 4, 2026

Copy link
Copy Markdown
Contributor

☂️ Code Coverage

current status: ✅

Overall Coverage

Statements Covered Coverage Threshold Status
28512 26760 94% 0% 🟢

New Files

No new covered files...

Modified Files

No covered modified files...

updated for commit: c4ce51b by action🐍

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant