Axlogis Project Control
MVP parity: ✅ v3.0.0 cut · 53/54 screens P3-PARITY + P4-FIELDCHECK: ✅ closed 2026-07-10 Active: P5-UAT-SIGNOFF (rolling) UAT freeze: release/phase-3 · v3.0.5 · develop v3.1.0-beta
Data current as of 2026-07-24 (⚠️ This dashboard is a LEGACY sprint-model instrument. Since 2026-07-22 the top-level truth is ai/state/program-board.yaml (two lists: migration-floor vs product-roadmap) under the new team operating model — read that + ai/state/resume-context.yaml on resume, not this file. **PROJECT PAUSED 2026-07-20 for re-strategy** at tag v3.0.10; do NOT resume the v7-parity backlog. LATEST SESSION 2026-07-24: **T3 security — pre-growth tenant-isolation baseline, 3 PRs MERGED to develop** (#25 issue-24 EInvoice/PostingStatus cross-tenant IDOR · #26 issue-8 HTTP/JWT adversarial test harness · #28 issue-27 rate/charge-account cross-tenant write holes; full suite 153/153, no schema). Compliance anchor decided (PDPA baseline + ISO 27001 target). One product decision parked for Calvin: whether branches within one company are walled off on config-list reads. See History → Recent Session Log. — Older note kept for record: SCOPE CHANGE — the MVP framing is retired; this is now a full system build.** Common/Job Entry, Freight and Haulage are at parity, and "out of MVP scope" is no longer a valid reason to defer work inside them. Warehouse, Transport and Financial remain UNSEQUENCED — nothing starts there without Calvin's explicit go-ahead. The consequent re-triage audit swept every out-of-MVP deferral: 10 stay (Warehouse/Transport/Insurance reach-through), 14 re-open (RT-01…RT-14, see frontend-audit.yaml → scope_retriage_20260719). It also corrected a bad figure: the "~297 out-of-MVP fields" number wrongly summed Defer-P3 (147) with Drop/migrate-only (150+) — the latter were dropped as DEAD DATA, not scope, and must not be re-opened. RT-01 turned out to be a P0 defect and is FIXED + SHIPPED as **v3.0.8** (9c0a329): driver POD photos and signatures were never uploaded — keys were fabricated client-side and stored unchecked, so every POD carried no evidence; a hand-crafted key could also register another tenant's object against the job. Fixed online AND offline paths, plus a latent AWSSDK bug that pre-signed every upload URL as https against an http MinIO (affected ALL upload paths). Live-verified end to end. Prior: v3.0.7 (98878a4) Other Files complete — 39 masters full CRUD. Both v3.0.7 and v3.0.8 deploy with NO schema step. UAT tests release/phase-3; fixes → develop → cherry-pick → tag v3.0.x. Parallel platform track: i18n backend error-localization @ feature/i18n-tz 5405cdb.)

Active Sprint — P5-UAT-SIGNOFF (rolling)

📦 v3.0.5 shipped · FB-20260713 walkthrough CLOSED · Tier 3/4 backlog remains
2026-07-10 milestone: P3-PARITY + P4-FIELDCHECK closed on engineering terms and v3.0.0 cut on release/phase-3 (MVP parity complete). Rationale (Calvin-approved): decouple "engineering-done" from "user-accepted" — the build is done (53/54 MVP screens live-verified; only G4 Fuel Cost parked = domain-decision-gated), but the user field-signoff walkthrough is inherently continuous. This rolling P5-UAT-SIGNOFF track absorbs Calvin's ongoing field-level walkthrough (batches) plus the decision/data-gated backlog carried out of P4. Release flow: UAT finding → fix on develop → cherry-pick to release/phase-3 → tag v3.0.x. UAT tests against release/phase-3 (frozen); release/phase-2 retained as the v2.0.0 archive. Full detail: ai/state/sprints/p5-uat-signoff-active.yaml.
P4-FIELDCHECK delivery (CLOSED — shipped in v3.0.0) 8/8 phases · 53/54 screens done · G4 parked
PhaseScopeScreensStatus
AMaster Data (Business Partner, Employee, Equipment, Card Master, Charge Code, Contracts, Exchange Rate, Public Holiday, Port/Area)9Done (9/9)
BFreight Operations (Vessel Schedule, Documentation/BL, Job Entry, Container Master, Container Request, Container Monitoring, Container Inquiry*, Collection Advice)8Done (8/8)
CBilling Documents (Customer Invoice, Customer Credit Note, Customer Debit Note, Vendor Invoice, Vendor Credit Note, Vendor Reverse Billing, Cost Sheet)7Done (7/7)
DBilling Workflow (Pending Billing, Pending Vendor Cost, Batch Approval, Invoice Submission)4Done (4/4)
EMonitoring (Job Tracking, Movement Tracking, Hold Monitor, Deposit Monitor, DnD Monitor, Port Storage Monitor, POD, Event Update)8Done (8/8)
FHaulage Operations (Advance Entry, Advance Template*, Driver Incentive, Driver Rate, Haulage Movement, Haulage Command Center, Pending Container, Employee Attendance*, Trailer Status*)9Done (9/9)
GHaulage Reference & Admin (CY Location, Route Master, Expiry Monitoring, Fuel Cost)43 done · G4 deferred
HConfig & Misc (System Settings, Audit Log, Vendor Rates Inquiry, Ad-hoc Charges, Other Files*)5Done (H2/H3/H5/H6 verified)
* = 6 new components confirmed (OpsContainerInquiry, OpsEmployeeAttendance, OpsTrailerStatus, OpsEventUpdate, OpsOtherFiles, OpsJobTracking)
🏁 MILESTONE (2026-07-10) — v3.0.0 CUT · P3-PARITY + P4-FIELDCHECK CLOSED (engineering terms): Cut release/phase-3 from develop @ 5098d80, bumped apps/web to 3.0.0, tagged v3.0.0 (annotated, f224699) — pushed with branch. Bumped develop to v3.1.0-beta (a9e0850, pushed; pre-push lint gates green). Both sprints archived (p3-parity-closed.yaml / p4-fieldcheck-closed.yaml); active files deleted. MVP parity complete — Common/Job Entry + Freight + Haulage, 53/54 screens engineering-done + live-verified across the 2026-06-27 field spec + two Calvin human walkthroughs (FC08 4-master-screen; FF20260709 13-screen / ~345 findings).

Now active — rolling P5-UAT-SIGNOFF track. Carried backlog: ① G4 Fuel Cost (PARKED) — 4 lookups ready to wire; needs 4 Calvin domain decisions (Balanced Fuel scope · Payment-Type $/C codes · Fuel-Product SWM gate · Inventory GRN Phase-3). Not engineering-blocked; do not chase until decisions return. ② FF20260709 remainder (needs NO decision) — wire Batch A (JobContainer) + D (TransportDocument) fields full-stack (DDL already applied to axlogis_dev); at deploy run legacy raw-DDL Migrations/LegacyDdl/FF20260709_LegacyDdl.sql (Batch B/C) vs legacy prod; DEC-FF-02 supporting-docs editable write path (legacy JobDoc = 66 NOT NULL cols → design decision); cargo caption-slots (DEC-FF-01). ③ FC08 deferred decisions — DEC-01 Card/Fuel source · DEC-02 Partner Entity multi-select · DEC-08/10 RateProfile+KPI-SBU DDL · DEC-09 attachment upload · NE-05 City; enable the 5 tenant gating flags per-tenant after sign-off (currently OFF). ④ UAT-data-gated screens — E4 Deposit · E6 Port Storage · G3 Expiry + all Phase-F thin-data screens: endpoints verified, row-data verify at realistic UAT data. ⑤ LHDN-CREDS — MyInvois sandbox creds, needed only at the LHDN E-Invoice go-live gate.

Next action: await Calvin's next field-level sign-off batch. Each batch → triage into an ai/qa/ register → remediate on develop → live-verify (curl + browser) → cherry-pick to release/phase-3 → tag v3.0.x. Latest batch (FB-20260713, the 12-screen walkthrough) is CLOSED engineering-side → shipped v3.0.2–v3.0.5. Its remaining backlog is decision-gated, NOT engineering-blocked: Tier 3 (8 DDL items — Advances/Incentives header Remarks, Driver Rate ProcessCode/ProcessType/Points/ManHour, Advances TollCardSettlement/FuelCostGrid/Waive-Verified — package as a DDL-decision memo) + Tier 4 (6 scope clusters — Other Files reference-master editors is the big one). Full detail: ai/qa/feedback_20260713/RETRIAGE-20260717.md.

SEPARATE HARDENING AXIS (shipped in v3.0.0) — architecture/codebase audit remediated (92ef2a3..6cc5b69): P0 security (tenant-leak, login-expiry enforcement, cost-sheet authz) · P0 fuel-race DB unique index · P1 execution-strategy transaction helper on the 3 money flows · 9 dead validators activated + guard test · 2 frontend bugs (router-reuse trap, unsaved-changes guard) · RowVersion optimistic concurrency on money docs → 409. Invoice-math + UBL golden-file tests DEFERRED to UAT. Report: ai/qa/architecture-audit-20260703.md.

Parity bar was locked field-for-field (DEC-FC-002) — deliberate architectural decisions (missing Phase-3 modules, separate existing workflows, denormalized/dead columns, GPS/map, H2 audit redesign) are NOT parity gaps.
⚠️ QA self-certification rule in effect: Green E2E ≠ done. Each screen requires a live sidebar click-through with realistic data before marking done. Same rule as P3-PARITY DEC-PAR-005.

Needs a Decision — Calvin

FB-20260713 Tier 3 (DDL) + Tier 4 (scope) · G4 domain · rest confirm-at-sign-off
⏳ FB-20260713 remaining backlog — Tier 3 (DDL) + Tier 4 (scope). Full detail: ai/qa/feedback_20260713/RETRIAGE-20260717.md
The 12-screen walkthrough is CLOSED engineering-side (shipped v3.0.2–v3.0.5). What remains is decision-gated:
Tier 3 — need DDL sign-off (package as a decision memo like the AppMaster/JobDocs one): Advances header Remarks · Incentives header Remarks · Driver Rate ProcessCode · Driver Rate ProcessType · Driver Rate Points/ManHour · Advances Toll Card Settlement · Advances Fuel-Cost grid · Advances Details Waive/Verified (OQ-PAR-010).
Tier 4 — need a scope/product decision: Other Files reference-master editors (the big one — 26 masters have no editor, plus the metadata console + relation/checked-combo editors + Customs + 11 unregistered masters) · Batch Approval grdDoc rights · CY LocationType I/O/W labels · Routes area-staging model + OutStation · Fuel skid-tank/Receipt-No/Chit-No (G4 family) · Advances Escort semantics + header Document-No lookup.
⏳ G4 Fuel Cost — DEFERRED to domain (fuel/haulage) users (2026-07-04)
The only open screen. 4 lookup conversions are ready to wire (Vendor/Location→PartnerLookup, Charge→ChargeLookup, Driver→needs a new employee lookup). 4 business decisions block the flip, pending domain-user input:
DEC-G4-1 Balanced Fuel — spec field with zero footprint anywhere; in MVP scope?
DEC-G4-2 Payment Type — UI stores Cash/Card strings vs v7 $/C codes; confirm mapping.
DEC-G4-3 Fuel Product — spec says AppFuelType/AppFuelPrice SWM-only tenant-gated; currently free-text for all.
DEC-G4-4 Inventory GRN grid — explicit Phase-3 placeholder; confirm deferred.
Full detail: p4-fieldcheck-active.yaml → G4.g4_decisions. NOT engineering-blocked.
Sign-off walkthrough items — surfaced during the G/H wrap-up
H2 Audit Log — accept the deliberate EF-interceptor redesign (DEC G-01=A) as the answer, or add v7-style JobInfo/JobContainer Filter-By quick-scope; note money docs (Acc*) aren't audited (known scope limit).
H3 Vendor Rates Inquiry — rate-history sub-grid intentionally omitted (duplicates the D-9 Cost Sheet "Related Transactions" tab); confirm that cross-link is acceptable.
UAT-data-gated screens — E4 Deposit / E6 Port Storage / G3 Expiry + thin-data Phase-F screens: code-complete, need realistic data to visually confirm.
Phase F confirm-at-UAT (from ai/qa/discovery-F.md) — all BUILT on the recommended defaults; confirm during the sign-off walkthrough
F8 Employee Attendance + F9 Trailer Status pilot scope confirmed = BUILD (2026-07-02); both shipped. Remaining are defaults applied during the build, to ratify at UAT:
1. F4 Driver Rate — DROPped the 7 dead haulage-rate columns; surfaced the ~23 AppRate dims. (OQ-F-401..404)
2. F3 Driver Incentive — shipped operational grid + Rate/Qty/Remark; DROPped ~50 denormalized cols (verifier context = drill-through to Job). (OQ-F-301/303)
3. F1 Advance Entry — 3 optional no-source columns DROPped (header Remark, TollCardSettlement, Waive/Verified). (OQ-F-101/102/103)
4. F5 zone-names — DROPped (dead + commented-out in v7). (OQ-F-502)
5. F6 Idle toggle — deferred (HCC feed excludes idle statuses; semantic call needed). (OQ-F-602)
6. F2 AdvanceType / F8 TotalDays formula / F9 live-GPS — AdvanceType free-text (OQ-F-202), TotalDays simplified (OQ-F-802), GPS = Phase-3 (OQ-F-902).
Resolved — Phase D + E scope questions
Locked: DEC-FC-002 (parity bar = field-for-field), DEC-FC-003 (D4 AccSubmission DDL + keep picker), DEC-FC-004 (E7 POD full parity — shipped as 9 real legacy cols, not new JobPOD tables), DEC-FC-005 (E1 Job Tracking full parity — shipped, no DDL). DEC-FC-001 satisfied (A6 migration).
Standing reminder: each new DDL requires a fresh Calvin sign-off at apply-time (Phase F shipped 0 DDL — complete).

Current Blockers

1 active · non-blocking
⏳ LHDN-CREDS — MyInvois sandbox credentials pending
Code is complete and tested against MockEInvoiceClient. Real credentials (Client ID + Secret) need registering at mytaxinvois.hasil.gov.my — 3–5 business days approval. Does not block P3-PARITY or any current development; only needed before live e-invoice submission at go-live.

History

Completed Sprints Phase 1 (10) + Phase 2 (13) + P3-PARITY + P4-FIELDCHECK — all closed

Phase 1 (Sprints 0, A–J) — Common/Job Entry, Freight, Haulage, 4 portals, infrastructure. Closed and archived at v1.0.9; release/phase-1 branch deleted 2026-06-15 (single-UAT-branch model). Full sprint-by-sprint detail: ai/state/progress-log.md.

SprintClosedOne-linerCommit
P2-A2026-06-04Billing Foundation + Email Reset. SMTP, billing entities, CostSheetService, BillingStatusService.018518a
P2-B2026-06-06AR+AP Invoice CRUD, Credit Notes, billing approval batch, AccSubmission Outbox dispatch.ec9b35c
P2-C2026-06-06LHDN E-Invoice full build (IEInvoiceClient/Mock/MyInvois/UblBuilder/PollingJob) + Vue billing UI.803298e
P2-D2026-06-07Driver Incentives + Fuel. GenerateAsync (ServiceId=A), AccFuel/FuelChit/FuelLog, 3 Vue pages.9245490
P2-E2026-06-08Accounting Integration. IAccountingConnector/Factory, AutoCount/SqlAccounting/NoOp connectors, Outbox dispatch, spIncentiveHaulage ServiceId='H'.463988a
P2-F2026-06-08Rate Management UI. TieredRateCalculator + 5 rate endpoints + VendorFreeDaysService + 5 Vue pages + AP Invoice/CN lists. 82 files.41427d2
P2-G2026-06-09Stabilization 1 — Job Entry Completion. PartnerLookup/PortLookup, OpsJobDetail 5 tabs, nginx, MinIO.2f3131a
P2-H2026-06-10Analytics + Reports — 5 report pages + CSV export. Reclassified Phase 3 — code stays, not a Phase 2 gate.2f3131a
P2-Stab-A2026-06-11Stabilization QA backfill. 7/7 deliverables. 62 .NET + 35 E2E tests green.4fa78ef
P2-Stab-B2026-06-12Clone pipeline steps a/d/e/h/i + HCC VesselEta+D&D + JobContainer migration + TextSummaryService. 89/89 tests green.18f1b04
P2-Stab-C2026-06-12QA sprint — E2E backfill 7/7 deliverables. 60 passed, 9 skipped, 0 failed. Coverlet 15.9% baseline.b8acca1
P2-UAT2026-06-18Phase 2 Pilot Sign-off. D-1–D-9 done (D-8 LHDN-CREDS non-blocking). Calvin signed off — v2.0.0 tagged.6893819
P3-PARITY2026-07-10UI parity vs v7. First pass rejected at D-14 live walkthrough (green E2E ≠ working); remediated end-to-end (Phases A–K + H/I/J vs real .vb + axlogis_ori). Closed engineering-terms at v3.0.0. Archive p3-parity-closed.yaml.f224699
P4-FIELDCHECK2026-07-10Field-by-field audit + remediation of all 54 MVP screens (spec + FC08 + FF20260709 human walkthroughs). 53/54 done; G4 parked. Closed engineering-terms — v3.0.0 cut. Archive p4-fieldcheck-closed.yaml.f224699
Recent Session Log last 8 — full history in progress-log.md
2026-07-24
🔐 T3 SECURITY — pre-growth tenant-isolation baseline: 3 PRs MERGED to develop — Advanced the T3 track (lead still unassigned, Calvin deferred). Compliance anchor decided (issue #6: PDPA mandatory baseline now + ISO 27001 alignment target; SOC 2 parked). Scoped issue #8 (tenant-isolation adversarial suite) and shipped three fixes, each a short-lived branch + PR with identical gates, all merged: PR #25 / issue #24 — cross-tenant IDOR: EInvoice (submit/cancel to LHDN) + PostingStatus endpoints took Enterprise/Entity from the client payload and acted on unfiltered entities behind only a Require:{right} guard → any tenant could act on another's govt e-invoices; fix server-derives tenant from ICurrentUserService/TenantContext. PR #26 / issue #8 — HTTP/JWT adversarial harness (WebApplicationFactory<Program> + Testcontainers SQL, HttpApiFactory/TestJwt) that boots the real API so a request traverses JWT → MultiTenancyMiddleware → Require:{right} → handler; first proving tests anon→401, BETA can't read ALPHA invoice/posting. PR #28 / issue #27 — cross-tenant write holes in rate/charge-account handlers (Update/DeleteRateRow looked up AppRate by integer PK with no tenant predicate → any RateEdit user could edit/delete any enterprise's rate rows and poison invoice pricing; UpsertChargeAccount took Entity from body); fix gates on parent-header ownership + forces charge-account to tenant.Entity. Full suite 153/153, no schema on any of the three. PARKED for Calvin (product intent, not a breach): ListChargeAccounts/ListStandardRates reads filter on Enterprise only — decide whether branches within one company are walled off. Record: ai/state/tracks/t3-security.yaml. Project otherwise still paused for re-strategy — this is migration-floor security hardening, not the parity backlog. Session paused here at Calvin's request.
2026-07-22
🧭 Team operating platform LIVE + issue-13 credential scrub MERGED — Re-strategy executed into an operating model: ai/team/ (operating-model, engineering-rules, working-agreements, mirrored to repo docs/team/ via PRs #10+#12), GitHub tracker live (org project #1, issues #5–#9, milestone v3.1.0), knowledge repo Axlogisv9-knowledge live (this ai/ tree IS that repo — commit+push at session end). Default branch → develop. Issue #13: SA password was in 36 tracked files → all scrubbed (PR #14, secrets now in gitignored infra/.env) + rotated (SA/MinIO/Grafana) and verified end-to-end. Program truth is now ai/state/program-board.yaml (two lists: migration-floor vs product-roadmap). Prior 07-21: i18n+timezone track MERGED into develop (v3.1.0 line, 103 ahead; NOT in UAT).
2026-07-20
⛔ DEVELOPMENT PAUSED FOR RE-STRATEGY (tag v3.0.10) — Calvin stopped feature work: the project had drifted toward 100% v7 parity (every instrument — scorecard, QA method, backlog — is v7-gap-shaped), which was never the intent. Clean cut: v3.0.10 = migration deploy-gap fixes + genuinely-dead-control cleanup; release/phase-3 == develop by content. Froze all pending work into ai/state/pending-backlog.yaml, archived the FB-20260713 registers, wrote the new strategy to ai/state/re-strategy-plan.md (usage-weighted parity + journey coverage + migration-floor/product-roadmap split; hard constraint: axlogis_ori has only 2 real tenants). On resume: read re-strategy-plan.md + pending-backlog.yaml; do NOT resume the parity backlog.
2026-07-17
📦 FB-20260713 (12-screen UAT walkthrough) fully remediated → shipped v3.0.2–v3.0.5 — Calvin's field-check of 12 ops screens (~200 line-items, register ai/qa/feedback_20260713/). Arc: v3.0.2 H5 reference-lookup migration gap (16 tables) · v3.0.3 P1 sweep (7 confirmed defects — Incentives Adjustment-never-persists money bug, Pending Billing CustomerRef wrong-map, Advances toll/actualBase silent blanks, dead inputs) · v3.0.4 cross-cutting themes T1-T4 (shared EquipmentLookup, rate-line EffectiveDate, wired the already-built Advance edit path, lookup drop-ins) · v3.0.5 (a5b9c7f, pushed) = re-triage of the stale "23 P2/38 P3" buckets vs current develop (6 parallel read-only agents — corrected the counts; Driver Rate's ~16 P3 collapsed to 4 real UI-only) → then built the real remainder: Terminal Id lookup (threaded through Advance create/update; role-less PartnerLookup since AppPartner has no IsTerminal col) + Tier 1/2 (~19 fixes: Advances template display + real AdvanceAmount + Track&Trace cols; Templates Description-required + edit-line; Fuel detail lookups [closed the T4 OpsFuelDetail miss] + odometer edit + auto-distance nuance; CY LocationId maxlength; Routes SeqNo cap + AreaCode validation; Driver Rate Min/Max/Tier; Batch Approval AccountDate inline-edit; Vendor Cost LinerRef/OBL + charge multi-select) + 2 Calvin-approved DDLs — Other Files audit cols (AppMaster CreateBy/CreateTime/ModifyBy/ModifyTime via raw-DDL Migrations/LegacyDdl/FB20260713_LegacyDdl.sql, ExcludeFromMigrations) + Fuel attachment Status (JobDocs.Status via EF migration FB20260713_JobDocStatus). Air-Ticket-No resolved = MAWB already in LinerRefOBL. Every change live-verified (curl round-trips + DB checks, probes cleaned); all pre-push gates green (dotnet Release 0E · vue-tsc 0 · eslint 0 · has-pending-model-changes clean). Cherry-picked clean to release/phase-3 incl. the migration + LegacyDdl (no conflicts). ⚠️ Deploy v3.0.5: run FB20260713_LegacyDdl.sql vs prod AppMaster + apply the JobDocs migration. Remaining backlog (decision-gated, not engineering): Tier 3 (8 DDL items) + Tier 4 (6 scope clusters, Other Files editors dominant). Migration-mechanics gotcha logged: dotnet ef needs ASPNETCORE_ENVIRONMENT=Development; on DB-login failure apply via generated idempotent migrations script + sqlcmd (strip UTF-8 BOM); never migrations remove with a stale --no-build snapshot. Full: ai/qa/feedback_20260713/RETRIAGE-20260717.md.
2026-07-14
✅ i18n BACKEND ERROR-LOCALIZATION — all 6 API modules + ~36 ops views (batches 67-76) → PUSHED feature/i18n-tz @ 5405cdb (8th ≥10-commit batch) — Parallel platform track (not the P5-UAT line). Calvin's calls: Hybrid channel (interactive validation+domain errors emit stable dotted codes → client translates via the existing vue-i18n catalog now; server-side catalog deferred to the docs/emails/reporting phase) + Full backfill now. Recon disproved the memory assumption "Problem Details already carry codes" (backend had ZERO localization infra). Contract (b67, hand-built on Common/Jobs): Result.ErrorArgs+Result.Args(); ProblemExtensions() (Core, framework-agnostic) → ProblemDetails code+args; GlobalExceptionHandler 422 emits errorCodes/errorArgs (dotted-only). Frontend useFormErrors code-aware + new useApiError.resolveApiError() (un-keyed codes gracefully show English — no crash). Backfill: Billing 73 · Freight 98 · Haulage 79 · Identity 40 · MasterData 59 · rest-Common 13 codes → serverErrors catalog = 382 leaves / 50 namespaces (en=zh); frontend b70/b71 migrated 84 sites across ~36 views to resolveApiError. Backend modules delegated to SERIAL single-file subagents (shared en/zh); each gate-verified by main loop (Release build 0-err + en/zh parity + every ErrorCode== code is produced + renamed-code tests: JobLifecycle 10/10, SprintDFreight 6/6, UserMgmt/Pod/PortLookup green). Live QA 10/10 zh (e2e/scripts/i18n-servererror-verify.mjs): authed API 422 errorCodes.CustomerCode=job.customerCodeRequired + domain 409 code=userAdmin.duplicate+args; real browser OpsUserList renders interpolated zh 「用户 'TOPSADMIN' 已存在于实体 'PJ' 中。」, zero console errors. 3 pre-existing MovementTerminalAddress DB failures confirmed on baseline (unrelated). NEXT i18n phases: (3) documents/emails, (4) reporting ReportLabels (server-side catalog). Pre-push 3 gates green.
2026-07-11
✅ Migration deploy-safety review — 1 fresh-deploy break found + fixed (v3.0.1) — Rechecked the migration scripts added since the 07-05 clean review (FC08 DropEquipmentDeviceFk + FF20260709 DdlBatchAD/DecFf01 + FF20260709_LegacyDdl.sql). The 2 FF EF migrations are clean additive; the legacy DDL script is idempotent+guarded. Gap: FF20260709 added 9 net-new columns to ExcludeFromMigrations legacy tables (AppCharge GroupCode/GroupTaxCode, AppVesselScheduleRoute next-ports ×5, JobDoc Station/RefNo) via raw-DDL + EF mappings but did NOT register them in the migration CLI's TargetColumnAdditions — all 9 confirmed absent in axlogis_ori, so a build-from-source (migrate-from-ASolute) deploy would create those tables without the columns → charge/vessel/supporting-docs screens 500. Same class as IsContainerized/Remarks/AccAdvance.RowVersion. Fixed (06b0719, develop): registered all 9 + added a durable contract test (every LegacyDdl/*.sql ADD must be in TargetColumnAdditions; negative-tested). Verified: drift clean, full 70-migration chain applies to a fresh DB (history parity 70=70), live CLI rehearsal ori→throwaway creates all 9 columns. Cherry-picked to release/phase-3 (e6eca54) + bumped 3.0.1 + tagged v3.0.1 (8bc300e, pushed).
2026-07-10
🏁 v3.0.0 CUT · P3-PARITY + P4-FIELDCHECK CLOSED (engineering terms) — Calvin's call: close both sprints and stamp the MVP-parity baseline now, decoupling "engineering-done" from the still-continuing user field-signoff walkthrough. Git: cut release/phase-3 from develop @ 5098d80, bumped apps/web → 3.0.0, tagged v3.0.0 (annotated, f224699), pushed branch+tag; bumped developv3.1.0-beta (a9e0850, pushed, pre-push lint gates green). (npm version skipped git in the apps/web subdir → bump committed+tagged manually.) Bookkeeping: wrote p3-parity-closed.yaml + p4-fieldcheck-closed.yaml, deleted both active files, opened rolling P5-UAT-SIGNOFF (p5-uat-signoff-active.yaml) carrying G4 (parked) + FF20260709 remainder (Batch A/D full-stack wiring, B/C prod raw-DDL, DEC-FF-02 write path, cargo caption-slots) + FC08 deferred decisions + UAT-data-gated screens (E4/E6/G3 + Phase-F thin data) + LHDN-CREDS. UAT now tests against release/phase-3; fixes land on develop → cherry-pick to release/phase-3 → tag v3.0.x. Also fixed a mojibake bug in ai/qa/ff20260709-domain-decisions.html (missing <meta charset>). MVP parity = 53/54 screens; only G4 parked.
2026-07-10
✅ FF20260709 — 2nd field-to-field human walkthrough remediated END-TO-END (13 screens / ~345 findings vs remote 582ff77; all pushed 2ebd820..5098d80, ~18 commits) — Big session. Phase 0: shared lookup components ReferenceSelect (reference-registry + AppMaster) + EmployeeLookup. Phase 1 (lookup wiring, 7/7 screens, 38 browser checks): Contracts (13 rate-line fields), Container Master (Grade), Collection Advice (Depot), Container Request (row+batch), Job Entry (header/cargo/container-detail), Documentation (parties/jobNo/claimant), Vessel (loadPort/agent/portCode). D-1 resolved via v7 legacyJob.BillingType→AppBillingType proven (clsAccrualItems.vb:69 JOIN); Prepaid/Collect is the separate FreightTerm field. Phase 2 (surface-persisted, 8/8): Container Inquiry Info panel 13→38 fields (DTO projection, no DDL); Charge Analysis01/02 + SeqNo; Container Monitoring Pending-Acceptance ROT-gate; Job container Remark/GrossVolume/ContainerHandling + process MasterJobNo/2nd-driver + Container-Request item remark; full-header-on-create (real functional gap — create was dropping ~30 header fields); Contracts Revised From/To; Vessel editable country/lastPort/nextPort/terminal; Collection Advice multiple-update. Phase 3 DDL (Calvin-approved): Batch A JobContainer + D TransportDocument via EF migration; Batch B AppCharge + C AppVesselScheduleRoute via legacy raw-DDL (ExcludeFromMigrations → idempotent Migrations/LegacyDdl/FF20260709_LegacyDdl.sql + mapped props, drift clean); DEC-FF-01 cargo 6 literal columns (new JobCargos has no legacy caption slots, Calvin chose literal, EF migration); DEC-FF-02 supporting-docs Station/RefNo read-surfaced (editable write path DEFERRED — legacy JobDoc has 66 NOT NULL cols → design decision). Phase 4 decision register + Phase 5 remote-extra documented (ai/qa/feedback_20260709-decisions-and-extras.md). Every batch curl round-tripped + browser-verified, 0 console errors; 2 EF migrations applied + drift-clean on axlogis_dev. ⚠️ Deploy: run the legacy raw-DDL script vs the legacy prod DB (EF migrations cover only A/D + DEC-FF-01). Tracker: ai/qa/feedback_20260709-remediation.md. All engineering-buildable work done; remainder is Calvin domain decisions. HEAD 5098d80.

Earlier entries (06-27 → 07-09: architecture audit + P0/P1 remediation, P4 Phase A–F, pilot-maintenance merge, P4-FIELDCHECK G/H wrap-up, FC08 walkthrough, 07-05 migration review + auth fix) trimmed — full detail in ai/state/progress-log.md.

Reference

Locked Decisions titles only — full rationale in decision-log-compact.yaml + ai/state/decisions/*.yaml
P3-PARITY (this sprint) — decision-log entries DEC-PAR-001..018 in p3-parity-active.yaml
  • DEC-PAR-005 — Green E2E is not sufficient evidence of "done"; live click-through required before done:true.
  • DEC-PAR-006 — Polymorphic legacy FK triage rule + always ask Calvin before any DDL change, every time.
  • DEC-PAR-009 — Cost Sheet backed by legacy JobSheet, not AccItem.
  • DEC-PAR-011 — AR/AP Invoice field gaps + PIC serialization bug fix.
  • DEC-PAR-016 — Pending Vendor Cost rebuilt on JobSheet, same root-cause class as DEC-PAR-009.
  • DEC-PAR-018 — Haulage Timeline full Gantt dispatch board (real scope larger than assumed; Calvin chose full build).
  • Others (001–004, 007, 008, 010, 012–015, 017): equipment brand/model FK, trigger-aware EF mapping, KPI tab dropped, vessel-close semantics, TransportDocument rename, frontend type-check fix, Phase E rebuilds (Advance/Pending Container/Collection Advice/Driver Incentives), Advance Payment add/edit/cancel.
Architecture (global — decision-log-compact.yaml)
  • Greenfield build — clean Vue 3 + .NET 10 LTS, not a VB.NET patch.
  • Zero SP calls from the API — all 1,500 SPs rewritten as C# domain services.
  • Dual-DB via EF Core abstraction — zero provider-specific SQL.
  • Vertical Slice Architecture — Command/Query + Handler + Validator + DTO per feature.
  • Composite (Enterprise, Entity) multi-tenancy with global query filters.
  • Schema: existing 341 tables as baseline, ≤10% additive enhancements only.
  • Phase 2+ transactions: CreateExecutionStrategy().ExecuteAsync() wrapper, no bare BeginTransactionAsync().
  • Cross-module events: Transactional Outbox only, no in-process mediator.Publish().
  • Tenant feature flags: ITenantFeatureService — never hardcoded enterprise string checks.
Billing (ai/state/decisions/billing.yaml — BL-01..09)
  • AccItem soft-delete only · TotalForeignAmt formula · InsertOrUpdate by IsChanged · lifecycle timestamps · CostSheetSync via Outbox · account period check stubbed · AR CN approval gate · VendorRef uniqueness cross-table · BillingDeliveryGuard 2-layer.
Accounting Integration (ai/state/decisions/accounting.yaml — P2E-01..08)
  • SovyInteg = SqlAccountingConnector · MVP scope AutoCount+SQL Accounting only · Outbox replaces SvcOutbox · REST-only AutoCount connector · SvcSetting read-only profile config.
Incentives / Rate Management (ai/state/decisions/incentive-commission.yaml — P2-D, PF-01..04)
  • Fuel.OdoResetHandling configurable · CommStatus dropped for InvoiceStatus≥5 · AppRate.Priority tiebreaker · AppRate shared line table joined via LinkId.
Knowledge Base Coverage ai/knowledge/asolute-recovery/ — 60 SPs · 27 forms · 6 billing classes, DB-verified
FileCoversStatus
critical-sp-view-analysis.mdCancel cascade, ROT, DnD, rates, billing, movements, vessel schedule — 12 SPs + 3 viewsVerified
sp-analysis-*.md (4 files)Process/movement, freight support, job/container, haulage/cargo — 48 SPs totalVerified
ui-form-wiring-*.md (4 files)MVP, Freight, Haulage, Billing form wiring — 27 forms totalVerified
billing-class-dossiers.md6 billing classes — business rules, tenant branches, migration notesVerified
runtime-config.mdAppProcess (98 codes), AppServiceType (173 codes), AppOption architectureVerified
open-question-register.mdOriginal 57 SP/billing questions — most resolved/deferred, ~1 P0 remainingPartial
ASolute-*.md (3 files)Class dossiers, refactoring assessment, DB object registry (341 tables/175 views/1,500 SPs)Recovered
Business Input Queue (Phase 1) all 13 resolved 2026-05-31

All 13 pre-build business questions resolved via 3 strategies: 3 self-answered from DB/code analysis, 2 deferred to later sprints (stubbed with NotImplementedException), 8 implemented as workarounds tagged [Q-tag] in code for UAT confirmation. Find all sites: grep -rn "\[Q-" axlogisv9/apps/api/ axlogisv9/apps/web/. Full register with resolutions: ai/state/biz-rule-workarounds.md.

Open Questions (general / billing) counts only — see source files for detail

General architecture/legacy: 7 open — ai/state/open-questions.yaml
Billing (Q-BL-001–012): period check, invoice approval scope, posting schema, VendorRef uniqueness, and others — ai/knowledge/asolute-recovery/open-question-register.md §9
P4-FIELDCHECK sprint: 0 open questions. Locked: DEC-FC-001 (AppRate cols), DEC-FC-002 (parity bar = field-for-field), DEC-FC-003 (D4 AccSubmission DDL + keep picker), DEC-FC-004 (E7 POD full parity + JobPOD DDL), DEC-FC-005 (E1 Job Tracking full parity). Full detail in p4-fieldcheck-active.yaml → decisions_this_sprint
Tenant feature flags: 15 tenant branches mapped to KnownFeatureFlags — design locked, seeder work ongoing.

How to Interact — session commands

I'm back
Triggers /resume-axlogis — delivers a structured handoff (phase, last stop, blockers, next action) from saved state. Start every session with this.
implement [feature]
I write the code. I flag any P0 questions blocking the feature before starting, and stop to ask if anything touches deferred scope.
what needs my input?
I surface only the decisions genuinely blocked on you — see "Needs a Decision" above, always with a recommended default.
analyse [SP / class / form]
I read the source, document business rules exhaustively, and add to the knowledge base.
resolve OQ-XX-NNN
I update the relevant open-question file with your answer and update any affected dossiers.
/resume-axlogis
Explicit skill invocation — use if the auto-trigger misses your resume cue.