{"id":"doc_bWz503Z0CghVsMFPCqCxbyHNAhTU","version":1,"filename":"post-mortem.md","description":"Sprint 1 of the Rails 3 upgrade was scheduled for 2 weeks. It lasted 3 weeks. The Rails version at the end of Sprint 1 is still 3.2.22.. Attempted to run ...","title":"Post-Mortem: The Upgrade That Wasn't (Sprint 1)","content":"# Post-Mortem: The Upgrade That Wasn't (Sprint 1)\n\n## Summary\n\nSprint 1 of the Rails 3 upgrade was scheduled for 2 weeks. It lasted 3 weeks. The Rails version at the end of Sprint 1 is still 3.2.22.\n\n## What Happened\n\n### Week 1: Discovery\n\nAttempted to run the app locally. Discovered that:\n\n1. Ruby 1.9.3 does not compile on macOS Ventura\n2. Ruby 1.9.3 does not compile on Ubuntu 22.04\n3. Ruby 1.9.3 compiles on Ubuntu 14.04, which is also EOL\n4. Set up a Docker container with Ubuntu 14.04. App boots. Database connection fails because PostgreSQL 9.2 client libraries are not available.\n5. Installed PostgreSQL 9.2 in the container. App boots. Tests fail. Wait, that's normal.\n6. App throws `NoMethodError` on every page. Traced to `tomltech-utils` gem, which monkey-patches `String` in a way that conflicts with the `i18n` gem but only on Tuesdays. It was Tuesday.\n\n### Week 2: The MysteryWorker\n\nAttempted to understand the `MysteryWorker`. Findings:\n\n- It queries every row in the `users` table\n- It transforms each row using `legacy_bridge`\n- It sends the result to the SMTP server at 10.0.0.47\n- The SMTP server does not respond to any protocol we've tried\n- The emails are not emails. The content is base64-encoded binary data.\n- We decoded the binary data. It appears to be a serialized Ruby object from 2014. The class it deserializes into (`LegacySync::Payload`) is defined in the `mystery_connector` gem, which has no source code.\n- The `MysteryWorker` has been running every night for 9 years. We don't know what it does. The client doesn't know what it does. Gary might know. Gary is unreachable.\n\n### Week 3: The Decision\n\nMet with client. Presented findings. Client asked \"what happens if we just turn off the MysteryWorker?\" We said we didn't know. Client said \"let's find out.\" We turned it off.\n\nNothing happened for 3 days. On Day 4, the client received a phone call from a company in Ohio asking why they stopped receiving \"the nightly feed.\" The client did not know they were sending a nightly feed to a company in Ohio.\n\nWe turned the MysteryWorker back on.\n\n## Action Items\n\n- [x] Set up Docker environment for local development\n- [x] Document the MysteryWorker behavior\n- [x] Identify the company in Ohio\n- [ ] Contact Gary\n- [ ] Decide whether to reverse-engineer mystery_connector or rebuild the Ohio integration from scratch\n- [ ] Actually upgrade Rails (deferred to Sprint 2)\n- [ ] Sprint 2 estimate: \"we honestly don't know\"\n","url":"/tomltech/rails-3-upgrade/post-mortem.md.json","account":{"id":"acct_Xt3PcFnov6BzMDisOIF8U7jQL7ue","name":"TomlTech Consulting Group","url":"/tomltech.json","slug":"tomltech"},"tags":[],"urls":{"diff":"/api/tomltech/rails-3-upgrade/post-mortem.md/diff","versions":"/api/tomltech/rails-3-upgrade/post-mortem.md/versions"},"project":{"id":"proj_VpGMc8mp4jpXrxzcJUvpyXB9gGiQ","name":"Rails 3 Upgrade","url":"/tomltech/rails-3-upgrade.json","slug":"rails-3-upgrade"},"version_count":1,"locked_at":null,"locked_by":null,"uploaded_by":{"id":"user_JuQMkA0P1cOZ2H5ohywguUxnZ5El","username":"sarah_tomltech","display_name":"Sarah Blake"},"uploaded_at":"2026-03-14T00:00:00Z"}