# Benchmark Travel — final preservation audit

**Verdict: authorised capture and validation completed, with documented gaps. Suitable as an evidence base for replacement planning and estimation. Not a complete functioning clone or certification of external/backend services.**

Scope: the approved 229-URL manifest (228 sitemap URLs plus the linked enquiry form), required same-site assets and external references only. No further live scraping or submissions were performed during this final review. Review performed by the primary agent; no separate-agent or human certification is claimed for this final stage.

## Verified outcomes

| Area | Result | Evidence |
|---|---|---|
| Approved inventory | All 229 URLs accounted for; 227 preserved source pages, two retained HTTP 403 gaps | PAGE-REGISTER.csv; FINAL-RECONCILIATION.json |
| Original evidence integrity | 1,362 blobs, 1,447 HTTP responses, 219 new source bundles, 1,223 asset bundles and 227 original render bundles pass | FULL-FINAL-INTEGRITY-2026-10-23.json |
| Reused pilot | Eight reused sources revalidated by source indexing; 130 historical pilot hashes and 18 PNGs pass | FINAL-PILOT-INTEGRITY.txt; capture_full.index.sources |
| Supplementary rendering | 227 pages selected from 229 valid supplementary bundles; original renders remain unchanged | runs/full-2026-10-23/render-review; FINAL-RECONCILIATION.json |
| Text and fields | Source hashes, heading multiplicities, source main-text token order, and original form field/option preservation pass for all 227 available pages | FINAL-RECONCILIATION.json |
| Empty main region | `/exclusive` has no extracted main-region text in source or render; full-document text previously matched and visual review shows a hero/footer page | Original browser checks; FINAL-GAPS.json |
| Panels | 373 non-empty panel/disclosure comparisons pass; 74 remaining panels are empty in saved source, not lost in capture | FINAL-RECONCILIATION.json |
| Sampled actions | 453 tab/disclosure actions and six conditional select actions exercised; no submissions | Supplementary interactions.json files |
| Images | 1,152 image URLs map to 1,067 unique saved bodies; every body passes image-format verification | IMAGE-REGISTER.csv; IMAGE-INTEGRITY.json |
| Replay dependencies | No missing same-site request dependencies in the supplementary browser pass | FINAL-RECONCILIATION.json |
| Software checks | 47 tests pass with browser/network permissions; regression cases cover isolation and comparison semantics | FINAL-TEST-RESULTS-NETWORK-PERMITTED.txt |

Text reconciliation explicitly decodes source email placeholders and permits additional generated UI tokens while requiring every source token in order. Form comparison permits added placeholder options but requires all original field attributes (except runtime values) and options in order, including duplicate-field multiplicity. This closes the earlier comparison flags without deleting or rewriting the original strict results. It is not a semantic claim that arbitrary text differences are acceptable.

## Rendering diagnosis and qualification

The original offline render excluded Google Maps under the approved external-reference-only policy. On affected pages, `Drupal.behaviors.getlocations` threw `google is not defined` during DOM readiness and prevented later initialization. The original screenshots therefore showed stacked carousels and unsuccessful panel states. This was reproduced on the retained Walking Amalfi Coast source; the error stack points to getlocations/icons.js, getlocations.js and Drupal.attachBehaviors.

The supplementary `map-isolated-v1` profile disables that one behaviour at DOMContentLoaded, leaving all source HTML, JavaScript, CSS, assets and original screenshots untouched. It uses retained bytes only, blocks external traffic and submissions, and records the adjustment in every source-provenance.json. It does not mock Google Maps or certify map functionality. No JavaScript errors remain in the supplementary pass.

The state screenshot method was also changed from a potentially zero-height positioned parent element to a full-page screenshot. This avoids recording a screenshot timeout as proof of failed interaction. Every non-empty source panel now matches the exercised state text. Supplementary screenshots are useful layout references, but not unqualified live-browser equivalents.

## Visual review actually performed

Reviewed desktop overview contact sheets covering all 227 supplementary pages and full-page scaled mobile contact sheets for the 14 sampled body-class families. Also inspected the full-size Walking Amalfi Coast desktop view. The sheets and their exact source indexes are in `visual/`. Overview crops cover the upper 1,600 pixels; this is a gross-layout review, not pixel-by-pixel inspection of every full-height screenshot. Full screenshots and per-state evidence remain available through ARCHIVE-INDEX.md.

The overview review confirms headers, branding, imagery, page text and representative forms/listings are visible, and formerly stacked carousels initialize in the supplementary profile. Some desktop captures include the newsletter popup; where dismissed, a separate unobscured.png is retained. Do not infer that a popup-obscured screenshot means underlying content was lost.

Retain these observed layout limits: 18 recorded horizontal-overflow flags (17 destination pages and the offers mobile sample); a fixed header overlaps the top of the standalone desktop enquiry form; excluded map/frame regions can be blank or show a blocked-frame indicator. Mobile samples capture the state after the sampled controls, not every possible initial/expanded state. These are recorded for replacement QA, not silently repaired in the legacy evidence.

## Remaining gaps and decisions

- `/tour/western-usa-road-trip`: HTTP 403, accepted-for-now content gap by the user. No retry performed.
- `/tour/land-khachqars`: HTTP 403; content unavailable. An owner export or a separate owner-side resolution is needed if this page must be migrated.
- `/sites/all/themes/travel/images/star.gif`: HTTP 404; the response is retained. Other saved star assets do not silently substitute for this URL.
- `/destinations-show`: three image elements point to external benchmarktravelclub.co.uk and olympia.london resources. Their references are saved; bodies were excluded by the approved policy.
- 74 empty source panels, the empty `/exclusive` main region, placeholder text on the Nicholas E. Wakeland testimonial, and “page updating” wording on holiday-destinations are editorial inputs for migration. They are not permission to invent content.
- 80 unique external reference URLs, including publications/integrations, remain references. Forms, mail/newsletter delivery, bookings, backend search results, analytics, chat, maps, all device breakpoints and exhaustive option combinations are not certified.
- 405 out-of-scope same-site navigation strings were recorded, not crawled or asserted to be 405 additional pages. Further URL or external-publication capture requires an explicit scope decision.

FINAL-GAPS.json lists 42 page rows with one or more recorded limitations; this is not a count of failed captures. The global missing asset and untested services above also remain explicit. No pending authorised capture worker or unexplained inventory omission remains. These boundaries prevent claiming `archive_complete=true`, but do not prevent using the preserved evidence and gap register for planning.

## Handover

- ARCHIVE-INDEX.md: human-readable links to each page's source, original screenshot, supplementary screenshot and mobile sample.
- PAGE-REGISTER.csv: inventory-to-evidence mapping.
- IMAGE-REGISTER.csv and IMAGE-INTEGRITY.json: image migration/provenance and integrity.
- FINAL-RECONCILIATION.json: per-page checks, state outcomes, images, dependency outcomes and viewport flags.
- FINAL-GAPS.json: page-level limitations and source editorial issues.
- REBUILD-INPUTS.md: provisional content-model/template groups and functionality work packages for the replacement estimate.
- INTERRUPTED-ATTEMPTS.json: retained incomplete attempts, explicitly excluded from successful evidence.

Original acquisition evidence remains append-only. The incomplete attempts are retained for auditability and are not counted as completed pages. Development scratch files under /tmp and installed dependencies under /workspace/scratch are not archive deliverables. GitHub durability is established by the final verified push reported in the chat.
