docs: record workflow regression deployment

This commit is contained in:
User
2026-07-14 15:33:39 +02:00
parent 9d4e057426
commit 229b70958e
4 changed files with 52 additions and 8 deletions
+27 -2
View File
@@ -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)
+17
View File
@@ -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.
+1
View File
@@ -1,3 +1,4 @@
# Brain
- [[codebase/datamart-builder-deployment-gotchas]]
- [[codebase/workflow-ui-contracts]]
@@ -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`