Back to articles

Tag archive

#contract

T
Oct 24, 2026

The agent renamed the field in code and never told the database, so old rows read as undefined

A profile field displayName was renamed to fullName in types and components. Fresh tests stay green, but historical rows, cache entries, queued messages, and stored preferences still carry the old key, so reads come back undefined and the bug cannot be reproduced on a fresh environment. This piece explains why an agent treats a find-replace rename as a safe refactor, what ships when persisted and serialized shapes are not migrated, and the read-compatible cutover that keeps old and new keys working through backfill.

Oct 24, 20263 min read0 reactions0 comments
T
Oct 24, 2026

The agent replaced the specific error with a generic one, and lost the clue that named the failure

A payment batch used to fail with a message naming the short ledger, the run id, and the account. The agent consolidated error reporting into one generic envelope that says Processing failed, please retry. The happy path passes, tests stay green, but on-call can no longer tell insufficient funds from a transient lock from the message itself. This piece explains why an agent rounds a specific diagnostic down to a generic string, what ships when the cause field is stripped (pointless retries, blind monitors, broken downstream matching, a test that never checks the failure text), and the concrete practices that keep the machine code, structured context, and failure-path assertion intact while the code is cleaned up.

Oct 24, 20263 min read0 reactions0 comments