Skip to main content

Technical

What is finished, what is pending, and what is blocked

Every lifecycle phase and delivery increment, both scope gates, and both real-engine semantic-model validation paths, derived from source-controlled evidence rather than from a claim typed into a page.

  • Static source validationComplete
  • Real-engine validationNever run
  • Report pages builtNone exists
  • Case study publishedGate 2 CLOSED

Deterministic synthetic data.Granite Auto Group is fictional.Real-engine validation pending.How this is governed

Four different things, routinely conflated

Saying a model is “validated” can mean any of the four states below. Only the first is true of this project.

01Complete

Static source validation

The TMDL is parsed as text and checked against the model documentation on every push: 26 tables, 42 relationships and 49 measures. It proves the model's shape. It cannot execute a single line of DAX.

02Pending on both paths

Real-engine validation

A Microsoft semantic-model engine loads the model, refreshes it against PostgreSQL, and returns numbers that are reconciled against the SQL baseline. This is what proves the arithmetic, and neither accepted path has run.

03Not built

Dashboard completion

The report project is a shell: a platform file and a pointer at the semantic model, with no page, no visual and no bookmark. The static check fails the build if report visual content appears before this increment starts.

04Gate 2 CLOSED

Case-study completion

Findings drawn from a complete report layer, reviewed, and published. Nothing has been analysed and no conclusion has been drawn. This site ships a locked shell for the case study rather than a placeholder.

Real-engine validation

Two accepted paths of equal standing. Either one closes the gate.

A semantic model is proved by an engine or it is not proved. Both routes carry the same seven-part proof obligation, and a path that proves six of seven has not validated the model.

ADR-0008 PATH

Power BI Desktop

Pending external validation
Recorded result
PENDING
Last validated
Never. No engine has run.
Checks passed
0
Checks failed
0
Recorded note

Power BI Desktop has never opened, refreshed or saved this project. The environment that built the model is Ubuntu 24.04 with no Windows, no Power BI Desktop and no Analysis Services, so the open-refresh-save validation could not run there and has not run anywhere else.

ADR-0008 PATH

Microsoft Fabric Service

Pending external validation
Recorded result
PENDING
Last validated
Never. No engine has run.
Checks passed
0
Checks failed
0
Recorded note

Microsoft Fabric has never deployed, refreshed or queried this semantic model. No Fabric workspace and no cloud PostgreSQL database exist for this project yet, and the environment this file was written in cannot reach api.fabric.microsoft.com at all.

Why continuous integration cannot close this gate

Power BI Desktop is a Windows application and Microsoft Fabric needs a tenant, a workspace and a cloud database. A GitHub runner has none of those, and the build environment that produced this model has no Windows layer and no Analysis Services instance. The repository checks read the on-disk TMDL and compare a hash; they never launch or contact an engine.

.github/workflows/ci.ymlrepository-checks jobView .github/workflows/ci.yml (repository-checks job) on GitHub (opens in a new tab)

Lifecycle phases

Eight phases, with each one's exit criteria stated

