Venipak · programme status

4H / HF / LW — status board

Living board for Phase 1 4-Hands enablement (VDT-3145) and Phases 2–3 HF/LW research (VDT-3343). Near-term focus is 4H only — LT all-zones via allowlist. Progress refreshed 2026-09-07 — MERGED TO UAT: pakas #618 → a88b5ea9 · siunta #158 → ff4e6aef · go-import #64 → 842eaa41, all three deployed. DDL complete. veniship (VDT-3205) is back IN on a minimal window (owner ruling 2026-08-28, superseding the 08-22 exclusion) — it fixes a live under-charge.

Last updated: 2026-08-28 · 4H IS ON UAT — QA round live, kl_view 4H AUTO row now in the price table (#634/#635). All three PRs merged and deployed; the DDL ladder completed the same day (Audrius, 12:09 — 19 s MyISAM copy). QA validation steps posted on all nine tickets. VDT-3413 closed out with UAT evidence. Next: UAT test round → master PRs → prod.
Active wave: 4H Phase 1 verified on dev → veniship prod release + VDT-3395 → LT enable
State — 2026-09-07 · 4H IS ON UAT · QA ROUND OPEN BUT NOT MOVING

QA round (since 2026-08-26): automated part complete — 191 suite + 33 targeted results green on gouat, verdicts filled on the tests page; 74 manual cases remain open; precondition P7 is ANSWERED (owner 2026-09-06: there is no pack_4rp cron on UAT and no terminal re-weighing on dev/uat, so cases 6.8, 9.1, 9.6 and 17.1 cannot run there). 2026-08-28: the kl_view “4H AUTO” row moved mid-round into the all-regions price table (kl_edit_plius viewers only, clients with a price list; pakas #634 → uat a887f6da · #635 → dev 5beab194, merged, live on gouat) — see tests.html case 15.8.

All three pull requests are merged and deployed. pakas #618 → uat a88b5ea9 (pipeline #733) · siunta #158 → uat ff4e6aef (pipeline #226) · go-import #64 → uat 842eaa41. Each branch was verified immediately before merge: merge-tree clean, and zero 4H lines differing from origin/dev within the payload in all three. Post-merge, every branch is contained in uat, inc/inc.function.4rp.php is present, the config by-country map is live (CONFIG_2X4RP_LOW_LIMIT now 50, was 80), the cron reads kl_4rp_auto, and siunta serves asset VERSION 50.

The DDL ladder is complete. Audrius Puvačiauskas ran VDT-3384.sql on UAT at 12:09:20–12:09:39 — the MyISAM table copy took 19 seconds for 166,561 rows / 60.3 MB (a useful production estimate: ~185k rows → roughly 20–25 s of write lock). Cutover exact: four clients at AUTO (3464 JYSK BALTIC · 89398 ROMITEKA · 157673 ELECTRONIC TRADE · 158280 PRO TRADE), 166,557 at MANUAL, nobody else touched. tbl_log_siunt_4rp was already present from 12/08.

UAT schema identified as demovenipak_new — proven by reproducing Audrius's 06/08 10:41 output to the row: 3-column backup tbl_post_info_4rp_flip_backup, COUNT(*) = 17246, changed = 10567, enabled-before = 6679. That also settles VDT-3413: the LT flip is applied on all three environments (dev + uat 06/08, prod confirmed by the owner), and the ticket now carries the per-zone evidence it was missing.

QA validation steps are posted on VDT-3203, 3384, 3395, 3408, 3410 (pakas), VDT-3204, 3407 (siunta) and VDT-3202, 3403 (go-import) — numbered, UAT-specific, with the inclusive band boundaries (25.99 vs 26.00 kg), the country gates, pallet and OOH exclusions, and the evidence each ticket needs before it can be accepted.

Deliberately not in this release: tariff seeding (owner ruling — prices stay as they are for current users, so VDT-3415 stays parked and the ~230 UAT rows at the 50 € default are intentional) · no client is moved to AUTO beyond the four already there · VDT-3396, so the band table LT 26–75 / LV·EE 31–90 still lives in three app copies rather than being read from the helper — verified identical in all three today, and guarded by FourHandsVpdriverDriftTest plus the standing no-band-change rule · veniship (VDT-3205), excluded from this window.

Next: the UAT test round against the posted steps, then master PRs, then production — where the DDL ladder runs again and the 19-second measurement above is the planning number.

14 PRs
Merged — dev lane complete (last: #563 · #152 · helper #48); 3 new pakas PRs open to dev: #656 · #657 · #658
0.8.3 · 0.9.1 · 0.9.2
Helper tags live
0
go-ws PR (gap)
6/6
Q14 + key ODs*
0
LT postcodes off on dev† (17,249 on — VDT-3414; uat/prod = VDT-3413)

*OD-3/25/4/8/27 answered + Q14 YES (Evelina 2026-07-30 on VDT-3203). †Demo venipak_dev — re-probe prod.

Phase 1 — 4H enablement (VDT-3145)

PRTicketHeadWhat landedStatus
pakas #394 VDT-3203 425bf63c Cron → posti_service1; drop zone/payers/volume; bands LT 26–75 / LV·EE 31–90 (incl. 2×4H); sender+consignee gate; doubling LT>50 / LV·EE>60; pallet skip wired; VDT-3384 client mode; dev merged. Pushed 2026-08-01; follow-up fixes 7c94a2ad (08-02) and the P3 kl_edit_plius ACL gate 425bf63c (08-03) — every push gated on suites green + veni-guard 42/0; PR body + Jira refreshed (FVS cases f–k) Merged to dev 08-04 · 4596d46e
siunta #90 VDT-3204 aa31edc3 Order/import/UI predicates + both-country gate. Amended per ruling + pushed 2026-08-02 (24 files): creation-time auto-4H gated on the client-card switch kl_4rp_auto; bands 26–75/31–90 everywhere incl. JS validator + langs; pallet skip; cron-parity OOH; persisted-sender semantics. Suites green (36/36 · 44/44, 294 asserts); veni-guard 42/0; PR body + Jira refreshed (c.111510). Merge gates: helper 0.9.1 tag · Playwright when VPN returns · 2 approvals Merged to dev 08-04 · 7bd49b8b · Playwright 40/42
go-import #49 VDT-3202 7fc0030 Import validation; EE=31; both-country gate; silent strip if not allowlisted. Amended per ruling + pushed 2026-08-03: creation-time auto-4H gated on payer kl_4rp_auto (memoized, fail-closed); bands raised to 26–75/31–90 + LV/EE ceiling matrix; branch rebased onto dev tip (linear VDT-3202-only history). Suite 57/64 green on 7.4.33 vs MySQL 5.6; veni-guard 42/0 (+2 advisories, seq env 99000); PR body + Jira refreshed (c.111638 incl. FVS). Merge gates: veni-tests go-import API on VPN · 2 approvals Merged to dev 08-04 · 7d70f60e · API 37/44
— VDT-3384 in #394 Client AUTO/MANUAL — default MANUAL; cron JOIN; seed legacy 4; blocks LT flip. Folded into the #394 branch and pushed with it (commit a71cff6c + the kl_edit_plius ACL amend). Review 2026-08-01: clean; e2e proves MANUAL skip. Seed list four-vs-six still open with Sales. Merged · SQL applied on venipak_dev
venipak-helper #43 VDT-3203 e868978 The library half of 2×4H doubling: per-country low limit (LT 50 / LV·EE 60) in Price.php + label DirectionProvider.php, guarded scalar fallback; cut from the 0.8.2 tag (src diff = exactly two files) + 7 label tests; suite 170 green on 7.4.33. Review this one first — merge unblocks tags 0.8.3 → 0.9.1 → pakas pin ^0.8.3; inert until tagged (consumers pin tags) Merged 08-04 → tags 0.8.3 + 0.9.1 live
veniship #743 VDT-3205 99f5a8b Rate/order gate. Split reworked + pushed 2026-08-03; PR retargeted dev→master: rebased onto master 5caf391; explicit-request-only 4H with OOH-first on quote AND book; double-charge suppression on use_api_rates (provenance flag); EE 26→31; adversarial 2-verifier round found + fixed a PR-original global-rates service leak; confirm round CONFIRMED-SOUND. Suite 210/743 baseline-identical; veni-guard 42/0/0. Auto-detect DROPPED — veniship has no kl_4rp_auto read path (no legacy-DB conn); pakas cron stays sole AUTO writer. CAUTION: veniship master auto-deploys prod EXCLUDED from the UAT window (2026-08-22 ruling) — merged to dev on 1 approval; no international gate in the live 4H path; absent from the UAT corpus
— go-ws — No eligibility logic (never writes siunt_4rp — safe deferral), but inc/config.php:37 low=60 / no ceiling skews courier docs — config-only fix recommended, no PR yet Gap · config fix

LT other zones data, not a PR

After Phase-1 deploy, opening z2/z3/z4 is UPDATE tbl_post_info SET posti_service1='1' WHERE posti_salis='LT' (optionally wave by zone). Cron no longer filters posti_zone.

Still before flip process

Approvals ×5 · #43 merge → 0.8.3/0.9.1 tags → pakas pin · VPN-deferred suites (siunta Playwright, go-import API, demo probes) · VDT-3395 design + build · tariff 14/28-vs-6/12 (Finance) · seed list (Sales) · promotion + UAT · zero-kain_4rp + posti_service1 prod probes · Ops capacity · then wave-by-zone LT flip · 48h monitor per wave.

Exec brief HTML

Stakeholder enablement summary: .workflow/4h-enablement-executive-summary-2026-07-29.html

2026-08-04 — merge, release, verification on dev

StepResultEvidence
Merges to devDonepakas 4596d46e · siunta 7bd49b8b · go-import 7d70f60e. All conflict-free; dev-side files had zero overlap with PR files.
Helper release0.8.3 + 0.9.1#43 merged (fe15b6c6). 0.8.3 @ 2607c03 (no SmsService) · 0.9.1 @ ae7de98 (SmsService retained).
Tag trap found + fixedCaught pre-deployhelper composer.json carries a hardcoded version field; composer silently skips any tag whose name differs. First tags were invisible — ^0.8.0 still resolved 0.8.2 with no error. Re-cut with version-bump commits; verified Locking venipak/venipak-helper (0.8.3) / (0.9.1). A helper release needs 3 files, not 2.
DB migrationAppliedvenipak_dev: single ALTER (column+index) + seed. Legacy four = AUTO (JYSK BALTIC, ROMITEKA, ELECTRONIC TRADE, PRO TRADE). Measured 20.8 s table lock on 169k rows — prod ~185k, so plan a genuine off-peak window.
Dev redeploysSuccessfulpakas build 555 · siunta build 191. composer update now resolves 0.8.3 / 0.9.1, so LV/EE 2×4H prices against 60, not the LT threshold.
go-import API suite37/44Credential blocker resolved (same login as siunta/pakas; client_active YES, user_id=20579). 0 auth failures. 7 failures on non-Baltic routes, outside 4H scope.
Playwright siunta40/42smoke 20/20 · functional 20/22 against godev. Sole failure is outside 4H scope; PR #90 touches none of those files.

2026-08-05 — helper pins landed verified in the real pipeline

ItemResultEvidence
pakas #550 — pin ^0.8.3Mergedmerge 9b935d72 → dev build 558 SUCCESSFUL (45 s)
siunta #145 — pin ^0.9.1Mergedmerge dfd672f7 → dev build 193 SUCCESSFUL
Tag resolutionProvenBoth deploys run composer update against the pinned constraint — a green build is the proof the tags resolve. With the version-field trap still present these builds would have failed loudly.
Prod dependency drift — observed, not theoreticalWatchWithin ~1 h of the tags going live, pakas and siunta both cut prod releases (release_20260804*). No lock + composer update --no-dev → prod resolved 0.8.3 / 0.9.1 unplanned. Behaviourally inert (neither master defines the country map → scalar fallback), and neither release carried the 4H work. Exactly the drift the pins remove.
helper #440/2 — chaseUntil merged, helper master's version says 0.9.0 while tag 0.9.1 exists → next release repeats the invisible-tag bug

2026-08-05 — visual verification on dev 5/5 cases correct

CasePayerWeightExpectedResult
Default clientMANUAL30 kgno 4Hsiunt_4rp = 0 ✓
In bandAUTO30 kg4H appliedsiunt_4rp = 1 ✓
Below LT floor 26AUTO20 kgno 4Hsiunt_4rp = 0 ✓
2×4H tier (>50)AUTO55 kg4H appliedsiunt_4rp = 1 ✓
Above LT ceiling 75AUTO80 kgno 4Hsiunt_4rp = 0 ✓

Real shipments through the siunta UI on dev (32820227–32820231), reopened to read the stored flag; UI and database agree in every case. Test payer was switched to AUTO for cases 2–5 and restored to MANUAL — dev is back to exactly 4 AUTO clients (the seeded legacy set). Screenshots: test results page. Suites re-run same day: Playwright siunta 40/42, go-import API 37/44 — no 4H-related failure; the rest sit on non-Baltic routes outside 4H scope.

2026-08-05 — full dev exercise cron · client card · UI · XML

PathResultEvidence
Cron pack_4rp (authoritative writer)3/3 runs correctReal dev-branch cron against the dev DB. Flags 30/55 kg, skips 20 kg (below floor) and 80 kg (above ceiling); idempotent on re-run; flags nothing once the payer is MANUAL. Note: it only sees shipments whose siunt_priemimo_data is in the last 2 days — new shipments carry 0000-00-00 until pickup, so creation-time application and the cron cover different moments.
PAKAS client cardEnable + disable via UISwitch renders behind kl_edit_plius, default MANUAL for every client; ticked → saved → reloaded → persisted (DB = 1); returned to MANUAL the same way. Dev back to exactly 4 AUTO clients.
siunta UI5/5Identical 30 kg shipments differ only by the client switch; band floor/ceiling honoured.
XML / API import6/8 as specifiedAuto-apply, floors, ceilings, explicit four_hands=1 and the disabled-postcode strip all behave. Two deviations below.
Defect A — explicit four_hands=0 ignoredFIXED — PR #57VDT-3403. AUTO client sending an explicit zero on a 30 kg parcel still got 4H applied — empty("0") is true and the validator coerces an absent tag to '0'. Fixed siunta-style: presence captured at parse time (four_hands_declared), auto-apply guarded on declaration, empty tags stay auto-apply-eligible. Repro→fix proven through the real API route (pre-fix shipment 32820245 → 1; post-fix 32820247 → 0); 70 phpunit green; veni-guard 42/0. PR open to dev, 4 reviewers assigned.
Defect B — OOH not excluded at importVDT-3404 · blocked on P11Sharper than first thought: both paths are name heuristics — import's isPickup()/isLocker() match only the canonical comma form ("venipak pickup,"), the cron matches the substring anywhere; "VENIPAK PICKUP Vilnius" (no comma) evades import but not the cron. The XML contract has no structured pickup-point field, so free-text names are this channel's only OOH signal. Evelina confirmed the business rule but delegated the detection mechanism to PO/sys arch — that ruling is what blocks the code.
LV imports — error 24 on test scenariosVDT-3405 · downgradedNot a rollout blocker: posti_kodas is MEDIUMINT(5) ZEROFILL — the "786 five-digit LV rows" are 4-digit values zero-padded for display. Real LV traffic is 4-digit at scale and passes; the test harness sent the padded form 01981. The validator's 4-digit rule matches official LV-NNNN. Residual question: do prod error-24 logs show clients sending LV--prefixed/padded forms (→ input normalisation, not a rule change).

Full request/response for every XML scenario, plus expandable screenshots: dev test results & evidence.

Known issues found today not 4H

IssueImpactOwner
DB_changes label missing on other teams' SQL ticketsVDT-3382, VDT-3380, VDT-3332 all ship SQL with no label — invisible to whoever runs prod queries, the exact gap raised on #394.Team convention
veniship-client #23 open since 2024-03 with 5 approvals155 commits behind master; approvals long stale. Should be declined, not merged.veniship-client

Outstanding PRs state 2026-08-11 EVE · dev lane complete — only venicourier #3 remains

PRTicketTargetScopeApprovals
pakas #563VDT-3203dev4H dev sync — master-based VDT-3203-4h-release merged into dev · review round closed with two release-branch commits merged in pre-merge: cd2760ad (fourHands* split → inc/inc.function.4rp.php) + 6f66dc32 (s4rp_user_id INT(8)) · superseded #557/#551/#556 declined · post-merge dev 136/136MERGED 2026-08-11 (5572933) · 2/2 ✓✓
siunta #152VDT-3204dev4H dev sync — VDT-3204-4h-release merged into dev (clean, +5/−1) · superseded #147 declined · post-merge dev 91/91MERGED 2026-08-11 (0c0d90c) · 2/2 ✓✓
helper #46VDT-3396masterFourHandsWeightBands defaults + 0.9.2 bump · rename fix 16e74ef (Šalnis review) · tag 0.9.2 pushed (0.9.1 recipe) → the VDT-3396 re-raise off the 4h-release branches is unblocked (go-import lock regen; scheduled, not started)MERGED 2026-08-11 (e885df4) · 2/2 ✓✓ · tag live
go-import #57VDT-3403devDefect A fix — explicit four_hands=0 honoured (billing path) · review fix 72084e8 (static provider)MERGED 2026-08-10 (06e5127) · 2/2 ✓✓
siunta #146VDT-3407devPhase 2: Skaičiuoti notice, per-pack 4H/no-4H badges, tooltip reword · review fixes 5d78ddd5 · MERGED to dev 2026-08-07 (e8ec98b4) · follow-up PR #147 DECLINED 08-11 — content merged via #152 (0c0d90c)MERGED · #147 declined → #152
pakas #551VDT-3408devPhase 2: 4H kaina column, kiek-4H totals, Neužsakytos-4-rankos filter, indicators · review fixes 6a22506f (LEFT JOIN) + cbfb57c8 (VERSION bump, Jovaiša) · RU-locale fix 81f95fae · content landed on dev via #563 (5572933)DECLINED 08-11 · superseded by #563
pakas #552VDT-3410devPhase 2: routing-map bubble colours (green ordered / red unordered-qualifying), badges, red weights · MERGED to dev 2026-08-07 (faaef868)MERGED
pakas #556VDT-3410devCourier follow-up: get_vair_shipments emits shipment_4rp / shipment_4rp_weight (venicourier backend) + drift-guard & payload-contract tests · SUPERSEDED by #563SUPERSEDED
venicourier #3VDT-3410masterStop-card 4H (white-on-violet) / no-4H chips + per-shipment chips in the marker info-window — gate satisfied 08-12 (#563 merged + dev auto-deployed) · 2026-08-15: venicourier ruled courier-side → out of our scope — the open PR (our authorship, 0/2) awaits the courier team's / owner's adopt-or-decline call; we no longer poll itHANDED OVER · 0/2
vpdriver-api #1VDT-3410dev4rp_qualifies in courierme.php — DECLINED 2026-08-07: vpdrive_system dead since 2020 (firebase tokens frozen 2020-06, repo dormant 2019-07; live scanner = vpcourier-api). Evidence on the PR + VDT-3410DECLINED
pakas #557VDT-3395devTerminal re-weigh re-evaluates siunt_4rp; shipment-keyed tbl_log_siunt_4rp provenance (🚩 DDL must run on uat/prod with the deploy) · content landed on dev via #563; s4rp_user_id now INT(8) in the DDL — live dev ALTER pendingDECLINED 08-11 · superseded by #563
pakas #516VDT-3343devPARKED HF/LW characterization suite — not on the 4H path; needs its refresh before merge0/2

All Phase 1 4H PRs are merged (pakas #394 · siunta #90 · go-import #49 · veniship #743 · helper #43/#45 + pins #550/#145). Reviewers on the four active PRs: Gediminas Šalnis · Vasilij Duško · Andrius Pečiūra · Arnoldas Jovaiša. Adjacent non-4H open PRs (other owners/tickets): siunta #135/#137 (VDT-3332 MH promotes), pakas #554 (VDT-3380 SQL), pakas #544/#545 (front-engine experiments).

The 4H phases — what each one delivers

Plain-language map of the programme. "4H" (keturios rankos / 4 rankos) is the paid two-person delivery service for heavy parcels. Each phase answers one question for the business.

Phase 1 — the mechanics on dev · epic VDT-3145

"Which shipments qualify, and who says so?" The rules engine that decides 4H eligibility and writes the flag:

  • Weight bands — a parcel qualifies at 26–75 kg (LT) / 31–90 kg (LV·EE); above 50/60 kg the price doubles (2×4H); above the ceiling there is no 4H at all. Same bands enforced in the cron, the order forms, the import API and the pricing library (VDT-3202/3203/3204).
  • Auto vs manual — clients are MANUAL by default: they order 4H themselves. Sales can switch a client to AUTO (kl_4rp_auto), and only then does the nightly cron flag qualifying shipments automatically (VDT-3384).
  • Guard rails — pallets and pickup/locker deliveries never get 4H; both sender and receiver country must be Baltic; postcodes must be enabled (posti_service1 allowlist — the future "LT flip" is just turning postcodes on).
  • Re-weigh honesty (VDT-3395) — when the terminal re-weighs a shipment, an auto-set flag that no longer qualifies is cleared, and a qualifying one for an AUTO client is set — with a provenance log (tbl_log_siunt_4rp) so a human decision is never overwritten by the machine. Product requires this before billing can be enabled.

Phase 2 — the visibility on dev · epic VDT-3406

"Can every human in the chain see 4H where they work?" Phase 1 made the flag correct; Phase 2 makes it visible — sourced from the BRD deck's 48 annotations:

  • Clients (siunta) — a warning when registering an over-threshold pack without 4H, updated service description, per-pack red "4H" / black "no 4H" badges (VDT-3407).
  • Operations (pakas reports) — a "4H kaina" money column, "kiek 4H" totals, a "Neužsakytos 4 rankos" filter to catch heavy parcels nobody ordered 4H for, Call-view indicators (VDT-3408).
  • Couriers — route-map stop bubbles (green = 4H ordered, red = heavy-but-unordered), red weight numbers, stop cards and shipment rows with 4H chips (VDT-3410; venicourier app half still to merge).
  • Open questions parked as tickets — HD-only manual assignment with traceability (VDT-3409, blocked: manual writes bill today) and client notifications (VDT-3411, awaiting Product).

Phase 3 — consolidation & hardening in flight · epic VDT-3426

"One source of truth, no edge-case surprises." Cleanup before the money is switched on:

  • One band definition (VDT-3396) — the weight bands move into the shared venipak-helper library (tag 0.9.2, live) so pakas / siunta / go-import can't drift apart; app-side delegation built 08-12 on release-based branches (b26c9c08 · e7633161 · 4e30753), PRs open with the promotion window.
  • Respect the human "no" (VDT-3427, built) — the auto-cron will never re-flag a shipment an operator manually declined.
  • Edits re-evaluate (VDT-3428, built) — weight/pallet edits in pack_edit re-run the eligibility check, same as a terminal re-weigh.
  • Display coherence (VDT-3429, to do) — copy fixes: 100 kg text, country-blind "2x4 hands", stale 2× titles. Plus provenance for creation-time auto-flags (VDT-3423, needs sys-arch).

Before money flows gates outside the code

"What still blocks billing clients?" The code being merged is necessary, not sufficient:

  • Tariff seeding (VDT-3415) — price lists still default kain_4rp to 50 €; Finance-confirmed price is 14 € / 28 € (2×4H). SQL ticket ready.
  • Promotion — dev → UAT soak (2–3 wk) → master/prod, from the clean master-based 4h-release branches; DDL (VDT-3384.sql, VDT-3395.sql) runs before code on every env. Currently parked by ruling — nothing beyond dev.
  • The flip (VDT-3413) — after all of the above, enabling LT is one SQL statement on the postcode allowlist, wave-by-zone, with 48 h monitoring.

Deck re-audit — remaining UI gaps parked 2026-08-12

The BRD visuals deck re-checked annotation-by-annotation against the merged dev UI, with corrected anchoring (several 08-05 readings attached asks to the wrong surface). Full table: analysis/vdt-4h-p2p3/deck-recheck-2026-08-12/GAP-BREAKDOWN.md · Jira c.114171 on VDT-3406. Everything below is parked — no code changes until the owner reopens UI work.

GapDeck wanted it in…Today
„4H kaina" column (O–P) + exportsiunta client report (siunt_report.php Detali + Excel)Built in the pakas 12m terminal report instead; client report shows only „ 4 hands" text
„Neužsakytos 4 rankos" filterreport_all filter blockBuilt as a 12m-report sort; report_all has Visi/Su/Be only
no-4H indicator (qualifies, unordered)report_all results/exports · Help Desk · pack_statusRenders only in the three 12m views (p4rp_sk opt-in)
„kiek 4H" count rowvenicourier marker info-windowBuilt as a 12m totals row · out of scope 2026-08-15 — venicourier is courier-side (other team)
Label: bigger „4 hands" + „NO 4hands"parcel label Directions boxSmall „4 hands/2x4 hands" only when ordered — needs Product sign-off
Scanner cluster (Call: 4H, pack indicators, delivery wording, Aukštas/liftas)mobile scanner app + all courier-side surfaces incl. venicourierHanded off → VDT-3435 / courier team (ordered-4H red-bold only; the unordered marker is descoped there). Contract: new flags 4H/4H_applied

Colour convention stays per the 2026-08-05 ruling — ordered = red bold 4H, qualifying-unordered = black bold no 4H (the deck itself is inconsistent). With the scanner descoping the unordered marker, the routing map and venicourier chips remain the only courier-facing „heavy but unordered" warnings.

Phase 2 — UI & fine-tuning split off 2026-08-05

Source: the BRD visuals deck "Keturių rankų paslauga 4H.vsdx" (48 annotations over 36 system screenshots). Phase 1 shipped the mechanics; Phase 2 is visibility — showing 4H / no-4H everywhere operations, couriers and clients look — plus the pricing/configurability decisions the deck raises. Epic: VDT-3406. Display convention throughout: ordered → red bold "4H"; weight-qualifies-but-not-ordered → black bold "no 4H" (= delivered to address, handed over at the vehicle).

TicketAreaScope
VDT-3407siunta UICode review (#146 5d78ddd5, 0/2 — review fixes in, re-review pending) · "Skaičiuoti" warning for non-AUTO clients registering an over-threshold pack without 4H · updated service-description text (incl. doubling + above-ceiling rule) · per-pack 4H/no-4H indicators.
VDT-3408pakas reportsCode review (#551 6a22506f, 0/2 — 2x4H cue + LEFT JOIN review fix, re-review pending) · "4H kaina" column (between O and P) · "kiek 4H" count row · new filter "Neužsakytos 4 rankos" · Call-view indicators (annotated 5× in the deck) · money shown at shipment · survives report export.
VDT-3409HD flowBlocked (manual 4H write BILLS — 5 questions posted) · TO-BE: only HD may add 4H, with traceability (coordinate with the audit-log fast-follow + VDT-3395) · per-pack "+4H" action · shipment-level vs per-pack data-model question for sys arch.
VDT-3410courierCode review (#552 716fcdcf 1/2 ✓ · #556 5a3cec1e · venicourier #3 1/2 ✓ · vpdriver-api #1 declined — system dead since 2020) · Route-map stop bubbles: green = 4H ordered in stop, red = 4H-weight present but unordered · red weight numbers · expanded stop shows which shipments carry 4H packs · bigger 4H marker on the stop card (white-on-violet when ordered) · scanner views.
VDT-3411commsTo Do (digest proposal awaits Product confirm) · Automatic notification to non-AUTO clients on over-threshold packages (channel/trigger/frequency TBD; coordinate with the pre-flip un-strip comms).
VDT-3412decisionsDone · Q1–Q4 answered 2026-08-05 (table below) — remaining: correct the BRD text/deck to match, then close.

Q1–Q4 all answered 2026-08-05

#QuestionAnswer (2026-08-05)
Q1Default direction — BRD/deck said "automatinis (default)", conflicting with the 2026-07-31 ruling.MANUAL is default — per last week's ruling; Sales opts clients in via kl_4rp_auto. BRD wording to be corrected to "rankinis (default) / automatinis".
Q2Threshold wording — deck said "virš 25 kg LT / 30 kg LV·EE" vs implemented floors.Inclusive floors confirmed — exactly 26.00 kg LT / 31.00 kg LV·EE qualifies (25.99 → no); doubling stays 50–75 / 60–90. BRD to say "nuo 26 / nuo 31 kg imtinai".
Q3Tariff default — deck said 15 € among four competing numbers.14 € 4H / 28 € 2×4H — resolved by Evelina's 2026-08-03 answer; the deck's 15 € is superseded. (Any kain_4rp DB-default alignment = separate SQL → DB_changes.)
Q4Configurability — deck proposed per-country weight limits as editable Price list rows.Fixed weights for now — bands stay code constants shared by cron / go-import / siunta / veniship; tariff remains per-price-list via the existing kain_4rp row.

Adversarial review — 2026-08-01 (pakas #394 + VDT-3384 fold)

SeverityFindingFix
#394 blockers (pre-push / pre-prod)
Fixed 08-01Both local commits carried Co-authored-by: Cursor trailersAmended — branch rewritten to a71cff6c · a37ceb05, trailers gone
In reviewPublished venipak-helper 0.8.2 is scalar-only (Price.php:699-703); country-aware doubling exists only as an untracked local vendor patch; no composer.lock, pipelines run composer update → deploy silently reverts and LV/EE 50–60 kg double-chargePR #43 open (08-02) — two-file patch off the 0.8.2 tag; after merge: tag 0.8.3 → cherry-pick → 0.9.1 → pakas pin ^0.8.3. Release stays a promotion gate
Fixed 08-01Pallet exclusion was documented but not wired. Product 2026-08-01: "4H is for weighted parcels only — not PUDO, not pallets."Wired — pack_paletes_tipas = '0' on the cron pack JOIN + e2e pallet row (commit 1529e793; suite 3/3, 35 asserts)
Fixed 08-01PR #394 body stale — no VDT-3384 / default MANUAL; still cited 80 kg doubling, ceiling-less bandsBody rewritten at push (incl. "apply VDT-3384.sql before/with deploy")
#394 should-fix
Should-fixScalar 80→50 makes 3 country-blind call sites print "2x4 hands" for LV/EE 50–60 kg (inc.siuntos.nurodymai.php:89 + 2 courier print lists)Country-aware low-limit helper at the 3 sites
Fixed 08-02Test gaps: no absent-payer row; tripwire not extended to tbl_klientai shadow; seed UPDATE unverifiedClosed in 7c94a2ad — test hardening + seed verification SELECT (+ the bootstrap cred-guard fix that explained the 9 "pre-existing" PPScheduleTest errors)
Fixed 08-01Deploy order (SQL before cron) documented only in one Jira comment; branch was 2 commits behind origin/dev (phantom VDT-2567 diff)dev merged in before push (4bafe84a); deploy-order note in PR body + wiki
Verified clean
ClearedUnit suite zero new regressions vs baseline (same 9 pre-existing PPScheduleTest errors) · 4H 32/32 · Pack4rpCronTest 3/3 incl. MANUAL skip (real PHP 7.4.33 + MySQL 5.6) · seed list = old dev whitelist exactly · no hardcoded IN(...) anywhere · cron fail-closed if SQL lags · client UI writeback / ACL / langs / PHP 7.4 syntax all clean
Product one-liners needed (confirmed gaps, not #394 code bugs)
Openpack_weight at cron time is client-declared until terminal weigh (accept, or gate on pack_weight_ok='1'?) · "doubles ≥51" wording vs strict >50 for fractional kg. Resolved 2026-08-03: re-weigh clearing is Product-required Phase-1 scope → VDT-3395 (flip gate)

Decisions

IDDecisionOwnerStatusOutcome
Programme / HF+LW
OD-3HF package-count triggerProductResolvedStrictly >20 (BRD v17).
OD-25LW billing basisProductResolvedBillable only when executed + valid photo.
OD-4HF pricing model & amountProduct + FinanceResolvedSame as LW — LT 6.60 / LV 7.00 / EE 8.20 € / 100 kg. Configurable, not hardcoded. (A. Kvaraciejus 2026-07-22)
OD-8LW rates + unitProduct + FinanceResolvedUnit = per 100 kg. Rates LT 6.60 / LV 7.00 / EE 8.20. Courier bonus 0.03 €/kg. Final for programming; adjustable later.
OD-27HF on OOH / pickup / lockerProductResolvedHF excluded on OOH / PP / locker (call 2026-07-26 · #110151).
OD-5Canonical pallet signalProduct + EngOpenpack_paletes_tipas; per-package vs per-shipment aggregation TBD.
4H Phase 1
EE bandEffective EE thresholdProductResolved31 kg (not Confluence “EE 25”).
CeilingsAuto-4H upper bandsEng + ProductIn PRsLT ≤75 · LV/EE ≤90 (includes 2×4H). Doubling LT>50 / LV·EE>60. Legacy 80/100 rejected (PM 2026-07-30).
Q14Cron: drop payers · posti_service1 · drop volume · both-countryProductYES 2026-07-30Eligibility YES. Default auto-for-all superseded 2026-07-31.
Client modePAKAS kl_4rp_auto AUTO/MANUALSales + EngIn #394 · pushedDefault MANUAL; Sales → AUTO (save+render behind kl_edit_plius per P3 ruling 2026-08-03); cron only if AUTO; seed legacy 4 (four-vs-six open with Sales). Review-verified 2026-08-01. Blocks LT flip.
Single writerAuto-4H writers all gate on the client-card switchUser rulingExecutedRuled 2026-08-02: don't park — amend. Done across all channels: siunta aa31edc3 and go-import 7fc0030 gate creation-time auto-4H on kl_4rp_auto; veniship ships explicit-only (no read path — pakas cron is the sole AUTO writer for its traffic). Manual/declared paths unchanged. Recorded on VDT-3204/3202 (c.111508/111509).
Force-4HClient rp4=1 without allowlist rejectProductPolicyWave-1 = monitored override (MANUAL clients).
GeographyFirst enable waveProduct + OpsSettledLT all zones via allowlist — after client-mode gate.

P0 architecture — resolved

LW data model ADR 2026-07-22

Resolves the VDT-3345 ↔ VDT-3346 conflict (extend vs new table). Split by concern:

  • siunt_lw_order — ordered flag on tbl_siuntos (needs ALTER window)
  • NEW append-only InnoDB tbl_siunt_lw_attempt — execution / photo / bonus authority
  • tbl_siunt_charge_works not extended — stays legacy scalar capture
  • billable = ordered & executed & photo-valid & eligible

Still blocked for HF/LW build on ALTER window + residual ODs (e.g. OD-5), not on OD-4/8/27.

Research spikes · VDT-3344–3350

TicketFocusStatusState / blocker
VDT-3344LW scanner ownershipIn ProgressSole writer mapped. Ops: device-app + DDL owner.
VDT-3345LW lifecycle / schema (P0)In ProgressADR resolved. Blocked: ALTER window, schema authority. OD-8 answered.
VDT-3346Eligibility→billing SM (P0)In ProgressState machine + D8 fence pinned. Ownership ratification.
VDT-3347Terminal weight re-evalIn ProgressLate-correction trigger policy (Product+Ops).
VDT-3348Pallet + count boundaryIn ProgressOD-3 resolved. Blocked: OD-5.
VDT-3349HF pricing modelUnblockedOD-4 answered (same €/100 kg as LW). Implement when 4H wave allows; still needs ALTER/ownership sequencing.
VDT-3350Combinatorial matrixIn ProgressOD-27 answered. Residual: OD-13 / 5 / 11.

Test groundwork shipped (HF/LW · Track A)

Wave 1 7 files

Characterization — locks current behavior.

  • charge_works write/read · ODKU LWW
  • entity-clone · split derivation
  • pricing components

Wave 2 · HF 6 files

Applicability oracle + guards.

  • HF never under Nurodymai
  • reset-on-split/return · provenance

Wave 3 · LW 1 file

Ordered-eligibility oracle on siunt_lw_order.

  • >350 kg block · photo billable rule

PR #516 parked

Test-only HF/LW suite (head 8bcfde19) — not required for 4H enable. Needs its refresh before merge (7-param call fix · 350→250 kg · ADR docblock relabels); merge when Track A resumes. Details: briefing §9.

Tracking & artifacts

What’s next

4H path to the LT flip critical path

Dev lane done 08-11 (#563/#152 merged, tail declined, 0.9.2 tagged). Dev auto-deployed by pipelines (pakas #610 · siunta #214) · venicourier #3: repo ruled courier-side 08-15 → handed over (adopt-or-decline = courier team/owner) · live dev ALTER s4rp_user_id→INT(8) done 08-12 · VDT-3396 re-raise BUILT 08-12 (3 release-based branches, gated, PRs at the UAT window) · then, on the owner's word only (current ruling: nothing beyond dev): UAT deploys the 4h-release branches (2–3 wk soak) → master PRs (2 appr.) → prod deploy with VDT-3384.sql + VDT-3395.sql → tariff seeding VDT-3415 → LT posti_service1 flip (VDT-3413).

HF/LW build after 4H

OD-4/8/27 answered — remaining: OD-5, ALTER window, ownership, then implement using €/100 kg HF=LW rates.

PR #516 not on 4H path

Keep parked until HF/LW implementation wave; do not block 4H enable on it.

Step log

  1. 2026-07-18 → 22
    Research, ADR, spikes, PR #516
    CONTRACT / MASTER-PLAN; LW attempt table ADR; VDT-3344–3350 deliverables; characterization suite under review.
  2. 2026-07-22
    OD status corrected; decision requests posted
    OD-4/8/27 marked open pending rulings; epic comment 109412; VDT-3203 validation + Q14 ask.
  3. 2026-07-26
    Product call — OD-27 + LW definition
    HF excluded OOH/PP/locker; LW = indoor or depallet at pallet; 4H-first rollout.
  4. 2026-07-27–28
    4H readiness + LT-zones prep
    Allowlist mechanism grounded; EE=31 locked; pakas #394 rebased 4H-only.
  5. 2026-07-22 (tariffs) / recorded 07-29
    OD-4 / OD-8 answered
    LW rates LT 6.60 / LV 7.00 / EE 8.20 €/100 kg; HF = same; bonus 0.03 €/kg; configurable.
  6. 2026-07-29
    Multi-model first-go audit + Phase-1 push
    Ceilings + sender gates landed; PRs #394/#90/#49 pushed; Jira/PR descriptions refreshed; exec enablement HTML published.
  7. 2026-07-30
    Q14 YES — Evelina on VDT-3203
    OD-15/16/posti_service1/both-country signed. Follow-ups: Sales toggle, physical weight, terminal re-weigh, LT zone data owner, 2× pricing wave.
  8. 2026-07-30 PM
    PM corrections — tiers, doubling, LW wording
    2×4H kept; Price doubling 51/61 not 80; hard stop 75/90; pallet excludes 4H; both-country gate; LW = driveable point; HF/LW unify 250 kg. HTML: .workflow/4h-pm-corrections-2026-07-30.html
  9. 2026-07-30
    Status board refresh
    This page updated: completed ODs folded in; 4H enable path vs HF/LW park clarified.
  10. 2026-07-31
    Default MANUAL locked (Sales)
    Client card AUTO/MANUAL; cron only AUTO; legacy 4 → seed; LT flip blocked until gate. Plan: 4H-CLIENT-AUTO-MANUAL-PLAN.md
  11. 2026-07-31 PM
    VDT-3384 + doubling folded into #394 branch
    Local commits 8ca6cd68 (kl_4rp_auto + cron JOIN + client UI + tests) and 2eda3a23 (doubling LT>50 / LV·EE>60, bands through 75/90). Push pending OK.
  12. 2026-08-01
    Adversarial review — #394 merge-ready-with-fixes
    4 parallel hostile reviewers + chair verification. Suites green on real 7.4.33 (unit zero new regressions; e2e 3/3 incl. MANUAL skip vs MySQL 5.6). Blockers: Cursor trailers, helper-0.8.2 scalar trap, pallet wire, stale PR body. #90/#49 flagged not-ready (bands 50/60; client-blind auto-apply). Wiki + this board refreshed.
  13. 2026-08-01 PM
    Product ruling + two blockers fixed on-branch
    Ruling: 4H = weighted parcels only, never PUDO/pallets. Pallet skip wired into cron (pack_paletes_tipas='0') + e2e row; Cursor trailers amended. Branch rewritten: a71cff6c · a37ceb05 · 1529e793 (ahead 3, push pending). Suites re-verified: unit zero new, integration 3/3 (35 asserts).
  14. 2026-08-01 EVE
    #394 pushed (69c91de1 → d0fb8634)
    Push OK given; dev merged in; gate green (suites + veni-guard 42 ran / 0 blocking, VDT-3384 fold sanctioned); PR body rewritten; Jira VDT-3203 (FVS cases f–k) + VDT-3384 updated.
  15. 2026-08-01 NIGHT
    Full-programme tournament — champ-B path wins
    15 agents (8 reviewers · 3 champion plans · 3 judges · critic), 2.76M tokens, zero fabrications. Winner: fastest-to-LT-enable skeleton + transplants. Key finds: helper 0.8.2 AND 0.9.0 scalar-only in BOTH Price.php and the parcel-label DirectionProvider (release must patch both, cut from 0.8.2 tag); go-ws + gocourier DO track composer.locks (gocourier pins helper 0.3.16); exposure opens at the prod release_* tag, not the flip; siblings get PARKED not raced; seeded-4 vs Confluence's six "permanent clients" conflict needs a Sales answer; promotion payload = 90 commits/6 tickets → vehicle decision. Corpus: analysis/vdt-4h-p2p3/tournament-2026-08-01/ (SYNTHESIS.md). #394 follow-up fixes committed locally (7c94a2ad, push pending OK); Jira evidence corrected (c.111440).
  16. 2026-08-02
    Decisions executed: push · helper branch · asks · siunta amendment
    User rulings: push 7c94a2ad (done — #394 head), DON'T park siblings — amend to respect the client-card switch, helper branch prep, asks both routed. Delivered: #394 pushed + gate green; venipak-helper branch VDT-3203 @ e868978 off the 0.8.2 tag (both files + tests; helper suite 170 green; push-ready); asks on Jira (c.111506/507/508/509) + .workflow/4h-product-asks-2026-08-02.md; siunta #90 amendment implemented + verified + committed local (aa31edc3).
  17. 2026-08-02 PM
    siunta #90 + helper PR pushed
    aa31edc3 → PR #90 (body + Jira c.111510 refreshed; Playwright gate deferred to pre-merge — VPN down). venipak-helper branch pushed + PR #43 opened (VDT-3203 → master, two-file patch off the 0.8.2 tag, 170 tests green).
  18. 2026-08-02 EVE → 08-03
    go-import #49 amended + pushed · veniship #743 split + pushed — all four PRs live
    #49: payer-gated auto-4H at the import_helper chokepoint + bands 26–75/31–90, rebased onto dev, suite 57/64 + veni-guard 42/0; pushed; composer fully out of the PR per review (suite via phpunit PHAR; head 7fc0030, 5 files, one production file); PR body + Jira refreshed. #743: explicit-request-only split (auto-detect dropped — veniship has no kl_4rp_auto read path; pakas cron = sole AUTO writer), Blockers A/B fixed, EE 31; 2-verifier adversarial round found + fixed a PR-original global-rates service leak; confirm round CONFIRMED-SOUND with mutation testing; suite 210/743 baseline-identical; pushed 99f5a8b, PR retargeted dev→master; Jira c.111674 (FVS).
  19. 2026-08-03
    Evelina answered the asks (VDT-3203 c.111596) → VDT-3395 + P3 amend
    P1 cleared: 26–30 kg LT bills the same flat 4H LT (26–50) price, no separate tier — but she states tariff 14 € 4H / 28 € 2×4H (vs programme 6/12 € vs kain_4rp default 50) → Finance reconciliation before seed. P4 ruled Phase-1 scope (re-weigh must clear/re-flag siunt_4rp — billing cannot enable without it) → VDT-3395 created, joins the flip gate. P3: commercial field → kl_4rp_auto gated behind kl_edit_plius on the #394 branch (commit 425bf63c, pushed 2026-08-03; suites baseline-green, veni-guard 42/0). P5/P11/cron routed to Dainius/Mindaugas; seed four-vs-six still open with Sales.
  20. 2026-08-05 EVE
    Dev-exercise findings triaged: A fixed + PR #57 · B ticketed/blocked · LV downgraded
    Three tickets filed under the 4H parent epic VDT-3209 (A/B) + standalone (LV). VDT-3403: explicit four_hands=0 repro'd pre-fix (shipment 32820245 → 1), fixed via parse-time four_hands_declared + declaration-guarded auto-apply (mirrors siunta's isset), fresh-eyes adversarial review folded in (empty tag = absent, so always-emit integrations keep auto-apply); 70 phpunit green incl. offline regression pin, e2e post-fix → 0 (32820247), veni-guard 42/0; pushed, PR #57 → dev with reviewers Gediminas · Vasilij · Andrius P. · Arnoldas. VDT-3404: corrected analysis — import vs cron are two different name heuristics (comma-anchored vs substring); Confluence/Jira sweep confirms P11's mechanism half was delegated to PO/sys arch and never ruled; no code until answered. VDT-3405: LV "5-digit table" = ZEROFILL display artifact; validator matches official LV-NNNN and real 4-digit traffic; residual = prod error-24 log check. veniship audited clean for the A-pattern (no auto-4H path). Dev restored to exactly 4 AUTO clients.
  21. 2026-08-05 NIGHT
    Phase 2 (UI & fine-tuning) split off the BRD visuals deck — epic VDT-3406 + 6 tickets
    Reviewed "Keturių rankų paslauga 4H.vsdx" (48 annotations / 36 screenshots) + the BRD price-list note. Epic VDT-3406 with children: VDT-3407 siunta UI · VDT-3408 pakas reports/filters/Call · VDT-3409 HD-only assignment + traceability · VDT-3410 courier route/stop visibility · VDT-3411 client notification · VDT-3412 decisions carrier. Deck's doubling + above-ceiling text matches shipped behaviour exactly; the four conflicts were quarantined in VDT-3412 so the visibility work isn't blocked on pricing. Same evening: Q1–Q4 all answered (MANUAL default · 26/31 inclusive · 14/28 € · fixed weights for now) — VDT-3412 unblocked, remaining action is the BRD text correction.
  22. 2026-08-06 NIGHT
    Phase 2 implemented via multi-agent fleet: 3 tickets coded + gated, 1 blocked, 1 proposal
    21-agent plan fleet (6 mappers · 5 designers · 10 adversarial reviewers, all SOUND-WITH-FIXES) then chair implementation with every blocking finding folded in. VDT-3407 (siunta: Skaičiuoti notice, per-pack 4H/no-4H badges, tooltip reword) — 90 phpunit green, new 5/5 Playwright spec, smoke+functional 45/47 (1 pre-existing MH-picker iframe fail + its dependent skip; stress project excluded from gates), veni-guard 42/0. VDT-3408 (pakas reports: 4H kaina column, kiek-4H totals, Neužsakytos-4-rankos filter, opt-in indicators; fabricated-price fallback dropped, shared DataTables columns made page-overridable) — 111 phpunit green in ss1-web, live render verified on dev data (filter returned exactly the 13 predicted shipments), veni-guard 42/0. VDT-3410 (routing map: green/red stop bubbles with red-wins precedence, badges, red weights, both payload builders) — 111 phpunit green incl. temp-shadow boundary test, live JSON verified, veni-guard 42/0. All three pushed 2026-08-06 with 4 reviewers each: siunta #146 · pakas #551 · pakas #552 — each needs 2 approvals. VDT-3409 BLOCKED: review proved the manual 4H flag write BILLS (price_recount/costs2 have no gates) — 5 questions posted. VDT-3411: decision-ready email-digest proposal posted. Dev residue cleaned (61 orphaned stress/smoke manifests deleted via the app). 2026-08-06: VDT-3413 flip ticket filed (wave-by-zone SQL + rollback, Blocked on the gate) and its dev offshoot VDT-3414 executed — ALL 17 249 LT postcodes 4H-orderable on dev (snapshot backup kept; no tariff work).
  23. 2026-08-06 PM
    VDT-3410 courier follow-ups coded + gated (3 repos) · VDT-3415 tariff ticket filed
    Session-start verify: dev fully enabled (zones 1/2/3/4/11 = 6058/2989/853/7333/16, all on) · kl_4rp_auto = 4 AUTO clients · VDT-3413 still has no pasted uat/prod counts — flagged on the ticket. All four PRs (#57/#146/#551/#552): zero comments, zero approvals yet. Follow-ups (later pushed same day: pakas #556 · venicourier #3 · vpdriver-api #1): pakas VDT-3410-routing-fields — get_vair_shipments emits shipment_4rp/shipment_4rp_weight (same predicate as the map builders; break/lading default false) + FourHandsVpdriverDriftTest; suite 107 green in ss1-web, veni-guard 42/0, live JSON on vid 3665 matches independent SQL exactly (1 ordered + 6 qualifying). venicourier VDT-3410 (→ master; repo has no dev) — stop-card white-bold 4H chip on violet / black-bold "no 4H", per-shipment chips in the marker info-window, 14px per deck note; veni-guard 42/0 (build via pipeline only). vpdriver-api VDT-3410 (→ dev; note dev is 3 commits behind master, SS-288 only) — 4rp_qualifies beside 4rp in courierme.php, verbatim bands + guards, php-l clean, veni-guard 42/0. VDT-3415 DB_changes ticket: kain_4rp 50€-default → 14€ on Baltic-domestic lanes with backup/rollback + exposure probe (dev: 214 rows / 25 clients; ~24.6k zero-priced rows flagged for Finance).
  24. 2026-08-06 EVE
    VDT-3395 designed + built + 5-CLI peer-reviewed → pakas PR #557 · follow-up PRs pushed
    VDT-3395 (flip-gate item, Product P4): terminal re-weigh hook re-runs the cron predicate with no date window — clears auto-set flags that no longer weight-qualify, re-flags AUTO payers that cross the floor; ordered/declared 4H always survives (P1). Adversarial peer review by five independent CLIs (claude · codex · grok · agy · kimi) caught two real defects the local gates missed: (1) pack-keyed provenance breaks because packs MOVE between shipments (siunt-edit ON-DUPLICATE-KEY reassignment, SplitLatePackageCommand) — fixed with a new shipment-keyed tbl_log_siunt_4rp (🚩 DB_changes; DDL executed on dev, must run on uat/prod with the deploy; tbl_log_pack_edit keeps per-pack display rows; split command copies auto provenance); (2) flip-before-log ordering — now log-first with abort-on-failure and flag-conditional UPDATEs. Triaged-not-coded (reasoning on the ticket): rp4-already-checked confirmation gap (→ VDT-3409 +4H action), millisecond MyISAM cron windows. Gate: FourHandsReweighTest 13/13 (incl. pack-reassignment + forced log-failure aborts), full ss1-web suite 119/119, veni-guard 42/0, live weigh-form check on dev (set→clear, both log tables, all data restored). Same evening: VDT-3410 follow-ups pushed — pakas #556, venicourier #3 (→ master), vpdriver-api #1 (→ dev) — and VDT-3415 cross-linked on VDT-3413. Board total: 8 open PRs, all 0/2.
  25. 2026-08-06 NIGHT
    Second 5-CLI adversarial round — ALL 8 PRs as one system → 3 fixes pushed · VDT-3423 filed
    With reviewers still at 0/2 everywhere, the five CLIs (claude · codex · grok · agy · kimi) re-ran adversarially over the whole 8-PR set. 18 findings → 3 confirmed (each verified against the code first): (1) routing-map warn aggregates counted ordered shipments — shipment_4rp_weight is true for ordered in-band shipments too, so every all-ordered stop/cluster rendered red instead of green, and the unit test pinned the broken precedence (codex + grok + claude independently) → fixed, warn now counts only fhw && !fh, #552 @ 716fcdcf; (2) re-weigh set-path re-imposed 4H over an operator's manual decline — an unticked rp4 (logged manual 1→0) was auto re-flagged and re-billed at the next weigh (claude + kimi) → set-branch now skips when the newest provenance row is a manual set-to-0, + split-command provenance-copy failures are logged (codex), #557 @ 730c36e9; (3) opt-in report indicator silently dropped the legacy "2x4 hands" cue (kimi) → restored country-aware as red-bold 2x4H above LT>50 / LV·EE>60, #551 @ 6a5824d2. Also #556 @ 5a3cec1e: source-pin test for the venicourier payload keys. Gates per branch: ss1-web suites green + veni-guard 42/0 (VPN dropped mid-run → integration vs veniguard-local-testdb MySQL 5.6; PPSchedule excluded per the known VPN-down workaround). 10 findings disproven (duplicate-ID if/else, mysqli string types, ee48 GET flow, skaina_siunt_id UNIQUE index, lowercase countries, …). One structural gap survives as VDT-3423 (Option A, epic VDT-3209): creation-time auto-apply in go-import/siunta writes no tbl_log_siunt_4rp provenance, so re-weigh can't clear creation-set auto flags and import-time explicit declines stay invisible to pakas — both repos must write provenance rows (incl. a manual-decline row, closing the VDT-3403 mirror case); the shared-table ownership / veni-guard owner-map call needs sys-arch confirm before coding.
  26. 2026-08-06 LATE
    Jira ↔ PR reconciliation + board/wiki refresh
    All 23 4H tickets audited against the Bitbucket PR set and dev reality. Fixed: VDT-3395 was still To Do with PR #557 open — walked To Do → In Progress → Code review; VDT-3406 epic To Do with three children in Code review — moved In Progress; round-2 evidence comments with new heads + validation steps posted on VDT-3395 (c.112520), VDT-3408 (c.112521), VDT-3410 (c.112522). Verified correct as-is: 3202/3203/3204/3205/3384 Testing-in-DEV (Phase 1 merged + dev-verified), 3403 Code review, 3404/3409 Blocked, 3405/3411/3415/3423 To Do, 3412 Done, 3413 In Progress, 3414 Testing-in-DEV. Wiki (program-map ticket tree + open-PR table incl. the 8-PR block with heads, merge order and the #551×#557 conflict note; gates status line → 2026-08-06 NIGHT) rebuilt from sources and republished alongside this board.
  27. 2026-08-08
    Phase III dev wave: VDT-3396 pushed across 4 repos (no reviewers yet) · 2 stacked fixes built · Jira drafts ready
    Helper centralization implemented end-to-end: venipak-helper e318c19 ships FourHandsWeightBands (LT 26/50/75 · LV/EE 31/60/90 defaults, $config_2x4rp_* globals stay as deliberate override) with the 0.9.2 version bump INSIDE the PR (release-recipe lesson); pakas 8a874dfa / siunta 1b3845a5 / go-import 8864866 delete their local band definitions, delegate to the helper and repin ^0.9.2 (pakas resolution dry-run-proven on 7.4.33; JS mirror byte-identity proven). PRs #46 / #561 / #148 / #58 opened without reviewers — Phase-2 approvals first. Gates: suites 201/113/92/58 all green vs venipak_dev, Playwright siunta 45✓ / 1 pre-existing pudo-picker env fail (VDT-3250), veni-guard 42/0 ×6, 3-CLI adversarial review (agy SOUND · grok SOUND-WITH-FIXES → pack_edit wiring pin adopted · codex disproved). #557-stacked fixes committed LOCAL: pack_4rp cron honours newest manual decline (b7db5a85, +decline e2e case) and pack_edit re-evaluates 4H (83f99bbb, +hook e2e + source pin). Jira executed on owner OK: epic VDT-3426 "4H Phase 3 — consolidation & hardening" with new children VDT-3427 (cron manual-decline) / VDT-3428 (pack_edit re-eval) / VDT-3429 (display coherence), re-parented VDT-3396/3404/3409/3423 (VDT-3411 pending Product); VDT-3396 walked To Do → Code review with the full PR map (c.112918); 3427/3428 In Progress (code ready, PRs after #557). go-import API suite scoped and green: Baltic gate 36/36 vs godev; the FI/Matkahuolto specs (finland.spec + pudo.spec) are describe.skip with an in-file note — go-import serves Baltic-domestic shipments only, the server correctly rejects FI (code 150), FI/MH coverage belongs to the veniship/FAST track (recipe: creds = siunta admin, GO_IMPORT_USER_ID=20579). Surfaced pre-existing: pack_edit POST bypasses edit-window guards (ruling pending, noted in VDT-3428).
  28. 2026-08-07 NIGHT
    Ship wave: #146 + #552 merged · #147 opened · fixes pushed
    Pre-ship 4-CLI adversarial pass over the exact ship plan (3 diffs + merge order): grok/agy SAFE-TO-SHIP, codex SHIP-WITH-FIXES (finding = the documented log-first trade-off, mirrored from the cron design — noted on PR #557, no code change), kimi crashed. Executed: pakas #557 → 08324197 (editors log-first with loud abort) and #551 → 81f95fae (RU keys) pushed with PR comments; siunta #146 MERGED (dev e8ec98b4) and pakas #552 MERGED (dev faaef868) after fresh 2/2+head re-poll; siunta PR #147 created off post-merge dev (cherry-pick 3a44ec68: VERSION 49→50 + badge repaints incl. envelope shortcut; 91/91 vs dev + veni-guard 42/0). venicourier #3 deliberately NOT merged (gate: #556 merged AND deployed; #556 at 1/2). Dev DB: tbl_log_siunt_4rp DDL byte-verified vs inc/sql/VDT-3395.sql, rollback snapshot tbl_log_siunt_4rp_bak_20260807. VDT-3396: Phase-III decision + duplication map + 2 deferred bug fixes posted (c.112880).
  29. 2026-08-07 EVE
    Pre-merge 5-CLI train review + FVS build-out
    Merge train (pakas dev 1473f1e0 + #552 + #556 + #551 + #557 keep-both; siunta #146; venicourier #3) reviewed as one system by claude/codex/grok/agy (kimi crashed ×2). Verdicts: codex+grok UNSOUND · agy+claude SOUND-WITH-FIXES. Verified real & FIXED (local commits, gated, push pending OK): #557 08324197 — rp4 editors now log-first (provenance INSERT before flag UPDATE, flip reverted on log failure; consensus codex+grok+claude) + source-pin test; #146 525dc3ef — VERSION 49→50 (cached shipment_add.js silently hid the notice/badges for returning users — claude MAJOR) + badge repaint on pallet change (codex); #551 81f95fae — RU locale keys (EN fallback, nit). Disproved: 2×4H >50/>60 matches billing (PM 2026-07-30); pallet packs already excluded from the notice; EE48 columns consistent. Judgment calls flagged, not coded: cron re-flags a manual decline inside its 1-day window (pre-existing VDT-3203 monotonic design); pack_edit.php weight edits bypass the re-weigh hook. Gates: merged train 127/127 + per-branch suites green OFFLINE (local MySQL 5.6, PPSchedule excluded — VPN down; full dev-DB + Playwright re-run pending VPN). Consolidated per-env FVS drafted for all 5 tickets (incl. #557 deploy order: VDT-3395.sql BEFORE code; venicourier post-deploy chip check).
  30. 2026-08-07
    Review wave answered · vpdriver-api #1 DECLINED (dead system)
    V. Duško reviewed 6 of 8 PRs overnight: #552 + venicourier #3 approved (1/2 each); changes-requested on #146/#551/vpdriver #1. All comments verified and fixed same morning, gated (suites vs dev DB + veni-guard per branch, siunta also Playwright smoke+functional) and pushed: #146 @ 5d78ddd5 (SQL-injection fix at the getPostcodeServices chokepoint — covers the pre-existing #90 call path too; full typed signature; notice translated ET/LV/RU/PL, Product proofread requested; CSS dedupe), #551 @ 6a22506f (skaina_4rp via LEFT JOIN — UNIQUE key, 0 diffs on 500 dev shipments), #57 @ 72084e8 (static provider). 12 threaded replies posted. His "is vpdriver even used?" checked and confirmed: tbl_firebase_tokens (written only by vpdriver-api) frozen at 2020-06-11 on a DB with 2026-08 data, repo dormant since 2019-07, live scanner backend = vpcourier-api, venicourier calls only pakas jquery.routing → PR #1 declined, VDT-3410 vpdriver slice dropped (evidence on the PR + ticket c.112670). Board total: 7 open PRs.
  31. 2026-08-11
    Merge day: #152 · helper #46 + tag 0.9.2 · #563 with review fixes · tail declined
    Morning poll: Vasilij approved #563 ("su sąlyga, kad tai viskas bus sutvarkyta"), #152 and helper #46 → all 2/2. Executed on per-action OKs: #152 MERGED (0c0d90c) + #147 declined; helper #46 MERGED (e885df4) + annotated tag 0.9.2 on 16e74ef (0.9.1 recipe) pushed. Vasilij's two conditions built on the release branch first (lane discipline: release stays canonical, sync only consumes): cd2760ad — all 12 fourHands*/getFourHands* helpers moved byte-identically into new inc/inc.function.4rp.php (inc.function.log.php precedent, required from inc.function.php); 6f66dc32 — s4rp_user_id INT(6)→INT(8). Release→sync merge 41fc7c4d (sole conflict = the known pure block-reorder; resolved file byte-identical to release). Gates ×2 branches: dev-DB 136/136 + offline 127/127 + veni-guard 42/0; 5-CLI adversarial review codex/agy/grok/kimi = 4× SOUND (claude cut off pre-verdict, all its inline checks positive; findings only cosmetic NITs). Both branches pushed, approvals survived, #563 MERGED (5572933), #557/#551/#556 declined with cross-links. Post-merge: pakas dev 136/136, siunta dev 91/91. Owner ruling recorded: nothing beyond dev — release branches editable, no PRs, no merges. Jira: PR-map + state comments on all 11 4H tickets; closing LT note on #563.
  32. 2026-08-12
    INT(8) on live dev · dev auto-deploy discovered · VDT-3396 re-raise built · full matrix re-validated
    Live dev ALTER executed (s4rp_user_id int(6)→int(8) unsigned, 0-row table, before/after verified; VDT-3395 c.113457). Discovery: pakas/siunta branch pipelines auto-deploy dev merges ("Deploy to test", runs #610/#214 SUCCESSFUL) — venicourier #3's gate is therefore fully satisfied; re-approval requested on the PR. Jira: 3395/3403/3407/3408 walked to Testing in DEV ENV. VDT-3396 re-raise built (Option 1 — least PRs): single cherry-picks of the reviewed dev commits onto release-based branches — pakas b26c9c08 (band delegation adapted into the split inc.function.4rp.php), siunta e7633161, go-import 4e30753 (both-added test conflict, keep-both); ^0.9.2 pins with composer dry-run proof on 7.4.33 in each repo (go-import tracks no lock — deploy resolves from composer.json); suites 137/92/71 vs venipak_dev + veni-guard 42/0 ×3; local-only until the UAT window. Full dev matrix re-run for the tests page: pakas 136/136 · siunta 91/91 · go-import 70/70 (PHPUnit vs venipak_dev) · go-import API 36/36 (8 FI/MH by-design skips) · siunta Playwright 45✓ + the constant PUDO-UI-1 env-fail (VDT-3250). One self-inflicted scare: syncing only the vendored FourHandsWeightBands to 0.9.2 broke the local labs' 4H price path (vendored pre-rename Price.php calls doublingLowLimitFor) — fixed by syncing Price.php + DirectionProvider.php too; NOT a dev issue (server vendors are composer-consistent). go-import API false alarm: TEST_ENV=dev reads .env.dev (no creds) — the suite's real env is TEST_ENV=local.
  33. 2026-08-12 LATE
    BRD deck re-audit → gap table · scanner scope-out to VDT-3435 · UI work parked
    All 47 vsdx annotations re-extracted with corrected spatial anchoring and walked against merged dev. Key corrections vs the 08-05 reading: „Prie Call" asks = the mobile scanner app (not pakas); „4H kaina O–P" = the siunta client report export; „kiek 4H" = the venicourier info-window; „Neužsakytos 4 rankos" = report_all's filter. 8 asks confirmed delivered in place · venicourier #3 in flight · 7 gaps catalogued (4 wrong-surface). Scanner cluster handed to VDT-3435 (Rapolas) — their spec shows ordered-4H only, no qualifying-unordered marker, so no 4rp_qualifies signal is needed; agreed contract = two new flags 4H/4H_applied with our watch-items (column home, writer, billing ordered-vs-applied, veni-guard owner map, DDL train) recorded. Remaining gaps grouped A–D in GAP-BREAKDOWN.md and PARKED by owner decision; documented on VDT-3406 (c.114171).
  34. — next
    approvals: PR #57 + #146 + #551 + #552 (2 each) · VDT-3395 design · tariff seeding (kain_4rp 14 €) · promotion vehicle · flip decision 2026-08-06: VDT-3413 unblocked — ALL LT postcodes on uat+prod in one statement (legacy pricing as-is; 50 € default exposure flagged), SQL ticket-ready for the DB run
    Helper PR #43 review → tag 0.8.3 + cherry-pick → 0.9.1 → pakas pin ^0.8.3; approvals on #394/#90/#49/#743; VPN-deferred suites (siunta Playwright, go-import API, demo probes); VDT-3395 provenance design + build; 14/28-vs-6/12 tariff answer (Finance); seed list (Sales); promotion-vehicle decision; SQL-before-code incl. dev+demo; censuses/comms; wave-by-zone LT flip.

History — earlier status entries

Superseded status blocks, newest first — moved here from the top of the page 2026-08-28; content unchanged.

Previously: 2026-08-22 · UAT CUT RAISED: three fresh master-based branches PR'd to uat — pakas #618 · siunta #158 · go-import #64; all conflict-free, all gates green on the merge result. veniship VDT-3205 EXCLUDED from this window (no international gate in the live 4H path; 1 approval; absent from the UAT corpus). DDL ladder = VDT-3384.sql → VDT-3395.sql, before any code. Earlier note follows.
Previously: 2026-08-12 LATE · BRD DECK RE-AUDIT: all 47 vsdx annotations re-anchored and compared against the merged dev UI (analysis/vdt-4h-p2p3/deck-recheck-2026-08-12/GAP-BREAKDOWN.md; Jira c.114171 on VDT-3406). 8 asks delivered in place · 1 in flight (venicourier #3) · 7 gaps identified, 4 of them "right feature, wrong surface": the „4H kaina" column belongs to the siunta client report + export (not the pakas 12m report), „Neužsakytos 4 rankos" belongs to report_all's filter (not a 12m sort), „kiek 4H" belongs to the venicourier info-window, and the no-4H indicator is missing from report_all/Help Desk/pack_status; plus the parcel-label „NO 4hands" ask (Product sign-off needed). All parked by owner decision — no code changes. SCOPE HANDOFF: the whole scanner cluster → VDT-3435 (Rapolas; shows ordered-4H only — the qualifying-unordered marker is descoped there). Data contract agreed with the scanner team: two new flags 4H / 4H_applied — coordination questions tracked in the breakdown
Last updated: 2026-08-12 · VDT-3396 RE-RAISE BUILT on the release lane (Option 1, per-repo single cherry-picks of the reviewed dev commits, LOCAL-ONLY — PRs open when the UAT window opens): pakas VDT-3396 @ b26c9c08 (delegation adapted into inc/inc.function.4rp.php; 137/137) · siunta @ e7633161 (clean pick; 92/92) · go-import @ 4e30753 (keep-both test resolve; 71/71) — all pin ^0.9.2, composer resolution dry-run-proven on 7.4.33 per repo, veni-guard 42/0 ×3 · live dev ALTER s4rp_user_id→INT(8) EXECUTED (table 0 rows, VDT-3395 c.113457) · dev auto-deploy discovered: pakas/siunta branch pipelines deploy dev merges to the test server (runs #610/#214 SUCCESSFUL) → venicourier #3 gate SATISFIED, re-approval requested · Jira lanes aligned: 3395/3403/3407/3408 → Testing in DEV ENV · full dev test matrix re-validated 08-12 (see the tests page)
Last updated: 2026-08-11 EVE · DEV LANE CLOSED OUT: siunta #152 MERGED (0c0d90c, 2/2 Duško+Šalnis; #147 declined-superseded) · pakas #563 MERGED (5572933, 2/2 Duško+Jovaiša; #557/#551/#556 declined-superseded) — Vasilij's conditional approval satisfied pre-merge with two reviewed commits on the release branch, merged release→sync: cd2760ad (all 12 fourHands* helpers split into inc/inc.function.4rp.php, byte-identical move, log.php precedent) + 6f66dc32 (s4rp_user_id INT(6)→INT(8)); gates 136/136 dev-DB ×2 + veni-guard 0-blocking ×2 + 5-CLI adversarial review 4× SOUND · helper #46 MERGED to master (e885df4, 2/2) + tag 0.9.2 pushed (on 16e74ef, 0.9.1 recipe) — unblocks the VDT-3396 re-raise off the release branches · post-merge validation: pakas dev 136/136 · siunta dev 91/91 vs venipak_dev · RULING (Duško/owner): nothing beyond dev — release branches editable, no PRs from them, no merges; UAT/master fully parked · remaining: dev deploy → venicourier #3 (0/2, re-approve) · live dev ALTER s4rp_user_id→INT(8) · Jira: PR-map + state comments posted on all 11 4H tickets
2026-08-11 AM · BRANCH-FLOW REMEDIATION EXECUTED (2026-08-10/11, Duško ruling: branches only from master, dev never promoted): clean release branches cut from master & pushed — pakas VDT-3203-4h-release (93f626d1, 32 picks) · siunta VDT-3204-4h-release (847c15f2, 19) · go-import VDT-3202-4h-release (236d2ff, 15) + pakas VDT-3427/VDT-3428 off the release tip; every pick range-diff-identical to the reviewed originals; full dev-DB gates green (136/137/138 · 91 + Playwright · 70 + API 36/36 · veni-guard 0-blocking ×3) · go-import #57 MERGED to dev (06e5127, 2/2) · VDT-3396 excluded from the release branches (helper ^0.9.2 unsatisfiable) — dev PRs #561/#148/#58 DECLINED; helper #46 got reviewers + rename fix 16e74ef (1/2 Šalnis) · dev tail replaced by 2 sync PRs: pakas #563 (dev + release merge, tree byte-identical to the 08-07 train, 136/136; supersedes #557/#551/#556; 1/2 Jovaiša; Vasilij's 11-comment review ANSWERED 08-11 — inc.function.4rp.php split proposed, schema/naming defended via pedit/siunt_id precedents, DDL added to the PR body) · siunta #152 (clean +5/−1, 91/91; supersedes #147; 1/2 Šalnis) · venicourier #3 approvals RESET (was 2/2) — re-approve at merge time · promotion path: dev completes via #563/#152 → UAT deploys the 4h-release branches (2–3 wk soak, parked until the dev lane is clean) → master PRs (2 appr.) → prod
2026-08-08 · PHASE III DEV WAVE EXECUTED: VDT-3396 helper centralization BUILT & PUSHED across 4 repos — helper PR #46 (e318c19, FourHandsWeightBands defaults + 0.9.2 version bump in-PR per the release recipe) · pakas #561 (8a874dfa) · siunta #148 (1b3845a5) · go-import #58 (8864866) — NO reviewers attached: Phase-2 set gets approved first, reviewers added when it clears · merge order: helper → tag 0.9.2 (composer dry-run must lock 0.9.2) → app PRs (go-import + lock regen) · gates green: helper 201/201 · pakas 113/113 · siunta 92/92 + Playwright 45✓ / 1 pre-existing pudo-picker env fail (VDT-3250) · go-import 58/58 · veni-guard 42/0 on all six branches · 3-CLI adversarial review (agy SOUND · grok SOUND-WITH-FIXES→pin adopted · codex claims disproved) · #557-stacked fixes BUILT & GATED, LOCAL: cron-decline b7db5a85 (123/123) + pack_edit-reweigh 83f99bbb (124/124) — rebase after #557 merges · Jira: Phase-3 epic VDT-3426 CREATED — children VDT-3427 (cron manual-decline, In Progress) · VDT-3428 (pack_edit re-eval, In Progress) · VDT-3429 (display coherence); re-parented VDT-3396/3404/3409/3423; VDT-3411 left unparented pending Product; VDT-3396 → Code review with full PR map (c.112918) · go-import API Baltic gate GREEN 36/36 vs godev · scope contract ruled: Baltic-domestic only — FI/PL parcels, PUDO and pallets EXCLUDED (all four code+test-pinned; FI/MH specs skipped in-suite; GO_IMPORT_USER_ID=20579) · band-change hard gate stands until VDT-3396 closes · Monday QA/merge babysitting unchanged (separate convo)
Earlier state — 2026-08-22 · UAT cut raised

Three fresh branches, cut from today's master and carrying only the approved 4H payload, are PR'd to uat: pakas #618 (42 files, +2032/−47) · siunta #158 (28 files, +1764/−35) · go-import #64 (5 files, +735/−1). These replace the stale *-4h-release branches, which were cut from a master that had since moved 47 commits. All three merge conflict-free, and each PR page's diffstat now equals the real landing tree — the pakas report_status12m_view.cm_new.php conflict is resolved in the branch using dev's verbatim union. Gates on the merge result, not the branch: veni-guard 42 ran / 0 blocking on every branch · pakas 144/144 · siunta 91/91 + Playwright 48✓ · go-import 70/70 + API 36/36. Every test failure was baselined against plain origin/uat and proven pre-existing or flaky.

veniship (VDT-3205) was excluded from this UAT window — SUPERSEDED 2026-08-28, it is back in on a minimal window — branch built and green, but held local and not pushed. Three reasons: (1) 4H is excluded from international parcels as a business rule, and veniship's live 4H path enforces no destination-country gate at all — shouldApplyFourHands() excludes only pickup-point / parcel-terminal, and isInternationalShipment() is never consulted; the only country-aware code (FourHands::isRequiredByPackageWeight, LT 26 / EE 31 / LV 31) has no production callers. (2) PR #743 merged on one live approval — the second mark sits on a force-pushed-away tree where 13 of the 14 merged files differ, and must not be counted. (3) VDT-3205 appears in zero files of the UAT planning corpus: no probe, no FVS, no runbook entry. Its 4H stays dev-only while the other three move.

DDL ladder for uat — two steps, not three, and both must run before any code merges: VDT-3384.sql (MyISAM ALTER tbl_klientai, ~169k rows / 62 MB on dev — table-copy under a write lock, off-peak) then VDT-3395.sql (CREATE TABLE tbl_log_siunt_4rp). VDT-3395-auto-weighed.sql belongs to the unshipped re-weigh-origin change and is not in this release. Ordering is load-bearing: pack_4rp.php is a live cron on uat already, and its new version exits if the provenance INSERT fails — code before DDL breaks a running job.

Still open: the uat posti_service1 flip was never evidenced. VDT-3415's “live on all envs” inherits VDT-3413's decision comment, not a result; VDT-3413's own last comment says no uat/prod counts were ever pasted. Treat the uat activation as real work until the read-only probe runs (needs uat DB access — Audrius, decision D2).

Earlier state — 2026-08-11

The dev lane is complete: every line of 4H Phase-1 and Phase-2 code, plus the VDT-3395 provenance work, is merged to dev and green (pakas 136/136 · siunta 91/91 · go-import 70/70 + API 36/36). Helper 0.9.2 is tagged, unblocking the Phase-3 band-centralization re-raise. Clean master-based 4h-release branches carry the identical content for the eventual UAT → prod promotion — parked by ruling: nothing moves beyond dev until the owner opens the UAT window. What actually remains before the LT flip: deploy dev to the dev server (also gates venicourier #3) · live dev-DB ALTER (s4rp_user_id INT(8)) · tariff seeding VDT-3415 (Finance) · UAT soak · master PRs · prod deploy with VDT-3384.sql + VDT-3395.sql · then the wave-by-zone flip (VDT-3413).

Earlier state — 2026-08-05

Phase 1 is fully merged and behaviourally verified on dev. All five 4H PRs merged (pakas #394, siunta #90, go-import #49, veniship #743 — retargeted to dev after dev was realigned — and helper #43), plus both helper pins (pakas #550, siunta #145) and the helper version-field fix (#45). Helper 0.8.3 / 0.9.1 released and pinned, so a deploy can no longer silently resolve a scalar-only helper. Per-client auto-4H proven on dev with browser screenshots: identical 30 kg LT→LT shipments differ only by the client switch — MANUAL stays unflagged, AUTO is flagged; 20 kg (below floor) and 80 kg (above ceiling) correctly excluded; 55 kg hits the 2×4H tier. UI and DB agree 5/5 → test results & evidence. Remaining before LT flip: VDT-3395 re-weigh re-eval · 14/28-vs-6/12 € tariff (Finance) · seed four-vs-six (Sales) · promotion dev → uat → prod. The three dev-exercise findings are triaged (2026-08-05): defect A (explicit four_hands=0 ignored) is fixed — go-import PR #57 (VDT-3403) open to dev, gate green, 4 reviewers assigned; defect B is ticketed as VDT-3404, blocked on the P11 mechanism ruling (PO/sys arch); the LV import failure is downgraded — VDT-3405: the validator's 4-digit rule matches the official LV-NNNN format and real traffic; the "5-digit table" was a MySQL ZEROFILL display artifact.