feat: establish unified administration and model context baseline

This commit is contained in:
Codex
2026-09-12 18:03:15 +02:00
parent 840344706f
commit f52bf22e05
74 changed files with 2334 additions and 523 deletions
@@ -0,0 +1,96 @@
# Context shelf A: implementation and local acceptance
Date: 2026-09-12. Status: implemented and deployed to local Docker; not deployed to the server.
## Accepted scope
The owner selected the latest option A and explicitly required functional
preservation of Core and session management. Aesthetic refinement is limited to
the agreed Administration workbench and global context.
- Workspace, Evidence, Memory, Database and Pi open as peer pages in the work area.
- A single top collapsible shelf selects workspace and interaction model.
Explicit choices are independently remembered per origin, mount and principal;
installation defaults fill only missing choices. Invalid saved choices fail
closed instead of silently choosing another context.
- Core's composer, eight phases, review widgets and left activity log remain the
original production components. Session scope tabs, grouping, rename, archive,
bulk operations, read-only inspection and guarded Resume remain intact.
- Visited Admin pages and Core remain mounted during page navigation.
Unsaved Admin edits block navigation/context changes until saved or explicitly
cancelled in the editor. Failed saves and failed catalog refreshes preserve drafts.
- Workspace/model selectors are locked during operations. A navigation drawer
preserves access to the session rail when the log is open or space is narrow.
- The unified Installation Model Catalog remains the only model authority.
Core and metadata generation consume the same canonical selection.
Resume now includes the session's pinned `workspaceId` in successful responses,
binding the global workspace immediately without replacing the selected model;
older backends have a manifest fallback.
- Impeccable informed typography, warm surfaces, restrained red, spacing,
natural help-text wrapping and container-responsive layout. No Omics header
or left sidebar was added to production ThothII.
- A, B and C prototype sources and launch scripts were preserved.
## Verification
Using Node 24.16.0:
| Check | Result |
| --- | --- |
| Full frontend Vitest suite (two workers) | 671 tests passed, 82 files |
| Full backend Vitest suite (two workers) | Passed; existing 40 opt-in auth runtime projection tests skipped |
| Frontend TypeScript build check | Passed |
| Backend TypeScript check | Passed |
| Frontend production Vite build | Passed; bundle-size advisory remains |
| Git whitespace check | Passed |
| Strict MkDocs build | Passed |
Regression fixtures now provide valid context where they exercise normal Core
or session workflows. Separate tests explicitly cover invalid saved context,
global selector uniqueness, lock/unlock, failed and successful saves, retained
drafts across refresh failure, Core/Admin round trips, and pinned-workspace Resume.
The existing 40 session-management tests remain green.
Browser acceptance used the actual production React application against a
temporary read-only synthetic API, not the earlier prototype implementation.
Checked Core, expanded/collapsed shelf, Memory, session scope tabs and mobile
navigation at 390, 768 and 1280 CSS-pixel application widths. The test frame
scaled wider layouts to fit the inspection panel; layout width inside the frame
remained the stated CSS width. No real data, provider calls or runtime mutations
were performed. This is sampled visual acceptance, not certification of every
Admin editor on the real portal.
## Remaining release gates
### Local Docker update
At the owner's subsequent request, core and frontend were rebuilt from
`/Users/mp/projects/ThothII` and recreated in the existing
`thothii-18998cca7b0a` project. Its launcher preserves all previous Compose
bindings and adds `/private/tmp/thothii-context-a.compose.yaml` last to override
the old worktree build context. Only core/frontend were recreated; PostgreSQL,
Qdrant, embedding and persistent volumes were retained.
Verified HTTP 200 for the frontend and both direct/proxied core health endpoints.
The served production bundle contains the global shelf and unsaved-change guard,
without the synthetic preview API. All five persistent services report healthy.
The mounted catalog is schema v2, default `zai/glm-5.3`, with shared
DeepSeek Pro/Flash, local Qwen and GLM model identities.
Previous image tags are retained as `before-context-a-20260912` for each image.
This startup check does not exercise authenticated Core/provider or Admin workflows.
### Server release
1. Integrate on the server beneath Omics Portal's actual red header and beside
its existing sidebar. Supply available height through `--thoth-app-height`
when the host is shorter than the viewport. Check real host styles, widths,
zoom, keyboard traversal and Back/Forward.
2. Use approved test data to verify configured Core/Pi and Admin/LiteLLM models
through their real workflows. Unit fixtures do not certify provider compatibility.
3. Verify workspace readiness, synchronization and resume on the configured
stack before release. Follow the existing guarded server migration runbook.
4. Gitea publication and final independent standards/spec review remain separate
gates; no remote issues or deployment are claimed by this implementation.
The working tree also contains earlier model-catalog and Administration work.
Unrelated changes were preserved; this report does not claim a clean or committed tree.
@@ -0,0 +1,80 @@
# Unified interaction LLM — local implementation
Date: 2026-09-12. This change is separate from selection of the final administration/context-shelf
prototype. No deployment, Gitea issue publication, or Omics Portal modification was performed.
## Implemented
- One authored `modelCatalog.defaults.interaction` per installation, independent of workspace.
The local PSD descriptor and tracked example now use `zai/glm-5.3` in this field.
- One generated `defaultInteraction` in runtime catalog schema v2; host projections, backend
settings, Pi diagnostics, Core admission and metadata-generation consumers use that value.
- Separate Pi/LiteLLM adapters remain. When Admin AI is configured, both public lists and Pi's
enabled list use their intersection. Single-use entries remain inventory, not global choices.
Core-only installations remain possible when no Admin model is configured. Embedding is unchanged.
- Equal legacy defaults normalize on read without rewriting the source; divergent defaults or
mixed old/new fields fail with migration guidance. Generated schema-v1 catalogs must be regenerated.
- The existing Core and Database selectors now share application preferences, using complete
canonical IDs, including when two providers use the same short model name.
- Explicit LLM choices are remembered in browser storage per origin/application mount and
authenticated issuer/subject. Automatic defaults are not stored as explicit choices. Workspace
and thinking preferences retain their existing in-memory lifetime.
- Core/description-generation activity disables the existing model controls using existing state
and the shared run cache. This is not a new cross-workspace/background job subsystem.
- New sessions reject unavailable selections without fallback. Resume receives the global model
(or uses the installation default when omitted), keeps the historical workspace/revision and does
not overwrite the original manifest model fields. Archived/finalized sessions remain read-only.
- Pi management instructions and the configuration guide require an operator to exercise each
model in both Core and Administration. There is no automatic certification flag or live probe.
## PSD DeepSeek consolidation
Following explicit operator approval, the local PSD descriptor and its tracked example use one
`deepseek` provider with native Pi and LiteLLM adapters. Both `deepseek/deepseek-v4-pro` and
`deepseek/deepseek-v4-flash` are eligible for shared selection. The duplicate `deepseek-metadata`
provider declaration is removed; historical records remain unchanged. The installation default
stays `zai/glm-5.3`.
A value-free comparison confirmed that the existing Pi DeepSeek key and the existing
`DEEPSEEK_API_KEY` bundle entry are identical; both source files have mode 0600. No secret file
was changed. The catalog now declares `secret_env` / `DEEPSEEK_API_KEY` as the authoritative
source for both paths. Pi session snapshots exclude the selected provider's old auth entry,
without changing the original store or unrelated entries. Missing bundle keys fail closed instead
of falling back to old Pi auth or the generic key file. Availability enumeration, credential status,
and isolated provider smoke checks follow the catalog declaration as well.
## Verification
- All host CLI Go packages pass `go test ./...`.
- Backend under Node 24.16.0 after DeepSeek consolidation: 108 test files pass, 1 skipped;
1,377 tests pass, 40 skipped.
Backend TypeScript check passes.
- New regression coverage checks shared DeepSeek configuration/projection, canonical Core/Admin
identities, bundle-backed model enumeration, stale Pi auth precedence, missing-key refusal,
preservation of the source auth store, and sanitized credential status. All credentials in these
tests are synthetic; no model inference is performed.
- Full frontend run: 658 tests pass; three remaining failures concern existing administration-layout
work: Workspace preprocessing region, Catalog status placement, and Sync history entry point.
These controls were already being changed in the dirty worktree before this model change.
- The focused Core/Admin model synchronization test also verifies locking during Core and
description-generation activity, unlocking afterward, and provider-qualified identity. It passes.
- Frontend typecheck still reports three `exact` option errors in the pre-existing, untracked
`AppShell.administration.test.tsx` (lines 48, 66, 71). No new type errors are reported.
- Earlier parallel runs encountered timing-sensitive auth-helper failures; the complete backend
rerun with Node 24 and two workers passes. The Homebrew `node@24` path on this machine actually
reported Node 25; the verified Node 24 executable is under the user's nvm installation.
- No live provider calls or full deployed Pi/LiteLLM/Omics acceptance tests were performed.
- `git diff --check` passes. Strict documentation build remains blocked by an existing link in
the untracked `plans/2026-09-10-administration-pages-spec.md` pointing outside the documentation
tree to the administration-review prototype README. The updated configuration guide adds no warning.
The full frontend gate is not green; this is not a deployment-ready acceptance claim. Pre-existing
production UI edits and every prototype are preserved. The final collapsible global context layout,
general Core/Admin admission policy and server assembly remain in the wider UI workstream.
## Applying later
Use the matching host/backend release, review the installation descriptor, then apply the normal
installation lifecycle to regenerate **all** runtime projections together. Do not deploy only the new
backend against an old generated catalog. Follow the dual-path operator checklist in
[Installation Model Catalog](../general/pi-configuration.md).