polyc-query 2026.10.2

The Query plane's read model: a DataFusion engine over signed projection artifacts, behind a verified credential.
//! Pins the lower-hex SHA-256 of every fixed Query statement (POLY-359).
//!
//! A `ControlFleet` or composite-trace grant binds the exact SQL text it
//! admits by digest (`mint_control_fleet_grant`'s `statement_digest`,
//! `GrantSubject::CompositeTrace`'s three digests). A one-byte change to a
//! statement is therefore a wire change: a Control that mints the new
//! digest and a Query service that still admits the old text refuse each
//! other, so the two planes must roll together. This table is the pin that
//! makes such a change loud.
//!
//! Each row names the `polyc_query_model::statements` constant, the
//! `statements/` file it embeds, and the digest the file carried when the
//! registry moved here from `crates/query/src/sql/`. Never regenerate a
//! digest to make this test pass — a mismatch means either the statement
//! changed (a wire change; roll both planes) or the constant points at the
//! wrong file.

#![allow(clippy::unwrap_used)]

use polyc_crypto::hex;
use polyc_query_model::statements::{
    COMPOSITE_TRACE_ADDRESSES_SQL, COMPOSITE_TRACE_MEMORY_SQL, COMPOSITE_TRACE_ROUTINES_SQL,
    COMPOSITE_TRACE_SQL, DASHBOARD_ATTRIBUTION_SQL, DASHBOARD_CONTEXT_SQL,
    DASHBOARD_CONVERSATIONS_SQL, DASHBOARD_SPEND_SQL, FLEET_USAGE_SQL,
    PERSONA_DIRECTORY_DETAIL_SQL, PERSONA_DIRECTORY_INDEX_SQL, ROUTINE_FIRE_COUNT_SQL,
    ROUTINE_FIRE_LAST_SQL, ROUTINE_FIRE_OUTCOME_SQL, ROUTINE_FIRE_SQL,
    ROUTINE_FIRES_INDEX_ADMIN_SQL, ROUTINE_FIRES_INDEX_OWNER_SQL, ROUTINE_FIRES_SQL,
    ROUTINE_LIFECYCLE_SQL, ROUTINE_OVERVIEW_SQL, ROUTINE_OWNER_ACTIVE_GRANTS_SQL,
    ROUTINE_OWNER_APPROVAL_AGGREGATES_SQL, ROUTINE_OWNER_FIRE_DISPATCH_SQL,
    ROUTINE_OWNER_REFUSALS_SQL, ROUTINE_OWNER_STOPPED_TOOL_SQL,
};
use sha2::Digest as _;

