Agenten können einen Seitenindex unter https://migrateforge.com/llms.txt lesen oder jede Seite mit Accept: text/markdown anfordern.

Nachweis

Nachweis

Bisher nachgewiesen: vier migrierte Wellen (858 verifizierte Reisen bei 100/100/100-Parität) über zwei PHP-Apps — eine produktive Multi-Tenant-SaaS und das Open-Source-InvoicePlane — jeder Datenschreibvorgang verifiziert.

The sentence above is the published parity record: four migrated waves, 858 verified journeys at 100/100/100 parity (fixture, de-duplicated, and route-weighted), and write-effect differences of 0. The free reports below are the size, risk, and price measurements. A free report is not a parity result, and it contains no source code.

Both are benchmarks, not client projects. We’re taking our first client engagements now. wa-blast-pro is our own production multi-tenant SaaS; InvoicePlane is open source.

Sanitized wave scorecards (no application source) are on GitHub: github.com/Kuttyshal/migrateforge-benchmarks. This page remains the canonical public record.

Parity

Each bar is 100 on all three measures. The count is fixtures that matched. Coverage is how much of the capture those fixtures represent.

  • WA Blast Pro wave 1 100% · 193/193
  • WA Blast Pro wave 2 100% · 379/379
  • InvoicePlane wave 1 100% · 133/133
  • InvoicePlane wave 2 100% · 153/153

What the engine did on its own

Parity numbers are the finished result. This is the honest middle.

On InvoicePlane wave 2 — 49 units, 1,667 lines of PHP across six CRUD modules — the first full three-way comparison, once the generated application would start, matched 82% of distinct journeys. Hand fixes took it to 100%, at 9.7 fixes per 1,000 lines of PHP.

Most of those fixes were not page-specific. Redirect behaviour, validation messages, model pagination and form values went into the CodeIgniter layer, so the next CodeIgniter application starts with them already solved. That is how the rate comes down.

We publish this because a 100% parity figure on its own tells you nothing about how much work it took to get there.

Coverage of the capture

Unscored fixtures were left out of the match. Where the cause is recorded, they are legacy PHP 500 responses from the PHP application. They are not target Java regressions.

  • WA Blast Pro wave 1 193/194
  • WA Blast Pro wave 2 379/380
  • InvoicePlane wave 1 134/138
  • InvoicePlane wave 2 153/153

InvoicePlane wave 1 matched fixtures are 133/133 (compared journeys that entered the parity match). Coverage of the capture is 134/138 — a different denominator that includes fixtures scored for capture coverage, not only those compared for match. Both figures are correct.

WA Blast Pro, lines generated

Non-blank, non-comment lines. InvoicePlane’s Java line count is not on this chart.

  • WA Blast Pro wave 1 · PHP 3,591
  • WA Blast Pro wave 1 · Java 8,503
  • WA Blast Pro wave 2 · PHP 6,500
  • WA Blast Pro wave 2 · Java 16,728

Verified at the gate

Automated gate criteria enforced prior to wave sign-off. Defect verification records are generated during the paid Assessment.

  • Write-effect differences 0
  • Auth and CSRF sweeps Ran
  • HIGH quality findings 0
  • Q07 CI3 conformance fixtures 83/83

Q07 is the CodeIgniter 3 adapter conformance suite (not one of the four application migration waves). Fixture, de-duplicated, and route-weighted parity were each 100 on 83/83 fixtures.

wa-blast-pro

This is the production multi-tenant SaaS in the record above. The free report measured it as plain PHP.

Confirmed

  • It is a production, multi-tenant PHP application.
  • It is one of the two applications in the four migrated waves (858 verified journeys at 100/100/100 parity).
  • Those waves reached 100/100/100 parity, and every data write was verified.

Read the free report

wa-blast-pro

Free report · 12 November 2026. Plain PHP. The report did not detect a PHP version.

Regenerated 12 November 2026 after an analyzer improvement to route and dependency detection.

PHP files
178
PHP lines
26,438
Routes
134
Database tables
55

Size band: medium (20k–100k PHP lines). PHP end of life: no. Complexity: HIGH.

Risks the analyzer counted

Counts are static-analysis signals from the source, not an exhaustive inventory. The paid Assessment verifies them against the running application.

  • external APIs 65
  • dynamic includes 64
  • session / auth patterns 33
  • raw SQL / database logic 178
  • cron / sleep-in-loop 13

Indicative wave plan

  1. Wave 1: 150 units, 2,086 PHP lines
  2. Wave 2: 150 units, 3,417 PHP lines
  3. Wave 3: 111 units, 7,814 PHP lines
  4. Wave 4: 66 units, 7,703 PHP lines
  5. Wave 5: 89 units, 7,792 PHP lines
  6. Wave 6: 22 units, 2,000 PHP lines

