# Decisions — August 20, 2026 One item. Like the August 18 set, it is a **new item** with its own `D` id, not a reinterpretation of an existing one. --- ## D11 — The Micron asset picker merges into the R2 creator - **Arrived as:** `origin/Micron-Assets` (`7ef1fcd`, Cody Schaefer, Aug 18) — written against pre-R2 `main`, integrated here by Nick's instruction on Aug 20. - **Amends:** the R2 completion record's "Asset database integration — out of scope, confirmed unbuilt" line, which was true when written and stops being true here. - **Surface:** `html/` (creator), `server/` (`assets_db.py`, `/api/assets`), `docker-compose.yml`, `requirements.txt`. ### What the branch brought A read-only lookup onto the Micron asset catalog (a SQL Server instance outside this repo): the whole catalog is fetched once per creator page load through `/api/assets` and searched in memory; picked assets are stored on the package tagged `source:'catalog'` with the DB's own casing; anything not in the catalog is added by hand and visibly tagged manual. CSV import and Excel column paste bulk-add with the same matching. Unconfigured (`MICRON_DB_URL` unset) and unreachable are first-class states that degrade to manual entry — the suite runs without Micron wired up. ### What integration changed (and why) The branch predates waves 5–9, so it used surfaces R2 replaced. Each adaptation keeps Cody's behaviour and moves it onto the R2 idiom: 1. **Six `alert()` calls → the T7.9 dialog kit and toast.** The creator ships zero native dialogs (`creator_dialogs_check` pins the count). File-handling errors use `toast(msg,'alert')` exactly as the drawings uploader and comment import do; the instructional message and the import summary use the kit, which gained the one-button `wpAlertDialog` shape it was always going to need (BL-024 wants it too). 2. **The export block** moved inside T9.1's sectioned `add('assets', …)` frame, so the CR-006 assets toggle keeps governing it. Content is Cody's: two columns, Asset ID + Note, no controls.dev link column. 3. **`initAssetPicker()`** joined the R2 `bootData()` loads rather than replacing them. 4. **`role="status"`** on the picker's source note, so loading → ready/absent/error announces (C1, the login.html pattern). 5. Everything else landed as written: his `⤒` import glyph is already the S6-mapped U+2912, `.material-actions` is the creator's own class, and the styles block declares no colour literal (`color_check` re-verifies). ### Recorded properties, restated as constraints - **Read-only, structurally.** `assets_db.py` contains one SELECT and no other statement; there is no POST route. `assets_check` greps this on every run. - **Credentials are env-only** (`MICRON_DB_URL`), matching the SMTP password rule. Driver errors are logged server-side and never propagated to the browser, because a malformed URL's error text can quote password fragments. - **Unconfigured is not an error.** Local dev and the demo DB run with the picker in manual mode; nothing in the suite requires the catalog to exist. --- # The evening decisions (same day) Six answers from Nick, given in one message. Recorded verbatim in intent; each names the item it settles. One new item id is assigned (D12); everything else amends or closes an existing question. ## The answers 1. **BL-022 — "strict 2.0."** F6/D3's "roughly two screen heights" means **2.0**, not 2.17. The overage is chrome (~154px: the context bar, the release banner's spacing, header/toolbar padding), so this becomes a build task: compress the chrome without deleting what other items placed deliberately (A2's one-warning banner and the SOP identity strip STAY — they get denser, not removed). `form_structure_check`'s red check flips green by the page actually fitting, not by moving the bar. 2. **Hold from Draft/Scheduled — "no, leave as is."** The hold branch stays reachable from any status. T7.3's raised question is closed; the shipped behaviour is the decided behaviour. 3. **CR-014 email bodies — links back to the system; customer context is allowed, confidential documents are not.** The T7.6-era rule ("no customer IP in emails") is refined: naming the customer, the project, the package and where the work happens is fine; what must never be embedded is confidential document CONTENT (drawings, attachments, scope text). Every work-package email carries a deep link back to the package in the system. Build task, sink-verified. 4. **CR-008 merged-PDF export — known issue, not a build.** The export keeps inline images + listed PDF attachments. Recorded as KNOWN-ISSUES.md §3 so the limitation is a commitment, not a surprise. 5. **BL-023 → D12 — the productivity factor gets a spot on the dashboard.** Placement delegated ("find a spot on the dashboard"). New item id **D12**: actual ÷ estimated hours, from data the rollup endpoints already carry. 6. **BL-020 — "keep it."** The unsaved-work prompt on leaving the wizard stays. Closed as decided-keep; no build. Plus: **"do what's left on the housekeeping"** — BL-021 (the critical-reopen recipient bug), BL-024 (the 21 console/launcher dialogs onto the shared kit), BL-025 (the last second-blue tint + the widened check), and S13 (seed_demo sign-in) are approved to build now, one commit each, on `feat/wp-suite-r3-housekeeping`.