Troubleshooting · core
Use when
A command ended with
outcome: unknown, a transport failure, a timeout, or no reply at all, and you do not know if the change happened.Looking for something else?
A change that returned
pending (problem A change returned pending). A submit that reports partial (problem A submit is partly applied or unresolved).Signs
- A
penumbracommand exits with code 4 and printsoutcome: unknownandrequest-id: <key>. - Its last line tells you to run the same command with
--request-id <key>. - A
penumbracommand exits with code 5, a transport failure. - A submit prints
submission: unknown. - An MCP call timed out, or the conversation ended while a call was running.
Why it happens
The request may have reached Penumbra and run, but the reply did not come back. Penumbra keys each change by its request id. The same request id with the same body means the same intent. A new request id means a new intent, even for identical content.What Penumbra does
By itself:- Returns the original outcome when you send the same request id and the same body again. It does not run the change twice. This holds for a workspace capture and for a workspace submit.
- Refuses a different body under a used request id with
idempotency_conflict. - Does not report a rollback that it cannot prove.
- Does not run an approved change again after an
unknownresult.
- Keep the request id. The CLI prints it as
request-id:, or you set it with--request-id. - Send the same command, with the same arguments and the same request id.
- For a command that has no request id, read the state first.
penumbra graph workspace modifyhas no request id. Read before repeating it; hydrate, keep-new and refresh repeat with their original key.
Do
- Do not send the change with a new request id.
- Find the request id. It is in the
request-id:line of the earlier output. - Send the same command again with the same arguments and
--request-id <key>. For a submit, that ispenumbra graph workspace submit "<name>" --revision <n> --request-id <key>. The result is the original outcome. - To read the outcome without sending the change again, run
penumbra requests get <key>. - If the command has no request id, read the workspace first with
penumbra graph workspace show "<name>". Compare the items with what you meant to do. Repeat only the part that is missing. - If a submit now reports
partialorunresolved, follow problem submit-partly-applied. - In the default MCP catalog, call
check_statuswith no reference. It lists your recent executions. Check the one that was running, then resume it with the same program. - With a native MCP tool, call
workspace_submitagain with the same arguments. Use the same credential.
Don’t
- Don’t send the change again with a new request id. The change may run twice.
- Don’t tell the person that the change failed or was rolled back. You do not know that.
- Don’t repeat the change in a new workspace. A finished part runs again there.
- Don’t change the arguments and keep the request id. Penumbra refuses it with
idempotency_conflict.
Check
- The command returns a settled outcome:
applied, or a clear refusal. - A read of the state shows the change once. For a capture, the item count in
penumbra graph workspace show "<name>"is the same as after one capture.