{
  "recorded_at_utc": "2026-09-30T11:13:49.424223+00:00",
  "scope": "Isolated PostgreSQL schema verification in a fork; no application, embedding-provider, Kubernetes, or production deployment.",
  "upstream": {
    "repository": "https://github.com/tomturing/hci-troubleshoot-platform",
    "commit": "4ca96cbf27f1d8d24c63429a596849a97ab9011e",
    "input_sha256": {
      "database/desired_schema.sql": "fc13f5ebb4bd4a97e228ea32fcbed94b39d2fd35b4e35a3636e655b83ae21d36",
      "database/desired_extras.sql": "aeb6612e71eeff5bed946d1365efcbd011425bb208e1b1e6c6c91077253694db",
      "database/data-migrations/035_bundle_factory_version_metadata.sql": "a5f9b41b4b13d99a9ce97506b8b2d402618ac2c29b8dbeb0f4b40f05c7db13d6"
    }
  },
  "ptah": {
    "version": "0.11.1",
    "release": "https://github.com/stokaro/ptah/releases/tag/v0.11.1",
    "commit": "36bd3a4f7e437eba3de6c979274aa5e145408b3f",
    "go": "go1.27.1",
    "platform": "linux/amd64",
    "release_archive_sha256": "5c0a2bfb297fa9dec4305e76a474376b98a10ddd1a9fa4301ff2043ed3382d29",
    "release_checksums_verified": true,
    "compat_binary_sha256": "8d0b975cc67fb617dde3fa954091052c3697f384fd7ad22d45919e03c5c6c1b7"
  },
  "execution": {
    "docker_context": "remote-dev-container",
    "postgres": "15.19 (Debian 15.19-1.pgdg12+2)",
    "postgres_image": [
      "pgvector/pgvector@sha256:a947c45cdc5906a1bc951f20a8709e321256343ee0f251e4ae00b5e7def4e6da"
    ],
    "verification_image_id": "sha256:4c3ac0e01880efceebcacca6b294c23f5e4e281950782c6a0c2f0b2c219d0522",
    "user": "65534:65534",
    "started_at_utc": "2026-09-30T11:07:57.03422954Z",
    "finished_at_utc": "2026-09-30T11:08:25.021465978Z",
    "exit_code": 0
  },
  "verified_input_sha256": {
    "Dockerfile.migrations": "dd48cd40ecd37bf5bad4642e2f5a8c25cbd617fc1121c8228bf687e62c5cac43",
    "database/desired_schema.sql": "ab8514ee7ebb260fa59574c77f0f8980cb4c1a06eb382b0242339aa1666a7168",
    "scripts/db-migrate.sh": "84f1ce2f751274a576d527e1e8aed7e8dffce3bd2613b0babb97e11eae4708be",
    "scripts/migration-runner.sh": "0aa37fe59f1f938fa6aa7463890595092fdadee07c09859d1cb5e7745b7ea611",
    "scripts/verify-ptah-schema.sh": "879695d5397faddf86985e636b5f1cc6b2afe29db37dcce170d3e6e6bebd383f",
    "database/tests/ptah-schema.sql": "5c61ddd0f23370e87bd0e0c90051705e57ff6b29bd1a5c5838a318020cfad8ef",
    "database/tests/ptah-upgrade.sql": "c761ace96ee45d3d85bbea1708bef64563cee70d0101fd4a56fe3eb899f230e8"
  },
  "data_migration_sha256": {
    "database/data-migrations/001_update_signals_prompt_stage.sql": "805e0d2d6ca64ede9ea138cf522c819eb5b8e09f492a3f857975145bcad0f28c",
    "database/data-migrations/002_update_signals_prompt_template.sql": "e0d7a612f16b785fbd649fcfa6e752719ead4e313312802ca9e06e7c709cea86",
    "database/data-migrations/003_rename_dot_tools_to_snake_case.sql": "b2d1d195a4d4bd959c16d0d34f223db3ad1b938d4aaca9453ed21b6c075414d7",
    "database/data-migrations/004_delete_unused_tools.sql": "d70e0db24a8ce0c4b6d63e9a28f673c384d2f4c91ea07d9d6f04fcf83599b03a",
    "database/data-migrations/005_bridge_execution_logs.sql": "86b66ff4b17fd222f70afbf303df926894f388335ec06a76b02bae3ba6ac89b5",
    "database/data-migrations/006_align_bridge_execution_logs_schema.sql": "e33def53fc023905fa77e92d0b6649cacb5e6d9ced8b629bb0b4aa2d172153c5",
    "database/data-migrations/007_extend_bridge_execution_logs_table.sql": "75e0fdf89f44cbfa98bdbd6967a0760cabafc269a46c6802e049541b2a9cb24a",
    "database/data-migrations/008_update_kbd_extract_signals_v2_prompt.sql": "f24bafbc8592d0b9c61ef8201e6dc3c9df0c95c4d31ff384d29ccbee79a5cba5",
    "database/data-migrations/009_fix_kbd_extract_signals_v2_sig004_qfk_system.sql": "9f533cc5eff73f71d83c772ca042a98c47e346ed440081c703ee2162629fcd5d",
    "database/data-migrations/010_flatten_v1_signal_fields.sql": "366b9603a27879eb3c3ed2f09b917bdf8146f93b8faf08b9bb9c3bfc69bdd69a",
    "database/data-migrations/011_cleanup_kbd_extract_signals_v1_prompt.sql": "960ac141508b1753844dfdd3fe471fef1a60ddb11051661e35a25164ac167797",
    "database/data-migrations/012_normalize_dynamic_resource_usage_status.sql": "decba8473c115aaea80f2b420d3f691049aff890d3bc5b5a24d39511022fce18",
    "database/data-migrations/013_add_qfk_text_extract_prompt_rules.sql": "7cd88177fcd1af95918a8ec0590109817d1c15c0d629968958fa5a301397626a",
    "database/data-migrations/014_add_image_evidence_and_vision_quality_contract.sql": "6b4f67d0ce469a34143b4bd2db4c4118f95c685f07701aaac57d48e1990d720e",
    "database/data-migrations/015_align_signal_and_vision_prompts_to_current_contract.sql": "91e0fdd154054876c25f474c3935f280e5a73b5245c0f9763f31b2126af1666a",
    "database/data-migrations/016_escape_declarative_extract_prompt_literals.sql": "053e89482ebeaaabd4407028435651696991babb4f505c9d7ba4085c4e84b5fe",
    "database/data-migrations/017_align_matcher_prompt_with_extract_contract.sql": "9da69484bdf46eaccdef31355d08eadecb4f90881b1aa74b6d96e7cb3baf68fd",
    "database/data-migrations/018_align_qfk_system_prompt_command_model.sql": "cba55d7fda1f69800281f429c4034134a3cf644cb847baeac01968ee4d074747",
    "database/data-migrations/019_align_task_and_qfk_producer_prompt_quality.sql": "384039935ddd8e662abbc382c924f9cae21eda74eeb345dd6c4ba1ebb923926b",
    "database/data-migrations/020_enforce_kbd_signal_read_only_boundary.sql": "7c11ea81d6307ba54899d164f31bd9b57c946f0a45f371eb037049cdad8dcc20",
    "database/data-migrations/021_enforce_signal_catalog_and_matcher_quality.sql": "201b1a347b39674fd1c3a52ffaf6ec44b06c8685762d4c556883791b63ab5fcf",
    "database/data-migrations/022_unify_kbd_signal_filter_extract_output.sql": "792c6fc54a53637076a411376c023237975bfe03edb8a1809e5e56332a0fc489",
    "database/data-migrations/023_align_qkv_keyword_type_contract.sql": "43d7b9dad57162827a35a091455b8531a71512001e123c3bacbff1192b692b99",
    "database/data-migrations/024_fix_kbd_23821_scope_and_matcher.sql": "8f8532bbf117144560ae1194b6da212740c1357341f1642df52e456fbbf826ee",
    "database/data-migrations/026_align_line_count_extract_contract.sql": "437e536b0884cc4c0c92a12af91fe154dd52331b2604cb4cfa66013fb21667e1",
    "database/data-migrations/027_align_qfk_tool_contracts.sql": "193c3c93ab72a79092b353ecaa8f66dbc09ee5bd7f8764b4dbd9fb08b17c69bc",
    "database/data-migrations/028_escape_line_count_extract_prompt_literal.sql": "53adcfaa27db56299e0fa360628e0b4465c1673daccc8018505a83ebe46fe14e",
    "database/data-migrations/029_restore_kbd_23821_missing_ready_expectation.sql": "8377231eabc55e94bf3ba298daa53ac929a861c58fc0cea1d98b7bb6f771b6ca",
    "database/data-migrations/030_add_vm_console_capture.sql": "34a5fadbf018f53c62badde9250be59662b079928d0bcde406a7abf98e653aef",
    "database/data-migrations/031_add_vm_console_audit_event.sql": "048250d508f69423072f14e59a2e38192f1ff232e49ec53499a669f172356c91",
    "database/data-migrations/032_add_effect_verification.sql": "8c784fe7387d7ea8d9139a89329501ffbcc570cc8d18e914803980d316846436",
    "database/data-migrations/033_backfill_kbd_package_from_legacy.sql": "37875e226a4dc4a546c3f5f49d6d53405cfe722e6ce4194c8d3af5849584c74f",
    "database/data-migrations/034_update_multi_agent_extract_prompts_date.sql": "71d92faab484e4452f4431156dec67d8b7a54432df90fd646cc09c04fcceb013",
    "database/data-migrations/035_bundle_factory_version_metadata.sql": "4c6fdf445cfe220194b15416a5a27cc294a6bd029339c459dda3a80702ed8898",
    "database/data-migrations/036_add_effect_progress_snapshot.sql": "cac56dcecc8f7dcc2fcd8e37b7fceaac40b47e6fd6122e4b678ff6397079e605",
    "database/data-migrations/037_recreate_qfk_var_tool.sql": "86a7312e5eea702a8352751c62a7ac2aa2615696cde9169d575b02f3bf639e79",
    "database/data-migrations/038_fix_sop_variable_output_path.sql": "244ade8d16368a607a8a083e6ab5506dd96f291f20174ee5ad255e694217dced",
    "database/data-migrations/039_update_sop_react_prompt_with_prerequisites.sql": "c95370e0c5d8c20e7d1c41daed44185329e53543f2c8431c6451da59eb3438fa",
    "database/data-migrations/040_preserve_legacy_extras_repairs.sql": "c1a96c8e1ba924626fe62b4e0e23f7856bfe024613b91869dd64b2700f6ad433"
  },
  "checks": {
    "fresh_install": "passed",
    "business_trigger_behavior": "passed",
    "extension_function_trigger_vector_index_drift_repair": "passed",
    "upgrade_from_unchanged_upstream_schema_and_extras": "passed",
    "representative_existing_rows_retained": "passed",
    "legacy_interrupted_job_repair": "passed",
    "original_executed_migration_035_checksum_retained": "a5f9b41b4b13d99a9ce97506b8b2d402618ac2c29b8dbeb0f4b40f05c7db13d6",
    "repeat_zero_diff_and_30_object_oid_stability": "passed",
    "upgrade_repeat_zero_diff_and_30_object_oid_stability": "passed",
    "native_apply_and_zero_diff": "passed"
  },
  "catalogs": {
    "original_psql": {
      "tables": 76,
      "extensions": {
        "pg_trgm": "1.6",
        "pgcrypto": "1.3",
        "plpgsql": "1.0",
        "uuid-ossp": "1.1",
        "vector": "0.8.6"
      },
      "ivfflat_indexes": [
        {
          "name": "idx_kb_category_embedding",
          "valid": true,
          "definition": "CREATE INDEX idx_kb_category_embedding ON public.kb_category USING ivfflat (embedding vector_cosine_ops) WITH (lists='100')",
          "storage_parameters": [
            "lists=100"
          ]
        },
        {
          "name": "idx_kbd_entry_embedding",
          "valid": true,
          "definition": "CREATE INDEX idx_kbd_entry_embedding ON public.kbd_entry USING ivfflat (embedding vector_cosine_ops) WITH (lists='100') WHERE ((status)::text = 'published'::text)",
          "storage_parameters": [
            "lists=100"
          ]
        }
      ],
      "application_functions": [
        "fn_update_conversation_message_count",
        "generate_case_id",
        "update_bundle_metadata_updated_at",
        "update_updated_at_column"
      ],
      "enabled_application_triggers": 24
    },
    "ptah_fresh": {
      "tables": 76,
      "extensions": {
        "pg_trgm": "1.6",
        "pgcrypto": "1.3",
        "plpgsql": "1.0",
        "uuid-ossp": "1.1",
        "vector": "0.8.6"
      },
      "ivfflat_indexes": [
        {
          "name": "idx_kb_category_embedding",
          "valid": true,
          "definition": "CREATE INDEX idx_kb_category_embedding ON public.kb_category USING ivfflat (embedding vector_cosine_ops) WITH (lists='100')",
          "storage_parameters": [
            "lists=100"
          ]
        },
        {
          "name": "idx_kbd_entry_embedding",
          "valid": true,
          "definition": "CREATE INDEX idx_kbd_entry_embedding ON public.kbd_entry USING ivfflat (embedding vector_cosine_ops) WITH (lists='100') WHERE ((status)::text = 'published'::text)",
          "storage_parameters": [
            "lists=100"
          ]
        }
      ],
      "application_functions": [
        "fn_update_conversation_message_count",
        "generate_case_id",
        "update_bundle_metadata_updated_at",
        "update_updated_at_column"
      ],
      "enabled_application_triggers": 24
    },
    "ptah_upgrade": {
      "tables": 76,
      "extensions": {
        "pg_trgm": "1.6",
        "pgcrypto": "1.3",
        "plpgsql": "1.0",
        "uuid-ossp": "1.1",
        "vector": "0.8.6"
      },
      "ivfflat_indexes": [
        {
          "name": "idx_kb_category_embedding",
          "valid": true,
          "definition": "CREATE INDEX idx_kb_category_embedding ON public.kb_category USING ivfflat (embedding vector_cosine_ops) WITH (lists='100')",
          "storage_parameters": [
            "lists=100"
          ]
        },
        {
          "name": "idx_kbd_entry_embedding",
          "valid": true,
          "definition": "CREATE INDEX idx_kbd_entry_embedding ON public.kbd_entry USING ivfflat (embedding vector_cosine_ops) WITH (lists='100') WHERE ((status)::text = 'published'::text)",
          "storage_parameters": [
            "lists=100"
          ]
        }
      ],
      "application_functions": [
        "fn_update_conversation_message_count",
        "generate_case_id",
        "update_bundle_metadata_updated_at",
        "update_updated_at_column"
      ],
      "enabled_application_triggers": 24
    },
    "ptah_native": {
      "tables": 76,
      "extensions": {
        "pg_trgm": "1.6",
        "pgcrypto": "1.3",
        "plpgsql": "1.0",
        "uuid-ossp": "1.1",
        "vector": "0.8.6"
      },
      "ivfflat_indexes": [
        {
          "name": "idx_kb_category_embedding",
          "valid": true,
          "definition": "CREATE INDEX idx_kb_category_embedding ON public.kb_category USING ivfflat (embedding vector_cosine_ops) WITH (lists='100')",
          "storage_parameters": [
            "lists=100"
          ]
        },
        {
          "name": "idx_kbd_entry_embedding",
          "valid": true,
          "definition": "CREATE INDEX idx_kbd_entry_embedding ON public.kbd_entry USING ivfflat (embedding vector_cosine_ops) WITH (lists='100') WHERE ((status)::text = 'published'::text)",
          "storage_parameters": [
            "lists=100"
          ]
        }
      ],
      "application_functions": [
        "fn_update_conversation_message_count",
        "generate_case_id",
        "update_bundle_metadata_updated_at",
        "update_updated_at_column"
      ],
      "enabled_application_triggers": 24
    }
  },
  "column_comparison": {
    "columns_compared": 1225,
    "properties": [
      "type",
      "default",
      "not_null"
    ],
    "original_catalog_sha256": "ddd2479a3bda579a0c28463c415f893de0b23efd8084b1767452566e8bd71eb9",
    "targets": {
      "hci_article": {
        "columns_compared": 1225,
        "differences": 0,
        "catalog_sha256": "ddd2479a3bda579a0c28463c415f893de0b23efd8084b1767452566e8bd71eb9"
      },
      "hci_fork": {
        "columns_compared": 1225,
        "differences": 0,
        "catalog_sha256": "ddd2479a3bda579a0c28463c415f893de0b23efd8084b1767452566e8bd71eb9"
      },
      "hci_upgrade": {
        "columns_compared": 1225,
        "differences": 0,
        "catalog_sha256": "ddd2479a3bda579a0c28463c415f893de0b23efd8084b1767452566e8bd71eb9"
      },
      "hci_native": {
        "columns_compared": 1225,
        "differences": 0,
        "catalog_sha256": "ddd2479a3bda579a0c28463c415f893de0b23efd8084b1767452566e8bd71eb9"
      }
    }
  },
  "atlas_control": {
    "version_stdout": "atlas community version v1.3.1\nhttps://github.com/ariga/atlas/releases/tag/v1.3.1\nTo download an official version, visit: https://atlasgo.io/getting-started#installation",
    "image": [
      "arigaio/atlas@sha256:76cc66fb31f99d5d316676b8a9866ef4b6d6bf5aacc0639485d04848670839e4"
    ],
    "input_sha256": "ab8514ee7ebb260fa59574c77f0f8980cb4c1a06eb382b0242339aa1666a7168",
    "extensions_preinstalled_in_target_and_scratch": true,
    "command": "atlas schema apply --url <control-target> --to file:///work/database/desired_schema.sql --dev-url <control-scratch> --auto-approve",
    "exit_code": 0,
    "catalog": {
      "tables": 76,
      "extensions": {
        "pg_trgm": "1.6",
        "pgcrypto": "1.3",
        "plpgsql": "1.0",
        "uuid-ossp": "1.1",
        "vector": "0.8.6"
      },
      "ivfflat_indexes": [
        {
          "name": "idx_kb_category_embedding",
          "valid": true,
          "definition": "CREATE INDEX idx_kb_category_embedding ON public.kb_category USING ivfflat (embedding vector_cosine_ops)",
          "storage_parameters": null
        },
        {
          "name": "idx_kbd_entry_embedding",
          "valid": true,
          "definition": "CREATE INDEX idx_kbd_entry_embedding ON public.kbd_entry USING ivfflat (embedding vector_cosine_ops) WHERE ((status)::text = 'published'::text)",
          "storage_parameters": null
        }
      ],
      "application_functions": [],
      "enabled_application_triggers": 0
    },
    "apply_log_sha256": "dd712b3f83e5f6a4a6a31fea205845f32dd3ec5e4858a6c49d7b4621262a6365"
  },
  "verification_stdout_sha256": "e0fee36f961e50715931bbec358601bc31c5ef72d87ff0fffa4b9dc42cbdfb7a",
  "verification_stdout": [
    "Version: 0.11.1",
    "Commit: 36bd3a4f7e437eba3de6c979274aa5e145408b3f",
    "Date: 2026-09-30T10:16:30Z",
    "Go: go1.27.1",
    "Platform: linux/amd64",
    "Testing fresh",
    "BEGIN",
    "DO",
    "ROLLBACK",
    "Testing repeat",
    "PASS: fresh install and repeat preserve every function, trigger, and vector index",
    "DROP TRIGGER",
    "DROP INDEX",
    "DROP EXTENSION",
    "CREATE FUNCTION",
    "Testing repair",
    "BEGIN",
    "DO",
    "ROLLBACK",
    "PASS: declared extension, function, trigger, and pgvector index drift is repaired",
    "CREATE EXTENSION",
    "CREATE EXTENSION",
    "CREATE EXTENSION",
    "CREATE EXTENSION",
    "INSERT 0 1",
    "INSERT 0 1",
    "INSERT 0 1",
    "INSERT 0 1",
    "INSERT 0 1",
    "CREATE FUNCTION",
    "CREATE TRIGGER",
    "CREATE TRIGGER",
    "CREATE TRIGGER",
    "DROP TRIGGER",
    "INSERT 0 1",
    "Testing upgrade",
    "BEGIN",
    "DO",
    "ROLLBACK",
    "DO",
    "Testing upgrade-repeat",
    "PASS: upstream upgrade preserves data, runs legacy repairs, and stays synchronized"
  ],
  "original_schema_bytes_preserved": true,
  "column_widening_migration_removed": true
}
