How a 72-hour debugging nightmare revealed the fundamental flaw in dependency injection frameworks and why strict typing matters more than sophisticated abstractions