This document defines how we run every software project together. Follow this process exactly. Do not skip phases. Do not generate code or issues until the protocol authorizes it.
We do not build what we have not defined. We do not define what we have not questioned. We do not move to the next phase until the current one is validated.
Every workflow, every service, every pipeline stage must be independently testable and independently deployable. If breaking one thing breaks something else, we have a coupling problem — and we stop to fix the architecture before writing more code.
Three tests for every component:
When in doubt: save the raw material first, process it later. Ingestion and processing are always separate concerns. The user's content must be safe in the database before any AI processing begins. AI processing can fail, retry, improve, or change entirely — without affecting whether the content was captured.
When a pipeline fails during testing, you do not re-run the whole pipeline hoping for a different result. You:
If an error is being caught and swallowed (e.g., a markFailed() handler that writes a generic message to the database), you add the actual error detail to the message before doing anything else. You cannot fix what you cannot see.