A four-pass Deep Read cannot safely live inside one synchronous Lambda call: a timeout would erase which passes completed and either strand the document or repeat paid model work. The worker now treats SQS as a doorbell and PostgreSQL as the job ledger, so every invocation advances at most one persisted pass.
fixture_start_deep_read
│ reserve job + persist complete pass plan
▼
SQS nudge {firmId, jobId, runId}
│
▼
claim one ready pass ──► registrar AgentCore panel ──► persist typed effect
▲ │
└──────────── enqueue the same durable pointer ◄─────┘
│ last judge pass
▼
V-CITE + persist envelope
The nudge carries no page text, candidates, or progress state. A redelivery reloads
all of that from ops.deep_read_*. An active lease keeps the nudge retryable,
so a crashed worker can be reclaimed after lease expiry.
| Surface | Owner and reason |
|---|---|
| Job/run/pass/envelope state | pramaan-functions, transactionally persisted before and after egress. |
| Generative model calls and model catalog | Registrar AgentCore runtime. The Lambda sends mode=deep_read; it contains no OpenRouter client, key, or model selection. |
| Queue, Lambda shell, IAM, environment, ESM | pramaan-spec#2571 / pramaan-infra Terraform under ADR-031 and ADR-162. |
| Reviewed zip, immutable versions, canary, live/previous aliases | deploy-deep-read-worker.yml in functions CI. |
| Package | The standard src/ plus otel_wrapper.py archive; the workflow imports and checks the Deep Read handler, orchestration, planner, processor, DTO, contracts, and runtime DB resolver before publication. |
The candidate-version canary exercises the changed dependency path without
mutating a document: cold-start DB SecureString resolution, registrar runtime SSM
resolution, and nudge-queue GetQueueAttributes. The workflow separately
simulates the role's SSM, AgentCore invoke, and SQS grants, then verifies the
Terraform-owned ESM targets :live with batch size 1 and partial-batch
responses. test_deep_read_deploy_workflow.py includes a planted config
writer and proves the ownership gate goes red.
SQS rings once, PostgreSQL remembers everything, Lambda moves one pass, and only AgentCore thinks.