# Changelog

All notable changes to the Alivedata brand docs and product brochure system.

Format follows [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).

---

## [Unreleased]

---

## [2.3.0] — 2026-05-29

### Added — Python project tooling
- `pyproject.toml` — Poetry project (`alivedata_brand_docs` v0.1.0); Python 3.12;
  runtime dependencies: Polars ≥1.0, DuckDB ≥1.0, Pydantic v2, Loguru;
  dev dependencies: Pytest ≥8.0, Ruff ≥0.5, mypy ≥1.10;
  Ruff configured for line-length 120, target Python 3.12, rule sets E/F/I/N/W/UP/B/SIM/RUF;
  mypy in strict mode with `warn_return_any` and `warn_unused_configs`
- `config/settings.yaml` — project metadata and path defaults:
  `data/raw`, `data/interim`, `data/processed`, `data/external`, `reports/`;
  logging: level INFO, rotation 10 MB, retention 30 days

### Added — Data scripts
- `scripts/python/check_parquet.py` v2.0.0 — Parquet validation utility;
  validates file integrity, compares schemas across a directory, profiles each file,
  writes results to console, JSON, and Markdown reports; uses Polars + DuckDB + Pydantic v2;
  full Loguru logging to stderr; Pydantic-validated `Config` model
- `scripts/sql/exact_summarize.sql` — dynamic column-level DuckDB profiler;
  generates per-column `min`, `max`, `avg`, `stddev`, `q25/q50/q75`, `unique_count`,
  `null_count`, `null_pct` for any table using a self-building `string_agg` query;
  replace `{{table_name}}` with target table name before running
- `scripts/root_cause/.gitkeep` — placeholder for Ishikawa / incident write-up notes
  (see `docs/ai_rules/04_root_cause_analysis.md`)

### Added — Tests
- `tests/test_placeholder.py` — infrastructure smoke test; verifies Pytest is wired
  correctly before domain-specific tests are added

### Added — AI assistant rules
- `docs/ai_rules/01_rule_hierarchy.md` — priority order and conflict resolution
- `docs/ai_rules/02_data_verification.md` — data verification policy
- `docs/ai_rules/03_compliance_enforcement.md` — compliance enforcement
- `docs/ai_rules/04_root_cause_analysis.md` — Ishikawa / approval workflow
- `docs/ai_rules/05_data_integrity.md` — JOIN validation, exclusion logic, visual outputs
- `docs/ai_rules/06_production_standards.md` — logging, error handling, type hints, config
- `docs/ai_rules/07_coding_standards.md` — PEP 8, Ruff, Pydantic v2, Pytest standards
- `docs/ai_rules/08_versioning.md` — semantic versioning and script naming conventions
- `docs/ai_rules/09_enforcement.md` — completion validation and verification badge formats
- `.amazonq/rules/rules.md` — Amazon Q engineering rules (mirrors Cursor rule priority hierarchy)

### Added — Brand guidelines
- `docs/brand_guidlines/Alive Data — Brand Guidelines 2 - Adobe cloud storage.html`
  (712 KB) — brand guidelines HTML mirror for in-repo reference
- `docs/brand_guidlines/Alive Data — Brand Guidelines.pdf` (1.2 MB) — brand guidelines PDF

---

## [2.2.0] — 2026-05-28

### Added — alivedata_202603_from_attendance_to_behaviour.html
- New 8-slide interactive web presentation: "From attendance to behaviour, at scale"
- Eels v Roosters · CommBank Stadium · 23 Aug 2025 case study
- Full brand design system applied: deep-navy/coral/teal/amber tokens, Space Grotesk +
  IBM Plex Mono, A-mark SVG watermark, eyebrow/tag/section-rule components
- Fixed slide-height layout (`height: 100vh`) with side navigation dots (IntersectionObserver)
- **Slide 2** — Kepler.gl map embedded via `<iframe>` (`data/interim/eels_roosters_kepler.gl.html`);
  branded overlay panel and time-range pill (z-index 30) float above the iframe
- **Slide 3** — Three-column attendance stats: 19,741 attendance · 1,519 devices · 103,151 pings ·
  95% CI ±2.5% confidence callout
- **Slide 4** — deck.gl `ArcLayer` (great-circle arcs) + CARTO dark matter `TileLayer` showing
  fan origin arcs colour-coded by type: interstate (light blue) · regional NSW (teal) · Greater
  Sydney (coral); stadium destination dot in coral
- **Slide 5** — Four enrichment pillars: Who they are · How they move · How they live ·
  How they spend
- **Slide 6** — Three-column supporter intelligence value proposition with callout bar
- **Slide 7** — Two-column applicability slide with five industry verticals
- **Slide 8** — Closing CTA with contact details