Waves follow the engine default: at most 150 units or 8,000 PHP lines, leaves first. A paid Assessment can reorder them. This plan is not the list of waves already migrated.

Indicative price range

Same India bands as the pricing page. This report is medium and HIGH, so Assessment uses the upper half of the medium band.

Assessment
₹2.5–3.5 lakh
$3,000–$4,200
Migration
₹6.9–8.5 lakh
$8.2k–$10.0k
Per 1,000 PHP lines
₹20,000–₹32,000
$240–$380

InvoicePlane

InvoicePlane is the open-source invoicing application used as a public benchmark. Waves 1 and 2 reached 100% parity. The free report measured CodeIgniter 3.4.0.

Read the free report

InvoicePlane

Free report · 12 November 2026. CodeIgniter 3.4.0. The report did not detect a PHP version.

Regenerated 12 November 2026 after an analyzer improvement to route and dependency detection.

PHP files
391
PHP lines
55,136
Routes
142
Database tables
41

Size band: medium (20k–100k PHP lines). PHP end of life: no. Complexity: HIGH.

Risks the analyzer counted

Counts are static-analysis signals from the source, not an exhaustive inventory. The paid Assessment verifies them against the running application.

  • eval / dynamic variables 10
  • cron / sleep-in-loop 3
  • session / auth patterns 12
  • magic method 3
  • file uploads 9
  • external APIs 16
  • raw SQL / database logic 77
  • dynamic includes 21

Indicative wave plan

  1. Wave 1: 150 units, 7,908 PHP lines
  2. Wave 2: 70 units, 7,973 PHP lines
  3. Wave 3: 150 units, 4,812 PHP lines
  4. Wave 4: 75 units, 7,815 PHP lines
  5. Wave 5: 38 units, 7,776 PHP lines
  6. Wave 6: 53 units, 7,765 PHP lines
  7. Wave 7: 54 units, 7,775 PHP lines
  8. Wave 8: 72 units, 7,966 PHP lines
  9. Wave 9: 45 units, 7,877 PHP lines
  10. Wave 10: 54 units, 6,315 PHP lines

Waves follow the engine default: at most 150 units or 8,000 PHP lines, leaves first. A paid Assessment can reorder them. This plan is not the list of waves already migrated.

Indicative price range

Same India bands as the pricing page. This report is medium and HIGH, so Assessment uses the upper half of the medium band.

Assessment
₹2.5–3.5 lakh
$3,000–$4,200
Migration
₹14.3–17.6 lakh
$17.1k–$21.0k
Per 1,000 PHP lines
₹20,000–₹32,000
$240–$380

Open Benchmarks

  • Wave scorecards for the four migrated baseline waves (and Q07 CI3 conformance) are published on GitHub. Each free report’s ten-wave plan is indicative. It is not the migrated set.
  • Any InvoicePlane wave after wave 2. Not published yet
  • The dates of the migrated waves, and the defect list. Not published yet

What the checker caught

Seeded mutation catch rate on plant sites (T02). Excluded rate = caught / (caught + missed) after dropping EQUIVALENT and operator NOT_APPLICABLE. Seed key 1:86222b7f2fc5386b2d18fdd3e41da06b54b6e89b (engine image 86222b7).

Deterministic plant sites. Earlier, higher figures used randomised sites and are withdrawn.

Seeded catch rates for WA Blast Pro wave 1 and InvoicePlane wave 1
Wave Excluded rate Caught / missed Raw
WA Blast Pro wave 1 57.14% 24/42 53.33% (24/45)
InvoicePlane wave 1 35.89% 14/39 33.33% (14/42)

Five critical categories (seeded)

Per-category seeded catch rates
Category WA Blast Pro wave 1 InvoicePlane wave 1
Lost writes (SKIP_SIDE_EFFECT) 100% (3/3) 100% (1/1)
Outgoing calls (OUTBOUND_PAYLOAD) 100% (2/2) not 100% — NOT_REACHED
Escaping (MISSING_ESCAPE) not 100% (2/3) not 100% (2/3)
HTTP status 100% (3/3) not 100% (2/3)
Access control (AUTH / CSRF / TENANT) not 100% of reached (AUTH 0/3, CSRF 2/2, TENANT NOT_REACHED) not 100% (AUTH 2/3, CSRF 0/3, TENANT 0/2)

The checker’s job is to fail a wave when responses, database writes, or outgoing API calls differ. That failure is what blocks cutover. The free reports count risky constructs. They do not name those defects. Full scorecards also live on GitHub.

How we test the checker

We test the checker by planting bugs on deterministic sites (seed above). A known mismatch must fail the gate, and a known match must pass, before the checker is allowed to block a wave.

Starten Sie mit einem kostenlosen Migrationsbericht.

Oder schreiben Sie uns, um einen Termin zu buchen, wenn Sie die PHP-Anwendung lieber zuerst besprechen möchten.