Specification: Operations Wiring (Phase 3)
Specification: Operations Wiring (Phase 3)
Section titled “Specification: Operations Wiring (Phase 3)”Driving document for the operations worktree at
projects/invitation-mail-server-worktrees/operations (branch
jmpicnic/invitation-mail-server). Satisfies
requirements.md; verified per
verification.md; construct blueprint in
Design §12 — operations wiring.
Entry gate: common-module 13.2.0 published (Phase 1 merged).
Skills to load: kotlin-coding, unit-tests-backend, unit-tests-infra,
build-core-modules.
Worktree Strategy
Section titled “Worktree Strategy”Single worktree, single agent — no task worktrees needed.
T3.1 — Version bump and lift adoption
Section titled “T3.1 — Version bump and lift adoption”Bump arda-common-version to 13.2.0; replace local copies of the lifted
classes with library imports; delete the originals (REQ-OPS-001). Adapt
service/EmailSender.kt to delegate to PostmarkEmailSender via token
supplier + hooks (REQ-OPS-002). No behavior change — the existing email
suites are the regression net.
Verify: full make build; BV-4-05 (entire email module suite green
unchanged); BV-3-03.
Guard: composite-build check before every commit (
git diff --cached | grep -iE 'includeBuild|/Users/|-worktrees').
T3.2 — Helm secret projection
Section titled “T3.2 — Helm secret projection”SystemEmailServerToken ExternalSecret entry + email.serverToken line in
both template branches (ESO + local fallback) per REQ-OPS-003; email.from
values (domain = system. + existing mail-zone value) in values.yaml /
per-env values (REQ-OPS-004).
Verify: BV-2-03 golden helm template assertions; make lint (helm).
T3.3 — Config block and composition root
Section titled “T3.3 — Config block and composition root”Top-level email {} block in src/main/resources/application.conf
(REQ-OPS-004); conditional systemEmailSender construction + in-process
exposure in runtime/Main.kt (REQ-OPS-005/006).
Verify: BV-5-01/02/03 via ComponentStartupTest /
ConfigurationEndpointTest variants (dataSource-less block — no db plumbing
in the test config maps).
T3.4 — Dev smoke spec
Section titled “T3.4 — Dev smoke spec”Tagged smoke spec sending one real message via the dev system server,
following the existing DevSmoke* pattern (REQ-OPS-007). Excluded from
default builds; executed at the Phase 4 dev gate.
T3.5 — Quality gate and release prep
Section titled “T3.5 — Quality gate and release prep”- Full gate:
make build,make clqLint, helm lint. - kotlin-coding review pass over all new/changed lines.
- CHANGELOG (direct-edit):
Added— internal system email sender wired from the partition secret;Fixed— email send internals now sourced fromcommon-module(no behavior change).
STOP — review before PR
Section titled “STOP — review before PR”Present diff summary, gates, CHANGELOG. No push/PR until approved; then
push, PR, /pr-steward. PR merges after 13.2.0 is on GitHub Packages.
Acceptance Checklist
Section titled “Acceptance Checklist”- REQ-OPS-001..008 satisfied; verification rows green (BV-4-06 authored, execution deferred to Phase 4).
- Zero behavior change on the per-tenant path (full suite green unchanged).
- Local dev mode boots with the dummy token line.
- No webhook / persistence additions for system sends.
- kotlin-coding review pass done; no composite-build strays.
- CHANGELOG entries present; PR merged after 13.2.0.
Open Questions and Decisions
Section titled “Open Questions and Decisions”| # | Question | Options | Recommendation | Decision |
|---|---|---|---|---|
| 1 | In-process exposure surface for systemEmailSender | (a) extend the EmailServices aggregate (b) separate top-level value passed from Main.kt | (b) — the system sender is a component capability, not part of the ShopAccess/Email module’s tenant service graph; keeps DQ-005’s separation visible | Open — decide at T3.3 with the code in front of us; either is additive |
Copyright: (c) Arda Systems 2025-2026, All rights reserved
Copyright: © Arda Systems 2025-2026, All rights reserved