test: prepare phase 9 requalification harness and blocker register
MariaDB persistence qualification / mariadb (push) Failing after 7s

This commit is contained in:
cesnimda
2026-10-24 13:20:47 +02:00
parent 780b9bc64f
commit 1a1b7c8221
29 changed files with 7637 additions and 4 deletions
@@ -0,0 +1,20 @@
# RD21 closure map and remaining limits
This map evaluates the unchanged [six original closure clauses](../p9-04/RD21_CONCURRENCY_ISSUE.md#required-closure-evidence), rather than inventing a broader fix. Historical baseline: `549b2cba5a791862ba3f854312ea819a86dc42a0`. Source/test inspection only in this register; fresh execution must be bound to the root-owned result ledger before final acceptance.
The [SQLite remediation addendum](../rd21-remediation/ACCEPTANCE_ADDENDUM_2026-10-23.md) recorded a repaired implementation but withheld RD21 because MariaDB had not run. The later [MariaDB acceptance](../../../database/mariadb-standardisation/ACCEPTANCE.md) explicitly resolves the bounded MariaDB12.2.2 save/concurrency scope using32 real-provider cases and1 native browser journey. [Historical raw case index](../../../database/mariadb-standardisation/validation.json) retains actual reports/failures. These are historical results, not fresh P9-REQUAL-01 passes. Neither old report is edited.
| Original required closure clause | Existing concrete cases and source | Evidence boundary / remaining limit |
|---|---|---|
| Independent concurrent clients editing different and same fields cannot silently overwrite an acknowledged save | [MariaDB Career tests](../../../../JobTrackerApi.MariaDb.Tests/Rd21CareerPersistenceTests.cs): `Independent_stale_snapshot_cannot_replace_acknowledged_career_edit`; [job tests](../../../../JobTrackerApi.MariaDb.Tests/Rd21JobPersistenceTests.cs): `Stale_or_unversioned_snapshot_cannot_erase_an_acknowledged_job_edit`, `Related_text_save_cannot_silently_replace_a_newer_acknowledged_draft`, `Structured_tailored_cv_snapshot_cannot_replace_a_newer_approved_document`, `Write_that_overlaps_a_delayed_save_wins_without_partial_events_or_opportunity_changes`. Parallel SQLite names in JobTrackerApi.Tests. [Native A/B ordering](../rd21-remediation/diagnostics/persistence.spec.ts): original two-session ordering case preserves each winner through immediate independent SQL reads, navigation and a new authenticated session. | Historical qualified same-owner source snapshots and database interleavings; not exhaustive every-field/editor/order testing. Rejection is safe conflict, not silent merge. Native MariaDB journey directly covers Career, while job provider behavior is covered by real-provider controller/persistence cases. |
| Actual owner-and-revision preconditions on database write; simultaneous submissions and first saves | Career `Stale_tracked_entity_is_guarded_at_database_update_and_stale_restore_is_rejected`, `Competing_first_save_sources_have_one_acknowledged_winner`; job delayed-save overlap and `Versioned_job_save_cannot_cross_tenant_job_or_company_ownership`. [Save contract](../rd21-remediation/SAVE_CONTRACT.md) identifies Career Version and job EF token; final database predicate guards the interval after controller validation. | Real provider contexts/connections, not a client-only comparison. Narrow lifecycle/background tracked writers advance job version. This does not make every narrow command ordering a full-editor merge contract. First canonical save is distinct from create-job intent idempotency. |
| SQLite and supported MariaDB runtime, including constraints, held readers/writers and partial failure | [SQLite Career](../../../../JobTrackerApi.Tests/Rd21CareerPersistenceTests.cs) / [SQLite job](../../../../JobTrackerApi.Tests/Rd21JobPersistenceTests.cs). [MariaDB startup/lock](../../../../JobTrackerApi.MariaDb.Tests/StartupAndLockTests.cs): `Full_startup_creates_every_table_and_column_required_by_the_persisted_EF_model`, `Fresh_repeated_and_populated_startup_preserve_owned_data_and_complete_migrations`, `Rd21_additive_migration_preserves_existing_job_fields_and_backfills_revision_one`, `Open_reader_does_not_block_independent_usage_and_identity_writes`. Job `Held_writer_timeout_rolls_back_and_a_reviewed_save_recovers_after_release`; Career `Identity_failure_rolls_back_canonical_children_history_and_projection`, `Database_failure_after_deletion_restores_children_history_and_revision_and_clears_tracker`; job `Failed_job_transaction_cannot_acknowledge_or_leave_partial_data_for_a_later_save`. | Historical actual pinned Linux/amd64 MariaDB12.2.2, InnoDB and independent TCP readbacks. Identity/summarizer doubles in controller tests are disclosed. Version parity does not prove exact production image/configuration parity. Not MariaDB12.3, power-loss durability or production rollback. Hosted prerequisite failure remains separate from local provider proof; fresh hosted lane pending root results. |
| Conflicts preserve drafts and offer explicit current-data review/reload; account switch and stale session fail closed | [MariaDB browser](../../../../job-tracker-ui/mariadb-tests/save-recovery.spec.ts): native Career conflict/network-failure/reviewed-retry case; [remediation browser](../rd21-remediation/diagnostics/persistence.spec.ts): native editor retention/recovery, missing-revision rejection, cross-origin committed header and successive Answers, fresh source after letter save. [Account isolation](../../../../job-tracker-ui/e2e/account-isolation.spec.ts): retained A request with B cookies/CSRF; missing/forged contexts; two-tab account switch and Back navigation. | Controlled aborted request, actual API/SQL reads and session-boundary tests. Not physical device/reader acceptance. Unknown commit outcome requires deliberate read/review, never fetching a new token to authorize an old body. No automatic retry is claimed. |
| Imports, history restores, generic job updates, lifecycle/bulk and old callers follow agreed compatibility contract | Career `Replacement_restore_parse_and_import_fail_closed_without_valid_revision`, `Import_acceptance_requires_the_revision_shown_in_its_diff`, `Reviewed_import_commits_or_rolls_back_canonical_projection_and_application_metadata`, `Parsing_commits_or_rolls_back_its_entire_import_application`; job missing/stale snapshot and related-text/tailored tests above. [SAVE_CONTRACT](../rd21-remediation/SAVE_CONTRACT.md) inventories endpoints/statuses; [related review](../rd21-remediation/RELATED_REVIEW.md) inventories narrow lifecycle/background writers, extension/create consumers and already-guarded Dashboard/CV/email owners. [MariaDB fixture delta](../../../database/mariadb-standardisation/fixture-delta.json) retains old unversioned failure and explicit3 fixture repairs with original assertions. | Source/caller review plus contract tests, not certification of every independent editor or mixed old/new deployment. Career missing precondition400; valid stale409; job missing/invalid/stale409. Old unversioned writers intentionally fail closed. Extension/bookmarklet is a create consumer. No compatibility alias removal. |
| Complete affected regression, frozen bytes and no unrelated Identity replay | Historical addendum reports1109 backend,934 frontend/105 suites,362 ordinary,23 separate,56 sidecar and6 remediation cases, separate conforming volume3; explicit obsolete historical diagnostic failures retained. Later MariaDB acceptance reports1123 backend,32 provider,1 provider-browser, corrected diagnostics18 andvolume3. Frozen contracts and canonical/variant/null-as-inherit ownership remain independently mapped in [preservation](PRESERVATION.md); original PDF oracle16/36 pages plus8/24 pages unchanged. Career transaction/Identity failure and read-only coherent snapshot tests cover projection boundary; identity-only endpoint keeps ownership. | These are separate historical lanes, not added totals or fresh full regression. Root must obtain complete fresh successors and frozen-byte/PDF proof on final source. Do not treat database conflict pass as frozen-byte proof, print acceptance or release acceptance. |
Creation-intent idempotency is explicitly a **separate retained RD21 concern**, not one of the stale-replacement repairs. No new duplicate-create reproduction or idempotency implementation is claimed. Record owner/domain follow-up with interrupted-create/replay semantics and a separate acceptance contract before changing it. Canonical first-save uniqueness is not create-intent idempotency.
Historical acknowledged edits lost before repair are not proven recoverable; no live records were inspected. Extraction discard/accept lifecycle concurrency was considered but not reproduced. Independent settings/company/contact records were source-reviewed without a newly reproduced shared RD21 defect; full multi-session acceptance of them is not implied. [RELATED_REVIEW](../rd21-remediation/RELATED_REVIEW.md) preserves these boundaries.
Current recommendation is therefore conditional on the exact decision: retain **bounded save/concurrency closure from historical MariaDB evidence**, require fresh source-bound successors for this requalification, retain separate idempotency and release limits, and let the root acceptance addendum issue the final RD21/Phase9/Phase10/production decisions. Do not reopen repaired stale loss merely because creation debt remains, and do not close creation debt merely because stale loss is repaired.