Active Sprint — P5-UAT-SIGNOFF (rolling)
📦 v3.0.5 shipped · FB-20260713 walkthrough CLOSED · Tier 3/4 backlog remainsrelease/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.
| Phase | Scope | Screens | Status |
|---|---|---|---|
A | Master Data (Business Partner, Employee, Equipment, Card Master, Charge Code, Contracts, Exchange Rate, Public Holiday, Port/Area) | 9 | Done (9/9) |
B | Freight Operations (Vessel Schedule, Documentation/BL, Job Entry, Container Master, Container Request, Container Monitoring, Container Inquiry*, Collection Advice) | 8 | Done (8/8) |
C | Billing Documents (Customer Invoice, Customer Credit Note, Customer Debit Note, Vendor Invoice, Vendor Credit Note, Vendor Reverse Billing, Cost Sheet) | 7 | Done (7/7) |
D | Billing Workflow (Pending Billing, Pending Vendor Cost, Batch Approval, Invoice Submission) | 4 | Done (4/4) |
E | Monitoring (Job Tracking, Movement Tracking, Hold Monitor, Deposit Monitor, DnD Monitor, Port Storage Monitor, POD, Event Update) | 8 | Done (8/8) |
F | Haulage Operations (Advance Entry, Advance Template*, Driver Incentive, Driver Rate, Haulage Movement, Haulage Command Center, Pending Container, Employee Attendance*, Trailer Status*) | 9 | Done (9/9) |
G | Haulage Reference & Admin (CY Location, Route Master, Expiry Monitoring, Fuel Cost) | 4 | 3 done · G4 deferred |
H | Config & Misc (System Settings, Audit Log, Vendor Rates Inquiry, Ad-hoc Charges, Other Files*) | 5 | Done (H2/H3/H5/H6 verified) |
Needs a Decision — Calvin
FB-20260713 Tier 3 (DDL) + Tier 4 (scope) · G4 domain · rest confirm-at-sign-offai/qa/feedback_20260713/RETRIAGE-20260717.mdTier 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.
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.
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.
ai/qa/discovery-F.md) — all BUILT on the recommended defaults; confirm during the sign-off walkthrough1. 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).
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-blockingMockEInvoiceClient. 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 (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.
| Sprint | Closed | One-liner | Commit |
|---|---|---|---|
P2-A | 2026-06-04 | Billing Foundation + Email Reset. SMTP, billing entities, CostSheetService, BillingStatusService. | 018518a |
P2-B | 2026-06-06 | AR+AP Invoice CRUD, Credit Notes, billing approval batch, AccSubmission Outbox dispatch. | ec9b35c |
P2-C | 2026-06-06 | LHDN E-Invoice full build (IEInvoiceClient/Mock/MyInvois/UblBuilder/PollingJob) + Vue billing UI. | 803298e |
P2-D | 2026-06-07 | Driver Incentives + Fuel. GenerateAsync (ServiceId=A), AccFuel/FuelChit/FuelLog, 3 Vue pages. | 9245490 |
P2-E | 2026-06-08 | Accounting Integration. IAccountingConnector/Factory, AutoCount/SqlAccounting/NoOp connectors, Outbox dispatch, spIncentiveHaulage ServiceId='H'. | 463988a |
P2-F | 2026-06-08 | Rate Management UI. TieredRateCalculator + 5 rate endpoints + VendorFreeDaysService + 5 Vue pages + AP Invoice/CN lists. 82 files. | 41427d2 |
P2-G | 2026-06-09 | Stabilization 1 — Job Entry Completion. PartnerLookup/PortLookup, OpsJobDetail 5 tabs, nginx, MinIO. | 2f3131a |
P2-H | 2026-06-10 | Analytics + Reports — 5 report pages + CSV export. Reclassified Phase 3 — code stays, not a Phase 2 gate. | 2f3131a |
P2-Stab-A | 2026-06-11 | Stabilization QA backfill. 7/7 deliverables. 62 .NET + 35 E2E tests green. | 4fa78ef |
P2-Stab-B | 2026-06-12 | Clone pipeline steps a/d/e/h/i + HCC VesselEta+D&D + JobContainer migration + TextSummaryService. 89/89 tests green. | 18f1b04 |
P2-Stab-C | 2026-06-12 | QA sprint — E2E backfill 7/7 deliverables. 60 passed, 9 skipped, 0 failed. Coverlet 15.9% baseline. | b8acca1 |
P2-UAT | 2026-06-18 | Phase 2 Pilot Sign-off. D-1–D-9 done (D-8 LHDN-CREDS non-blocking). Calvin signed off — v2.0.0 tagged. | 6893819 |
P3-PARITY | 2026-07-10 | UI 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-FIELDCHECK | 2026-07-10 | Field-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
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.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).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.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.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.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).release/phase-3 from develop @ 5098d80, bumped apps/web → 3.0.0, tagged v3.0.0 (annotated, f224699), pushed branch+tag; bumped develop → v3.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.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 legacy — Job.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.e2e/scripts/fc08-{employee,partner,cards,fleet,fleet-list}-verify.mjs. Deferred for sign-off: KPI SBU + RateProfile (columns absent → DDL), behavior parity DECs (DEC-01/02/09), NE-05 City, tenant-flag matrix (left OFF). Backend detail: — Calvin's human field-by-field walkthrough of the 4 master-data screens (ai/qa/feedback_20260708/) triaged into ai/state/frontend-audit.yaml → fieldcheck_20260708 (~150 findings, 8 buckets, code-verified by 5 parallel Explore agents). Calvin approved the full sweep (TenantConfig gating + Fleet type-gating + all 7 endpoints). Backend 100% done + live-verified (curl on :5000, test data cleaned): BUG-01 employee create dropped 5 fields (IsMobile/RateId2/RateId3/EqCategory/IncentiveTarget); BUG-02 equipment create dropped ~21 fields; BUG-04 (found during verify) both create handlers 500'd on NULL→NOT-NULL inserts — every minimal create was broken, coalesced all NOT NULL columns; Cards slice — fuel-card FuelType filter, type-aware assign (truck fuel-type guard + driver path + employee-name fallback), backdatable AssignTime, NEW release endpoint; NEW /master/equipment-brands picker (752 rows); BUG-06 (Calvin-approved migration) dropped the vestigial FK_AppEquipment_AppDevice_DeviceId — enabled-but-not-trusted over an empty AppDevice, blocked every equipment create; equipment create now verified end-to-end. TenantConfig gating foundation (f90d5ac): 5 new KnownFeatureFlags (ShowSbu/CentralControl/PosMobile/AutoPlanning/FleetModule) → DTO → handler → web store, default false (field hidden). Employee screen (3594dc1): OpsEmployeeDetail.vue plain inputs → lookups (FreightMode A/B/C, Owner=partner-by-freight-mode, Status=AppEvent, Truck=equipment, 3×DriverRate, State/Country) + gating (SBU/Mobile/EqCategory) + BUG-03 address-on-create; browser-verified 10/10 (e2e/scripts/fc08-employee-verify.mjs, State wired but AppState empty in dev = data-gated). All gates green throughout (dotnet 0E, vue-tsc 0, eslint 0, migration applied no drift). Remaining is all Calvin-gated: field-level sign-off (DEC-01/02/08/09/10 + tenant-flag matrix) + G4 domain decisions → then close P3-PARITY + P4-FIELDCHECK → cut v3.0.0.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
- 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, notAccItem. - 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.
- 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 bareBeginTransactionAsync(). - Cross-module events: Transactional Outbox only, no in-process
mediator.Publish(). - Tenant feature flags:
ITenantFeatureService— never hardcoded enterprise string checks.
- 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.
- SovyInteg = SqlAccountingConnector · MVP scope AutoCount+SQL Accounting only · Outbox replaces SvcOutbox · REST-only AutoCount connector · SvcSetting read-only profile config.
- Fuel.OdoResetHandling configurable · CommStatus dropped for InvoiceStatus≥5 · AppRate.Priority tiebreaker · AppRate shared line table joined via LinkId.
Knowledge Base Coverage
| File | Covers | Status |
|---|---|---|
critical-sp-view-analysis.md | Cancel cascade, ROT, DnD, rates, billing, movements, vessel schedule — 12 SPs + 3 views | Verified |
sp-analysis-*.md (4 files) | Process/movement, freight support, job/container, haulage/cargo — 48 SPs total | Verified |
ui-form-wiring-*.md (4 files) | MVP, Freight, Haulage, Billing form wiring — 27 forms total | Verified |
billing-class-dossiers.md | 6 billing classes — business rules, tenant branches, migration notes | Verified |
runtime-config.md | AppProcess (98 codes), AppServiceType (173 codes), AppOption architecture | Verified |
open-question-register.md | Original 57 SP/billing questions — most resolved/deferred, ~1 P0 remaining | Partial |
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 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)
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/resume-axlogis — delivers a structured handoff (phase, last stop, blockers, next action) from saved state. Start every session with this.implement [feature]what needs my input?analyse [SP / class / form]resolve OQ-XX-NNN/resume-axlogis