feat: persist blocked executor jobs

This commit is contained in:
john
2026-07-24 23:07:46 +08:00
parent d21c4849a9
commit bbb43f97a3
17 changed files with 649 additions and 26 deletions
+20 -4
View File
@@ -43,7 +43,7 @@ Phase 2 adds:
- a real LangGraph `StateGraph` service on the versioned HTTP boundary;
- a PostgreSQL `PostgresSaver` checkpoint owner;
- an explicitly non-durable MemorySaver option for tests and local debugging;
- a `code-run-v1` observe-only graph with no executor or tool access;
- a `code-run-v1` observe-only graph with no executor dispatch or tool access;
- a Portal fire-and-forget shadow projection;
- live health probing from memindadm;
- a separate Colima/Compose deployment artifact.
@@ -110,6 +110,22 @@ Phase 3.2 establishes the Executor Gateway boundary:
`EXECUTOR_DISPATCH_IMPLEMENTED=false` is a code-level gate. Phase 3.2 can record
blocked, idempotent job state but cannot invoke an adapter or launch a process.
Phase 3.3 makes that blocked state durable:
- the Orchestrator owns a PostgreSQL `executor_jobs` table beside its LangGraph
checkpoint tables, under the same isolated schema and database credentials;
- the `build_plan` node atomically creates one deterministic Executor Job per
run and graph-node version;
- retries recover the same job through its idempotency key, while a changed
semantic request fails closed;
- `/health` and `/ready` report and probe checkpoint and Executor Job storage
independently;
- memory mode keeps both stores explicitly non-durable.
The persisted job is still a preview terminal state:
`status=blocked`, `reason=executor_dispatch_not_implemented`, and
`executionEnabled=false`. Phase 3.3 does not call Goosed, Aider, or OpenHands.
The default memindadm mode remains `off`. Canary and Active routing are not
wired to the LangGraph executor in Phase 3. Native Agent Run remains the sole
executor in every mode.
@@ -131,7 +147,7 @@ Supported modes:
## Local process
PostgreSQL is the default and required checkpoint backend:
PostgreSQL is the default and required checkpoint and Executor Job backend:
```bash
MEMIND_ORCHESTRATOR_DATABASE_URL='postgresql://...' \
@@ -203,8 +219,8 @@ requires the repository release gates and a separately approved deployment.
| `MEMIND_ORCHESTRATOR_PORT` | HTTP port | `8093` |
| `MEMIND_ORCHESTRATOR_SERVICE_TOKEN` | Bearer token for `/v1/*` | empty |
| `MEMIND_ORCHESTRATOR_CHECKPOINT_MODE` | `postgres` or explicit `memory` | `postgres` |
| `MEMIND_ORCHESTRATOR_DATABASE_URL` | Dedicated checkpoint PostgreSQL URL | required |
| `MEMIND_ORCHESTRATOR_DATABASE_SCHEMA` | Checkpoint schema | `memind_orchestrator` |
| `MEMIND_ORCHESTRATOR_DATABASE_URL` | Dedicated Orchestrator PostgreSQL URL | required |
| `MEMIND_ORCHESTRATOR_DATABASE_SCHEMA` | Checkpoint and Executor Job schema | `memind_orchestrator` |
## Extraction test