Files
jobtrackingapp/docs/redesign/phase-9/p9-requal-01/SOURCE_REVIEW.md
T
cesnimda 3727a723e8
MariaDB persistence qualification / mariadb (push) Failing after 7s
docs: publish Phase 9 requalification decisions and evidence
2026-10-24 18:32:24 +02:00

10 KiB

P9-REQUAL-01 independent source review

Date: 2026-10-24. Reviewer: independent AI code-review agent.

Current checkpoint supplied by the qualification owner: 5ac11549b2caa27469aa9fb2b5b9ed402471a453. Application-fix checkpoint supplied by the owner: 2b26953d6f3c3fdacdffefa2c0a696c9084f1afd. These identify the review handoff; this report does not independently verify Git or deployed identity.

This is an AI source review, not manual acceptance, a completed runtime qualification, or final release approval. The reviewer made no application changes and ran no tests, builds, browsers, services, or database commands. Existing test reports were read as evidence, without rerunning their producers.

Scope and method

Read the qualification helpers mariadb-lane.py, linux-run.py, pdf-proof.py, and reconcile.py; the observations, performance, and Linux Playwright configurations and relevant test source; and connected browser/database guards and PDF-oracle source. Review focused on false PASS results, data scope, cleanup, and preservation assertions. Follow-up reviews read the actual fixes and regression source described below.

The application review covered JobTrackerApi/Services/DocumentsIndexService.cs, its controller validation, the existing MariaDB startup fixture, and JobTrackerApi.MariaDb.Tests/DocumentsIndexTests.cs. No broad whole-branch acceptance or final addendum review is claimed.

Finding and resolution

P2 — successful CREATE could lose cleanup ownership after a diagnostic write failure. In mariadb-lane.py, the command executor originally wrote its operation log before returning. If CREATE DATABASE succeeded but the log write failed, the caller never set created = True; the final cleanup consequently skipped the generated schema.

The reviewed fix records successful CREATE ownership immediately after the native command returns zero, before the log write (mariadb-lane.py:152). Failed CREATE does not authorize DROP. test-mariadb-lane.py:17 injects the command outcome and log-write failure; its assertions verify a failing invocation, DROP and confirmed schema absence after successful CREATE, and no DROP after failed CREATE. The reviewer inspected this regression source. The owner reported two passing offline tests and a retained old-source replay with one expected failure; the reviewer did not execute or independently inspect that replay. Disposition: source finding resolved.

Follow-up reviews

Nested Playwright configuration working directories

Reviewed explicit UI working directories in observations/playwright.config.ts:5, performance/playwright.config.ts:11, and linux/playwright.config.ts:15. These address the owner's observed setup failure caused by inherited server commands resolving against the nested configuration directory. They preserve the inherited server settings and isolation behavior. No new actionable finding in the fix. Runtime successor results remain the qualification owner's responsibility.

Persisted Career Profile comparison

Confirmed JobTrackerApi/Models/StructuredCvProfileJson.cs:9 configures null-property omission and SerializePersisted at line 79 uses those options; CareerProfileService.cs:114 uses that serializer for persistence. The performance helper at performance/metrics.mjs:8 applies that representation only to the initial comparison between the already-normalized API profile and independently read persisted JSON. The synthetic fixture's null object properties are omitted; null array elements and non-null falsy values remain. Regression source checks those cases, input immutability, and detection of a non-null content change.

The sole workload call is performance/sustained.spec.ts:70. Full API profile equality during and after the workload remains, and exact SQL snapshot equality remains at line 172. The initial SQL/API revision equality at line 69 adds an assertion. CV settings overrides do not use this helper. No actionable assertion-weakening finding for this fixture and call site.

MariaDB documents-index Name projection

Reviewed DocumentsIndexService.cs:62: MariaDB converts each of the seven UNION Name expressions to utf8mb4 with utf8mb4_bin collation. SQLite retains its original expressions. The inserted SQL expressions are compile-time strings; owner, search, filter, and pagination values remain parameters. Tenant joins, metadata selection, and read-only query behavior are unchanged by the diff.

Reviewed all three tests in JobTrackerApi.MariaDb.Tests/DocumentsIndexTests.cs:

  • Line 17: actual startup mixed collations, all seven document sources, counts, pagination, metadata, and unchanged snapshots.
  • Line 57: Unicode/accent search, literal wildcard characters, and deterministic name ties.
  • Line 79: foreign documents and damaged associations, owner-scoped history, filters, and unchanged snapshots.

