GitLab Duo · Supervised recovery

A retry should return
the original receipt.

Checking the before-and-after receipt evidence…

For mobile teams supporting older apps and offline purchases.

Before and after Duo’s repair · same retry

One retry. A different order.

Both client suites passed on both sources. The recovery probe caught what those tests missed.

  1. Purchase accepted
  2. Acknowledgment lost
  3. Migration & rollback
  4. Same operation retried

Loading the receipt observations…

Separate local runs of the saved sources. Receipt identities are compared within each run. All orders are synthetic; no payments occurred.

Follow the GitLab repair →

Public GitLab execution · 27 October 2026

Duo repairs. Independent checks decide. The owner merges.

Loading the source-bound evidence…

The repair branch cannot change the independently pinned checks. The approval job requires the allowlisted owner.

  1. A migration broke an accepted purchase’s retry identity.

    Both client suites passed. First activation of the seeded backend changed the receipt returned after rollback. The independent recovery gate blocked it.

    Inspect the failed gate →
  2. Duo repaired one backend file.

    In api/orders.py on the existing branch, Duo preserved account-scoped purchase identities and made the migration atomic. The newer feature stayed intact.

  3. The same fixed checks passed.

    Loading the matching pipeline…

    Inspect the repaired commit's CI →
  4. Challenge the evidence.

    Check a separately dated semantic sample, then remove a fulfillment. Recomputing its hash must not hide that contradiction.

    Try the evidence check →Download all six public cases →
  5. The owner approved and merged.

    Loading the separately verified human decision…

    Inspect the combined report →

    Guardian protects accepted purchases. The owner controls the release decision.

Six scenarios: five verified repairs and a safe refusal

Five controlled faults ended with all eleven recovery and two HTTP requirements passing, alongside the client and backend tests. Only the principal repair above was approved and merged.

Inspect every source, flow and outcome →
Two Duo proposals were blocked before rollback passed

The first proposal still lost older accepted receipts. The second preserved them, but could not complete recovery after intentional key retirement. The unchanged gate rejected both. A third reviewed repair completed and passed all thirteen requirements.

This is a separate rollback evaluation. Its passing repair remains unapproved and unmerged; it is not covered by the principal approval above.

When identity is missing, leave the release blocked

A declared older client supplies no stable operation identifier. A retry and another intentional purchase can look identical. Duo's read-only assessment recommended no safe backend repair; the branch stayed unchanged.

Inspect the unchanged branch and assessment →

Client 0.9 is a declared profile, not an executable native fixture. The retained model answer also misread an expected self-test message; its verification note corrects that explanation. Signed origin passed. Missing identity is the actual blocker.

Evidence, scope and dated history

Approval belongs to the checked candidate, not its later merge commit. Evaluation repairs have separate human gates. Repository and policy administrators retain control of the enforcement configuration.

The local replay and semantic sample are separate observations. The public evidence verifier checks retained consistency; it does not independently authenticate archived GitLab signatures offline.

Public evidence ZIP · Python-only verifier

Reproduce locally No GitLab credits

From the project source or portable review archive, use installed Python 3.10+ and Bash:

bash scripts/guardian.sh

Open http://127.0.0.1:8790. The receipt check above executes the exact public source pair with Python and fresh temporary databases. The broader Swift experiments under Explore additionally require Swift 6 and loopback/process permission.

Verify the downloaded public evidence ZIP with Python only:

python3 scripts/verify-public-evidence.py guardian-public-evidence.zip

Expected ZIP SHA-256:
Evidence identity loading…

The complete application source and current scenario evidence are public. Download the evidence ZIP and Python-only verifier below to check the retained identities and outcomes without credentials. The repaired backend is separate from this review service.

Use this pattern for a mobile team
  1. Freeze the requests and persisted retry identities of the app versions you support.
  2. Connect an independent CI policy to your backend and migration adapter. Pin the checks and human approvers outside the repair branch.
  3. Give Duo the failed source and gate evidence. Re-check its exact commit before the owner decides.

The included adapter targets this synthetic Python/SQLite API. Another service needs its own schema, startup, migration and rollback integration; changing three settings is not sufficient.

Integration and trust requirements →
What the local evaluation found Declared cases and retained misses

Two safe controls passed. Two boundary faults escaped the existing gate; separate new HTTP checks detected them. Other incomplete recovery attempts remain visible. This dated scorecard retains its original local results. The later header-fault Duo trial has separate evidence above.