Skip to content

feat(storage): cut directory-upload round trips and widen small-object fan-out - #3638

Draft
vaibhavatlan wants to merge 1 commit into
mainfrom
vaibhavchopra/fnd-1339-directory-upload-roundtrips
Draft

vaibhavatlan wants to merge 1 commit into
mainfrom
vaibhavchopra/fnd-1339-directory-upload-roundtrips

Conversation

@vaibhavatlan

Copy link
Copy Markdown
Collaborator

Changelog

  • Directory uploads spend two prefix listings instead of two HEADs per file. Before the transfer, one listing of the target prefix answers the skip_if_exists check for every file (read_expected_digest already took sidecar_present; it is now fed from the listing). After the transfer, one listing is the readback for every object at once: same two checks as the per-object HEAD in _finalize_upload_integrity (present, and the size that was sent), same error classes. Sidecars are written only after that readback passes, so the "never advertise an object this upload rejected" ordering is preserved.
  • Size-tiered fan-out for directory transfers (transfer.upload and FileReference directory persist). Objects at or below ATLAN_STORAGE_SMALL_OBJECT_BYTES (4 MiB) run ATLAN_MAX_CONCURRENT_SMALL_TRANSFERS (32) wide; larger objects keep ATLAN_MAX_CONCURRENT_STORAGE_TRANSFERS (4) because each holds part-size × part-concurrency of buffer. An explicit max_concurrency stays one hard cap across everything in flight. 0 disables the tier.
  • upload_file(defer_remote_verify=...): local-truncation check on, readback HEAD off, for callers that take over the readback. Single-file uploads are unchanged.
  • App.upload: the warn-only transformed-asset validation runs alongside the transfer instead of ahead of it, is skipped on retry attempts (deterministic over the same tree; attempt 1 emitted its outcome), and its bound is capped at half the activity's start-to-close timeout. The two used to share a 600s default, so a scan over millions of records could spend the whole activity budget before the first PUT.
  • Docs: configuration.md, storage.md (new Directory uploads: round trips, not bytes section), file-reference.md.

Why

A directory hand-off over a high-latency store is bound by requests, not bytes. Every file cost four dependent round trips (sidecar HEAD, PUT, readback HEAD, sidecar PUT) drained four at a time. A production agent-mode run that staged ~19k small parquet files spent 2h53m in App.upload at ~0.5 s per request through the tenant blobstorage gateway; two earlier runs of the same connector died in it after 3 × 600s. The SDK's own work was ~10 ms per file (measured against a local store); the rest was round trips.

Measured against an S3-compatible stub that logs requests and injects 100 ms each (200 files):

Config Requests Per file 4-wide 32-wide
before this PR (skip_if_exists, verify, sidecars) 800 (HEAD sidecar, PUT, HEAD object, PUT sidecar) 4.0 23.7s 4.5s
after this PR, same flags 2 listings + 200 PUT + 200 PUT sidecar ~2.0 small tier default

Net for the SAP-shaped tree: 4 → 2 requests per object plus one request per thousand keys, at up to 8× the fan-out for the round-trip-bound tier. Object count is still what scales the cost; the writer-side follow-up (roll by size, fix the 5,000-row consolidation slices) is a separate PR.

Additional context (e.g. screenshots, logs, links)

  • Investigation and measurements: FND-1339 (Linear).
  • Follow-ups, not in this PR: ParquetFileWriter consolidation slicing at chunk_size; RollingFileWriter minimum-bytes guard on the time rollover; a per-prefix integrity manifest to drop the sidecar PUT as well (touches the reader side, needs its own design note).
  • Behaviour notes for reviewers:
    • Directory uploads to a store root (empty prefix) keep the per-object checks; there is no narrow listing to make there.
    • ATLAN_STORAGE_VERIFY_TRANSFERS=false still means no readback at all; with it on, directory mode's readback is the listing. Listing consistency assumptions match the HEAD's (read-after-write).
    • Peak buffer memory for the small tier is bounded by threshold × fan-out (128 MiB at defaults); the large tier is unchanged.
    • Validation skip-on-retry means an attempt-1 that died mid-scan emits no outcome row; the transfer is what the retry is for.

Checklist

  • Additional tests added (tests/unit/storage/test_transfer.py: request log + fan-out tiers; test_integrity.py: deferred readback; test_reference.py: tiered persist; tests/unit/app/test_base.py + test_upload_asset_validation.py: validation alongside the transfer, cancel on failure, retry skip, budget cap)
  • All CI checks passed
  • Relevant documentation updated

