# Verification checklist

The phase that produces most of the quality, and the one most often skipped.

## The governing principle

**A tool accepting your artefact is not verification.**

Packagers, importers and publishers accept broken content routinely. Real examples encountered in one engagement:

- a canvas app packed **and** imported into two environments carrying an invalid Power Fx formula
- `pac canvas pack` reporting success while writing nothing, because the target file existed
- CSS bars present in the DOM at zero width because the element was `display: inline`
- a concept suite whose tab labels disagreed with the arrays underneath them
- a "fixed" solution zip that still contained the unfixed app

Every one of these would have surfaced live, in front of the customer.

---

## Data

- [ ] Parent totals equal the sum of their children (rollups lag on bulk insert — force a recalc)
- [ ] No junk records created by out-of-box workflows
- [ ] Activities closed, not left Open
- [ ] Every record your screens read actually has the fields populated
- [ ] Owner spread looks like a team
- [ ] Dates re-based to demo day
- [ ] Names, addresses and currency plausible for the customer's market

## Artefact — structural

- [ ] Round-trip: build → unpack → confirm your change survived
- [ ] File timestamp changed after the build
- [ ] Downloaded back **from the service** after import and re-verified
- [ ] No `undefined`, `NaN`, or unrendered template markers anywhere
- [ ] Console clean (ignore only benign 404s like `favicon.ico`)

## Artefact — behavioural

- [ ] Every screen visited and rendered
- [ ] Every filter/tab clicked, **row counts match their labels**
- [ ] Cross-navigation lands on the intended screen
- [ ] Formulas validated by something that actually parses them (`compile_canvas` for Power Fx)
- [ ] Visual elements verified by **computed style**, not DOM presence

## Content — consistency

- [ ] The same fact computed in two places agrees
- [ ] Headline KPI numbers match the arrays rendered beneath them
- [ ] Totals across screens reconcile
- [ ] Every externally-quotable number traced to a citable source
- [ ] Unverified figures marked, and excluded from customer-facing material

## Narrative

- [ ] Each screen maps to a real, sourced customer statement
- [ ] Nothing contradicts a documented constraint (especially compensation coupling)
- [ ] "Standard product" claims are actually standard product
- [ ] Anything aspirational is flagged in the notes
- [ ] Naming discipline respected (don't name licensed features you haven't confirmed)

---

## Two habits worth building

**1. When you fix a bug, check the fix reached the artefact.**
Fixing the source is not fixing the deliverable. Re-verify the built output, not the input.

**2. When you find one instance of a class of bug, search for the rest.**
An inline-rendered progress bar on one screen means checking every bar in the suite. A silently-failing build step means checking every build step.

---

## When a tool reports success

Ask: *what did it actually write?* Then check.

- file timestamp
- file size
- content grep for the specific change
- round-trip extract and confirm

This costs seconds and catches the failures that are otherwise invisible until the worst possible moment.
