Landing Zone · Delivery Board
July 6–7, 2026 · full 48h dev delta promoted to QA — every item itemized. Green = live on QA (test it) · Blue = on dev (review, promotes next) · Orange = still building
| PR | Area | What changed | Status |
|---|---|---|---|
| Live on QA — ready to test · Chat & Search | |||
| #908 | Chat streaming | Streaming→final markdown handoff — completed lines render as markdown mid-stream, no snap/flicker on finalize (CRLF fixed) | QA |
| #844 | Chat | Response-bubble + conversation-title fixes; noun-phrase session titles | QA |
| #761 | Chat | Word-by-word typewriter reveal for buffered responses, with a per-user animated-typing toggle that persists across reloads | QA |
| — | Chat | Thinking effort defaults to off and persists the user's choice; thinking_applied/skipped breadcrumbs; top_p dropped when temperature is set | QA |
| — | Chat / search | v2 web-search tool gated on the user toggle and persisted | QA |
| #898 | Chat / files | User-turn attachment chips persist in the message bubble across reload; composer stays clear on return | QA |
| #905 | Chat / files | Attached-file chips use real icons; composer chips align/wrap onto rows and detach-only (never delete the My Stuff file) | QA |
| — | Chat | Friendly transport-error message; SSE [DONE] sentinel handled; best-effort title falls back on 503 | QA |
| — | Chat | Scroll behavior — instant scroll on message entrance, debounced burst scroll, scroll-to-bottom after image append | QA |
| — | Chat | Empty placeholder bubble + premature action row suppressed; ordinary auto-routing toasts removed | QA |
| — | Chat | Streaming/markdown font-size unified; session timestamps fixed | QA |
| Live on QA — ready to test · Prompts & Workflows (admin) | |||
| #896 | Prompts admin | Row actions reworked — row-click opens the editor, inline pencil/archive/trash icons, confirmed hard delete | QA |
| #909 | Prompts admin | Row checkboxes aligned (no hover/select layout shift); 30-second undo grace bar on delete | QA |
| #910 #867 #872 | Prompts admin | Active/Inactive vocabulary + toggle on row and editor; status filter; bulk set active/inactive | QA |
| #906 | Prompts admin | Homepage syncs on archive without a manual refresh; table sort/filter prefs persist across reload | QA |
| #901 #902 | Prompts admin | Archive-state sync in place, info-icon description popover, Status column moved to far right, Escape/edge polish | QA |
| #900 | Prompts admin | Empty category accepted so unassigned prompts save cleanly (was rejecting every save) | QA |
| #885 #887 | Prompts | Per-prompt admin-authored Description shown on category rows (clears properly when emptied) | QA |
| #886 | Prompts | Every prompt-launch surface routes through the guided fill-in form (Library "Use prompt" and detail modal no longer send raw brackets) | QA |
| #891 | Guided form | Per-field upload isolation (fixes multi-upload state + required-check bypass); inline per-field required errors; labeled dropdowns | QA |
| #880 #871 | Prompt forms | Required-field markers — leading or trailing asterisk in fill-in placeholders, red help styling | QA |
| #883 | Prompt editor | How-to-use panel moved below the prompt body, collapsed by default | QA |
| — | Prompts admin | Real modified-by shown; integrations column hidden; category assignment gated to admins in the live save modal | QA |
| #809 | Settings / Prompts | Default-agent tab, admin-only category, duplicate modal-X fix, prompt renames | QA |
| — | Prompts | Save-prompt anchored to the user turn; preview label renamed "Response preview"; upload bracket field + admin help panel | QA |
| — | Workflow forms | Landing/workflow form refinements — actions above preview, file attach, dynamic fields | QA |
| Live on QA — ready to test · Landing & Categories | |||
| #892 | Categories | Admin-authored category Description field, shown in the category view | QA |
| #865 | Categories | Reorder consolidated onto the welcome-page tile grid (drag + on-screen arrows), persists across reload, propagates to the landing page | QA |
| — | Categories | In-app confirm modal for archive | QA |
| #874 #875 | Landing | Category info icon moved off prompt rows to the category title — a real focusable button that stays inside the modal | QA |
| — | Landing | Model card genuinely light in light mode; hero providers, footer brand, usage tooltips, flicker fix | QA |
| — | Landing | Stability.ai provider logo rebranded and sized to match the other provider logos | QA |
| Live on QA — ready to test · Dashboard & Usage | |||
| #857 #861 #864 | Dashboard | Date-aware KPI strip and breakdown panels honor the applied window; spend label de-dup; counts locked to bars | QA |
| #813 | Dashboard / Usage | Time-series split into separate spend + usage charts, max-2 metric toggle, dual-axis labels | QA |
| #873 #868 | Usage charts | 7-day rolling-average line; empty time-series buckets zero-filled within the requested range (server-side) | QA |
| #870 | Dashboard | Top Users → Spend by User with Prompts pill, page size, aligned controls, "Showing X of N"; sortable Spend by Model/Group; duplicate Top Groups removed | QA |
| #856 #858 #859 | Users | Period filter drives Sessions/Cost columns and sorting/export; preset date ranges wired; UTC default fixed | QA |
| #866 | Admin users | User Status column; "Set rate limit" jumps to the cap field; Total Cost / Cap Usage renames | QA |
| — | Admin users | Cost-range + percent-used range filters; custom date-range cost; split usage columns; group fix | QA |
| — | Usage caps | User-popover usage bar reconciled to the budget endpoint, red at cap; zero cap treated as block-all; limit column + cap filter in the users list | QA |
| — | Dashboard | Cost-by-level panels restored; trimmed to 6 at-a-glance sections; Export/Refresh moved to the page header; no nested scroll / sticky header | QA |
| — | Admin | Model pricing rates corrected, only used/enabled models shown, N/A for absent rates, reload-robust pricing tests | QA |
| #879 | Usage | Overview tab hidden — code default plus the live nav-visibility setting corrected | QA |
| Live on QA — ready to test · Image Generation | |||
| #760 #762 | Image gen | Image mode — spend-cap gate, assistant image relocation, active-model flag, image-mode lockout, API-driven defaults | QA |
| — | Image gen | Image-model picker enters image mode; turns routed through the streaming endpoint; image-generation model ids accepted in chat validation | QA |
| — | Image gen | Image options panel — style preset, image count, and image-to-image / starter image wired end-to-end (backend + ChatView) | QA |
| — | Image gen | Style preset aligned to the Bedrock per-model contract; style gating derived from the active model | QA |
| — | Image gen | Oversized-image clamp/downscale against Bedrock's base64 payload limit, loud on misses, verifiable artifact | QA |
| #754 | Image gen | Options panel bg/border match the composer; dark-mode + light-mode select fixes; shadcn quality select | QA |
| — | Image gen | Per-image cost line items on the image-generation tab; relative cost-tier badges replace absolute prices | QA |
| — | Image gen | Generated images open full-size with a generating indicator / pending bubble; you can ask a model about a generated image | QA |
| Live on QA — ready to test · Sidebar & UI | |||
| — | Sidebar | Collapse/expand animation polish — smooth, GPU-accelerated restore | QA |
| — | Sidebar | Collapsed rail — nav icons reflow to 64px, TT wordmark/monogram, chevron stays in rail, left-aligned header | QA |
| — | Sidebar | User popover stays visible when collapsed; chat search moved above favorites | QA |
| — | UI | Directional slide transitions between top-level views; sliding pill indicator on the welcome-screen tabs | QA |
| — | UI | Welcome prompt cards staggered reveal, smoother typing-reveal ease, orphan keyframe removed | QA |
| — | UI | Announcement banner — no gap after dismiss, poll-cycle re-animation stopped, live threshold update; off-canvas drawer overflow clipped | QA |
| Live on QA — ready to test · Admin & Security | |||
| #899 | Security | Web search gated by Okta group membership — two-direction matrix verified (allow/block/bogus-group/case-insensitive) | QA |
| #907 | Security | Web-search authorization enforced on the agent tool path — survives only when authorized this turn (fails closed); warning modal no longer force-enables the toggle | QA |
| #894 | Security | Outbound search queries screened for PII via Bedrock Guardrails before leaving the environment | QA |
| #888 | Security | WebSocket search kill-switch fails closed on read errors | QA |
| #889 | Backend / files | Attached-file listing scoped to the active session — no more sweeping the user's whole corpus or other sessions' images (phantom-files bug) | QA |
| #895 #897 | Admin | Placebo Retention form replaced with a read-only search-query-screening guardrail status panel (nothing editable that isn't enforced) | QA |
| #903 | Admin users | Image Model Access checkboxes restyled to the app-standard green control (red error look removed) | QA |
| #912 | Profile | Connections tab gated behind the nav-visibility config | QA |
| #881 | Admin shell | Admin user profile moved to the sidebar bottom; real pending-approvals count on the review-queue badge; user groups from JIT data regardless of SCIM | QA |
| #877 | Models | GPT-5.4 / GPT-5.5 no longer selectable anywhere | QA |
| #882 | Backend | System-prompt current date computed per request — warm Lambdas no longer report stale dates | QA |
| #890 #893 | Infra | Guardrail IAM groundwork (both Lambda roles); CloudWatch log retention codified at 90 days incl. the three never-expire groups | QA |
| — | Infra / CI | API-gateway CORS allow/expose headers codified, X-Request-Id allowed, image-gen feature flag wired to the QA build; cost_events index + ESR migration fixes registered | QA |
| QA caveats — two things to know while testing | |||
| note | Prompt descriptions | Description code is live on QA, but the description data still needs a seed run on the QA DB — prompts show body-snippets on QA until then | Pending seed |
| note | MCP Servers | Intentionally hidden on QA via config (not reverted) — #684 (per-user OAuth / Connections) stays held, not part of this promotion | Hidden by design |
| On dev — ready to review, promotes next (Sierra's list) | |||
| — | Admin Settings | Duplicate annotations removed — Image-Model Allowed Groups and Web Search each showed the "all unchecked = all users" / "hidden when disabled" note twice | On dev |
| — | Dashboard | Empty info icons on the Active Users and Prompts tiles (no hover text) removed | On dev |
| — | User Settings · Usage | Two inaccurate/confusing panels removed (Chat Sessions/Saved Prompts/Agents/Files; and Default Agent/My Agent/Messages) | On dev |
| — | User Settings · My Data | Blank "My Data" tab removed — download/delete already live under Privacy & Export | On dev |
| — | Chat · Instructions | Bottom instruction panel was hidden behind the input box — spacing added so it's fully visible | On dev |
| — | Chat History | "Today" group relabeled "Recent" | On dev |
| In progress — still being built (Sierra's list) | |||
| — | Chat History | Delete a chat from history — soft-hide with confirm, in the side panel and the history page | In progress |
| — | User Settings · Usage | "Request Increase" — copyable email + prefilled mailto (admin-settable address) | In progress |
| — | Dashboard | Spend by Model to include image models (Stable Diffusion, Stable Image, GPT) — bring the dashboard in line with the usage table | In progress |
| — | Workflows | Landing/workflow images slow to load (~8s) — least-invasive lazy-load + caching fix (fuller S3/CDN option held in reserve) | In progress |
| Held from QA — pending your call | |||
| #670 | Search / security | Web-search warning modal — user must acknowledge "no confidential / PII data" every time the toggle turns on | Held |
| #684 | MCP | Per-user OAuth connections and a Profile Connections tab | Held |
| #854 | Image models | Per-user and per-model-group access control | Held |
| #853 | Infra | Import the existing staging Lambda instead of recreating it | Held |
| #855 | Dependencies | Safe patch/minor dependency bumps | Held |
| Needs your call (parked, not guessed) | |||
| #899 | Security semantics | Unchecking the LAST group = "everyone allowed" (documented dark-default), not "nobody". Contradicts the mental model that unchecking a group revokes it. Flip empty→"nobody/fail-closed"? Broad blast radius — your decision. | Decide |
| — | Infra | Terraform apply (guardrail env vars + IAM + 90-day retention) — unblocks live-testing #894/#890/#893. Needs your backend.tf "go". | Your go |
| #865 | Category taxonomy | Dev has TWO parallel taxonomies: 8 seeded slugs renamed via the CMS (Voice/Target/Launch/Perform/Pulse/Elevate…, 74 prompts) vs. real client departments (Brands & Properties=62, Finance=13, Music, Talent… no category doc). Which is canonical? Reseed + reassign? Design call (Kieran's Figma). | Decide |
| — | Knowledge | KB round plan written (5 PRs + staging purge runbook) — 5 design questions in §8 for you before build. Per-search audit-log plan also awaiting your review. | Review |