Inspiration

When a service closes, an export is useful only if people can keep working with it. The Last Release turns that final handover into a software will: clear promises about what survives, backed by checks before retirement.

What it does

The project is a small notebook that produces a private, self-contained HTML edition for each account. People can read, search, create, edit and delete their notes without a running notebook backend. A JSON backup carries new changes into a fresh reader.

The public demo contains only an empty reader and synthetic sample data. Offline edits stay in memory until a backup is downloaded; private editions and backups are unencrypted.

How we built it

The live notebook uses Python’s standard library and SQLite. A shared HTML, CSS and JavaScript interface serves both the live notebook and the portable edition.

Independent contracts compare exports against an exact database snapshot and reject foreign, altered, missing or deleted notes. Playwright tests use Chromium and Firefox, stop a disposable backend, disable networking, and exercise editing, search, backup and restore. A pinned gate binds approval to the exact source, software will, snapshot and artifacts.

GitLab Duo’s native Developer 3.0.0 flow repaired a deliberately broken synthetic exporter. It read the issue and constraints, restored the account filter, ran the checks and pinned rehearsal, committed the repair, and updated the same merge request. GitLab CI/CD verified the repair; GitLab Pages hosts the public reader.

Challenges we ran into

One missing ownership predicate could expose another account’s notes. The deliberate fault demonstrated that the independent checks block this failure.

The first native Duo attempt failed during executor setup, before any repair. After correcting the execution environment, the second and final attempt succeeded. The workflow keeps a two-attempt ceiling and retains the real failure evidence.

Accomplishments that we’re proud of

The repair passed 14 contracts and both browser engines. Six active notes across two synthetic accounts were preserved, with zero offline HTTP(S) attempts. The disposable server stopped, its database remained available, and the restored notebook retained the new note’s title and body.

The workflow is supervised: Duo completes the bounded repair and verification; the owner reviews the outcome and authorizes any real retirement.

What we learned

A shutdown promise needs independent evidence, exact artifact identity and a usable way to continue working. Passing checks alone do not establish agent execution, so the project retains the actual native session, attributed repair commit, and before-and-after pipeline history.

What’s next

Add optional backup encryption and preservation contracts for attachments before supporting more applications. Keep explicit saving and owner-controlled retirement understandable to the person relying on the final release.

Built With

Share this project:

Updates

Submission history