Guided troubleshooting
Find the gate that stopped the request.
Do not debug the agent, WordPress, and policy as one opaque system. Identify which gate refused the request, read its evidence, and apply the narrowest correction that the evidence supports.
- Observe → Confirm → Correct → Verify
- One change at a time
- Never fix access by widening authority
The method
Every symptom below is handled the same way. The order is what keeps a small problem from becoming a permissions rewrite.
- Capture the exact state. Agent, Ability, decision, timestamp, and request identifier. Copy them before you change anything — some of it will not survive your first edit.
- Locate the stopping layer. Identity, native authority, agent policy, approval, or execution. The activity record names it.
- Apply one bounded correction. Change only the setting the evidence points at.
- Verify the outcome. Confirm both the decision record and what WordPress actually changed.
Do not resolve a refusal by granting a broader WordPress role, disabling policy, or creating a second path around the governed request lifecycle. A fix that removes the boundary has not fixed anything.
Agent not recognized
The request arrived without a resolvable managed identity, so evaluation stopped at the first gate. Nothing was executed.
Check in this order
- Agent state. A revoked or paused agent is refused by design. Confirm the state before assuming a fault.
- Environment. A staging agent calling production is a different identity, not the same one in a different place.
- Connection. Run a connection health test. A suspended or rotated Application Password stops resolving immediately — that is the intended behaviour of a rotation.
- Credential source. Confirm the calling system is sending the credential you think it is, and not a cached one from a previous rotation.
Creating a second agent to get around a connection problem splits the audit history in two. Rotate the credential on the existing identity instead.
Request blocked or paused
WordPress allowed the action and agent policy did not. The record names which decision applied.
| What the record says | What it means | Correction |
|---|---|---|
| Blocked | This Ability is set to block for this agent. | Change the decision deliberately, or leave it blocked and change the integration. |
| Review required | The Ability requires approval and none was claimable. | Approve the specific request, or move the Ability to allow if it never warrants review. |
| No permission record | Default deny. The Ability was never granted. | Grant it explicitly in the agent’s permission matrix. |
| Site mode | Read-only or paused is active site-wide. | Return to normal once the reason for the mode has been resolved. |
| Unregistered Ability | The requested Ability is not in the registry. | Register the Ability, or correct the name the agent is sending. |
Change one decision, then retry the original request. Changing several at once means the next result will not tell you which change was responsible.
Waiting for approval
The request is held. Nothing has run, and nothing will run until the approval is created and claimed.
Before approving
- Read the redacted input preview and confirm the consequence is one you would accept right now.
- Check the request fingerprint. An approval is bound to these exact inputs; if the agent retries with different arguments, it will need a new decision.
- Note the expiry. Pending and approved requests expire on their own, and an expired approval is not a failure — it is the control working.
Common outcomes
- Approval not found
- The agent retried with different inputs, or the approval expired. Review the new request on its own terms.
- Already claimed
- Approvals are single-use. A second call needs a second decision; this is what prevents replay.
- Approved but still refused
- Something later in the chain declined — usually site mode, or a native permission that changed after the review.
Outcome unverified
The request ran but the result could not be confirmed to the standard the record requires. Resist the urge to repeat the call.
- Check what WordPress holds. Look at the target object directly. An unverified outcome frequently means the action succeeded and the confirmation did not.
- Read the linked evidence. The activity record shows how far execution got and what was captured.
- Verify the audit chain. A verification failure is a different problem from an unverified outcome, and it needs attention on its own.
- Do not retry blind. Repeating a non-idempotent action to resolve an ambiguity is how one uncertain change becomes two real ones.
Some Abilities can return richer evidence than others. Where a provider returns less, the record says so rather than inferring a result it cannot confirm.
Execution needs recovery
An action ran and its effect is not what you wanted. Work from the record, in this order.
- Stop the source first. Pause or restrict the agent, or switch the site to read-only, so the request cannot repeat while you work.
- Identify exactly what changed. The outcome links to the objects affected. Recover those, not everything from that period.
- Use WordPress’ own recovery paths. Revisions, trash, and restores apply normally — the plugin governs requests, it does not replace WordPress’ content history.
- Narrow the permission before resuming. Move the Ability to approval or block. Returning an agent to service unchanged invites the same outcome.
- Verify both sides. Content restored, and a decision record that explains why it will not recur.
Where an Ability is classified as irreversible, there is no undo to reach for. That classification is the argument for putting it behind approval before it is ever needed.
When to escalate
Open a support request when the evidence contradicts the documented model — a verification failure you cannot explain, a decision that does not match the configured matrix, or an outcome the record cannot account for.
Bring the state you captured in step one: site and WordPress versions, plugin version, agent, Ability, decision, outcome, timestamp, and request identifier. A support conversation that starts with the request context skips the first day of questions.
Fix the cause, keep the boundary
A good fix preserves the authority model.
Restore intended behaviour without creating a second path around WordPress or the governed request lifecycle.
