email-connect/workplans/EMAIL-WP-0009-wave2-resource-right-sizing.md
tegwick c7cede849b
All checks were successful
CI Smoke / host-smoke (push) Successful in 0s
CI Smoke / container-smoke (push) Successful in 1s
Wave-2 right-sizing applied 2026-10-22 (CUST-WP-0071)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

Assistant: claude-code
Assistant-Model: opus
Assistant-Process: 276069@bnt-lap001
Assistant-Session: 2e192b3d-b3e8-4403-94d4-d55a2c8b476c
2026-10-22 00:57:24 +02:00

67 lines
4.2 KiB
Markdown

---
id: EMAIL-WP-0009
type: workplan
title: "Wave-2 resource right-sizing from the 2026-10-21 allocation review"
domain: infotech
repo: email-connect
status: finished
flavor: implementation
owner: claude
topic_slug: email-connect
created: "2026-10-21"
updated: "2026-10-21"
related:
- CUST-WP-0071
- RESOURCE-WP-0008
state_hub_workstream_id: "cf2bc940-4a8c-5785-b005-c73122603a2e"
---
# EMAIL-WP-0009 — Wave-2 resource right-sizing from the 2026-10-21 allocation review
Receiving workplan in `email-connect` for the wave-2 request changes below.
Origin: the 2026-10-21 node allocation review (`RESOURCE-WP-0008-T03`, feeding `CUST-WP-0071-T03`). Per the founder's 2026-10-21 delivery interview (`the-custodian/docs/decisions/2026-10-21-cust-wp-0071-delivery-interview.md`) the small adjustments form wave 2: one receiving task per owner repo, applied later in a batch. Applying wave 2 needs a separate founder approval, so every cluster-write task here is a human-gated `wait`. This file changes no manifest.
## Apply the reviewed request changes
```task
id: EMAIL-WP-0009-T01
status: done
priority: medium
state_hub_task_id: "b34ff94e-a2ef-5df1-b7ec-f2a29ae0191f"
```
Values are pod-aggregate figures from the budget file (7-day window ending 2026-10-21T06:08Z). Limits stay unchanged unless stated.
| Workload (ns/name) | Pods | CPU request | CPU limit | CPU p95/peak 7d (m) | Memory request | Memory limit | Mem p95/peak (Mi) | Throttle | Action |
|---|---:|---:|---:|---:|---:|---:|---:|---:|---|
| `email-connect/email-connect` | 1 | 25m → **5m** | 250m | 0.3/0.8 | 64Mi → **64Mi** | 256Mi | 13.0/13.0 | 0.001 | decrease |
Source and container detail:
- `email-connect/email-connect`: Deployment `email-connect`, container `email-connect`, `deploy/k8s/railiance/deployment.yaml` (25m/64Mi).
Evidence: resource-control `docs/evidence/2026-10-21-node-allocation-review/2026-10-21-node-budget.md` (+ `.json`, commit `3d9b1bd`). Rule: CPU = max(floor, p95x1.5, peakx0.5) rounded up to 5m; memory request = 7d p95 working set x1.15 (only when the change is at least 64Mi).
Steps:
1. Map the pod-aggregate proposal onto the named container(s) in the source file; where a workload has several containers or pods, split by the per-pod figures in `2026-10-21-workload-usage.json` and keep the sum at the proposed value.
2. Prepare the source change as a reviewed commit (no push, no sync) and record the before values here.
3. Apply only inside the batched wave-2 rollout, after founder approval, through the owner's normal deploy path (ArgoCD sync or documented helm/kubectl apply).
Verification: `kubectl -n <ns> get pod -o jsonpath='{..resources}'` shows the new requests; pods Ready with no new restarts or OOMKilled over 24h; for CPU decreases the throttle ratio and request latency stay at or below the 7d baseline; node request total drops by the expected delta.
Rollback: revert the source commit and re-sync/re-apply; the before values in the table above are the rollback target. Keep before/after `kubectl get -o yaml` captures as the receipt.
## Prepared 2026-10-22 (wave-2 worker W1b)
Status stays `wait` / `needs_human`. Local commit only: not pushed, not applied. Diff = full owner render vs live (`kubectl diff`, object names and changed key paths only, Secret objects skipped).
- Live source: `deploy/k8s/railiance` kustomization, applied client-side.
- Change: email-connect `64d81e3`: CPU request 25m -> 5m.
- Diff: NOT resource-only. Besides requests.cpu, the apply would also replace the `email-connect.railiance.io/rollback-note` annotation text (the source wording from e9b9d1c differs from live) and reorder the container volumeMounts and pod volumes. The volume set itself is unchanged. This drift goes to the founder before apply.
- Apply (after founder OK): `kubectl apply -k deploy/k8s/railiance`.
## Applied — 2026-10-22 (EMAIL-WP-0009-T01)
Applied under the founder's wave-2 authorization (the-custodian docs/decisions/2026-10-21-cust-wp-0071-delivery-interview.md), after a full-render diff against live that showed resources only, plus the founder-approved annotation and volume reordering. Ready; both ExternalSecrets are synced. Evidence: the-custodian docs/evidence/2026-10-22-wave2-apply.md.