DV Digest

Home›Documentation›Test plan

Documentation · release 1

Test plan

Every test, by layer, and the requirement each one proves.

Branch Test Plan: Sunbelt Senior Insurance Client Hub and Source System Seed (Arrival and Identity)

Test Plan

Effort Linear DIG-574; DIGEST Data Vault Implementation, increments 1 (arrival and identity), 1.1 (source system seed) and 2 (the two-source raw vault), elaborating this single document set; branch claude_ws/dig-574-arrival-and-identity; the fix to release 1, keys and missing keys (Linear DIG-594), branch claude_ws/dig-594-release-1-keys-rebased-2
Governed by Standard: Branch Delivery Documents (K#12 I#27)
References Design: Branch Design, Pilot item 270; profile: Branch Profile, Pilot item 267; implementation guide: Pilot item 272; QA standard: K#2 I#167
Audience Ray Serrano as reviewer; the implementer of the increment
Author Ray Serrano; edited by Claude, 2026-10-22
Classification Internal — Data Management
Official copy method Copied from this governed template by AGENTIC.DATASKILLS.KNOWLEDGE_ITEM_FROM_TEMPLATE; template SHA-256 recorded in the created item

1. Executive summary

Model Logic areas Brute-force paths Unique paths after collapse
stg_sunbelt_client (staging view) A: client number hard rule and hashing 16 (4 presence values x 4 forms) 4: P4, P5, P6, P7
client_h (hub, incremental) B: keep the first sighting and insert only new keys 24 (3 arrivals x 2 rows-per-key-in-load x 2 technical-key cases x 2 hub states) 4: P1, P2, P3, P8
inspector_sunbelt_client_number_form (inspector) C: client-number form 2 (conforming, nonconforming) 2: I1, I2
auditor_sunbelt_client_hub (auditor) D: source against hub 2 (counts agree, counts disagree) 2: A1, A2
stg_sunbelt_policy_sale (staging view) F: policy key form 8 (2 carrier-code states x 4 policy-number states) 4: PH5 to PH8
policy_h (hub, incremental) E: policy by source and load 12 4: PH1 to PH4
client_h and stg_sunbelt_policy_sale G: client numbers from the sales data 3 3: CH1 to CH3
insured_h and stg_northfield_policy H: insured numbers 8 4: IH1 to IH4
agent_h and stg_sunbelt_policy_sale K: agents 12 5: AG1 to AG5
client_policy_l (link with a dependent child key) I: roles on a policy 16 4: L1, L2, L3, L5
insured_policy_l and client_policy_l J: one person under two role keys, and the resend 4 2: L4, L6
agent_policy_l (link, two sources) L: the agent on a policy 4 2: LA2, LA3
policy_northfield_s, insured_northfield_s, client_sunbelt_s, client_policy_sunbelt_s (satellites) M: satellite versions 12 per satellite 5 on Northfield Life’s data (ST1 to ST5, ST4 on its staging model), and ST1 to ST3 on each of the other three satellites: 14 tests
inspector_sunbelt_policy_number_form (inspector) N: policy number form 2 2: I3, I4
auditor_sunbelt_policy_hub, auditor_northfield_policy_hub (auditors) O: source against hub, per new source table 4 4: A3 to A6
stg_sunbelt_client, stg_sunbelt_policy_sale, stg_northfield_policy (staging views) P: change hashes 2 per model 2 per model: HD1, HD2; 6 tests
client_sunbelt_s1, client_policy_sunbelt_s1, insured_northfield_s1, policy_northfield_s1 (version 1 views) Q: load end dates 2 per view 2 per view: V1, V2; 8 tests
stg_sunbelt_client_known_client, stg_northfield_policy_known_insured, stg_northfield_policy_known_policy (staging views), the three satellites reading them, and the three missing-key inspectors Z: missing keys 2 (key present, key missing) 3: Z1, Z2, Z3; 6 unit tests and uq_client_sunbelt_s_pk
finding_fact (release 1 mart view) Y: the classification and the row of a finding 6 1: Y1
stg_northfield_organization, stg_pinecrest_organization (staging views) R: a carrier’s organization record 1 per model 1 per model: OS1; 2 tests
organization_h (hub, incremental) S: an organization by carrier feed and load 12 (2 feeds x 3 arrivals x 2 hub states) 4: OH1 to OH4
organization_northfield_s, organization_pinecrest_s (satellites) T: organization versions 4 per satellite 3 per satellite: OT1 to OT3; 6 tests
person_dim, organization_dim, policy_dim (dimensions) U: ghost members 3 per dimension 1 per dimension: DG1 to DG3
person_dim, policy_dim (dimensions) V: an attribute from the most recent sale 2 per dimension 1 per dimension: DL1, DL2
client_dim, insured_dim, agent_dim, carrier_dim (role views) W: one role per view 2 per view 1 per view: DS1 to DS4
policy_terms_fact (fact) X: a version’s validity 2 2: FV1, FV2

2. Logic areas

Logic area A: client number hard rule and hashing (stg_sunbelt_client)

Dimensions: presence (present, empty string, whitespace only, NULL) and form relative to an existing number (exact, case differs, surrounding spaces, internal form differs). Brute force 4 x 4 = 16. Collapse: form matters only when a value is present (12 combinations reduce to the 4 forms), and exact form is the baseline every other path compares against; empty and whitespace-only behave alike after design decision D-4. Unique paths: surface variant (P4), internal-form variant (P5), NULL (P6), empty or whitespace only (P7).

Logic area B: keep the first sighting (client_h)

Dimensions: arrival (first load only, both loads, second load only), rows per key within one load (one, two), technical key across loads (same, new), hub state (empty first build, incremental build). Brute force 3 x 2 x 2 x 2 = 24. Collapse: the hub ignores the technical key, so both technical-key cases behave alike (24 reduce to 12); a first build and an incremental build differ only in whether existing keys are skipped, which the arrival paths already separate. Unique paths: new key (P1), key in both loads keeps the first (P2, run with a new CRM row ID), key first seen in a later load on an incremental build (P3), two rows of one key in one load (P8).

Each logic area states its dimensions, brute-force count, collapse and reason, then provides this table:

Path Scenario Expected result Unit-test name
P1 Key A-1001 in load 1 only, first build One hub row, load 1 timestamp, record source SSI unit_client_h_p1_new_key
P2 Key A-1003 in load 1 and in load 2 under a new CRM row ID One hub row with the load 1 timestamp unit_client_h_p2_repeat_keeps_first
P3 Key A-1031 first seen in load 2, incremental build with A-1001 already in the hub A-1031 inserted with the load 2 timestamp; A-1001 not inserted again unit_client_h_p3_later_load_inserts
P4 a-1004 and A-1005 with a trailing space beside A-1004 and A-1005 Each variant’s hash key equals its exact form’s hash key unit_stg_sunbelt_client_p4_surface_variant_same_key
P5 A1007 beside A-1007 Different hash keys unit_stg_sunbelt_client_p5_internal_form_new_key
P6 NULL client number Hash key is the all-zeros key unit_stg_sunbelt_client_p6_null_zero_key
P7 Empty string and three spaces Hash key is the all-zeros key after D-4. Run first as a characterization test of the current behavior, before D-4 is coded unit_stg_sunbelt_client_p7_blank_zero_key
P8 A-1010 and a-1010 in the same load One hub row unit_client_h_p8_duplicate_in_load_one_row
I1 Client numbers A-1001 and a-1004 (conforming once trimmed and uppercased) No finding unit_inspector_sunbelt_client_number_form_conforming_no_finding
I2 Client numbers A1007 and A-01008 Two findings, one per value unit_inspector_sunbelt_client_number_form_nonconforming_one_finding_each
A1 3 usable source keys, 3 non-ghost hub rows No finding unit_auditor_sunbelt_client_hub_agree_no_finding
A2 3 usable source keys, 2 non-ghost hub rows One summary finding carrying both counts unit_auditor_sunbelt_client_hub_disagree_one_finding

Logic area C: client-number form (inspector_sunbelt_client_number_form)

Dimension: the trimmed, uppercased client number matches the designed form (letter A, hyphen, four digits) or does not. Brute force 2, no collapse. Paths: I1, I2.

Logic area D: source against hub (auditor_sunbelt_client_hub)

Dimension: the count of distinct usable source keys equals the count of non-ghost hub rows, or does not. Brute force 2, no collapse. Paths: A1, A2.

Logic area E: policy by source and load (policy_h)

Dimensions: which source sends the policy (sales data, carrier data, both), whether both sources arrive in the same load or different loads, and the hub’s state (first build, incremental build). Brute force 3 x 2 x 2 = 12. Collapse: when one source alone sends the policy, the load relation does not apply, and the hub state is already separated by the load paths. Unique paths 4 (profile P-12):

Path Scenario Expected result Unit-test name
PH1 Sale of NF-100012 only One hub row from SSI unit_policy_h_ph1_sales_only
PH2 Carrier row NF-100002 only One hub row from NFL unit_policy_h_ph2_carrier_only
PH3 Sale and carrier row of NF-100001 in the same load One hub row unit_policy_h_ph3_both_sources_same_load
PH4 Carrier row NF-100011 in load 1, its sale in load 2 One hub row, the load 1 sighting kept unit_policy_h_ph4_later_load_keeps_first

Logic area F: policy key form (stg_sunbelt_policy_sale)

Dimensions: carrier code (present, missing), policy number (present, empty), and form when present (exact, case variant, internal variant). Brute force 2 x (1 + 3) = 8. Collapse: a missing carrier code and an empty number with a code present behave alike, one part missing; the exact form is the baseline. Unique paths 4:

Path Scenario Expected result Unit-test name
PH5 nf-100001 beside NF-100001 The same hash key unit_stg_sunbelt_policy_sale_ph5_case_variant_same_key
PH6 NF100009 beside NF-100009 Different hash keys unit_stg_sunbelt_policy_sale_ph6_internal_form_new_key
PH7 No policy number and no carrier code The all-zeros key unit_stg_sunbelt_policy_sale_ph7_both_parts_missing_zero_key
PH8 NF-100005 without its carrier code A real key with the placeholder in the code’s part, different from NFL with NF-100005 unit_stg_sunbelt_policy_sale_ph8_one_part_missing_placeholder_key

Logic area G: client numbers from the sales data (client_h, stg_sunbelt_policy_sale)

Dimension: the sale’s client number is already in the hub, new, or empty. Brute force 3, no collapse. Paths:

Path Scenario Expected result Unit-test name
CH1 Sale for A-1001, already in the hub from the client list No new row unit_client_h_ch1_sale_number_already_in_hub
CH2 Sale for A-1033, first seen A new row from the sales data unit_client_h_ch2_sale_number_first_seen
CH3 Sale of NF-100014 with an empty client number The all-zeros key unit_stg_sunbelt_policy_sale_ch3_empty_client_zero_key

Logic area H: insured numbers (insured_h, stg_northfield_policy)

Dimensions: arrival (new, resent), policies per insured (one, several), number (present, empty). Brute force 2 x 2 x 2 = 8. Collapse: an empty number goes to the ghost record whatever its arrival. Unique paths 4:

Path Scenario Expected result Unit-test name
IH1 NLI-55003, new A new row unit_insured_h_ih1_new_insured
IH2 NLI-55001 resent in load 2 No new row unit_insured_h_ih2_resend_no_new_row
IH3 NLI-55001 on NF-100001 and NF-100002 One hub row unit_insured_h_ih3_one_insured_two_policies
IH4 NF-100013 with an empty insured number The all-zeros key unit_stg_northfield_policy_ih4_empty_insured_zero_key

Logic area I: roles on a policy (client_policy_l)

Dimensions: people per policy (one, two), roles per person (one, two), role code (documented, undocumented), and arrival (new, resent). Brute force 2 x 2 x 2 x 2 = 16. Collapse: the resend behaves alike for every role combination and is tested once (area J). Unique paths 4 here:

Path Scenario Expected result Unit-test name
L1 NF-100001, A-1001, owner One link row unit_client_policy_l_l1_one_person_one_role
L2 NF-100006: A-1006 owner, A-1008 insured Two link rows unit_client_policy_l_l2_two_people_two_roles
L3 NF-100010: A-1010 as owner and as insured Two link rows, told apart by the role unit_client_policy_l_l3_one_person_two_roles
L5 NF-100001, A-1001, payor, in load 2 One more link row; the same columns unit_client_policy_l_l5_undocumented_role_new_row

Logic area J: one person under two role keys, and the resend (insured_policy_l, client_policy_l)

Dimensions: the same person sent by both sources (yes, no), and arrival (new, resent). Brute force 4. Collapse: a person sent by one source only is the baseline of areas H and I. Unique paths 2:

Path Scenario Expected result Unit-test name
L4 NF-100007: A-1007 insured in the sale; NLI-55007 in the carrier row The insured link’s policy key equals the client link’s, and its person key is the insured’s; no row joins A-1007 to NLI-55007 unit_insured_policy_l_l4_same_policy_two_role_keys
L6 nf-100001, A-1001, owner, resent in load 2 No new link row unit_client_policy_l_l6_resend_no_new_row

Logic area K: agents (agent_h, stg_sunbelt_policy_sale)

Dimensions: which source names the agent (sales, carrier, both), policies per agent (one, several), number (present, empty). Brute force 3 x 2 x 2 = 12. Collapse: an empty number goes to the ghost record whatever its source. Unique paths 5 (profile P-19):

Path Scenario Expected result Unit-test name
AG1 17001001 on NF-100001 in both sources, same load One hub row unit_agent_h_ag1_both_sources_one_row
AG2 17002001 in the carrier data only One hub row from NFL unit_agent_h_ag2_carrier_only
AG3 17001007 in the sales data only One hub row from SSI unit_agent_h_ag3_sales_only
AG4 17001001 on NF-100001 and NF-100007 One hub row unit_agent_h_ag4_one_agent_several_policies
AG5 NF-100014 with an empty agent number The all-zeros key unit_stg_sunbelt_policy_sale_ag5_empty_agent_zero_key

Logic area L: the agent on a policy (agent_policy_l)

Dimensions: the two sources agree on the policy’s agent (yes, no), and arrival (new, resent). Brute force 4. Collapse: agreement on a new pair is path AG1’s link row. Unique paths 2:

Path Scenario Expected result Unit-test name
LA2 NF-100011: 17001005 in the carrier row, 17001004 in the sale Two link rows to one policy unit_agent_policy_l_la2_sources_disagree_two_rows
LA3 nf-100001 with 17001001, resent No new link row unit_agent_policy_l_la3_resend_no_new_row

Logic area M: satellite versions (policy_northfield_s, insured_northfield_s, client_sunbelt_s, client_policy_sunbelt_s)

Dimensions: arrival (first, resent), values on a resend (unchanged, changed, letter case only), and presence in load 2 (present, absent). Brute force 2 x 3 x 2 = 12. Collapse: a first arrival has no prior values to compare, and absence applies only to a key already held. Unique paths 5 (profile P-15). The four satellites share the toolkit’s satellite macro: all five paths are proven on Northfield Life’s data, where the profile plants them, and ST1 to ST3 on each of the other three satellites (Ray, decision 1a, 2026-10-25):

Path Scenario Expected result Unit-test name
ST1 First carrier row of NF-100001 One satellite row unit_policy_northfield_s_st1_first_version
ST2 NF-100002 resent unchanged No new version unit_policy_northfield_s_st2_unchanged_resend
ST3 NF-100003: IF in load 1, LP in load 2 A second version; the first kept unit_policy_northfield_s_st3_changed_value_new_version
ST4 NF-100008: 12 Elm St, Flint MI, then 12 ELM ST, FLINT MI Staging gives the two rows different change hashes, so the satellite stores a second version; the satellite side is proven by unit_insured_northfield_s_st3_case_only_new_version unit_stg_northfield_policy_st4_case_only_new_hashdiff
ST5 NF-100001 absent from load 2 No row added; the load 1 version stays the latest unit_policy_northfield_s_st5_absent_stays_current
ST1 First Northfield Life row of NLI-55008 One satellite row unit_insured_northfield_s_st1_first_version
ST2 NLI-55008 resent unchanged No new version unit_insured_northfield_s_st2_unchanged_resend
ST3 NLI-55008: the address changes in letter case only A second version unit_insured_northfield_s_st3_case_only_new_version
ST1 First client list row of A-1001 One satellite row unit_client_sunbelt_s_st1_first_version
ST2 A-1001 resent unchanged No new version unit_client_sunbelt_s_st2_unchanged_resend
ST3 A-1001: state FL, then GA A second version unit_client_sunbelt_s_st3_changed_value_new_version
ST1 First sale row of A-1001 owner on NF-100001 One satellite row unit_client_policy_sunbelt_s_st1_first_version
ST2 The same sale resent unchanged No new version unit_client_policy_sunbelt_s_st2_unchanged_resend
ST3 The same sale with plan Final Expense 10K A second version unit_client_policy_sunbelt_s_st3_changed_value_new_version

Logic area N: policy number form (inspector_sunbelt_policy_number_form)

Dimension: the trimmed, uppercased policy number matches NF, a hyphen and six digits, or does not. Brute force 2, no collapse:

Path Scenario Expected result Unit-test name
I3 NF-100001 and nf-100001 No finding unit_inspector_sunbelt_policy_number_form_conforming_no_finding
I4 NF100009 One finding unit_inspector_sunbelt_policy_number_form_nonconforming_one_finding

Logic area O: each new source table against the policy hub (auditor_sunbelt_policy_hub, auditor_northfield_policy_hub)

Dimension, per auditor: distinct usable policy keys in the source table equal the policy hub rows that source fed, or do not. Brute force 2 per auditor, no collapse:

Path Scenario Expected result Unit-test name
A3 Sales data: 3 usable keys, 3 hub rows No finding unit_auditor_sunbelt_policy_hub_agree_no_finding
A4 Sales data: 3 usable keys, 2 hub rows One summary finding carrying both counts unit_auditor_sunbelt_policy_hub_disagree_one_finding
A5 Carrier data: 3 usable keys, 3 hub rows No finding unit_auditor_northfield_policy_hub_agree_no_finding
A6 Carrier data: 3 usable keys, 2 hub rows One summary finding carrying both counts unit_auditor_northfield_policy_hub_disagree_one_finding

Logic area P: change hashes (stg_sunbelt_client, stg_sunbelt_policy_sale, stg_northfield_policy)

Dimension: the descriptive columns of a key’s two rows are the same or differ. Brute force 2 per model, no collapse. Expected hashes are literals computed with the toolkit’s own expression, checked first against all 81 live staged rows (guide G-8):

Path Scenario Expected result Unit-test name
HD1 A-1001, Rosa Alvarez, FL, in both acts The same change hash unit_stg_sunbelt_client_hd1_unchanged_same_hash
HD2 A-1001 with state FL, then GA Different change hashes unit_stg_sunbelt_client_hd2_changed_value_new_hash
HD1 The sale of NF-100001 to A-1001, owner, in both acts The same change hash unit_stg_sunbelt_policy_sale_hd1_unchanged_same_hash
HD2 The same sale with plan Senior Term 20, then Final Expense 10K Different change hashes unit_stg_sunbelt_policy_sale_hd2_changed_value_new_hash
HD1 NF-100001 with status IF in both acts The same change hash unit_stg_northfield_policy_hd1_unchanged_same_hash
HD2 NF-100001 with status IF, then LP Different change hashes unit_stg_northfield_policy_hd2_changed_value_new_hash

Insured details are covered by ST4’s staging test (area M).

Logic area Q: load end dates (client_sunbelt_s1, client_policy_sunbelt_s1, insured_northfield_s1, policy_northfield_s1)

Dimension: a key holds one version or several. Brute force 2 per view, no collapse. A version ends 1 microsecond before the next version’s load time; the latest ends at the end of all times, 8888-12-31 23:59:59:

Path Scenario Expected result Unit-test name
V1 One version of a key Load end date 8888-12-31 23:59:59 unit__v1_single_version_current, for each of the four views
V2 Two versions of a key, loaded 2026-10-01 02:00 and 2026-10-02 02:00 The first ends 2026-10-02 01:59:59.999999; the second ends 8888-12-31 23:59:59 unit__v2_earlier_version_end_dated, for each of the four views

Red proof for areas M (the 9 added tests), P and Q, 2026-10-25: each test failed for its content under a planted defect, with no compilation error, and passed after the defect was removed. Defects: a hash column dropped from each change hash; a satellite with no change detection, one that never adds a second version, and one that writes nothing; views with no end dating, and views that end each version at its own load time.

Every increment 2 unit test is built from the planted source rows of profile P-16, written and run before the code it proves; severity is not set on unit tests, which always fail as errors under the Fusion engine.

Logic area Z: missing keys (the known-key views, client_sunbelt_s, insured_northfield_s, policy_northfield_s and the missing-key inspectors)

Dimension: a source row’s business key is present or missing, as landing keeps the row, a blank key counting as missing (D-44, D-45). Brute force 2: the satellite side and the finding side are two consequences of the one dimension. A satellite built after the fix is a third path, since rows stored before the fix stay until D-46 removes them. Unique paths 3:

Path Scenario Expected result Unit-test name
Z1 Every key present The row reaches its satellite; no finding unit_inspector_sunbelt_client_key_missing_none_missing; unit_inspector_sunbelt_policy_sale_key_missing_none_missing; unit_inspector_northfield_policy_key_missing_none_missing
Z2 A key missing The row stays out of its satellite; one finding per row and missing key unit_inspector_sunbelt_client_key_missing_one_finding_per_row; unit_inspector_sunbelt_policy_sale_key_missing_one_finding_per_missing_key; unit_inspector_northfield_policy_key_missing_one_finding_per_missing_key
Z3 A satellite built after the fix No source row on the zero key uq_client_sunbelt_s_pk, in layer 1, which failed before the fix on the false client and passes after

The ten satellite unit tests of area M give the satellites their new sources, the known-key views, with the same rows.

Logic area Y: the classification and the row of a finding (finding_fact)

Dimensions: the finder that wrote the finding (a form inspector, a missing-key inspector, an auditor) and the keys a row misses (one, two). Brute force 3 x 2 = 6. Collapse: the number of missing keys matters only for a missing-key inspector, so form and audit findings each give one path, and a row missing two keys is the one that shows finding_row naming it once. Unique paths 1, proved by one test that holds a finding of each finder and a row missing two keys:

Path Scenario Expected result Unit-test name
Y1 One form finding, one audit finding, and two missing-key findings for one row missing two keys finding_kind reads form, audit and missing_key; the two missing-key findings name the same finding_row unit_finding_fact_kind_and_row

2.1 Coverage by changed file, all seven layers

Every file the branch changes or adds, from git diff --name-status -M origin/qa...HEAD at commit 94639b4, 2026-10-25 05:57Z: 70 files, one row each (COVERAGE: EVERY FILE, EVERY LAYER, K#2 I#226). Existing tests on a changed file are kept and named beside the new. Unit tests are named by their path; the full names are in section 2.

File Change 1 Built-ins 2 Expectations 3 Unit tests 4 Logic assertions 5 Detectors 6 Reconciliations 7 Semantic surface
.gitignore change: ignores build output and local secrets n/a: configuration, no logic n/a: configuration, no logic n/a: configuration, no logic n/a: configuration, no logic n/a: configuration, no logic n/a: configuration, no logic n/a: no semantic models (baseline B-4)
dbt/dbt_project.yml moved from the repository root; paths, schemas per layer, timestamp variable (D-5) n/a: configuration; proven by every build n/a: configuration; proven by every build n/a: configuration; proven by every build n/a: configuration; proven by every build n/a: configuration; proven by every build n/a: configuration; proven by every build n/a: no semantic models (baseline B-4)
dbt/macros/development/dev_drop_orphans.sql add: development cleanup of objects the project no longer defines n/a: operations macro n/a: operations macro n/a: tested live by planting a leftover table and schema, listing, dropping and listing again; refusal tested against DV n/a: operations macro n/a: operations macro n/a: operations macro n/a: no semantic models (baseline B-4)
dbt/macros/landing_storage.sql add (D-12) n/a: macro, covered through its callers: the three landing sources’ tests read the database it names n/a: covered through the source tests n/a: no logic beyond an environment variable default n/a: covered through its callers covered through its callers: both inspectors write to the CONFIG schema it names covered through its callers: the three auditors write to the CONFIG schema it names n/a: no semantic models (baseline B-4)
dbt/macros/materializations/merge_into.sql add (D-12) n/a: materialization n/a: materialization n/a: a unit test cannot run a materialization; covered by every finder build n/a: covered through its callers inspector_sunbelt_client_number_form and inspector_sunbelt_policy_number_form build through it auditor_sunbelt_client_hub, auditor_sunbelt_policy_hub and auditor_northfield_policy_hub build through it n/a: no semantic models (baseline B-4)
dbt/macros/operations/land_act.sql add, then extended to three tables in increment 2: the landing acts as a macro n/a: operations macro its acts are counted by expect_sunbelt_client_row_count and expect_increment_2_staging_keeps_every_landed_row n/a: tested live by replaying act 2 with an identical fingerprint; refusals on production and on an already-loaded act n/a: operations macro n/a: operations macro the three auditors count the rows it lands n/a: no semantic models (baseline B-4)
dbt/macros/operations/vault_checks.sql add, extended in increment 2: read-only routine counts n/a: read-only report; its output compared with direct queries n/a: read-only report; its output compared with direct queries n/a: read-only report; its output compared with direct queries n/a: read-only report; its output compared with direct queries n/a: read-only report; its output compared with direct queries n/a: read-only report; its output compared with direct queries n/a: no semantic models (baseline B-4)
dbt/macros/pipeline/generate_schema_name.sql add: a custom schema is used as written n/a: covered by every build, which places models in STAGING, RAW_VAULT and REFERENCE n/a: covered by every build, which places models in STAGING, RAW_VAULT and REFERENCE n/a: covered by every build, which places models in STAGING, RAW_VAULT and REFERENCE n/a: covered by every build, which places models in STAGING, RAW_VAULT and REFERENCE n/a: covered by every build, which places models in STAGING, RAW_VAULT and REFERENCE n/a: covered by every build, which places models in STAGING, RAW_VAULT and REFERENCE n/a: no semantic models (baseline B-4)
dbt/macros/verification/baseline_metrics.sql add in increment 2: the measurements the baseline facility takes n/a: guardrail macro, section 3.1 n/a: guardrail macro, section 3.1 n/a: guardrail macro, section 3.1 n/a: guardrail macro, section 3.1 n/a: guardrail macro, section 3.1 n/a: guardrail macro, section 3.1 n/a: no semantic models (baseline B-4)
dbt/macros/verification/capture_baseline.sql add (D-12), extended in increment 2 to every vault table n/a: guardrail macro, section 3.1 n/a: guardrail macro, section 3.1 n/a: guardrail macro, section 3.1 n/a: guardrail macro, section 3.1 n/a: guardrail macro, section 3.1 n/a: guardrail macro, section 3.1 n/a: no semantic models (baseline B-4)
dbt/macros/verification/verify_build.sql add (D-12), extended in increment 2 to every vault table n/a: guardrail macro, section 3.1 n/a: guardrail macro, section 3.1 n/a: guardrail macro, section 3.1 n/a: guardrail macro, section 3.1 n/a: guardrail macro, section 3.1 n/a: guardrail macro, section 3.1 n/a: no semantic models (baseline B-4)
dbt/models/auditors/_auditors.yml add: the auditors’ unit tests n/a: holds tests n/a: holds tests holds A1 to A6 n/a: holds tests n/a: holds tests n/a: holds tests n/a: no semantic models (baseline B-4)
dbt/models/auditors/auditor_northfield_policy_hub.sql add: auditor (D-10, guide step 31); corrected in increment 2 to check that each source key exists in its hub n/a: auditor model; its findings are the proof n/a: auditor model unit_auditor_northfield_policy_hub_agree_no_finding and unit_auditor_northfield_policy_hub_disagree_one_finding (A5, A6) n/a: auditor model n/a: an auditor, not an inspector is the auditor; expected no finding n/a: no semantic models (baseline B-4)
dbt/models/auditors/auditor_sunbelt_client_hub.sql add: auditor (D-10); corrected in increment 2 to check that each source key exists in its hub n/a: auditor model; its findings are the proof n/a: auditor model unit_auditor_sunbelt_client_hub_agree_no_finding and unit_auditor_sunbelt_client_hub_disagree_one_finding (A1, A2) n/a: auditor model n/a: an auditor, not an inspector is the auditor; expected no finding n/a: no semantic models (baseline B-4)
dbt/models/auditors/auditor_sunbelt_policy_hub.sql add: auditor (D-10, guide step 31); corrected in increment 2 to check that each source key exists in its hub n/a: auditor model; its findings are the proof n/a: auditor model unit_auditor_sunbelt_policy_hub_agree_no_finding and unit_auditor_sunbelt_policy_hub_disagree_one_finding (A3, A4) n/a: auditor model n/a: an auditor, not an inspector is the auditor; expected no finding n/a: no semantic models (baseline B-4)
dbt/models/inspectors/_inspectors.yml add: the inspectors’ unit tests n/a: holds tests n/a: holds tests holds I1 to I4 n/a: holds tests n/a: holds tests n/a: holds tests n/a: no semantic models (baseline B-4)
dbt/models/inspectors/inspector_sunbelt_client_number_form.sql add: inspector (D-9) n/a: inspector model; its findings are the proof n/a: inspector model I1, I2 n/a: inspector model is the inspector; expected two findings, A1007 and A-01008 n/a: an inspector, not an auditor n/a: no semantic models (baseline B-4)
dbt/models/inspectors/inspector_sunbelt_policy_number_form.sql add: inspector (D-30) n/a: inspector model; its findings are the proof n/a: inspector model I3, I4 n/a: inspector model is the inspector; expected one finding, NF100009 n/a: an inspector, not an auditor n/a: no semantic models (baseline B-4)
dbt/models/raw_vault/_client_h.yml add: client_h’s layer 1 tests and the unit tests P1 to P8; four fixtures rewritten in increment 2 to mock the second source holds uq_client_h_hk_client_h, nn_client_h_hk_client_h n/a: holds tests holds P1 to P8 n/a: assertions are files in dbt/tests n/a: holds tests n/a: holds tests n/a: no semantic models (baseline B-4)
dbt/models/raw_vault/_increment_2.yml add: increment 2’s layer 1 tests on its six hubs and links, and 48 of its unit tests holds uq_ and nn_ on the hash keys of policy_h, insured_h, agent_h, client_policy_l, insured_policy_l, agent_policy_l, and D-40’s four rel_ tests from each satellite’s hash key to its parent n/a: holds tests holds the unit tests of areas E, G, H, I, J, K, L, M, P (client) and Q n/a: assertions are files in dbt/tests n/a: holds tests n/a: holds tests n/a: no semantic models (baseline B-4)
dbt/models/raw_vault/agent_h.sql add: agent hub (D-35) uq_agent_h_hk_agent_h; nn_agent_h_hk_agent_h n/a: its row count is read by verify_build and the verification queries AG1 to AG4 assert_vault_record_sources_resolve; assert_increment_2_link_hub_keys_exist n/a: inspectors read staging, not the vault n/a: no auditor in the design for the agent hub; path AG1 is read by verification query 9 n/a: no semantic models (baseline B-4)
dbt/models/raw_vault/agent_policy_l.sql add: link (D-36) uq_agent_policy_l_hk_agent_policy_l; nn_agent_policy_l_hk_agent_policy_l n/a: its row count is read by verify_build LA2, LA3 assert_increment_2_link_hub_keys_exist; assert_vault_record_sources_resolve n/a: inspectors read staging, not the vault n/a: no auditor in the design for links; probe Q-6 reads them n/a: no semantic models (baseline B-4)
dbt/models/raw_vault/client_h.sql add; second source in increment 2 (D-32, G-14) uq_client_h_hk_client_h; nn_client_h_hk_client_h n/a: its row count is read by verify_build and the verification queries P1, P2, P3, P8, CH1, CH2 assert_client_h_no_blank_business_key; assert_client_h_covers_usable_source_keys; assert_client_h_ghost_keys_belong_to_ghosts; assert_vault_record_sources_resolve; assert_increment_2_link_hub_keys_exist n/a: inspectors read staging, not the vault auditor_sunbelt_client_hub n/a: no semantic models (baseline B-4)
dbt/models/raw_vault/client_policy_l.sql add: link (D-33) uq_client_policy_l_hk_client_policy_l; nn_client_policy_l_hk_client_policy_l n/a: its row count is read by verify_build L1, L2, L3, L5, L6 assert_increment_2_link_hub_keys_exist; assert_vault_record_sources_resolve n/a: inspectors read staging, not the vault n/a: no auditor in the design for links; probe Q-6 reads them n/a: no semantic models (baseline B-4)
dbt/models/raw_vault/client_policy_sunbelt_s.sql add: satellite, version 0 (D-34) n/a: a satellite’s key repeats by design; its parent hub or link carries the key tests n/a: its row count is read by verify_build ST1 to ST3 of client_policy_sunbelt_s n/a: no modeled truth beyond its parent’s; verification query 10 reads its versions n/a: inspectors read staging n/a: no auditor in the design for satellites n/a: no semantic models (baseline B-4)
dbt/models/raw_vault/client_policy_sunbelt_s1.sql add: version 1 view, load end dates (D-34, G-15) n/a: view over its satellite n/a: view over its satellite V1, V2 of client_policy_sunbelt_s1 n/a: no modeled truth beyond its satellite’s n/a: inspectors read staging n/a: no auditor in the design for views n/a: no semantic models (baseline B-4)
dbt/models/raw_vault/client_sunbelt_s.sql add: satellite, version 0 (D-34) n/a: a satellite’s key repeats by design; its parent hub or link carries the key tests n/a: its row count is read by verify_build ST1 to ST3 of client_sunbelt_s n/a: no modeled truth beyond its parent’s; verification query 10 reads its versions n/a: inspectors read staging n/a: no auditor in the design for satellites n/a: no semantic models (baseline B-4)
dbt/models/raw_vault/client_sunbelt_s1.sql add: version 1 view, load end dates (D-34, G-15) n/a: view over its satellite n/a: view over its satellite V1, V2 of client_sunbelt_s1 n/a: no modeled truth beyond its satellite’s n/a: inspectors read staging n/a: no auditor in the design for views n/a: no semantic models (baseline B-4)
dbt/models/raw_vault/insured_h.sql add: insured hub (D-32) uq_insured_h_hk_insured_h; nn_insured_h_hk_insured_h n/a: its row count is read by verify_build and the verification queries IH1 to IH3 assert_vault_record_sources_resolve; assert_increment_2_link_hub_keys_exist n/a: inspectors read staging, not the vault n/a: no auditor in the design for the insured hub; its keys are reached through probe Q-6 n/a: no semantic models (baseline B-4)
dbt/models/raw_vault/insured_northfield_s.sql add: satellite, version 0 (D-34) n/a: a satellite’s key repeats by design; its parent hub or link carries the key tests n/a: its row count is read by verify_build ST1 to ST3 of insured_northfield_s; ST4 on staging n/a: no modeled truth beyond its parent’s; verification query 10 reads its versions n/a: inspectors read staging n/a: no auditor in the design for satellites n/a: no semantic models (baseline B-4)
dbt/models/raw_vault/insured_northfield_s1.sql add: version 1 view, load end dates (D-34, G-15) n/a: view over its satellite n/a: view over its satellite V1, V2 of insured_northfield_s1 n/a: no modeled truth beyond its satellite’s n/a: inspectors read staging n/a: no auditor in the design for views n/a: no semantic models (baseline B-4)
dbt/models/raw_vault/insured_policy_l.sql add: link (D-33) uq_insured_policy_l_hk_insured_policy_l; nn_insured_policy_l_hk_insured_policy_l n/a: its row count is read by verify_build L4 assert_increment_2_link_hub_keys_exist; assert_vault_record_sources_resolve n/a: inspectors read staging, not the vault n/a: no auditor in the design for links; probe Q-6 reads them n/a: no semantic models (baseline B-4)
dbt/models/raw_vault/policy_h.sql add: policy hub (D-26) uq_policy_h_hk_policy_h; nn_policy_h_hk_policy_h n/a: its row count is read by verify_build and the verification queries PH1 to PH4 assert_vault_record_sources_resolve; assert_increment_2_link_hub_keys_exist n/a: inspectors read staging, not the vault auditor_sunbelt_policy_hub; auditor_northfield_policy_hub n/a: no semantic models (baseline B-4)
dbt/models/raw_vault/policy_northfield_s.sql add: satellite, version 0 (D-34) n/a: a satellite’s key repeats by design; its parent hub or link carries the key tests n/a: its row count is read by verify_build ST1, ST2, ST3, ST5 n/a: no modeled truth beyond its parent’s; verification query 10 reads its versions n/a: inspectors read staging n/a: no auditor in the design for satellites n/a: no semantic models (baseline B-4)
dbt/models/raw_vault/policy_northfield_s1.sql add: version 1 view, load end dates (D-34, G-15) n/a: view over its satellite n/a: view over its satellite V1, V2 of policy_northfield_s1 n/a: no modeled truth beyond its satellite’s n/a: inspectors read staging n/a: no auditor in the design for views n/a: no semantic models (baseline B-4)
dbt/models/staging/_stg_northfield_policy.yml add: unit tests IH4 and ST4 n/a: holds tests n/a: holds tests holds IH4, ST4 n/a: holds tests n/a: holds tests n/a: holds tests n/a: no semantic models (baseline B-4)
dbt/models/staging/_stg_sunbelt_policy_sale.yml add: unit tests PH5 to PH8, CH3, AG5 n/a: holds tests n/a: holds tests holds PH5 to PH8, CH3, AG5 n/a: holds tests n/a: holds tests n/a: holds tests n/a: no semantic models (baseline B-4)
dbt/models/staging/_sunbelt__sources.yml add: the three landing sources and their tests; Northfield Life and the sales data in increment 2 nn_sunbelt_client_crm_row_id; nn_sunbelt_client_loaded_at; nn_sunbelt_policy_sale_loaded_at; nn_northfield_policy_loaded_at uqc_sunbelt_client_loaded_at_crm_row_id; uqc_sunbelt_policy_sale_loaded_at_policy_client_role; uqc_northfield_policy_loaded_at_policy_number n/a: declaration n/a: declaration n/a: declaration n/a: declaration n/a: no semantic models (baseline B-4)
dbt/models/staging/stg_northfield_policy.sql add: staging with hard rules (D-24); NFL supplied (D-26) n/a: view, tested through its paths expect_increment_2_staging_keeps_every_landed_row IH4, ST4; HD1, HD2 n/a: its truths surface in the hubs’ and links’ assertions n/a: no inspector in the design for Northfield Life’s forms auditor_northfield_policy_hub reads it n/a: no semantic models (baseline B-4)
dbt/models/staging/stg_sunbelt_client.sql add (D-4); record source SSI (D-15); change hash added in increment 2 (D-34) n/a: view, tested through its paths expect_sunbelt_client_row_count reads its source P4 to P7; HD1, HD2 assert_client_h_covers_usable_source_keys reads it inspector_sunbelt_client_number_form reads it auditor_sunbelt_client_hub reads it n/a: no semantic models (baseline B-4)
dbt/models/staging/stg_sunbelt_policy_sale.sql add: staging with hard rules (D-24) n/a: view, tested through its paths expect_increment_2_staging_keeps_every_landed_row PH5 to PH8, CH3, AG5; HD1, HD2 n/a: its truths surface in the hubs’ and links’ assertions inspector_sunbelt_policy_number_form reads it auditor_sunbelt_policy_hub reads it n/a: no semantic models (baseline B-4)
dbt/packages.yml moved from the repository root; datavault4dbt pinned to the fork, dbt_utils added (G-9) n/a: configuration; proven by every build n/a: configuration; proven by every build n/a: configuration; proven by every build n/a: configuration; proven by every build n/a: configuration; proven by every build n/a: configuration; proven by every build n/a: no semantic models (baseline B-4)
dbt/seeds/_seeds.yml add: the seed’s description and its two built-in tests holds uq_seed_source_system_code, nn_seed_source_system_code n/a: holds tests n/a: holds tests n/a: holds tests n/a: holds tests n/a: holds tests n/a: no semantic models (baseline B-4)
dbt/seeds/seed_build_expectations.csv add (G-3), inc2 rows (G-17) n/a: seed read by verify_build, section 3.1 n/a: seed read by verify_build, section 3.1 n/a: seed read by verify_build, section 3.1 n/a: seed read by verify_build, section 3.1 n/a: seed read by verify_build, section 3.1 n/a: seed read by verify_build, section 3.1 n/a: no semantic models (baseline B-4)
dbt/seeds/seed_source_system.csv add: SSI, SYSTEM, ERROR (D-17, D-21); NFL in increment 2 (D-23) uq_seed_source_system_code; nn_seed_source_system_code n/a: four authored rows n/a: data, no logic assert_vault_record_sources_resolve joins it n/a: reference data n/a: reference data n/a: no semantic models (baseline B-4)
dbt/selectors.yml add: named selections for builds n/a: configuration; proven by the builds that use it n/a: configuration; proven by the builds that use it n/a: configuration; proven by the builds that use it n/a: configuration; proven by the builds that use it n/a: configuration; proven by the builds that use it n/a: configuration; proven by the builds that use it n/a: no semantic models (baseline B-4)
dbt/tests/assert_client_h_covers_usable_source_keys.sql add n/a: is itself a test n/a: is itself a test n/a: is itself a test is the assertion n/a: is itself a test n/a: is itself a test n/a: no semantic models (baseline B-4)
dbt/tests/assert_client_h_ghost_keys_belong_to_ghosts.sql add n/a: is itself a test n/a: is itself a test n/a: is itself a test is the assertion n/a: is itself a test n/a: is itself a test n/a: no semantic models (baseline B-4)
dbt/tests/assert_client_h_no_blank_business_key.sql add n/a: is itself a test n/a: is itself a test n/a: is itself a test is the assertion n/a: is itself a test n/a: is itself a test n/a: no semantic models (baseline B-4)
dbt/tests/assert_increment_2_link_hub_keys_exist.sql add in increment 2 n/a: is itself a test n/a: is itself a test n/a: is itself a test is the assertion n/a: is itself a test n/a: is itself a test n/a: no semantic models (baseline B-4)
dbt/tests/assert_vault_record_sources_resolve.sql add, rewritten in increment 2 to read every hub and link n/a: is itself a test n/a: is itself a test n/a: is itself a test is the assertion n/a: is itself a test n/a: is itself a test n/a: no semantic models (baseline B-4)
dbt/tests/expect_increment_2_staging_keeps_every_landed_row.sql add in increment 2 n/a: is itself a test is the expectation n/a: is itself a test n/a: is itself a test n/a: is itself a test n/a: is itself a test n/a: no semantic models (baseline B-4)
dbt/tests/expect_sunbelt_client_row_count.sql add n/a: is itself a test is the expectation n/a: is itself a test n/a: is itself a test n/a: is itself a test n/a: is itself a test n/a: no semantic models (baseline B-4)
models/raw_vault/student_h.sql removed in housekeeping (DIG-579): exploratory model n/a: removed n/a: removed n/a: removed n/a: removed n/a: removed n/a: removed n/a: no semantic models (baseline B-4)
models/staging/stg_student.sql removed in housekeeping (DIG-579): exploratory model n/a: removed n/a: removed n/a: removed n/a: removed n/a: removed n/a: removed n/a: no semantic models (baseline B-4)
package-lock.yml removed from the root; dbt deps writes the lock under dbt/ n/a: removed n/a: removed n/a: removed n/a: removed n/a: removed n/a: removed n/a: no semantic models (baseline B-4)
packages.yml moved to dbt/packages.yml n/a: moved n/a: moved n/a: moved n/a: moved n/a: moved n/a: moved n/a: no semantic models (baseline B-4)
reader/build_course_page.py add: builds the course’s reading page from Pilot (DIG-578) n/a: course tooling outside the warehouse; checked by reading the page it builds n/a: course tooling outside the warehouse; checked by reading the page it builds n/a: course tooling outside the warehouse; checked by reading the page it builds n/a: course tooling outside the warehouse; checked by reading the page it builds n/a: course tooling outside the warehouse; checked by reading the page it builds n/a: course tooling outside the warehouse; checked by reading the page it builds n/a: no semantic models (baseline B-4)
seeds/student.csv removed in housekeeping (DIG-579): exploratory model n/a: removed n/a: removed n/a: removed n/a: removed n/a: removed n/a: removed n/a: no semantic models (baseline B-4)
setup/infrastructure/admin_separation.sql add: administration roles n/a: DDL script, proven by reading back the objects it creates n/a: DDL script, proven by reading back the objects it creates n/a: DDL script, proven by reading back the objects it creates n/a: DDL script, proven by reading back the objects it creates n/a: DDL script, proven by reading back the objects it creates n/a: DDL script, proven by reading back the objects it creates n/a: no semantic models (baseline B-4)
setup/infrastructure/developer_keys/RAYSERRANO.sql add: a developer’s public key n/a: DDL script, proven by reading back the objects it creates n/a: DDL script, proven by reading back the objects it creates n/a: DDL script, proven by reading back the objects it creates n/a: DDL script, proven by reading back the objects it creates n/a: DDL script, proven by reading back the objects it creates n/a: DDL script, proven by reading back the objects it creates n/a: no semantic models (baseline B-4)
setup/infrastructure/environment_tiers.sql add: the four tiers (D-2) n/a: DDL script, proven by reading back the objects it creates n/a: DDL script, proven by reading back the objects it creates n/a: DDL script, proven by reading back the objects it creates n/a: DDL script, proven by reading back the objects it creates n/a: DDL script, proven by reading back the objects it creates n/a: DDL script, proven by reading back the objects it creates n/a: no semantic models (baseline B-4)
setup/infrastructure/landing.sql add (D-1, D-12), extended in increment 2 (step 22) n/a: DDL script, proven by reading back the objects it creates n/a: DDL script, proven by reading back the objects it creates n/a: DDL script, proven by reading back the objects it creates n/a: DDL script, proven by reading back the objects it creates n/a: DDL script, proven by reading back the objects it creates n/a: DDL script, proven by reading back the objects it creates n/a: no semantic models (baseline B-4)
setup/infrastructure/landing_increment2_dev_claude_ws.sql add: increment 2’s landing tables in the workstation clone (step 22, answer 1b) n/a: DDL script, proven by reading back the objects it creates n/a: DDL script, proven by reading back the objects it creates n/a: DDL script, proven by reading back the objects it creates n/a: DDL script, proven by reading back the objects it creates n/a: DDL script, proven by reading back the objects it creates n/a: DDL script, proven by reading back the objects it creates n/a: no semantic models (baseline B-4)
setup/infrastructure/pilot_reader.sql add: Pilot read access n/a: DDL script, proven by reading back the objects it creates n/a: DDL script, proven by reading back the objects it creates n/a: DDL script, proven by reading back the objects it creates n/a: DDL script, proven by reading back the objects it creates n/a: DDL script, proven by reading back the objects it creates n/a: DDL script, proven by reading back the objects it creates n/a: no semantic models (baseline B-4)
setup/infrastructure/service_users.sql add: service users n/a: DDL script, proven by reading back the objects it creates n/a: DDL script, proven by reading back the objects it creates n/a: DDL script, proven by reading back the objects it creates n/a: DDL script, proven by reading back the objects it creates n/a: DDL script, proven by reading back the objects it creates n/a: DDL script, proven by reading back the objects it creates n/a: no semantic models (baseline B-4)
setup/keys/new_developer_keypair.ps1 add: creates a developer key pair n/a: workstation script outside the warehouse; proven by the key it created n/a: workstation script outside the warehouse; proven by the key it created n/a: workstation script outside the warehouse; proven by the key it created n/a: workstation script outside the warehouse; proven by the key it created n/a: workstation script outside the warehouse; proven by the key it created n/a: workstation script outside the warehouse; proven by the key it created n/a: no semantic models (baseline B-4)
setup/runbooks/dbt_cloud_qa_environment.md add: runbook n/a: documentation, no code n/a: documentation, no code n/a: documentation, no code n/a: documentation, no code n/a: documentation, no code n/a: documentation, no code n/a: no semantic models (baseline B-4)
setup/runbooks/github_machine_account.md add: runbook n/a: documentation, no code n/a: documentation, no code n/a: documentation, no code n/a: documentation, no code n/a: documentation, no code n/a: documentation, no code n/a: no semantic models (baseline B-4)
setup/scripts/dev_scoped_rebuild.sh add (D-20, G-12) n/a: script; refusal outside developer databases tested live n/a: script; refusal outside developer databases tested live n/a: script; refusal outside developer databases tested live n/a: script; refusal outside developer databases tested live n/a: script; refusal outside developer databases tested live n/a: script; refusal outside developer databases tested live n/a: no semantic models (baseline B-4)

The fix to release 1 (DIG-594) changes or adds 16 files, from git diff --name-status origin/qa...HEAD at commit 976744e on its branch, 2026-10-28 21:00Z, one row each:

File Change 1 Built-ins 2 Expectations 3 Unit tests 4 Logic assertions 5 Detectors 6 Reconciliations 7 Semantic surface
dbt/dbt_project.yml change: the on-run-end hook runs declare_vault_keys (D-43) n/a: configuration; proven by every build n/a: configuration; proven by every build n/a: configuration; proven by every build n/a: configuration; proven by every build n/a: configuration; proven by every build n/a: configuration; proven by every build n/a: no semantic models (baseline B-4)
dbt/macros/declare_vault_keys.sql add (D-43) n/a: macro; its output is the 22 constraints read from the information schema after each build n/a: macro n/a: a unit test cannot run an on-run-end hook; proven live: 22 keys defined, a rerun adds none n/a: macro n/a: macro n/a: macro n/a: no semantic models (baseline B-4)
dbt/models/inspectors/_inspectors.yml change: the six unit tests of paths Z1 and Z2 n/a: holds tests n/a: holds tests holds Z1, Z2 n/a: holds tests n/a: holds tests n/a: holds tests n/a: no semantic models (baseline B-4)
dbt/models/inspectors/inspector_northfield_policy_key_missing.sql add: inspector (D-45) n/a: inspector model; its findings are the proof n/a: inspector model Z1, Z2 n/a: inspector model is the inspector; one finding per row and missing key n/a: an inspector, not an auditor n/a: no semantic models (baseline B-4)
dbt/models/inspectors/inspector_sunbelt_client_key_missing.sql add: inspector (D-45) n/a: inspector model; its findings are the proof n/a: inspector model Z1, Z2 n/a: inspector model is the inspector; one finding per row and missing key n/a: an inspector, not an auditor n/a: no semantic models (baseline B-4)
dbt/models/inspectors/inspector_sunbelt_policy_sale_key_missing.sql add: inspector (D-45) n/a: inspector model; its findings are the proof n/a: inspector model Z1, Z2 n/a: inspector model is the inspector; one finding per row and missing key n/a: an inspector, not an auditor n/a: no semantic models (baseline B-4)
dbt/models/raw_vault/_increment_2.yml change: D-42’s 18 layer 1 tests; the ten satellite unit tests of area M given the known-key views holds the 18 tests of D-42 beside the existing uq_, nn_ and rel_ tests n/a: holds tests holds area M, inputs changed n/a: holds tests n/a: holds tests n/a: holds tests n/a: no semantic models (baseline B-4)
dbt/models/raw_vault/client_sunbelt_s.sql change: reads its known-key view (D-44) uq_client_sunbelt_s_pk, nn_client_sunbelt_s_hk_client_h, nn_client_sunbelt_s_ldts (D-42); rel_client_sunbelt_s_hk_client_h (D-40) kept n/a: its row count is read by verify_build area M tests kept, given the known-key view; Z3 n/a: no modeled truth beyond its parent n/a: inspectors read staging n/a: no auditor in the design for satellites n/a: no semantic models (baseline B-4)
dbt/models/raw_vault/insured_northfield_s.sql change: reads its known-key view (D-44) uq_insured_northfield_s_pk, nn_insured_northfield_s_hk_insured_h, nn_insured_northfield_s_ldts (D-42); rel_insured_northfield_s_hk_insured_h (D-40) kept n/a: its row count is read by verify_build area M tests kept, given the known-key view n/a: no modeled truth beyond its parent n/a: inspectors read staging n/a: no auditor in the design for satellites n/a: no semantic models (baseline B-4)
dbt/models/raw_vault/policy_northfield_s.sql change: reads its known-key view (D-44) uq_policy_northfield_s_pk, nn_policy_northfield_s_hk_policy_h, nn_policy_northfield_s_ldts (D-42); rel_policy_northfield_s_hk_policy_h (D-40) kept n/a: its row count is read by verify_build area M tests kept, given the known-key view n/a: no modeled truth beyond its parent n/a: inspectors read staging n/a: no auditor in the design for satellites n/a: no semantic models (baseline B-4)
dbt/models/staging/stg_northfield_policy_known_insured.sql add: known-key view (D-44) n/a: view, proved through its satellite n/a: view n/a: a filter; the satellite tests mock it, and Z3 shows no zero-key row reaches a satellite n/a: view the missing-key inspectors report the rows it leaves out n/a: view n/a: no semantic models (baseline B-4)
dbt/models/staging/stg_northfield_policy_known_policy.sql add: known-key view (D-44) n/a: view, proved through its satellite n/a: view n/a: a filter; the satellite tests mock it, and Z3 shows no zero-key row reaches a satellite n/a: view the missing-key inspectors report the rows it leaves out n/a: view n/a: no semantic models (baseline B-4)
dbt/models/staging/stg_sunbelt_client_known_client.sql add: known-key view (D-44) n/a: view, proved through its satellite n/a: view n/a: a filter; the satellite tests mock it, and Z3 shows no zero-key row reaches a satellite n/a: view the missing-key inspectors report the rows it leaves out n/a: view n/a: no semantic models (baseline B-4)
infra/runbooks/dbt_cloud_prod_environment.md change: the promotion’s one-time correction step (D-46) n/a: documentation, no code n/a: documentation, no code n/a: documentation, no code n/a: documentation, no code n/a: documentation, no code n/a: documentation, no code n/a: no semantic models (baseline B-4)
infra/snowflake/correct_zero_key_satellite_rows.sql add: one-time correction (D-46) n/a: script; proven live on the development vault with production’s four rows copied in n/a: script; proven live on the development vault with production’s four rows copied in n/a: script; proven live on the development vault with production’s four rows copied in n/a: script; proven live on the development vault with production’s four rows copied in n/a: script; proven live on the development vault with production’s four rows copied in n/a: script; proven live on the development vault with production’s four rows copied in n/a: no semantic models (baseline B-4)
infra/snowflake/ddl/dv.sql change: regenerated with the 22 keys (D-43) n/a: generated; infra/scripts/vault_ddl.py –check compares it with a tier n/a: generated; infra/scripts/vault_ddl.py –check compares it with a tier n/a: generated; infra/scripts/vault_ddl.py –check compares it with a tier n/a: generated; infra/scripts/vault_ddl.py –check compares it with a tier n/a: generated; infra/scripts/vault_ddl.py –check compares it with a tier n/a: generated; infra/scripts/vault_ddl.py –check compares it with a tier n/a: no semantic models (baseline B-4)
infra/runbooks/github_machine_account.md change: the reference architecture removed from its comments (D-48) n/a: comments only, no code changed; proven by the build’s guard n/a: comments only, no code changed; proven by the build’s guard n/a: comments only, no code changed; proven by the build’s guard n/a: comments only, no code changed; proven by the build’s guard n/a: comments only, no code changed; proven by the build’s guard n/a: comments only, no code changed; proven by the build’s guard n/a: comments only, no code changed; proven by the build’s guard
infra/snowflake/admin_separation.sql change: the reference architecture removed from its comments (D-48) n/a: comments only, no code changed; proven by the build’s guard n/a: comments only, no code changed; proven by the build’s guard n/a: comments only, no code changed; proven by the build’s guard n/a: comments only, no code changed; proven by the build’s guard n/a: comments only, no code changed; proven by the build’s guard n/a: comments only, no code changed; proven by the build’s guard n/a: comments only, no code changed; proven by the build’s guard
infra/snowflake/environment_tiers.sql change: the reference architecture removed from its comments (D-48) n/a: comments only, no code changed; proven by the build’s guard n/a: comments only, no code changed; proven by the build’s guard n/a: comments only, no code changed; proven by the build’s guard n/a: comments only, no code changed; proven by the build’s guard n/a: comments only, no code changed; proven by the build’s guard n/a: comments only, no code changed; proven by the build’s guard n/a: comments only, no code changed; proven by the build’s guard
infra/snowflake/landing.sql change: the reference architecture removed from its comments (D-48) n/a: comments only, no code changed; proven by the build’s guard n/a: comments only, no code changed; proven by the build’s guard n/a: comments only, no code changed; proven by the build’s guard n/a: comments only, no code changed; proven by the build’s guard n/a: comments only, no code changed; proven by the build’s guard n/a: comments only, no code changed; proven by the build’s guard n/a: comments only, no code changed; proven by the build’s guard
infra/snowflake/refresh_landing_tier.sql change: the reference architecture removed from its comments (D-48) n/a: comments only, no code changed; proven by the build’s guard n/a: comments only, no code changed; proven by the build’s guard n/a: comments only, no code changed; proven by the build’s guard n/a: comments only, no code changed; proven by the build’s guard n/a: comments only, no code changed; proven by the build’s guard n/a: comments only, no code changed; proven by the build’s guard n/a: comments only, no code changed; proven by the build’s guard
site/excluded_terms.txt add: the terms no built page may carry (D-48) n/a: a list n/a: a list n/a: a list n/a: a list n/a: a list n/a: a list n/a: read by the build guard
site/build_site.py change: the guard writes no page carrying a listed term (D-48); the executive summary (D-49); the release page sends readers to the Ask page (D-50); the test count 137; the counts read from their sources (D-52) n/a: the site builder n/a n/a n/a n/a n/a the guard: 120 hits refused before the removal, 22 pages written with none after; the summary first on the home page, its switch proven off and on; every internal address resolving
site/dev/qa_retest.py change: runs inside the workstation container, accepting its gateway’s certificate only where installed, and counts spelled-out numbers (D-51) n/a: a test script n/a n/a n/a n/a n/a 26 of 26 from the container against the QA function

The release 1 mart, the views that serve the semantic layer, adds 6 files at commit f48c24b, one row each; the fix changes two of them and adds a seventh at commit 2a921a1 (D-47):

File Change 1 Built-ins 2 Expectations 3 Unit tests 4 Logic assertions 5 Detectors 6 Reconciliations 7 Semantic surface
dbt/models/mart/_mart.yml add: the mart views and their tests; change: finding_fact’s dimensions finding_kind and finding_row, the metrics records_not_accepted and rows_missing_key, and the unit test unit_finding_fact_kind_and_row (D-47) holds uq_client_policy_fact_client_policy_key, uq_agent_policy_fact_agent_policy_key and uq_policy_fact_policy_key holds unit_finding_fact_kind_and_row n/a: holds tests n/a: holds tests n/a: holds tests n/a: holds tests records_not_accepted and rows_missing_key, read in dev: 3 and 6
dbt/models/mart/client_policy_fact.sql add: a mart view over the vault uq_client_policy_fact_client_policy_key: one row per key n/a: view n/a: a plain view over tested vault models n/a: view n/a: view n/a: view n/a: the mart views serve the semantic layer, outside this plan
dbt/models/mart/agent_policy_fact.sql add: a mart view over the vault uq_agent_policy_fact_agent_policy_key: one row per key n/a: view n/a: a plain view over tested vault models n/a: view n/a: view n/a: view n/a: the mart views serve the semantic layer, outside this plan
dbt/models/mart/policy_fact.sql add: a mart view over the vault uq_policy_fact_policy_key: one row per key n/a: view n/a: a plain view over tested vault models n/a: view n/a: view n/a: view n/a: the mart views serve the semantic layer, outside this plan
dbt/models/mart/finding_fact.sql add: a mart view; change: reads the findings through the landing_config source and derives finding_kind and finding_row (D-47) n/a: no key test; its rows are the findings table unit_finding_fact_kind_and_row: one finding of each finder, a row missing two keys naming one row n/a: view n/a: view n/a: view n/a: view the two metrics above
dbt/models/mart/time_spine_day.sql add: a mart view n/a: no key test; a generated calendar n/a: view n/a: view n/a: view n/a: view n/a: view n/a: the mart views serve the semantic layer, outside this plan
dbt/models/mart/_landing_config__sources.yml add: the landing’s CONFIG schema as a source, so finding_fact can be unit-tested (D-47) n/a: declares a source n/a: the unit test’s input n/a n/a n/a n/a n/a

2.2 Lab 1-2 coverage (Ray’s branch, planned)

Lab 1-2 lands Pinecrest Mutual’s policy data (design D-37 to D-39; profile 2.1.5 and P-20). It adds no business-logic model, so it has no logic area and no unit test; its proofs are layers 1 and 2 and the live proof of land_act. The files it changes, every layer walked:

File Change 1 Built-ins 2 Expectations 3 Unit tests 4 Logic assertions 5 Detectors 6 Reconciliations 7 Semantic surface
setup/infrastructure/landing.sql modify, by the teacher as the stand-in source (commit 0a83a38): the PINECREST schema and table (D-37) n/a: DDL script, proven by reading back the objects it creates n/a: DDL n/a: DDL n/a: DDL n/a: DDL n/a: DDL n/a: no semantic models (baseline B-4)
dbt/macros/operations/land_act.sql modify, by the teacher as the stand-in source (commit 0a83a38): the table pinecrest_policy and its twelve rows (D-38) n/a: operations macro its rows are checked by expect_pinecrest_policy_rows_as_profiled n/a: proved live on 2026-10-25: the dry run listed 0 present, the loads left 8 and 4 rows, a reload was refused, LANDING_QA was refused n/a: operations macro n/a: operations macro n/a: operations macro n/a: no semantic models (baseline B-4)
dbt/models/staging/_sunbelt__sources.yml modify: the source pinecrest.policy and its tests (D-39) holds nn_pinecrest_policy_loaded_at holds uqc_pinecrest_policy_loaded_at_policy_number n/a: declaration n/a: declaration n/a: declaration n/a: declaration n/a: no semantic models (baseline B-4)
dbt/tests/expect_pinecrest_policy_rows_as_profiled.sql add, written by the teacher before Ray’s code n/a: is itself a test is the expectation: the landed rows equal profile P-20’s twelve, in both directions n/a: is itself a test n/a: is itself a test n/a: is itself a test n/a: is itself a test n/a: no semantic models (baseline B-4)

2.3 Mart: the agreed design

The mart’s unit-test paths fall into seven logic areas. Each area’s paths sit in the tables of sections 2.3.1 to 2.3.3, beside the layer 1, 2 and 4 tests that guard the same objects.

Area Models Dimensions Brute force Collapse and reason Paths
R: a carrier’s organization record stg_northfield_organization, stg_pinecrest_organization A landed record with its carrier code and name 1 per model None: a record without its name is refused at landing by OL2 OS1, one per model
S: an organization by carrier feed and load organization_h Feed (Northfield Life, Pinecrest Mutual); arrival (first load only, resent later, first seen later); hub state (first build, incremental) 12 The two feeds behave alike except when both send in one load; hub state is separated by the arrival paths, as in area B OH1 to OH4
T: organization versions organization_northfield_s, organization_pinecrest_s Arrival (first, resent); values on a resend (unchanged, changed) 4 per satellite A first arrival has no prior values to compare OT1 to OT3, per satellite
U: ghost members person_dim, organization_dim, policy_dim Hub row (real, unknown, error) 3 per dimension Real rows are proved by the layer 1 key tests; the two ghost rows behave alike DG1 to DG3
V: an attribute from the most recent sale person_dim (agent name), policy_dim (plan name) Sales naming the attribute (one, several with different values) 2 per dimension One sale is the baseline every other area builds on DL1, DL2
W: one role per view client_dim, insured_dim, agent_dim, carrier_dim Base row’s role or feed (the view’s own, another) 2 per view One test with every role present proves both DS1 to DS4
X: a version’s validity policy_terms_fact Versions of a policy (one, several) 2 None FV1, FV2

2.3.1 The carrier feed: landing, staging, organization hub and satellite

Path Scenario Expected result Unit-test name
OL1 Northfield Life’s landing table NORTHFIELD.ORGANIZATION as landed: one organization record per carrier code in each load Unique: no carrier code twice in one load uqc_northfield_organization_loaded_at_carrier_code, in layer 2
OL2 Every row of NORTHFIELD.ORGANIZATION Each carries a carrier name: no carrier known by a code alone (D-11) nn_northfield_organization_carrier_name, in layer 1
OL1 Pinecrest Mutual’s landing table PINECREST.ORGANIZATION as landed: one organization record per carrier code in each load Unique: no carrier code twice in one load uqc_pinecrest_organization_loaded_at_carrier_code, in layer 2
OL2 Every row of PINECREST.ORGANIZATION Each carries a carrier name: no carrier known by a code alone (D-11) nn_pinecrest_organization_carrier_name, in layer 1
OS1 A landed Northfield Life record with carrier code NFL and carrier name Northfield Life One staging row with the code and the name as sent, the source system NFL named, and the hash key of the code unit_stg_northfield_organization_os1_arrival_code_and_name
OS1 A landed Pinecrest Mutual record with its carrier code and its carrier name One staging row with the code and the name as sent, Pinecrest Mutual’s source system named, and the hash key of the code unit_stg_pinecrest_organization_os1_arrival_code_and_name
OK1 organization_h as built, with its ghost rows hk_organization_h unique: rows equal keys uq_organization_h_hk_organization_h, in layer 1
OK2 organization_h as built hk_organization_h never empty nn_organization_h_hk_organization_h, in layer 1
OH1 NFL in Northfield Life’s staging model in load 1 only, first build One hub row, load 1 timestamp, record source NFL unit_organization_h_oh1_new_key
OH2 NFL in load 1 and resent in load 2 One hub row with the load 1 timestamp unit_organization_h_oh2_repeat_keeps_first
OH3 Pinecrest Mutual’s code first seen in load 2, incremental build with NFL already in the hub Pinecrest Mutual’s code inserted with the load 2 timestamp; NFL not inserted again unit_organization_h_oh3_later_load_inserts
OH4 Both carriers’ staging models in one load: NFL from Northfield Life, Pinecrest Mutual’s code from Pinecrest Mutual Two hub rows, each with its own carrier’s record source unit_organization_h_oh4_both_carrier_feeds
OK1 organization_northfield_s as built Unique on its parent hash key with its load time uq_organization_northfield_s_pk, in layer 1
OK2 organization_northfield_s as built Parent hash key never empty nn_organization_northfield_s_hk_organization_h, in layer 1
OK3 organization_northfield_s as built Load time never empty nn_organization_northfield_s_ldts, in layer 1
OK4 Every hk_organization_h on organization_northfield_s Each exists in organization_h: no orphans rel_organization_northfield_s_hk_organization_h, in layer 1
OT1 First Northfield Life record of NFL, name Northfield Life One satellite row unit_organization_northfield_s_ot1_first_version
OT2 NFL resent unchanged No new version unit_organization_northfield_s_ot2_unchanged_resend
OT3 NFL: name Northfield Life in load 1, Northfield Life Insurance Company in load 2 A second version; the first kept unit_organization_northfield_s_ot3_changed_name_new_version
OK1 organization_pinecrest_s as built Unique on its parent hash key with its load time uq_organization_pinecrest_s_pk, in layer 1
OK2 organization_pinecrest_s as built Parent hash key never empty nn_organization_pinecrest_s_hk_organization_h, in layer 1
OK3 organization_pinecrest_s as built Load time never empty nn_organization_pinecrest_s_ldts, in layer 1
OK4 Every hk_organization_h on organization_pinecrest_s Each exists in organization_h: no orphans rel_organization_pinecrest_s_hk_organization_h, in layer 1
OT1 First Pinecrest Mutual record of its code, name Pinecrest Mutual One satellite row unit_organization_pinecrest_s_ot1_first_version
OT2 The same record resent unchanged No new version unit_organization_pinecrest_s_ot2_unchanged_resend
OT3 The same code with a changed name in load 2 A second version; the first kept unit_organization_pinecrest_s_ot3_changed_name_new_version

2.3.2 Dimensions: person_dim, organization_dim, policy_dim, source_dim, day_dim, and the role views client_dim, insured_dim, agent_dim, carrier_dim

Path Scenario Expected result Unit-test name
DU1 person_dim as built: client, insured and agent records with their ghost members person_key unique: rows equal keys uq_person_dim_person_key, in layer 1
DG1 The ghost rows of client_h, insured_h and agent_h Each ghost key kept once in person_dim, with no role, and carried by every role view (mart design D-14) unit_person_dim_dg1_ghost_members_kept
DL1 Agent 17001001, joined by agent_policy_l to NF-100001 and NF-100007, whose sales, loaded 2026-10-01 02:00 and 2026-10-02 02:00, give two different agent names The agent’s full_name is the name on the sale loaded 2026-10-02 02:00 unit_person_dim_dl1_agent_name_from_latest_sale
DU2 organization_dim as built: each organization record a carrier feed sends, with the ghost members organization_key unique: rows equal keys uq_organization_dim_organization_key, in layer 1
DG2 The ghost rows of organization_h Kept in organization_dim as unknown and error members unit_organization_dim_dg2_ghost_members_kept
DU3 policy_dim as built: one policy number per carrier, with the ghost members policy_key unique: rows equal keys uq_policy_dim_policy_key, in layer 1
DG3 The ghost rows of policy_h; a sale with a blank policy number, joined to the unknown policy Kept in policy_dim as unknown and error members; the unknown policy’s carrier reads (unknown) unit_policy_dim_dg3_ghost_members_kept
DL2 Two sales of NF-100001: plan Senior Term 20 loaded 2026-10-01 02:00, plan Final Expense 10K loaded 2026-10-02 02:00 policy_dim’s plan_name for NF-100001 is Final Expense 10K unit_policy_dim_dl2_plan_name_from_latest_sale
DR2 Every policy_key on client_policy_role_fact, the unknown policy of a blank policy number included Each exists in policy_dim: no orphans rel_client_policy_role_fact_policy_key, in layer 1
DR4 Every policy_key on agent_policy_fact Each exists in policy_dim: no orphans rel_agent_policy_fact_policy_key, in layer 1
DR6 Every policy_key on policy_terms_fact Each exists in policy_dim: no orphans rel_policy_terms_fact_policy_key, in layer 1
DU4 source_dim as built over seed_source_system source_key unique: rows equal keys uq_source_dim_source_key, in layer 1
DR5 Every first_named_by_source_key on agent_policy_fact, SSI and NFL Each exists in source_dim: no orphans rel_agent_policy_fact_first_named_by_source_key, in layer 1
DR7 Every source_key on finding_fact, the findings’ SUNBELT and NORTHFIELD mapped in the view to SSI and NFL Each exists in source_dim: no orphans rel_finding_fact_source_key, in layer 1
DU5 day_dim as generated: the days of 2026 and 2027 date_day unique: one row per calendar day uq_day_dim_date_day, in layer 1
DT1 Every sold_date on client_policy_role_fact, empty where the sale gives none Each date given exists in day_dim rel_client_policy_role_fact_sold_date, in layer 1
DT2 Every first_known_date on client_policy_role_fact Each exists in day_dim rel_client_policy_role_fact_first_known_date, in layer 1
DT3 Every first_known_date on agent_policy_fact Each exists in day_dim rel_agent_policy_fact_first_known_date, in layer 1
DT4 Every valid_from_date on policy_terms_fact Each exists in day_dim rel_policy_terms_fact_valid_from_date, in layer 1
DT5 Every valid_to_date on policy_terms_fact, empty while the version is current Each date given exists in day_dim rel_policy_terms_fact_valid_to_date, in layer 1
DT6 Every effective_date on policy_terms_fact Each exists in day_dim rel_policy_terms_fact_effective_date, in layer 1
DT7 Every detected_date on finding_fact Each exists in day_dim rel_finding_fact_detected_date, in layer 1
DU6 client_dim as built client_key unique: rows equal keys uq_client_dim_client_key, in layer 1
DS1 person_dim holding A-1001 as client, NLI-55001 as insured and 17001001 as agent client_dim returns only A-1001, its person_key as client_key, with its source_key and first_known_date, and the two ghost rows (mart design D-14) unit_client_dim_ds1_client_role_only
DR1 Every client_key on client_policy_role_fact, the zero key of a sale with an empty client number included Each exists in client_dim: no orphans rel_client_policy_role_fact_client_key, in layer 1
DU7 insured_dim as built insured_key unique: rows equal keys uq_insured_dim_insured_key, in layer 1
DS2 person_dim holding A-1001 as client, NLI-55001 as insured and 17001001 as agent insured_dim returns only NLI-55001, its person_key as insured_key, and the two ghost rows (mart design D-14) unit_insured_dim_ds2_insured_role_only
DU8 agent_dim as built agent_key unique: rows equal keys uq_agent_dim_agent_key, in layer 1
DS3 person_dim holding A-1001 as client, NLI-55001 as insured and 17001001 as agent agent_dim returns only 17001001, its person_key as agent_key and its number as agent_npn, and the two ghost rows (mart design D-14) unit_agent_dim_ds3_agent_role_only
DR3 Every agent_key on agent_policy_fact Each exists in agent_dim: no orphans rel_agent_policy_fact_agent_key, in layer 1
DU9 carrier_dim as built carrier_key unique: rows equal keys uq_carrier_dim_carrier_key, in layer 1
DS4 organization_dim holding NFL, sent through Northfield Life’s carrier feed, and an organization sent through no carrier feed carrier_dim returns only NFL, its organization_key as carrier_key, with its carrier_code and carrier_name, and the two ghost rows (mart design D-14) unit_carrier_dim_ds4_carrier_feed_organizations_only

2.3.3 Facts: client_policy_role_fact, agent_policy_fact, policy_terms_fact, finding_fact

Path Scenario Expected result Unit-test name
FG1 client_policy_role_fact as built Rows equal keys: client_policy_role_key unique, one row per client, policy and role uq_client_policy_role_fact_client_policy_role_key
FK1 Each client_key of client_policy_role_fact Exists in client_dim; no orphans rel_client_policy_role_fact_client_key
FK2 Each policy_key of client_policy_role_fact, the unknown policy’s ghost key included Exists in policy_dim; no orphans rel_client_policy_role_fact_policy_key
FD1 Each sold_date of client_policy_role_fact Exists as a date_day in day_dim; an empty sold_date, where the sale gives none, is not checked rel_client_policy_role_fact_sold_date
FD2 Each first_known_date of client_policy_role_fact Exists as a date_day in day_dim rel_client_policy_role_fact_first_known_date
FG2 agent_policy_fact as built Rows equal keys: agent_policy_key unique, one row per agent and policy uq_agent_policy_fact_agent_policy_key
FK3 Each agent_key of agent_policy_fact Exists in agent_dim; no orphans rel_agent_policy_fact_agent_key
FK4 Each policy_key of agent_policy_fact Exists in policy_dim; no orphans rel_agent_policy_fact_policy_key
FK5 Each first_named_by_source_key of agent_policy_fact Exists in source_dim; no orphans rel_agent_policy_fact_first_named_by_source_key
FD3 Each first_known_date of agent_policy_fact Exists as a date_day in day_dim rel_agent_policy_fact_first_known_date
FG3 policy_terms_fact as built Rows equal keys: policy_terms_key unique, one row per policy and load uq_policy_terms_fact_policy_terms_key
FK6 Each policy_key of policy_terms_fact Exists in policy_dim; no orphans rel_policy_terms_fact_policy_key
FD4 Each valid_from_date of policy_terms_fact Exists as a date_day in day_dim rel_policy_terms_fact_valid_from_date
FD5 Each valid_to_date of policy_terms_fact Exists as a date_day in day_dim; an empty valid_to_date, the current version, is not checked rel_policy_terms_fact_valid_to_date
FD6 Each effective_date of policy_terms_fact Exists as a date_day in day_dim rel_policy_terms_fact_effective_date
FM1 face_amount summed over every version in policy_terms_fact, against its sum over policy_northfield_s1 Equal assert_policy_terms_fact_face_amount_conserved
FV1 One version of a policy, current: load end date 8888-12-31 23:59:59 valid_to_date empty unit_policy_terms_fact_fv1_current_version_valid_to_empty
FV2 NF-100003: IF loaded 2026-10-01 02:00, LP loaded 2026-10-02 02:00 The first version valid from 2026-10-01 to 2026-10-02; the second valid from 2026-10-02 with valid_to_date empty unit_policy_terms_fact_fv2_earlier_version_valid_to_set
FG4 finding_fact as built Rows equal keys: finding_key unique, one row per finding uq_finding_fact_finding_key
FK7 Each source_key of finding_fact, the findings’ SUNBELT and NORTHFIELD mapped to SSI and NFL Exists in source_dim; no orphans rel_finding_fact_source_key
FD7 Each detected_date of finding_fact Exists as a date_day in day_dim rel_finding_fact_detected_date

2.3.4 Semantic layer and Mary’s questions: metrics, the six saved queries, the masking mock (D-9), consumer probes

Path Scenario Expected result Unit-test name
SR1 policies_held grouped by client, carrier, policy and role, through MetricFlow and through a direct query on client_policy_l The two routes give equal answers: the distinct count of policy keys in each group recon_policies_held_two_routes, in layer 6
SR2 client_policy_roles grouped by client, carrier, policy and role, through MetricFlow and through a direct query on client_policy_l The two routes give equal answers: the distinct count of role-row keys in each group recon_client_policy_roles_two_routes, in layer 6
SR3 policies_sold grouped by agent, policy, carrier and first-named source, through MetricFlow and through a direct query on agent_policy_l The two routes give equal answers: the distinct count of policy keys in each group recon_policies_sold_two_routes, in layer 6
SR4 agents_named grouped by policy, through MetricFlow and through a direct query on agent_policy_l The two routes give equal answers: the distinct count of agent keys per policy, 2 or more where the sources disagree (D-8) recon_agents_named_two_routes, in layer 6
SR5 face_amount_current grouped by carrier, through MetricFlow and through a direct query on policy_northfield_s1 The two routes give equal answers: the sum of face amount over current versions only, load end date 8888-12-31 (D-4) recon_face_amount_current_two_routes, in layer 6
SR6 face_amount grouped by policy with valid-from and valid-to days, through MetricFlow and through a direct query on policy_northfield_s1 The two routes give equal answers: the face amount of each version recon_face_amount_two_routes, in layer 6
SR7 policy_versions grouped by policy with valid-from and valid-to days, through MetricFlow and through a direct query on policy_northfield_s1 The two routes give equal answers: the distinct count of versions, one per policy and load recon_policy_versions_two_routes, in layer 6
SR8 records_not_accepted grouped by source and finder type, through MetricFlow and through a direct query on CONFIG.DATA_FINDING The two routes give equal answers: the distinct count of form findings in each group recon_records_not_accepted_two_routes, in layer 6
SR9 rows_missing_key grouped by source and finder, through MetricFlow and through a direct query on CONFIG.DATA_FINDING The two routes give equal answers: the distinct count of rows named by missing-key findings in each group recon_rows_missing_key_two_routes, in layer 6
SQ1 Saved query q09_client_policies run: policies_held and client_policy_roles by client, carrier, policy and role Equals the figure on Mary’s release page for Q-9 sq_q09_client_policies_answer, in layer 7
SQ2 Saved query q10_coverage_by_carrier run: face_amount_current by carrier Equals the figure on Mary’s release page for Q-10 sq_q10_coverage_by_carrier_answer, in layer 7
SQ3 Saved query q11_agent_per_policy run: policies_sold and agents_named by agent and policy Equals the figure on Mary’s release page for Q-11 sq_q11_agent_per_policy_answer, in layer 7
SQ4 Saved query q13_client_arrivals run: policies_held and client_policy_roles by the client’s source and first-known date Equals the figure on Mary’s release page for Q-13 sq_q13_client_arrivals_answer, in layer 7
SQ5 Saved query q14_policy_versions run: policy_versions and face_amount by policy, valid-from day, valid-to day and status Equals the figure on Mary’s release page for Q-14 sq_q14_policy_versions_answer, in layer 7
SQ6 Saved query q15_records_not_accepted run: records_not_accepted and rows_missing_key by source and finder type Equals the figure on Mary’s release page for Q-15 sq_q15_records_not_accepted_answer, in layer 7
SD1 Every semantic model in _conformed_dm.yml Each carries a description stating what one row is and which questions it serves desc_semantic_models_described, in layer 7
SD2 Every metric of section 4.1 of the design Each carries a description stating what it counts, how to read it, what it leaves out, what to pair it with, and the decision that defined it desc_metrics_described, in layer 7
SD3 Every column of sections 3.2 and 3.3 of the design Each carries a description stating what it holds, including when it is empty or unknown desc_columns_described, in layer 7
SM1 insured_dim read as the governance role (D-9) birth_date and address return the real values assert_insured_dim_masking_governance_role_real_values, in layer 4
SM2 insured_dim read as another role (D-9) The mask: birth_date gives the birth year only; address is reduced to its state assert_insured_dim_masking_other_role_masked, in layer 4
P-9 DV Digest asked Q-9: policies_held and client_policy_roles by client, carrier, policy and role DV Digest’s answer equals the direct query on DV_QA probe_q09_client_policies, in consumer certification
P-10 DV Digest asked Q-10: face_amount_current by carrier DV Digest’s answer equals the direct query on DV_QA probe_q10_coverage_by_carrier, in consumer certification
P-11 DV Digest asked Q-11: policies_sold and agents_named by agent and policy DV Digest’s answer equals the direct query on DV_QA probe_q11_agent_per_policy, in consumer certification
P-13 DV Digest asked Q-13: policies_held and client_policy_roles by the client’s source and first-known date DV Digest’s answer equals the direct query on DV_QA probe_q13_client_arrivals, in consumer certification
P-14 DV Digest asked Q-14: policy_versions and face_amount by policy, valid-from day, valid-to day and status DV Digest’s answer equals the direct query on DV_QA probe_q14_policy_versions, in consumer certification
P-15 DV Digest asked Q-15: records_not_accepted and rows_missing_key by source and finder type DV Digest’s answer equals the direct query on DV_QA probe_q15_records_not_accepted, in consumer certification

3. Seven-layer proof plan

Layer Named artifacts Expected result Applicability and reason
1 — Built-ins Increments 1 and 1.1: nn_sunbelt_client_crm_row_id; nn_sunbelt_client_loaded_at; uq_client_h_hk_client_h; nn_client_h_hk_client_h; uq_seed_source_system_code; nn_seed_source_system_code. Increment 2: nn_sunbelt_policy_sale_loaded_at; nn_northfield_policy_loaded_at; Lab 1-2: nn_pinecrest_policy_loaded_at; uq_ and nn_ on the hash keys of policy_h, insured_h, agent_h, client_policy_l, insured_policy_l and agent_policy_l. D-40: rel_client_sunbelt_s_hk_client_h, rel_client_policy_sunbelt_s_hk_client_policy_l, rel_insured_northfield_s_hk_insured_h and rel_policy_northfield_s_hk_policy_h. D-42: rel_client_policy_l_hk_client_h, rel_client_policy_l_hk_policy_h, rel_insured_policy_l_hk_insured_h, rel_insured_policy_l_hk_policy_h, rel_agent_policy_l_hk_agent_h and rel_agent_policy_l_hk_policy_h; on each of the four satellites uq_pk, its parent hash key with its load time, and nn and nnldts. 42 tests, severity warn. The mart (section 2.3): 39 more, its uq, nn_ and rel_ rows, severity warn 0 failures Applies (design layer 1)
2 — Expectations uqc_sunbelt_client_loaded_at_crm_row_id; expect_sunbelt_client_row_count; uqc_sunbelt_policy_sale_loaded_at_policy_client_role; uqc_northfield_policy_loaded_at_policy_number; expect_increment_2_staging_keeps_every_landed_row; Lab 1-2: uqc_pinecrest_policy_loaded_at_policy_number and expect_pinecrest_policy_rows_as_profiled. 5 tests, and 2 more with Lab 1-2, severity warn. The mart: uqc_northfield_organization_loaded_at_carrier_code and uqc_pinecrest_organization_loaded_at_carrier_code 0 failures Applies (design layer 2). dbt_utils and singular tests stand in for dbt-expectations, which the workstation cannot install (deviation DEV-2). Increment 2’s counts compare a source query with a target query, with no fixed number (design section 8); increment 1’s row count checks the counts the profile specifies for each act
3 — Unit tests 81: the 12 of logic areas A to D (increments 1 and 1.1), the 62 of areas E to Q (increment 2) and the 7 of the fix to release 1 (area Z’s 6 and unit_finding_fact_kind_and_row, D-47), each named in section 2. The mart: 23 more, areas R to X (section 2.3) v3’s tests ran red then green, recorded on DIG-574 at 2026-10-25 01:22 UTC; the 23 added in v4 ran red under planted defects, then green (areas M, P and Q); area Z’s 6 pass in the fix’s build of 2026-10-28 Applies (design layer 3). Unit tests carry no severity: under the Fusion engine they always fail as errors
4 — Logic assertions assert_client_h_no_blank_business_key; assert_client_h_covers_usable_source_keys; assert_client_h_ghost_keys_belong_to_ghosts; assert_vault_record_sources_resolve, rewritten to read every hub and link; assert_increment_2_link_hub_keys_exist; D-41: assert_hashdiff_keeps_case_only_change, severity error. 6 tests, five at severity warn. The mart: assert_policy_terms_fact_face_amount_conserved, assert_insured_dim_masking_governance_role_real_values and assert_insured_dim_masking_other_role_masked 0 rows each Applies (design layer 4)
5 — Detectors inspector_sunbelt_client_number_form (D-9) and inspector_sunbelt_policy_number_form (D-30): one finding per nonconforming value; inspector_sunbelt_client_key_missing, inspector_sunbelt_policy_sale_key_missing and inspector_northfield_policy_key_missing (D-45): one finding per row and missing key; all in CONFIG.DATA_FINDING through merge_into; layer 5 is named inspector in this project Ten findings: A1007, A-01008 and NF100009, and 7 missing-key findings Applies (design layer 5)
6 — Reconciliations auditor_sunbelt_client_hub, auditor_sunbelt_policy_hub and auditor_northfield_policy_hub, each checking that every distinct usable key of its source exists in its hub; layer 6 is named auditor in this project. The mart: the nine two-route reconciliations recon_ of section 2.3.4 No new finding; each mart reconciliation’s two routes agree. The two findings the auditors’ first versions wrote stay in CONFIG.DATA_FINDING, disclosed in the post-implementation guide (Ray, answer 1b) Applies (design layer 6, D-10)
7 — Semantic surface The release 1 mart’s metrics records_not_accepted and rows_missing_key (D-47); the conformed mart’s six saved queries sq_q09 to sq_q15 and the three description checks desc_ of section 2.3.4 records_not_accepted 3 and rows_missing_key 6 in dev; each saved query equals the figure on Mary’s release page; every model, metric and column described Applies: the branch ships metrics (design D-47; mart design section 4)

3.1 Full-build guardrails

Artifacts Expected result
capture_baseline before and verify_build after every build: one per landing act in each increment, and each full build Every build clean (129 of 129 at commit 94639b4; the fix’s build 173 of 173 at commit f1f3ce0, run inside the facility: no table lost rows; its three growth expectations do not apply when no new data arrives, since each expects a landing act to add keys); verify_build names 5 warnings and no lookout: three rebuilds over unchanged acts, where a hub or link count did not increase, and two audit expectations reading the two retained findings

4. Consumer-question probes

Question Runnable probe Expected result
Q-1 SELECT client_number, ldts, rsrc FROM the client hub WHERE rsrc = ‘SSI’ ORDER BY client_number 35 rows: the client list’s 34 keys and A-1033, first seen in the sales data; A-1031, A-1032, A-1033 and the malformed A1007 and A-01008 at act 2’s load time, as landing first sent them; all others at act 1’s
Q-2 SELECT the inspector_sunbelt_client_number_form findings from CONFIG.DATA_FINDING Two findings, one naming A1007 and one naming A-01008
Q-3 SELECT the auditors’ findings from CONFIG.DATA_FINDING No finding written by the auditors
Q-4 Join the record source of every hub and link to the source system seed Every row names its source: client and sales rows the Sunbelt Senior client file, carrier rows Northfield Life, ghost rows the vault itself
Q-5 SELECT the client number, the policy key and the role FROM client_policy_l joined to client_h and policy_h Each sale’s client with the role the sales data sends: owner, insured or payor; A-1010 holds two roles on NF-100010
Q-6 SELECT the policy hub row of NF-100007 with every link row that reaches it One policy row; one client_policy_l row to A-1007, one insured_policy_l row to NLI-55007 and one agent_policy_l row to 17001001; no row joins A-1007 to NLI-55007
Q-9, Q-10, Q-11, Q-13, Q-14, Q-15 probe_q09_client_policies, probe_q10_coverage_by_carrier, probe_q11_agent_per_policy, probe_q13_client_arrivals, probe_q14_policy_versions and probe_q15_records_not_accepted (section 2.3.4) DV Digest’s answer equals the direct query on DV_QA

4.1 Finance workbook and initial UAT proofs

For finance reporting branches, name row/key/value parity checks against the shared report query, totals at the declared grain, Excel types/date/rounding checks and refresh preservation of consumer observations. State consumer-review cases, dispositions and acceptance evidence for the exact workbook revision under K#12 I#27. Technical verification does not imply consumer acceptance. Otherwise state NA with a reason.

Not applicable: this branch is not a finance reporting branch.

5. QA on production-shaped data

5.1 Added and changed tests on QA data

Test Expected result
Every test of sections 2 and 3: 137 tests, 81 unit and 56 data, 3 of the data tests on the release 1 mart views; the mart’s 85 tests of section 2.3 join this sweep once built All pass in the QA job’s sweep (selector qa_build) on DV_QA over LANDING_QA, each recorded by name in the QA item, , section 6. Data tests’ expected values follow the QA item’s movement ledger, section 1.3

5.2 Regression against production

Before against after inside the same fresh QA environment, never QA against production (QA standard, 4.2): capture_baseline after the fresh clones and before the build, verify_build after it, both steps of the QA job. Every movement is declared in the QA item’s ledger (section 1.3); the first QA build creates every vault object, so each moves from absent to its declared count. Design D-13, which made this section not applicable, was superseded on 2026-10-25.

5.3 Consumer probes and reconciliations on QA data

Probes Q-1 to Q-6 (section 4) rerun on DV_QA and LANDING_QA.CONFIG, through the QA role, with the expected values the QA item declares for the landing state cloned; the three auditors are the reconciliations, expected to write no finding. Recorded in the QA item, section 9.

5.4 Layer 7 in the QA collection

Applies: the protected semantic set is the release 1 mart’s metrics records_not_accepted and rows_missing_key (D-47), and, once built, the conformed mart’s metrics and its six saved queries (section 2.3.4); the fix’s QA record, , lists them.

6. Test artifact inventory

Artifact classification Count Sections that make up the count
Layer 1 built-in tests 45: 42 for the vault and 3 for the release 1 mart views 2.1, 3
Layer 2 expectations 5 2.1, 3
Layer 3 unit tests 81: 12 for increments 1 and 1.1, 62 for increment 2, 7 for the fix to release 1 1, 2, 3
Layer 4 logic assertions 6 2.1, 3
Layer 5 inspectors and layer 6 auditors 5 and 3 2.1, 3
The conformed mart, planned before its code 85: layer 1 39, layer 2 2, layer 3 23, layer 4 3, layer 6 9, layer 7 9; and 6 consumer probes 2.3, 3

The 137 tests of layers 1 to 4 (45, 5, 81 and 6) equal the 137 that dbt ls --resource-type test --resource-type unit_test returns at commit 2a921a1. Lab 1-2 adds 3 tests (one in layer 1, two in layer 2) on Ray’s branch once its code exists. Guardrails: one capture and one verification per build (3.1). Consumer probes: 6 (4).

7. Origin

Test or proof Design decision proved
unit tests P1, P2, P3, P8 D-3 (hub keyed by client number), D-11 (two landing acts)
unit tests P4, P5 D-8 (toolkit hashing defaults)
unit test P6 D-7 (ghost records)
unit test P7 D-4 (blank to NULL)
layer 1 and layer 2 source tests D-1 (LANDING source), D-11
assert_hashdiff_keeps_case_only_change, layer 4 D-41 (a case-only change is kept)
the four rel_ tests of layer 1 D-40 (each satellite meets its parent; the links’ hub keys by assert_increment_2_link_hub_keys_exist)
layer 2 row counts D-11
assert_client_h_no_blank_business_key D-4
assert_client_h_covers_usable_source_keys D-3, D-4
inspector_sunbelt_client_number_form and unit tests I1, I2 D-9
auditor_sunbelt_client_hub and unit tests A1, A2 D-10
seed_source_system and its two built-in tests D-21
dev_drop_orphans, land_act, vault_checks Standard: Operations as dbt Macros
assert_vault_record_sources_resolve D-17
dev_scoped_rebuild.sh D-20
SSI in stg_sunbelt_client and the client hub fixtures D-15
capture_baseline and verify_build D-12
unit tests PH1 to PH8, I3, I4 D-24, D-26, D-30
unit tests CH1 to CH3, IH1 to IH4 D-24, D-32
unit tests L1 to L6 D-29, D-33
unit tests ST1 to ST5 D-8, D-34
unit tests AG1 to AG5, LA2, LA3, A3 to A6 D-10, D-35, D-36
unit tests ST1 to ST3 of client_sunbelt_s, client_policy_sunbelt_s and insured_northfield_s D-34
unit tests HD1 and HD2 of the three staging models D-8, D-34
unit tests V1 and V2 of the four version 1 views D-34; guide G-15
uq_ and nn_ on the hash keys of the six new hubs and links D-26, D-32, D-33, D-35, D-36
nn_ and uqc_ on SUNBELT.POLICY_SALE and NORTHFIELD.POLICY; expect_increment_2_staging_keeps_every_landed_row D-22, D-24
assert_increment_2_link_hub_keys_exist D-33, D-36
nn_pinecrest_policy_loaded_at; uqc_pinecrest_policy_loaded_at_policy_number D-39
expect_pinecrest_policy_rows_as_profiled; the live proof of land_act D-37, D-38
rel_ on the six link-to-hub keys; uq_pk, nn and nn_ldts on the four satellites D-42
the 22 constraints in the information schema after the build, and the 22 constraint lines of infra/snowflake/ddl/dv.sql D-43
path Z3 (uq_client_sunbelt_s_pk) and the ten area M satellite tests on the known-key views D-44
paths Z1 and Z2, the six missing-key inspector unit tests D-45
correct_zero_key_satellite_rows.sql proven on the development vault D-46
unit_finding_fact_kind_and_row, red then green, and records_not_accepted 3 and rows_missing_key 6 read in dev D-47
the build guard refusing 120 hits before the removal and writing 22 pages with none after D-48
the executive summary first on the built home page, its Databricks switch proven off and on D-49
no connector instruction on any built page; the release page’s prompts as Ask page questions D-50
the QA retest 26 of 26 from the workstation container D-51
OL1, OL2, OS1, OK1 to OK4, OH1 to OH4 and OT1 to OT3 mart design D-11
DU1 to DU9, DG1 to DG3, DR1 to DR7 and DT1 to DT7 mart design D-2, D-10, D-11, D-14
DL1 mart design D-10
DL2 mart design D-2
DS1 to DS4 mart design D-10 and D-11, D-14; DS1 also D-12
FG1 to FG4, FK1 to FK7, FD1 to FD7 and FM1 mart design D-1; FG1 also D-3, the role in the row’s identity; FG4 and FK7 also D-5
FV1, FV2 mart design D-4
SR1 to SR9 mart design D-1, D-4, D-8 and D-13, and its section 4.1
SQ1 to SQ6, SD1 to SD3 mart design section 4.1a
SM1, SM2 mart design D-9
P-9 to P-15 mart design section 1.2

This plan cites the design’s decisions and adds none. A test requiring a missing decision returns to the design.

8. Compliance record

Built by the author before the reviewer reads the plan (Standard: Branch Delivery Documents, , compliance record before agreement), at 2026-10-28 21:15Z against commit f1f3ce0, and for the mart against the mart design at 2026-10-31 22:20Z. Verdict: compliant for the fix to release 1, with three deviations each carried by a recorded decision and one API gap recorded. For the mart, written before its code as the Test-Driven Development standard requires: logic areas R to X, 85 tests across layers 1 to 7, 6 consumer probes and the origin rows; its coverage by file (section 2.1) follows the code. Lab 1-2’s extension (section 2.2) walks every layer for each file Lab 1-2 changes, names its 3 tests by layer with their decisions in section 7, and states why it has no unit test: land_act is an operations macro, proved live.

8.1 Template

# Requirement Result
1 Header: all eight fields present and filled Yes, 8 of 8. The author line reads “Ray Serrano; edited by Claude”, overriding the template’s fixed text (Ray, 2026-10-22)
2 Every section present Yes, 14 of 14: 1, 2, 2.1, 3, 3.1, 4, 4.1, 5, 5.1 to 5.4, 6, 7; and this section 8
3 Written through the governed procedures From v6, every change through the Pilot interface, ITEM_SPLICE, which records each body as a new version; earlier versions went through KNOWLEDGE_ITEM_UPDATE, and one write of 2026-10-28 at 17:44Z by direct update before the interface existed in this database (Linear DIG-595)

8.2 Branch delivery documents standard, test plan section

# Requirement Result
1 Executive summary, one row per model with business logic, counts agreeing with the logic areas Yes; v3’s rows for areas F, G, H and K disagreed with their own sections and are corrected
2 Logic areas with dimensions, brute force, collapse and a path table; every path has a test Areas A to Q, Y and Z: 72 path rows naming all 81 unit tests (V1 and V2 name one test per view). The mart: areas R to X, their paths naming its 23 unit tests
3 The seven layers walked in order, artifacts named or n/a with a reason; guardrails in their own section Yes: sections 3 and 3.1; build 129 of 129 at 94639b4
4 One runnable probe per consumer question Yes: Q-1 to Q-6; Mary’s Q-9 to Q-11 and Q-13 to Q-15 by the probes of section 2.3.4
5 QA item copied before the pull request to qa; inventory agreeing; origin by D-n Yes since 2026-10-25: the QA item was copied from the QA template by the governed procedure, with no placeholder left, after D-13 was superseded; section 5 instantiates it. Inventory: yes, 137 tests with the fix’s, equal to dbt ls at commit 2a921a1.

8.3 Testing standard (knowledge 2)

# Rule Result
1 Coverage: every file, every layer; row count equals the diff Yes: 70 rows for 70 files at 94639b4, 16 rows for the fix’s 16 files at 976744e, and 6 rows for the release 1 mart’s 6 files at f48c24b
2 Severity explicit: data tests warn, unit tests error Data tests: yes, all 56 at explicit warn. Unit tests: deviation; under the Fusion engine they carry no severity and always fail as errors
3 Layer 2 by dbt-expectations, baselines from actual data Deviation DEV-2: dbt_utils and singular tests, because the package hub is unreachable from the workstation; increment 2 compares source with target, with no fixed counts
4 Failures solved in unit tests, not builds Yes: the auditor defects were reduced to A1 to A6, red, then fixed; the 23 tests added in v4 were each proven red under a planted defect
5 Every model the design changes, every layer Yes. Tests in layers 1, 2, 3 and 4: sources and seed 6, 5, 0, 1; staging (3 models) 0, 1, 18, 1; hubs (4) 8, 0, 17, 5; links (3) 12, 0, 8, 2; satellites and views (8) 16, 0, 21, 0; known-key views (3) 0, 0, 0, 0, proved through their satellites and the inspectors; finders (8) 0, 0, 16, 0. No model is untested; each n/a carries its reason in section 2.1

8.4 Live design decisions not proved by a test, and what carries them

# Decision Carrier
1 D-2 environment tiers Development builds run in DEV__DV__CLAUDE_WS on DEV__LANDING__CLAUDE_WS (3.1); QA in DV_QA on LANDING_QA (section 5). D-13, development-only acceptance, was superseded on 2026-10-25
2 D-5 load timestamps in UTC, without time zone The LOADED_AT not_null tests and the unit fixtures’ load times; set in dbt_project.yml
3 D-23 the NFL row of the source system seed assert_vault_record_sources_resolve, which reads every hub and link, Northfield Life’s included
4 D-14 patterns recorded as course items; D-31 no separate object for the client relationship Not testable: a recording decision (course items 274 and 275) and a decision to build nothing

Next: Implementation guide

The build, step by step, with its code and its exemplars.

Read the implementation guide