From 229b70958e4759ccbc71381d52c740545e26e32c Mon Sep 17 00:00:00 2001 From: User Date: Tue, 14 Jul 2026 15:33:39 +0200 Subject: [PATCH] docs: record workflow regression deployment --- PROJECT_STATE.md | 29 +++++++++++++++++-- brain/codebase/workflow-ui-contracts.md | 17 +++++++++++ brain/index.md | 1 + .../2026-07-14-workflow-ui-regressions.md | 13 +++++---- 4 files changed, 52 insertions(+), 8 deletions(-) create mode 100644 brain/codebase/workflow-ui-contracts.md diff --git a/PROJECT_STATE.md b/PROJECT_STATE.md index 91822b94..6b83fa13 100644 --- a/PROJECT_STATE.md +++ b/PROJECT_STATE.md @@ -1,6 +1,6 @@ # ThothII — Project State -> Starting-point snapshot for new sessions. Last updated: 2026-07-13 (direct adapters + Pi project trust fixed live). +> Starting-point snapshot for new sessions. Last updated: 2026-07-14 (workflow/UI regressions fixed live). > Point a fresh session here ("read PROJECT_STATE.md") before substantial work. ## Deployment — Docker locale (Profile A, co-located) — LIVE 2026-07-12 @@ -35,6 +35,31 @@ ThothII gira in Docker sul server co-locato, **embedded nel portale omics_portal resumed directly at F1, ran `tht session show`, and completed `tht search pack` (12 tables, 0 evidence, 2 solved) without repository exploration or adapter errors. +### Workflow/UI regression fixes — LIVE 2026-07-14 + +- **F1 Model Activity restored.** Session create/resume now preserves configured/persisted + thinking instead of forcing `off`. Pi's nested `thinking_delta` is bridged to a dedicated + named SSE `activity_delta`; EventSource subscribes to that name and the panel keeps it separate + from final assistant text. Reasoning remains in-memory and is not persisted to session artifacts. +- **F3 rewrite confirmation remains bypassed.** `rewrite_question` records approval and advances + automatically without a reviewer widget. The repeated prompt came from old running containers: + images had been rebuilt but services had not been recreated. +- **Join review is read-only and complete-set safe.** Join-only proposals render informational + cards with only `Continue` and `Other — specify`. Continue requires the exact complete id set; + all joins are persisted together by `decision add-join-set`, using an atomic ledger replacement + under a per-session cross-process writer lock. Other persists none of the rejected proposal. +- **CTE presentation fixed.** F6 CTE cards now structure purpose, rationale, tables, filters, keys, + and output columns with responsive wrapping/alignment. The Horizontal/Vertical switch is hidden + for a single SQL block (the per-CTE view), because it only affects multi-block layouts. +- **Latest render failure diagnosed and hardened.** Session + `2026-07-14-115847-estrai-i-pazienti-che-hanno-fatto-un-abl` sent an object in + `open_questions`, which React cannot render as a child. The v2 gate now enforces + `open_questions?: string[]`; the frontend also safely normalizes legacy malformed payloads. +- **Verification/deploy:** Python harness 798 passed / 5 L2 deselected; gate JS 126; backend 143; + frontend 250; TypeScript/build gates green. Compose rebuilt and force-recreated both services. + Running image ids: core `sha256:d0d23528a3e586f4ff17bccd701ac91351b7d20bc99b4792b6bfbb36898f7e33`; + frontend `sha256:4dda207d4de8dca15ca6ff58bb93f16050c9e7dc2841c4fbbf252d0d5251ae47`. + ## What ThothII is A **human-in-the-loop datamart builder**: it turns a natural-language question into @@ -89,7 +114,7 @@ All three layers' deps installed (`npm install` in each, `python -m venv + pip i - frontend: `cd frontend && npm run dev` (Vite; `VITE_BACKEND_URL` → backend) - harness install: `cd harness && python -m venv .venv && pip install -e ".[dev]"` → `tht` on PATH -## How to test (all green as of 2026-07-07: harness pytest 330 / gate JS 107 / backend 71 / frontend 182) +## How to test (green 2026-07-14: harness pytest 798 / gate JS 126 / backend 143 / frontend 250) - harness: `cd harness && .venv/bin/pytest -q` (5 L2/real-DB tests are deselected by default) - backend: `cd backend && npx vitest run` · typecheck `npx tsc --noEmit -p .` - frontend: `cd frontend && npx vitest run` · typecheck `npx tsc -b` · e2e `npm run e2e` (Playwright) diff --git a/brain/codebase/workflow-ui-contracts.md b/brain/codebase/workflow-ui-contracts.md new file mode 100644 index 00000000..92281015 --- /dev/null +++ b/brain/codebase/workflow-ui-contracts.md @@ -0,0 +1,17 @@ +# ThothII workflow UI contracts + +- Pi reasoning arrives as nested `message_update.assistantMessageEvent.type = thinking_delta`. + The backend maps it to the named SSE event `activity_delta`; the frontend EventSource must + explicitly subscribe to that name. Model activity is separate from final `text_delta` output. +- Session create/resume must preserve the configured or persisted thinking level. Forcing + `thinking: off` disables the upstream signal and makes the activity panel legitimately empty. +- A join-only `reviewer_decide` proposal is one complete, atomic join set. The read-only + `join-review` widget persists every proposed join on Continue; `Other — specify` persists none + and requires the model to propose the complete corrected set again. Ledger read, sequence + assignment, and atomic replacement share a per-session cross-process writer lock. +- A v2 phase summary accepts `open_questions?: string[]`. Validate this at the gate boundary and + normalize legacy malformed entries defensively in the viewer so one object cannot crash React. +- `SqlViewer`'s horizontal/vertical layout control is meaningful only with multiple SQL blocks; + hide it for the single CTE result shown by `CteResultViewer`. +- Deployment lifecycle details live in [[datamart-builder-deployment-gotchas]]: a rebuilt image + does not update a running Compose service until the containers are recreated. diff --git a/brain/index.md b/brain/index.md index 3de28ca5..e9e66fef 100644 --- a/brain/index.md +++ b/brain/index.md @@ -1,3 +1,4 @@ # Brain - [[codebase/datamart-builder-deployment-gotchas]] +- [[codebase/workflow-ui-contracts]] diff --git a/docs/superpowers/plans/2026-07-14-workflow-ui-regressions.md b/docs/superpowers/plans/2026-07-14-workflow-ui-regressions.md index c6386148..8a7759c2 100644 --- a/docs/superpowers/plans/2026-07-14-workflow-ui-regressions.md +++ b/docs/superpowers/plans/2026-07-14-workflow-ui-regressions.md @@ -285,12 +285,12 @@ Run: `cd harness && npm test` Expected: all pass. -- [ ] **Step 2: Update project state and durable architectural note** +- [x] **Step 2: Update project state and durable architectural note** Record the implemented contracts, verification counts, deployment state, and the distinction between building an image and recreating a service. -- [ ] **Step 3: Build and recreate Compose services** +- [x] **Step 3: Build and recreate Compose services** Run: `docker compose build` @@ -298,15 +298,16 @@ Run: `docker compose up -d --force-recreate` Expected: both services are recreated from the new images. -- [ ] **Step 4: Verify deployed containers** +- [x] **Step 4: Verify deployed containers** Run: `docker compose ps` -Run: `docker inspect thothii-core thothii-frontend --format '{{.Name}} {{.Image}} {{.State.Health.Status}}'` +Run: `docker inspect thothii-core-1 thothii-frontend-1 --format '{{.Name}} {{.Image}} {{.State.Status}}'` -Expected: both report the new image ids and `healthy`. +Expected: both report the new image ids and `running`; the core healthcheck reports `healthy` +(the frontend image has no healthcheck). -- [ ] **Step 5: Review diff and commit intentionally** +- [x] **Step 5: Review diff and commit intentionally** Run: `git diff --check && git status --short && git diff --stat`