Bring Spark's Partitioned SQL into the Diff with Ptah
Spark keeps its partitioned-table definition outside the Ent diff. Ptah brings it into schema review while Spark keeps control of daily partitions.
Ptah helps you plan, review, and apply database migrations. Try in your browser
Spark keeps the partitioned definition
of signing_nonces in SQL. Its documented Atlas Community workflow builds
the migration diff from Ent. The SQL definition sits outside that diff.
That leaves a gap in schema review. An engineer can change the SQL file and still get a clean Ent diff. The result says nothing about whether the live table matches the partitioned definition in the repository.
Ptah brings that definition into the comparison alongside the Ent tables. A change to the SQL parent becomes a plan the engineer can inspect and apply. Spark continues to create and retire its daily partitions.
This proposal uses Ptah 0.15.0 and PostgreSQL 16.15. The configuration, integration patch, and reproduction records are available with the example. We have opened an issue and a draft pull request in the Spark repository. This is a proposal to the Spark maintainers, not an adoption announcement.
The table is visible; its partitioning is missing
Section titled “The table is visible; its partitioning is missing”Ent generates Spark’s client for signing_nonces, but its model does not
express the table’s range partitioning. The external SQL file does. Spark’s
migration guide
explains the compromise: composing Ent and SQL requires Atlas Pro, so the
Community configuration reads Ent alone and accepts the difference.
Keeping the SQL in Git documents the intended structure. It does not make
the migration tool compare that structure with the database. Skipping
DROP TABLE operations does not add the missing partition definition either.
The engineer still has to check that part of the schema separately.
The daily partitions need a different boundary. Spark creates and removes
signing_nonces_YYYYMMDD tables as retention advances. A schema tool should
check the parent without treating those changing children as tables to remove.
Put the SQL parent into the desired schema
Section titled “Put the SQL parent into the desired schema”We give Ptah the Ent tables and the external SQL as inputs to one desired
schema. A small exporter reads Spark’s generated Ent metadata and omits its
duplicate definition of signing_nonces. The SQL file supplies the parent,
including PARTITION BY RANGE (id). Ent still generates the same Go client.
The composition is explicit:
data "composite_schema" "operator" { schema "public" { url = data.external_schema.ent.url } schema "public" { url = "file://external/schema.sql" }}The result contains 49 Ent-defined tables and the SQL-defined parent. Our
full configuration excludes
signing_nonces_[0-9]* from live comparison, leaving the parent in scope.
The exporter uses Spark’s existing open-source Ent/Atlas libraries; this
composition does not need Atlas Pro.
From spark/so/ent, we can now compare the live database with both sources:
ptah-compat schema diff --env local --from "$COMPOSITION_OPERATOR_DB_URL" --to env://src --schema publicSchemas are synced, no changes to be made.Here, a clean diff includes the SQL parent’s partition definition. The application’s dated children can change without creating schema noise.
Turn a parent change into reviewed SQL
Section titled “Turn a parent change into reviewed SQL”Suppose we add a nullable field to the partitioned table. In the example,
case_study_note is a synthetic field added to a copy of the external SQL.
The Ent export stays unchanged.
Ptah compares the combined desired schema with the live database and saves
a plan. $LAB is the example workspace containing those schema files:
ptah schema plan \ --db-url "$COMPOSITION_OPERATOR_DB_URL" \ --schema-file "$LAB/operator-ent-identifiers.hcl" \ --schema-file "$LAB/external-additive.sql" \ --exclude 'signing_nonces_[0-9]*' \ --output "$LAB/qualified-additive.plan.json"The plan contains one statement:
ALTER TABLE "signing_nonces" ADD COLUMN "case_study_note" TEXT;The SQL edit is now part of a reviewable database change. The plan contains no child-table deletion or detachment. We apply that saved plan:
ptah schema apply --db-url "$COMPOSITION_OPERATOR_DB_URL" --plan "$LAB/qualified-additive.plan.json" --auto-approvePostgreSQL adds the column to the parent and its attached children. Their
OIDs, partition bounds, and existing rows stay unchanged. Spark’s existing
PurgeAndCreateSigningNoncePartitions function then advances retention:
it retires the October 19 partition and creates October 22. The October 20
row stays in its original child.
Ptah’s next plan is empty. The parent change has converged, and Spark still controls the partition lifecycle.
Keep the migration history and the next Ent change
Section titled “Keep the migration history and the next Ent change”Bringing SQL into schema review does not require replacing Spark’s Ent
clients or starting its migration history over. Ptah Compat applies the
existing 187 operator migrations and the separate ephemeral history. Both
keep their original SQL and atlas.sum files. Atlas Community and Ptah can
read and continue each other’s recorded history.
The next ordinary Ent change also follows the familiar path: edit the schema,
regenerate Ent metadata, and generate a migration. We add a nullable field to
WalletSetting, then run:
ptah-compat migrate diff composition_probe --env authoring --dir "file://$LAB/qualified-authored-operator-history" --dev-url "$SCHEMA_DEV_DB_URL"After replaying the original history, Ptah produces:
ALTER TABLE "public"."wallet_settings" ADD COLUMN "case_study_note" varchar;Applying the migration preserves the existing row and constraints. A repeat diff against the extended directory reports:
The migration directory is synced with the desired state, no changes to be madeThe authoring environment has a deliberate scope. The original history
creates an ordinary signing_nonces table; a separate manual cutover makes
it partitioned. Ordinary Ent migration generation therefore excludes that
parent. The live comparison and parent-change plan include it. Every
historical SQL statement still runs during replay.
Converting a populated ordinary table to a partitioned one remains a reviewed manual cutover. Ptah refuses that mismatch and an in-place change to the partition method or key. The data movement needs its own plan.
The integration patch connects these workflows to Spark’s startup commands, migration tasks, Docker image, and database test helper. It keeps Ent generation and application partition management in place. To follow the example, start with the complete configuration and setup.
Put Ptah to work
Example files
- authoring/ent-schema-probes.patch.txt
- authoring/ephemeral/20261023102820_ephemeral_probe.sql
- authoring/ephemeral/atlas.sum
- authoring/operator-statement.sql
- authoring/operator/20261023102552_composition_probe.sql
- authoring/operator/atlas.sum
- baseline-0.13.0/additive-plan-public.json
- baseline-0.13.0/application-create-partitions.stderr.txt
- baseline-0.13.0/application-create-partitions.txt
- baseline-0.13.0/application-purge-and-create.stderr.txt
- baseline-0.13.0/application-purge-and-create.txt
- baseline-0.13.0/atlas-apply-ephemeral.stderr.txt
- baseline-0.13.0/atlas-apply-ephemeral.txt
- baseline-0.13.0/atlas-apply-operator.stderr.txt
- baseline-0.13.0/atlas-apply-operator.txt
- baseline-0.13.0/atlas-catalog-ephemeral.json
- baseline-0.13.0/atlas-catalog-operator.json
- baseline-0.13.0/atlas-community-composition.stderr.txt
- baseline-0.13.0/atlas-community-composition.txt
- baseline-0.13.0/atlas-history-ephemeral.json
- baseline-0.13.0/atlas-history-operator.json
- baseline-0.13.0/atlas-status-ephemeral.stderr.txt
- baseline-0.13.0/atlas-status-ephemeral.txt
- baseline-0.13.0/atlas-status-operator.stderr.txt
- baseline-0.13.0/atlas-status-operator.txt
- baseline-0.13.0/atlas-validate-ephemeral.stderr.txt
- baseline-0.13.0/atlas-validate-ephemeral.txt
- baseline-0.13.0/atlas-validate-operator.stderr.txt
- baseline-0.13.0/atlas-validate-operator.txt
- baseline-0.13.0/atlas-version.stderr.txt
- baseline-0.13.0/atlas-version.txt
- baseline-0.13.0/authoring-outcome.json
- baseline-0.13.0/command-records.json
- baseline-0.13.0/compat-version.stderr.txt
- baseline-0.13.0/compat-version.txt
- baseline-0.13.0/composition-apply.stderr.txt
- baseline-0.13.0/composition-apply.txt
- baseline-0.13.0/configured-partitioned-noop.stderr.txt
- baseline-0.13.0/configured-partitioned-noop.txt
- baseline-0.13.0/cutover-ordinary.sql
- baseline-0.13.0/cutover-state.json
- baseline-0.13.0/ephemeral-atlas-continue-first.stderr.txt
- baseline-0.13.0/ephemeral-atlas-continue-first.txt
- baseline-0.13.0/ephemeral-atlas-continue-second.stderr.txt
- baseline-0.13.0/ephemeral-atlas-continue-second.txt
- baseline-0.13.0/ephemeral-atlas-cross-status-final.stderr.txt
- baseline-0.13.0/ephemeral-atlas-cross-status-final.txt
- baseline-0.13.0/ephemeral-atlas-cross-status-first.stderr.txt
- baseline-0.13.0/ephemeral-atlas-cross-status-first.txt
- baseline-0.13.0/ephemeral-atlas-history-cross-read.stderr.txt
- baseline-0.13.0/ephemeral-atlas-history-cross-read.txt
- baseline-0.13.0/ephemeral-hash-first.stderr.txt
- baseline-0.13.0/ephemeral-hash-first.txt
- baseline-0.13.0/ephemeral-hash-second.stderr.txt
- baseline-0.13.0/ephemeral-hash-second.txt
- baseline-0.13.0/ephemeral-ptah-continue-first.stderr.txt
- baseline-0.13.0/ephemeral-ptah-continue-first.txt
- baseline-0.13.0/ephemeral-ptah-continue-second.stderr.txt
- baseline-0.13.0/ephemeral-ptah-continue-second.txt
- baseline-0.13.0/ephemeral-ptah-cross-status-final.stderr.txt
- baseline-0.13.0/ephemeral-ptah-cross-status-final.txt
- baseline-0.13.0/ephemeral-ptah-cross-status-first.stderr.txt
- baseline-0.13.0/ephemeral-ptah-cross-status-first.txt
- baseline-0.13.0/ephemeral-ptah-history-cross-read.stderr.txt
- baseline-0.13.0/ephemeral-ptah-history-cross-read.txt
- baseline-0.13.0/ephemeral-ptah-rehash-unchanged.stderr.txt
- baseline-0.13.0/ephemeral-ptah-rehash-unchanged.txt
- baseline-0.13.0/ephemeral-schema-apply.stderr.txt
- baseline-0.13.0/ephemeral-schema-apply.txt
- baseline-0.13.0/ephemeral-schema-compare.stderr.txt
- baseline-0.13.0/ephemeral-schema-compare.txt
- baseline-0.13.0/operator-atlas-continue-first.stderr.txt
- baseline-0.13.0/operator-atlas-continue-first.txt
- baseline-0.13.0/operator-atlas-continue-second.stderr.txt
- baseline-0.13.0/operator-atlas-continue-second.txt
- baseline-0.13.0/operator-atlas-cross-status-final.stderr.txt
- baseline-0.13.0/operator-atlas-cross-status-final.txt
- baseline-0.13.0/operator-atlas-cross-status-first.stderr.txt
- baseline-0.13.0/operator-atlas-cross-status-first.txt
- baseline-0.13.0/operator-atlas-history-cross-read.stderr.txt
- baseline-0.13.0/operator-atlas-history-cross-read.txt
- baseline-0.13.0/operator-hash-first.stderr.txt
- baseline-0.13.0/operator-hash-first.txt
- baseline-0.13.0/operator-hash-second.stderr.txt
- baseline-0.13.0/operator-hash-second.txt
- baseline-0.13.0/operator-original-history-composition-diff.stderr.txt
- baseline-0.13.0/operator-original-history-composition-diff.txt
- baseline-0.13.0/operator-ptah-continue-first.stderr.txt
- baseline-0.13.0/operator-ptah-continue-first.txt
- baseline-0.13.0/operator-ptah-continue-second.stderr.txt
- baseline-0.13.0/operator-ptah-continue-second.txt
- baseline-0.13.0/operator-ptah-cross-status-final.stderr.txt
- baseline-0.13.0/operator-ptah-cross-status-final.txt
- baseline-0.13.0/operator-ptah-cross-status-first.stderr.txt
- baseline-0.13.0/operator-ptah-cross-status-first.txt
- baseline-0.13.0/operator-ptah-history-cross-read.stderr.txt
- baseline-0.13.0/operator-ptah-history-cross-read.txt
- baseline-0.13.0/operator-ptah-rehash-unchanged.stderr.txt
- baseline-0.13.0/operator-ptah-rehash-unchanged.txt
- baseline-0.13.0/original-migration-hashes.json
- baseline-0.13.0/partition-state-after-application.json
- baseline-0.13.0/partition-state-after-apply.json
- baseline-0.13.0/partition-state-before.json
- baseline-0.13.0/partitioned-additive-apply.stderr.txt
- baseline-0.13.0/partitioned-additive-apply.txt
- baseline-0.13.0/partitioned-additive-compare.stderr.txt
- baseline-0.13.0/partitioned-additive-compare.txt
- baseline-0.13.0/partitioned-additive-plan.stderr.txt
- baseline-0.13.0/partitioned-additive-plan.txt
- baseline-0.13.0/partitioned-after-application-compare.stderr.txt
- baseline-0.13.0/partitioned-after-application-compare.txt
- baseline-0.13.0/partitioned-final-inspect.stderr.txt
- baseline-0.13.0/partitioned-final-inspect.txt
- baseline-0.13.0/partitioned-final-noop-plan.stderr.txt
- baseline-0.13.0/partitioned-final-noop-plan.txt
- baseline-0.13.0/populated-ordinary-partition-plan.stderr.txt
- baseline-0.13.0/populated-ordinary-partition-plan.txt
- baseline-0.13.0/postgres-version.txt
- baseline-0.13.0/ptah-apply-ephemeral.stderr.txt
- baseline-0.13.0/ptah-apply-ephemeral.txt
- baseline-0.13.0/ptah-apply-operator.stderr.txt
- baseline-0.13.0/ptah-apply-operator.txt
- baseline-0.13.0/ptah-catalog-ephemeral.json
- baseline-0.13.0/ptah-catalog-operator.json
- baseline-0.13.0/ptah-history-ephemeral.json
- baseline-0.13.0/ptah-history-operator.json
- baseline-0.13.0/ptah-status-ephemeral.stderr.txt
- baseline-0.13.0/ptah-status-ephemeral.txt
- baseline-0.13.0/ptah-status-operator.stderr.txt
- baseline-0.13.0/ptah-status-operator.txt
- baseline-0.13.0/ptah-version.stderr.txt
- baseline-0.13.0/ptah-version.txt
- baseline-0.13.0/reproduction/handover.py
- baseline-0.13.0/reproduction/reference.py
- baseline-0.13.0/reproduction/sequence.md
- baseline-0.13.0/versions.json
- baseline-master/cutover-state.json
- baseline-master/ordinary-to-partition.txt
- baseline-master/original-operator-diff.txt
- baseline-master/postgres-version.txt
- baseline-master/version.txt
- command-records.json
- commands/apply-plan.txt
- commands/apply.txt
- commands/authoring.txt
- commands/plan.txt
- commands/unchanged.txt
- desired/ephemeral-ent-identifiers.hcl
- desired/ephemeral-ent.hcl
- desired/external-additive.sql
- desired/operator-ent-identifiers.hcl
- desired/operator-ent.hcl
- diagrams/ownership.svg
- handover/ephemeral/20261020000000_compat_probe_one.sql
- handover/ephemeral/20261020000001_compat_probe_two.sql
- handover/operator/20261020000000_compat_probe_one.sql
- handover/operator/20261020000001_compat_probe_two.sql
- histories/ephemeral/20260304184636_initial.sql
- histories/ephemeral/atlas.sum
- histories/operator/20250228224813_baseline.sql
- histories/operator/20250306203211_fix_atlas.sql
- histories/operator/20250306211926_transfer_leaf_index.sql
- histories/operator/20250306212533_key_tweak_proof.sql
- histories/operator/20250314023222_tree_node_status_index.sql
- histories/operator/20250314072347_add_token_confirmed_withdraw_hash.sql
- histories/operator/20250318090735_add_token_leaf_network.sql
- histories/operator/20250326231543_preimage.sql
- histories/operator/20250410173942_base_txid_non_null.sql
- histories/operator/20250410212454_tree_add_vout.sql
- histories/operator/20250410225108_tree_vout_non_null.sql
- histories/operator/20250410234336_tree_base_txid_vout_unique.sql
- histories/operator/20250415010858_new_renamed_token_ents.sql
- histories/operator/20250416174623_store_custom_uuid_for_deposit.sql
- histories/operator/20250417195500_static_deposit_address.sql
- histories/operator/20250422170012_tree_node_signing_keyshare_index.sql
- histories/operator/20250422224921_token_transaction_add_coordinator_public_key.sql
- histories/operator/20250424192735_message_in_signing_nonce.sql
- histories/operator/20250425184940_token_transaction_remove_token_mint_unique_constraints.sql
- histories/operator/20250501004723_utxo.sql
- histories/operator/20250502070118_add.sql
- histories/operator/20250502221556_add.sql
- histories/operator/20250505204900_make.sql
- histories/operator/20250509172528_add.sql
- histories/operator/20250513004715_utxo_pk_script.sql
- histories/operator/20250513164324_utxo_swap.sql
- histories/operator/20250513231626_add.sql
- histories/operator/20250514043352_add.sql
- histories/operator/20250515082408_token_transaction_add_expiry_time.sql
- histories/operator/20250515160855_utxo_swap_unique_on_created.sql
- histories/operator/20250515185504_utxo_swap_operator_pubkey.sql
- histories/operator/20250528190000_utxo_swap_requested_transfer_id.sql
- histories/operator/20250529014052_utxo_swap_spend_tx_signing_result.sql
- histories/operator/20250605020436_gossip.sql
- histories/operator/20250613233831_create_token_ent.sql
- histories/operator/20250618193002_add_payment_intent_ent.sql
- histories/operator/20250623230233_add_token_identifier_l1_token_create_and_update_decimals.sql
- histories/operator/20250625201817_add_token_partial_revocation_secret_share.sql
- histories/operator/20250701005100_improve_token_outputs_indexing.sql
- histories/operator/20250701174025_token_output_optional_token_public_key.sql
- histories/operator/20250702234834_add_l1_token_create_relation.sql
- histories/operator/20250703063610_token_transfer_preemption.sql
- histories/operator/20250703173513_deposit_address_keyshare_index.sql
- histories/operator/20250703212910_add_mint_indexes.sql
- histories/operator/20250703234801_token_output_vout_index.sql
- histories/operator/20250708013343_add_token_transaction_schema_version.sql
- histories/operator/20250708181653_watchtower.sql
- histories/operator/20250709190600_add_token_transaction_peer_signatures.sql
- histories/operator/20250709235544_reserved_entity_dkg_key.sql
- histories/operator/20250714210749_remove_token_entities.sql
- histories/operator/20250717203510_add_token_create_edge_to_token_outputs.sql
- histories/operator/20250722181957_freeze_token_create.sql
- histories/operator/20250724224859_token_create_remove_issuer_public_key_unique_constraint.sql
- histories/operator/20250805235200_signing_keyshare_set_old_ids_in_use.sql
- histories/operator/20250806203329_idx_signing_keyshares_coordinator_available.sql
- histories/operator/20250806230726_signing_commitment.sql
- histories/operator/20250812174916_add_spark_invoice_table.sql
- histories/operator/20250818153936_add_receiver_public_key_to_spark_invoice_table.sql
- histories/operator/20250820215840_token_make_token_created_and_ids_required.sql
- histories/operator/20250821030436_deposit_address_proofs.sql
- histories/operator/20250822102804_add_token_foreign_key_indexes.sql
- histories/operator/20250822224608_add_expiry_time_and_status_token_transaction_index.sql
- histories/operator/20250822232855_token_add_m2m_output_relation.sql
- histories/operator/20250822233816_deposit_address_network.sql
- histories/operator/20250825231634_make_token_create_required_for_freeze.sql
- histories/operator/20250826171232_reshuffle_token_output_indices.sql
- histories/operator/20250828111417_preimageindex.sql
- histories/operator/20250829164554_drop_duplicate_token_create_index.sql
- histories/operator/20250829214835_add_update_time_token_transaction_index.sql
- histories/operator/20250902221055_add_spark_invoice_to_sats_transfer.sql
- histories/operator/20250904025400_backfill_deposit_address_network.sql
- histories/operator/20250904025519_deposit_address_is_static_default.sql
- histories/operator/20250910001110_add_signing_nonce_retry_fingerprint.sql
- histories/operator/20250910182211_migrate_spark_invoice_edge_to_field_on_transfer.sql
- histories/operator/20250910182343_add_partial_indexes_for_spark_invoices_to_transfer.sql
- histories/operator/20250911003358_additional_index_on_output_created_token_transaction.sql
- histories/operator/20250911204906_tree_node_txids.sql
- histories/operator/20250912194301_tree_node_txids_indexes.sql
- histories/operator/20250922200645_add_counter_transfer.sql
- histories/operator/20250922213849_transfer_many_counter_transfers.sql
- histories/operator/20250925185431_pending_transfer.sql
- histories/operator/20250929172247_deposit_address_tree_edge.sql
- histories/operator/20251015193208_transfer_leaf_txids.sql
- histories/operator/20251021202107_wallet_settings.sql
- histories/operator/20251021210100_add_timelocks_transfer_leaf.sql
- histories/operator/20251024001036_add_numeric_amount_to_token_output.sql
- histories/operator/20251024235920_dkg_key_confirmation.sql
- histories/operator/20251105164910_transfer_idx_recv_status_update.sql
- histories/operator/20251105225732_transfer_idx_recv_status_create.sql
- histories/operator/20251107225120_transfer_add_network.sql
- histories/operator/20251107230525_tree_node_add_network.sql
- histories/operator/20251114162900_event_messages_outbox.sql
- histories/operator/20251114220255_tree_node_transfer_network_idx.sql
- histories/operator/20251114232945_tree_node_network_non_null.sql
- histories/operator/20251116052840_transfer_network_non_null.sql
- histories/operator/20251117232507_add_master_public_key_to_wallet_setting.sql
- histories/operator/20251119031032_sender_preimage_request.sql
- histories/operator/20251119202509_validity_duration.sql
- histories/operator/20251120200218_additional_index_on_output_created_token_transaction.sql
- histories/operator/20251120212635_replace_update_time_with_create_time.sql
- histories/operator/20251121203834_query_token_transaction_param_indices.sql
- histories/operator/20251206031312_denormalize_token_output_created_transaction_finalized_hash.sql
- histories/operator/20251206032525_require_token_outputs_created_transaction_finalized_hash_and_edge.sql
- histories/operator/20251212211636_add_extra_metadata_to_token_metadata.sql
- histories/operator/20251215225231_add_unique_constraint_preimage_request.sql
- histories/operator/20251217211236_add_transfers_sender_status_index.sql
- histories/operator/20251219000700_add_key_tweaked_height.sql
- histories/operator/20251223194229_drop_unused_signing_nonce_field_message.sql
- histories/operator/20260105231014_backfill_key_tweaked_height.sql
- histories/operator/20260106195419_availability_confirmed_at.sql
- histories/operator/20260127163507_add_possession_signature_field.sql
- histories/operator/20260127163508_token_withdrawal_watchtower.sql
- histories/operator/20260129033823_tree_node_confirmation_heights_index.sql
- histories/operator/20260130000000_add_token_output_withdrawal_signatures.sql
- histories/operator/20260131000000_add_token_justice_transaction.sql
- histories/operator/20260201000000_remove_confirmed_withdraw_block_hash.sql
- histories/operator/20260201000001_create_idempotency_keys_table.sql
- histories/operator/20260202170019_transfers_status_expiry_type_index.sql
- histories/operator/20260203192028_add_instant_deposit_utxoswap_fields.sql
- histories/operator/20260206000001_backfill_utxo_swap_value.sql
- histories/operator/20260207012146_utxo_swap_value_required.sql
- histories/operator/20260209230747_add_transfer_sender_and_transfer_receiver.sql
- histories/operator/20260211201949_cancel_expired_transfer_indexes.sql.sql
- histories/operator/20260212191458_add_transfer_leaf_edges_sender_and_receiver.sql
- histories/operator/20260213000000_add_global_pause_support.sql
- histories/operator/20260217000000_make_utxo_optional_on_creation.sql
- histories/operator/20260217000001_validate_utxo_swap_fk.sql
- histories/operator/20260217001001_add_tree_utxo_edge.sql
- histories/operator/20260217002001_add_multisig_config.sql
- histories/operator/20260224193220_add_requested_secondary_transfer_id.sql
- histories/operator/20260225010855_update_time_indexes.sql
- histories/operator/20260317200548_add_utxoswap_deposit_address_value_unique_index.sql
- histories/operator/20260318000001_make_mint_issuer_signature_optional.sql
- histories/operator/20260326220136_add_identity_to_idempotency_keys.sql
- histories/operator/20260327223914_add_partner_table.sql
- histories/operator/20260330000000_add_signing_keyshare_secret_version.sql
- histories/operator/20260331175515_readd_old_idempotency_index.sql
- histories/operator/20260331232749_remove_secret_version.sql
- histories/operator/20260331233749_add_execute_before_to_token_transaction.sql
- histories/operator/20260407185429_update_partner_table.sql
- histories/operator/20260407195137_create_transfer_partner_table.sql
- histories/operator/20260407200000_add_back_secret_version.sql
- histories/operator/20260408173857_drop_old_idempotency_index.sql
- histories/operator/20260409180045_add_mimo_query_composite_indexes.sql
- histories/operator/20260413161804_create_preimage_share_partner_table.sql
- histories/operator/20260415020548_add_transfer_leaf_receiver_sender_id_indexes.sql
- histories/operator/20260415021548_add_block_hash_to_block_height.sql
- histories/operator/20260420201502_refactor_partner_keys.sql
- histories/operator/20260421053020_make_partner_fields_nullable.sql
- histories/operator/20260421061453_drop_deprecated_partner_fields.sql
- histories/operator/20260421181908_add_deposit_address_partner.sql
- histories/operator/20260422014359_add_flow_execution.sql
- histories/operator/20260422212701_drop_deposit_address_partner.sql
- histories/operator/20260422220128_add_partial_indexes_for_query_rewrite.sql
- histories/operator/20260427231947_drop_utxoswap_expiry_time.sql
- histories/operator/20260428000000_add_partial_index_for_no_pubkey_stuck.sql
- histories/operator/20260428215802_add_receiver_claim_pending_partial_index.sql
- histories/operator/20260430013004_add_pending_sender_pubkey_partial_index.sql
- histories/operator/20260501185133_drop_legacy_pending_pubkey_time_index.sql
- histories/operator/20260501186133_add_flow_execution_prepare_payload.sql
- histories/operator/20260506203858_add_outgoing_in_flight_sender_partial.sql
- histories/operator/20260506224522_sp_three_zero_five_zero_denormalize_transfer_type.sql
- histories/operator/20260511180916_add_transfer_type_composite_indexes.sql
- histories/operator/20260512233608_transfer_type_not_null.sql
- histories/operator/20260514230656_signing_keyshare_backfill_idx.sql
- histories/operator/20260519220626_add_receiver_initiated_partial_index.sql
- histories/operator/20260519221626_token_transaction_terminal_partial_hash_unique.sql
- histories/operator/20260601201348_add_signing_keyshares_clearable_partial_index.sql
- histories/operator/20260603172550_add_partner_key_basic_auth_secret_hash.sql
- histories/operator/20260630222737_add_preimage_request_receiver_idx.sql
- histories/operator/20260706234640_add_tree_nodes_owner_status_network_id_idx.sql
- histories/operator/20260707224444_add_chain_action_height.sql
- histories/operator/20260710200644_add_utxoswap_consensus_managed.sql
- histories/operator/20260721050708_add_tree_nodes_status_network_update_time_idx.sql
- histories/operator/20260724165849_index_to_transfer_receivers_occupancy.sql
- histories/operator/20260727234446_add_transfers_spark_invoice_id_index.sql
- histories/operator/20260727235446_add_transfer_leaf_signature_scheme.sql
- histories/operator/20260806001405_instant_ssp_signature_unique.sql
- histories/operator/20260810120000_extend_treenode_occupancy_idx_create_time.sql
- histories/operator/20260813230000_add_token_allowances.sql
- histories/operator/20260818221238_extend_treenode_occupancy_idx_parent.sql
- histories/operator/20260818222238_add_token_allowance_flow_execution_id.sql
- histories/operator/20260818223238_add_token_allowance_revoke_version.sql
- histories/operator/20260818224238_add_token_allowance_spends.sql
- histories/operator/20260818225238_add_token_allowance_spend_allowance_status_index.sql
- histories/operator/20260818226238_add_unlimited_flags_to_token_allowances.sql
- histories/operator/20260818227238_delegation_grants.sql
- histories/operator/atlas.sum
- inputs/additive-statement.sql
- inputs/composition-excerpt.hcl
- inputs/entrypoint.sh.txt
- inputs/ephemeral-atlas-original.hcl
- inputs/external-original.sql
- inputs/mise.toml.txt
- inputs/operator-atlas-original.hcl
- inputs/signingnonce_extension.go
- inputs/spark-ent-README.md
- inputs/spark-go.mod
- inputs/spark-mise.toml.txt
- integration/docker-version.txt
- integration/integration-patch-check.txt
- integration/mise-version.txt
- integration/spark-db-tests.json
- integration/spark-ptah.patch.txt
- measured/additive-plan-public.json
- measured/application-create-partitions.stderr.txt
- measured/application-create-partitions.txt
- measured/application-purge-and-create.stderr.txt
- measured/application-purge-and-create.txt
- measured/atlas-apply-ephemeral.stderr.txt
- measured/atlas-apply-ephemeral.txt
- measured/atlas-apply-operator.stderr.txt
- measured/atlas-apply-operator.txt
- measured/atlas-catalog-ephemeral.json
- measured/atlas-catalog-operator.json
- measured/atlas-history-ephemeral.json
- measured/atlas-history-operator.json
- measured/atlas-status-ephemeral.stderr.txt
- measured/atlas-status-ephemeral.txt
- measured/atlas-status-operator.stderr.txt
- measured/atlas-status-operator.txt
- measured/atlas-validate-ephemeral.stderr.txt
- measured/atlas-validate-ephemeral.txt
- measured/atlas-validate-operator.stderr.txt
- measured/atlas-validate-operator.txt
- measured/atlas-version.stderr.txt
- measured/atlas-version.txt
- measured/authored-ephemeral-apply.txt
- measured/authored-ephemeral-atlas-status.txt
- measured/authored-ephemeral-diff.txt
- measured/authored-ephemeral-followup-diff.txt
- measured/authored-ephemeral-original-apply.txt
- measured/authored-ephemeral-state.json
- measured/authored-operator-apply.txt
- measured/authored-operator-atlas-status.txt
- measured/authored-operator-diff.txt
- measured/authored-operator-followup-diff.txt
- measured/authored-operator-original-apply.txt
- measured/authored-operator-state.json
- measured/commands.json
- measured/compat-version.stderr.txt
- measured/compat-version.txt
- measured/composition-apply.stderr.txt
- measured/composition-apply.txt
- measured/composition-commands.json
- measured/configured-partitioned-noop.stderr.txt
- measured/configured-partitioned-noop.txt
- measured/cutover-state.json
- measured/docker-runner-apply.txt
- measured/docker-runner-state.json
- measured/ephemeral-atlas-continue-first.stderr.txt
- measured/ephemeral-atlas-continue-first.txt
- measured/ephemeral-atlas-continue-second.stderr.txt
- measured/ephemeral-atlas-continue-second.txt
- measured/ephemeral-atlas-cross-status-final.stderr.txt
- measured/ephemeral-atlas-cross-status-final.txt
- measured/ephemeral-atlas-cross-status-first.stderr.txt
- measured/ephemeral-atlas-cross-status-first.txt
- measured/ephemeral-atlas-history-cross-read.stderr.txt
- measured/ephemeral-atlas-history-cross-read.txt
- measured/ephemeral-authoring-commands.json
- measured/ephemeral-hash-first.stderr.txt
- measured/ephemeral-hash-first.txt
- measured/ephemeral-hash-second.stderr.txt
- measured/ephemeral-hash-second.txt
- measured/ephemeral-ptah-continue-first.stderr.txt
- measured/ephemeral-ptah-continue-first.txt
- measured/ephemeral-ptah-continue-second.stderr.txt
- measured/ephemeral-ptah-continue-second.txt
- measured/ephemeral-ptah-cross-status-final.stderr.txt
- measured/ephemeral-ptah-cross-status-final.txt
- measured/ephemeral-ptah-cross-status-first.stderr.txt
- measured/ephemeral-ptah-cross-status-first.txt
- measured/ephemeral-ptah-history-cross-read.stderr.txt
- measured/ephemeral-ptah-history-cross-read.txt
- measured/ephemeral-ptah-rehash-unchanged.stderr.txt
- measured/ephemeral-ptah-rehash-unchanged.txt
- measured/ephemeral-schema-apply.stderr.txt
- measured/ephemeral-schema-apply.txt
- measured/ephemeral-schema-compare.stderr.txt
- measured/ephemeral-schema-compare.txt
- measured/export-ephemeral.stderr.txt
- measured/export-ephemeral.txt
- measured/export-operator.stderr.txt
- measured/export-operator.txt
- measured/mise-commands.json
- measured/mise-ptah-diff.txt
- measured/mise-ptah-ephemeral-diff.txt
- measured/mise-ptah-ephemeral-hash.txt
- measured/mise-ptah-hash.txt
- measured/mise-task-state.json
- measured/operator-atlas-continue-first.stderr.txt
- measured/operator-atlas-continue-first.txt
- measured/operator-atlas-continue-second.stderr.txt
- measured/operator-atlas-continue-second.txt
- measured/operator-atlas-cross-status-final.stderr.txt
- measured/operator-atlas-cross-status-final.txt
- measured/operator-atlas-cross-status-first.stderr.txt
- measured/operator-atlas-cross-status-first.txt
- measured/operator-atlas-history-cross-read.stderr.txt
- measured/operator-atlas-history-cross-read.txt
- measured/operator-hash-first.stderr.txt
- measured/operator-hash-first.txt
- measured/operator-hash-second.stderr.txt
- measured/operator-hash-second.txt
- measured/operator-ptah-continue-first.stderr.txt
- measured/operator-ptah-continue-first.txt
- measured/operator-ptah-continue-second.stderr.txt
- measured/operator-ptah-continue-second.txt
- measured/operator-ptah-cross-status-final.stderr.txt
- measured/operator-ptah-cross-status-final.txt
- measured/operator-ptah-cross-status-first.stderr.txt
- measured/operator-ptah-cross-status-first.txt
- measured/operator-ptah-history-cross-read.stderr.txt
- measured/operator-ptah-history-cross-read.txt
- measured/operator-ptah-rehash-unchanged.stderr.txt
- measured/operator-ptah-rehash-unchanged.txt
- measured/original-migration-hashes.json
- measured/partition-mismatch-key.stderr.txt
- measured/partition-mismatch-key.txt
- measured/partition-mismatch-method.stderr.txt
- measured/partition-mismatch-method.txt
- measured/partition-mismatch-removed.stderr.txt
- measured/partition-mismatch-removed.txt
- measured/partition-state-after-application.json
- measured/partition-state-after-apply.json
- measured/partition-state-before.json
- measured/partitioned-additive-apply.stderr.txt
- measured/partitioned-additive-apply.txt
- measured/partitioned-additive-compare.stderr.txt
- measured/partitioned-additive-compare.txt
- measured/partitioned-additive-plan.stderr.txt
- measured/partitioned-additive-plan.txt
- measured/partitioned-after-application-compare.stderr.txt
- measured/partitioned-after-application-compare.txt
- measured/partitioned-final-noop-plan.stderr.txt
- measured/partitioned-final-noop-plan.txt
- measured/populated-ordinary-partition-plan.stderr.txt
- measured/populated-ordinary-partition-plan.txt
- measured/postgres-version.txt
- measured/ptah-apply-ephemeral.stderr.txt
- measured/ptah-apply-ephemeral.txt
- measured/ptah-apply-operator.stderr.txt
- measured/ptah-apply-operator.txt
- measured/ptah-catalog-ephemeral.json
- measured/ptah-catalog-operator.json
- measured/ptah-history-ephemeral.json
- measured/ptah-history-operator.json
- measured/ptah-status-ephemeral.stderr.txt
- measured/ptah-status-ephemeral.txt
- measured/ptah-status-operator.stderr.txt
- measured/ptah-status-operator.txt
- measured/ptah-version.stderr.txt
- measured/ptah-version.txt
- provider/ephemeral.hcl
- provider/main.go
- provider/operator.hcl
- README.md
- reproduction/docker-qualification.py
- reproduction/mise-qualification.py
- reproduction/partition-probe.go
- reproduction/qualified-apply-authored.py
- reproduction/qualified-author-operator.py
- reproduction/qualified-composition-finish.py
- reproduction/qualified-composition.py
- reproduction/qualified-finish-ephemeral.py
- reproduction/qualified-handover.py
- reproduction/qualified-reference.py
- SPARK-LICENSE.txt
- verified.json
- verify-records.py
- versions.json