A phase is complete when its own exit criteria are met, not when the work in it feels finished. Phase 5's criteria require a successful refresh and a SQL-to-DAX reconciliation, which is exactly what has not happened.

  1. LIFECYCLE PHASE 1

    Product definition

    Complete

    The business problem, the stakeholder personas, the analytical questions, the approved scope and the first KPI catalogue.

    Why it holds this status

    The architecture is approved, the non-goals are accepted and the core KPIs are defined.

    Exit criteria
    • Architecture approved
    • Non-goals accepted
    • Core KPIs defined
  2. LIFECYCLE PHASE 2

    Data model

    Complete

    The source model, the dimensional model, declared fact grains, the data dictionary, source-to-target mappings and data-quality rules.

    Why it holds this status

    Every fact declares one grain, every relationship is documented and the history policy for each dimension is fixed by ADR-0006.

    Exit criteria
    • Every fact has one declared grain
    • Every relationship is documented
    • Required history handling is defined
  3. LIFECYCLE PHASE 3

    Synthetic data generator

    Complete

    A configurable, seeded generator with development, test and portfolio profiles, and a distribution-validation report.

    Why it holds this status

    The generator is deterministic - the same profile and seed reproduce byte-identical CSV, each entry carrying a SHA-256 content digest - and the prohibited-PII checks pass.

    Exit criteria
    • Generated records are plausible
    • Required relationships are visible but not deterministic
    • No prohibited PII exists
  4. LIFECYCLE PHASE 4

    PostgreSQL warehouse

    Complete

    Schemas, staging views, conformed dimensions, facts at declared grain, reporting views, audit tables, indexes, roles and grants.

    Why it holds this status

    Loads are repeatable, grain tests pass, and 58 reconciliations are recorded on every database run with 0 failing.

    Exit criteria
    • Loads are repeatable
    • Grain tests pass
    • Reconciliations pass
  5. LIFECYCLE PHASE 5

    Power BI semantic model

    In progress

    Imported reporting views, relationships, a marked date table, measure tables, the core DAX measures and the model documentation.

    Why it holds this status

    The model is built and statically validated, but no Microsoft semantic-model engine has loaded, refreshed or evaluated it. Both ADR-0008 paths are pending, so the exit criteria are not met.

    Exit criteria
    • Core totals reconcile to SQL
    • Filter behaviour is correct
    • No unresolved ambiguous relationships exist
  6. LIFECYCLE PHASE 6

    Report pages and dashboards

    Blocked

    The seven unblocked MVP report pages over the governed semantic model.

    Why it holds this status

    No report page, visual or bookmark exists. Authoring pages over a model that has never been loaded would merge page defects and model defects into one change, so this is sequenced behind Lifecycle Phase 5.

    Exit criteria
    • Every page reads only from the governed semantic model
    • Page totals reconcile to SQL
    • Employee views carry the fairness context
  7. LIFECYCLE PHASE 7

    Findings and recommendations

    Blocked

    Executive findings drawn from the completed report layer, and the Gate 2 review that evaluates them.

    Why it holds this status

    docs/findings/ is empty and nothing has been analysed. This phase is blocked behind the report layer, and any conclusion drawn now would describe a synthetic dataset rather than a market.

    Exit criteria
    • Findings trace to a governed KPI and a filter context
    • Every recommendation states its limitation
    • Gate 2 records a written verdict
  8. LIFECYCLE PHASE 8

    Portfolio packaging

    In progress

    Making the work reviewable by someone with limited time, no database and no Power BI licence.

    Why it holds this status

    The portfolio website foundation, its design system and the gated case-study shell are delivered. The screenshots, the model diagram, the generated DAX measure catalogue, the Excel operating report, the walkthrough and the case-study copy are not, and most of them cannot start until the report layer exists.

    Exit criteria
    • Every artefact a reviewer is pointed at exists at the path it is cited by
    • Nothing in the packaging claims a capability the repository does not have
    • Every screenshot carries the synthetic-data statement

Delivery increments

Increments are not phases, and the repository keeps them distinct

A lifecycle phase describes what kind of work is being done. A delivery increment is a unit of shipped scope. Conflating them is how a project ends up claiming a phase is complete because an increment was delivered.

P2.1In progress

Power BI semantic model

Built and statically validated. The increment does not meet its exit criteria until the real-engine validation gate passes on one accepted path.

P2.2Blocked

MVP dashboard pages

Not started, and sequenced behind the real-engine validation of the semantic model.

Blocked byReal-engine validation of the semantic model
P2.3Blocked

Findings, recommendations and the Gate 2 review

Not started, and blocked behind the report layer.

Blocked byP2.2
P2.4In progress

Portfolio packaging

The portfolio website foundation and the gated case-study shell are delivered. The remaining items depend on the report layer and on the Gate 2 verdict.

Blocked byGate 2 for the case study only

Lifecycle Phase 8 and delivery increment P2.4 both remain incomplete. This website is one item within P2.4, not the whole of it.

Scope gates

Each gate's conditions, evaluated against evidence

The met-or-not flag on every condition below is computed from the repository at build time rather than authored. A written verdict does not override the conditions it evaluates: the manifest generator fails if a document records an OPEN verdict while a condition is unmet.