### Added — dist/
- `dist/index.html` — production copy of the presentation (served as root)
- `dist/data/interim/eels_roosters_kepler.gl.html` — Kepler.gl asset at correct relative path
- Ready for `wrangler pages deploy ./dist` — see `docs/presentations/DEPLOYMENT.md`

### Added — docs/presentations/DEPLOYMENT.md
- End-to-end guide for updating and deploying the interactive presentation to Cloudflare Pages
- Covers file structure, local preview, wrangler authentication, Pages project creation,
  deploy command, custom domain, Cloudflare Access gating, and Mapbox token scoping

---

## [2.1.0] — 2026-05-26

### Changed — template_product_brochure.html
- Product name comment updated to show both naming patterns (`The Spine`, `autoInsights`)
- Spec table extended from 13 to 14 rows (`[sf14]` / `[sv14]`)

### Added — template_product_brochure.html
- Applications section below domain list — coral dots, tokens `[app_hdr]` · `[a1]`–`[a6]`

### Changed — alivedata_spine_202605_product_sheet.html
- Product name `dataspine` → `The Spine` (coral "The", white "Spine")
- Spec table: `538 columns` → `538 attributes` (standardised to "attributes" throughout)
- Spec table: `MAID columns` → `MAID attributes`
- Spec table: `Privacy standard · All identifiers hashed or encoded` added as row 14
- Applications section added below Spend Intelligence domains:
  Audience activation · Media planning · Retail expansion · Site selection ·
  Consumer propensity modelling · Omnichannel attribution

### Added — docs/product_sheet/DEPLOYMENT.md
- Applications section token reference (`[app_hdr]`, `[a1]`–`[a6]`)
- Spec table extended to `[sf14]` / `[sv14]`

### Changed — README.md
- Full rewrite: replaced generic boilerplate with accurate project description,
  completed product sheet index, quick-start guide, token reference table,
  brand token summary, and tech stack table

### Added
- `CHANGELOG.md` (this file)

---

## [2.0.0] — 2026-05-22

### Added
- `template_product_brochure.html` v2 — rebuilt directly from the finished spine
  product sheet for 1:1 structural fidelity; all content replaced with short
  lowercase tokens (`[sb1_val]`, `[c1_bw]`, `[sf1]`, etc.)
- `docs/product_sheet/DEPLOYMENT.md` — end-to-end deployment guide covering
  folder setup, DuckDB stat extraction, placeholder reference, browser preview,
  PDF generation, QA checklist, and troubleshooting table
- `auto_insights_202605_product_sheet.html` + `.pdf` — product brochure for
  alivedata Auto Insights 202605 (7.6M vehicle records, 411 makes, 26 attributes)

### Changed — template_product_brochure.html
- Placeholder tokens shortened to lowercase (`[STAT_BAR_1_VALUE]` → `[sb1_val]`,
  etc.) to prevent long tokens from breaking grid column widths in PDF preview
- Coverage bar `width` attributes set to `50%` default (was invalid CSS `[token]`)
  with `<!-- BAR WIDTH: [cn_bw]% -->` comments marking each fill div

---

## [1.1.0] — 2026-05-22

### Changed — alivedata_spine_202605_product_sheet.html
- PDF generation switched from WeasyPrint to Chrome headless for accurate
  CSS Grid / Flexbox rendering and exact A4 output
- `generate_pdf.py` updated with `--headless=new`, `--no-margins`,
  `--paper-width=8.27`, `--paper-height=11.69` flags

---

## [1.0.0] — 2026-05-21

### Added
- `alivedata_spine_202605_product_sheet.html` — two-page A4 branded product sheet
  for alivedata Spine 202605 (19.5M records, 538 attributes)
  - Page 1: hero, secondary stats bar (17.6M GNAF · 18.5M email · 12.0M mobile · 379 spend),
    four pillars (Segment / Location / Activation / Intelligence), state coverage
  - Page 2: identity resolution cards (95% email · 61.5% mobile · 26.7% MAID · 90.3% GNAF),
    spend intelligence domains (14 · 379 categories), technical specification table,
    CTA footer
- `alivedata_spine_202605_product_sheet.pdf` — A4 PDF generated via Chrome headless
- `generate_pdf.py` — Chrome headless PDF generation script
- `template_product_brochure.html` v1 — initial reusable template
  (superseded by v2.0.0)
- Brand design tokens established:
  `--deep-navy #0F1B2D` · `--coral #E8573D` · `--navy #1E3A5F` ·
  `--teal #0D7C6D` · `--amber #C47B0A` · `--surface #F7F8FA`
- Typography system: Space Grotesk (display/body) · IBM Plex Mono (stats/eyebrows)
- A-mark SVG integrated as hero lockup (64px coral) and ghost watermark (opacity 0.04)