Read .artifacts/p9-requal-01/documents-provider-red/mariadb.trx: all three cases failed with Illegal mix of collations for operation 'UNION'; counters were 3 executed, 0 passed, 3 failed. Read .artifacts/p9-requal-01/documents-provider-green/mariadb.trx: the same three test identities passed; counters were 3 executed, 3 passed, 0 failed, and 0 not executed. These are focused retained reports, not additional full-suite executions. No actionable finding in the provider fix or three regression tests.

Strict CV sibling durable baseline at 7092697

Reviewed the sole fixture change in job-tracker-ui/e2e/cv-settings-presentation.spec.ts:101 at the owner-supplied checkpoint 7092697cb3e20a5f22e173648fd544de3de6c553. The initial Linux report and linux/playwright.log showed four settings failures whose full-body differences were only updatedAtUtc: seven fractional digits in POST responses versus at most six in durable GET responses. JobTrackerApi/Migrations/20260830128000_AdoptCvVariantSchema.cs:32 and line 33 define the timestamps as datetime(6).

The fixture now checks POST success, obtains the created ID, checks an independent GET succeeds, and snapshots its full body before UI actions. The later full-body toEqual(sibling) assertion remains at line 177, including timestamp, version and settings. No tolerance, normalizer or field omission was introduced. This verifies preservation of durable pre-action state; it does not assert POST-response timestamp precision survives persistence. No actionable assertion-weakening finding.

Final evidence and acceptance-document review

Read the final ACCEPTANCE_ADDENDUM_2026-10-24.md, acceptance.json, findings.json, the final dispositions section of FINDINGS.md, source-lineage.json, LINUX_PDF.md, and selected underlying native records. This was a read-only evidence review, not execution of qualification commands.

  • validation.json records automationComplete: false, no runtime drift, Linux PDF FAIL and Python advisory FINDINGS. Other recorded automated lanes have PASS status; their case counts are kept separate.
  • The raw Linux oracle reports contain 9/16 passing fidelity fixtures and 4/8 passing settings fixtures: 13/24 pass, 11 fail. Their page totals are 37 and 28, or 65 versus 60 expected. The failed fixture names and extra-page cases agree with LINUX_PDF.md. The staging record reports no input drift.
  • linux/process.json records browser/process exit zero, 51 migrations before and after, and successful API removal, database disconnection, network removal and generated-schema removal. Producer success is correctly separated from failed PDF output qualification.
  • The retained performance result records 900006.3119 ms, 3382 reads, zero read failures, 20 navigations, zero navigation failures, equal selected before/after snapshots, and successful schema cleanup. This is finite synthetic workload evidence, not a capacity or production guarantee.
  • Comparing the two retained frozen input maps found 1043 entries in each and one changed input: job-tracker-ui/e2e/cv-settings-presentation.spec.ts. This agrees with source-lineage.json. The four affected Windows successors replace affected evidence; they are not added to the ordinary 362.
  • The findings register has 59 entries with 59 distinct IDs. The final Markdown dispositions retain the Python and Linux output failures, bounded RD21 closure and separate production/manual conditions.

The five decisions are consistent with the evidence reviewed: RD21 RESOLVED within its original six save/concurrency clauses and tested scope; hosted MariaDB BLOCKED; Phase9 NO-GO; Phase10 NO-GO; production NO-GO. REQUEST section 6 permits unfinished genuine human checks to carry into release gates; production-only infrastructure limitations do not independently veto isolated functional QA. The confirmed Linux output failure and unclosed critical/high Python risk disposition support the Phase9 decision. The Python decision is an explicit acceptance-risk judgment, not a claim that REQUEST mechanically rejects every advisory. The Phase10 cleanup prerequisites at docs/redesign/IMPLEMENTATION_PLAN.md:164 independently require unused-route, passing-test and satisfied functionality-inventory proof; no cleanup or Phase10 implementation is authorized.

One documentation consistency issue was sent to the owner: the SEC04 JSON evidence still described tracked Python summary packaging as pending although the tracked summaries exist. This does not change the OPEN/FINDINGS status or any verdict; the owner owns that register correction.

Review limits

No tests, builds, browser sessions, service actions, database commands or production actions were run by this reviewer. Source lineage was compared through retained manifest contents; this review did not independently verify Git/remote/deployed identities or recompute every runtime artifact hash. Recorded automation and reviewed source do not establish human, physical-device, provider/model or production acceptance. No final release approval is granted by this AI review.

Qualification-owner disposition: the SEC04 packaging note was corrected before publication; findings.json now links the completed python-advisories.json and PYTHON_SECURITY.md. OPEN/FINDINGS and coverage INCOMPLETE remain unchanged.