Gate 1 - Power BI development may begin

OPEN
  1. Met: Fact grains are approved

    Every MVP fact declares one grain, enforced by a UNIQUE constraint and covered by tests/integration/test_schema_objects.py.

  2. Met: Dimensions are documented

    All eight MVP dimensions are specified in DATA_DICTIONARY.md with a source-to-target mapping each under docs/source-to-target/.

  3. Met: KPI formulas are documented

    All 29 governed KPIs carry a formula, an explicit numerator and denominator, a grain and a null rule in KPI_CATALOG.md.

Gate 2 - the public analytical case study may begin

CLOSED
  1. Not met: Core Power BI report pages are complete

    powerbi/ARPI_Performance_Intelligence/ARPI_Performance_Intelligence.Report/ is a PBIR shell: a .platform file and a definition.pbir pointing at the semantic model. It contains no page, no visual and no bookmark. Delivered by P2.2.

  2. Not met: SQL and Power BI totals reconcile

    The SQL side exists as powerbi/validation/sql_baseline.json. The Power BI side requires a refreshed model, and no engine has refreshed it. Delivered by P2.2-10.

  3. Not met: Executive findings are drafted

    docs/findings/ is empty. Delivered by P2.3.

No readiness review exists for this gate. Absence of evidence closes a gate and never opens one.

Evidence ledger

Every check, and the file that holds its result

  1. Deterministic synthetic generation

    Completeprivacy

    The same profile and seed reproduce byte-identical CSV. Seed 20250701 on the development profile, with a SHA-256 content digest per entity in the generation manifest.

  2. Declared fact grains

    Completetest

    Each of the 5 MVP facts declares one grain, enforced by a UNIQUE constraint in DDL and asserted by the integration suite.

  3. Governed KPI catalogue

    Completestatic

    All 29 KPIs carry a business definition, a formula, an explicit numerator and denominator, a grain, a date basis, inclusion and exclusion rules, a null rule, a source view and an interpretation caution.

  4. KPI verification against an independent derivation

    Completetest

    Every KPI computed from the reporting schema is asserted equal to the same figure derived independently from the warehouse, and every ratio is asserted to return NULL rather than zero or infinity on an empty denominator.

  5. Reconciliation suite

    Completereconciliation

    58 reconciliations recorded on every database run, 0 failing. Every critical rule is proven to fail against a deliberately corrupted fixture.

  6. Privacy safeguards

    Completeprivacy

    The data model prohibits names, street addresses, email addresses, phone numbers, full birth dates, government identifiers and bank information. Age is a band; geography stops at county or market area. No real VIN is linked to a synthetic customer.

  7. Read-only reporting role

    Completetest

    The reporting identity is provably unable to read the raw, staging, warehouse or audit schemas, asserted end to end rather than described in a grant script.

  8. Static semantic-model validation

    Completestatic

    The TMDL source is parsed as text and checked against the model documentation on every push: 26 tables, 42 relationships and 49 measures, with a bidirectional filter, a non-reporting schema or a PII-bearing column failing the build. No engine is launched, so this proves shape and never proves arithmetic.

  9. SQL-to-DAX baseline

    Completereconciliation

    The SQL side of every KPI is committed across twenty-one filter contexts, generated from the database rather than typed by hand. It is one half of a reconciliation whose other half needs a refreshed model.

  10. Real-engine semantic-model validation

    Pending external validationreal-engine

    Neither accepted path has run. No Microsoft semantic-model engine has loaded this model, refreshed it, or returned a single number from it, so every measure in it is text that has never produced a value. Static parsing cannot substitute.

The dataset behind these figures

Row counts describe one profile, and only that profile

The test profile is smaller and the portfolio profile larger. A refresh against either will not match the counts recorded here and must not be compared against them - which is why the profile is stated wherever a count appears.

Configuration profile
development
Random seed
20250701
Reporting date range
2025-07-01 to 2025-12-31
Data origin
Synthetic. Generated by this repository.
Personal data
None. Prohibited by the data model rather than masked.
Site built from commit
3336f5cb69d1cf4b9a7554ed444be4f6c79a7fd1