The Revert That Won

one week toward production for amplifier-app-api

Feb 3–11, 2026 · marklicata/amplifier-app-api

In one week, the hardest call wasn’t what to build—it was what to undo.

A single human author (Mark Licata, AI-assisted — Claude Sonnet 4.5 co-author trailers on ~20 commits) pushed amplifier-app-api toward production in 60 commits. The real step forward was matched by one clever idea that had to be reversed.

Start with the genuine progress…

One milestone commit moved the storage layer from SQLite to Azure PostgreSQL.

On Feb 6, the database rewrote from aiosqlite to asyncpg with connection pooling (asyncpg.create_pool()), plus JSONB casts and GIN indexes — a genuine step toward production.

And it wasn’t just plumbing…

Before
SQLite via aiosqlite — async SQLite database manager
After
Azure PostgreSQL via asyncpg + create_pool(), JSONB & GIN indexes
Status
Shipped · present on HEAD

The same push slimmed the API and multiplied documented test coverage.

Config helper endpoints were removed (config API 8→5), total endpoints dropped 40→37, and the README-documented test count jumped 67+ → 400+ (~6x). Release v0.4.0 landed Feb 11.

With trust earned, here comes the complication…

40→37
total API endpoints (config 8→5)
67+→400+
documented tests (~6x)
v0.4.0
release shipped Feb 11

To keep the runtime on a known-good build, the author pinned dependencies to exact commit hashes.

The plan: lock amplifier-core and amplifier-foundation to specific commits via [tool.uv.sources], so the runtime always used a build known to work.

Then the tooling pushed back…

# Using specific commit hashes to # prevent breaking changes amplifier-core = { rev = "976fb87" } amplifier-foundation = { rev = "412fcb5" }

The clever pin fought the tooling — each failure traced to a real commit.

The pin generated conflicts instead of confidence: URL-format traps, a stale Docker cache, and CI that only limped along behind an override hack.

So the author made a call…

uv: conflicting URLs
07d6589 — “Requirements contain conflicting URLs for package amplifier-core”; needed override-dependencies
stale Docker cache
a6e0296 — GitHub Actions cached old config_manager.py; forced no-cache: true
smoke test failure
“‘ConfigManager’ object has no attribute ‘list_bundles’” in production

Instead of piling on more workarounds, the author deleted the pinned hashes entirely.

On Feb 10, the v0.3.0 restructuring dropped the rev= commit hashes for every module source — choosing to stop fighting rather than add another patch.

And the conflicts stopped…

# commit 1f6c2c1 (Feb 10) - amplifier-core = { rev = "976fb87..." } - amplifier-foundation = { rev = "412fcb5..." } # All components point to @main # locked at Docker build time + amplifier-core = { branch = "main" }

Reverting to plain @main sources locked at Docker build time made the conflicts vanish.

Every module source switched to branch = "main" with canonical URLs (no .git suffix) to prevent format conflicts. The simpler mechanism that cooperates with the tools won — and still holds on HEAD.

The reusable lesson…

branch = "main" sources on HEAD
@main
locked at Docker build time
1f6c2c1
Pinning reverted

Reverting is engineering judgment, not failure.

The week’s biggest win wasn’t the PostgreSQL migration or the test growth — it was the decision to undo the clever thing. Choosing the mechanism the tools cooperate with beat choosing the mechanism that looks most in control.

The flashiest idea is not always the durable one.
Fight the tools once; don’t keep paying to fight them.
Undoing a clever choice is a decision worth shipping.
Sources

Research Methodology

Primary source: marklicata/amplifier-app-api (local clone at /tmp/amplifier-app-api, remote git@github.com:marklicata/amplifier-app-api.git, default branch main). Related repos microsoft/amplifier-core and microsoft/amplifier-foundation are referenced only via pyproject URLs — their internal contents are out of scope.

Window: 2026-02-03 (initial commit 3900950) through 2026-02-11 (Release v0.4.0, commit 1eda1c0). PostgreSQL milestone c6f225f landed 2026-02-06 (UTC).

Feature status: PostgreSQL migration, API simplification, test expansion — SHIPPED. Runtime commit-hash pinning — ABANDONED/REVERTED. @main Docker-time locking — ADOPTED (state on HEAD).

Commands run:

Gaps & qualifiers: The ~6x figure is the project’s own README/commit number (67+→400+); an independent grep of def test_ gives ~2.2x across the week — hence presented as “documented.” The Feb-6 milestone c6f225f carries a “Co-Authored-By: Amplifier” trailer, not a Claude 4.5 one. amplifier-core/-foundation internals were not verified.

Primary contributor: Mark Licata (malicata@microsoft.com) — sole human author, 60 of 109 commits in-window; Claude Sonnet 4.5 co-author trailers on ~20 commits.

More Amplifier Stories