8.1 KiB
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. 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 contains the safe results and artifact hashes; no credentials or generated document text are included.