Copyleft License Compliance

  • Have you used any code that is subject to a Copyleft license (e.g., GPL, AGPL, LGPL)?
  • If yes, have you modified the code in the context of this project? please share additional details.

…t fan-out

A directory hand-off over a high-latency store is bound by requests, not
bytes. Every file in a directory upload cost four dependent round trips — a
sidecar HEAD for the skip check, the PUT, a readback HEAD, the sidecar PUT —
drained four at a time. A production agent run that staged ~19k small parquet
files spent 2h53m in App.upload at ~0.5s per request through the tenant
blobstorage gateway; two earlier runs of the same connector timed out in it.
The SDK's own work was ~10 ms per file (measured against a local store); the
rest was round trips (FND-1339).

transfer.upload, directory mode:
- One listing of the target prefix before the transfer answers the
  skip_if_exists check for every file (read_expected_digest already accepts
  sidecar_present; it is now fed from the listing instead of a HEAD per file).
- One listing after the transfer is the readback for every object at once —
  the same two checks (present, and the size that was sent) and the same
  error classes as the per-object HEAD in _finalize_upload_integrity.
- Sidecars are written only after that readback passes, preserving the
  ordering guarantee the per-object protocol makes.
- Fan-out is sized per file: objects at or below STORAGE_SMALL_OBJECT_BYTES
  (4 MiB) run MAX_CONCURRENT_SMALL_TRANSFERS (32) wide; larger objects keep
  MAX_CONCURRENT_STORAGE_TRANSFERS (4) because each holds part-size x
  part-concurrency of buffer. An explicit max_concurrency is one hard cap.
- Net: 4 -> 2 requests per object plus a request per thousand keys, at up to
  8x the fan-out for the round-trip-bound tier.

upload_file gains defer_remote_verify for callers that take over the
readback; the single-file path is unchanged. FileReference directory persist
uses the same tiered fan-out.

App.upload: the warn-only transformed-asset validation runs alongside the
transfer instead of ahead of it, is skipped on retry attempts, and its bound
is capped at half the activity's start-to-close timeout — the two used to
share a 600s default, so a scan over millions of records could spend the
whole activity budget before the first PUT.

New env knobs: ATLAN_MAX_CONCURRENT_SMALL_TRANSFERS,
ATLAN_STORAGE_SMALL_OBJECT_BYTES (0 disables the tier).
@linear

linear Bot commented Sep 2, 2026

Copy link
Copy Markdown

FND-1339

@github-actions

github-actions Bot commented Sep 2, 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                                                                    |    85 |    19 |    66 |    78% |
| 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                                                             |     7 |     0 |     7 |   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                                                           |     6 |     1 |     5 |    83% |
| application_sdk/contracts/types.py                                                             |    15 |     0 |    15 |   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                                                         |    17 |     2 |    15 |    88% |
| 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                                          |    39 |     3 |    36 |    92% |
| application_sdk/execution/_temporal/preflight_persist.py                                       |    14 |     0 |    14 |   100% |
| application_sdk/execution/_temporal/sdr.py                                                     |    17 |     7 |    10 |    59% |
| 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                                                             |    65 |    23 |    42 |    65% |
| 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                                                        |     5 |     2 |     3 |    60% |
| 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                                                            |    18 |     3 |    15 |    83% |
| 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                                                         |    58 |    16 |    42 |    72% |
| 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                                          |    14 |     1 |    13 |    93% |
| 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 2, 2026

Copy link
Copy Markdown
Contributor

📦 Trivy Vulnerability Scan Results

Schema Version Created At Artifact Type
2 2026-09-02T15:50:42.285023105Z . 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 2, 2026

Copy link
Copy Markdown
Contributor

📦 Trivy Secret Scan Results

Schema Version Created At Artifact Type
2 2026-09-02T15:50:47.625423537Z . 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 2, 2026

Copy link
Copy Markdown
Contributor

☂️ Code Coverage

current status: ✅

Overall Coverage

Statements Covered Coverage Threshold Status
28452 26697 94% 0% 🟢

New Files

No new covered files...

Modified Files

No covered modified files...

updated for commit: 51c308b by action🐍

This branch has not been deployed

No deployments
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