Thank you everybody who posted their setup. Here is mine:
Gear: Ubuntu 24.04 laptop. No external screen or input devices. I like coding in weird places and moving peripherals around would be cumbersome and earn me weirder looks than usual.
IDE: vscode, c++ extension pack, github copilot, markdown extension. They support my workflow well: integrates with the linux terminal, easy git branching and excellent AI support.
Compiler: open watcom 2.0. It's well documented, runs on Linux and produces binaries for DOS, optimises binaries well and has plenty of tooling for debugging. The compiler is open source, I read the source code to get insight into how the compiler optimisations work, which helps me code for and not against the compiler.
Runtime: dosbox-x for manual/unit/e2e testing, martypc and 86box for occasional quality control
Scripts: mostly bash; build tasks, unit- and end-to-end tests, dead code identification. Some Python for log parsing, performance analytics, and asset creation (eg. 3D models, fonts). The tools regularly collect log traces and graph them so I can spot non-functional regressions. Build scripts produce diskette images.
Testing: there's a special "dev" build which enables assertions and all kind of quality checks in the compiler. Scripts run unit tests in dosbox-x and evaluate the results. A special end-to-end test script deploys the application inside a dosbox-x instance, runs the application, sends it keystrokes, records screenshots and compares them with reference screenshots. It's rather slow but beats manual testing and spots all sorts of regressions (rendering issues, input handling, timing etc).
Workflow: the architecture and functional requirements are documented as markdown, which helps the AI get up to speed at the beginning of a new coding session. A new feature requirement is documented in markdown, the high-level architecture is discussed with the AI which then writes a detailed implementation plan. I review the plan for red flags, but don't go into details. If I need a second opinion, I'll ask an agent running on a different model to review the plan; sometimes it finds issues which we then discuss and refine the plan. As long as the overall solution is sound, I find it not worth the time to go into details of the plan. Coding has become so fast and cheap that it's easier to catch mistakes later in the implementation. The AI then writes the implementation in multiple phases, adjusts and runs unit tests and end-to-end tests at the end of each phase. This absolutely requires extensive test coverage - the cool kids call this a "test harness"; without it, the AI is rather useless. Small features are directly committed to the main branch, larger features get their own branches. The AI is rather helpful in authoring proper commit messages.