v1.4.0 Plan — Implementation Waves A–F
Status: Complete — pending merge of PR #25
Branch: wave-a-stopgaps (PR #25, single release PR per the next-version release model)
Focus: The consolidated issue-implementation plan (docs/plans/issue-implementation-plan.md, v2) — risk-ordered, release-anchored waves covering the GitHub issue backlog (#16–#22), the code-review correctness/security findings, and the telecom-domain gaps.
0. Sources
- Plan:
docs/plans/issue-implementation-plan.md(v2, post two independent reviews) - Reviews:
docs/reviews/code-review.md,telecom-domain-review.md,ui-ux-review.md,issue-rca.md,issue-tracker-summary.md,implementation-plan-reviews.md - Design docs:
docs/plans/d2-count1-stream-placement-design.md,e2-queued-manual-runs-design.md,f1-counter-delta-design.md(all approved + implemented) - Verification:
docs/reviews/kind-verification.md(live kind-cluster gates, all pass)
1. Progress
- Wave A — stopgaps: #16 mitigation (MALLOC_ARENA_MAX=2, post_batch_cleanup default on, schema-cache LRU, asset-sync skip, sink close), dispatch outcome labeling (#21 stopgap), dead-code removal, #3 closed
- Wave B — correctness core: alert CRUD persistence (A6), watcher delete lifecycle (A7), threaded batch-path rework (B.3: deferred source finalize + bounded in-flight cap), syslog RFC 6587 framing + concurrent TCP (A12), controller RLock, manager-restart adopt guard, Kafka at-least-once default
- Wave C — security (phase 1): TRAM_INTERNAL_AUTH_MODE warn-only, keys plumbed both directions, probe exemptions, constant-time compares, webhook body-size limit, ClickHouse identifier validation, committed chart defaults rotated out
- Wave D — visibility/stats: #17 durable count=1 placements + liveness recovery + config drift, #22 live dashboard stats, #18 json_flatten/explode O(n²) fix, per-slot placement CAS (A13), transport hardening
- Wave E — enhancements: #19 ASN.1 split_path, #21 queued manual runs (E.2 per design), #20 templates UI contract
- Wave F — domain gaps: counter_delta + window_aggregate with durable transform state (F.1), file-done guards (F.2), gNMI reliability/modes + Kafka stop/lag + CORBA dedupe window (F.3), source timezone (F.4)
2. Verification record
- Full backend suite (2130 tests) + ruff + UI build green on the release branch
- Nine independent adversarial reviews (one per wave/feature), all actionable findings fixed pre-commit
- Live kind-cluster verification of every runtime gate: E.2 queue lifecycle, F.1 stateful semantics + guards, D.2 placement lifecycle, #16 RSS soak (13 threaded runs, stable peak, plateau, zero OOMKills)
- CI green (Test + Docker Build Validation)
3. Notable behavioral changes in 1.4.0
post_batch_cleanupdefaults totrue; Kafkaenable_auto_commitdefaults tofalserecords_outcounts delivered records (per-sink written max), not input chunk size- Manual runs with no healthy workers return
202 queued(rollback:TRAM_QUEUE_MANUAL_RUNS=0) - Helm chart ships no default
apiKey/authUsers— set explicitly or viaenvSecretin the same upgrade - Webhook bodies >10 MiB rejected (413); ClickHouse quoted/bracketed table names rejected
- Stateful transforms rejected with
thread_workers > 1, in sink-level transforms, and on broadcast streams
4. Post-merge
- Close GH #16, #17, #18, #19, #20, #21, #22 per the wave mapping in the PR body
- Operational follow-up (next release): flip
TRAM_INTERNAL_AUTH_MODE=enforceafter keys are confirmed on all clients (C.2)