The record and gates
Refusals about the workspace, the decisions written into it, and the teardown that closes a piece of work.
14 classes. 2 explained, 12 named only.
A gate is a point where a decision is written down and signed. The record is where it is written. Refusals in this family are almost always one of: the product could not work out which workspace or stream you meant, or the decision you asked to write would not survive being read back.
⚠ A refused gate writes nothing. The record is unchanged, and the act can be re-run once the refusal's cause is gone.
The engine refused the row
Class: gate-integrity.
What it means. The decision you posted did not satisfy the conditions the gate enforces. The refusal is not a single sentence — it is a numbered list of everything that is wrong, so you can fix them in one pass instead of re-running to discover the next one.
What to do. Fix what the list names. The refusal also prints the next act the record projects, so you do not have to work out what comes next from first principles. When you meet this in the browser rather than the terminal, the page shows the same list and the same projected next act.
⚠ This is the engine's answer, not the surface's. Both surfaces run the same validation, so switching from the browser to the terminal will not change the outcome.
Nothing resolved a workspace
Class: no-workspace.
What it means. The act had to be recorded somewhere and nothing determined where. Nothing was written.
What to do. Re-run naming the workspace explicitly: --workspace <path>.
⚠ Discovery from the current directory is convenient and not reliable — if you are automating anything, name the workspace every time rather than depending on where the command happens to run.
Named, not yet explained
These classes are real, deliberate and named. This section does not yet carry their resolution. If you are holding one, the name below is what it indicates.
| class | what its name indicates |
|---|---|
access-log-unwritable | An access record could not be written. ⚠ Worth knowing on sight: this product refuses acts it cannot record rather than performing them unrecorded. |
capture-invalid | A capture was supplied and is not well formed. |
config-init-incomplete | Configuration was started and not finished, so there is not enough of it to act on. ⚠ Related: unknown configuration keys are refused against an explicit accepted vocabulary listed in the error — there is no permissive fallback, and a misspelled setting never silently does nothing. |
init-collision | Initialisation found something already present where it would create. |
merge-preconditions | The conditions a merge requires were not all met. ⚠ Worth knowing: merging is a human act here — the engine observes and refuses, it does not merge for you. |
structural-bounce | A document was returned for its structure rather than its content. |
teardown-archive | Tearing down a piece of work stumbled on its archive step. ⚠ The archive is written before anything is removed, so a refusal here is the safe order working. |
teardown-provisioned-unresolvable | Teardown could not resolve something that had been provisioned into the work area. |
teardown-worktree-unknown | Teardown was asked about a work area it does not know. |
unknown-capture | A capture was named that the record does not hold. |
unknown-stream | A stream was named that the record does not hold. ⚠ Check the spelling against what the record lists before concluding it is missing. |
unknown-workspace | A workspace was named that is not known — as distinct from no-workspace, where none was named at all. |