Original lab · Engine-derived evidence

26 adversarial redirect-map scenarios, measured against the real migration engine

Exact and prefix moves, ambiguous candidates, collisions, chains, loops, query loss, case and slash behavior, excluded URLs, missing destinations, cross-domain handoffs, unsafe config bytes, adapter semantics and rollback gaps are tested as separate decisions.

Publisher and review: FastTool product engineering · the engine-backed fixture matrix was rechecked against exact hashes on 2026-07-27.

Worked synthetic benchmark; not a live result. Twenty-four scenarios run through the checked-in Website Migration Evidence Compiler renderer in local Chromium. Two rollback scenarios are honest capability checks and remain INDETERMINATE. No crawl, deployment, ranking, traffic or account claim is made.

Measured result for this exact engine and fixture

26explicit scenarios
24 / 24engine assertions passed
2rollback boundaries INDETERMINATE
0benchmark blockers
Provenance lock

Engine SHA-256

d15ecb8b4a8363d7e4e27d0b887764ddb2fc710365fbac09164e27367e9456d8

Fixture SHA-256

b6119f07bea5376a009f57eac48826f0472cd8d5dda637c1abc82a8d1c71aa17
Bar chart showing passing migration benchmark assertions by risk category
Coverage is grouped by decision surface. Teal means the scenario's explicit assertion passed; it does not mean a production migration is safe.

Method: engine output, not editorial arithmetic

  1. Build each case from reserved .test URLs plus four stable exact-path controls.
  2. Enter old inventory, status-aware new inventory and manual overrides through the real browser renderer UI.
  3. Read the generated machine receipt and redirect ledger; compare actual decision, risk codes, deployable rows and warnings with the fixture assertion.
  4. Recompute SHA-256 for all ten per-run artifacts, verify the receipt core, and prove review-only rows do not leak into the Cloudflare deployment adapter.
  5. For the 308 case, prove the status-aware adapter keeps 308 while the Webflow 301-only export excludes it.
  6. Report unsupported rollback evidence as INDETERMINATE; never manufacture a PASS finding.
node scripts/test_website_migration_benchmark_20260717.js

All 26 scenarios and measured decisions

READY means only that the current browser policy admitted the fixture rows to staged QA. REVIEW means at least one row was withheld. INDETERMINATE means the required evidence is outside the current engine contract.

#ScenarioSurfaceActual decisionEngine evidenceAssertion
01Exact one-to-one pathsMappingREADY4 deployable; 0 reviewPASS
02Prefix directory move is not assumedMappingREVIEWmedium_confidence_reviewPASS
03Two near-tie destinationsAmbiguityREVIEWcandidate_collisionPASS
04Two sources compete for one targetCollisionREVIEWduplicate_target; target_already_assignedPASS
05Manual many-to-one collisionCollisionREVIEWduplicate_targetPASS
06Two-hop redirect chainGraphREVIEWredirect_chainPASS
07Closed redirect loopGraphREVIEWredirect_loopPASS
08Meaningful query key is lostQueryREVIEWquery_parameter_lossPASS
09Preserved query still needs policy reviewQueryREVIEWquery_specific_redirect_reviewPASS
10Tracking parameter removed only for matchingQueryREVIEWNo false meaningful-query-loss findingPASS
11Path case changeNormalizationREVIEWmedium_confidence_reviewPASS
12Exact trailing slash is preservedNormalizationREADYExact source and target bytes remain in adapterPASS
13Double slash remains visible and blockedNormalizationREVIEWunsupported_double_slash_pathPASS
14Removed URL gets no fabricated destinationCoverageREVIEWorphan_sourcePASS
15Override source excluded from inventoryCoverageREADY + warningOverride ignored; baseline rows remain readyPASS
16No destination candidateCoverageREVIEWorphan_sourcePASS
17Unexpected cross-domain handoffOriginREVIEWunexpected_cross_domain_targetPASS
18Manual target absent from new inventoryCoverageREVIEWtarget_not_in_new_inventoryPASS
19Target crawl row is another redirectRuntime evidenceREVIEWtarget_redirect_statusPASS
20Target crawl row is an HTTP errorRuntime evidenceREVIEWtarget_http_error_statusPASS
21Invalid override status is rejectedInput validationREADY + warningInvalid 200 override ignored; exact row rematchedPASS
22Tracking-only source variants make override ambiguousAmbiguityREVIEWNormalization warning + collision risksPASS
23Server-config metacharactersSecurityREVIEWunsupported_config_metacharacterPASS
24308 kept in status-aware exports, excluded from WebflowAdapterREADY + warningWebflow exclusion count = 1PASS
25No previous redirect configuration suppliedRollbackINDETERMINATENo rollback-baseline input in engine contractPASS boundary
26No rollback artifact generatedRollbackINDETERMINATERunbook requests external retention; packet cannot hash itPASS boundary

What this benchmark changes in a real migration review

Similarity never silently resolves uncertainty

Prefix changes, case changes and near ties are held for review. Exact syntax is not treated as proof of content equivalence.

Warnings are part of the decision

An invalid or excluded override can be ignored while other rows remain READY. The operator must review parser warnings; a top-level ready state is not permission to discard them.

Deployment adapters are narrower than the ledger

Only admitted rows enter adapters. Webflow excludes 308 because its import is 301-only; the status-aware outputs retain 308.

Rollback remains a blocker outside this packet

The engine tells the operator to retain the previous configuration but does not ingest or hash it. Release approval therefore needs a separate rollback artifact.

Downloadable evidence and exact SHA-256

Use the receipt to recompute the core hash, then recompute each downloaded artifact. Hash parity proves byte equality only; it does not prove source authority or production behavior.

Machine results

Download JSONf5d0f4185f1b490d846f7cdf86841f20ef1422b3d8cdd2d0a05cb41b43088731

Formula-safe scenario ledger

Download CSV778e3db7aaea79c22d55a73ee95a6c707fa494b34f6c7e8a044269df952b9f54

Reproduction methodology

Download Markdown3a76bc308ccd98327020225984ea6dd5ed2f0911f46b4a02104213cffab43fc4

Coverage visual

Download SVGd1d49c86da284dfba39be1a91bc084447f0e01ca422107077a647c99efbe41ce

Hash-backed benchmark receipt

Download receipt JSON98eb5297d757ae721625514eb6de4d03c10257f10ac55a3a29a4f43e9c9be619

Receipt-core SHA-256

86cbe063adcbdec980bef48ea469e768b80108d9439c6d909faddcd9b882a0ed

Limits, privacy and release boundary

What this proves

  • The 24 engine assertions passed for the exact renderer and fixture hashes shown above.
  • Every generated per-run artifact matched its advertised SHA-256.
  • Every receipt core verified and review-only rows stayed out of the Cloudflare adapter.

What this does not prove

  • No live crawl, server syntax check, CDN priority check, link update, canonical audit, ranking preservation or traffic guarantee.
  • No content-owner equivalence decision, authenticated URL handling, server-log truth or Search Console state.
  • No rollback coverage until the prior configuration and restore procedure are captured and hashed separately.

Privacy: all benchmark URLs use reserved .test domains. The harness serves local files to a local browser. Do not replace fixtures with credentials, customer identifiers, preview tokens or authenticated URLs.

Primary sources

Corrections and reproducibility

FastTool is responsible for this benchmark. Report a stale hash, unsupported claim, fixture defect or engine/ledger mismatch to contact@fasttool.app. Include the scenario ID, exact statement, reproduction output and proposed correction.

Benchmark fixture: website-migration-benchmark-20260717 · Engine version: 20260709a · Local QA result: 26/26 assertions passed, blocker 0.