docs(qa): close local runtime acceptance and record publication blocker

This commit is contained in:
cesnimda
2026-10-29 13:10:47 +01:00
parent caa0c6a2ef
commit 5032ccb415
10 changed files with 994 additions and 3 deletions
@@ -0,0 +1,47 @@
# Local runtime acceptance — 2026-10-29
The cumulative A–D application was activated at **http://jobbjakt.local** using the existing standalone `jobjakt-dev` project, private `jobtracker_dev` MariaDB, loopback bindings and Mailpit. The primary checkout's source/configuration was preserved. No production service or data was accessed. Existing CVs require explicit Apply to adopt design v2; historical output is preserved.
## Cumulative activation
The initial final activation is bound to `994bf8f8bbf0df3c53111ca7f66af97fe0680013` and source digest `b36d18e5735b1ccb7ea4d0e93487996973f176e81a92f494ab022e2ec4f26d8f`:
| Component | Immutable image |
|---|---|
| Backend | `sha256:08dba5ef4d908138e8982d2fee203840fdd88611f9d916ec522bcf14ad77f4a2` |
| Frontend | `sha256:fd4092aa2919463f8cf55b81941df1cd4c2db261ed6dc092b8aaf74730d9d618` |
| Sidecar with correlation | `sha256:7172e138f04387f6940ea501107527c2cece4455fe31239d65e1ce53f4375ec8` |
All three were healthy after guarded recreation with `--no-deps --no-build --pull never`. The served index exactly matched the local `/api` build (SHA256 `93491c377bc9150ea26b8ac516f106bcd0d841ee98befa6dd96ead460e00035e`); backend `/health` returned 200. `/api/health` is not its health route and correctly required authentication during an initial probe. The qualified localhost:5302 test frontend was hash-verified and archived before rebuilding local assets.
Raw identities, previous images, source override, build and HTTP checks: `.artifacts/pre-phase10-ux/local-ai/source-994bf8f/`. The generated source override must be **last**, after the primary standalone development compose file, its `.env.dev`, and this worktree's `dev/local-workers.override.yml`. Applying only the older worker override can select historical images. Preserve the verified read-only BART mount and never substitute production compose/environment values.
All seven authorised local workers are configured on: rules, reminders, saved searches, daily export, job enrichment, AI operations and CV document imports. This configuration does not prove every scheduled/provider feature. Existing per-account consent, plan, schedule and provider prerequisites remain active. External AI processing is disabled; mail routes only to local Mailpit. OAuth, billing and external-provider credentials have not been invented or qualified.
## Real local observations
Two independently generated synthetic accounts uploaded the approved PDF through the actual local API. Both observed `queued → running/cv_extracting → pending_review/cv_review_ready`, source SHA256 `4a6b30aab7d10c1b57f9efdbf2d51e7e4900b01b66a4c0c287a77f054128acd2`, owner-linked import IDs and Created/Claimed/StageChanged/Completed history. Original source bytes matched. No imported profile facts were applied by this smoke; reviewed application is qualified in the separate real Docling browser/MariaDB lanes.
The first strategy fixture omitted required CV text. It failed admission, and its temporary account erasure completed. The corrected fixture reached the provider but revealed a real inherited text-versus-JSON prompt conflict. That failed operation is retained as evidence and motivated the narrow [structured strategy correction](STRUCTURED_STRATEGY_ADDENDUM.md). Final corrected runtime outcomes are recorded in the subsequent dated addendum below.
The source-layer correlation image passed 81 offline Python tests. Direct actual local summary and CV rewrite returned nonempty output in 1.126 and 12.219 seconds respectively. This proves connectivity/nonempty responses, not faithful rewriting or factual extraction quality. The later structured-output image passes 83 offline tests; this supersedes the image-contract total rather than adding 83 to 81.
The dedicated local Ollama artifact was reverified without downloads or cache changes: official Ollama 0.40.11 immutable image `459985308d740b99071719baec2740a60f5b2b2d9b835c171991ae25690203da`; `qwen2.5:7b` Q4_K_M, manifest `845dbda0ea48ed749caafd9e6037047aa19acfcfd82e704d7ca97d631a0b697e`; GGUF SHA256 `2bada8a7450677000f678be90653b85d364de7db25eb5ea54136ada5f3933730`. The isolated container is CPU-only, bounded to four CPUs/8 GiB, one parallel request, cloud disabled, and a dedicated model volume. This matches the recorded model name; exact deployed production digest, runtime and quality parity were not verified.
The two regression-only Docling parser/gateway containers were removed by exact verified IDs, followed by their two verified empty owned networks. Development services, database, model cache and previous rollback images were retained. Evidence: `.artifacts/pre-phase10-ux/test-resource-cleanup-final.json`.
Real CV model interpretation remains disabled (`CV_IMPORT_AI_ENABLED=false`) and its compatibility/factual accuracy acceptance remains BLOCKED. Existing filesystem, backup and production model/cache security concerns are not resolved by local smoke tests.
## Structured strategy correction and final runtime
The source correction is committed as `caa0c6a2efea5a6e9d8910f55fb00fd982cd48fd`. The new Linux image build bound the actual source tree and published DLL; source digest `8b0174f5817452a50524b0fb8bd34d120caf8a7bef8bc48a2191c0792950b1b4`. It includes uncommitted documentation/evidence in the recorded source inventory; the build record preserves status and every file hash rather than claiming a clean-tree build. Application code is committed.
Final images: backend `sha256:14adb1e05757575e7c9d50c8f504f8209ebbf7f9b5f870daef0113d9dfe7dd49`, unchanged frontend `sha256:fd4092aa2919463f8cf55b81941df1cd4c2db261ed6dc092b8aaf74730d9d618`, sidecar `sha256:e1dc2dfce83caa4fe785ee9485b86011bb3ec0470511a9dfbdb03206ee1c40b3`. The replacement recreated only backend/sidecar, with existing privacy, development database, loopback and Mailpit guards. All images were healthy. The **latest** override is `.artifacts/pre-phase10-ux/local-ai/source-caa0c6a/source-images.override.json`; use this instead of the historical 994/B overrides.
The complete backend suite passed 1,448 tests with zero failures/skips; the exact final sidecar image passed 83 offline Python tests. The focused static review found no blocker. One previous full backend attempt failed because an existing persistence test still mocked the untyped call; its mock was changed to require the structured mode and the complete rerun passed. This is preserved in `strategy-mode-backend-full/` and `strategy-mode-backend-full-02/`.
The final real synthetic queue operation `4394886e-16f7-4bb6-ba8b-00725cadab79` succeeded on its first attempt with no failure category; readback returned a nonempty 118-character strategy summary. The same fresh owner uploaded another real PDF, reached review and retained all structured stage events even though the two-second poll missed the short running state. The preceding actual scheduled enrichment persisted a 681-character summary and tags; this was observed on the prior source's unchanged text-generation path and was not rerun through another ten-minute schedule after the JSON-only fix. These observations establish working local runtime paths, not model factual quality. Raw records: `local-ai/final-worker-journey-03/results.json` and the retained earlier `final-worker-journey-02/results.json`.
Git publication attempts for this last correction failed because `git.cesnimda.uk:443` was unreachable. Earlier A/B/C/D and the broad regression freeze had been pushed and verified. The final handoff records the remaining remote synchronisation requirement; local activation does not imply remote publication.
Final closure: all **three** generated synthetic accounts completed the existing account-erasure workflow. The first fixture's failed admission, the second run's malformed strategy response, and the final successful strategy run remain distinct evidence. Final direct sidecar summary/rewrite checks passed in 1.212/20.149 seconds with nonempty outputs, under the final immutable image guard. Backend `/health` and unchanged served frontend bytes were rechecked after the last activation. [local-runtime-summary.json](local-runtime-summary.json) contains the safe results and artifact hashes; no credentials or generated document text are included.