/// (`registry constant`, `statements/` file, statement text, pinned
/// lower-hex SHA-256). Sorted by file name.
const STATEMENTS: &[(&str, &str, &str, &str)] = &[
    (
        "COMPOSITE_TRACE_SQL",
        "composite_trace.sql",
        COMPOSITE_TRACE_SQL,
        "29b36afd4eb9e320342c59ffff29314ad290a76b46f31172c65eb7be46e807b1",
    ),
    (
        "COMPOSITE_TRACE_ADDRESSES_SQL",
        "composite_trace_addresses.sql",
        COMPOSITE_TRACE_ADDRESSES_SQL,
        "9c265b91f63663520a1c3869b4aab85ec6286cc4aef7e59835c7e0c3761bb5b6",
    ),
    (
        "COMPOSITE_TRACE_MEMORY_SQL",
        "composite_trace_memory.sql",
        COMPOSITE_TRACE_MEMORY_SQL,
        "397c64e0b1d13bd7ff90524a45eea45fc2987aa27c513e72b268ddccac88634f",
    ),
    (
        "COMPOSITE_TRACE_ROUTINES_SQL",
        "composite_trace_routines.sql",
        COMPOSITE_TRACE_ROUTINES_SQL,
        "7fa5946634f6ac9e9b885dbfbd20ef617f377f2978b0342e3f425ba05428af86",
    ),
    (
        "DASHBOARD_ATTRIBUTION_SQL",
        "dashboard_attribution.sql",
        DASHBOARD_ATTRIBUTION_SQL,
        "cd28dd408049d7018904eb1a4b9f07e025c1492c6dfd4bd9d7572e3a3ec764c5",
    ),
    (
        "DASHBOARD_CONTEXT_SQL",
        "dashboard_context.sql",
        DASHBOARD_CONTEXT_SQL,
        "7ec5a1a387d903d5f3e0b2d8a638c9129424f2f6b49ca9fc00c4814f1f3c62c7",
    ),
    (
        "DASHBOARD_CONVERSATIONS_SQL",
        "dashboard_conversations.sql",
        DASHBOARD_CONVERSATIONS_SQL,
        "857be27b63d3abe72a21a03d58b8ba726715d2c8ce73f69c1361a458b95f9657",
    ),
    (
        "DASHBOARD_SPEND_SQL",
        "dashboard_spend.sql",
        DASHBOARD_SPEND_SQL,
        "3e444c45d3c3f41756ce6ca1a8faca46491ae957413cc777d8df95cfe5381da1",
    ),
    (
        "FLEET_USAGE_SQL",
        "fleet_usage.sql",
        FLEET_USAGE_SQL,
        "31f753937bd8a8a5e8fdcfcd938615fe9bcf05ace8820385b53241b0ccef6906",
    ),
    (
        "PERSONA_DIRECTORY_DETAIL_SQL",
        "persona_directory_detail.sql",
        PERSONA_DIRECTORY_DETAIL_SQL,
        "a1f72be407573e9a02d03a27deb50e96d09fe3446fb7292fd956f4a33ff78ca0",
    ),
    (
        "PERSONA_DIRECTORY_INDEX_SQL",
        "persona_directory_index.sql",
        PERSONA_DIRECTORY_INDEX_SQL,
        "3159eaced137ab55d7f8e18bd2b84d1f93d873bdec423b2913f1223e5c12bb77",
    ),
    (
        "ROUTINE_FIRE_SQL",
        "routine_fire.sql",
        ROUTINE_FIRE_SQL,
        "431016ca7a4e339cd1cd85f8c62a080484d6d5296cd341805a490060856a9508",
    ),
    (
        "ROUTINE_FIRE_COUNT_SQL",
        "routine_fire_count.sql",
        ROUTINE_FIRE_COUNT_SQL,
        "f34f89b8520983cc6dfb57b94be1cb6902aa1838f8a21d2dbe28e914872e6f53",
    ),
    (
        "ROUTINE_FIRE_LAST_SQL",
        "routine_fire_last.sql",
        ROUTINE_FIRE_LAST_SQL,
        "0b120c1b61fe116941c52d912b95dd6726bf2e43203fdfff2c9b1a110c0958ec",
    ),
    (
        "ROUTINE_FIRE_OUTCOME_SQL",
        "routine_fire_outcome.sql",
        ROUTINE_FIRE_OUTCOME_SQL,
        "a8ebacdbcefea9ed374aaf169124584428c0f682d87d2466d4c5fe22c88af106",
    ),
    (
        "ROUTINE_FIRES_SQL",
        "routine_fires.sql",
        ROUTINE_FIRES_SQL,
        "dea6359eb1b6f996c8d536fc1c1c2b6650fa0b7575dc4e74776b9998683503c7",
    ),
    (
        "ROUTINE_FIRES_INDEX_ADMIN_SQL",
        "routine_fires_index_admin.sql",
        ROUTINE_FIRES_INDEX_ADMIN_SQL,
        "0072a1957e9ae0caa4a1f8d8b4c788619786e127970e40ed5f3592436b641dc0",
    ),
    (
        "ROUTINE_FIRES_INDEX_OWNER_SQL",
        "routine_fires_index_owner.sql",
        ROUTINE_FIRES_INDEX_OWNER_SQL,
        "9cd50901840219c874213995864126c0a72950734ef09627872b265c54956640",
    ),
    (
        "ROUTINE_LIFECYCLE_SQL",
        "routine_lifecycle.sql",
        ROUTINE_LIFECYCLE_SQL,
        "e2b6bf0cd540a59d56271801394df3e04516db5844401de8db4994daa86d0da9",
    ),
    (
        "ROUTINE_OVERVIEW_SQL",
        "routine_overview.sql",
        ROUTINE_OVERVIEW_SQL,
        "d0d6b3377af10ca19917b1c6ba8ecb5c28466ab777d987d10688efd9b74a7c82",
    ),
    (
        "ROUTINE_OWNER_ACTIVE_GRANTS_SQL",
        "routine_owner_active_grants.sql",
        ROUTINE_OWNER_ACTIVE_GRANTS_SQL,
        "f5ff0fcc267d46aba60902df40b6d659edfee1055415938c041ae3ac76c6d827",
    ),
    (
        "ROUTINE_OWNER_APPROVAL_AGGREGATES_SQL",
        "routine_owner_approval_aggregates.sql",
        ROUTINE_OWNER_APPROVAL_AGGREGATES_SQL,
        "e6ba0c03ff01681923978c917ad7ece8168c51676f49b90e4b4b8df925453b73",
    ),
    (
        "ROUTINE_OWNER_FIRE_DISPATCH_SQL",
        "routine_owner_fire_dispatch.sql",
        ROUTINE_OWNER_FIRE_DISPATCH_SQL,
        "1bb3f5ff1a1f92e6a1fb66c234f3f14137fbd7bd5d92ce776753be466157d48b",
    ),
    (
        "ROUTINE_OWNER_REFUSALS_SQL",
        "routine_owner_refusals.sql",
        ROUTINE_OWNER_REFUSALS_SQL,
        "b5514b73813941a00e82b7e92b9a2b27147d7c678c7bfdcf1f9c0336ebaa5e69",
    ),
    (
        "ROUTINE_OWNER_STOPPED_TOOL_SQL",
        "routine_owner_stopped_tool.sql",
        ROUTINE_OWNER_STOPPED_TOOL_SQL,
        "962cff137ac1538d0a1d1f46d98076f71ac485140275ed786d0ab1cfc2bfb039",
    ),
];

#[test]
fn every_fixed_statement_matches_its_pinned_digest() {
    assert_eq!(
        STATEMENTS.len(),
        25,
        "the registry holds every fixed statement"
    );
    for &(name, file, text, expected) in STATEMENTS {
        let actual = hex::lower(&sha2::Sha256::digest(text.as_bytes()));
        assert_eq!(
            actual, expected,
            "{name} ({file}) changed; a statement digest is a wire change"
        );
    }
}

#[test]
fn constant_names_follow_the_file_name() {
    for &(name, file, _, _) in STATEMENTS {
        let stem = name.strip_suffix("_SQL").unwrap();
        assert_eq!(
            format!("{}.sql", stem.to_lowercase()),
            file,
            "{name} must embed {file}"
        );
    }
}