Dijkstra's 1978 essay on natural language programming describes vibe coding.
He argued that programming needs a formal symbolism because plain language hides mistakes, and that a machine taking instructions in English would make silly errors harder to catch, not easier. Forty-eight years later the machine exists, and the thread about it on Hacker News is split between people who say he's been proven wrong and people who say every failed prompt proves him right.
Both miss where the formal part went. It didn't disappear, it moved. In my own setup the English goes into the brief, and the precision lives in two places I still write by hand: the interfaces, and the tests that have to pass before a change merges. The model fills in the bodies. When the brief is vague the tests catch it, which is the error message Dijkstra wanted instead of a wrong answer.
Where does the precision live in your workflow, the prompt or the tests?