Playwright E2E Coverage and Fixture Backlog¶
Document responsibility¶
This document owns operational Playwright execution guidance, fixture/provider gaps, skip policy, and CI completion criteria. The broader behavioural model, evidence limitations, and golden-journey backlog are maintained in the user journey catalogue.
Current feature-030 evidence is dated explicitly below. The older snapshot and skip inventory are historical, not the active mandatory gate. Consult the latest private reports before treating a focused pass as current full acceptance.
Feature 030 lower-layer invariant inventory¶
This is a source-inspection inventory, not an execution report. Test discovery, sequential duplicate requests, mocked database errors, and browser stale-page checks do not establish separate-transaction race safety. A test locator below means the test exists; execution evidence is stated separately.
| Required invariant | Existing test locators | Evidence limitation or remaining gap |
|---|---|---|
| Exact stage roles and actor separation | apps/parcels/tests/test_workflow_authorization.py: WorkflowAuthorizationPolicyTests.test_higher_role_does_not_inherit_editor_mutation, test_creator_or_submitter_cannot_review, test_creator_submitter_or_reviewer_cannot_approve; apps/parcels/tests/test_parcel_draft_services.py: ParcelDraftWorkflowServiceTests.test_higher_roles_do_not_inherit_lower_stage_mutations, test_creator_with_reviewer_role_cannot_review_own_submission, test_creator_with_approver_role_cannot_approve_own_draft |
Policy tests are in-memory controls; service tests exercise persisted roles and events. Both layers are retained. |
| Dataset scope and no administrator bypass | apps/parcels/tests/test_parcel_draft_authorization.py: test_viewer_and_no_grant_cannot_transition, test_administrator_staff_does_not_bypass_workflow_roles, test_cross_dataset_workflow_history_and_events_do_not_leak; apps/parcels/tests/test_dataset_scoping.py: test_switching_active_dataset_changes_scope; apps/parcels/tests/test_dataset_rbac_enforcement.py: test_detail_view_denies_cross_dataset_uuid_access |
These remain distinct from browser navigation, warm-cache switching, and anonymous denial evidence. |
| Ordinary approval concurrency | apps/parcels/tests/test_parcel_draft_concurrency.py: ParcelDraftApprovalRaceTests.test_separate_transactions_approve_only_once_with_ordered_events, plus retained ParcelDraftConcurrencyTests.test_prevent_double_approval, test_event_sequence_is_monotonic_per_draft; apps/parcels/tests/test_parcel_draft_services.py: test_final_approve_converts_database_race_to_workflow_conflict |
The added TransactionTestCase proves distinct backend/transaction IDs and two simultaneous PostgreSQL advisory-lock waiters before allowing approvals to proceed. It asserts one approval, one conflict, one official successor/approval transaction, exact terminal and denial events, and unchanged winner revision. The retained sequential and injected-error controls are not substitutes for this race. |
| Exchange purpose, stale revision, and batch rejection | apps/parcels/tests/test_draft_exchange_package.py: test_inspection_package_cannot_be_imported; apps/parcels/tests/test_draft_exchange_service.py: test_tampered_identity_rejects_entire_batch_without_domain_or_file_residue, test_success_advances_revision_and_duplicate_import_is_rejected, test_stale_member_rolls_back_the_whole_batch, test_geometry_failure_labels_only_the_causal_record_invalid |
Six real GeoPackage tamper cases cover missing/malformed/foreign draft IDs, parcel-chain identity, feature dataset, and manifest dataset. Stale and injected second-record geometry rejection now compare complete domain snapshots, including official/draft/event/transaction state. Rejected-operation audit is permitted; updated-record results are not. |
| Exchange denial before inspection and file cleanup | apps/parcels/tests/test_draft_exchange_service.py: test_all_non_editor_roles_are_denied_before_inspection_without_residue; apps/parcels/tests/test_draft_exchange_views.py: test_non_editor_import_posts_leave_no_domain_audit_or_file_residue, test_reviewer_can_download_inspection_package; apps/parcels/tests/test_draft_exchange_security.py: test_unsafe_filename_does_not_escape_temporary_directory |
Viewer, reviewer, approver, and grant-free administrator service calls and actual POSTs are denied before inspection/import. Complete domain/exchange snapshots and isolated temporary/upload directories prove no residue. Tampered package imports and malformed filename inspection also assert temporary-file cleanup. |
| Production import CRS and format | apps/parcels/tests/test_parcel_vector_imports.py: ParcelVectorImportTests.test_projected_non_metre_gpkg_transforms_to_storage_and_records_audit, test_shapefile_without_prj_is_rejected_before_transformation, test_missing_crs_and_unknown_linear_units_are_rejected, test_geographic_gpkg_is_rejected, test_non_transformable_projected_geometry_is_rejected, test_geojson_file_is_rejected_as_import_input, test_kml_file_is_rejected_as_import_input, test_ambiguous_gpkg_requires_layer_selection, test_conflicting_gpkg_crs_metadata_is_rejected_even_with_selected_layer |
Include this suite in addition to the T026 named suites: test_crs_helpers.py alone does not test production file ingestion. Separate controls cover valid explicit layer selection and conflicting projected CRS declarations in the same layer's GeoPackage metadata; the latter rejects before transformation. Accepted Shapefile ingestion is not covered here. Integration cases can skip when ogr2ogr is absent, so report skips explicitly. |
| Upload draft creation and repeat confirmation | apps/parcels/tests/test_parcel_upload_apply_guard.py: test_apply_creates_draft_for_new_record_and_completes_upload, test_reapplying_completed_upload_raises_conflict, test_confirming_completed_upload_does_not_create_more_drafts, test_payload_with_stale_crs_contract_is_discarded |
These are lower-layer guards, not evidence of a user uploading, previewing, confirming, and reloading a projected file. |
| Topology real race | apps/parcels/tests/test_parcel_change_request_conflicts.py: ParcelChangeRequestCreationRaceTests.test_competing_ordinary_and_topology_creation_allows_only_one; apps/parcels/tests/test_parcel_split_requests.py: ParcelTopologyApprovalRaceTests.test_separate_transactions_approve_split_without_duplicate_outputs |
The retained real creation race uses two worker connections and a barrier. The added approval race shares the ordinary PostgreSQL contention helper and asserts one committed approval, two official outputs, two lineage edges, one transaction, unchanged winning revision, and exact approval/denial event cardinality. |
| Topology injected rollback | apps/parcels/tests/test_parcel_split_requests.py: test_final_approval_rolls_back_every_write_when_output_creation_fails; apps/parcels/tests/test_parcel_merge_requests.py: test_merge_approval_rolls_back_source_retirement_on_output_failure |
Split injects failure on the second official output; merge on its first output. Both now compare complete official/request/output/event rows, including source validity and terminal events, plus lineage and approval-transaction absence. |
| Direct overlap backstop and validity intervals | apps/parcels/tests/test_overlap_governance_workflow.py: AuthoritativeOverlapBackstopTests.test_direct_overlapping_insert_raises_stable_constraint, OverlapReservationRaceTests.test_separate_transactions_reserve_overlapping_area_only_once; apps/parcels/tests/test_overlap_governance_migrations.py: OverlapGovernanceTriggerIntervalTests.test_trigger_ignores_expired_historical_overlap, test_trigger_still_blocks_future_overlap, and corresponding OverlapGovernancePreflightTests |
Current direct-write rejection and expired/future trigger behavior have separate tests. The new reservation race proves simultaneous separate-transaction PostgreSQL lock contention, exactly one submitted proposal and one editable denied proposal, attributable events, and no official/transaction/exemption-use writes. It does not claim concurrent direct-write trigger execution. |
Current feature-030 execution evidence for this inventory: the owning ordinary
draft service, workflow UI entrypoint, and overlap workflow suites completed
with 62 passed, after the new denial-revision and create-form exact-editor
regressions failed before their product fixes. Private evidence is retained in
tmp/reliability-02/us2-denial-regression-red.log,
tmp/reliability-02/us2-create-guard-red.log, and
tmp/reliability-02/us2-service-ui-green.log. The subsequent combined T023,
T026, and T031 named suites, with strict vector imports and overlap
service/migration/workflow controls, completed with 115 passed, zero skipped
in 66.468 seconds. Exact locators and results are retained in
tmp/reliability-02/lower-layer-invariants.log. This run precedes the added
topology approval race and exchange/reservation extensions; it does not
establish a complete browser profile.
The added ordinary approval race and strengthened split/merge rollback controls
also completed with 3 passed, without requiring another product change.
Their initial run is retained in
tmp/reliability-02/us2-race-topology-rollback-initial.log.
After adding the topology approval race and sharing the contention helper,
the ordinary concurrency, split, and merge suites completed with 20 passed,
zero skipped in 8.443 seconds. Evidence is retained in
tmp/reliability-02/approval-races-rollback-green.log. These overlapping suite
totals are separate runs, not additive unique-test counts.
The exchange identity/residue/rollback and overlap-reservation extensions first
completed with 22 passed. The final combined named invariant suites,
including those extensions and the focused owned upload-result reset control,
completed with 121 passed, zero skipped in 62.637 seconds. This latest
lower-layer evidence is retained in
tmp/reliability-02/lower-layer-invariants-expanded-green.log.
The new coverage required no additional product change. Missing browser runs
or untested import boundaries must not be inferred from these passing suites.
The later explicit CRS-metadata regression exposed a genuine import defect:
a single-layer GeoPackage declared different projected SRIDs in gpkg_contents
and gpkg_geometry_columns, and the importer accepted it even with an explicitly
selected layer. Those declarations must match under
OGC GeoPackage requirement 146.
A narrow read-only metadata check now rejects the conflict before transformation.
The two failing subcases are retained in
tmp/reliability-02/ambiguous-crs-metadata-red.log; the vector/CRS/exchange
compatibility batch then completed with 33 passed, zero skipped in 48.927 s,
recorded in tmp/reliability-02/ambiguous-crs-metadata-green.log. This is separate,
overlapping evidence, not an addition to the earlier 121-test unique count.
Current execution status, 2026-09-08¶
Feature 030 has implemented the strict registry, guarded dual-profile runner,
isolated fixture manifests, independent observer and mandatory outcome reporter.
The fresh, unfiltered default attempt 3 passes all 100 mandatory cases:
86 Chromium and 14 Firefox, including the fixed 15 golden journeys and two
additional precision obligations. There are zero failures, skips, retries,
flakes or unexecuted cases. Exact combined scenario/project/retry identities
match the frozen mandatory registry, and all 80 pinned code/configuration hashes
remain unchanged. Browser correctness is complete. On 2026-09-08 the owner
explicitly deferred Package 2 performance tasks/overruns as non-blocking follow-up
and authorized implementation publication. Performance remains unaccepted, not
passed. Earlier failed attempts and focused recoveries remain separate evidence,
not erased history.
Implementation iteration 1 is published for independent review on 2026-09-08
(READY / waiting_review); publication is not review approval or deployment.
- Final harness/ownership/observer controls: 39 passed, zero skips, in 164.765 s,
recorded in
tmp/reliability-02/final-harness-matrix.log. This includes actual approved ordinary/topology reset, preference cleanup, cross-slot workflow and resource isolation, and actor/grant/dataset/state/revision/CRS drift rejection. The three completed boundary controls first passed against the existing implementation in 29.802 s (tmp/reliability-02/final-fixture-boundary-initial.log). Two real 100-slot preparations have equal normalized inventories and distinct generation IDs. These overlapping runs complete harness proof, not browser acceptance. - Latest completed Node collections: 282 application controls plus 11 extension
controls passed (293 total), zero skips, in
tmp/reliability-02/final-node-readiness.log, including the baseline identity and four map-frame readiness contracts. The later registry/reporter/CI negative matrix passed 100 controls (48/34/18); guard/projected-file contracts passed 23. Overlapping run totals are not additive. - Earlier focused runs cover all ten required US2 cases in Chromium.
The final stale/exact-role/multi-role/admin rerun and upload-status companion
passed 5/5 with zero skips/retries in
tmp/reliability-02/us2-rerun.log. Firefox access-switch also passes (28.2 s), recorded intest-results/reliability-02-us4-fixed-01/firefox.log. These are case-level results; the clean default run below supplies complete browser proof. - Retained cache authorization/freshness/migration controls pass 143/143,
zero skips, in 494.082 s (
tmp/reliability-02/retained-cache-integrity.log). Vector/CRS/exchange compatibility passes 33/33, zero skips, in 48.927 s (tmp/reliability-02/ambiguous-crs-metadata-green.log). These are separate, overlapping invariant runs, not additional browser cases. - The remaining named batch passes 64/64, zero skips, in 81.056 s: nine snapping
workflow, eight snapping geometry, eight exchange-view and 39 harness controls.
Evidence is
tmp/reliability-02/final-retained-snapping-harness.log; the separate test database was destroyed afterward. Scoped isort/Black checks for 27 files, Flake8 and diff checks pass after import-only corrections. These overlap earlier controls and do not create additional browser passes. - The earlier full required Firefox selection passes 14/14, zero skips/retries/flakes,
in
test-results/reliability-02-us4-fixed-01/firefox.json. Both precision persistence obligations pass there. This single-project result remains package-incomplete in isolation; attempt 3 also executes Firefox successfully. - The earlier retained Chromium companion run records 53 passes and four basemap failures
out of 57, zero skips/retries, in
test-results/reliability-02-companions-01/chromium.json. All four affected cases subsequently pass intest-results/reliability-02-companions-focused-02/chromium.json, preserving the original failures rather than presenting these runs as one clean pass. All 57 companions and all six new US3 cases also pass in each fresh default Chromium execution. These canonical reports resolve the missing current US3 artifact proof; the early overwritten report remains historical evidence loss, not a current US3 blocker. - Rendered precision performance fails inherited timing budgets, including with baseline precision assets. Real extension/container acceptance remains blocked by the separately documented environment prerequisites. Neither outcome is converted into a pass by browser correctness or lower-layer tests.
See specs/030-critical-browser-journeys/evidence.md for dated commands,
red/green findings and private log paths, and
specs/030-critical-browser-journeys/tasks.md for remaining task scope.
The catalogue marks the fixed 15 golden journeys
COVERED within their documented behavioural boundaries. Broader parcel
authoring remains partial; precision persistence does not waive timing budgets,
and controlled providers do not prove live-provider or real-container acceptance.
Default attempt 1¶
Canonical report:
test-results/reliability-02-final/552825b8ba414ec68dba6c3f1edfad0c/chromium.json.
Chromium executed 86 cases in 29.6 minutes: 83 passed, three timed out,
zero skips/retries/flakes. All retained companions, six new exchange/upload
cases, US4 cases and both strict precision persistence obligations passed.
Firefox did not start after the Chromium failure, so its 14 required cases
remain unexecuted within this attempt, despite the earlier separate Firefox pass.
The timed-out cases were ROLE-EXACT-STAGES, ROLE-MULTI-ACTOR-SEPARATION and
DRAFT-REJECT-CORRECT-CHAIN. Diagnostics identify cumulative test budgets and
repeated roughly 9–10 s independent observations, not a reported failed business
assertion. Their time allowances changed from 180/120/120 s to 360/240/240 s,
respectively. No product behavior, required assertion or precision/performance
threshold was changed. The timeouts remain failures in the retained report;
larger allowances required a clean fresh run and were not passing evidence by
themselves. Attempts 2 and 3 subsequently pass these original assertions.
Default attempt 2¶
Canonical reports are
test-results/reliability-02-final/613f3af2beb4414f89fc6050bec9373d/chromium.json
and test-results/reliability-02-final/613f3af2beb4414f89fc6050bec9373d/firefox.json;
the outer log is tmp/reliability-02/final-default-02.log. Chromium passes
86/86, including all three earlier timeout cases with their original assertions.
Firefox passes 13/14; its PRECISION-PARCEL-APPLY-DRAG-SAVE helper fails before
save/storage verification. All 100 cases execute with zero skips/retries/flakes,
but the guard correctly returns failure for the incomplete passing set.
The retained trace shows a marker layer transform from (296, 494) to (308, 486),
the requested (+12, −8) pixel drag. Smooth document scroll changes from 177 to
175 between reads, shifting the viewport-based comparison by exactly two pixels.
The narrow helper correction compares read-only map.latLngToLayerPoint
displacement in the same map frame instead. It retains genuine pointer input,
the strict less-than-two-pixel displacement bound and strict 0.02 m agreement
between stored and independently observed dragged coordinates. No product code,
geometry assignment or tolerance changes. The failed pre-save attempt does not
prove persisted geometry; subsequent focused verification is recorded separately.
Focused precision recovery¶
The first focused recovery run exposes the same readiness defect before active
split drawing: coordinate projection at document scrollTop 122 precedes a click
at scrollTop 222, outside the now-shifted map edge. Its failure remains under
test-results/reliability-02-final/f66bd932affc45a392a169dac780fa9b/ and
tmp/reliability-02/final-precision-scroll-fix.log.
The shared tests/e2e/fixtures/map-readiness.mjs::mapFrameStable now requires
three unchanged rendered frames of document scroll, container bounds, map center
and zoom, without active map pan/zoom. The existing mapIdle helper reuses this
condition after scrolling/zooming, before pointer projection and before drag.
This is condition-based readiness, not a fixed sleep or geometry assignment.
Four fail-first Node controls pass; their red/green logs are
tmp/reliability-02/map-readiness-red.log and
tmp/reliability-02/map-readiness-green.log.
The subsequent guarded focused run passes two Chromium and two Firefox
precision cases, zero failures/skips/retries/flakes. Canonical reports are
test-results/reliability-02-final/1a9731f42cc34c4789f07396476c371e/chromium.json
and test-results/reliability-02-final/1a9731f42cc34c4789f07396476c371e/firefox.json.
Both surfaces retain the same marker count, actual pointer gesture, strict
less-than-two-pixel map-layer displacement bound and strict 0.02 m agreement
between persisted and independently observed dragged coordinates. This focused
pass does not replace a complete default run. The 80 code/configuration identities
pinned in tmp/reliability-02/final-readiness-code-identities.json remain
unchanged through the subsequent complete default run.
Default attempt 3: complete browser correctness¶
The unfiltered guarded make e2e run uses fresh generation
b74b60018f288fd280e786da00b69f53. All 100 resource and authenticated-readiness
checks pass before browser execution. Canonical evidence remains under
test-results/reliability-02-final/ff9ccce19f5d4ac288f4e14060341f53/:
| Project | Canonical report | Start (UTC) | Duration | Outcome |
|---|---|---|---|---|
| Chromium | test-results/reliability-02-final/ff9ccce19f5d4ac288f4e14060341f53/chromium.json |
2026-09-07 23:53:10.046 | 1,083,701.976 ms (18.1 min) | 86 passed |
| Firefox | test-results/reliability-02-final/ff9ccce19f5d4ac288f4e14060341f53/firefox.json |
2026-09-08 00:11:16.568 | 515,922.942 ms (8.6 min) | 14 passed |
Each required case passes once at retry index zero. The combined 100 unique
scenario/project/retry identities exactly match the mandatory registry, with no
failures, expected failures, skips, retries, flakes or unexecuted cases. All 80
pinned identities remain unchanged. Per-project logs are adjacent to the JSON;
matching private HTML reports are under
playwright-report/reliability-02-final/ff9ccce19f5d4ac288f4e14060341f53/.
The outer log is tmp/reliability-02/final-default-03.log. The guard exits zero,
stops its owned server and releases port 8010.
This proves the fixed golden/subcase set, both precision persistence obligations
in both browsers and all retained companions. It does not turn the failed
precision timing assessment or blocked real-extension/container check into a
pass. The explicit 2026-09-08 owner deferral makes performance follow-up
non-blocking for Package 2 publication, not a performance-readiness approval.
T049 remains unchecked and OWNER-DEFERRED. Preserve failed raw measurements and
unchanged budgets; the bounded mitigation is handle/label/active-line Apply
investigation followed by matched Chromium/Firefox measurements and actual
pointer/save/reload validation. The project owner controls scheduling and
acceptance; no remediation deadline is agreed. See the complete owner disposition
in specs/030-critical-browser-journeys/evidence.md.
Guarded profiles and fixture policy¶
Use the disposable environment described in .env.e2e.example and
specs/030-critical-browser-journeys/quickstart.md:
make e2e
make e2e E2E_PROFILE=chromium
make e2e E2E_PROFILE=firefox
The default runs both required projects. Before migration or fixture writes, the guard compares explicit expected database name/host/port with configured and read-only server identity, requires PostGIS, DEBUG and caller-provided fixture opt-in, rejects unrelated occupied origins and checks browser availability. Preparation emits private per-scenario/project/retry resources. Actual-resource preflight and authenticated generation readiness precede browser execution on the owned server. The guard does not attach to an arbitrary existing server.
E2E_GREP supports focused guarded iterations, which report partial evidence.
Required skips, fixme, expected failures, missing identities/projects and
unexecuted cases fail regardless of legacy numeric budgets. Every attempt and
retry stays visible; a later retry pass does not erase flakiness. --list
proves collection only. Cookies, localStorage, actor profiles, grants, geometry
and files cannot be borrowed from another scenario, browser or retry slot.
The registry currently contains no optional scenarios.
make e2e E2E_PROFILE=optional therefore refuses before setup. Every retained
companion is mandatory, including provider/page checks. Missing business fixtures,
browser binaries or authorization are failures/blockers, never optional reasons.
A future external optional check must have its own documented registry reason,
prerequisites and separate outcome; it cannot satisfy a mandatory evidence ID.
Controlled resources and external acceptance¶
tests/e2e/fixtures/controlled-map-resources.mjs::controlledMapResources, shared
by the scenario fixture and rendered performance runner, supplies test-only
catalog configuration, raster responses, background-only MapLibre styles and the
MapTiler logo. These styles have no font, glyph, sprite or external source
dependencies. Page-level rejection routes can override the controlled provider
response to exercise fallback. This infrastructure is implemented; its presence
alone is not execution proof. The focused four-case basemap recovery report
above now supplies actual controlled-provider passes, including a real native
MapLibre error reaching visible fallback while preserving the requested provider.
Two owning native-event regressions failed before the lifecycle binding fix;
36 related Node controls then passed. These results still do not prove a live
external provider or a clean full mandatory run.
Actual provider credentials, paid services and live network availability are not prerequisites for the mandatory basemap checks. Real Firefox extension/container acceptance is different from launcher page/Node checks: it needs a visible supported Firefox environment, the actual extension and an authorized short-lived managed-demo ticket. Follow demo environment acceptance testing and the launcher runbook. Keep any concrete environment blocker and owner-run procedure separate from page-profile results. The current real-container checkpoint is explicitly blocked: no authorized managed HTTPS demo and short-lived ticket were supplied, and the system Firefox probe emitted Snap namespace diagnostics. A display is configured; lack of a display is not the asserted blocker.
Rendered performance checkpoint¶
Actual rendered measurements completed with 500 visible logical vertices, five warm-ups and 30 measured samples per operation in Chromium and Firefox. Several Apply/handle operations exceed the inherited 100 ms p95 budget. The current run, matched repeat and baseline precision-asset run all fail; the baseline substitutes only the precision core/adapter assets, not the full application. This establishes an existing absolute-budget failure, not a waiver or proof that every timing difference is harmless.
The complete operation table, raw report paths and qualifications remain in
specs/030-critical-browser-journeys/evidence.md. The workload has five full
coordinate labels and 495 collision fallback dots, not 500 legible text labels.
Active-line handle timing measures the actual temporary-marker update/redraw,
not a handle rebuild. The separate 500-shape overlap-error clearing diagnostic
passes its 250 ms bound in both browsers; it does not establish the inherited
10,000-parcel advisory/decision workload. Required performance acceptance remains
unresolved independently of the final correctness run.
Reports and CI¶
The configured CI job installs Chromium and Firefox, supplies explicit disposable
database identity and opt-in, and runs the same default make e2e. The
lint → e2e → Django order, both Node collections and existing correctness/cost
controls remain in place. Configuration/collection tests pass; this is not a
claim of a successful remote CI or full browser run.
The owned guard retains migration/setup/server logs, first-failure traces and
separate JSON/HTML project results under the private run directory. For
coordinated direct diagnostics use PLAYWRIGHT_JSON_OUTPUT_NAME and
PLAYWRIGHT_HTML_OUTPUT_DIR with unique paths. E2E_JSON_REPORT and
E2E_HTML_REPORT are not supported settings and do not protect a default report
from a later overwrite. Raw authenticated reports, sessions, manifests and
generated files remain ignored/private; never publish session-bearing fixtures.
CI artifact exclusions are verified independently of browser outcomes.
Visible Windows browser with Django in WSL2¶
The earlier Windows workaround used a separate ignored
.windowstmp/windows-e2e checkout to avoid mixing Windows and Linux
node_modules. Its manual migration, forced fixture opt-in and direct session
copying sequence predates the feature-030 guard/manifest/observer contract and is
not the current guarded acceptance procedure. Do not reuse it to bypass target
verification or attach an unverified server.
Use the WSL guarded runner for current automated profiles. A native Windows diagnostic route needs an explicitly verified server lifecycle and compatible private manifest/observer paths before use; none is asserted validated here. For the distinct visible Firefox extension workflow, use the linked launcher runbook rather than treating a headed page test as container acceptance.
Historical coverage snapshot and skip inventory¶
The disposable run on 22 July 2026 reported 26 passed, 14 skipped, zero failed. The older 41-test discovery baseline and ceilings of 14 or 15 skips belong to previous configurations. They are not the current 86/14 identity contract or permission for any mandatory skip.
| Historical skipped area | Count | Former missing dependency | Current disposition |
|---|---|---|---|
| Centralized basemap inheritance | 2 | Provider keys, secondary paths and rejection URL | Mandatory controlled-resource companions; focused recovery and the complete default run pass. |
| Draft editing exchange | 3 | Eligible actor-visible draft | Mandatory companions with independent draft slots; not optional. |
| MapTiler provider | 2 | Enabled provider configuration | Mandatory controlled styles/logo and native-error fallback; focused recovery and the complete default run pass. |
| Parcel overlap governance | 1 | Known conflicting geometry | Mandatory companion with owned geometry; not optional. |
| Split and merge topology | 3 | Independent split/merge/corner sources | Mandatory companions with per-case source slots; not optional. |
| Upload draft workflow | 3 | Preview/status/result and denied route | Mandatory companions with private files and rows; status route/reset regressions pass. |
Every original test locator, mutator, fixture dependency and skip condition is
inventoried in tests/e2e/fixtures/scenarios.json. The preserved skip statements
are not accepted evidence: missing slot prerequisites fail setup, and any
resulting required skip fails the reporter.
Completion criteria¶
- Preserve the completed fixture-reset/preflight negative boundaries, double-preparation, mutation-isolation and unowned sentinel proof on subsequent harness changes; the latest 39-test matrix passes.
- Retain artifact-backed controlled-provider and business-journey execution, including every recovery subcase and both precision cases in declared browsers.
- Run final default guarded
make e2ewith all 86 Chromium and 14 Firefox identities executed, zero failures and zero skips; inspect all retries/flakes. - Validate inherited rendered performance at its specified workloads, not from compact correctness fixtures or mocked timing.
- Record actual real-container acceptance or its precise separate blocker, and complete owner-controlled review/publication gates without overstating results.