# Handoff — 2026-05-20

Session about to pause for a macOS update. Capturing state so the next session resumes cleanly.

## Live URLs (verify these after wake)

- https://aleahim.com/cupertino/quality/ — primary dashboard permalink (Toucan-blog-hosted mirror, deployed via GitHub Pages on `mihaelamj/aleahim.com`)
- https://aleahim.com/cupertino/quality/audits/versiondiff-v1.0.2-to-v1.2.0.html — the version-diff KPI page (the one with the three charts + per-section subpages)

Smoke test on resume:

```bash
for u in \
  https://aleahim.com/cupertino/quality/ \
  https://aleahim.com/cupertino/quality/_styles.css \
  https://aleahim.com/cupertino/quality/audits/versiondiff-v1.0.2-to-v1.2.0.html; do
  printf "%s → %s\n" "$u" "$(curl -s -o /dev/null -w '%{http_code}' "$u")"
done
```

All should be 200.

## What landed in this session

### Cupertino repo (`mihaelamj/cupertino`)

**Merged + promoted to main:**
- PR #829 — design + architecture docs render as styled HTML (sticky TOC, lead paragraphs, definition rows, blockquote / hr / mermaid fence support, companion-doc cards). Tagged `d12feec` on main.
- PR #831 — fix #749 migrator test (dropped the unportable `ALTER TABLE DROP COLUMN` step; root cause was the FTS5/FK fan-out around `docs_metadata`, NOT a SQLite version mismatch as initially hypothesised). Tagged `0ea727a` on main.

**Open PR (not yet merged):**
- PR #832 (`docs/enable-github-pages` branch) — adds the per-section subpages, the three inline-SVG charts (bars, donut, dumbbell), hover tooltips with floating panel, the slimmed index cards with kind subtitles, the version-diff card visual treatment, the version-diff audit + JSON, and enables GitHub Pages on the cupertino repo. **Decision pending:** merge this in (gives a backup permalink at mihaelamj.github.io/cupertino/) or close it as superseded by the aleahim.com hosting. Recommendation: merge it, the dashboard improvements are independently valuable.

**Filed issues:**
- #830 — Phase 1.8 version-to-version comparison KPI (was proposed; the v1.0.2 → v1.2.0 audit shipped in PR #832 as the first run of it).

### Aleahim.com repo (`mihaelamj/aleahim.com`)

Three commits on `main`, all pushed:

1. `cupertino/quality: deploy mirror of cupertino search-quality dashboard` — first sync of the dashboard files into `cupertino/quality/`. 66 audit subpages + index + sources + design docs + CSS.
2. `Makefile: add sync-cupertino target for re-mirroring the dashboard` — `make sync-cupertino` rsyncs `../cupertino/docs/dashboards/` → `cupertino/quality/` with the right excludes (`*.py`, `*.sh`, `_index_extras.json`, blog-embed file).
3. `Add .nojekyll so files starting with _ are served (e.g. _styles.css)` — GitHub Pages was filtering `_styles.css` by Jekyll convention; the marker disables Jekyll. Existing Toucan-built blog unaffected (Toucan doesn't emit underscore-prefixed files).
4. `site.yml: add Cupertino Quality nav link → /cupertino/quality/` — appended a 5th nav entry. **Not yet built into HTML.** Run `make dist && cp -r /tmp/output/* . && git add . && git commit -m "Deploy nav update" && git push` on resume to get the tab visible.

## Pending items

1. **Toucan deploy to surface the new nav tab.** site.yml has the entry; the built HTML still shows the old 5-tab nav. Three commands to land it:
   ```bash
   cd /Volumes/Code/DeveloperExt/public/aleahim.com
   make dist
   cp -r /tmp/output/* .
   grep -c "localhost" index.html  # MUST be 0
   git add . && git commit -m "Deploy: add Cupertino Quality nav tab" && git push
   ```

2. **PR #832 merge call.** See above. Recommendation: merge it.

3. **Existing `/cupertino/index.html` has localhost URLs leaked** (pre-existing, not introduced by this session). The next `make dist + cp` cycle will overwrite it with the live build. Confirm with `grep localhost cupertino/index.html` returning 0 after deploy.

4. **Blog-post planning queued under `mihaela-blog-ideas/cupertino/`:**
   - `PLAN-2026-05-20-next-post.md` — four candidate angles for the next post. Recommended: the search-quality measurement story.
   - `PLAN-2026-05-20-mcp-security-cupertino-is-different.md` — security-angle post comparing cupertino's MCP serve path against disclosed CVEs in other MCP servers. 11 sources, three CVE chains.

5. **Per-version update flow** documented in PR #832's audit + the Makefile. On a new cupertino release: write new audit markdown(s), `./regen-all.sh`, then `make sync-cupertino && git push` in aleahim.com.

## Permalink scheme (durable)

| URL | Lifespan |
|---|---|
| `https://aleahim.com/cupertino/quality/` | Living — always redirects to latest version |
| `https://aleahim.com/cupertino/quality/search-quality-v1.2.0.html` | Frozen at v1.2.0 |
| `https://aleahim.com/cupertino/quality/audits/versiondiff-v1.0.2-to-v1.2.0.html` | Frozen forever |
| `https://aleahim.com/cupertino/quality/audits/<class>-v1.2.0/<section>.html` | Frozen forever |

Every audit filename embeds the version; the files never get renamed. A blog post written today linking `…/audits/versiondiff-v1.0.2-to-v1.2.0.html` will resolve in 2027 to the exact same numbers.

## Local branch state (cupertino repo)

```
* fix/issue749-test-sqlite-portability   <-- short-lived, already merged via #831
* docs/design-doc-renderer               <-- short-lived, already merged via #829
* docs/enable-github-pages               <-- in PR #832, unmerged
* develop                                 <-- at 0ea727a (same as main)
* main                                    <-- at 0ea727a
```

`docs/enable-github-pages` has the chart + subpage work uncommitted to develop. After PR #832 lands, it'll squash-merge into develop, then we promote develop → main as usual.

## Things to NOT do on resume

- Don't re-trigger the `cupertino save --docs` reindex unless asked (per `feedback_assume_no_local_db` + the 12h cost per `reindex-takes-12h`).
- Don't bump cupertino's version constant or tag a release without explicit "go" (per `feedback_no_version_bumps_without_go`).
- Don't push to GitLab anywhere (per CLAUDE.md). All this session's pushes were to GitHub.
- Don't touch `~/.cupertino/*.db` (the brew-installed bundle is user-production). The version-diff comparison read it via the brew binary's standard search path; no writes.

## Memory updates worth making after resume

- New memory: aleahim.com deploys the cupertino dashboard at `/cupertino/quality/`. The mirror is one-way (cupertino repo → aleahim.com). `make sync-cupertino` is the command.
- New memory: GitHub Pages requires `.nojekyll` if any served file or directory begins with `_`. Toucan doesn't, but the cupertino dashboards do (`_styles.css`).
- Update memory `cupertino-claude-pair-workflow` if relevant — this session was solo, not pair.
