docs(prd-0014): cred-proxy block remediation
Adds PRD 0014, the first end-to-end remediation engine in the stuck-agent recovery flow (overview in PRD 0012, foundation in PRD 0013). Wires the cred-proxy block path: SIGHUP-based hot reload of routes.json on cred-proxy, supervisor write-on-approval, proactive routes edit TUI verb, cred-proxy audit log filled in. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,64 @@
|
||||
# PRD 0014: cred-proxy block remediation
|
||||
|
||||
- **Status:** Draft
|
||||
- **Author:** didericis
|
||||
- **Created:** 2026-05-25
|
||||
- **Parent:** PRD 0012
|
||||
- **Depends on:** PRD 0013
|
||||
|
||||
## Summary
|
||||
|
||||
Wires the **cred-proxy block** path (PRD 0012 *Stuck categories*) end-to-end. cred-proxy gains SIGHUP-based hot reload of `routes.json`. The supervisor, on approval of a `cred-proxy-block` proposal, writes the new `routes.json` to the host and SIGHUPs cred-proxy — no restart, no dropped connections. The TUI gains a proactive `routes edit <bottle>` verb for operator-initiated edits unrelated to a tool call. The cred-proxy audit log (format defined in PRD 0013) is filled in with real entries on every edit.
|
||||
|
||||
## Problem
|
||||
|
||||
See PRD 0012. This PRD specifically addresses: with 0013 in place, the operator can approve a `cred-proxy-block` proposal but nothing happens — `routes.json` doesn't change and cred-proxy doesn't notice. This PRD closes the loop.
|
||||
|
||||
## Goals / Success Criteria
|
||||
|
||||
A real cred-proxy block recovers end-to-end: the agent's HTTP request fails with a 403, the agent calls `cred-proxy-block` with a proposed `routes.json` and a justification, the operator approves in the TUI, the supervisor writes the new file and SIGHUPs cred-proxy, the agent retries against the now-reloaded proxy and proceeds. In-flight connections to cred-proxy do not drop during the reload.
|
||||
|
||||
## Non-goals
|
||||
|
||||
- Pipelock or capability handling (covered by 0015 and 0016).
|
||||
- Auto-rotation of expired tokens. The operator decides whether to issue a new token; this PRD just delivers approved config changes to cred-proxy.
|
||||
|
||||
## Scope
|
||||
|
||||
### In scope
|
||||
|
||||
- SIGHUP reload of `routes.json` on cred-proxy. ~30 lines added to the server.
|
||||
- Supervisor write path: on operator approval of a `cred-proxy-block` proposal, write the proposed `routes.json` to the host-side path cred-proxy reads, then send SIGHUP.
|
||||
- `routes edit <bottle>` TUI verb: open the bottle's `routes.json` in `$EDITOR`, write + SIGHUP on save. Not gated on a pending proposal.
|
||||
- cred-proxy audit log entries: every routes edit (from a tool-call approval or from a proactive `routes edit`) appends an entry with timestamp, diff, justification (if from tool call), and operator action.
|
||||
|
||||
### Out of scope
|
||||
|
||||
- Restart-based reload as a fallback. SIGHUP only.
|
||||
- Pipelock equivalents (PRD 0015).
|
||||
|
||||
## Proposed Design
|
||||
|
||||
### New services / components
|
||||
|
||||
- **`routes edit <bottle>` TUI verb.** Opens the bottle's current `routes.json` in `$EDITOR`. On save, the supervisor writes the new file and SIGHUPs cred-proxy. Useful when the operator wants to add a route without waiting for an agent prompt.
|
||||
|
||||
### Existing code touched
|
||||
|
||||
- **cred-proxy** (PRD 0010) — gains a SIGHUP signal handler that re-reads `routes.json` without dropping connections or breaking in-flight calls.
|
||||
- **MCP sidecar** (PRD 0013) — the `cred-proxy-block` approval handler stops being a no-op; on approval, calls the supervisor's write+SIGHUP path.
|
||||
- **`cli.py`** — dashboard subcommand gains the `routes edit` verb.
|
||||
|
||||
### Data model changes
|
||||
|
||||
None beyond PRD 0013. The audit log format is defined there; this PRD fills it in.
|
||||
|
||||
## Open questions
|
||||
|
||||
- **SIGHUP race window.** An agent that retries within msec of the SIGHUP may hit old routes once before the reload completes, fail, and retry against the new routes. Assumption is that normal HTTP retry semantics absorb this; worth confirming under real usage rather than designing around it preemptively.
|
||||
|
||||
## References
|
||||
|
||||
- PRD 0010 — cred-proxy.
|
||||
- PRD 0012 — stuck-agent recovery flow overview.
|
||||
- PRD 0013 — supervise plane foundation (prerequisite).
|
||||
Reference in New Issue
Block a user