MK CLIENT_ID=2 field demo browser test scenario — 2026-07-30¶
-
Classification:
OBSERVED-FACT -
Class:
DATED TEST WORKSHEET - Status:
EXECUTED / CONDITIONAL_GO_FOR_TWO_INDEPENDENT_CRUD_FLOWS - Tenant: MK Metal Trading,
CLIENT_ID = 2 - Owns: the execution order, verdicts, evidence and cleanup record of the 2026-07-30 field demo session
- Does not own: product policy, permission policy, runtime behavior, DB structure, standing operating procedure, or past test results
- Runtime consumer:
NONE - Related sources:
MK admin2 functional test runbookMK Client 2 validated screen evidence- In-app Wiki
mk-operations MK Client 2 validated screen evidence
This document is a same-day worksheet that is executed directly in the browser and records the results. A past PASS is not
copied over as today's result. An item that was not executed stays NOT_RUN, and an item without its preconditions stays BLOCKED.
1. Session information and execution approval¶
Do not start the write tests after login until the items below are fixed.
| Item | Record before execution |
|---|---|
| Environment / URL | TBD |
| DB host / database | TBD |
| Field user / role | TBD |
| Browser / screen size / zoom | TBD |
| Executor / field reviewer | TBD |
| Start / end time | TBD |
| Allowed write scope | choose one of READ_ONLY / DISPOSABLE CRUD / WORKFLOW PROGRESSION |
| CRUD cleanup owner / method | TBD |
| External effects | forbidden by default: email, provider, real print spool, real scale equipment |
| Wait time the user allows | TBD sec; if it is undecided, measure the seconds only and do not declare a performance PASS |
| Execution marker | MK-DEMO-20260730-<HHMM>-<seq> |
| Evidence location | TBD |
Go / No-Go¶
- [ ] The URL and the DB identity were checked and whether it is Production was recorded.
- [ ] The real
CLIENT_ID = 2, the workspaceMK Metal Tradingand the role of the login account were confirmed on screen. - [ ] The menus the role must be able to reach and the menus it must not reach were agreed with the field reviewer.
- [ ] It is an environment where writing is allowed, and the run-owned data and the cleanup method were fixed.
- [ ] The fixtures to be used - supplier, buyer, commodity, UOM, carrier, shipping line, booking, inventory lot etc. -
were confirmed to be owned by
CLIENT_ID = 2. - [ ] Real customer orders, real inventory, real weighing and real provider transmissions are not touched.
- [ ] If a timeout or an error happens during the test, re-query the list and the detail before pressing the same save button again.
If even one of them is not met, the related write items are BLOCKED. Production writing proceeds only when there is
both a separate explicit approval and a run-owned record with a cleanup method.
2. Common browser observation criteria¶
Open DevTools, turn on Preserve log, then observe the Console and the Fetch/XHR entries of Network together. Passwords,
cookies, tokens and personal contact details are not captured and not pasted into the document.
For each screen and each Save, check the following.
- Screen: the title, workspace, menu active state, table header/body, empty state, buttons, modal and dropdown do not overlap or get cut off. There is no unintended horizontal scroll and no broken character.
- Input: input works with mouse and keyboard, and Tab movement, date selection, select search, checkbox and modal open/close do not stall.
- Save: one click shows the loading state, there is no duplicate submission, and the button becomes active again after completion.
- Result: do not look at the toast only; check the saved values by a list search and by reopening the detail.
- Errors: an uncaught Console error, a duplicate transmission of the same request, HTTP
4xx/5xx, an endless spinner, a blank screen, a session redirect and the exposure of another tenant's data areFAIL. An intended validation4xxis a negative testPASSonly when the business row has not changed. - Speed: write down page load, search, opening the detail and Save time in seconds. If the allowed time was not agreed in advance,
record the perceived delay but do not estimate a performance
PASS.
Common result table:
| ID | Status | Elapsed time | record ID / marker | Console / Network | Screenshot | Notes |
|---|---|---|---|---|---|---|
TBD |
NOT_RUN |
3. Demo input data¶
The values below are connection examples that are used only in an approved disposable environment. A supplier, buyer, commodity, carrier and shipping line that do not conflict with the real master are selected on screen right before execution.
| Data | Value |
|---|---|
| Common prefix | MK-DEMO-20260730-<HHMM> |
| Purchase reference | <prefix>-PO |
| Sales reference | <prefix>-SO |
| Booking reference | <prefix>-BK |
| Inbound reference | <prefix>-IN |
| Outbound reference | <prefix>-OUT |
| Container / seal | disposable value approved before execution |
| Commodity / UOM | MK master approved before execution / LB example |
| Purchase quantity / rate | 1,000 LB / $0.50 example |
| Sales quantity / rate | 1,000 LB / $0.70 example |
| Scale tare / gross / net | 20,000 / 21,000 / 1,000 LB example; not entered on the real equipment |
Keep the same prefix in one flow. Record the order, item, booking, equipment, lot, allocation and ticket IDs that are created automatically after saving, right away.
4. Execution order¶
A. Login and tenant isolation¶
| ID | Browser action | Expected result | Status |
|---|---|---|---|
| A-01 | Log in once with a wrong password only when it is safe under the account lockout policy. | A clear error appears and no protected screen session is created. | NOT_RUN |
| A-02 | Log in normally with the field account. | The agreed landing page opens at once and the username, role and MK workspace are displayed. | NOT_RUN |
| A-03 | Open a protected route in a new tab and refresh it. | The session is kept and the same CLIENT_ID = 2 workspace is visible. |
NOT_RUN |
| A-04 | Check a menu/route that is not allowed for the role. | The menu is hidden or access is denied, and another tenant's data is not displayed. | NOT_RUN |
| A-05 | At the end, log out and then open Back and a protected route. | It returns to the login screen and the previous work screen is not reused. | NOT_RUN |
B. Exhaustive menu and screen smoke¶
Do not compose the address by hand; enter through the menu that is displayed on the login account. A menu that does not exist for the
role is recorded as NOT_APPLICABLE after field confirmation, and a check that needs full permission is done separately with the admin2 account.
In each row run first load → change filter → search → open row/detail → close/return → refresh.
| ID | Menu / check point | Status |
|---|---|---|
| B-01 | Daily Dashboard > Daily Dashboard: period change, purchase/sales/receiving/outbound/inventory/exception cards and the jump to the source |
NOT_RUN |
| B-02 | Operations > Orders > Commercial Orders: Purchase/Sales, period/type/keyword, list/detail/new form |
NOT_RUN |
| B-03 | Operations > Orders > Inbound Orders: list/detail/new form, commodity/item/receipt status |
NOT_RUN |
| B-04 | Operations > Orders > Doortrade Orders: customer filter, the exact target record in the inbound storage |
NOT_RUN |
| B-05 | Operations > Orders > Export Brokerage: booking search, PDF empty state, analyze cancel path |
NOT_RUN |
| B-06 | Operations > Orders > Outbound Orders: period/keyword, booking/container/allocation detail |
NOT_RUN |
| B-07 | Operations > Orders > Booking List: a period that includes the cutoff, keyword, vessel/container/flag detail |
NOT_RUN |
| B-08 | Operations > Schedule & Allocation > Order Schedule: date/week change, inbound/outbound cards and the jump to the source |
NOT_RUN |
| B-09 | Operations > Schedule & Allocation > Allocation Workbench: target, lot, available balance, UOM |
NOT_RUN |
| B-10 | Operations > Scale Portal: schedule, active in-yard, check-in/out form display |
NOT_RUN |
| B-11 | Scale Ticket List or the linked document: existing ticket, gross/tare/net, source link |
NOT_RUN |
| B-12 | Billing & Reports > Trade Summary: period/company/commodity/status, AP/AR/cost/claim popup and the source |
NOT_RUN |
| B-13 | Billing & Reports > Daily Commodity Report: period/company/commodity, purchase/sales tab and totals |
NOT_RUN |
| B-14 | Billing & Reports > Rates > Commodity Rate: effective/expired/overlap list and detail |
NOT_RUN |
| B-15 | Billing & Reports > Rates > Freight Rate: payer/carrier/origin/destination/effective-date and detail |
NOT_RUN |
| B-16 | Admin & Masters > Master Data: the master list and detail that are allowed for the field role; writes are performed only in D |
NOT_RUN |
| B-17 | Admin & Masters > Users & Menus: read-only check of the user/role/menu tree and landing page only in the admin role |
NOT_RUN |
| B-18 | Open Manual in the screen header and check that the MK manual matching the current screen is displayed and closes | NOT_RUN |
C. Core linked operation CRUD¶
Run it only when DISPOSABLE CRUD or WORKFLOW PROGRESSION is approved. After each Save, always perform
list search → reopen detail → compare values.
C-01. Purchase Commercial Order¶
- Open
Purchase > Newin Commercial Orders. - Enter the marker, supplier, reference, dates, commodity,
1,000 LB,$0.50and terms. - After saving, check the header and item, the expected amount and the status in the list/detail.
- Change the remark or one field that does not affect execution, and open it again.
- Delete only while there is no downstream link, and check
0active rows for the marker.
Pass criteria: Create/Read/Update/Delete are each reflected once, and there are no orphan header/item rows or downstream links.
C-02. Sales Commercial Order¶
- Open
Sales > Newand enter the marker, buyer, reference, dates, commodity,1,000 LBand$0.70. - If approved, link the C-01 Purchase; otherwise save it as an independent disposable Sales.
- Check the type, counterparty, quantity/UOM, rate, amount, link and status in the list/detail.
- After a modification read-back, delete only in the pre-execution state and check
0active rows.
Pass criteria: the type, party and rate of Purchase and Sales are not swapped with each other and are visible only inside tenant 2.
C-03. Booking¶
- Open
Newin Booking List. - Enter the booking reference, shipping line, vessel, type, container count/size, min/max weight, ERD, SI/cargo cutoff, ETD/ETA, POL/POD, customer, shipper and commodity.
- After saving, search with a period that includes the cutoff and open the detail again.
- Change the container or a safe flag and open it again.
- In Booking Confirmation and the MK Packing List preview, check that the booking, parties, vessel, ports, container and commodity match the source.
Pass criteria: the same values are shown right after saving and after a refresh, and the preview shows the source accurately. No real print, email or file save is performed.
C-04. Inbound¶
- Open
Newin Inbound Orders and enter the purchase reference, supplier/shipper, load/ticket, commodity, quantity/UOM and marker. - If the packing PDF is an approved fixture, proceed only as far as
select → analyze → review/correct the extracted values. - After saving, open the order and each item again and check the source reference, weight source and quantity/UOM.
Warehouse Onlycomplete-without-scale is run only when there is a non-ProductionWORKFLOW PROGRESSIONapproval. If it is run, record the transload and the inventory lot ID, quantity, weight, UOM and status.
Pass criteria: the header/item are saved exactly, and a lot is created once only when the progression is approved. A progressed row is not treated as a normal Delete target.
C-05. Outbound¶
- Open
Newin Outbound Orders and enter the sales reference, C-03 booking, container, size/seal, shipper/consignee, carrier, commodity, requested date and marker. - After saving, check the booking/container link, the item, the open weight and the status in the list/detail.
- Change a field that does not affect execution and open it again.
Pass criteria: it does not report that an allocation was created by the creation of the outbound alone, and the booking/container and tenant are correct.
C-06. Schedule and Allocation¶
- Search the C-04/C-05 reference in Order Schedule and move from the card to the original detail.
- In Allocation Workbench select the C-05 target and the disposable lot that was created in C-04.
- Check the target demand, lot identity, commodity, balance, UOM and the applied quantity.
- Press Apply once only when
WORKFLOW PROGRESSIONand the cleanup method are approved. - Open the outbound allocation summary and the source lot balance again and record the state before and after applying.
Pass criteria: it is reflected only once, on the correct target/lot. Since there is no normal unallocate route, if there
is no cleanup method then Apply is BLOCKED.
C-07. Scale Portal¶
- Open the approved non-Production scale fixture.
- Check the vehicle/party/cargo/source order and enter the examples tare
20,000, gross21,000. - Check that the net on the screen is calculated as
1,000. - If approved, run check-in once and open the same ticket in the active in-yard list.
- If approved, run check-out/finalize once and check that it disappeared from the active list.
- Check the gross/tare/net and the source ID in the ticket print view and the linked order.
Pass criteria: the state of each step is reflected once, without affecting the real scale equipment or the operational ticket.
C-08. Trade Summary and document output¶
- Search Trade Summary by container or marker.
- Compare the Purchase/Sales reference, commodity, quantity, AP, AR, costs, invoice and margin with the source.
- Preview the linked document among Booking Confirmation, MK Packing List, legacy Packing List, FBOL, Scale Ticket, Local Invoice, Sales Weight Ticket.
- Compare the parties, booking/order/container, ports, weights and rate/amount of each document with the source.
Pass criteria: the summary and the document project the current source accurately. A preview is not evidence that the save, transmission or print has completed.
C-09. Screen-only connected E2E with a single marker¶
This item is separate from the individual API/feature tests. It verifies whether one user can enter through the menu with the same browser session and the same marker, connect the work through the form/modal/button of the real screen, and query the wanted information again on the last screen.
Common restrictions:
- A work mutation starts only from a control that is visible on the screen.
page.evaluate(fetch), an API request helper and a direct SQL/DB fixture write cannot be used as evidence for a PASS in a work step. - The DB is used only to check the identity/tenant before execution, to compare read-only after a save and to confirm the bounded cleanup after the execution ends. A cleanup recovery is recorded separately from the user's work path.
- The automated Playwright and the in-app browser runtime must each verify the same steps and expected results.
- If there is no field role account for
CLIENT_ID=2, theadmin2execution result is only operator-proxy evidence and not a field-role readiness PASS.
E2E-UI-01. Purchase → Receiving → Inventory query¶
- Create a Purchase on the screen from the
Commercial Ordersmenu and enter the marker, supplier, commodity, quantity/UOM/rate. - Query the Purchase header/item with a list search and by reopening the detail.
- Link a Purchase in the
Inbound Ordersmenu, or create a receiving order on the screen with the same marker. - Query the order, source reference, commodity and quantity/UOM in the Inbound list/detail.
- Complete the receiving in
Scale Portalwith the approvedWarehouse Onlyor with a scale path that the screen allows. - Query the created lot, source order, commodity, quantity, remaining quantity and UOM on the Inventory/Allocation screen.
Pass criteria: one marker continues across the Purchase → Inbound → Inventory screens, the screen can be re-queried after the save at each step, and a lot is created only once.
E2E-UI-02. Sales/Booking → Outbound → Allocation → document/billing query¶
- Create a Sales on the screen in
Commercial Ordersand check the Purchase link, buyer, commodity and rate. - Create a booking on the screen in
Booking Listwith the same marker, save the vessel/ports/container/commodity and then query them again in the list/detail. - Connect the same marker with the Sales/Booking/container on the screen in
Outbound Orders. - In
Allocation Workbenchselect the lot from E2E-UI-01 and the outbound target and apply it. - Query the target, lot, applied quantity and remaining quantity in the Outbound detail and the Inventory/Allocation screen.
- Query the PO/SO, booking, container, commodity, weight and rate/amount in
Trade Summaryand in the linked document preview.
Pass criteria: the same marker and the real ID link are kept on the screen, and the final user can query the source/detail/summary/ document on the screen.
E2E-UI-03. Screen errors/recovery and session persistence¶
- Run a Save with a missing required value and an Allocation over the allowed quantity on the screen, once each.
- Check that a clear validation appears and re-query the screen to confirm that the existing linked data has not changed.
- Check the modal Cancel, the screen refresh, a protected route in a new tab and Back/direct route after logout.
Pass criteria: it recovers without a duplicate row or a partial save, the same marker can be queried again after a refresh/re-login, and the protected screen is not reused after logout.
D. Supporting CRUD¶
Do not modify the master used for work; use only disposable rows.
| ID | Action | Pass criteria | Status |
|---|---|---|---|
| D-01 | Commodity Rate create → list/detail read → rate/date edit → comparison in the consuming form → delete | company, commodity, rate, UOM and effective/expiration are correct and active row 0 |
NOT_RUN |
| D-02 | Freight Rate create → list/detail read → rate/date edit → comparison in the consuming form → delete | payer, carrier, origin/destination, condition and rate/date are correct and active row 0 |
NOT_RUN |
| D-03 | cost create → edit → Trade Summary comparison → delete in the approved run-owned outbound | the source transaction and the summary show the same values and active cost 0 |
NOT_RUN |
| D-04 | Master Data / Users & Menus | read-only is the default today. Without a separate approval, company, commodity, user, role and menu are not changed. | NOT_RUN |
E. Errors and recovery¶
Each item is run one at a time on an approved non-Production dedicated disposable fixture. After the intended error, check whether a business row related to the marker was created or changed.
| ID | Action | Expected result | Status |
|---|---|---|---|
| E-01 | Save a Commercial Order with the required values emptied | an understandable validation appears near the field and row 0 |
NOT_RUN |
| E-02 | Submit an invalid date range or a duplicate number | it is clearly rejected and the existing row does not change | NOT_RUN |
| E-03 | Apply an Allocation larger than the lot balance/target | it is rejected and the allocation and the lot balance do not change | NOT_RUN |
| E-04 | A fast double click on the same Save/Apply | the request and the business write happen only once | NOT_RUN |
| E-05 | A refresh or timeout simulation right after Save | it is possible to tell from the list/detail before a retry whether it was committed | NOT_RUN |
| E-06 | Cancel in the modal or Esc |
it closes without a write and the background input/scroll/focus recovers normally | NOT_RUN |
| E-07 | 0 search results, a long marker, special character input | the layout does not break and a safe empty state/validation is shown | NOT_RUN |
| E-08 | Try to enter another tenant's ID/reference in an approved isolated test | the query/save is rejected and no external record is exposed on the tenant 2 screen | NOT_RUN |
5. Cleanup and termination¶
Proceed with the cleanup in the reverse order of creation. Do not force-delete a row that has a progressed record or an allocation.
cost / disposable rate
-> allocation or the approved recovery
-> outbound
-> the approved recovery of inbound execution / lot / transload
-> booking
-> sales commercial order
-> purchase commercial order
- [ ] All screens were searched by marker and the number of active records and each ID were recorded.
- [ ] After delete/cancel the list was refreshed and it was checked whether a direct reopen of the detail is blocked.
- [ ] The soft-delete audit row was recorded as normal preservation and it was checked that only the active row is
0. - [ ] A row that cannot be cleaned up was recorded with its ID, current state, downstream link and owner, and left as
FAILorBLOCKED. - [ ] The secrets were removed from the Console and Network logs and then the evidence was saved.
- [ ] The A-05 logout verification was completed.
6. Failure record¶
ID:
Time / user / role:
Environment / URL:
marker / record ID:
Reproduction steps:
Expected:
Actual:
Console error:
HTTP method / path / status / safe response summary:
Number of duplicate requests:
Screen screenshot:
DB or source read-back:
Remaining data / cleanup:
Whether it was retried:
Stop the relevant flow immediately in the following situations.
- The workspace or DB identity is not confirmed as
CLIENT_ID = 2. - A record of another tenant is visible or selected.
- Save raised a timeout/an error and whether it was committed has not been re-queried yet.
- A header/item/booking/lot/allocation/ticket of the same marker was created duplicated.
- The effect of email, provider, real print spool or real scale equipment is about to start.
- There is no cleanup path, or progressed data has to be force-deleted.
7. Final verdict¶
| Scope | Status | PASS / total | Main blocker or defect |
|---|---|---|---|
| Login / tenant / role | NOT_RUN |
0 / 5 | |
| Menu / screen smoke | NOT_RUN |
0 / 18 | |
| Core connected CRUD | NOT_RUN |
0 / 8 | |
| Supporting CRUD | NOT_RUN |
0 / 4 | |
| Error / recovery | NOT_RUN |
0 / 8 | |
| Cleanup / logout | NOT_RUN |
0 / 6 |
Write the final decision as one of the following.
GO: every required item included in the demo is PASS and there is no remaining data and no unconfirmed external effect.CONDITIONAL GO: a read/explanation demo is possible, but the named write or feature has to be excluded.NO-GO: login, tenant isolation, a core Save/read-back, a critical screen error or cleanup failed.
Final report¶
Environment / user / role:
Decision: GO | CONDITIONAL GO | NO-GO
PASS:
FAIL:
BLOCKED:
NOT_RUN:
Created / changed / deleted record ID:
Remaining data:
External effects:
Evidence location:
Features to exclude from the demo:
8. Local execution result of 2026-07-30¶
8.1 Execution environment¶
| Item | Result |
|---|---|
| URL | http://localhost:8080 |
| DB identity | local kyle-mba:3306, database prod, MySQL 8.4.8; the write execution runs only after the host is confirmed to be loopback |
| Account | admin2, user ID 224, CLIENT_ID=2, ROLE_ID=1 |
| workspace | MK METAL TRADING |
| Browser | Playwright Chromium headless automation + cross-check with the Codex in-app browser runtime |
| Allowed scope | local disposable CRUD / workflow progression; real email, provider, print spool and scale equipment effects are forbidden |
| End time | 2026-07-30 19:50 +07 |
8.2 Verdict summary¶
| Scope | Status | Result | Notes |
|---|---|---|---|
| Login / tenant / role | PARTIAL_PASS |
3 PASS / 1 N/A / 1 NOT_RUN | normal login, new tab session and logout/protected route blocking PASS. Because it is admin2, the restricted role menu check is N/A, and the wrong password is NOT_RUN because of the lockout risk |
| Menu / screen smoke | PASS |
18 / 18 | automated smoke of 14 core routes + in-app check of Scale Ticket, Master, User, Menu, Manual |
| Core connected CRUD | PASS |
8 / 8 | the connected flow of Commercial, Booking, Inbound, Outbound, Allocation, Scale, Trade/doc |
| Supporting CRUD | PASS |
4 / 4 | Commodity/Freight Rate CRUD, outbound cost CRUD, admin master read-only |
| Error / recovery | PARTIAL_PASS |
5 PASS / 1 PARTIAL / 2 NOT_RUN | validation/duplicate, overdraw, cancel, empty state and cross-tenant blocking PASS; the rollback is PASS but the timeout simulation was not run; the double click and the required-value UI validation were not run |
| Cleanup / logout | PASS |
6 / 6 | run-owned active row 0, a protected route redirects to login after logout |
8.3 Main automation evidence¶
| Verification | Status | Main result |
|---|---|---|
playwright_wp08_15_mk_filter_smoke_uat.js |
PASS |
14 routes: Commercial, Inbound, Outbound, Allocation, Dashboard, Daily Commodity, Doortrade, Export Brokerage, Booking, Schedule, Scale, Trade Summary, Commodity/Freight Rate; page error 0 |
| Commercial/Rate supplementary runner | PASS |
marker MK-DEMO-20260730-1785415521207; Purchase/Sales create-update-link-read-delete, Commodity/Freight Rate create-update-read-delete; active residue 0 |
playwright_wp08_10_mk_booking_crud_uat.js |
PASS |
booking 57326; active 0 after create/update/delete |
playwright_wp07_05_mk_inbound_purchase_lot_uat.js |
PASS |
order 154530, item 483686, transload 121356, lot 297571; all cleaned up after the state/quantity read-back |
playwright_wp08_19_mk_inbound_atomic_save.js |
PASS |
order 154531; normal atomic save/delete, the intended invalid save 400 and the rollback |
playwright_wp08_09_mk_allocation_apply_restore_uat.js |
PASS |
source 154532, target 154533, lot 297572, allocation 201141; overdraw/foreign lot rejected, balance 10 restored |
playwright_wp08_12_mk_scale_finalize_uat.js |
PASS |
order 154534, ticket 158754; gross 120, tare 20, net 100, finalize and cleanup |
playwright_wp08_13_export_brokerage_cancel_uat.js |
PASS |
inbound 154535, outbound 154536; before cancel orders 2/allocations 1, after 0/0 |
playwright_wp08_14_booking_document_render_uat.js |
PASS |
Booking Confirmation, MK/legacy Packing List, Local Invoice, Sales Weight Ticket, Scale Ticket rendering |
playwright_wp08_16_fbol_render_uat.js |
PASS |
equipment 175712, load 176951, delivery 207783; active 0 after the FBOL rendering |
playwright_wp08_17_mk_cost_packing_write_restore_uat.js |
PASS |
booking 57327, order 154537, item 483695; cost create-update-delete, packing rate 1.25 → 2.5 → 1.25, cleanup |
playwright_wp08_12_commercial_error_recovery_uat.js |
PASS |
invalid date, foreign/self link and duplicate number are all 400; active 0 |
playwright_wp07_04_mk_preview_no_write.js |
FAIL |
timeout because the Open Detail button was not found with the current filter/fixture. Since the later dedicated document render UAT PASSed on the same document group, it is not reproduced as a product document rendering defect |
Screen evidence:
output/playwright/wp07-05-mk-inbound-purchase-lot-154530.pngoutput/playwright/wp08-19-atomic-save-154531.png- Daily Dashboard was checked visually in the in-app browser, and the console was
error/warning = 0
8.4 Final remaining data check¶
The CLIENT_ID=2 AND DELETED_AT IS NULL totals of the run-owned IDs below are all 0.
T_BOOKING, T_LOAD, T_LOAD_ITEM, T_TRANSLOAD, T_INVENTORY_LOT,
T_LOAD_ALLOCATION, T_SCALE_TICKET, T_DELIVERY, T_EQUIPMENT,
T_EQUIPMENT_LOAD, T_COMMERCIAL_ORDER(MK-DEMO-20260730-%)
8.5 Final decision¶
CONDITIONAL GO
- The login based on the local
admin2, the whole menu/screen smoke, the core CRUD, the connected workflow, the document preview and the cleanup can be demoed. - The role/permission of the real field account was not verified, so only the login and the menu exposure with that account are re-checked before the demo.
- Real email/provider, AI PDF analysis, print spool, physical scale equipment and timeout/double-click recovery are excluded from the demo scope.
- Because the allowed performance time was not agreed, a performance PASS is not declared.
9. Screen-only connected E2E rerun — 2026-07-30 20:34 +07¶
This section is the result of running it again with a new marker after C-09 was added. The individual API/CRUD successes were not replaced by a connected E2E PASS, and within the C-09 scope this section takes priority over the earlier verdicts in 8.2 and 8.5.
9.1 E2E-UI-01 Purchase → Receiving → Inventory¶
| Action | Status | Result |
|---|---|---|
| Playwright screen-only connected execution | PASS |
marker MK-E2E-UI-1785417123028; Commercial Purchase 31 → Inbound 154540 → item 483698 → Inventory lot 297576 |
| Purchase list/detail re-query | PASS |
PO20260730-003, 10 LB, rate 0.5000 |
| Inbound list/detail re-query | PASS |
Commercial Order 31 linked, 10 LB, reference/load marker kept |
| Scale Portal Warehouse Only | PASS |
completed once with the screen button, one lot created |
| Allocation Workbench inventory query | PASS |
source order/item, inbound/remain 10 LB, status OPEN queried on the screen |
| In-app browser cross execution | FAIL |
PASS up to the creation, the list and the detail query of Purchase 48. The same Purchase was linked in Inbound, but after the visible Gross/Tare was entered the read-only Net was not recalculated from 0.000, so Create was blocked with Row 1: Gross/Tare(Net) must be valid. |
The in-app failure was not bypassed with a hidden API or a DOM mutation. Since the same product path passed in the automated Playwright, it must be checked separately whether a real keyboard change event is reproduced in the manual field Chrome. Until that is confirmed, the connected input demo is not treated as GO.
9.2 E2E-UI-02 Sales / Booking / Outbound / Summary¶
| Action | Status | Result |
|---|---|---|
| Commercial Sales creation/list/detail | PASS |
marker MK-E2E-SALES-1785417931535; Sales 47, SO20260730-002, 10 LB, rate 0.7000 |
| Purchase ↔ Sales on-screen link | BLOCKED |
The Purchase link control is not displayed in the Sales form, and the save payload does not receive the LINKED_ORDER_ID of the Sales either. Under the current screen contract the original C-09 order is not possible |
| Booking creation/list/detail | PASS |
Booking 57336, vessel/ports/SSL saved and the Booking Confirmation queried on the screen |
| Outbound creation/list/detail | PASS |
Outbound 154544, item 483702; linked with Commercial Sales 47 and Booking 57336, 10 LB, rate 0.7000 |
| Reverse link of the Outbound Sales Order in the Booking | FAIL |
The Outbound was selected in the on-screen SO # and saved, but PATCH /api/tms/bookings/57336 returned 400; the message that the T_BOOKING sales-order storage columns are not applied |
| Allocation | NOT_RUN |
the workflow progression stopped after the two-way link failed |
| Trade Summary | FAIL |
no search result for the same marker |
The search target of SO # in the Booking is not the Commercial Sales but the T_LOAD Outbound Sales
Order that was already created. Therefore the real screen-dependent order is Commercial Sales → Outbound → Booking SO link, but
the current local DB has no schema column to store that link, so the process cannot be completed to the end.
9.3 Errors/recovery and cleanup¶
| Item | Status | Result |
|---|---|---|
| Commercial Save with the required customer missing | PASS |
a clear validation dialog from the visible Save, no business row created |
| Modal Cancel | PASS |
return to the list after cancelling the failed Inbound form |
| Console / page error | PARTIAL |
the E2E-UI-01 automated run is 0/0; E2E-UI-02 has 1 resource console error caused by the unintended Booking 400 |
| run-owned cleanup | PASS |
active residue 0 after the bounded cleanup by marker/ID of the two automated flows and the in-app Purchase |
| External effects | PASS |
no email/provider/print spool/physical scale equipment call |
Final active residue re-query:
{"commercial":0,"loads":0,"bookings":0}
9.4 Rerun final decision¶
NO-GO — full connected input demo
- The user could query the information created on each of the Purchase, Inbound, Inventory and Sales, Booking, Outbound screens in the list and the detail.
- However, from the point of view of a field user, a single end-to-end flow could not be completed because of the blocked in-app Net recalculation and the Booking sales-order schema that is not applied.
- The final query up to Trade Summary and Allocation was not completed either.
- Since
CLIENT_ID=2has no real field role account and onlyadmin2, this result is operator-proxy evidence and not a field-role readiness PASS. - Today's demo is
CONDITIONAL GOonly for reading/explaining the individual screens; the connected CRUD demonstration is excluded.
10. Re-verification after the defect fix — 2026-07-30 20:48 +07¶
This section is the result of a rerun with a new marker after the cause of the failure in section 9 was fixed, and for the latest verdict on that failure item this section takes priority.
10.1 Fix¶
| Target | Status | Result |
|---|---|---|
| Inbound Gross/Tare → Net | FIXED |
The weight event of the shared Inbound editor was changed from change to input, so Net is updated immediately during keyboard, paste and stepper input |
| Booking SO save | FIXED |
The existing scripts/migrations/2026-05-28_task-638_booking_sales_order_pointer.sql was applied to the local localhost:3306/prod; SALES_ORDER_ID, SALES_ORDER_UUID and 2 tenant-first indexes were read back |
| Trade Summary test verdict | FIXED |
The test that judged the result before the async GET completed was changed to wait for the container search, the response completion and the visible row |
10.2 Screen rerun¶
| Action | Status | Result |
|---|---|---|
| Purchase → Inbound → Warehouse Only → Inventory | PASS |
marker MK-E2E-UI-1785419062330; Purchase 49 → Inbound 154545 → item 483703 → lot 297577; 10 LB, rate 0.5000, lot OPEN; cleanup 0 |
| Sales → Booking → Outbound → Booking SO reverse link | PASS |
marker MK-E2E-SALES-1785419179172; Sales 51, Booking 57338, Outbound 154547, item 483705; Booking PATCH 200; cleanup 0 |
| Trade Summary final query | PASS |
the result row is displayed after the async query with container E2E19179172 completes |
| In-app browser Inbound cross-check | PASS |
Net 21.000 right after entering the visible Gross 21, Net 16.000 right after entering Tare 5; Cancel without saving |
| In-app browser Trade Summary cross-check | PASS |
the search result for container MKMK01011 in the menu route /mk-deal-ledger is 1 records; console error/warning 0 |
| Allocation normal/over/retry/recovery matrix | PASS |
marker WP08-09-1785419303367-23e489; over and other tenant rejected, 2 normal applies, lot 10 restored, fixture/target/equipment cleanup |
The console/page error of the automated screen execution was 0 in every case. Real email/provider, print spool and physical
scale equipment was not called.
10.3 Latest verdict¶
CONDITIONAL GO — demo of 2 independent connected CRUD flows
- Purchase → Inbound → Inventory and Sales → Booking → Outbound → Trade Summary were created with a new marker and passed through the list, the detail, the final query and the cleanup.
- The Inbound Net input block and the Booking SO schema difference that were found earlier were not reproduced.
- The C-09 full connected E2E with a single marker is
NO-GO. The Purchase ↔ Sales on-screen link is stillBLOCKED, and the two flows and the Allocation verification used different markers. Also, not every step was repeated in the in-app browser, and a visible Allocation Apply in the same browser session was not performed either. - In today's live demo only the two independent flows above and the safe queries are demonstrated. Since there is no normal unallocate path, Allocation Apply is not pressed without a prior agreement.
- Since
CLIENT_ID=2has no real field role account and onlyadmin2, the role readiness is stillNOT_RUN.
Original:
docs/research/mk/2026-07-30/MK_CLIENT2_FIELD_DEMO_BROWSER_TEST_SCENARIO.md— ctc repository