Booking Legacy Capability Ledger¶
This is the source-backed compatibility ledger for the first operating Booking
page. PRESERVED means the existing workflow remains available through the
shared KJ runtime. IMPROVED means the same capability has a clearer or safer
Logistics Workspace surface. PARTIAL means the route exists but the acceptance evidence
is incomplete. Client 1 (CLIENT_ID=1) and Client 2 (CLIENT_ID=2) use the
same operating page through their effective menu and tenant session; no separate
tenant selector is part of the user flow. No item is silently omitted.
| Capability | Legacy source/caller | Logistics Workspace disposition | Evidence / remaining work |
|---|---|---|---|
| Booking list and real tenant rows | kj-table-definitions.js, kj-table-schema-mount.js, mk-booking-list.php |
IMPROVED |
Explicit booking-list and mk-booking-list profiles share one compact KJTable runtime; authenticated Client 1 read 11,170 rows / 224 pages and Client 2 read 3,063 rows / 62 pages |
| Date range, clear and day navigation | mk-booking-list.php, KJTable date-range plugin |
PRESERVED |
Legacy-compatible From=today/open-To default, explicit Clear, and previous/next/today controls without an inferred week |
| Global keyword search | App Shell search and Booking table query | IMPROVED |
The shared permission resolver selects booking-list or mk-booking-list from the authenticated menu/module contract without a tenant-ID branch. Client 1 opened Booking 57270 from MAEU273938756; Client 2 opened Booking 69805 from NAM8462287, preserving each profile after refresh |
| Sort, column filter and filter mode | KJTable renderer/dom bridge and Booking query | IMPROVED |
Header-driven filtering and allowlisted server-side sorting passed against real Client 1 and Client 2 data; trimmed Booking numbers sort correctly in both directions; Apply, Remove and Escape restore focus to the source header |
| Row selection and selection actions | KJTable selection manager, kj-table-options-master.js |
IMPROVED |
Selection toolbar replaces normal toolbar; Client 1 browser verified 1 selected |
| Paging and page size | KJTable renderer | PRESERVED |
25/50/100/250 options; authenticated Client 1 moved to page 2 and returned to page 1, while the current Client 2 result correctly disabled Next because it contained fewer than 25 rows |
| Column visibility, order and width | KJTable column controls/resize/drag handlers | ACCEPTED REPLACEMENT |
Columns control is intentionally hidden by the explicit approved table direction; visible columns remain fixed to the operational profile and both pointer and keyboard width resize passed in Client 1/2 |
| Create/edit/view Booking | booking-editor.js, booking-editor-contracts.js |
IMPROVED |
Shared KJModal editor; Client 1/2 UI Create, direct reopen, UI Save and authoritative GET readback passed with generated records left inactive after cleanup. Editable list cells open by mouse, Enter or Space. Primary document/save actions remain visible while seven secondary operations are retained in one keyboard-operable More menu |
| Autocomplete and multiselect fields | kj.autocomplete.js, kj-field-* runtimes |
PRESERVED |
Existing option/selection runtime reused; Client 1 editor opened with populated options |
| Validation and invalid recovery | Legacy Booking writer and editor contract | IMPROVED |
Client 1/2 UI Create blocked the initial missing-required-field attempt without a request. A client-side connection failure injected before the first UI Save request displayed unknown-result/read-before-retry guidance; authoritative GET proved unchanged values before the explicit retry succeeded |
| Cancel, close and parent refresh | booking-editor.js, KJModal follow-up |
PRESERVED |
Save callback refreshes list/focus; browser cancel does not write |
| Clone Booking | booking-editor.js, booking-clone-contract.js |
IMPROVED |
Client 1/2 one-copy clone and inactive cleanup passed; Client 2 clone remained unlinked, while a linked C2 source/Sales Order runtime fixture is still unavailable |
| Not In Use record flag | Booking form writer and NOT_IN_USE state |
PRESERVED |
A disposable NOT_IN_USE set/clear readback passed. Source proves an independent flag, not a Cancel/Reopen lifecycle; no invented lifecycle action is presented to users |
| Linked containers and container edit | container-edit-modal.js, YMS/TMS callers |
PRESERVED |
Client 1 detail/multi-detail and non-trivial mutation/restore passed |
| Edit all containers / Direct Move | booking-editor.js, container-edit-modal.js, kj-table-options-master.js, YMS container form |
PARTIAL |
Client 1 two-container bulk Remark update/readback passed with original values restored; browser drag Direct Move update/readback/restoration passed. Client 2 bulk mutation remains NOT_RUN because no reversible two-container fixture exists |
| Packing List | mkPackingList.php, Booking editor |
PRESERVED |
Client 1 and Client 2 authenticated HTTP 200/readback paths passed; a Booking without a linked Packing List container now returns stable 400 INVALID_REQUEST instead of 500 |
| Booking Confirmation | bookingConfirmation.php, popup/table actions |
IMPROVED |
Client 1 Booking 57290 rendered tenant-branded Booking Confirmation without MK copy; Client 2 Booking 69805 preserved Shipping Instruction and MK composition |
| AI Booking Instruction PDF | booking-editor.js, booking-instruction API |
PARTIAL |
A repeatable Client 1 actual-shell/editor test intercepts only the provider POST and passes failure, retry, review and Apply Results without saving. This proves UI integration but not the actual provider; Client 2 tenant flag disables the UI and returns 403 FEATURE_DISABLED before prompt/provider access |
| AI timeout/failure/manual fallback | booking-editor.js error/recovery states |
PARTIAL |
The repeatable Client 1 editor test displays Booking analysis failed. Try again or enter the booking fields manually. and then retries successfully with the provider POST intercepted. Actual-provider timeout/recovery remains unaccepted |
| Booking documents | kj-upload-plugin.js, PHOTO.create_fieldset |
PRESERVED |
Client 1/2 upload/register/read/soft-delete readback passed; provider cleanup queued by contract |
| Container photos | kj-photo-plugin.js, booking-editor.js |
PRESERVED |
Client 1 upload/register/read/delete readback passed; actual Booking 57290 Manage Photos rendered four linked containers with Fancybox loaded and no page error |
| Empty/Return EIR | Booking editor and global search EIR route | PRESERVED |
Client 1 Booking 57125 returned real Empty and Return EIR ZIP downloads with correct filenames and no download failure |
| Create Empty | Booking editor and delivery writer | PRESERVED |
Client 1 authenticated dispatch DISPATCH=N created Equipment 186799/Load 188065, read back as EMPTY, then Logistics Workspace YMS delete soft-deleted both rows |
| Related delivery/transload history | TMS delivery/profile callers | PRESERVED |
Client 1 equipment-load delivery/transload reads returned HTTP 200 |
| CTC/MK composition | shared editor + tenant document composition | IMPROVED |
Menu-driven Client 1/CTC and Client 2/MK profiles preserve separate list composition and editors without a tenant selector or duplicate Booking backend |
Gate status¶
The ledger prevents silent omission but is not a completion claim. Remaining gates are
actual-provider AI acceptance, a reversible Client 2 two-container bulk fixture, linked
Client 2 Sales Order clone evidence, accepted save/readback performance targets and
target-role visual UAT. Target Cancel/Reopen semantics remain a separate Process decision
and do not relabel the preserved Legacy NOT_IN_USE flag.
---¶
Source:
new-system/docs/pages/transportation/booking-compatibility/CAPABILITY_LEDGER.md— ctc repository · This page is an English translation of the source document. Identifiers, file paths and code symbols are unchanged.