From 2f0e6582d57f69df5e8007ec85c20976e4ecccbc Mon Sep 17 00:00:00 2001 From: andy Date: Tue, 29 Sep 2026 15:43:15 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=A4=87=E6=B3=A8=E6=B2=A1?= =?UTF-8?q?=E6=9C=89=E5=B8=A6=E5=85=A5=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../20260929-hotel-native-remark-01a0858b.md | 36 + LianSyn-platform/app.js | 2 +- .../test-fixtures/lwlt-lifecycle/release-gate.md | 3 +- .../hotel-native-remark-01a0858b/README.md | 20 + .../hotel-native-remark-01a0858b/build.txt | 0 .../control-plane-tests.txt | 1875 +++++++++++ .../http-tests.txt | 12 + .../legacy-tests-sandbox.txt | 2766 +++++++++++++++++ .../repository-clean-tests.txt | 70 + .../repository-local-residue.txt | 132 + .../typecheck.txt | 0 archive/releases/2026-09-29/README.md | 5 + .../hotel-native-remark-01a0858b/README.md | 3 + .../ltjt-order-assistant-0.5.190.zip | Bin .../ltjt-order-assistant/README.md | 9 +- .../ltjt-order-assistant/inpage.js | 2 +- .../lifecycle-adapters.js | 46 +- .../ltjt-order-assistant/manifest.json | 2 +- .../ltjt-order-assistant/team-batch-inpage.js | 2 +- dist/ltjt-order-assistant-0.5.191.zip | Bin 0 -> 247885 bytes dist/release-manifest.json | 10 +- mappings/lifecycle.mapping.json | 3 +- tools/hotel-create-empty-slot.test.mjs | 109 +- tools/hotel-update-selection.test.mjs | 13 + tools/lifecycle-contract.test.mjs | 14 +- 25 files changed, 5104 insertions(+), 30 deletions(-) create mode 100644 .project-docs/30-worklog/tasks/20260929-hotel-native-remark-01a0858b.md create mode 100644 archive/evidence/2026-09-29/hotel-native-remark-01a0858b/README.md create mode 100644 archive/evidence/2026-09-29/hotel-native-remark-01a0858b/build.txt create mode 100644 archive/evidence/2026-09-29/hotel-native-remark-01a0858b/control-plane-tests.txt create mode 100644 archive/evidence/2026-09-29/hotel-native-remark-01a0858b/http-tests.txt create mode 100644 archive/evidence/2026-09-29/hotel-native-remark-01a0858b/legacy-tests-sandbox.txt create mode 100644 archive/evidence/2026-09-29/hotel-native-remark-01a0858b/repository-clean-tests.txt create mode 100644 archive/evidence/2026-09-29/hotel-native-remark-01a0858b/repository-local-residue.txt create mode 100644 archive/evidence/2026-09-29/hotel-native-remark-01a0858b/typecheck.txt create mode 100644 archive/releases/2026-09-29/README.md create mode 100644 archive/releases/2026-09-29/hotel-native-remark-01a0858b/README.md rename {dist => archive/releases/2026-09-29/hotel-native-remark-01a0858b}/ltjt-order-assistant-0.5.190.zip (100%) create mode 100644 dist/ltjt-order-assistant-0.5.191.zip diff --git a/.project-docs/30-worklog/tasks/20260929-hotel-native-remark-01a0858b.md b/.project-docs/30-worklog/tasks/20260929-hotel-native-remark-01a0858b.md new file mode 100644 index 0000000..ff06bd6 --- /dev/null +++ b/.project-docs/30-worklog/tasks/20260929-hotel-native-remark-01a0858b.md @@ -0,0 +1,36 @@ +# 酒店新增保留原生备注 + +## Scope + +- 用户授权修复新增酒店时默认备注被空值覆盖:未填写备注保留选中酒店原生备注,明确填写时覆盖;酒店变更继续保留未指定的原记录备注。 +- 单条与同团批量共用执行路径。无真实 ERP 写入、部署、重启、扩展重载或外部发送。 + +## Worktree gate + +- Branch: main;worktree: `/Users/andy/IdeaProjects/LWLT-AIBOT`;base: `c2c71d35afbb7c1b9d28bda1b28926a9681414b6`。 +- 唯一 worktree;既有改动仅暂存 `.idea/` 文件,与本任务无重叠,保留原状。Overlap: Clear。 +- Feature 模式;单智能体;canonical 项目记忆只读。 + +## Plan + +1. 捕获所选酒店原生备注,防止日期/数量回调清空;用户明确备注优先。 +2. 将冻结后的备注纳入保存前保护和持久回查证据,旧版历史回查兼容。 +3. 增加单条/批量及异常回归,更新插件版本、最低版本、mapping、ZIP 和清单,完成仓库检查。 + +## Results / Validation + +- 完成默认酒店备注捕获与冻结;显式备注覆盖;资源/日期/数量回调不能静默清空待保存备注,其他行与已有酒店变更语义保持。 +- 默认备注创建证据 v2 绑定原始操作与备注摘要,保存前 guard 和写后 fresh GET/只读回查验证;缺失或不一致时阻断/不确定,历史 v1 回查兼容。批量按条独立生效。 +- 本地控制面 299/299 通过;插件/兼容 452 项中沙箱通过 450 项,另 2 项 HTTP 监听受限,经批准后定向重跑 2/2 通过。类型检查、构建及干净同内容源码副本仓库检查 10/10 通过。 +- 原工作目录仅有两项既有卫生检查失败(.idea、.DS_Store、历史日志),未删除或认领;.env 未读取。 +- 插件、平台最低版本、mapping、测试与发布清单同步 0.5.191。ZIP 21 文件逐字节匹配源码;原 0.5.190 ZIP 验证原清单哈希后归档。扫描仅清单引用旧 ZIP,无其他活动链接需修复。 +- 无新迁移;解析器/Skill/运营模板/DOCX 不变。当前未提交 Git,未部署或真实 ERP 验收。 +- [验证证据](../../../archive/evidence/2026-09-29/hotel-native-remark-01a0858b/README.md);[发布清单](../../../dist/release-manifest.json)。 + +## Follow-ups + +- 更新插件至 0.5.191 并同步平台最低版本,刷新平台/ERP 后在授权环境验收原生备注联动;历史已保存空备注不自动回填。 + +## Promotion Candidates + +- 目标:canonical 安排规则。建议登记酒店新增未指定备注继承所选资源默认备注,显式值覆盖,变更保留未指定原记录值;v2 证据用于新增默认备注持久核验。用户已授权方向,本地验证通过,生产真实验收待执行。 diff --git a/LianSyn-platform/app.js b/LianSyn-platform/app.js index 54db9e5..a6d076c 100644 --- a/LianSyn-platform/app.js +++ b/LianSyn-platform/app.js @@ -103,7 +103,7 @@ const persistedExtensionResultVersions = new Map(); let taskCreateInProgress = false; const AUTO_HANDOFF_RETRY_MS = 30_000; -const REQUIRED_EXTENSION_VERSION = '0.5.190'; +const REQUIRED_EXTENSION_VERSION = '0.5.191'; const MANUAL_HANDOFF_LABEL = '确认并提交到 ERP 插件'; const RETRY_HANDOFF_LABEL = '继续提交到 ERP 插件'; const RECONCILE_LABEL = '只读回查 ERP 现有结果'; diff --git a/agent设计规范/test-fixtures/lwlt-lifecycle/release-gate.md b/agent设计规范/test-fixtures/lwlt-lifecycle/release-gate.md index f687475..6f0b092 100644 --- a/agent设计规范/test-fixtures/lwlt-lifecycle/release-gate.md +++ b/agent设计规范/test-fixtures/lwlt-lifecycle/release-gate.md @@ -2,7 +2,8 @@ ## 当前基线 -- Chrome 插件:`0.5.190` +- Chrome 插件:`0.5.191` +- `0.5.191` 酒店新增默认备注保留:原生选择后立即冻结备注,用户明确填写时覆盖;保存前保护及持久回查核对,单条/批量共用。旧 v1 回查与已有安排变更保持。仅本地合成回归,真实 ERP 验收待部署方完成;需更新插件/平台最低版本,无迁移。见[验证证据](../../../archive/evidence/2026-09-29/hotel-native-remark-01a0858b/README.md)及[任务记录](../../../.project-docs/30-worklog/tasks/20260929-hotel-native-remark-01a0858b.md)。 - `0.5.190` 同团批量酒店新增:2—10 个完整酒店块先整批验证,串行逐条复用原生保存/回查,首次失败或不确定停止,保留成功前缀和未执行清单;只读核验不自动续写。需同步控制面/平台和插件,无新增迁移;本地合成验证,真实 ERP 验收待部署方完成。见[验证证据](../../../archive/evidence/2026-09-24/hotel-batch-01a0858b/README.md)和[任务记录](../../../.project-docs/30-worklog/tasks/20260924-hotel-batch-01a0858b.md)。 - `0.5.189` 仅修复大交通与其他/备案新增的默认日期空行误判:行日期等于页面有效发团日期且数量为原生空/0/1 时允许进入原有空行校验,资源、说明、备注、费用、付款、审核与独立备案保护仍保留;其他安排、非默认日期和变更/清除不放宽。需更新插件、平台最低版本并刷新 ERP 页面,无服务端逻辑/迁移变更;真实 ERP 验收待部署方完成。见[本地验证](../../../archive/evidence/2026-09-22/arrangement-default-date-01a0b77e/README.md)及[任务记录](../../../.project-docs/30-worklog/tasks/20260922-arrangement-default-date-01a0b77e.md)。 - `0.5.188` 与程序解析器 `v1.0.14` 修复单个下单的产品格式匹配:比较双方统一 NFKC/空白,保留标点及业务限定词,唯一候选使用 ERP 原名联动;keyword 保留输入原始格式。初始失败跳过后续依赖校验,零/多产品候选提供独立中文原因。真实公共预检入口的合成回归通过,生产 ERP 验收待部署方完成;需同步服务端、插件和平台,无迁移。见[验证证据](../../../archive/evidence/2026-09-19/product-name-normalization-01a0b77e/README.md)及[任务记录](../../../.project-docs/30-worklog/tasks/20260919-product-name-normalization-01a0b77e.md)。 diff --git a/archive/evidence/2026-09-29/hotel-native-remark-01a0858b/README.md b/archive/evidence/2026-09-29/hotel-native-remark-01a0858b/README.md new file mode 100644 index 0000000..e1f175a --- /dev/null +++ b/archive/evidence/2026-09-29/hotel-native-remark-01a0858b/README.md @@ -0,0 +1,20 @@ +# 酒店新增默认备注本地验证 + +此目录保存 2026-09-29 修复的不可变本地证据,不定义当前业务规则,也不是运行时输入。 + +## 结果 + +- 酒店原生选择后、资源/日期/数量事件前冻结所选行备注;省略备注继承该值,明确填写覆盖。其他行保持,已有酒店变更未填备注保持原记录。 +- 默认备注保存前校验,v2 创建证据绑定原操作与备注摘要,fresh GET/只读回查验证持久值;缺失证据或保存后变化不报成功。历史 v1 回查保持原语义。单条与批量逐条均覆盖。 +- 控制面 299/299 通过;插件/兼容测试共 452 项,沙箱中 450 项通过,2 项仅因本机监听 `EPERM` 失败,经批准解除该限制后定向重跑 2/2 通过。完整日志和定向结果均保留,没有隐藏失败日志。 +- 类型检查、构建通过;同内容干净源码副本仓库检查 10/10 通过,ZIP 的 21 个文件已与当前插件源码逐字节比对。 +- 原工作目录的仓库检查有两项既有卫生失败:`.idea/`、`.DS_Store`、历史日志。均保留不动;干净副本只排除这些已有杂项及秘密配置,未读取 `.env`。 +- 发布插件/平台最低版本/mapping/ZIP 为 0.5.191。无 Schema、解析器、Skill、运营模板/DOCX 或数据库迁移变更。 +- 未访问/写入真实 ERP,未部署、重启、扩展重载或外部发送。生产验收仍需更新后执行。 + +## 日志 + +- [控制面](control-plane-tests.txt) +- [插件/兼容完整沙箱结果](legacy-tests-sandbox.txt)、[HTTP 两项定向重跑](http-tests.txt) +- [干净副本仓库检查](repository-clean-tests.txt)、[原目录既有残留](repository-local-residue.txt) +- [类型检查](typecheck.txt)、[构建](build.txt)(成功时无输出) diff --git a/archive/evidence/2026-09-29/hotel-native-remark-01a0858b/build.txt b/archive/evidence/2026-09-29/hotel-native-remark-01a0858b/build.txt new file mode 100644 index 0000000..e69de29 diff --git a/archive/evidence/2026-09-29/hotel-native-remark-01a0858b/control-plane-tests.txt b/archive/evidence/2026-09-29/hotel-native-remark-01a0858b/control-plane-tests.txt new file mode 100644 index 0000000..aec82ec --- /dev/null +++ b/archive/evidence/2026-09-29/hotel-native-remark-01a0858b/control-plane-tests.txt @@ -0,0 +1,1875 @@ +TAP version 13 +# Subtest: account migration adds roles, actor attribution, and reversible archive without purging history +ok 1 - account migration adds roles, actor attribution, and reversible archive without purging history + --- + duration_ms: 55.178209 + type: 'test' + ... +# Subtest: team-lead migration adds the role and bounded dashboard indexes without a tenant concept +ok 2 - team-lead migration adds the role and bounded dashboard indexes without a tenant concept + --- + duration_ms: 21.757208 + type: 'test' + ... +# Subtest: business authorization migration adds a fail-closed per-user allowlist for all registered routes +ok 3 - business authorization migration adds a fail-closed per-user allowlist for all registered routes + --- + duration_ms: 29.984125 + type: 'test' + ... +# Subtest: AgentBus account-worker migration adds fail-closed channel, task, browser, and ERP identity ownership +ok 4 - AgentBus account-worker migration adds fail-closed channel, task, browser, and ERP identity ownership + --- + duration_ms: 4.609125 + type: 'test' + ... +# Subtest: administrator task-isolation migration removes legacy bindings and rejects future data-plane principals +ok 5 - administrator task-isolation migration removes legacy bindings and rejects future data-plane principals + --- + duration_ms: 8.28 + type: 'test' + ... +# Subtest: AgentBus channel keys and owners are unique so one inbound identity cannot fan out to multiple employees +ok 6 - AgentBus channel keys and owners are unique so one inbound identity cannot fan out to multiple employees + --- + duration_ms: 23.235625 + type: 'test' + ... +# Subtest: account lifecycle is administrator-gated and protects passwords, sessions, and the last administrator +ok 7 - account lifecycle is administrator-gated and protects passwords, sessions, and the last administrator + --- + duration_ms: 3.73275 + type: 'test' + ... +# Subtest: administrators manage employee task-type grants while remaining outside manual intake +ok 8 - administrators manage employee task-type grants while remaining outside manual intake + --- + duration_ms: 3.797458 + type: 'test' + ... +# Subtest: operations dashboard is leadership-gated, cross-source, business-facing, and separate from normal task authority +ok 9 - operations dashboard is leadership-gated, cross-source, business-facing, and separate from normal task authority + --- + duration_ms: 11.747709 + type: 'test' + ... +# Subtest: ordinary task access is enforced across reads, mutations, artifacts, events, and browser connections +ok 10 - ordinary task access is enforced across reads, mutations, artifacts, events, and browser connections + --- + duration_ms: 5.878208 + type: 'test' + ... +# Subtest: administrators are excluded from task events and plugin result routing +ok 11 - administrators are excluded from task events and plugin result routing + --- + duration_ms: 3.036875 + type: 'test' + ... +# Subtest: ERP browser claims serialize only the assigned account queue +ok 12 - ERP browser claims serialize only the assigned account queue + --- + duration_ms: 1.662666 + type: 'test' + ... +# Subtest: force delete physically removes accessible tasks without the archive state gate +ok 13 - force delete physically removes accessible tasks without the archive state gate + --- + duration_ms: 3.15075 + type: 'test' + ... +# Subtest: operator UI exposes role-aware accounts, executive drill-through, archive, and explicit permanent deletion +ok 14 - operator UI exposes role-aware accounts, executive drill-through, archive, and explicit permanent deletion + --- + duration_ms: 4.404583 + type: 'test' + ... +# Subtest: account authorization editor uses a scroll-safe open layout without overriding the closed account list +ok 15 - account authorization editor uses a scroll-safe open layout without overriding the closed account list + --- + duration_ms: 4.701875 + type: 'test' + ... +# Subtest: AgentBus configuration stays disabled until connection fields are supplied +ok 16 - AgentBus configuration stays disabled until connection fields are supplied + --- + duration_ms: 2.413667 + type: 'test' + ... +# Subtest: AgentBus accepted delivery payloads keep final ownership metadata server-only +ok 17 - AgentBus accepted delivery payloads keep final ownership metadata server-only + --- + duration_ms: 0.789458 + type: 'test' + ... +# Subtest: AgentBus auto configuration rejects partial credentials +ok 18 - AgentBus auto configuration rejects partial credentials + --- + duration_ms: 0.708416 + type: 'test' + ... +# Subtest: database-managed channels may use the global WebSocket URL without a global key +ok 19 - database-managed channels may use the global WebSocket URL without a global key + --- + duration_ms: 0.21075 + type: 'test' + ... +# Subtest: WeChat transport envelope exposes only its business text to the global parser +ok 20 - WeChat transport envelope exposes only its business text to the global parser + --- + duration_ms: 2.178042 + type: 'test' + ... +# Subtest: channel directory prefers the current listener over stale persisted disabled status +ok 21 - channel directory prefers the current listener over stale persisted disabled status + --- + duration_ms: 0.717167 + type: 'test' + ... +# Subtest: AgentBus protocol helpers preserve reply routing fields +ok 22 - AgentBus protocol helpers preserve reply routing fields + --- + duration_ms: 0.642542 + type: 'test' + ... +# Subtest: AgentBus result text uses the unified important message and preserves the confirmation gate +ok 23 - AgentBus result text uses the unified important message and preserves the confirmation gate + --- + duration_ms: 0.720834 + type: 'test' + ... +# Subtest: AgentBus attachment references omit archived visitor XLS and keep only XLSX delivery +ok 24 - AgentBus attachment references omit archived visitor XLS and keep only XLSX delivery + --- + duration_ms: 0.3445 + type: 'test' + ... +# Subtest: AgentBus listener connects with the documented Authorization header and returns one final result +ok 25 - AgentBus listener connects with the documented Authorization header and returns one final result + --- + duration_ms: 117.908916 + type: 'test' + ... +# Subtest: WeChat attachment placeholder without file metadata fails closed before task ingestion +ok 26 - WeChat attachment placeholder without file metadata fails closed before task ingestion + --- + duration_ms: 31.016042 + type: 'test' + ... +# Subtest: attachment validation rejection returns an immediate failed result without scheduling parsing +ok 27 - attachment validation rejection returns an immediate failed result without scheduling parsing + --- + duration_ms: 6.474208 + type: 'test' + ... +# Subtest: roster direct listener sends waiting, attachment-received, and one final reply across two frames +ok 28 - roster direct listener sends waiting, attachment-received, and one final reply across two frames + --- + duration_ms: 11.590666 + type: 'test' + ... +# Subtest: listener reload stop does not overwrite the channel status as disabled +ok 29 - listener reload stop does not overwrite the channel status as disabled + --- + duration_ms: 1.087916 + type: 'test' + ... +# Subtest: channel manager replays a reload requested while another reload is in flight +ok 30 - channel manager replays a reload requested while another reload is in flight + --- + duration_ms: 1.381208 + type: 'test' + ... +# Subtest: listener shutdown carries its session epoch for stale-writer protection +ok 31 - listener shutdown carries its session epoch for stale-writer protection + --- + duration_ms: 0.430292 + type: 'test' + ... +# Subtest: durable channel listener persists route and resends accepted/result deliveries +ok 32 - durable channel listener persists route and resends accepted/result deliveries + --- + duration_ms: 1021.883708 + type: 'test' + ... +# Subtest: durable roster lifecycle assigns the final result only to the attachment frame +ok 33 - durable roster lifecycle assigns the final result only to the attachment frame + --- + duration_ms: 1004.547 + type: 'test' + ... +# Subtest: durable channel persists and sends an attachment rejection result while the task keeps waiting +ok 34 - durable channel persists and sends an attachment rejection result while the task keeps waiting + --- + duration_ms: 1050.103 + type: 'test' + ... +# Subtest: successful arrangements capture actual linked fields and retain separate original input/evidence +ok 35 - successful arrangements capture actual linked fields and retain separate original input/evidence + --- + duration_ms: 5.328 + type: 'test' + ... +# Subtest: parser, failed, queued, dry-run, uncertain and incomplete proof never change arrangement state +ok 36 - parser, failed, queued, dry-run, uncertain and incomplete proof never change arrangement state + --- + duration_ms: 37.902917 + type: 'test' + ... +# Subtest: full group identity is normalized without collapsing suffixes or accepting a different ERP group +ok 37 - full group identity is normalized without collapsing suffixes or accepting a different ERP group + --- + duration_ms: 0.311459 + type: 'test' + ... +# Subtest: five arrangement types have independent status and guides remain singleton after replacement +ok 38 - five arrangement types have independent status and guides remain singleton after replacement + --- + duration_ms: 17.096292 + type: 'test' + ... +# Subtest: update and clear target stable row IDs, preserving other rows regardless of slot renumbering +ok 39 - update and clear target stable row IDs, preserving other rows regardless of slot renumbering + --- + duration_ms: 0.995459 + type: 'test' + ... +# Subtest: late reconciliation replays by original execution time rather than overwriting newer arrangements +ok 40 - late reconciliation replays by original execution time rather than overwriting newer arrangements + --- + duration_ms: 0.097 + type: 'test' + ... +# Subtest: narrow hotel updates retain existing resource/date details but honor a verified cleared remark +ok 41 - narrow hotel updates retain existing resource/date details but honor a verified cleared remark + --- + duration_ms: 0.175417 + type: 'test' + ... +# Subtest: clearing external/untracked rows does not erase this account recorded arrangements +ok 42 - clearing external/untracked rows does not erase this account recorded arrangements + --- + duration_ms: 0.082084 + type: 'test' + ... +# Subtest: receipt summary is a frozen snapshot and remains single when public receipts are rebuilt +ok 43 - receipt summary is a frozen snapshot and remains single when public receipts are rebuilt + --- + duration_ms: 1.673667 + type: 'test' + ... +# Subtest: ledger storage encrypts details, deduplicates and scopes reads to both organization and account +ok 44 - ledger storage encrypts details, deduplicates and scopes reads to both organization and account + --- + duration_ms: 5.581625 + type: 'test' + ... +# Subtest: backfill includes archived successes and skips failed/other-account tasks, preserving encrypted evidence +ok 45 - backfill includes archived successes and skips failed/other-account tasks, preserving encrypted evidence + --- + duration_ms: 0.639125 + type: 'test' + ... +# Subtest: ledger migration has no cascading source-task dependency and blocks admin ownership +ok 46 - ledger migration has no cascading source-task dependency and blocks admin ownership + --- + duration_ms: 10.525709 + type: 'test' + ... +# Subtest: real success-result transaction saves summary/history once and force delete preserves details +ok 47 - real success-result transaction saves summary/history once and force delete preserves details + --- + duration_ms: 7.223542 + type: 'test' + ... +# Subtest: original hotel dates never roll forward with the submission date or group number +ok 48 - original hotel dates never roll forward with the submission date or group number + --- + duration_ms: 205.011292 + type: 'test' + ... +# Subtest: original dates retain explicit years and allow cross-year, mixed-year and leap-day selectors +ok 49 - original dates retain explicit years and allow cross-year, mixed-year and leap-day selectors + --- + duration_ms: 131.439416 + type: 'test' + ... +# Subtest: vehicle, transport and other original dates also preserve month/day including filing date +ok 50 - vehicle, transport and other original dates also preserve month/day including filing date + --- + duration_ms: 1.995042 + type: 'test' + ... +# Subtest: hotel creation and legacy target-date changes retain their existing year semantics +ok 51 - hotel creation and legacy target-date changes retain their existing year semantics + --- + duration_ms: 9.939833 + type: 'test' + ... +# Subtest: vehicle type is an optional candidate filter on create and update, never an original date or direct item edit +ok 52 - vehicle type is an optional candidate filter on create and update, never an original date or direct item edit + --- + duration_ms: 425.443167 + type: 'test' + ... +# Subtest: guide update separates original dates from replacements +ok 53 - guide update separates original dates from replacements + --- + duration_ms: 1.041459 + type: 'test' + ... +# Subtest: vehicle update separates original dates from replacements +ok 54 - vehicle update separates original dates from replacements + --- + duration_ms: 0.737292 + type: 'test' + ... +# Subtest: transport update separates original dates from replacements +ok 55 - transport update separates original dates from replacements + --- + duration_ms: 1.635083 + type: 'test' + ... +# Subtest: other update separates original dates from replacements +ok 56 - other update separates original dates from replacements + --- + duration_ms: 0.807542 + type: 'test' + ... +# Subtest: updates require an original date and new resource; quantity remains optional only for other +ok 57 - updates require an original date and new resource; quantity remains optional only for other + --- + duration_ms: 32.873083 + type: 'test' + ... +# Subtest: ticket description is optional on transport create/update and stays separate from linked item and original dates +ok 58 - ticket description is optional on transport create/update and stays separate from linked item and original dates + --- + duration_ms: 17.760167 + type: 'test' + ... +# {"level":30,"time":1790658579777,"pid":47732,"hostname":"andydeMacBook-Pro.local","service":"ltjt-control-plane","environment":"test","deployment_revision":"unknown","diagnostic_event":"service.initialized","diagnostic_stage":"startup","host":"127.0.0.1","port":8786,"log_level":"info","database_schema":"public","database_ssl":"disable","artifact_storage_backend":"database","agentbus_enabled":false,"leader_summary_webhook_enabled":false,"leader_summary_webhook_configuration_error":null,"parser_loop_enabled":false,"data_retention_enabled":false,"raw_payload_logging":false,"msg":"control plane initialized"} +# Subtest: message routing starts a new session for a business directive, not for a supplement +ok 59 - message routing starts a new session for a business directive, not for a supplement + --- + duration_ms: 18.433708 + type: 'test' + ... +# Subtest: task access contract excludes administrators and isolates employee owners +ok 60 - task access contract excludes administrators and isolates employee owners + --- + duration_ms: 0.23525 + type: 'test' + ... +# Subtest: task data-plane HTTP classifier covers every task-bearing surface and excludes management APIs +ok 61 - task data-plane HTTP classifier covers every task-bearing surface and excludes management APIs + --- + duration_ms: 0.098458 + type: 'test' + ... +# Subtest: task service rejects administrator operations before touching task storage +ok 62 - task service rejects administrator operations before touching task storage + --- + duration_ms: 5.725792 + type: 'test' + ... +# Subtest: business route authorization is an explicit allowlist for team leads and ordinary users +ok 63 - business route authorization is an explicit allowlist for team leads and ordinary users + --- + duration_ms: 0.123917 + type: 'test' + ... +# Subtest: field encryption round-trips without storing plaintext +ok 64 - field encryption round-trips without storing plaintext + --- + duration_ms: 1.127583 + type: 'test' + ... +# Subtest: field encryption round-trips binary task attachments +ok 65 - field encryption round-trips binary task attachments + --- + duration_ms: 0.967417 + type: 'test' + ... +# Subtest: database artifact store sends encrypted bytes to the persistence boundary +ok 66 - database artifact store sends encrypted bytes to the persistence boundary + --- + duration_ms: 0.80275 + type: 'test' + ... +# Subtest: production OSS configuration requires provider credentials and derives the region +ok 67 - production OSS configuration requires provider credentials and derives the region + --- + duration_ms: 0.790167 + type: 'test' + ... +# Subtest: OSS artifact store writes metadata with an idempotent UUID execution path and cleans captured keys +ok 68 - OSS artifact store writes metadata with an idempotent UUID execution path and cleans captured keys + --- + duration_ms: 0.895916 + type: 'test' + ... +# Subtest: token hashes compare safely and do not expose the original token +ok 69 - token hashes compare safely and do not expose the original token + --- + duration_ms: 0.095875 + type: 'test' + ... +# Subtest: organization automation applies uniformly to every valid task source +ok 70 - organization automation applies uniformly to every valid task source + --- + duration_ms: 0.06025 + type: 'test' + ... +# Subtest: control plane exposes a live health endpoint without a database connection +ok 71 - control plane exposes a live health endpoint without a database connection + --- + duration_ms: 426.561709 + type: 'test' + ... +# {"level":30,"time":1790658579951,"pid":47732,"hostname":"andydeMacBook-Pro.local","service":"ltjt-control-plane","environment":"test","deployment_revision":"unknown","diagnostic_event":"service.initialized","diagnostic_stage":"startup","host":"127.0.0.1","port":8786,"log_level":"info","database_schema":"public","database_ssl":"disable","artifact_storage_backend":"database","agentbus_enabled":false,"leader_summary_webhook_enabled":false,"leader_summary_webhook_configuration_error":null,"parser_loop_enabled":false,"data_retention_enabled":false,"raw_payload_logging":false,"msg":"control plane initialized"} +# {"level":30,"time":1790658579939,"pid":47732,"hostname":"andydeMacBook-Pro.local","service":"ltjt-control-plane","environment":"test","deployment_revision":"unknown","diagnostic_event":"service.closing","diagnostic_stage":"shutdown","msg":"control plane closing"} +# {"level":40,"time":1790658579995,"pid":47732,"hostname":"andydeMacBook-Pro.local","service":"ltjt-control-plane","environment":"test","deployment_revision":"unknown","reqId":"8b389a38-c34c-43c6-918e-b334991f9d4c","diagnostic_event":"http.request.rejected","diagnostic_stage":"http","request_id":"8b389a38-c34c-43c6-918e-b334991f9d4c","status_code":403,"error_code":"task_access_forbidden","error_name":"AuthError","msg":"HTTP request rejected by application guard"} +# {"level":40,"time":1790658579995,"pid":47732,"hostname":"andydeMacBook-Pro.local","service":"ltjt-control-plane","environment":"test","deployment_revision":"unknown","reqId":"8b389a38-c34c-43c6-918e-b334991f9d4c","diagnostic_event":"http.request.completed","diagnostic_stage":"http","request_id":"8b389a38-c34c-43c6-918e-b334991f9d4c","method":"GET","path":"/api/tasks","status_code":403,"duration_ms":13.729,"msg":"HTTP request completed with client error"} +# {"level":30,"time":1790658579996,"pid":47732,"hostname":"andydeMacBook-Pro.local","service":"ltjt-control-plane","environment":"test","deployment_revision":"unknown","reqId":"05897777-87ae-4ef6-9070-93eedf56ed27","diagnostic_event":"http.request.started","diagnostic_stage":"http","request_id":"05897777-87ae-4ef6-9070-93eedf56ed27","method":"POST","path":"/api/tasks","content_length":27,"msg":"HTTP request started"} +# {"level":40,"time":1790658579997,"pid":47732,"hostname":"andydeMacBook-Pro.local","service":"ltjt-control-plane","environment":"test","deployment_revision":"unknown","reqId":"05897777-87ae-4ef6-9070-93eedf56ed27","diagnostic_event":"http.request.rejected","diagnostic_stage":"http","request_id":"05897777-87ae-4ef6-9070-93eedf56ed27","status_code":403,"error_code":"task_access_forbidden","error_name":"AuthError","msg":"HTTP request rejected by application guard"} +# {"level":40,"time":1790658579998,"pid":47732,"hostname":"andydeMacBook-Pro.local","service":"ltjt-control-plane","environment":"test","deployment_revision":"unknown","reqId":"05897777-87ae-4ef6-9070-93eedf56ed27","diagnostic_event":"http.request.completed","diagnostic_stage":"http","request_id":"05897777-87ae-4ef6-9070-93eedf56ed27","method":"POST","path":"/api/tasks","status_code":403,"duration_ms":2.22,"msg":"HTTP request completed with client error"} +# {"level":30,"time":1790658579999,"pid":47732,"hostname":"andydeMacBook-Pro.local","service":"ltjt-control-plane","environment":"test","deployment_revision":"unknown","reqId":"6140da69-8690-4f3a-83f0-3165314da1f3","diagnostic_event":"http.request.started","diagnostic_stage":"http","request_id":"6140da69-8690-4f3a-83f0-3165314da1f3","method":"POST","path":"/api/messages","content_length":26,"msg":"HTTP request started"} +# {"level":40,"time":1790658580100,"pid":47732,"hostname":"andydeMacBook-Pro.local","service":"ltjt-control-plane","environment":"test","deployment_revision":"unknown","reqId":"6140da69-8690-4f3a-83f0-3165314da1f3","diagnostic_event":"http.request.rejected","diagnostic_stage":"http","request_id":"6140da69-8690-4f3a-83f0-3165314da1f3","status_code":403,"error_code":"task_access_forbidden","error_name":"AuthError","msg":"HTTP request rejected by application guard"} +# {"level":40,"time":1790658580102,"pid":47732,"hostname":"andydeMacBook-Pro.local","service":"ltjt-control-plane","environment":"test","deployment_revision":"unknown","reqId":"6140da69-8690-4f3a-83f0-3165314da1f3","diagnostic_event":"http.request.completed","diagnostic_stage":"http","request_id":"6140da69-8690-4f3a-83f0-3165314da1f3","method":"POST","path":"/api/messages","status_code":403,"duration_ms":103.304,"msg":"HTTP request completed with client error"} +# {"level":30,"time":1790658580102,"pid":47732,"hostname":"andydeMacBook-Pro.local","service":"ltjt-control-plane","environment":"test","deployment_revision":"unknown","reqId":"98907745-f0d4-4c27-8995-325d3bf73665","diagnostic_event":"http.request.started","diagnostic_stage":"http","request_id":"98907745-f0d4-4c27-8995-325d3bf73665","method":"GET","path":"/api/tasks/TASK-1","msg":"HTTP request started"} +# {"level":40,"time":1790658580102,"pid":47732,"hostname":"andydeMacBook-Pro.local","service":"ltjt-control-plane","environment":"test","deployment_revision":"unknown","reqId":"98907745-f0d4-4c27-8995-325d3bf73665","diagnostic_event":"http.request.rejected","diagnostic_stage":"http","request_id":"98907745-f0d4-4c27-8995-325d3bf73665","task_id":"TASK-1","status_code":403,"error_code":"task_access_forbidden","error_name":"AuthError","msg":"HTTP request rejected by application guard"} +# {"level":40,"time":1790658580103,"pid":47732,"hostname":"andydeMacBook-Pro.local","service":"ltjt-control-plane","environment":"test","deployment_revision":"unknown","reqId":"98907745-f0d4-4c27-8995-325d3bf73665","diagnostic_event":"http.request.completed","diagnostic_stage":"http","request_id":"98907745-f0d4-4c27-8995-325d3bf73665","method":"GET","path":"/api/tasks/:taskId","status_code":403,"duration_ms":0.334,"msg":"HTTP request completed with client error"} +# {"level":30,"time":1790658580103,"pid":47732,"hostname":"andydeMacBook-Pro.local","service":"ltjt-control-plane","environment":"test","deployment_revision":"unknown","reqId":"17b4a2ca-ca14-4a59-8f52-4578675e2269","diagnostic_event":"http.request.started","diagnostic_stage":"http","request_id":"17b4a2ca-ca14-4a59-8f52-4578675e2269","method":"GET","path":"/api/tasks/TASK-1/input-history","msg":"HTTP request started"} +# {"level":40,"time":1790658580103,"pid":47732,"hostname":"andydeMacBook-Pro.local","service":"ltjt-control-plane","environment":"test","deployment_revision":"unknown","reqId":"17b4a2ca-ca14-4a59-8f52-4578675e2269","diagnostic_event":"http.request.rejected","diagnostic_stage":"http","request_id":"17b4a2ca-ca14-4a59-8f52-4578675e2269","task_id":"TASK-1","status_code":403,"error_code":"task_access_forbidden","error_name":"AuthError","msg":"HTTP request rejected by application guard"} +# {"level":40,"time":1790658580117,"pid":47732,"hostname":"andydeMacBook-Pro.local","service":"ltjt-control-plane","environment":"test","deployment_revision":"unknown","reqId":"17b4a2ca-ca14-4a59-8f52-4578675e2269","diagnostic_event":"http.request.completed","diagnostic_stage":"http","request_id":"17b4a2ca-ca14-4a59-8f52-4578675e2269","method":"GET","path":"/api/tasks/:taskId/input-history","status_code":403,"duration_ms":14.287,"msg":"HTTP request completed with client error"} +# {"level":30,"time":1790658580118,"pid":47732,"hostname":"andydeMacBook-Pro.local","service":"ltjt-control-plane","environment":"test","deployment_revision":"unknown","reqId":"49628e99-08ef-4544-a3ac-7ae228ad720b","diagnostic_event":"http.request.started","diagnostic_stage":"http","request_id":"49628e99-08ef-4544-a3ac-7ae228ad720b","method":"GET","path":"/api/tasks/TASK-1/artifacts/44444444-4444-4444-8444-444444444444","msg":"HTTP request started"} +# {"level":40,"time":1790658580118,"pid":47732,"hostname":"andydeMacBook-Pro.local","service":"ltjt-control-plane","environment":"test","deployment_revision":"unknown","reqId":"49628e99-08ef-4544-a3ac-7ae228ad720b","diagnostic_event":"http.request.rejected","diagnostic_stage":"http","request_id":"49628e99-08ef-4544-a3ac-7ae228ad720b","task_id":"TASK-1","status_code":403,"error_code":"task_access_forbidden","error_name":"AuthError","msg":"HTTP request rejected by application guard"} +# {"level":40,"time":1790658580118,"pid":47732,"hostname":"andydeMacBook-Pro.local","service":"ltjt-control-plane","environment":"test","deployment_revision":"unknown","reqId":"49628e99-08ef-4544-a3ac-7ae228ad720b","diagnostic_event":"http.request.completed","diagnostic_stage":"http","request_id":"49628e99-08ef-4544-a3ac-7ae228ad720b","method":"GET","path":"/api/tasks/:taskId/artifacts/:artifactId","status_code":403,"duration_ms":0.264,"msg":"HTTP request completed with client error"} +# {"level":30,"time":1790658580118,"pid":47732,"hostname":"andydeMacBook-Pro.local","service":"ltjt-control-plane","environment":"test","deployment_revision":"unknown","reqId":"2a48b91d-5d47-4cb3-9786-c66129fc1113","diagnostic_event":"http.request.started","diagnostic_stage":"http","request_id":"2a48b91d-5d47-4cb3-9786-c66129fc1113","method":"POST","path":"/api/tasks/TASK-1/confirm","content_length":2,"msg":"HTTP request started"} +# {"level":40,"time":1790658580121,"pid":47732,"hostname":"andydeMacBook-Pro.local","service":"ltjt-control-plane","environment":"test","deployment_revision":"unknown","reqId":"2a48b91d-5d47-4cb3-9786-c66129fc1113","diagnostic_event":"http.request.rejected","diagnostic_stage":"http","request_id":"2a48b91d-5d47-4cb3-9786-c66129fc1113","task_id":"TASK-1","status_code":403,"error_code":"task_access_forbidden","error_name":"AuthError","msg":"HTTP request rejected by application guard"} +# {"level":40,"time":1790658580122,"pid":47732,"hostname":"andydeMacBook-Pro.local","service":"ltjt-control-plane","environment":"test","deployment_revision":"unknown","reqId":"2a48b91d-5d47-4cb3-9786-c66129fc1113","diagnostic_event":"http.request.completed","diagnostic_stage":"http","request_id":"2a48b91d-5d47-4cb3-9786-c66129fc1113","method":"POST","path":"/api/tasks/:taskId/confirm","status_code":403,"duration_ms":3.716,"msg":"HTTP request completed with client error"} +# {"level":30,"time":1790658580126,"pid":47732,"hostname":"andydeMacBook-Pro.local","service":"ltjt-control-plane","environment":"test","deployment_revision":"unknown","reqId":"5e989a25-9188-46f0-b6df-e00cabe5189b","diagnostic_event":"http.request.started","diagnostic_stage":"http","request_id":"5e989a25-9188-46f0-b6df-e00cabe5189b","method":"POST","path":"/api/tasks/TASK-1/claim","content_length":53,"msg":"HTTP request started"} +# {"level":40,"time":1790658580126,"pid":47732,"hostname":"andydeMacBook-Pro.local","service":"ltjt-control-plane","environment":"test","deployment_revision":"unknown","reqId":"5e989a25-9188-46f0-b6df-e00cabe5189b","diagnostic_event":"http.request.rejected","diagnostic_stage":"http","request_id":"5e989a25-9188-46f0-b6df-e00cabe5189b","task_id":"TASK-1","status_code":403,"error_code":"task_access_forbidden","error_name":"AuthError","msg":"HTTP request rejected by application guard"} +# {"level":40,"time":1790658580127,"pid":47732,"hostname":"andydeMacBook-Pro.local","service":"ltjt-control-plane","environment":"test","deployment_revision":"unknown","reqId":"5e989a25-9188-46f0-b6df-e00cabe5189b","diagnostic_event":"http.request.completed","diagnostic_stage":"http","request_id":"5e989a25-9188-46f0-b6df-e00cabe5189b","method":"POST","path":"/api/tasks/:taskId/claim","status_code":403,"duration_ms":0.688,"msg":"HTTP request completed with client error"} +# {"level":30,"time":1790658580127,"pid":47732,"hostname":"andydeMacBook-Pro.local","service":"ltjt-control-plane","environment":"test","deployment_revision":"unknown","reqId":"b050d298-655c-44c4-ac67-e9b02c75dd9f","diagnostic_event":"http.request.started","diagnostic_stage":"http","request_id":"b050d298-655c-44c4-ac67-e9b02c75dd9f","method":"POST","path":"/api/tasks/TASK-1/result","content_length":119,"msg":"HTTP request started"} +# {"level":40,"time":1790658580127,"pid":47732,"hostname":"andydeMacBook-Pro.local","service":"ltjt-control-plane","environment":"test","deployment_revision":"unknown","reqId":"b050d298-655c-44c4-ac67-e9b02c75dd9f","diagnostic_event":"http.request.rejected","diagnostic_stage":"http","request_id":"b050d298-655c-44c4-ac67-e9b02c75dd9f","task_id":"TASK-1","status_code":403,"error_code":"task_access_forbidden","error_name":"AuthError","msg":"HTTP request rejected by application guard"} +# {"level":40,"time":1790658580128,"pid":47732,"hostname":"andydeMacBook-Pro.local","service":"ltjt-control-plane","environment":"test","deployment_revision":"unknown","reqId":"b050d298-655c-44c4-ac67-e9b02c75dd9f","diagnostic_event":"http.request.completed","diagnostic_stage":"http","request_id":"b050d298-655c-44c4-ac67-e9b02c75dd9f","method":"POST","path":"/api/tasks/:taskId/result","status_code":403,"duration_ms":0.359,"msg":"HTTP request completed with client error"} +# {"level":30,"time":1790658580128,"pid":47732,"hostname":"andydeMacBook-Pro.local","service":"ltjt-control-plane","environment":"test","deployment_revision":"unknown","reqId":"f0ba76c9-5d8c-4d33-afd9-5be9ce00ef1d","diagnostic_event":"http.request.started","diagnostic_stage":"http","request_id":"f0ba76c9-5d8c-4d33-afd9-5be9ce00ef1d","method":"POST","path":"/api/tasks/TASK-1/cancel","content_length":2,"msg":"HTTP request started"} +# {"level":40,"time":1790658580128,"pid":47732,"hostname":"andydeMacBook-Pro.local","service":"ltjt-control-plane","environment":"test","deployment_revision":"unknown","reqId":"f0ba76c9-5d8c-4d33-afd9-5be9ce00ef1d","diagnostic_event":"http.request.rejected","diagnostic_stage":"http","request_id":"f0ba76c9-5d8c-4d33-afd9-5be9ce00ef1d","task_id":"TASK-1","status_code":403,"error_code":"task_access_forbidden","error_name":"AuthError","msg":"HTTP request rejected by application guard"} +# {"level":40,"time":1790658580128,"pid":47732,"hostname":"andydeMacBook-Pro.local","service":"ltjt-control-plane","environment":"test","deployment_revision":"unknown","reqId":"f0ba76c9-5d8c-4d33-afd9-5be9ce00ef1d","diagnostic_event":"http.request.completed","diagnostic_stage":"http","request_id":"f0ba76c9-5d8c-4d33-afd9-5be9ce00ef1d","method":"POST","path":"/api/tasks/:taskId/cancel","status_code":403,"duration_ms":0.249,"msg":"HTTP request completed with client error"} +# {"level":30,"time":1790658580128,"pid":47732,"hostname":"andydeMacBook-Pro.local","service":"ltjt-control-plane","environment":"test","deployment_revision":"unknown","reqId":"30cb8fc2-4744-459d-85e3-1ac4453989f4","diagnostic_event":"http.request.started","diagnostic_stage":"http","request_id":"30cb8fc2-4744-459d-85e3-1ac4453989f4","method":"POST","path":"/api/tasks/bulk-delete","content_length":23,"msg":"HTTP request started"} +# {"level":40,"time":1790658580128,"pid":47732,"hostname":"andydeMacBook-Pro.local","service":"ltjt-control-plane","environment":"test","deployment_revision":"unknown","reqId":"30cb8fc2-4744-459d-85e3-1ac4453989f4","diagnostic_event":"http.request.rejected","diagnostic_stage":"http","request_id":"30cb8fc2-4744-459d-85e3-1ac4453989f4","status_code":403,"error_code":"task_access_forbidden","error_name":"AuthError","msg":"HTTP request rejected by application guard"} +# {"level":40,"time":1790658580129,"pid":47732,"hostname":"andydeMacBook-Pro.local","service":"ltjt-control-plane","environment":"test","deployment_revision":"unknown","reqId":"30cb8fc2-4744-459d-85e3-1ac4453989f4","diagnostic_event":"http.request.completed","diagnostic_stage":"http","request_id":"30cb8fc2-4744-459d-85e3-1ac4453989f4","method":"POST","path":"/api/tasks/bulk-delete","status_code":403,"duration_ms":0.465,"msg":"HTTP request completed with client error"} +# {"level":30,"time":1790658580129,"pid":47732,"hostname":"andydeMacBook-Pro.local","service":"ltjt-control-plane","environment":"test","deployment_revision":"unknown","reqId":"c3533f02-a4ed-4712-b0d7-703f78b494f6","diagnostic_event":"http.request.started","diagnostic_stage":"http","request_id":"c3533f02-a4ed-4712-b0d7-703f78b494f6","method":"POST","path":"/api/tasks/bulk-archive","content_length":23,"msg":"HTTP request started"} +# {"level":40,"time":1790658580129,"pid":47732,"hostname":"andydeMacBook-Pro.local","service":"ltjt-control-plane","environment":"test","deployment_revision":"unknown","reqId":"c3533f02-a4ed-4712-b0d7-703f78b494f6","diagnostic_event":"http.request.rejected","diagnostic_stage":"http","request_id":"c3533f02-a4ed-4712-b0d7-703f78b494f6","status_code":403,"error_code":"task_access_forbidden","error_name":"AuthError","msg":"HTTP request rejected by application guard"} +# {"level":40,"time":1790658580129,"pid":47732,"hostname":"andydeMacBook-Pro.local","service":"ltjt-control-plane","environment":"test","deployment_revision":"unknown","reqId":"c3533f02-a4ed-4712-b0d7-703f78b494f6","diagnostic_event":"http.request.completed","diagnostic_stage":"http","request_id":"c3533f02-a4ed-4712-b0d7-703f78b494f6","method":"POST","path":"/api/tasks/bulk-archive","status_code":403,"duration_ms":0.322,"msg":"HTTP request completed with client error"} +# {"level":30,"time":1790658580129,"pid":47732,"hostname":"andydeMacBook-Pro.local","service":"ltjt-control-plane","environment":"test","deployment_revision":"unknown","reqId":"8e641e50-b521-464d-9c83-a83655c63bf3","diagnostic_event":"http.request.started","diagnostic_stage":"http","request_id":"8e641e50-b521-464d-9c83-a83655c63bf3","method":"DELETE","path":"/api/tasks/TASK-1","msg":"HTTP request started"} +# {"level":40,"time":1790658580129,"pid":47732,"hostname":"andydeMacBook-Pro.local","service":"ltjt-control-plane","environment":"test","deployment_revision":"unknown","reqId":"8e641e50-b521-464d-9c83-a83655c63bf3","diagnostic_event":"http.request.rejected","diagnostic_stage":"http","request_id":"8e641e50-b521-464d-9c83-a83655c63bf3","task_id":"TASK-1","status_code":403,"error_code":"task_access_forbidden","error_name":"AuthError","msg":"HTTP request rejected by application guard"} +# {"level":40,"time":1790658580130,"pid":47732,"hostname":"andydeMacBook-Pro.local","service":"ltjt-control-plane","environment":"test","deployment_revision":"unknown","reqId":"8e641e50-b521-464d-9c83-a83655c63bf3","diagnostic_event":"http.request.completed","diagnostic_stage":"http","request_id":"8e641e50-b521-464d-9c83-a83655c63bf3","method":"DELETE","path":"/api/tasks/:taskId","status_code":403,"duration_ms":0.12,"msg":"HTTP request completed with client error"} +# {"level":30,"time":1790658580130,"pid":47732,"hostname":"andydeMacBook-Pro.local","service":"ltjt-control-plane","environment":"test","deployment_revision":"unknown","reqId":"4f011a80-1358-4320-87f9-416d64462b56","diagnostic_event":"http.request.started","diagnostic_stage":"http","request_id":"4f011a80-1358-4320-87f9-416d64462b56","method":"POST","path":"/api/tasks/TASK-1/archive","content_length":2,"msg":"HTTP request started"} +# {"level":40,"time":1790658580130,"pid":47732,"hostname":"andydeMacBook-Pro.local","service":"ltjt-control-plane","environment":"test","deployment_revision":"unknown","reqId":"4f011a80-1358-4320-87f9-416d64462b56","diagnostic_event":"http.request.rejected","diagnostic_stage":"http","request_id":"4f011a80-1358-4320-87f9-416d64462b56","task_id":"TASK-1","status_code":403,"error_code":"task_access_forbidden","error_name":"AuthError","msg":"HTTP request rejected by application guard"} +# {"level":40,"time":1790658580130,"pid":47732,"hostname":"andydeMacBook-Pro.local","service":"ltjt-control-plane","environment":"test","deployment_revision":"unknown","reqId":"4f011a80-1358-4320-87f9-416d64462b56","diagnostic_event":"http.request.completed","diagnostic_stage":"http","request_id":"4f011a80-1358-4320-87f9-416d64462b56","method":"POST","path":"/api/tasks/:taskId/archive","status_code":403,"duration_ms":0.44,"msg":"HTTP request completed with client error"} +# {"level":30,"time":1790658580130,"pid":47732,"hostname":"andydeMacBook-Pro.local","service":"ltjt-control-plane","environment":"test","deployment_revision":"unknown","reqId":"18c873c7-d383-42f4-8258-6db654be2efa","diagnostic_event":"http.request.started","diagnostic_stage":"http","request_id":"18c873c7-d383-42f4-8258-6db654be2efa","method":"POST","path":"/api/tasks/TASK-1/restore","content_length":2,"msg":"HTTP request started"} +# {"level":40,"time":1790658580130,"pid":47732,"hostname":"andydeMacBook-Pro.local","service":"ltjt-control-plane","environment":"test","deployment_revision":"unknown","reqId":"18c873c7-d383-42f4-8258-6db654be2efa","diagnostic_event":"http.request.rejected","diagnostic_stage":"http","request_id":"18c873c7-d383-42f4-8258-6db654be2efa","task_id":"TASK-1","status_code":403,"error_code":"task_access_forbidden","error_name":"AuthError","msg":"HTTP request rejected by application guard"} +# {"level":40,"time":1790658580130,"pid":47732,"hostname":"andydeMacBook-Pro.local","service":"ltjt-control-plane","environment":"test","deployment_revision":"unknown","reqId":"18c873c7-d383-42f4-8258-6db654be2efa","diagnostic_event":"http.request.completed","diagnostic_stage":"http","request_id":"18c873c7-d383-42f4-8258-6db654be2efa","method":"POST","path":"/api/tasks/:taskId/restore","status_code":403,"duration_ms":0.199,"msg":"HTTP request completed with client error"} +# {"level":40,"time":1790658580131,"pid":47732,"hostname":"andydeMacBook-Pro.local","service":"ltjt-control-plane","environment":"test","deployment_revision":"unknown","reqId":"41ea237e-68d2-496e-9c0f-ad21e719a808","diagnostic_event":"http.request.rejected","diagnostic_stage":"http","request_id":"41ea237e-68d2-496e-9c0f-ad21e719a808","status_code":403,"error_code":"task_access_forbidden","error_name":"AuthError","msg":"HTTP request rejected by application guard"} +# {"level":40,"time":1790658580131,"pid":47732,"hostname":"andydeMacBook-Pro.local","service":"ltjt-control-plane","environment":"test","deployment_revision":"unknown","reqId":"41ea237e-68d2-496e-9c0f-ad21e719a808","diagnostic_event":"http.request.completed","diagnostic_stage":"http","request_id":"41ea237e-68d2-496e-9c0f-ad21e719a808","method":"POST","path":"/api/connections/heartbeat","status_code":403,"duration_ms":0.195,"msg":"HTTP request completed with client error"} +# {"level":30,"time":1790658580131,"pid":47732,"hostname":"andydeMacBook-Pro.local","service":"ltjt-control-plane","environment":"test","deployment_revision":"unknown","reqId":"80b28320-77d2-4aa2-96fd-68a08284c3d0","diagnostic_event":"http.request.started","diagnostic_stage":"http","request_id":"80b28320-77d2-4aa2-96fd-68a08284c3d0","method":"GET","path":"/api/events","msg":"HTTP request started"} +# {"level":40,"time":1790658580131,"pid":47732,"hostname":"andydeMacBook-Pro.local","service":"ltjt-control-plane","environment":"test","deployment_revision":"unknown","reqId":"80b28320-77d2-4aa2-96fd-68a08284c3d0","diagnostic_event":"http.request.rejected","diagnostic_stage":"http","request_id":"80b28320-77d2-4aa2-96fd-68a08284c3d0","status_code":403,"error_code":"task_access_forbidden","error_name":"AuthError","msg":"HTTP request rejected by application guard"} +# {"level":40,"time":1790658580131,"pid":47732,"hostname":"andydeMacBook-Pro.local","service":"ltjt-control-plane","environment":"test","deployment_revision":"unknown","reqId":"80b28320-77d2-4aa2-96fd-68a08284c3d0","diagnostic_event":"http.request.completed","diagnostic_stage":"http","request_id":"80b28320-77d2-4aa2-96fd-68a08284c3d0","method":"GET","path":"/api/events","status_code":403,"duration_ms":0.095,"msg":"HTTP request completed with client error"} +# {"level":30,"time":1790658580131,"pid":47732,"hostname":"andydeMacBook-Pro.local","service":"ltjt-control-plane","environment":"test","deployment_revision":"unknown","reqId":"3a75af8f-b215-4187-ab3d-20ee2a8166dd","diagnostic_event":"http.request.started","diagnostic_stage":"http","request_id":"3a75af8f-b215-4187-ab3d-20ee2a8166dd","method":"GET","path":"/api/operations-dashboard","msg":"HTTP request started"} +# {"level":40,"time":1790658580131,"pid":47732,"hostname":"andydeMacBook-Pro.local","service":"ltjt-control-plane","environment":"test","deployment_revision":"unknown","reqId":"3a75af8f-b215-4187-ab3d-20ee2a8166dd","diagnostic_event":"http.request.rejected","diagnostic_stage":"http","request_id":"3a75af8f-b215-4187-ab3d-20ee2a8166dd","status_code":403,"error_code":"task_access_forbidden","error_name":"AuthError","msg":"HTTP request rejected by application guard"} +# {"level":40,"time":1790658580131,"pid":47732,"hostname":"andydeMacBook-Pro.local","service":"ltjt-control-plane","environment":"test","deployment_revision":"unknown","reqId":"3a75af8f-b215-4187-ab3d-20ee2a8166dd","diagnostic_event":"http.request.completed","diagnostic_stage":"http","request_id":"3a75af8f-b215-4187-ab3d-20ee2a8166dd","method":"GET","path":"/api/operations-dashboard","status_code":403,"duration_ms":0.09,"msg":"HTTP request completed with client error"} +# {"level":30,"time":1790658580131,"pid":47732,"hostname":"andydeMacBook-Pro.local","service":"ltjt-control-plane","environment":"test","deployment_revision":"unknown","reqId":"6ccf89b7-4ec3-42ad-8752-0bd17f0c3462","diagnostic_event":"http.request.started","diagnostic_stage":"http","request_id":"6ccf89b7-4ec3-42ad-8752-0bd17f0c3462","method":"GET","path":"/api/operations-dashboard/tasks/TASK-1","msg":"HTTP request started"} +# {"level":40,"time":1790658580131,"pid":47732,"hostname":"andydeMacBook-Pro.local","service":"ltjt-control-plane","environment":"test","deployment_revision":"unknown","reqId":"6ccf89b7-4ec3-42ad-8752-0bd17f0c3462","diagnostic_event":"http.request.rejected","diagnostic_stage":"http","request_id":"6ccf89b7-4ec3-42ad-8752-0bd17f0c3462","task_id":"TASK-1","status_code":403,"error_code":"task_access_forbidden","error_name":"AuthError","msg":"HTTP request rejected by application guard"} +# {"level":40,"time":1790658580131,"pid":47732,"hostname":"andydeMacBook-Pro.local","service":"ltjt-control-plane","environment":"test","deployment_revision":"unknown","reqId":"6ccf89b7-4ec3-42ad-8752-0bd17f0c3462","diagnostic_event":"http.request.completed","diagnostic_stage":"http","request_id":"6ccf89b7-4ec3-42ad-8752-0bd17f0c3462","method":"GET","path":"/api/operations-dashboard/tasks/:taskId","status_code":403,"duration_ms":0.101,"msg":"HTTP request completed with client error"} +# {"level":30,"time":1790658580131,"pid":47732,"hostname":"andydeMacBook-Pro.local","service":"ltjt-control-plane","environment":"test","deployment_revision":"unknown","reqId":"25d1dd5f-da0f-46c1-b42c-bd49fa353598","diagnostic_event":"http.request.started","diagnostic_stage":"http","request_id":"25d1dd5f-da0f-46c1-b42c-bd49fa353598","method":"POST","path":"/api/tasks/TASK-1/reparse","content_length":31,"msg":"HTTP request started"} +# {"level":40,"time":1790658580132,"pid":47732,"hostname":"andydeMacBook-Pro.local","service":"ltjt-control-plane","environment":"test","deployment_revision":"unknown","reqId":"25d1dd5f-da0f-46c1-b42c-bd49fa353598","diagnostic_event":"http.request.rejected","diagnostic_stage":"http","request_id":"25d1dd5f-da0f-46c1-b42c-bd49fa353598","task_id":"TASK-1","status_code":403,"error_code":"task_access_forbidden","error_name":"AuthError","msg":"HTTP request rejected by application guard"} +# {"level":40,"time":1790658580132,"pid":47732,"hostname":"andydeMacBook-Pro.local","service":"ltjt-control-plane","environment":"test","deployment_revision":"unknown","reqId":"25d1dd5f-da0f-46c1-b42c-bd49fa353598","diagnostic_event":"http.request.completed","diagnostic_stage":"http","request_id":"25d1dd5f-da0f-46c1-b42c-bd49fa353598","method":"POST","path":"/api/tasks/:taskId/reparse","status_code":403,"duration_ms":0.228,"msg":"HTTP request completed with client error"} +# {"level":30,"time":1790658580132,"pid":47732,"hostname":"andydeMacBook-Pro.local","service":"ltjt-control-plane","environment":"test","deployment_revision":"unknown","reqId":"cb358032-00b6-4df4-bbda-c2cf8a0a9b6e","diagnostic_event":"http.request.started","diagnostic_stage":"http","request_id":"cb358032-00b6-4df4-bbda-c2cf8a0a9b6e","method":"PUT","path":"/api/parser-decisions/44444444-4444-4444-8444-444444444444/review","content_length":24,"msg":"HTTP request started"} +# Subtest: administrator sessions receive 403 before every task data-plane handler +ok 72 - administrator sessions receive 403 before every task data-plane handler + --- + duration_ms: 193.28625 + type: 'test' + ... +# Subtest: AI primary connection state follows service reachability, not historical authentication evidence +ok 73 - AI primary connection state follows service reachability, not historical authentication evidence + --- + duration_ms: 0.30625 + type: 'test' + ... +# {"level":40,"time":1790658580132,"pid":47732,"hostname":"andydeMacBook-Pro.local","service":"ltjt-control-plane","environment":"test","deployment_revision":"unknown","reqId":"cb358032-00b6-4df4-bbda-c2cf8a0a9b6e","diagnostic_event":"http.request.rejected","diagnostic_stage":"http","request_id":"cb358032-00b6-4df4-bbda-c2cf8a0a9b6e","status_code":403,"error_code":"task_access_forbidden","error_name":"AuthError","msg":"HTTP request rejected by application guard"} +# {"level":40,"time":1790658580132,"pid":47732,"hostname":"andydeMacBook-Pro.local","service":"ltjt-control-plane","environment":"test","deployment_revision":"unknown","reqId":"cb358032-00b6-4df4-bbda-c2cf8a0a9b6e","diagnostic_event":"http.request.completed","diagnostic_stage":"http","request_id":"cb358032-00b6-4df4-bbda-c2cf8a0a9b6e","method":"PUT","path":"/api/parser-decisions/:decisionId/review","status_code":403,"duration_ms":0.184,"msg":"HTTP request completed with client error"} +# {"level":30,"time":1790658580132,"pid":47732,"hostname":"andydeMacBook-Pro.local","service":"ltjt-control-plane","environment":"test","deployment_revision":"unknown","diagnostic_event":"service.closing","diagnostic_stage":"shutdown","msg":"control plane closing"} +# Subtest: migration contains the durable state tables and safety fields +ok 74 - migration contains the durable state tables and safety fields + --- + duration_ms: 2.308167 + type: 'test' + ... +# Subtest: control plane requires the arrangement ledger migration before readiness +ok 75 - control plane requires the arrangement ledger migration before readiness + --- + duration_ms: 6.404709 + type: 'test' + ... +# Subtest: ERP execution results fail closed after a possible write +ok 76 - ERP execution results fail closed after a possible write + --- + duration_ms: 2.266458 + type: 'test' + ... +# Subtest: successful ERP executor results expose consistent lifecycle boundary facts +ok 77 - successful ERP executor results expose consistent lifecycle boundary facts + --- + duration_ms: 1.840791 + type: 'test' + ... +# Subtest: reconciliation can only be downgraded to no-write with explicit page evidence +ok 78 - reconciliation can only be downgraded to no-write with explicit page evidence + --- + duration_ms: 0.205584 + type: 'test' + ... +# Subtest: success receipts require verifiable ERP evidence +ok 79 - success receipts require verifiable ERP evidence + --- + duration_ms: 0.100583 + type: 'test' + ... +# Subtest: multi-date split-order probes require complete child facts and no manual review +ok 80 - multi-date split-order probes require complete child facts and no manual review + --- + duration_ms: 0.359875 + type: 'test' + ... +# Subtest: unified lifecycle response plus fresh requery is accepted as completion evidence +ok 81 - unified lifecycle response plus fresh requery is accepted as completion evidence + --- + duration_ms: 0.302542 + type: 'test' + ... +# Subtest: passenger list explicit server success does not require a post-save row requery +ok 82 - passenger list explicit server success does not require a post-save row requery + --- + duration_ms: 0.167583 + type: 'test' + ... +# Subtest: backend-attached export requires frozen hashes and explicit no-delivery evidence before it becomes a success receipt +ok 83 - backend-attached export requires frozen hashes and explicit no-delivery evidence before it becomes a success receipt + --- + duration_ms: 0.58925 + type: 'test' + ... +# Subtest: confirmation export archives visitor XLS, delivers real XLSX, and converts other types to PDF +ok 84 - confirmation export archives visitor XLS, delivers real XLSX, and converts other types to PDF + --- + duration_ms: 2046.092083 + type: 'test' + ... +# Subtest: visitor XLSX conversion failure blocks export delivery instead of returning raw XLS +ok 85 - visitor XLSX conversion failure blocks export delivery instead of returning raw XLS + --- + duration_ms: 7.223958 + type: 'test' + ... +# Subtest: pre-write ERP blockers remain explicit after plugin dispatch +ok 86 - pre-write ERP blockers remain explicit after plugin dispatch + --- + duration_ms: 0.537792 + type: 'test' + ... +# Subtest: write-capable running progress is not mislabeled as write-started +ok 87 - write-capable running progress is not mislabeled as write-started + --- + duration_ms: 0.239541 + type: 'test' + ... +# Subtest: successful parse events show Agent return and explicit pre-plugin no-write boundaries +ok 88 - successful parse events show Agent return and explicit pre-plugin no-write boundaries + --- + duration_ms: 0.392834 + type: 'test' + ... +# Subtest: lifecycle live-write authority is removed after parsing and injected only by manual confirmation +ok 89 - lifecycle live-write authority is removed after parsing and injected only by manual confirmation + --- + duration_ms: 1.357667 + type: 'test' + ... +# Subtest: normal lifecycle confirmation keeps platform metadata outside the business operation +ok 90 - normal lifecycle confirmation keeps platform metadata outside the business operation + --- + duration_ms: 0.11125 + type: 'test' + ... +# Subtest: lifecycle delete authorization rechecks the frozen evidence and allowlist at confirmation time +ok 91 - lifecycle delete authorization rechecks the frozen evidence and allowlist at confirmation time + --- + duration_ms: 0.398 + type: 'test' + ... +# Subtest: uncertain ERP writes have a reconciliation-specific failure code +ok 92 - uncertain ERP writes have a reconciliation-specific failure code + --- + duration_ms: 0.476125 + type: 'test' + ... +# Subtest: successful parse lifecycle facts are not promoted to a task failure +ok 93 - successful parse lifecycle facts are not promoted to a task failure + --- + duration_ms: 0.139042 + type: 'test' + ... +# Subtest: expired plugin results fail safely and preserve reconciliation when the write boundary is unknown +ok 94 - expired plugin results fail safely and preserve reconciliation when the write boundary is unknown + --- + duration_ms: 0.118167 + type: 'test' + ... +# Subtest: ERP business-rule rejection preserves the native message for the user +ok 95 - ERP business-rule rejection preserves the native message for the user + --- + duration_ms: 0.061709 + type: 'test' + ... +# Subtest: passenger capacity rejection preserves the business message and retains technical evidence +ok 96 - passenger capacity rejection preserves the business message and retains technical evidence + --- + duration_ms: 0.053 + type: 'test' + ... +# Subtest: nested ERP business feedback is promoted when the executor omitted failure metadata +ok 97 - nested ERP business feedback is promoted when the executor omitted failure metadata + --- + duration_ms: 0.052292 + type: 'test' + ... +# Subtest: ERP migration enforces one execution attempt per task +ok 98 - ERP migration enforces one execution attempt per task + --- + duration_ms: 2.794875 + type: 'test' + ... +# Subtest: task session migration binds one encrypted conversation to each task +ok 99 - task session migration binds one encrypted conversation to each task + --- + duration_ms: 0.974583 + type: 'test' + ... +# Subtest: task outcome migration stores independently timestamped success and error summaries +ok 100 - task outcome migration stores independently timestamped success and error summaries + --- + duration_ms: 0.800917 + type: 'test' + ... +# Subtest: task source migration distinguishes manual and AgentBus tasks +ok 101 - task source migration distinguishes manual and AgentBus tasks + --- + duration_ms: 0.8895 + type: 'test' + ... +# Subtest: organization automation migration persists the switch and task confirmation mode +ok 102 - organization automation migration persists the switch and task confirmation mode + --- + duration_ms: 0.878541 + type: 'test' + ... +# Subtest: task query optimization migration adds bounded list and event indexes +ok 103 - task query optimization migration adds bounded list and event indexes + --- + duration_ms: 9.618833 + type: 'test' + ... +# Subtest: task artifact migration keeps encrypted bytes scoped to the owning task +ok 104 - task artifact migration keeps encrypted bytes scoped to the owning task + --- + duration_ms: 1.668375 + type: 'test' + ... +# Subtest: AgentBus channel migration scopes encrypted keys and durable replies +ok 105 - AgentBus channel migration scopes encrypted keys and durable replies + --- + duration_ms: 94.802792 + type: 'test' + ... +# Subtest: business parser migration snapshots modes and encrypts dual candidates +ok 106 - business parser migration snapshots modes and encrypts dual candidates + --- + duration_ms: 4.943667 + type: 'test' + ... +# Subtest: parser promotion uses immediate correctness checks without time, volume, or fallback-rate waits +ok 107 - parser promotion uses immediate correctness checks without time, volume, or fallback-rate waits + --- + duration_ms: 4.489 + type: 'test' + ... +# Subtest: persistent-session migration removes automatic expiry for active sessions +ok 108 - persistent-session migration removes automatic expiry for active sessions + --- + duration_ms: 35.135917 + type: 'test' + ... +# Subtest: operator page has a login gate and uses the durable task API +ok 109 - operator page has a login gate and uses the durable task API + --- + duration_ms: 28.847209 + type: 'test' + ... +# Subtest: system task events persist a null actor instead of an invalid empty UUID +ok 110 - system task events persist a null actor instead of an invalid empty UUID + --- + duration_ms: 0.466334 + type: 'test' + ... +# Subtest: public task wrappers keep session IDs out of operation and transport metadata +ok 111 - public task wrappers keep session IDs out of operation and transport metadata + --- + duration_ms: 1.258083 + type: 'test' + ... +# Subtest: public task exposes persisted outcome timestamps and keeps the latest error summary +ok 112 - public task exposes persisted outcome timestamps and keeps the latest error summary + --- + duration_ms: 0.740666 + type: 'test' + ... +# Subtest: platform only synthesizes an error timeline entry for a currently failed task +ok 113 - platform only synthesizes an error timeline entry for a currently failed task + --- + duration_ms: 51.535958 + type: 'test' + ... +# Subtest: diagnostic errors preserve code and stack location without leaking the error message +ok 114 - diagnostic errors preserve code and stack location without leaking the error message + --- + duration_ms: 12.676708 + type: 'test' + ... +# Subtest: diagnostic request identifiers and paths are stable and query-safe +ok 115 - diagnostic request identifiers and paths are stable and query-safe + --- + duration_ms: 0.358625 + type: 'test' + ... +# Subtest: control-plane logger redacts credentials and includes deployment identity +ok 116 - control-plane logger redacts credentials and includes deployment identity + --- + duration_ms: 28.144083 + type: 'test' + ... +# Subtest: HTTP diagnostics reuse one request ID and never log query values +ok 117 - HTTP diagnostics reuse one request ID and never log query values + --- + duration_ms: 227.8315 + type: 'test' + ... +# Subtest: successful heartbeats, health probes and workbench polling stay silent while their handlers still run +ok 118 - successful heartbeats, health probes and workbench polling stay silent while their handlers still run + --- + duration_ms: 137.3765 + type: 'test' + ... +# Subtest: failed heartbeats and readiness probes retain severity, error codes and request correlation +ok 119 - failed heartbeats and readiness probes retain severity, error codes and request correlation + --- + duration_ms: 51.542542 + type: 'test' + ... +# Subtest: polling failures stay visible and task writes and detail reads keep access logs +ok 120 - polling failures stay visible and task writes and detail reads keep access logs + --- + duration_ms: 172.245834 + type: 'test' + ... +# Subtest: automation settings reads are quiet but failures and actual settings changes remain visible +ok 121 - automation settings reads are quiet but failures and actual settings changes remain visible + --- + duration_ms: 56.8775 + type: 'test' + ... +# Subtest: task state and audit diagnostics record keys but never business values +ok 122 - task state and audit diagnostics record keys but never business values + --- + duration_ms: 0.591 + type: 'test' + ... +# Subtest: production configuration rejects raw AgentBus payload logging +ok 123 - production configuration rejects raw AgentBus payload logging + --- + duration_ms: 0.650458 + type: 'test' + ... +# Subtest: same execution read-only failure resolves provisional dispatch uncertainty +ok 124 - same execution read-only failure resolves provisional dispatch uncertainty + --- + duration_ms: 0.968083 + type: 'test' + ... +# Subtest: maintenance-expired dispatch uncertainty still accepts the original explicit no-write result +ok 125 - maintenance-expired dispatch uncertainty still accepts the original explicit no-write result + --- + duration_ms: 0.160125 + type: 'test' + ... +# Subtest: late no-write resolution enforces execution, original connection and immutable state boundaries +ok 126 - late no-write resolution enforces execution, original connection and immutable state boundaries + --- + duration_ms: 0.224083 + type: 'test' + ... +# Subtest: true post-write uncertainty and prior native evidence cannot be overwritten +ok 127 - true post-write uncertainty and prior native evidence cannot be overwritten + --- + duration_ms: 0.091875 + type: 'test' + ... +# Subtest: bare no-write flags, contradictory write evidence and non-lookup results are rejected +ok 128 - bare no-write flags, contradictory write evidence and non-lookup results are rejected + --- + duration_ms: 4.552416 + type: 'test' + ... +# Subtest: page-level no-write evidence must be complete and internally consistent +ok 129 - page-level no-write evidence must be complete and internally consistent + --- + duration_ms: 1.427 + type: 'test' + ... +# Subtest: provisional timeout cannot replace already-received plugin progress or a final outcome +ok 130 - provisional timeout cannot replace already-received plugin progress or a final outcome + --- + duration_ms: 0.541291 + type: 'test' + ... +# Subtest: real result-ingestion transaction closes only eligible dispatch failures and emits consistent facts +ok 131 - real result-ingestion transaction closes only eligible dispatch failures and emits consistent facts + --- + duration_ms: 45.090709 + type: 'test' + ... +# Subtest: PDF sources pass through with PDF metadata +ok 132 - PDF sources pass through with PDF metadata + --- + duration_ms: 5.604208 + type: 'test' + ... +# Subtest: conversion failure falls back to the source file +ok 133 - conversion failure falls back to the source file + --- + duration_ms: 23.144958 + type: 'test' + ... +# Subtest: PDF conversion selects Writer HTML import only for HTML documents + # Subtest: ERP Word HTML with vendor MIME + ok 1 - ERP Word HTML with vendor MIME + --- + duration_ms: 3183.038625 + type: 'test' + ... + # Subtest: HTML doctype in a Word file + ok 2 - HTML doctype in a Word file + --- + duration_ms: 19.268625 + type: 'test' + ... + # Subtest: legacy body-only Word HTML + ok 3 - legacy body-only Word HTML + --- + duration_ms: 13.866083 + type: 'test' + ... + # Subtest: HTML extension + ok 4 - HTML extension + --- + duration_ms: 111.203417 + type: 'test' + ... + # Subtest: HTML MIME without extension + ok 5 - HTML MIME without extension + --- + duration_ms: 42.652791 + type: 'test' + ... + # Subtest: binary Word + ok 6 - binary Word + --- + duration_ms: 22.517583 + type: 'test' + ... + # Subtest: DOCX package + ok 7 - DOCX package + --- + duration_ms: 22.204584 + type: 'test' + ... + # Subtest: RTF + ok 8 - RTF + --- + duration_ms: 27.527541 + type: 'test' + ... + 1..8 +ok 134 - PDF conversion selects Writer HTML import only for HTML documents + --- + duration_ms: 3450.644333 + type: 'test' + ... +# Subtest: a valid converter output replaces the source with a PDF +ok 135 - a valid converter output replaces the source with a PDF + --- + duration_ms: 872.201917 + type: 'test' + ... +# Subtest: HTML-in-XLS visitor sources become real XLSX workbooks +ok 136 - HTML-in-XLS visitor sources become real XLSX workbooks + --- + duration_ms: 870.364208 + type: 'test' + ... +# Subtest: visitor XLSX conversion failure remains a source fallback +ok 137 - visitor XLSX conversion failure remains a source fallback + --- + duration_ms: 5.733583 + type: 'test' + ... +# Subtest: wide Word HTML tables are scaled to the printable width before conversion +ok 138 - wide Word HTML tables are scaled to the printable width before conversion + --- + duration_ms: 889.244125 + type: 'test' + ... +# Subtest: external webhook request uses the confirmed fixed contract exactly +ok 139 - external webhook request uses the confirmed fixed contract exactly + --- + duration_ms: 143.093709 + type: 'test' + ... +# Subtest: external webhook accepts only HTTP 200 with code zero and data true +ok 140 - external webhook accepts only HTTP 200 with code zero and data true + --- + duration_ms: 4.992917 + type: 'test' + ... +# {"level":30,"time":1790658580545,"pid":47932,"hostname":"andydeMacBook-Pro.local","service":"ltjt-control-plane","environment":"test","deployment_revision":"unknown","diagnostic_event":"service.initialized","diagnostic_stage":"startup","host":"127.0.0.1","port":8786,"log_level":"info","database_schema":"public","database_ssl":"disable","artifact_storage_backend":"database","agentbus_enabled":false,"leader_summary_webhook_enabled":false,"leader_summary_webhook_configuration_error":"webhook_configuration_incomplete","parser_loop_enabled":false,"data_retention_enabled":false,"raw_payload_logging":false,"msg":"control plane initialized"} +# Subtest: webhook configuration is fail-closed and independent from AgentBus configuration +ok 141 - webhook configuration is fail-closed and independent from AgentBus configuration + --- + duration_ms: 34.752042 + type: 'test' + ... +# Subtest: client rejects blank content and malformed tokens before making a request +ok 142 - client rejects blank content and malformed tokens before making a request + --- + duration_ms: 1.117584 + type: 'test' + ... +# {"level":30,"time":1790658580703,"pid":47932,"hostname":"andydeMacBook-Pro.local","service":"ltjt-control-plane","environment":"test","deployment_revision":"unknown","diagnostic_event":"service.closing","diagnostic_stage":"shutdown","msg":"control plane closing"} +# {"level":30,"time":1790658580756,"pid":47932,"hostname":"andydeMacBook-Pro.local","service":"ltjt-control-plane","environment":"test","deployment_revision":"unknown","diagnostic_event":"service.initialized","diagnostic_stage":"startup","host":"127.0.0.1","port":8786,"log_level":"info","database_schema":"public","database_ssl":"disable","artifact_storage_backend":"database","agentbus_enabled":false,"leader_summary_webhook_enabled":true,"leader_summary_webhook_configuration_error":null,"parser_loop_enabled":false,"data_retention_enabled":false,"raw_payload_logging":false,"msg":"control plane initialized"} +# {"level":40,"time":1790658580779,"pid":47932,"hostname":"andydeMacBook-Pro.local","service":"ltjt-control-plane","environment":"test","deployment_revision":"unknown","diagnostic_event":"leader_summary.webhook_initialization_failed","notification_event":"webhook_initialization_failed","error_code":"EPERM","error_name":"Error","error_fingerprint":"14ff2b2c56f54be8a71944f4","error_stack":["at /Users//IdeaProjects/LWLT-AIBOT/node_modules/pg-pool/index.js:45:11","at process.processTicksAndRejections (node:internal/process/task_queues:103:5)","at async AuthService.getOrganization (/control-plane/src/auth.ts:214:20)","at async buildServer (/control-plane/src/server.ts:870:28)","at async TestContext. (/control-plane/test/external-webhook-client.test.ts:221:21)","at async Test.run (node:internal/test_runner/test:1054:7)","at async Test.processPendingSubtests (node:internal/test_runner/test:744:7)"],"error_errno":-1,"error_syscall":"connect","msg":"Leader summary webhook initialization failed; normal task services remain available"} +# Subtest: invalid configuration or webhook initialization failure does not block the normal HTTP service +ok 143 - invalid configuration or webhook initialization failure does not block the normal HTTP service + --- + duration_ms: 495.669459 + type: 'test' + ... +# {"level":30,"time":1790658580840,"pid":47932,"hostname":"andydeMacBook-Pro.local","service":"ltjt-control-plane","environment":"test","deployment_revision":"unknown","diagnostic_event":"service.closing","diagnostic_stage":"shutdown","msg":"control plane closing"} +# Subtest: hotel input splits five repeated group blocks and preserves multi-night stays and ordinary input +ok 144 - hotel input splits five repeated group blocks and preserves multi-night stays and ordinary input + --- + duration_ms: 303.323125 + type: 'test' + ... +# Subtest: the entire batch blocks on cross-team, missing field, duplicate, mixed action, invalid date and oversized input +ok 145 - the entire batch blocks on cross-team, missing field, duplicate, mixed action, invalid date and oversized input + --- + duration_ms: 33.048667 + type: 'test' + ... +# Subtest: all rows require bound, distinct write/requery evidence before whole-batch success +ok 146 - all rows require bound, distinct write/requery evidence before whole-batch success + --- + duration_ms: 3.138 + type: 'test' + ... +# Subtest: partial stop retains distinct successful ledger events and uncertainty never counts as success +ok 147 - partial stop retains distinct successful ledger events and uncertainty never counts as success + --- + duration_ms: 43.709041 + type: 'test' + ... +# Subtest: published operator batch example parses to three complete ordered stays +ok 148 - published operator batch example parses to three complete ordered stays + --- + duration_ms: 2.222375 + type: 'test' + ... +# Subtest: dated hotel replacement parses old dates separately from the new resource and count +ok 149 - dated hotel replacement parses old dates separately from the new resource and count + --- + duration_ms: 180.885708 + type: 'test' + ... +# Subtest: hotel replacement rejects missing dates, invalid count, reversed dates and mixed update styles +ok 150 - hotel replacement rejects missing dates, invalid count, reversed dates and mixed update styles + --- + duration_ms: 11.728875 + type: 'test' + ... +# Subtest: legacy hotel departure and count changes remain supported +ok 151 - legacy hotel departure and count changes remain supported + --- + duration_ms: 1.143833 + type: 'test' + ... +# Subtest: manual roster attachment base64 is bounded and hash verified +ok 152 - manual roster attachment base64 is bounded and hash verified + --- + duration_ms: 1.875375 + type: 'test' + ... +# Subtest: manual roster attachment rejects unsupported names, invalid base64 and mismatched hash +ok 153 - manual roster attachment rejects unsupported names, invalid base64 and mismatched hash + --- + duration_ms: 0.309584 + type: 'test' + ... +# Subtest: AgentBus attachment URLs allow private HTTPS endpoints but reject unsafe URL syntax +ok 154 - AgentBus attachment URLs allow private HTTPS endpoints but reject unsafe URL syntax + --- + duration_ms: 1.233416 + type: 'test' + ... +# Subtest: AgentBus attachment metadata is normalized without exposing URL credentials +ok 155 - AgentBus attachment metadata is normalized without exposing URL credentials + --- + duration_ms: 0.720208 + type: 'test' + ... +# Subtest: AgentBus attachment DNS accepts internal names and private literal addresses +ok 156 - AgentBus attachment DNS accepts internal names and private literal addresses + --- + duration_ms: 88.329708 + type: 'test' + ... +# Subtest: AgentBus attachment DNS pinning follows the Node lookup callback shape +ok 157 - AgentBus attachment DNS pinning follows the Node lookup callback shape + --- + duration_ms: 11.00275 + type: 'test' + ... +# Subtest: AgentBus attachment diagnostics expose stages and codes without URL data +ok 158 - AgentBus attachment diagnostics expose stages and codes without URL data + --- + duration_ms: 3.219 + type: 'test' + ... +# Subtest: input attachment migration stores only encrypted normalized data and waiting-task index +ok 159 - input attachment migration stores only encrypted normalized data and waiting-task index + --- + duration_ms: 9.28675 + type: 'test' + ... +# Subtest: migration retires only the legacy leader-summary transport and creates an encrypted webhook outbox +ok 160 - migration retires only the legacy leader-summary transport and creates an encrypted webhook outbox + --- + duration_ms: 74.234875 + type: 'test' + ... +# Subtest: webhook worker is independent from normal task execution and AgentBus delivery +ok 161 - webhook worker is independent from normal task execution and AgentBus delivery + --- + duration_ms: 5.884083 + type: 'test' + ... +# Subtest: projection is organization-scoped, future-only, role-safe, source-limited and encrypted +ok 162 - projection is organization-scoped, future-only, role-safe, source-limited and encrypted + --- + duration_ms: 4.175417 + type: 'test' + ... +# Subtest: delivery makes one attempt and preserves ambiguous outcomes instead of retrying +ok 163 - delivery makes one attempt and preserves ambiguous outcomes instead of retrying + --- + duration_ms: 3.004292 + type: 'test' + ... +# Subtest: HTTP exposes administrator-only status and no mutation or live test-send endpoint +ok 164 - HTTP exposes administrator-only status and no mutation or live test-send endpoint + --- + duration_ms: 4.42425 + type: 'test' + ... +# Subtest: administrator UI explains the isolated fixed webhook and accepted-not-delivered semantics +ok 165 - administrator UI explains the isolated fixed webhook and accepted-not-delivered semantics + --- + duration_ms: 8.800209 + type: 'test' + ... +# Subtest: notification shows the original multiline input and omits the generated task-number field +ok 166 - notification shows the original multiline input and omits the generated task-number field + --- + duration_ms: 88.280375 + type: 'test' + ... +# Subtest: original input is available even when parsing failed or the business route is unknown +ok 167 - original input is available even when parsing failed or the business route is unknown + --- + duration_ms: 1.020292 + type: 'test' + ... +# Subtest: result-update messages retain the original input and full result +ok 168 - result-update messages retain the original input and full result + --- + duration_ms: 0.320292 + type: 'test' + ... +# Subtest: input formatting preserves punctuation and tabs, normalizes newlines and removes nonprinting controls +ok 169 - input formatting preserves punctuation and tabs, normalizes newlines and removes nonprinting controls + --- + duration_ms: 0.14225 + type: 'test' + ... +# Subtest: missing input has an explicit fallback without inventing input from a receipt +ok 170 - missing input has an explicit fallback without inventing input from a receipt + --- + duration_ms: 0.423542 + type: 'test' + ... +# Subtest: UTF-8 budget retains fitting inputs and visibly truncates only overflowing input +ok 171 - UTF-8 budget retains fitting inputs and visibly truncates only overflowing input + --- + duration_ms: 0.670667 + type: 'test' + ... +# Subtest: very long Chinese and emoji input cannot break Unicode or displace the outcome +ok 172 - very long Chinese and emoji input cannot break Unicode or displace the outcome + --- + duration_ms: 0.698042 + type: 'test' + ... +# Subtest: worker reads the same encrypted original input for manual and AgentBus tasks +ok 173 - worker reads the same encrypted original input for manual and AgentBus tasks + --- + duration_ms: 5.855541 + type: 'test' + ... +# Subtest: missing, invalid or unreadable ciphertext does not prevent a notification +ok 174 - missing, invalid or unreadable ciphertext does not prevent a notification + --- + duration_ms: 2.209917 + type: 'test' + ... +# Subtest: leader summary projects only stable outcomes +ok 175 - leader summary projects only stable outcomes + --- + duration_ms: 0.395041 + type: 'test' + ... +# Subtest: completed leader summary exposes only whitelisted business identifiers +ok 176 - completed leader summary exposes only whitelisted business identifiers + --- + duration_ms: 0.27125 + type: 'test' + ... +# Subtest: failure, uncertainty, cancellation and dry-run use stable safe wording +ok 177 - failure, uncertainty, cancellation and dry-run use stable safe wording + --- + duration_ms: 0.283375 + type: 'test' + ... +# Subtest: a stable result after needs-review produces one result-update milestone +ok 178 - a stable result after needs-review produces one result-update milestone + --- + duration_ms: 0.105541 + type: 'test' + ... +# Subtest: Shanghai timestamp formatting is deterministic and invalid-safe +ok 179 - Shanghai timestamp formatting is deterministic and invalid-safe + --- + duration_ms: 0.090417 + type: 'test' + ... +# Subtest: control plane keeps only the operation timing allowlisted shape +ok 180 - control plane keeps only the operation timing allowlisted shape + --- + duration_ms: 1.540292 + type: 'test' + ... +# Subtest: control plane rejects unknown timing contracts +ok 181 - control plane rejects unknown timing contracts + --- + duration_ms: 0.070125 + type: 'test' + ... +# Subtest: control plane accepts every plugin page-action timing code +ok 182 - control plane accepts every plugin page-action timing code + --- + duration_ms: 0.295333 + type: 'test' + ... +# Subtest: control plane keeps the privacy-safe orchestration breakdown used to locate unattributed time +ok 183 - control plane keeps the privacy-safe orchestration breakdown used to locate unattributed time + --- + duration_ms: 0.135792 + type: 'test' + ... +# Subtest: only roster routes pause at intake until a workbook arrives +ok 184 - only roster routes pause at intake until a workbook arrives + --- + duration_ms: 3.466 + type: 'test' + ... +# Subtest: attachment-only AgentBus frames are eligible inbound tasks +ok 185 - attachment-only AgentBus frames are eligible inbound tasks + --- + duration_ms: 1.869375 + type: 'test' + ... +# Subtest: roster attachment source contract gates claims and scrubs normalized plaintext +ok 186 - roster attachment source contract gates claims and scrubs normalized plaintext + --- + duration_ms: 26.341125 + type: 'test' + ... +# Subtest: a newly delivered message revalidates previously rejected attachment bytes +ok 187 - a newly delivered message revalidates previously rejected attachment bytes + --- + duration_ms: 5.463708 + type: 'test' + ... +# Subtest: durable roster replies distinguish waiting and attachment phases and select one final owner +ok 188 - durable roster replies distinguish waiting and attachment phases and select one final owner + --- + duration_ms: 12.310458 + type: 'test' + ... +# Subtest: manual API accepts exactly one bounded inline roster attachment +ok 189 - manual API accepts exactly one bounded inline roster attachment + --- + duration_ms: 1.341291 + type: 'test' + ... +# Subtest: automatic roster target query uses newest creation time and preserves all scope filters +ok 190 - automatic roster target query uses newest creation time and preserves all scope filters + --- + duration_ms: 16.786542 + type: 'test' + ... +# Subtest: explicit target still selects an older task and validates channel and conversation +ok 191 - explicit target still selects an older task and validates channel and conversation + --- + duration_ms: 3.112917 + type: 'test' + ... +# Subtest: missing conversation or eligible target never falls back to an unrelated task +ok 192 - missing conversation or eligible target never falls back to an unrelated task + --- + duration_ms: 3.08175 + type: 'test' + ... +# Subtest: attachment transaction writes only its selected task and keeps race and replay protections +ok 193 - attachment transaction writes only its selected task and keeps race and replay protections + --- + duration_ms: 2.475708 + type: 'test' + ... +# Subtest: roster tail: 28 passengers survive stale template formulas and a merged footer unchanged +ok 194 - roster tail: 28 passengers survive stale template formulas and a merged footer unchanged + --- + duration_ms: 543.743917 + type: 'test' + ... +# Subtest: roster tail: sequence-only placeholders and separated trailing notes are not passengers +ok 195 - roster tail: sequence-only placeholders and separated trailing notes are not passengers + --- + duration_ms: 350.633917 + type: 'test' + ... +# Subtest: roster tail: recognition follows semantic columns after reordering +ok 196 - roster tail: recognition follows semantic columns after reordering + --- + duration_ms: 73.57775 + type: 'test' + ... +# Subtest: roster tail: any supplied passenger field keeps a row subject to strict formula validation +ok 197 - roster tail: any supplied passenger field keeps a row subject to strict formula validation + --- + duration_ms: 422.962792 + type: 'test' + ... +# Subtest: roster tail: unrecognized formulas and notes cannot be silently discarded +ok 198 - roster tail: unrecognized formulas and notes cannot be silently discarded + --- + duration_ms: 213.318083 + type: 'test' + ... +# Subtest: roster tail: placeholders or notes inside the roster never hide later passengers +ok 199 - roster tail: placeholders or notes inside the roster never hide later passengers + --- + duration_ms: 234.332458 + type: 'test' + ... +# Subtest: roster tail: empty templates do not create phantom passengers +ok 200 - roster tail: empty templates do not create phantom passengers + --- + duration_ms: 33.9245 + type: 'test' + ... +# Subtest: roster tail: active content and hidden required data remain blocked across the whole sheet +ok 201 - roster tail: active content and hidden required data remain blocked across the whole sheet + --- + duration_ms: 128.211 + type: 'test' + ... +# Subtest: XLSX is deterministically normalized to the canonical 13-column TSV +ok 202 - XLSX is deterministically normalized to the canonical 13-column TSV + --- + duration_ms: 352.592834 + type: 'test' + ... +# Subtest: an absent phone header produces blank phones without guessing unheaded values +ok 203 - an absent phone header produces blank phones without guessing unheaded values + --- + duration_ms: 364.59075 + type: 'test' + ... +# Subtest: phone-free rosters support reordered alias headers, merged remarks and XLS conversion +ok 204 - phone-free rosters support reordered alias headers, merged remarks and XLS conversion + --- + duration_ms: 95.005917 + type: 'test' + ... +# Subtest: phone is the only optional semantic and duplicate phone headers stay blocked +ok 205 - phone is the only optional semantic and duplicate phone headers stay blocked + --- + duration_ms: 430.275 + type: 'test' + ... +# Subtest: present phone columns retain formula, value, hidden-data and row checks +ok 206 - present phone columns retain formula, value, hidden-data and row checks + --- + duration_ms: 123.926458 + type: 'test' + ... +# Subtest: a marked leader still requires a phone when the source phone column is absent +ok 207 - a marked leader still requires a phone when the source phone column is absent + --- + duration_ms: 28.100166 + type: 'test' + ... +# Subtest: a merged title error is skipped, while header and passenger errors stay blocked +ok 208 - a merged title error is skipped, while header and passenger errors stay blocked + --- + duration_ms: 134.779167 + type: 'test' + ... +# Subtest: same-row identity templates support 18 and 15 digit sources without exporting them +ok 209 - same-row identity templates support 18 and 15 digit sources without exporting them + --- + duration_ms: 83.456375 + type: 'test' + ... +# Subtest: identity references follow reordered columns, shared formulas and the workbook date system +ok 210 - identity references follow reordered columns, shared formulas and the workbook date system + --- + duration_ms: 26.96325 + type: 'test' + ... +# Subtest: identity formulas reject missing, stale or error results at the formula cell +ok 211 - identity formulas reject missing, stale or error results at the formula cell + --- + duration_ms: 71.588125 + type: 'test' + ... +# Subtest: identity dependencies must be unambiguous same-row template references +ok 212 - identity dependencies must be unambiguous same-row template references + --- + duration_ms: 210.614917 + type: 'test' + ... +# Subtest: invalid identity sources cannot validate a cached gender or birth date +ok 213 - invalid identity sources cannot validate a cached gender or birth date + --- + duration_ms: 216.447167 + type: 'test' + ... +# Subtest: populated identity formula rows are not discarded as empty trailing templates +ok 214 - populated identity formula rows are not discarded as empty trailing templates + --- + duration_ms: 39.266209 + type: 'test' + ... +# Subtest: a 22-person template passes normalization and program parsing with the last row as leader +ok 215 - a 22-person template passes normalization and program parsing with the last row as leader + --- + duration_ms: 25.953209 + type: 'test' + ... +# Subtest: the ERP field row is auto-detected and source columns may be reordered +ok 216 - the ERP field row is auto-detected and source columns may be reordered + --- + duration_ms: 135.575875 + type: 'test' + ... +# Subtest: the approved attachment aliases and reverse issue-date formula are normalized +ok 217 - the approved attachment aliases and reverse issue-date formula are normalized + --- + duration_ms: 25.658375 + type: 'test' + ... +# Subtest: birthplace and expiry aliases preserve the canonical passenger fields and values +ok 218 - birthplace and expiry aliases preserve the canonical passenger fields and values + --- + duration_ms: 33.458875 + type: 'test' + ... +# Subtest: birthplace and expiry aliases cannot silently select duplicate semantic columns +ok 219 - birthplace and expiry aliases cannot silently select duplicate semantic columns + --- + duration_ms: 52.4035 + type: 'test' + ... +# Subtest: source header order may vary, but every required label must appear exactly once +ok 220 - source header order may vary, but every required label must appear exactly once + --- + duration_ms: 41.55075 + type: 'test' + ... +# Subtest: legacy XLS is accepted only through an injected fail-closed converter +ok 221 - legacy XLS is accepted only through an injected fail-closed converter + --- + duration_ms: 22.482833 + type: 'test' + ... +# Subtest: identity cards and other non-import columns are ignored without leaking values +ok 222 - identity cards and other non-import columns are ignored without leaking values + --- + duration_ms: 12.804584 + type: 'test' + ... +# Subtest: source document type is ignored and canonical ERP document type remains passport +ok 223 - source document type is ignored and canonical ERP document type remains passport + --- + duration_ms: 13.430458 + type: 'test' + ... +# Subtest: sequence numbers must be positive and unique +ok 224 - sequence numbers must be positive and unique + --- + duration_ms: 25.985166 + type: 'test' + ... +# Subtest: unsafe formulas stay blocked while ignored columns do not affect selected fields +ok 225 - unsafe formulas stay blocked while ignored columns do not affect selected fields + --- + duration_ms: 57.482666 + type: 'test' + ... +# Subtest: macros, external relationships and ambiguous sheets fail closed +ok 226 - macros, external relationships and ambiguous sheets fail closed + --- + duration_ms: 21.46025 + type: 'test' + ... +# Subtest: hidden non-empty rows or columns and duplicate headers fail closed +ok 227 - hidden non-empty rows or columns and duplicate headers fail closed + --- + duration_ms: 23.117959 + type: 'test' + ... +# Subtest: format, MIME, conversion output and technical limits are validated before parsing +ok 228 - format, MIME, conversion output and technical limits are validated before parsing + --- + duration_ms: 797.856084 + type: 'test' + ... +# Subtest: roster, shared-child batch and four arrangement update routes are hard Program-only in the machine registry +ok 229 - roster, shared-child batch and four arrangement update routes are hard Program-only in the machine registry + --- + duration_ms: 13.805459 + type: 'test' + ... +# Subtest: hard Program-only task snapshots stay Program with missing or hostile stored settings +ok 230 - hard Program-only task snapshots stay Program with missing or hostile stored settings + --- + duration_ms: 17.6905 + type: 'test' + ... +# Subtest: the public route mutation rejects AI, Shadow, and Auto before touching settings storage +ok 231 - the public route mutation rejects AI, Shadow, and Auto before touching settings storage + --- + duration_ms: 4.279542 + type: 'test' + ... +# Subtest: TaskService exposes and enforces the registry parser policy at every AI override boundary +ok 232 - TaskService exposes and enforces the registry parser policy at every AI override boundary + --- + duration_ms: 14.574792 + type: 'test' + ... +# Subtest: the machine registry contains the 23 independent routes exactly once +ok 233 - the machine registry contains the 23 independent routes exactly once + --- + duration_ms: 1.549708 + type: 'test' + ... +# Subtest: machine routes stay synchronized with their declared Program or Agent boundary +ok 234 - machine routes stay synchronized with their declared Program or Agent boundary + --- + duration_ms: 3.892542 + type: 'test' + ... +# Subtest: versioned sanitized gold corpus replays deterministically +ok 235 - versioned sanitized gold corpus replays deterministically + --- + duration_ms: 199.326708 + type: 'test' + ... +# Subtest: all 23 official-format examples produce contract-valid operations +ok 236 - all 23 official-format examples produce contract-valid operations + --- + duration_ms: 25.763584 + type: 'test' + ... +# Subtest: shared-child batch input compiles the inclusive cross-month range without exposing an Agent action +ok 237 - shared-child batch input compiles the inclusive cross-month range without exposing an Agent action + --- + duration_ms: 0.434167 + type: 'test' + ... +# Subtest: passenger TSV preserves 13 columns when the final passenger has empty optional fields +ok 238 - passenger TSV preserves 13 columns when the final passenger has empty optional fields + --- + duration_ms: 6.60075 + type: 'test' + ... +# Subtest: passenger TSV rejects actual 12-column and 14-column data rows +ok 239 - passenger TSV rejects actual 12-column and 14-column data rows + --- + duration_ms: 0.617042 + type: 'test' + ... +# Subtest: passenger TSV promotes only an exact leader remark into structured ERP contact data +ok 240 - passenger TSV promotes only an exact leader remark into structured ERP contact data + --- + duration_ms: 0.581375 + type: 'test' + ... +# Subtest: passenger TSV rejects duplicate leaders or a leader without both name and phone +ok 241 - passenger TSV rejects duplicate leaders or a leader without both name and phone + --- + duration_ms: 0.901083 + type: 'test' + ... +# Subtest: independent room updates accept DBL shorthand without dropping other intentions +ok 242 - independent room updates accept DBL shorthand without dropping other intentions + --- + duration_ms: 7.542083 + type: 'test' + ... +# Subtest: independent headcount distributions keep occupied and non-occupied children distinct +ok 243 - independent headcount distributions keep occupied and non-occupied children distinct + --- + duration_ms: 3.108333 + type: 'test' + ... +# Subtest: named references retain original fullwidth spelling and internal whitespace in keyword +ok 244 - named references retain original fullwidth spelling and internal whitespace in keyword + --- + duration_ms: 1.952541 + type: 'test' + ... +# Subtest: registered customer typo is normalized only in name while keyword preserves source +ok 245 - registered customer typo is normalized only in name while keyword preserves source + --- + duration_ms: 1.128042 + type: 'test' + ... +# Subtest: route and field labels allow only a unique one-character correction +ok 246 - route and field labels allow only a unique one-character correction + --- + duration_ms: 0.619167 + type: 'test' + ... +# Subtest: route resolution is source-agnostic for embedded directives and complete unique field signatures +ok 247 - route resolution is source-agnostic for embedded directives and complete unique field signatures + --- + duration_ms: 14.913666 + type: 'test' + ... +# Subtest: unknown labels are eligible for auto fallback, but invalid values and conflicts are not +ok 248 - unknown labels are eligible for auto fallback, but invalid values and conflicts are not + --- + duration_ms: 2.971542 + type: 'test' + ... +# Subtest: business-value errors stay on the deterministic path instead of becoming contract fallbacks +ok 249 - business-value errors stay on the deterministic path instead of becoming contract fallbacks + --- + duration_ms: 1.889958 + type: 'test' + ... +# Subtest: independent updates require an exact registered target name +ok 250 - independent updates require an exact registered target name + --- + duration_ms: 0.499666 + type: 'test' + ... +# Subtest: later turns overwrite prior fields while an unlabeled supplement fills exactly one missing field +ok 251 - later turns overwrite prior fields while an unlabeled supplement fills exactly one missing field + --- + duration_ms: 0.470833 + type: 'test' + ... +# Subtest: a second business directive cannot be merged into the same task +ok 252 - a second business directive cannot be merged into the same task + --- + duration_ms: 0.396125 + type: 'test' + ... +# Subtest: passenger TSV rejects duplicate sequence numbers without changing any value +ok 253 - passenger TSV rejects duplicate sequence numbers without changing any value + --- + duration_ms: 0.314125 + type: 'test' + ... +# Subtest: all export expands deterministically and pickup sign requires a visitor name +ok 254 - all export expands deterministically and pickup sign requires a visitor name + --- + duration_ms: 0.496125 + type: 'test' + ... +# Subtest: whole shared-plan visitor information stays distinct from order and child visitor lists +ok 255 - whole shared-plan visitor information stays distinct from order and child visitor lists + --- + duration_ms: 4.560167 + type: 'test' + ... +# Subtest: date normalization handles next occurrence, cross-year ranges, and leap days +ok 256 - date normalization handles next occurrence, cross-year ranges, and leap days + --- + duration_ms: 1.555375 + type: 'test' + ... +# Subtest: modification dates use the next occurrence and preserve explicit years +ok 257 - modification dates use the next occurrence and preserve explicit years + --- + duration_ms: 1.662542 + type: 'test' + ... +# Subtest: a yearless modification date supplied on a later turn uses that turn date context +ok 258 - a yearless modification date supplied on a later turn uses that turn date context + --- + duration_ms: 0.380542 + type: 'test' + ... +# Subtest: cancel and restore dates use the next occurrence and preserve explicit years +ok 259 - cancel and restore dates use the next occurrence and preserve explicit years + --- + duration_ms: 0.838166 + type: 'test' + ... +# Subtest: deterministic parser meets the ordinary and large-list local P95 budgets +ok 260 - deterministic parser meets the ordinary and large-list local P95 budgets + --- + duration_ms: 343.440375 + type: 'test' + ... +# Subtest: semantic comparator ignores safe ordering but reports changed operation fields +ok 261 - semantic comparator ignores safe ordering but reports changed operation fields + --- + duration_ms: 1.381 + type: 'test' + ... +# Subtest: mode orchestration keeps AI authority in Shadow and enforces the Auto fallback allowlist +ok 262 - mode orchestration keeps AI authority in Shadow and enforces the Auto fallback allowlist + --- + duration_ms: 6.514042 + type: 'test' + ... +# Subtest: repeated hotel blocks always use their deterministic batch contract even with AI affinity +ok 263 - repeated hotel blocks always use their deterministic batch contract even with AI affinity + --- + duration_ms: 1.510834 + type: 'test' + ... +# Subtest: hotel arrangement uses the customer bilingual booking template +ok 264 - hotel arrangement uses the customer bilingual booking template + --- + duration_ms: 1.182541 + type: 'test' + ... +# Subtest: hotel clear and update replies stay business-readable when the booking template is not applicable +ok 265 - hotel clear and update replies stay business-readable when the booking template is not applicable + --- + duration_ms: 2.780125 + type: 'test' + ... +# Subtest: hotel replacement reply describes the new hotel and count while retaining the original dates +ok 266 - hotel replacement reply describes the new hotel and count while retaining the original dates + --- + duration_ms: 0.167 + type: 'test' + ... +# Subtest: batch newbooking receipt preserves every group number +ok 267 - batch newbooking receipt preserves every group number + --- + duration_ms: 0.09125 + type: 'test' + ... +# Subtest: update and file replies expose business fields without technical evidence +ok 268 - update and file replies expose business fields without technical evidence + --- + duration_ms: 3.407 + type: 'test' + ... +# Subtest: visitor export reply exposes only the mobile XLSX delivery artifact +ok 269 - visitor export reply exposes only the mobile XLSX delivery artifact + --- + duration_ms: 0.248458 + type: 'test' + ... +# Subtest: legacy ERP mojibake filenames are repaired when a stored receipt is read +ok 270 - legacy ERP mojibake filenames are repaired when a stored receipt is read + --- + duration_ms: 0.38275 + type: 'test' + ... +# Subtest: arrangement replacement receipts report the new resource and quantity with original dates +ok 271 - arrangement replacement receipts report the new resource and quantity with original dates + --- + duration_ms: 0.188708 + type: 'test' + ... +# Subtest: all business actions project accepted success without roster contents or arbitrary result fields +ok 272 - all business actions project accepted success without roster contents or arbitrary result fields + --- + duration_ms: 2.354291 + type: 'test' + ... +# Subtest: failed, uncertain, blocker and unproved results do not create completed business records +ok 273 - failed, uncertain, blocker and unproved results do not create completed business records + --- + duration_ms: 3.487417 + type: 'test' + ... +# Subtest: individual group conflicts are rejected and full suffixes remain distinct +ok 274 - individual group conflicts are rejected and full suffixes remain distinct + --- + duration_ms: 0.255334 + type: 'test' + ... +# Subtest: internal identifiers and conflicting child-parent evidence cannot become group associations +ok 275 - internal identifiers and conflicting child-parent evidence cannot become group associations + --- + duration_ms: 0.107667 + type: 'test' + ... +# Subtest: batch children are explicitly mapped to their respective parents, never zipped by array order +ok 276 - batch children are explicitly mapped to their respective parents, never zipped by array order + --- + duration_ms: 0.149 + type: 'test' + ... +# Subtest: native child-create receipts carry the verified parent; missing parents remain unlinked +ok 277 - native child-create receipts carry the verified parent; missing parents remain unlinked + --- + duration_ms: 0.077125 + type: 'test' + ... +# Subtest: roster counts use the latest import per subject and never add repeated uploads +ok 278 - roster counts use the latest import per subject and never add repeated uploads + --- + duration_ms: 28.320875 + type: 'test' + ... +# Subtest: shared-plan summaries separate each child and never claim every roster is complete +ok 279 - shared-plan summaries separate each child and never claim every roster is complete + --- + duration_ms: 0.561708 + type: 'test' + ... +# Subtest: cancel/restore updates current state without erasing arrangements or uncancelling children +ok 280 - cancel/restore updates current state without erasing arrangements or uncancelling children + --- + duration_ms: 1.166666 + type: 'test' + ... +# Subtest: verified parent cancellation propagates only proven child references +ok 281 - verified parent cancellation propagates only proven child references + --- + duration_ms: 0.479583 + type: 'test' + ... +# Subtest: all current arrangement rows render supported details; unknown legacy detail is explicit +ok 282 - all current arrangement rows render supported details; unknown legacy detail is explicit + --- + duration_ms: 0.224375 + type: 'test' + ... +# Subtest: exports are latest per file type and labelled stale after later changes without deleting records +ok 283 - exports are latest per file type and labelled stale after later changes without deleting records + --- + duration_ms: 0.608125 + type: 'test' + ... +# Subtest: receipts stay frozen and rebuilding never duplicates the progress block +ok 284 - receipts stay frozen and rebuilding never duplicates the progress block + --- + duration_ms: 0.950834 + type: 'test' + ... +# Subtest: encrypted ledger isolates accounts and organizations, deduplicates, and survives task deletion +ok 285 - encrypted ledger isolates accounts and organizations, deduplicates, and survives task deletion + --- + duration_ms: 1.38175 + type: 'test' + ... +# Subtest: unlinked child history joins only a uniquely known parent in the same account +ok 286 - unlinked child history joins only a uniquely known parent in the same account + --- + duration_ms: 0.719542 + type: 'test' + ... +# Subtest: history backfill preserves only the matching successful execution including archived tasks +ok 287 - history backfill preserves only the matching successful execution including archived tasks + --- + duration_ms: 0.687083 + type: 'test' + ... +# Subtest: migration preserves business records without task foreign keys and prevents administrator ownership +ok 288 - migration preserves business records without task foreign keys and prevents administrator ownership + --- + duration_ms: 5.519834 + type: 'test' + ... +# Subtest: partial batches retain only independently verified completed rows +ok 289 - partial batches retain only independently verified completed rows + --- + duration_ms: 2.154 + type: 'test' + ... +# Subtest: batch team dates follow their own receipt rows and never copy a date onto all groups +ok 290 - batch team dates follow their own receipt rows and never copy a date onto all groups + --- + duration_ms: 0.455208 + type: 'test' + ... +# Subtest: channel length limits clearly disclose truncation while leaving short replies unchanged +ok 291 - channel length limits clearly disclose truncation while leaving short replies unchanged + --- + duration_ms: 1.826208 + type: 'test' + ... +1..291 +# tests 299 +# suites 0 +# pass 299 +# fail 0 +# cancelled 0 +# skipped 0 +# todo 0 +# duration_ms 10093.032375 diff --git a/archive/evidence/2026-09-29/hotel-native-remark-01a0858b/http-tests.txt b/archive/evidence/2026-09-29/hotel-native-remark-01a0858b/http-tests.txt new file mode 100644 index 0000000..9751a2d --- /dev/null +++ b/archive/evidence/2026-09-29/hotel-native-remark-01a0858b/http-tests.txt @@ -0,0 +1,12 @@ +▶ business-system HTTP boundary + ✔ returns the real AI connectivity probe from /api/status (19.389709ms) + ✔ exposes /api/parse and no longer exposes /api/agent routes (4.931792ms) +✔ business-system HTTP boundary (25.077166ms) +ℹ tests 2 +ℹ suites 1 +ℹ pass 2 +ℹ fail 0 +ℹ cancelled 0 +ℹ skipped 0 +ℹ todo 0 +ℹ duration_ms 135.24725 diff --git a/archive/evidence/2026-09-29/hotel-native-remark-01a0858b/legacy-tests-sandbox.txt b/archive/evidence/2026-09-29/hotel-native-remark-01a0858b/legacy-tests-sandbox.txt new file mode 100644 index 0000000..35f29bb --- /dev/null +++ b/archive/evidence/2026-09-29/hotel-native-remark-01a0858b/legacy-tests-sandbox.txt @@ -0,0 +1,2766 @@ +TAP version 13 +# Subtest: account creation accepts any non-empty password and blocks an empty password before the request +ok 1 - account creation accepts any non-empty password and blocks an empty password before the request + --- + duration_ms: 2.069291 + type: 'test' + ... +# Subtest: account creation normalizes valid form values into the server contract +ok 2 - account creation normalizes valid form values into the server contract + --- + duration_ms: 0.485208 + type: 'test' + ... +# Subtest: account creation translates backend password validation into an actionable message +ok 3 - account creation translates backend password validation into an actionable message + --- + duration_ms: 4.948791 + type: 'test' + ... +# Subtest: account forms expose no length rule or first-login forced-password flow +ok 4 - account forms expose no length rule or first-login forced-password flow + --- + duration_ms: 7.323792 + type: 'test' + ... +# Subtest: login after an unauthenticated page load starts ongoing status recovery without reload +ok 5 - login after an unauthenticated page load starts ongoing status recovery without reload + --- + duration_ms: 168.108041 + type: 'test' + ... +# Subtest: a pending task-list refresh does not stop bridge health or subsequent heartbeat recovery +ok 6 - a pending task-list refresh does not stop bridge health or subsequent heartbeat recovery + --- + duration_ms: 2.516625 + type: 'test' + ... +# Subtest: a two-second worker/ERP response stays connected and reaches the server heartbeat +ok 7 - a two-second worker/ERP response stays connected and reaches the server heartbeat + --- + duration_ms: 1.424667 + type: 'test' + ... +# Subtest: simultaneous focus and manual checks coalesce into one account-bound probe +ok 8 - simultaneous focus and manual checks coalesce into one account-bound probe + --- + duration_ms: 1.698625 + type: 'test' + ... +# Subtest: late status replies after logout cannot publish a heartbeat or restore connected status +ok 9 - late status replies after logout cannot publish a heartbeat or restore connected status + --- + duration_ms: 1.1595 + type: 'test' + ... +# Subtest: bridge-ready announcement refreshes account-bound state and never accepts an unbound snapshot +ok 10 - bridge-ready announcement refreshes account-bound state and never accepts an unbound snapshot + --- + duration_ms: 1.705709 + type: 'test' + ... +# Subtest: an admin page never sends a plugin probe or worker heartbeat +ok 11 - an admin page never sends a plugin probe or worker heartbeat + --- + duration_ms: 3.099208 + type: 'test' + ... +# Subtest: repeated login retains one timer and one focus listener; logout makes polling inert +ok 12 - repeated login retains one timer and one focus listener; logout makes polling inert + --- + duration_ms: 6.111875 + type: 'test' + ... +# Subtest: server worker rejection remains a warning until a later verified heartbeat recovers +ok 13 - server worker rejection remains a warning until a later verified heartbeat recovers + --- + duration_ms: 3.893542 + type: 'test' + ... +# Subtest: an old session response cannot overwrite a newer session check or heartbeat identity +ok 14 - an old session response cannot overwrite a newer session check or heartbeat identity + --- + duration_ms: 1.598125 + type: 'test' + ... +# Subtest: five-second plugin acceptance no longer triggers the old four-second false timeout +ok 15 - five-second plugin acceptance no longer triggers the old four-second false timeout + --- + duration_ms: 3.295917 + type: 'test' + ... +# Subtest: a genuine acceptance timeout records uncertainty and never dispatches twice +ok 16 - a genuine acceptance timeout records uncertainty and never dispatches twice + --- + duration_ms: 66.99375 + type: 'test' + ... +# Subtest: dispatch uncertainty reads stored late blocked results with no ERP action or new claim +ok 17 - dispatch uncertainty reads stored late blocked results with no ERP action or new claim + --- + duration_ms: 84.239084 + type: 'test' + ... +# Subtest: late progress does not replace dispatch uncertainty or post another API result +ok 18 - late progress does not replace dispatch uncertainty or post another API result + --- + duration_ms: 3.660333 + type: 'test' + ... +# Subtest: a rejected stored result preserves the platform uncertainty state +ok 19 - a rejected stored result preserves the platform uncertainty state + --- + duration_ms: 12.707416 + type: 'test' + ... +# Subtest: post-write uncertainty keeps its existing manual reconciliation boundary +ok 20 - post-write uncertainty keeps its existing manual reconciliation boundary + --- + duration_ms: 1.398333 + type: 'test' + ... +# Subtest: maintenance-expired dispatch tasks can manually sync local plugin results without ERP reconciliation +ok 21 - maintenance-expired dispatch tasks can manually sync local plugin results without ERP reconciliation + --- + duration_ms: 1.509625 + type: 'test' + ... +# Subtest: other-account tasks cannot read, persist or dispatch plugin tasks +ok 22 - other-account tasks cannot read, persist or dispatch plugin tasks + --- + duration_ms: 1.234291 + type: 'test' + ... +# Subtest: dashboard summary cards are uniform display-only totals and leave filtering to the explicit controls +ok 23 - dashboard summary cards are uniform display-only totals and leave filtering to the explicit controls + --- + duration_ms: 1.291042 + type: 'test' + ... +# Subtest: waiting-for-input work is folded into in-progress instead of exposing a follow-up state +ok 24 - waiting-for-input work is folded into in-progress instead of exposing a follow-up state + --- + duration_ms: 0.230458 + type: 'test' + ... +# Subtest: dashboard route has a focused leadership header and phone-safe navigation shell +ok 25 - dashboard route has a focused leadership header and phone-safe navigation shell + --- + duration_ms: 0.213959 + type: 'test' + ... +# Subtest: phone dashboard turns metrics and task rows into touch-friendly cards +ok 26 - phone dashboard turns metrics and task rows into touch-friendly cards + --- + duration_ms: 0.539125 + type: 'test' + ... +# Subtest: table filters use a bounded single-connection read and default to 20 rows +ok 27 - table filters use a bounded single-connection read and default to 20 rows + --- + duration_ms: 0.619708 + type: 'test' + ... +# Subtest: workbench exposes one XLS/XLSX roster attachment without turning it into persistent state +ok 28 - workbench exposes one XLS/XLSX roster attachment without turning it into persistent state + --- + duration_ms: 3.222958 + type: 'test' + ... +# Subtest: new and awaiting roster tasks send a single in-memory base64 JSON attachment +ok 29 - new and awaiting roster tasks send a single in-memory base64 JSON attachment + --- + duration_ms: 0.340625 + type: 'test' + ... +# Subtest: awaiting_attachment has a dedicated attachment-only continuation UI +ok 30 - awaiting_attachment has a dedicated attachment-only continuation UI + --- + duration_ms: 0.163333 + type: 'test' + ... +# Subtest: parser routing visibly locks Program-only routes and keeps emergency wording accurate +ok 31 - parser routing visibly locks Program-only routes and keeps emergency wording accurate + --- + duration_ms: 0.092292 + type: 'test' + ... +# Subtest: external parser contract + # Subtest: validates canonical operation JSON locally without opening an Agent session + ok 1 - validates canonical operation JSON locally without opening an Agent session + --- + duration_ms: 14.966792 + type: 'test' + ... + # Subtest: rejects invalid canonical operation JSON locally without Agent repair + ok 2 - rejects invalid canonical operation JSON locally without Agent repair + --- + duration_ms: 1.074667 + type: 'test' + ... + # Subtest: creates a task-isolated session and sends the raw input through SSE + ok 3 - creates a task-isolated session and sends the raw input through SSE + --- + duration_ms: 25.022959 + type: 'test' + ... + # Subtest: repairs one contract-invalid response in the same session without dropping unknown fields + ok 4 - repairs one contract-invalid response in the same session without dropping unknown fields + --- + duration_ms: 1.870333 + type: 'test' + ... + # Subtest: repairs a stale other/filing item question in the same session + ok 5 - repairs a stale other/filing item question in the same session + --- + duration_ms: 5.905917 + type: 'test' + ... + # Subtest: repairs a stale modification year question in the same session + ok 6 - repairs a stale modification year question in the same session + --- + duration_ms: 54.04875 + type: 'test' + ... + # Subtest: repairs the reported stale restore year question in the same session + ok 7 - repairs the reported stale restore year question in the same session + --- + duration_ms: 1.913834 + type: 'test' + ... + # Subtest: reports the concrete unknown operation.data keys + ok 8 - reports the concrete unknown operation.data keys + --- + duration_ms: 0.214166 + type: 'test' + ... + # Subtest: returns NEED_INPUT without an operation and continues the same session on the next turn + ok 9 - returns NEED_INPUT without an operation and continues the same session on the next turn + --- + duration_ms: 103.340917 + type: 'test' + ... + # Subtest: rebuilds an expired session once and replays stored turns before the current turn + ok 10 - rebuilds an expired session once and replays stored turns before the current turn + --- + duration_ms: 2.542833 + type: 'test' + ... + # Subtest: returns a blocked result without making a request when the server key is absent + ok 11 - returns a blocked result without making a request when the server key is absent + --- + duration_ms: 0.199167 + type: 'test' + ... + # Subtest: probes the provider health endpoint without creating a session + ok 12 - probes the provider health endpoint without creating a session + --- + duration_ms: 0.440292 + type: 'test' + ... + # Subtest: reports an unhealthy provider endpoint as disconnected + ok 13 - reports an unhealthy provider endpoint as disconnected + --- + duration_ms: 0.166416 + type: 'test' + ... + # Subtest: maps external authorization and active-run errors without exposing the key + ok 14 - maps external authorization and active-run errors without exposing the key + --- + duration_ms: 0.229375 + type: 'test' + ... + # Subtest: rejects unsafe provider URLs and non-raw API keys + ok 15 - rejects unsafe provider URLs and non-raw API keys + --- + duration_ms: 0.074291 + type: 'test' + ... + # Subtest: retries one rate-limited request with the same stable idempotency key + ok 16 - retries one rate-limited request with the same stable idempotency key + --- + duration_ms: 0.71575 + type: 'test' + ... + # Subtest: uses one parse-wide rate-limit budget across session and stream + ok 17 - uses one parse-wide rate-limit budget across session and stream + --- + duration_ms: 0.376584 + type: 'test' + ... + # Subtest: redacts arbitrary provider errors, API keys and raw input + ok 18 - redacts arbitrary provider errors, API keys and raw input + --- + duration_ms: 0.196333 + type: 'test' + ... + # Subtest: returns a bounded cancellation result when an SSE body ignores cancel() + ok 19 - returns a bounded cancellation result when an SSE body ignores cancel() + --- + duration_ms: 1199.605375 + type: 'test' + ... + 1..19 +ok 32 - external parser contract + --- + duration_ms: 1414.237083 + type: 'suite' + ... +# Subtest: SSE and result helpers + # Subtest: parses CRLF SSE blocks and JSON objects wrapped in markdown + ok 1 - parses CRLF SSE blocks and JSON objects wrapped in markdown + --- + duration_ms: 0.391125 + type: 'test' + ... + # Subtest: returns after a terminal SSE event even if the provider keeps the stream open + ok 2 - returns after a terminal SSE event even if the provider keeps the stream open + --- + duration_ms: 0.599 + type: 'test' + ... + # Subtest: accepts a structured final event and preserves the operation contract + ok 3 - accepts a structured final event and preserves the operation contract + --- + duration_ms: 0.303125 + type: 'test' + ... + # Subtest: rejects provider-supplied runtime metadata from natural-language results + ok 4 - rejects provider-supplied runtime metadata from natural-language results + --- + duration_ms: 0.184834 + type: 'test' + ... + # Subtest: collects assistant chunks from the documented messages event shape + ok 5 - collects assistant chunks from the documented messages event shape + --- + duration_ms: 0.26925 + type: 'test' + ... + # Subtest: handles UTF-8 byte boundaries and CRLF while requiring a terminal event + ok 6 - handles UTF-8 byte boundaries and CRLF while requiring a terminal event + --- + duration_ms: 0.738625 + type: 'test' + ... + # Subtest: fails closed on oversized, incomplete and conflicting SSE output + # Subtest: oversized event + ok 1 - oversized event + --- + duration_ms: 0.970042 + type: 'test' + ... + # Subtest: event count limit + ok 2 - event count limit + --- + duration_ms: 0.42875 + type: 'test' + ... + # Subtest: missing terminal event + ok 3 - missing terminal event + --- + duration_ms: 0.347542 + type: 'test' + ... + # Subtest: conflicting candidates + ok 4 - conflicting candidates + --- + duration_ms: 0.336584 + type: 'test' + ... + # Subtest: wrong session content type + ok 5 - wrong session content type + --- + duration_ms: 0.2435 + type: 'test' + ... + 1..5 + ok 7 - fails closed on oversized, incomplete and conflicting SSE output + --- + duration_ms: 2.655583 + type: 'test' + ... + # Subtest: blocks the currently published flat parser shape instead of adapting it + ok 8 - blocks the currently published flat parser shape instead of adapting it + --- + duration_ms: 0.074666 + type: 'test' + ... + # Subtest: blocks camelCase flat fields emitted by the external Profile + ok 9 - blocks camelCase flat fields emitted by the external Profile + --- + duration_ms: 0.059084 + type: 'test' + ... + # Subtest: blocks the malformed formal batch payload that previously reached execution + ok 10 - blocks the malformed formal batch payload that previously reached execution + --- + duration_ms: 0.166125 + type: 'test' + ... + # Subtest: rolls yearless newbooking dates to the next occurrence using the task date + ok 11 - rolls yearless newbooking dates to the next occurrence using the task date + --- + duration_ms: 0.316417 + type: 'test' + ... + # Subtest: uses the current year for a future yearless newbooking date + ok 12 - uses the current year for a future yearless newbooking date + --- + duration_ms: 0.2705 + type: 'test' + ... + # Subtest: does not rewrite explicitly year-qualified newbooking dates + ok 13 - does not rewrite explicitly year-qualified newbooking dates + --- + duration_ms: 0.077917 + type: 'test' + ... + # Subtest: rolls yearless modification lookup dates to the next occurrence + ok 14 - rolls yearless modification lookup dates to the next occurrence + --- + duration_ms: 0.166875 + type: 'test' + ... + # Subtest: normalizes the reported shared-child 11-15 lookup without asking for a year + ok 15 - normalizes the reported shared-child 11-15 lookup without asking for a year + --- + duration_ms: 0.226 + type: 'test' + ... + # Subtest: normalizes modification target dates and preserves explicit years + ok 16 - normalizes modification target dates and preserves explicit years + --- + duration_ms: 0.229083 + type: 'test' + ... + # Subtest: normalizes a yearless hotel-change end date + ok 17 - normalizes a yearless hotel-change end date + --- + duration_ms: 0.138375 + type: 'test' + ... + # Subtest: normalizes cancel and restore lookup dates and preserves explicit years + ok 18 - normalizes cancel and restore lookup dates and preserves explicit years + --- + duration_ms: 0.28575 + type: 'test' + ... + # Subtest: rejects a stale year-only restore question so the client performs one contract repair + ok 19 - rejects a stale year-only restore question so the client performs one contract repair + --- + duration_ms: 0.075208 + type: 'test' + ... + # Subtest: rejects a stale year-only modification question so the client performs one contract repair + ok 20 - rejects a stale year-only modification question so the client performs one contract repair + --- + duration_ms: 0.099042 + type: 'test' + ... + # Subtest: uses original task history when a continuation only supplies a missing field + ok 21 - uses original task history when a continuation only supplies a missing field + --- + duration_ms: 0.1385 + type: 'test' + ... + # Subtest: preserves product/customer source-region context without semantic validation + ok 22 - preserves product/customer source-region context without semantic validation + --- + duration_ms: 0.083 + type: 'test' + ... + # Subtest: accepts missing source-region metadata without blocking + ok 23 - accepts missing source-region metadata without blocking + --- + duration_ms: 0.072334 + type: 'test' + ... + # Subtest: keeps shared-child guidance at user-visible business fields + ok 24 - keeps shared-child guidance at user-visible business fields + --- + duration_ms: 0.169584 + type: 'test' + ... + # Subtest: keeps the versioned router in the profile and the per-task message minimal + ok 25 - keeps the versioned router in the profile and the per-task message minimal + --- + duration_ms: 0.157541 + type: 'test' + ... + # Subtest: keeps shared-child batch creation Program-only and outside the external Agent router + ok 26 - keeps shared-child batch creation Program-only and outside the external Agent router + --- + duration_ms: 0.244292 + type: 'test' + ... + # Subtest: pins the optional other/filing fields in the per-task guidance + ok 27 - pins the optional other/filing fields in the per-task guidance + --- + duration_ms: 0.081958 + type: 'test' + ... + # Subtest: accepts a shared-child operation with only the visible parent reference + ok 28 - accepts a shared-child operation with only the visible parent reference + --- + duration_ms: 0.09425 + type: 'test' + ... + # Subtest: rejects internal parent identifiers in Agent output + ok 29 - rejects internal parent identifiers in Agent output + --- + duration_ms: 0.088625 + type: 'test' + ... + # Subtest: accepts multi-date shared-plan child facts without execution metadata + ok 30 - accepts multi-date shared-plan child facts without execution metadata + --- + duration_ms: 0.130958 + type: 'test' + ... + # Subtest: normalizes legacy flat shared-plan child fields into split_order + ok 31 - normalizes legacy flat shared-plan child fields into split_order + --- + duration_ms: 0.128375 + type: 'test' + ... + # Subtest: accepts parser-state lifecycle facts without requiring execution-state fields + ok 32 - accepts parser-state lifecycle facts without requiring execution-state fields + --- + duration_ms: 0.078 + type: 'test' + ... + # Subtest: treats ERP passenger rows as an initial baseline while retaining a 5000-row technical bound + ok 33 - treats ERP passenger rows as an initial baseline while retaining a 5000-row technical bound + --- + duration_ms: 0.862333 + type: 'test' + ... + # Subtest: accepts hotel arrangement input without a room type and leaves that field for ERP resolution + ok 34 - accepts hotel arrangement input without a room type and leaves that field for ERP resolution + --- + duration_ms: 0.533625 + type: 'test' + ... + # Subtest: accepts customer/date business lookup while keeping visible identifiers optional + ok 35 - accepts customer/date business lookup while keeping visible identifiers optional + --- + duration_ms: 2.36225 + type: 'test' + ... + # Subtest: accepts only visitor-list for a shared mother-plan export scope + ok 36 - accepts only visitor-list for a shared mother-plan export scope + --- + duration_ms: 0.910625 + type: 'test' + ... + # Subtest: allows a no-customer shared mother-plan capacity update when the departure date is present + ok 37 - allows a no-customer shared mother-plan capacity update when the departure date is present + --- + duration_ms: 1.947041 + type: 'test' + ... + # Subtest: preserves a complete independent passenger and room distribution as multiple update actions + ok 38 - preserves a complete independent passenger and room distribution as multiple update actions + --- + duration_ms: 0.588916 + type: 'test' + ... + # Subtest: passes Agent and plugin front-gate validation for every supported directive route + ok 39 - passes Agent and plugin front-gate validation for every supported directive route + --- + duration_ms: 2.249083 + type: 'test' + ... + # Subtest: blocks a generic Profile response instead of inventing an operation + ok 40 - blocks a generic Profile response instead of inventing an operation + --- + duration_ms: 0.092583 + type: 'test' + ... + # Subtest: turns a stale other/filing item question into a contract repair instead of asking the user + ok 41 - turns a stale other/filing item question into a contract repair instead of asking the user + --- + duration_ms: 0.093083 + type: 'test' + ... + # Subtest: derives a NEED_INPUT reply from validated question prompts when the Agent omitted the top-level reply + ok 42 - derives a NEED_INPUT reply from validated question prompts when the Agent omitted the top-level reply + --- + duration_ms: 0.115417 + type: 'test' + ... + # Subtest: still blocks NEED_INPUT when only internal missing fields exist without a displayable question + ok 43 - still blocks NEED_INPUT when only internal missing fields exist without a displayable question + --- + duration_ms: 0.084583 + type: 'test' + ... + 1..43 +ok 33 - SSE and result helpers + --- + duration_ms: 19.188542 + type: 'suite' + ... +# Subtest: business-system HTTP boundary + # Subtest: returns the real AI connectivity probe from /api/status + not ok 1 - returns the real AI connectivity probe from /api/status + --- + duration_ms: 11.730666 + type: 'test' + location: '/private/var/folders/8j/8xy_jbfj44n3_25rf409sklw0000gn/T/lwlt-hotel-remark-check-kto8y_b5/LianSyn-platform/external-agent-client.test.mjs:1934:3' + failureType: 'uncaughtException' + error: 'listen EPERM: operation not permitted 127.0.0.1' + code: 'EPERM' + stack: |- + Server.setupListenHandle [as _listen2] (node:net:1918:21) + listenInCluster (node:net:1997:12) + node:net:2206:7 + process.processTicksAndRejections (node:internal/process/task_queues:89:21) + ... + # Subtest: exposes /api/parse and no longer exposes /api/agent routes + not ok 2 - exposes /api/parse and no longer exposes /api/agent routes + --- + duration_ms: 2.061084 + type: 'test' + location: '/private/var/folders/8j/8xy_jbfj44n3_25rf409sklw0000gn/T/lwlt-hotel-remark-check-kto8y_b5/LianSyn-platform/external-agent-client.test.mjs:1966:3' + failureType: 'uncaughtException' + error: 'listen EPERM: operation not permitted 127.0.0.1' + code: 'EPERM' + stack: |- + Server.setupListenHandle [as _listen2] (node:net:1918:21) + listenInCluster (node:net:1997:12) + node:net:2206:7 + process.processTicksAndRejections (node:internal/process/task_queues:89:21) + ... + 1..2 +not ok 34 - business-system HTTP boundary + --- + duration_ms: 13.875583 + type: 'suite' + location: '/private/var/folders/8j/8xy_jbfj44n3_25rf409sklw0000gn/T/lwlt-hotel-remark-check-kto8y_b5/LianSyn-platform/external-agent-client.test.mjs:1933:1' + failureType: 'subtestsFailed' + error: '2 subtests failed' + code: 'ERR_TEST_FAILURE' + ... +# Subtest: vehicle create recovers from a delayed linkage sample but never saves while sampling stays delayed +ok 35 - vehicle create recovers from a delayed linkage sample but never saves while sampling stays delayed + --- + duration_ms: 303.396083 + type: 'test' + ... +# Subtest: vehicle create preserves old rows and binds native selection, dates and quantity to empty rows 0/1/10 +ok 36 - vehicle create preserves old rows and binds native selection, dates and quantity to empty rows 0/1/10 + --- + duration_ms: 437.450167 + type: 'test' + ... +# Subtest: vehicle requery follows the new record id after sorting, including stored reconciliation evidence +ok 37 - vehicle requery follows the new record id after sorting, including stored reconciliation evidence + --- + duration_ms: 94.001333 + type: 'test' + ... +# Subtest: vehicle rejects no free row, drafts, financial state, missing controls and forced targets before POST +ok 38 - vehicle rejects no free row, drafts, financial state, missing controls and forced targets before POST + --- + duration_ms: 30.460208 + type: 'test' + ... +# Subtest: vehicle checks existing rows and new values after native linkage and again after validation +ok 39 - vehicle checks existing rows and new values after native linkage and again after validation + --- + duration_ms: 439.492333 + type: 'test' + ... +# Subtest: vehicle cannot claim completion if ERP changes an old row, misses or duplicates the new row +ok 40 - vehicle cannot claim completion if ERP changes an old row, misses or duplicates the new row + --- + duration_ms: 258.111875 + type: 'test' + ... +# Subtest: transport create recovers from a delayed linkage sample but never saves while sampling stays delayed +ok 41 - transport create recovers from a delayed linkage sample but never saves while sampling stays delayed + --- + duration_ms: 33.452667 + type: 'test' + ... +# Subtest: transport create preserves old rows and binds native selection, dates and quantity to empty rows 0/1/10 +ok 42 - transport create preserves old rows and binds native selection, dates and quantity to empty rows 0/1/10 + --- + duration_ms: 526.476375 + type: 'test' + ... +# Subtest: transport requery follows the new record id after sorting, including stored reconciliation evidence +ok 43 - transport requery follows the new record id after sorting, including stored reconciliation evidence + --- + duration_ms: 47.026417 + type: 'test' + ... +# Subtest: transport rejects no free row, drafts, financial state, missing controls and forced targets before POST +ok 44 - transport rejects no free row, drafts, financial state, missing controls and forced targets before POST + --- + duration_ms: 170.098334 + type: 'test' + ... +# Subtest: transport checks existing rows and new values after native linkage and again after validation +ok 45 - transport checks existing rows and new values after native linkage and again after validation + --- + duration_ms: 210.190292 + type: 'test' + ... +# Subtest: transport cannot claim completion if ERP changes an old row, misses or duplicates the new row +ok 46 - transport cannot claim completion if ERP changes an old row, misses or duplicates the new row + --- + duration_ms: 55.521042 + type: 'test' + ... +# Subtest: other create recovers from a delayed linkage sample but never saves while sampling stays delayed +ok 47 - other create recovers from a delayed linkage sample but never saves while sampling stays delayed + --- + duration_ms: 57.835792 + type: 'test' + ... +# Subtest: other create preserves old rows and binds native selection, dates and quantity to empty rows 0/1/10 +ok 48 - other create preserves old rows and binds native selection, dates and quantity to empty rows 0/1/10 + --- + duration_ms: 341.014417 + type: 'test' + ... +# Subtest: other requery follows the new record id after sorting, including stored reconciliation evidence +ok 49 - other requery follows the new record id after sorting, including stored reconciliation evidence + --- + duration_ms: 58.231834 + type: 'test' + ... +# Subtest: other rejects no free row, drafts, financial state, missing controls and forced targets before POST +ok 50 - other rejects no free row, drafts, financial state, missing controls and forced targets before POST + --- + duration_ms: 135.5475 + type: 'test' + ... +# Subtest: other checks existing rows and new values after native linkage and again after validation +ok 51 - other checks existing rows and new values after native linkage and again after validation + --- + duration_ms: 338.914875 + type: 'test' + ... +# Subtest: other cannot claim completion if ERP changes an old row, misses or duplicates the new row +ok 52 - other cannot claim completion if ERP changes an old row, misses or duplicates the new row + --- + duration_ms: 111.721125 + type: 'test' + ... +# Subtest: transport creates in a departure-default row and preserves existing rows, spare rows and filing +ok 53 - transport creates in a departure-default row and preserves existing rows, spare rows and filing + --- + duration_ms: 1372.179 + type: 'test' + ... +# Subtest: transport rejects drafts and unverified dates even with other default-date rows available +ok 54 - transport rejects drafts and unverified dates even with other default-date rows available + --- + duration_ms: 425.272 + type: 'test' + ... +# Subtest: transport guards other default dates through native selection, validation and preflight changes +ok 55 - transport guards other default dates through native selection, validation and preflight changes + --- + duration_ms: 83.163458 + type: 'test' + ... +# Subtest: other creates in a departure-default row and preserves existing rows, spare rows and filing +ok 56 - other creates in a departure-default row and preserves existing rows, spare rows and filing + --- + duration_ms: 1025.139167 + type: 'test' + ... +# Subtest: other rejects drafts and unverified dates even with other default-date rows available +ok 57 - other rejects drafts and unverified dates even with other default-date rows available + --- + duration_ms: 207.524042 + type: 'test' + ... +# Subtest: other guards other default dates through native selection, validation and preflight changes +ok 58 - other guards other default dates through native selection, validation and preflight changes + --- + duration_ms: 30.735959 + type: 'test' + ... +# Subtest: vehicle still rejects an unsaved date equal to departure +ok 59 - vehicle still rejects an unsaved date equal to departure + --- + duration_ms: 2.684042 + type: 'test' + ... +# Subtest: other create keeps omitted quantity and shared filing, and verifies them after sorted requery +ok 60 - other create keeps omitted quantity and shared filing, and verifies them after sorted requery + --- + duration_ms: 17.762916 + type: 'test' + ... +# Subtest: other preserves omitted zero quantity in a default-date row +ok 61 - other preserves omitted zero quantity in a default-date row + --- + duration_ms: 15.912417 + type: 'test' + ... +# Subtest: other create may fill blank filing fields, blocks conflicting filing and preserves realized state +ok 62 - other create may fill blank filing fields, blocks conflicting filing and preserves realized state + --- + duration_ms: 98.47 + type: 'test' + ... +# Subtest: other native callbacks cannot alter omitted shared filing or the realized flag +ok 63 - other native callbacks cannot alter omitted shared filing or the realized flag + --- + duration_ms: 103.505958 + type: 'test' + ... +# Subtest: guide remains single-person: an occupied guide gives the change-command message without selecting or saving +ok 64 - guide remains single-person: an occupied guide gives the change-command message without selecting or saving + --- + duration_ms: 1.316833 + type: 'test' + ... +# Subtest: guide empty-slot guard still accepts the native single-row form +ok 65 - guide empty-slot guard still accepts the native single-row form + --- + duration_ms: 2.866333 + type: 'test' + ... +# Subtest: background preserves both create evidence types and maps the guide business error +ok 66 - background preserves both create evidence types and maps the guide business error + --- + duration_ms: 3.536125 + type: 'test' + ... +# Subtest: ordinary linkage requires multiple observations over 1.5 seconds and redacts values +ok 67 - ordinary linkage requires multiple observations over 1.5 seconds and redacts values + --- + duration_ms: 4.283041 + type: 'test' + ... +# Subtest: one delayed callback restarts observation instead of failing or counting the blind interval +ok 68 - one delayed callback restarts observation instead of failing or counting the blind interval + --- + duration_ms: 0.631292 + type: 'test' + ... +# Subtest: one-second sampling still proves stability; persistent long gaps fail boundedly +ok 69 - one-second sampling still proves stability; persistent long gaps fail boundedly + --- + duration_ms: 0.833708 + type: 'test' + ... +# Subtest: continuous value changes fail and report field names rather than their values +ok 70 - continuous value changes fail and report field names rather than their values + --- + duration_ms: 1.549625 + type: 'test' + ... +# Subtest: the last allowed sample is checked; a late change restarts stability +ok 71 - the last allowed sample is checked; a late change restarts stability + --- + duration_ms: 1.104334 + type: 'test' + ... +# Subtest: detached form, missing/replaced controls and pending native Ajax cannot pass +ok 72 - detached form, missing/replaced controls and pending native Ajax cannot pass + --- + duration_ms: 5.5975 + type: 'test' + ... +# Subtest: background reports the observed failure reason without classifying all failures as changing fields +ok 73 - background reports the observed failure reason without classifying all failures as changing fields + --- + duration_ms: 0.561 + type: 'test' + ... +# Subtest: dated updates report missing MAIN-world dependency without changing native fields; guide stays independent +ok 74 - dated updates report missing MAIN-world dependency without changing native fields; guide stays independent + --- + duration_ms: 86.066917 + type: 'test' + ... +# Subtest: guide update resolves the original record and preserves dates and unspecified fields +ok 75 - guide update resolves the original record and preserves dates and unspecified fields + --- + duration_ms: 138.767458 + type: 'test' + ... +# Subtest: vehicle update resolves the original record and preserves dates and unspecified fields +ok 76 - vehicle update resolves the original record and preserves dates and unspecified fields + --- + duration_ms: 64.637167 + type: 'test' + ... +# Subtest: transport update resolves the original record and preserves dates and unspecified fields +ok 77 - transport update resolves the original record and preserves dates and unspecified fields + --- + duration_ms: 24.959125 + type: 'test' + ... +# Subtest: other update resolves the original record and preserves dates and unspecified fields +ok 78 - other update resolves the original record and preserves dates and unspecified fields + --- + duration_ms: 187.557459 + type: 'test' + ... +# Subtest: missing or ambiguous original records never trigger a native selection +ok 79 - missing or ambiguous original records never trigger a native selection + --- + duration_ms: 30.675375 + type: 'test' + ... +# Subtest: old row identity, audit, payment and realized flags stop the update before mutation +ok 80 - old row identity, audit, payment and realized flags stop the update before mutation + --- + duration_ms: 93.465583 + type: 'test' + ... +# Subtest: other update merges filing changes, preserves filing date and omitted zero quantity +ok 81 - other update merges filing changes, preserves filing date and omitted zero quantity + --- + duration_ms: 23.04925 + type: 'test' + ... +# Subtest: date changes are rejected and native callbacks cannot change dates, IDs or other rows +ok 82 - date changes are rejected and native callbacks cannot change dates, IDs or other rows + --- + duration_ms: 290.018125 + type: 'test' + ... +# Subtest: vehicle create AND-filters type and supplier, preserves native description and original dates +ok 83 - vehicle create AND-filters type and supplier, preserves native description and original dates + --- + duration_ms: 7.429875 + type: 'test' + ... +# Subtest: vehicle update AND-filters type and supplier, preserves native description and original dates +ok 84 - vehicle update AND-filters type and supplier, preserves native description and original dates + --- + duration_ms: 4.057042 + type: 'test' + ... +# Subtest: vehicle filter never drops an unmatched type, picks an ambiguous row, or selects a different supplier +ok 85 - vehicle filter never drops an unmatched type, picks an ambiguous row, or selects a different supplier + --- + duration_ms: 220.749041 + type: 'test' + ... +# Subtest: changed vehicle candidates or type cannot reach form mutation after resolution +ok 86 - changed vehicle candidates or type cannot reach form mutation after resolution + --- + duration_ms: 46.383125 + type: 'test' + ... +# Subtest: vehicle filter is nonempty, vehicle-only and outside date selectors or direct changes in every contract +ok 87 - vehicle filter is nonempty, vehicle-only and outside date selectors or direct changes in every contract + --- + duration_ms: 40.716625 + type: 'test' + ... +# Subtest: transport create selects the unique supplier+ticket row through native linkage +ok 88 - transport create selects the unique supplier+ticket row through native linkage + --- + duration_ms: 10.85975 + type: 'test' + ... +# Subtest: transport update selects the unique supplier+ticket row through native linkage +ok 89 - transport update selects the unique supplier+ticket row through native linkage + --- + duration_ms: 5.407667 + type: 'test' + ... +# Subtest: explicit ticket filter never drops a keyword or defaults to the first ambiguous result +ok 90 - explicit ticket filter never drops a keyword or defaults to the first ambiguous result + --- + duration_ms: 22.723833 + type: 'test' + ... +# Subtest: transport create distinguishes route and train before an adjacent timetable +ok 91 - transport create distinguishes route and train before an adjacent timetable + --- + duration_ms: 180.239708 + type: 'test' + ... +# Subtest: transport update distinguishes route and train before an adjacent timetable +ok 92 - transport update distinguishes route and train before an adjacent timetable + --- + duration_ms: 85.413042 + type: 'test' + ... +# Subtest: description normalization preserves original numeric boundaries and existing formatting compatibility +ok 93 - description normalization preserves original numeric boundaries and existing formatting compatibility + --- + duration_ms: 1.78025 + type: 'test' + ... +# Subtest: route-only or train-only filters block with only the matching supplier candidates and no mutation +ok 94 - route-only or train-only filters block with only the matching supplier candidates and no mutation + --- + duration_ms: 50.274667 + type: 'test' + ... +# Subtest: ambiguous timetable candidates stay bounded and cannot default to an identical first row +ok 95 - ambiguous timetable candidates stay bounded and cannot default to an identical first row + --- + duration_ms: 3.795041 + type: 'test' + ... +# Subtest: transport route failures explain zero matches, unavailable data and bounded ambiguous candidates +ok 96 - transport route failures explain zero matches, unavailable data and bounded ambiguous candidates + --- + duration_ms: 30.901375 + type: 'test' + ... +# Subtest: changed ticket description or candidates block before any native call or mutation +ok 97 - changed ticket description or candidates block before any native call or mutation + --- + duration_ms: 116.262792 + type: 'test' + ... +# Subtest: ticket filter is nonempty, transport-only, and never a date selector or direct item update +ok 98 - ticket filter is nonempty, transport-only, and never a date selector or direct item update + --- + duration_ms: 19.095875 + type: 'test' + ... +# Subtest: native transport selection rechecks a filter even after preflight and never falls back to a different ID +ok 99 - native transport selection rechecks a filter even after preflight and never falls back to a different ID + --- + duration_ms: 66.5355 + type: 'test' + ... +# Subtest: vehicle month/day dates pass parsed contracts and resolve to a full-year execution snapshot +ok 100 - vehicle month/day dates pass parsed contracts and resolve to a full-year execution snapshot + --- + duration_ms: 8.7065 + type: 'test' + ... +# Subtest: transport month/day dates pass parsed contracts and resolve to a full-year execution snapshot +ok 101 - transport month/day dates pass parsed contracts and resolve to a full-year execution snapshot + --- + duration_ms: 5.205084 + type: 'test' + ... +# Subtest: other month/day dates pass parsed contracts and resolve to a full-year execution snapshot +ok 102 - other month/day dates pass parsed contracts and resolve to a full-year execution snapshot + --- + duration_ms: 14.15275 + type: 'test' + ... +# Subtest: parsed date-selector validators agree on invalid calendars while execution still requires a full year +ok 103 - parsed date-selector validators agree on invalid calendars while execution still requires a full year + --- + duration_ms: 55.765167 + type: 'test' + ... +# Subtest: ambiguous original dates are surfaced in the route failure message without native ids +ok 104 - ambiguous original dates are surfaced in the route failure message without native ids + --- + duration_ms: 5.031541 + type: 'test' + ... +# Subtest: fresh replay output creates missing parents and refuses to overwrite a run +ok 105 - fresh replay output creates missing parents and refuses to overwrite a run + --- + duration_ms: 10.157959 + type: 'test' + ... +# Subtest: template generates the four creation routes and all contracts agree +ok 106 - template generates the four creation routes and all contracts agree + --- + duration_ms: 1303.843292 + type: 'test' + ... +# Subtest: dedicated third-run shared batch probe carries customer and 15+1 facts through all three contracts +ok 107 - dedicated third-run shared batch probe carries customer and 15+1 facts through all three contracts + --- + duration_ms: 412.446959 + type: 'test' + ... +# Subtest: resolved state generates passenger, supported narrow updates, arrangement and source phases +ok 108 - resolved state generates passenger, supported narrow updates, arrangement and source phases + --- + duration_ms: 471.469333 + type: 'test' + ... +# Subtest: clear, transition and delete phases require progressively stronger evidence gates +ok 109 - clear, transition and delete phases require progressively stronger evidence gates + --- + duration_ms: 521.395042 + type: 'test' + ... +# Subtest: dynamic C04 children are deleted before every parent and every parent needs an explicit child-free proof +ok 110 - dynamic C04 children are deleted before every parent and every parent needs an explicit child-free proof + --- + duration_ms: 114.426417 + type: 'test' + ... +# Subtest: state validation rejects wrong owners, non-September targets and premature delete authorization +ok 111 - state validation rejects wrong owners, non-September targets and premature delete authorization + --- + duration_ms: 23.13475 + type: 'test' + ... +# Subtest: schema permits ERP-derived group prefix with an explicit suffix-only order number +ok 112 - schema permits ERP-derived group prefix with an explicit suffix-only order number + --- + duration_ms: 333.31675 + type: 'test' + ... +# Subtest: catalog has exactly 19 ordered operations with adjacent template and example blocks +ok 113 - catalog has exactly 19 ordered operations with adjacent template and example blocks + --- + duration_ms: 2.522083 + type: 'test' + ... +# Subtest: main prompt remains a compact Skill router +ok 114 - main prompt remains a compact Skill router + --- + duration_ms: 0.463375 + type: 'test' + ... +# Subtest: all packaged Skill sources contain only parsing knowledge +ok 115 - all packaged Skill sources contain only parsing knowledge + --- + duration_ms: 0.5595 + type: 'test' + ... +# Subtest: Agent parse Schema accepts business facts and rejects execution metadata +ok 116 - Agent parse Schema accepts business facts and rejects execution metadata + --- + duration_ms: 777.311625 + type: 'test' + ... +# Subtest: template fields are marked and examples contain only concrete values +ok 117 - template fields are marked and examples contain only concrete values + --- + duration_ms: 0.658708 + type: 'test' + ... +# Subtest: user templates never request ERP internal identifiers and use canonical customer label +ok 118 - user templates never request ERP internal identifiers and use canonical customer label + --- + duration_ms: 0.444959 + type: 'test' + ... +# Subtest: all Agent directives are routed to their Skill contract in the same two-block format +ok 119 - all Agent directives are routed to their Skill contract in the same two-block format + --- + duration_ms: 18.041458 + type: 'test' + ... +# Subtest: shared-child batch stays Program-only while remaining copyable from the operator catalog +ok 120 - shared-child batch stays Program-only while remaining copyable from the operator catalog + --- + duration_ms: 0.144875 + type: 'test' + ... +# Subtest: the four detailed business pages use adjacent template and example blocks +ok 121 - the four detailed business pages use adjacent template and example blocks + --- + duration_ms: 1.555708 + type: 'test' + ... +# Subtest: the two desktop-approved examples remain exactly copyable +ok 122 - the two desktop-approved examples remain exactly copyable + --- + duration_ms: 0.380333 + type: 'test' + ... +# Subtest: every operation preserves its explicit minimum-required field set +ok 123 - every operation preserves its explicit minimum-required field set + --- + duration_ms: 0.428084 + type: 'test' + ... +# Subtest: modification input asks only for targets and export stays minimal +ok 124 - modification input asks only for targets and export stays minimal + --- + duration_ms: 1.064083 + type: 'test' + ... +# Subtest: team-file export uses the business name while keeping the internal action stable +ok 125 - team-file export uses the business name while keeping the internal action stable + --- + duration_ms: 1.322125 + type: 'test' + ... +# Subtest: independent-order updates preserve broad parser targets while arrangement changes stay narrow +ok 126 - independent-order updates preserve broad parser targets while arrangement changes stay narrow + --- + duration_ms: 0.66225 + type: 'test' + ... +# Subtest: deferred items 20 to 22 are absent from current user and Skill input contracts +ok 127 - deferred items 20 to 22 are absent from current user and Skill input contracts + --- + duration_ms: 0.317584 + type: 'test' + ... +# Subtest: new business adaptation template enforces the two-block writing convention +ok 128 - new business adaptation template enforces the two-block writing convention + --- + duration_ms: 0.297542 + type: 'test' + ... +# Subtest: ERP account identity comparison accepts only normalized exact equality +ok 129 - ERP account identity comparison accepts only normalized exact equality + --- + duration_ms: 1.283666 + type: 'test' + ... +# Subtest: ERP account identity comparison rejects substrings and blank identities +ok 130 - ERP account identity comparison rejects substrings and blank identities + --- + duration_ms: 0.075 + type: 'test' + ... +# Subtest: ERP session probe reads the unique login label and never matches against whole-page text +ok 131 - ERP session probe reads the unique login label and never matches against whole-page text + --- + duration_ms: 0.676375 + type: 'test' + ... +# Subtest: normal lookup does not wait; business no-match and ambiguous results never retry +ok 132 - normal lookup does not wait; business no-match and ambiguous results never retry + --- + duration_ms: 3.180042 + type: 'test' + ... +# Subtest: removed query frame waits for a stable current document then reinjects and queries once +ok 133 - removed query frame waits for a stable current document then reinjects and queries once + --- + duration_ms: 4.645583 + type: 'test' + ... +# Subtest: frame removal during injection also safely recovers and identifies injection as failed step +ok 134 - frame removal during injection also safely recovers and identifies injection as failed step + --- + duration_ms: 1.913375 + type: 'test' + ... +# Subtest: repeated frame removal stops after two lookups with actual resolution failure stage and no-write evidence +ok 135 - repeated frame removal stops after two lookups with actual resolution failure stage and no-write evidence + --- + duration_ms: 4.496959 + type: 'test' + ... +# Subtest: moving/loading/missing-identity documents cannot pass readiness and the wait is bounded +ok 136 - moving/loading/missing-identity documents cannot pass readiness and the wait is bounded + --- + duration_ms: 9.925833 + type: 'test' + ... +# Subtest: permanent errors, closed tabs, and disallowed navigation do not rerun queries +ok 137 - permanent errors, closed tabs, and disallowed navigation do not rerun queries + --- + duration_ms: 3.919125 + type: 'test' + ... +# Subtest: retry requires the same running execution without a prior write boundary; cancellation propagates +ok 138 - retry requires the same running execution without a prior write boundary; cancellation propagates + --- + duration_ms: 6.922667 + type: 'test' + ... +# Subtest: exceptions before route, during route and during preflight retain the actual failure phase +ok 139 - exceptions before route, during route and during preflight retain the actual failure phase + --- + duration_ms: 2.189333 + type: 'test' + ... +# Subtest: frame removal at live submit is uncertain and never retried +ok 140 - frame removal at live submit is uncertain and never retried + --- + duration_ms: 1.013416 + type: 'test' + ... +# Subtest: production control-plane origin is recognized and bridge injection is permitted +ok 141 - production control-plane origin is recognized and bridge injection is permitted + --- + duration_ms: 34.743375 + type: 'test' + ... +# Subtest: ERP session keepalive is scheduled through alarms with a conservative default +ok 142 - ERP session keepalive is scheduled through alarms with a conservative default + --- + duration_ms: 10.855208 + type: 'test' + ... +# Subtest: ERP keepalive is an existing-tab read-only request and never a page reload or task write +ok 143 - ERP keepalive is an existing-tab read-only request and never a page reload or task write + --- + duration_ms: 4.108833 + type: 'test' + ... +# Subtest: ERP exception recovery refreshes the existing ERP tab once, then performs a read-only probe +ok 144 - ERP exception recovery refreshes the existing ERP tab once, then performs a read-only probe + --- + duration_ms: 5.556208 + type: 'test' + ... +# Subtest: an interrupted service worker recovery cannot leave ERP dispatch permanently blocked +ok 145 - an interrupted service worker recovery cannot leave ERP dispatch permanently blocked + --- + duration_ms: 3.542584 + type: 'test' + ... +# Subtest: keepalive setting and last probe state are visible without changing the business operation contract +ok 146 - keepalive setting and last probe state are visible without changing the business operation contract + --- + duration_ms: 2.60475 + type: 'test' + ... +# Subtest: a new ERP execution is accepted exactly once +ok 147 - a new ERP execution is accepted exactly once + --- + duration_ms: 16.923 + type: 'test' + ... +# Subtest: a different execution id for the same task is blocked +ok 148 - a different execution id for the same task is blocked + --- + duration_ms: 1.323209 + type: 'test' + ... +# Subtest: failures after the write boundary become uncertain +ok 149 - failures after the write boundary become uncertain + --- + duration_ms: 3.189875 + type: 'test' + ... +# Subtest: an explicit network-before-submit block is safe to classify as no ERP write +ok 150 - an explicit network-before-submit block is safe to classify as no ERP write + --- + duration_ms: 10.316417 + type: 'test' + ... +# Subtest: local extension history stays bounded without pruning active or uncertain roots +ok 151 - local extension history stays bounded without pruning active or uncertain roots + --- + duration_ms: 32.310792 + type: 'test' + ... +# Subtest: dispatch and schema accept only create batches with all ordinary per-row fields valid +ok 152 - dispatch and schema accept only create batches with all ordinary per-row fields valid + --- + duration_ms: 640.712959 + type: 'test' + ... +# Subtest: successful rows execute serially without prematurely finalizing the root task +ok 153 - successful rows execute serially without prematurely finalizing the root task + --- + duration_ms: 42.3245 + type: 'test' + ... +# Subtest: prewrite failure stops subsequent rows, retains saved prefix and stays known partial failure +ok 154 - prewrite failure stops subsequent rows, retains saved prefix and stays known partial failure + --- + duration_ms: 3.161708 + type: 'test' + ... +# Subtest: uncertain or missing response stops without retry and preserves both prefix and pending tail +ok 155 - uncertain or missing response stops without retry and preserves both prefix and pending tail + --- + duration_ms: 12.002 + type: 'test' + ... +# Subtest: read-only reconciliation resolves only the uncertain row and never starts the pending tail +ok 156 - read-only reconciliation resolves only the uncertain row and never starts the pending tail + --- + duration_ms: 2.828708 + type: 'test' + ... +# Subtest: timeout preserves an already-saved child and classifies a missing child as uncertain without replay +ok 157 - timeout preserves an already-saved child and classifies a missing child as uncertain without replay + --- + duration_ms: 2.447666 + type: 'test' + ... +# Subtest: production Docker runtime includes the shared batch evidence validator +ok 158 - production Docker runtime includes the shared batch evidence validator + --- + duration_ms: 0.324791 + type: 'test' + ... +# Subtest: a proven prewrite failure on the first row reports zero writes and leaves the rest untouched +ok 159 - a proven prewrite failure on the first row reports zero writes and leaves the rest untouched + --- + duration_ms: 2.15025 + type: 'test' + ... +# Subtest: hotel create binds the first empty row through preflight, native linkage, POST and fresh requery +ok 160 - hotel create binds the first empty row through preflight, native linkage, POST and fresh requery + --- + duration_ms: 385.8625 + type: 'test' + ... +# Subtest: 6/12-room hotel create recovers after delayed sampling, with only one native selection and POST +ok 161 - 6/12-room hotel create recovers after delayed sampling, with only one native selection and POST + --- + duration_ms: 116.465333 + type: 'test' + ... +# Subtest: unstable or persistently delayed hotel linkage records diagnostics and never saves +ok 162 - unstable or persistently delayed hotel linkage records diagnostics and never saves + --- + duration_ms: 55.040583 + type: 'test' + ... +# Subtest: hotel create matches the new record after ERP sorts rows and uses persisted evidence on read-only reconciliation +ok 163 - hotel create matches the new record after ERP sorts rows and uses persisted evidence on read-only reconciliation + --- + duration_ms: 108.536 + type: 'test' + ... +# Subtest: no free row, unsaved drafts, financial state and incomplete rows fail before any POST +ok 164 - no free row, unsaved drafts, financial state and incomplete rows fail before any POST + --- + duration_ms: 183.133375 + type: 'test' + ... +# Subtest: a caller cannot force a create target, and a changed preflight cannot silently choose another row +ok 165 - a caller cannot force a create target, and a changed preflight cannot silently choose another row + --- + duration_ms: 42.134167 + type: 'test' + ... +# Subtest: native callbacks cannot modify other rows, selected record id, or financial state +ok 166 - native callbacks cannot modify other rows, selected record id, or financial state + --- + duration_ms: 316.393167 + type: 'test' + ... +# Subtest: requery cannot report an old row, duplicate new rows, changed existing rows or wrong quantities as success +ok 167 - requery cannot report an old row, duplicate new rows, changed existing rows or wrong quantities as success + --- + duration_ms: 159.710333 + type: 'test' + ... +# Subtest: omitted hotel remarks survive selection/date callbacks, save and read-only requery +ok 168 - omitted hotel remarks survive selection/date callbacks, save and read-only requery + --- + duration_ms: 164.085125 + type: 'test' + ... +# Subtest: explicit hotel remark overrides the native default, while missing native notes remain empty +ok 169 - explicit hotel remark overrides the native default, while missing native notes remain empty + --- + duration_ms: 25.852 + type: 'test' + ... +# Subtest: native remark changes at validation block POST; missing or changed saved evidence cannot report success +ok 170 - native remark changes at validation block POST; missing or changed saved evidence cannot report success + --- + duration_ms: 208.374917 + type: 'test' + ... +# Subtest: batch orchestration preserves each hotel native or explicit remark through actual lifecycle execution +ok 171 - batch orchestration preserves each hotel native or explicit remark through actual lifecycle execution + --- + duration_ms: 163.960334 + type: 'test' + ... +# Subtest: hotel create accepts a complete two-row 76-field form after one stable second +ok 172 - hotel create accepts a complete two-row 76-field form after one stable second + --- + duration_ms: 62.213458 + type: 'test' + ... +# Subtest: hotel create fails closed without a form +ok 173 - hotel create fails closed without a form + --- + duration_ms: 0.805209 + type: 'test' + ... +# Subtest: hotel create accepts complete variable-size forms without a serialized count threshold +ok 174 - hotel create accepts complete variable-size forms without a serialized count threshold + --- + duration_ms: 101.325541 + type: 'test' + ... +# Subtest: hotel create rejects every missing required field even with more than 195 fields +ok 175 - hotel create rejects every missing required field even with more than 195 fields + --- + duration_ms: 945.1135 + type: 'test' + ... +# Subtest: hotel create waits for visible loading to disappear and then stabilize +ok 176 - hotel create waits for visible loading to disappear and then stabilize + --- + duration_ms: 8.207459 + type: 'test' + ... +# Subtest: hotel create requires a full observed stable second, including the final timeout sample +ok 177 - hotel create requires a full observed stable second, including the final timeout sample + --- + duration_ms: 33.343458 + type: 'test' + ... +# Subtest: hotel update/clear and unrelated lifecycle actions retain their current count gates +ok 178 - hotel update/clear and unrelated lifecycle actions retain their current count gates + --- + duration_ms: 28.275166 + type: 'test' + ... +# Subtest: 76-field readiness still leaves occupied slots and payment/audit state blocked +ok 179 - 76-field readiness still leaves occupied slots and payment/audit state blocked + --- + duration_ms: 24.183334 + type: 'test' + ... +# Subtest: full hotel preflight preserves identity, resource and ownership gates after structural readiness +ok 180 - full hotel preflight preserves identity, resource and ownership gates after structural readiness + --- + duration_ms: 145.854208 + type: 'test' + ... +# Subtest: hotel create rejects missing controls in later rows even on a large form +ok 181 - hotel create rejects missing controls in later rows even on a large form + --- + duration_ms: 519.647208 + type: 'test' + ... +# Subtest: hotel create rejects invalid row markers, omitted rows and gaps +ok 182 - hotel create rejects invalid row markers, omitted rows and gaps + --- + duration_ms: 193.859583 + type: 'test' + ... +# Subtest: hotel create rejects disabled, duplicate and id-only required data controls +ok 183 - hotel create rejects disabled, duplicate and id-only required data controls + --- + duration_ms: 101.23175 + type: 'test' + ... +# Subtest: hotel create rejects detached or replaced forms and unfinished documents +ok 184 - hotel create rejects detached or replaced forms and unfinished documents + --- + duration_ms: 32.107333 + type: 'test' + ... +# Subtest: same-count control replacement and select-option changes restart stability +ok 185 - same-count control replacement and select-option changes restart stability + --- + duration_ms: 233.723 + type: 'test' + ... +# Subtest: native pending ajax blocks hotel readiness even without a visible overlay +ok 186 - native pending ajax blocks hotel readiness even without a visible overlay + --- + duration_ms: 11.404416 + type: 'test' + ... +# Subtest: hotel replacement resolves a dated existing row and uses native linked selection on that row only +ok 187 - hotel replacement resolves a dated existing row and uses native linked selection on that row only + --- + duration_ms: 202.207042 + type: 'test' + ... +# Subtest: fresh ERP MAIN world resolves the reported 2027 hotel update using the actual injection list +ok 188 - fresh ERP MAIN world resolves the reported 2027 hotel update using the actual injection list + --- + duration_ms: 15.101541 + type: 'test' + ... +# Subtest: hotel replacement preserves the existing note unless the user supplies a new one +ok 189 - hotel replacement preserves the existing note unless the user supplies a new one + --- + duration_ms: 14.368833 + type: 'test' + ... +# Subtest: missing page date dependency is diagnosed before matching and never reported as zero ERP records +ok 190 - missing page date dependency is diagnosed before matching and never reported as zero ERP records + --- + duration_ms: 2.435583 + type: 'test' + ... +# Subtest: hotel replacement stops on ambiguous or missing dated rows before selecting a hotel +ok 191 - hotel replacement stops on ambiguous or missing dated rows before selecting a hotel + --- + duration_ms: 132.775708 + type: 'test' + ... +# Subtest: hotel replacement blocks stale row identity, payment, audit and confirmed status +ok 192 - hotel replacement blocks stale row identity, payment, audit and confirmed status + --- + duration_ms: 48.721959 + type: 'test' + ... +# Subtest: hotel replacement rejects native callbacks that change another row or change the record id +ok 193 - hotel replacement rejects native callbacks that change another row or change the record id + --- + duration_ms: 37.139042 + type: 'test' + ... +# Subtest: month/day hotel selector freezes the unique actual ERP year and preserves native dates on replacement +ok 194 - month/day hotel selector freezes the unique actual ERP year and preserves native dates on replacement + --- + duration_ms: 18.530958 + type: 'test' + ... +# Subtest: cross-year duplicate month/day rows remain ambiguous and report original dates before any mutation +ok 195 - cross-year duplicate month/day rows remain ambiguous and report original dates before any mutation + --- + duration_ms: 16.931292 + type: 'test' + ... +# Subtest: mixed TWN/DBL updates serialize both fields, preserve other rooms and verify a fresh GET +ok 196 - mixed TWN/DBL updates serialize both fields, preserve other rooms and verify a fresh GET + --- + duration_ms: 201.024417 + type: 'test' + ... +# Subtest: DBL zero is an explicit reset and identical room targets never resubmit +ok 197 - DBL zero is an explicit reset and identical room targets never resubmit + --- + duration_ms: 14.761416 + type: 'test' + ... +# Subtest: a successful POST cannot hide a missing or stale DBL value or total in fresh ERP data +ok 198 - a successful POST cannot hide a missing or stale DBL value or total in fresh ERP data + --- + duration_ms: 21.459166 + type: 'test' + ... +# Subtest: missing controls, invalid existing rooms and incorrect native totals stop before saving +ok 199 - missing controls, invalid existing rooms and incorrect native totals stop before saving + --- + duration_ms: 10.987042 + type: 'test' + ... +# Subtest: invalid DBL targets and unimplemented fields block the whole mixed operation +ok 200 - invalid DBL targets and unimplemented fields block the whole mixed operation + --- + duration_ms: 127.306541 + type: 'test' + ... +# Subtest: read-only reconciliation verifies the requested DBL field and never posts +ok 201 - read-only reconciliation verifies the requested DBL field and never posts + --- + duration_ms: 6.630875 + type: 'test' + ... +# Subtest: fixture uses the exact ERP TSV headers and 16 synthetic rows +ok 202 - fixture uses the exact ERP TSV headers and 16 synthetic rows + --- + duration_ms: 149.618375 + type: 'test' + ... +# Subtest: extension execution guard exposes the two queue maintenance deadlines +ok 203 - extension execution guard exposes the two queue maintenance deadlines + --- + duration_ms: 0.247375 + type: 'test' + ... +# Subtest: shared-child adapter waits for the async parent row and cross-checks the exact tid +ok 204 - shared-child adapter waits for the async parent row and cross-checks the exact tid + --- + duration_ms: 11.593958 + type: 'test' + ... +# Subtest: team-order customer restore accepts exact final values and rejects any protected-field drift +ok 205 - team-order customer restore accepts exact final values and rejects any protected-field drift + --- + duration_ms: 29.093333 + type: 'test' + ... +# Subtest: team-order protected-field drift matches the 0.5.156 core-field scope +ok 206 - team-order protected-field drift matches the 0.5.156 core-field scope + --- + duration_ms: 12.593875 + type: 'test' + ... +# Subtest: team-order live prewrite blocker exposes only changed protected field names +ok 207 - team-order live prewrite blocker exposes only changed protected field names + --- + duration_ms: 202.944083 + type: 'test' + ... +# Subtest: team-order live gate allows numbered receivable drift like 0.5.156 +ok 208 - team-order live gate allows numbered receivable drift like 0.5.156 + --- + duration_ms: 6.372209 + type: 'test' + ... +# Subtest: split-parent entry waits adaptively for the current iframe add button before clicking +ok 209 - split-parent entry waits adaptively for the current iframe add button before clicking + --- + duration_ms: 3.710167 + type: 'test' + ... +# Subtest: split-parent post-write verification retries read-only and falls back after any missed response group +ok 210 - split-parent post-write verification retries read-only and falls back after any missed response group + --- + duration_ms: 2.491292 + type: 'test' + ... +# Subtest: identifier-only native list searches receive a calendar-safe plus/minus one-year window +ok 211 - identifier-only native list searches receive a calendar-safe plus/minus one-year window + --- + duration_ms: 7.411041 + type: 'test' + ... +# Subtest: shared-child batch resolver expands the inclusive range and hard-matches concrete parent entry rows by product +ok 212 - shared-child batch resolver expands the inclusive range and hard-matches concrete parent entry rows by product + --- + duration_ms: 10.092625 + type: 'test' + ... +# Subtest: business lookup uses customer/date as the native primary lookup and keeps optional facts supplemental +ok 213 - business lookup uses customer/date as the native primary lookup and keeps optional facts supplemental + --- + duration_ms: 5.305667 + type: 'test' + ... +# Subtest: restore lookup explicitly visits the canceled native status tab +ok 214 - restore lookup explicitly visits the canceled native status tab + --- + duration_ms: 4.243125 + type: 'test' + ... +# Subtest: resolved cancellation uses verified list routes and derives one exact current status +ok 215 - resolved cancellation uses verified list routes and derives one exact current status + --- + duration_ms: 4.345334 + type: 'test' + ... +# Subtest: exact lifecycle edit identity accepts authoritative form refs and query-key variants +ok 216 - exact lifecycle edit identity accepts authoritative form refs and query-key variants + --- + duration_ms: 4.218458 + type: 'test' + ... +# Subtest: route preparation binds one opaque token only to the exact selected lifecycle document +ok 217 - route preparation binds one opaque token only to the exact selected lifecycle document + --- + duration_ms: 3.744 + type: 'test' + ... +# Subtest: shared-child leader uses the ERP transfer SelectBox, not the mother-plan filter +ok 218 - shared-child leader uses the ERP transfer SelectBox, not the mother-plan filter + --- + duration_ms: 4.924459 + type: 'test' + ... +# Subtest: team arrangement list search accepts the native PrintGridLists request +ok 219 - team arrangement list search accepts the native PrintGridLists request + --- + duration_ms: 8.074 + type: 'test' + ... +# Subtest: guide arrangement waits for async guide linkage and coordinator lookup hydration +ok 220 - guide arrangement waits for async guide linkage and coordinator lookup hydration + --- + duration_ms: 40.227375 + type: 'test' + ... +# Subtest: guide arrangement derives daoguan from the selected guide candidate, not the current operator +ok 221 - guide arrangement derives daoguan from the selected guide candidate, not the current operator + --- + duration_ms: 263.292084 + type: 'test' + ... +# Subtest: guide arrangement blocks when the selected guide has no linked daoguan +ok 222 - guide arrangement blocks when the selected guide has no linked daoguan + --- + duration_ms: 3.758583 + type: 'test' + ... +# Subtest: shared-child passenger lookup keeps a visible customer result when ERP nests child rows +ok 223 - shared-child passenger lookup keeps a visible customer result when ERP nests child rows + --- + duration_ms: 30.422333 + type: 'test' + ... +# Subtest: independent lookup keeps ERP rows whose update action is attached to the row +ok 224 - independent lookup keeps ERP rows whose update action is attached to the row + --- + duration_ms: 31.80375 + type: 'test' + ... +# Subtest: customer lifecycle lookup matches non-contiguous Chinese keyword tokens +ok 225 - customer lifecycle lookup matches non-contiguous Chinese keyword tokens + --- + duration_ms: 73.235875 + type: 'test' + ... +# Subtest: shared-child passenger lookup does not attach a parent customer to every nested child +ok 226 - shared-child passenger lookup does not attach a parent customer to every nested child + --- + duration_ms: 6.901209 + type: 'test' + ... +# Subtest: optional lookup facts narrow visible candidates without hard-filtering sparse rows +ok 227 - optional lookup facts narrow visible candidates without hard-filtering sparse rows + --- + duration_ms: 48.834875 + type: 'test' + ... +# Subtest: extension reload reconnects the current platform port and missing ERP identifiers return an actionable error +ok 228 - extension reload reconnects the current platform port and missing ERP identifiers return an actionable error + --- + duration_ms: 1.799208 + type: 'test' + ... +# Subtest: passenger lifecycle prepares the exact native import route before adapter preflight +ok 229 - passenger lifecycle prepares the exact native import route before adapter preflight + --- + duration_ms: 7.44775 + type: 'test' + ... +# Subtest: passenger rows normalize to canonical TSV and treat current ERP rows as an initial baseline, not an import limit +ok 230 - passenger rows normalize to canonical TSV and treat current ERP rows as an initial baseline, not an import limit + --- + duration_ms: 5.074375 + type: 'test' + ... +# Subtest: passenger merge fills explicit blank rows, preserves others, and protects occupied rows +ok 231 - passenger merge fills explicit blank rows, preserves others, and protects occupied rows + --- + duration_ms: 9.871708 + type: 'test' + ... +# Subtest: passenger adapter mirrors only native persisted fields and reports implicit passport semantics +ok 232 - passenger adapter mirrors only native persisted fields and reports implicit passport semantics + --- + duration_ms: 9.003958 + type: 'test' + ... +# Subtest: passenger explicit server success is terminal without a post-save row requery +ok 233 - passenger explicit server success is terminal without a post-save row requery + --- + duration_ms: 3.303166 + type: 'test' + ... +# Subtest: uncertain lifecycle writes can only converge through a read-only plugin requery +ok 234 - uncertain lifecycle writes can only converge through a read-only plugin requery + --- + duration_ms: 3.7855 + type: 'test' + ... +# Subtest: ERP business-rule rejections return the native message and stay out of reconciliation +ok 235 - ERP business-rule rejections return the native message and stay out of reconciliation + --- + duration_ms: 3.337334 + type: 'test' + ... +# Subtest: childless shared plans receive a precise hotel-arrangement ERP blocker +ok 236 - childless shared plans receive a precise hotel-arrangement ERP blocker + --- + duration_ms: 4.706333 + type: 'test' + ... +# Subtest: passenger native row capacity failures receive a precise business-facing ERP limit message +ok 237 - passenger native row capacity failures receive a precise business-facing ERP limit message + --- + duration_ms: 4.509125 + type: 'test' + ... +# Subtest: lifecycle execution keeps the MV3 worker alive until the durable task settles +ok 238 - lifecycle execution keeps the MV3 worker alive until the durable task settles + --- + duration_ms: 1.933875 + type: 'test' + ... +# Subtest: extension 0.5.191 keeps reload dormant unless its durable execution state is fully idle +ok 239 - extension 0.5.191 keeps reload dormant unless its durable execution state is fully idle + --- + duration_ms: 2.595291 + type: 'test' + ... +# Subtest: ERP browser injection is host-permission gated and fail-closed with diagnostics +ok 240 - ERP browser injection is host-permission gated and fail-closed with diagnostics + --- + duration_ms: 134.654541 + type: 'test' + ... +# Subtest: five arrangement actions require exact hidden-id references and action-specific fields +ok 241 - five arrangement actions require exact hidden-id references and action-specific fields + --- + duration_ms: 42.1265 + type: 'test' + ... +# Subtest: arrangement browser safety uses real form completeness and exact business-page candidate tuples +ok 242 - arrangement browser safety uses real form completeness and exact business-page candidate tuples + --- + duration_ms: 23.234792 + type: 'test' + ... +# Subtest: arrangement clear reuses the five native actions but requires an exact current-run row target +ok 243 - arrangement clear reuses the five native actions but requires an exact current-run row target + --- + duration_ms: 36.185166 + type: 'test' + ... +# Subtest: update actions expose validated writes and preserve unvalidated fields for manual review +ok 244 - update actions expose validated writes and preserve unvalidated fields for manual review + --- + duration_ms: 23.97775 + type: 'test' + ... +# Subtest: update adapters stop target-equals-current operations before native submit +ok 245 - update adapters stop target-equals-current operations before native submit + --- + duration_ms: 73.087792 + type: 'test' + ... +# Subtest: receivable fixture is restricted to the verified shared-child 0.01 add/clear contract +ok 246 - receivable fixture is restricted to the verified shared-child 0.01 add/clear contract + --- + duration_ms: 4.57525 + type: 'test' + ... +# Subtest: cancel requires cleared receivables and arrangements +ok 247 - cancel requires cleared receivables and arrangements + --- + duration_ms: 0.305666 + type: 'test' + ... +# Subtest: list restore is disabled and shared-plan edit restore requires 收客中 +ok 248 - list restore is disabled and shared-plan edit restore requires 收客中 + --- + duration_ms: 0.222209 + type: 'test' + ... +# Subtest: restore route reports no-op status before the ERP write gate +ok 249 - restore route reports no-op status before the ERP write gate + --- + duration_ms: 9.612125 + type: 'test' + ... +# Subtest: edit-mode transitions select one native radio option without mutating its value +ok 250 - edit-mode transitions select one native radio option without mutating its value + --- + duration_ms: 1.353042 + type: 'test' + ... +# Subtest: live write uses target September dates and does not depend on the current calendar month +ok 251 - live write uses target September dates and does not depend on the current calendar month + --- + duration_ms: 0.491917 + type: 'test' + ... +# Subtest: delete guard distinguishes independent, shared child, and shared parent routes +ok 252 - delete guard distinguishes independent, shared child, and shared parent routes + --- + duration_ms: 1.228459 + type: 'test' + ... +# Subtest: lifecycle ownership, transition boundary, and duplicate update rules fail closed +ok 253 - lifecycle ownership, transition boundary, and duplicate update rules fail closed + --- + duration_ms: 0.138209 + type: 'test' + ... +# Subtest: external parser validator accepts recognized lifecycle targets for later capability review +ok 254 - external parser validator accepts recognized lifecycle targets for later capability review + --- + duration_ms: 0.085292 + type: 'test' + ... +# Subtest: planner and external validator share the dedicated multi-date split-order probe gate +ok 255 - planner and external validator share the dedicated multi-date split-order probe gate + --- + duration_ms: 1.326667 + type: 'test' + ... +# Subtest: platform runner independently blocks a tampered multi-date split-order probe before browser access +ok 256 - platform runner independently blocks a tampered multi-date split-order probe before browser access + --- + duration_ms: 442.345625 + type: 'test' + ... +# Subtest: confirmation export is backend-attached and route-aware for child and narrow shared-parent visitor sources +ok 257 - confirmation export is backend-attached and route-aware for child and narrow shared-parent visitor sources + --- + duration_ms: 1.622 + type: 'test' + ... +# Subtest: confirmation export keeps shared-child source lookup independent of lifecycle status +ok 258 - confirmation export keeps shared-child source lookup independent of lifecycle status + --- + duration_ms: 2.264458 + type: 'test' + ... +# Subtest: unified lifecycle evidence requires explicit response and matching requery +ok 259 - unified lifecycle evidence requires explicit response and matching requery + --- + duration_ms: 0.768542 + type: 'test' + ... +# Subtest: schema and browser adapters contain the v2 safety fields and no confirm override +ok 260 - schema and browser adapters contain the v2 safety fields and no confirm override + --- + duration_ms: 34.345958 + type: 'test' + ... +# Subtest: JSON Schema compiles and separates production ERP resolution from historical test context +ok 261 - JSON Schema compiles and separates production ERP resolution from historical test context + --- + duration_ms: 616.075208 + type: 'test' + ... +# Subtest: ready native list searches once and retains exact request evidence +ok 262 - ready native list searches once and retains exact request evidence + --- + duration_ms: 33.837833 + type: 'test' + ... +# Subtest: a loading same-path Document replacement is reacquired before searching +ok 263 - a loading same-path Document replacement is reacquired before searching + --- + duration_ms: 2.398667 + type: 'test' + ... +# Subtest: replaced same-path document can finish loading later without using its predecessor +ok 264 - replaced same-path document can finish loading later without using its predecessor + --- + duration_ms: 1.85975 + type: 'test' + ... +# Subtest: native readiness stops without searching: unfinished page +ok 265 - native readiness stops without searching: unfinished page + --- + duration_ms: 1.258792 + type: 'test' + ... +# Subtest: native readiness stops without searching: missing loader +ok 266 - native readiness stops without searching: missing loader + --- + duration_ms: 3.934583 + type: 'test' + ... +# Subtest: native readiness stops without searching: disabled button +ok 267 - native readiness stops without searching: disabled button + --- + duration_ms: 1.497625 + type: 'test' + ... +# Subtest: native readiness stops without searching: detached button +ok 268 - native readiness stops without searching: detached button + --- + duration_ms: 8.131583 + type: 'test' + ... +# Subtest: native readiness stops without searching: wrong page +ok 269 - native readiness stops without searching: wrong page + --- + duration_ms: 1.170792 + type: 'test' + ... +# Subtest: native readiness stops without searching: missing document +ok 270 - native readiness stops without searching: missing document + --- + duration_ms: 70.4 + type: 'test' + ... +# Subtest: native readiness stops without searching: removed frame +ok 271 - native readiness stops without searching: removed frame + --- + duration_ms: 1.20575 + type: 'test' + ... +# Subtest: native readiness stops without searching: inaccessible frame +ok 272 - native readiness stops without searching: inaccessible frame + --- + duration_ms: 1.6935 + type: 'test' + ... +# Subtest: document replacement during prior Ajax wait fails closed without searching either page +ok 273 - document replacement during prior Ajax wait fails closed without searching either page + --- + duration_ms: 0.554417 + type: 'test' + ... +# Subtest: missing button is diagnosed separately from a ready document and loader +ok 274 - missing button is diagnosed separately from a ready document and loader + --- + duration_ms: 0.885708 + type: 'test' + ... +# Subtest: a page change during the native search is rejected instead of using stale result rows +ok 275 - a page change during the native search is rejected instead of using stale result rows + --- + duration_ms: 0.536625 + type: 'test' + ... +# Subtest: the real resolution failure carries explicit no-write proof and value-free readiness details +ok 276 - the real resolution failure carries explicit no-write proof and value-free readiness details + --- + duration_ms: 1.314083 + type: 'test' + ... +# Subtest: the worker describes readiness failures accurately while preserving not-found errors +ok 277 - the worker describes readiness failures accurately while preserving not-found errors + --- + duration_ms: 1.172333 + type: 'test' + ... +# Subtest: team-single remains the guarded production team-order path +ok 278 - team-single remains the guarded production team-order path + --- + duration_ms: 3.702375 + type: 'test' + ... +# Subtest: accepts product/customer source-region context without semantic validation +ok 279 - accepts product/customer source-region context without semantic validation + --- + duration_ms: 0.282708 + type: 'test' + ... +# Subtest: accepts a team-single operation without source-region metadata +ok 280 - accepts a team-single operation without source-region metadata + --- + duration_ms: 0.090167 + type: 'test' + ... +# Subtest: formal team-batch uses the validated native batch submit path +ok 281 - formal team-batch uses the validated native batch submit path + --- + duration_ms: 0.913625 + type: 'test' + ... +# Subtest: order updates require an identifier and only run a no-write browser preview +ok 282 - order updates require an identifier and only run a no-write browser preview + --- + duration_ms: 0.216125 + type: 'test' + ... +# Subtest: untyped parent confirmation export is blocked before any browser operation +ok 283 - untyped parent confirmation export is blocked before any browser operation + --- + duration_ms: 0.156667 + type: 'test' + ... +# Subtest: confirmation export accepts canonical types and blocks unknown artifacts +ok 284 - confirmation export accepts canonical types and blocks unknown artifacts + --- + duration_ms: 0.70875 + type: 'test' + ... +# Subtest: unknown operations fail closed +ok 285 - unknown operations fail closed + --- + duration_ms: 0.062709 + type: 'test' + ... +# Subtest: rejects legacy create envelopes instead of normalizing them +ok 286 - rejects legacy create envelopes instead of normalizing them + --- + duration_ms: 0.266875 + type: 'test' + ... +# Subtest: routes the canonical split-parent operation without child information into the guarded production browser adapter +ok 287 - routes the canonical split-parent operation without child information into the guarded production browser adapter + --- + duration_ms: 0.434834 + type: 'test' + ... +# Subtest: accepts a canonical split-child parent reference without fabricating a product +ok 288 - accepts a canonical split-child parent reference without fabricating a product + --- + duration_ms: 0.409792 + type: 'test' + ... +# Subtest: shared-child leader lookup survives the strict execution gate +ok 289 - shared-child leader lookup survives the strict execution gate + --- + duration_ms: 0.640042 + type: 'test' + ... +# Subtest: shared-child batch dispatch is Program-only, resolves all parents, and enters the guarded batch adapter +ok 290 - shared-child batch dispatch is Program-only, resolves all parents, and enters the guarded batch adapter + --- + duration_ms: 0.455708 + type: 'test' + ... +# Subtest: shared-child batch execution rejects duplicate or out-of-range resolved parents +ok 291 - shared-child batch execution rejects duplicate or out-of-range resolved parents + --- + duration_ms: 0.095833 + type: 'test' + ... +# Subtest: blocks a marked split-child parent when the child remark loses the test marker +ok 292 - blocks a marked split-child parent when the child remark loses the test marker + --- + duration_ms: 0.075584 + type: 'test' + ... +# Subtest: routes a traveler-only handoff update into the traveler import business action +ok 293 - routes a traveler-only handoff update into the traveler import business action + --- + duration_ms: 0.807417 + type: 'test' + ... +# Subtest: applies room and remark updates to a browser-read snapshot without writing ERP +ok 294 - applies room and remark updates to a browser-read snapshot without writing ERP + --- + duration_ms: 0.561667 + type: 'test' + ... +# Subtest: builds export-only source paths and never emits a save action +ok 295 - builds export-only source paths and never emits a save action + --- + duration_ms: 0.680667 + type: 'test' + ... +# Subtest: accepts the production team-single output without manual prices or staff fields +ok 296 - accepts the production team-single output without manual prices or staff fields + --- + duration_ms: 0.250042 + type: 'test' + ... +# Subtest: requires the booking customer for independent-team single orders +ok 297 - requires the booking customer for independent-team single orders + --- + duration_ms: 0.382792 + type: 'test' + ... +# Subtest: blocks scalar named references, unsupported room keys, and manual staff/price overrides +ok 298 - blocks scalar named references, unsupported room keys, and manual staff/price overrides + --- + duration_ms: 0.417292 + type: 'test' + ... +# Subtest: accepts the corrected formal native batch contract used by the reported task +ok 299 - accepts the corrected formal native batch contract used by the reported task + --- + duration_ms: 0.252083 + type: 'test' + ... +# Subtest: keeps the formal native batch operation free of test markers +ok 300 - keeps the formal native batch operation free of test markers + --- + duration_ms: 0.305375 + type: 'test' + ... +# Subtest: accepts a split-parent recurrence without child customer or passenger fields +ok 301 - accepts a split-parent recurrence without child customer or passenger fields + --- + duration_ms: 0.187792 + type: 'test' + ... +# Subtest: accepts independently supplied optional split-parent customer and passenger fields +ok 302 - accepts independently supplied optional split-parent customer and passenger fields + --- + duration_ms: 0.218375 + type: 'test' + ... +# Subtest: accepts either optional split-parent field without requiring the other +ok 303 - accepts either optional split-parent field without requiring the other + --- + duration_ms: 0.183917 + type: 'test' + ... +# Subtest: blocks multi-date split facts outside the dedicated live test probe +ok 304 - blocks multi-date split facts outside the dedicated live test probe + --- + duration_ms: 0.205708 + type: 'test' + ... +# Subtest: allows multi-date split facts only inside the dedicated TEST-202609 probe +ok 305 - allows multi-date split facts only inside the dedicated TEST-202609 probe + --- + duration_ms: 0.376791 + type: 'test' + ... +# Subtest: blocks invalid values for an optional split-parent field +ok 306 - blocks invalid values for an optional split-parent field + --- + duration_ms: 0.190917 + type: 'test' + ... +# Subtest: normalizes legacy flat split-parent fields into the canonical optional envelope +ok 307 - normalizes legacy flat split-parent fields into the canonical optional envelope + --- + duration_ms: 0.534208 + type: 'test' + ... +# Subtest: accepts canonical confirmation types and snake-case recovery flags +ok 308 - accepts canonical confirmation types and snake-case recovery flags + --- + duration_ms: 0.246041 + type: 'test' + ... +# Subtest: accepts canonical confirmation export types without alias normalization +ok 309 - accepts canonical confirmation export types without alias normalization + --- + duration_ms: 0.304 + type: 'test' + ... +# Subtest: shared-plan visitor export uses tid only and rejects child-scoped or mixed sources +ok 310 - shared-plan visitor export uses tid only and rejects child-scoped or mixed sources + --- + duration_ms: 0.642 + type: 'test' + ... +# Subtest: rejects requested confirmation formats because platform processing is separate +ok 311 - rejects requested confirmation formats because platform processing is separate + --- + duration_ms: 0.268458 + type: 'test' + ... +# Subtest: rejects unverified confirmation language variants +ok 312 - rejects unverified confirmation language variants + --- + duration_ms: 0.632583 + type: 'test' + ... +# Subtest: dispatch gate accepts parse-state lifecycle input but strict gate waits for ERP refs +ok 313 - dispatch gate accepts parse-state lifecycle input but strict gate waits for ERP refs + --- + duration_ms: 0.337709 + type: 'test' + ... +# Subtest: dispatch gate accepts business-field lookup without changing action routing +ok 314 - dispatch gate accepts business-field lookup without changing action routing + --- + duration_ms: 1.080708 + type: 'test' + ... +# Subtest: strict lifecycle gate accepts only ERP-enriched production operation +ok 315 - strict lifecycle gate accepts only ERP-enriched production operation + --- + duration_ms: 0.2085 + type: 'test' + ... +# Subtest: execution operation rejects platform task, session, receipt and batch metadata +ok 316 - execution operation rejects platform task, session, receipt and batch metadata + --- + duration_ms: 94.011459 + type: 'test' + ... +# Subtest: dispatch gate keeps internal ids, status defaults, and side-effect policy out of user input +ok 317 - dispatch gate keeps internal ids, status defaults, and side-effect policy out of user input + --- + duration_ms: 8.126708 + type: 'test' + ... +# Subtest: dispatch export needs only a visible identifier and file type +ok 318 - dispatch export needs only a visible identifier and file type + --- + duration_ms: 0.198416 + type: 'test' + ... +# Subtest: dispatch keeps an explicit historical export fixture on its strict test-context path +ok 319 - dispatch keeps an explicit historical export fixture on its strict test-context path + --- + duration_ms: 0.095166 + type: 'test' + ... +# Subtest: strict gate accepts the ERP-enriched production lifecycle matrix without test metadata +ok 320 - strict gate accepts the ERP-enriched production lifecycle matrix without test metadata + --- + duration_ms: 2.141625 + type: 'test' + ... +# Subtest: operation timing closes the previous stage and attributes buffered page work to it +ok 321 - operation timing closes the previous stage and attributes buffered page work to it + --- + duration_ms: 3.327917 + type: 'test' + ... +# Subtest: operation timing survives state loss without exposing absolute timestamps +ok 322 - operation timing survives state loss without exposing absolute timestamps + --- + duration_ms: 0.281625 + type: 'test' + ... +# Subtest: operation timing terminal snapshot is bounded and strips arbitrary values +ok 323 - operation timing terminal snapshot is bounded and strips arbitrary values + --- + duration_ms: 0.263375 + type: 'test' + ... +# Subtest: a later reconciliation continuation does not count the human idle gap +ok 324 - a later reconciliation continuation does not count the human idle gap + --- + duration_ms: 0.219209 + type: 'test' + ... +# Subtest: background timing hook covers every executor through the shared result and page-action boundaries +ok 325 - background timing hook covers every executor through the shared result and page-action boundaries + --- + duration_ms: 59.365875 + type: 'test' + ... +# Subtest: team-order preflight waits on ERP completion events without page-timer polling +ok 326 - team-order preflight waits on ERP completion events without page-timer polling + --- + duration_ms: 2.319291 + type: 'test' + ... +# Subtest: team-order frame discovery targets the exact ERP iframe instead of injecting into every frame +ok 327 - team-order frame discovery targets the exact ERP iframe instead of injecting into every frame + --- + duration_ms: 2.204042 + type: 'test' + ... +# Subtest: team-order frame waits for native customer and staff lookup data before preflight +ok 328 - team-order frame waits for native customer and staff lookup data before preflight + --- + duration_ms: 4.8705 + type: 'test' + ... +# Subtest: team-order preflight waits for the native jQuery Ajax completion event +ok 329 - team-order preflight waits for the native jQuery Ajax completion event + --- + duration_ms: 19.267291 + type: 'test' + ... +# Subtest: extension result changes push immediately while polling remains as a fallback +ok 330 - extension result changes push immediately while polling remains as a fallback + --- + duration_ms: 6.110042 + type: 'test' + ... +# Subtest: platform exposes the sanitized timing breakdown without rendering raw network data +ok 331 - platform exposes the sanitized timing breakdown without rendering raw network data + --- + duration_ms: 5.220417 + type: 'test' + ... +# Subtest: passenger TSV keeps trailing empty columns through server and plugin dispatch +ok 332 - passenger TSV keeps trailing empty columns through server and plugin dispatch + --- + duration_ms: 66.793 + type: 'test' + ... +# Subtest: passenger TSV still rejects missing or surplus columns and keeps leader validation +ok 333 - passenger TSV still rejects missing or surplus columns and keeps leader validation + --- + duration_ms: 2.584042 + type: 'test' + ... +# Subtest: passenger merge accepts empty final fields without repairing malformed column counts +ok 334 - passenger merge accepts empty final fields without repairing malformed column counts + --- + duration_ms: 30.619792 + type: 'test' + ... +# Subtest: matches the ERP product name and duration as separate fields +ok 335 - matches the ERP product name and duration as separate fields + --- + duration_ms: 211.1915 + type: 'test' + ... +# Subtest: does not confuse a reversed route fragment with the 江西 product +ok 336 - does not confuse a reversed route fragment with the 江西 product + --- + duration_ms: 89.073167 + type: 'test' + ... +# Subtest: matches punctuation-separated Chinese fragments and Chinese duration aliases +ok 337 - matches punctuation-separated Chinese fragments and Chinese duration aliases + --- + duration_ms: 0.17625 + type: 'test' + ... +# Subtest: preserves numeric product names while matching a duration suffix +ok 338 - preserves numeric product names while matching a duration suffix + --- + duration_ms: 0.134 + type: 'test' + ... +# Subtest: uses the complete ERP product name as the first native search query +ok 339 - uses the complete ERP product name as the first native search query + --- + duration_ms: 1.674708 + type: 'test' + ... +# Subtest: removes only a trailing numeric duration from the native name query +ok 340 - removes only a trailing numeric duration from the native name query + --- + duration_ms: 0.174833 + type: 'test' + ... +# Subtest: both S_chanpinming order adapters execute the planned native queries +ok 341 - both S_chanpinming order adapters execute the planned native queries + --- + duration_ms: 1.245542 + type: 'test' + ... +# Subtest: keeps unique-match safety when multiple candidates satisfy a shorthand +ok 342 - keeps unique-match safety when multiple candidates satisfy a shorthand + --- + duration_ms: 0.100042 + type: 'test' + ... +# Subtest: keeps source-region tokens as a customer-only fallback, not a product/customer gate +ok 343 - keeps source-region tokens as a customer-only fallback, not a product/customer gate + --- + duration_ms: 0.874917 + type: 'test' + ... +# Subtest: resolves a non-canonical customer phrase by all source-region tokens only when unique +ok 344 - resolves a non-canonical customer phrase by all source-region tokens only when unique + --- + duration_ms: 0.386167 + type: 'test' + ... +# Subtest: does not guess when source-region keywords match multiple customer masters +ok 345 - does not guess when source-region keywords match multiple customer masters + --- + duration_ms: 0.153333 + type: 'test' + ... +# Subtest: records every C04 parent and concrete child into state and canonical allowlist refs +ok 346 - records every C04 parent and concrete child into state and canonical allowlist refs + --- + duration_ms: 4.486417 + type: 'test' + ... +# Subtest: records parent-only facts for cleanup without declaring batch child creation successful +ok 347 - records parent-only facts for cleanup without declaring batch child creation successful + --- + duration_ms: 1.200959 + type: 'test' + ... +# Subtest: refuses to record partial facts or a mismatched independent run id +ok 348 - refuses to record partial facts or a mismatched independent run id + --- + duration_ms: 0.39375 + type: 'test' + ... +# Subtest: root contains only governed long-lived entries +ok 349 - root contains only governed long-lived entries + --- + duration_ms: 5.162417 + type: 'test' + ... +# Subtest: project docs are the sole active project memory +ok 350 - project docs are the sole active project memory + --- + duration_ms: 40.517542 + type: 'test' + ... +# Subtest: temporary residue and report outputs do not pollute the repository +ok 351 - temporary residue and report outputs do not pollute the repository + --- + duration_ms: 568.790291 + type: 'test' + ... +# Subtest: dist is an exact versioned release set with valid hashes +ok 352 - dist is an exact versioned release set with valid hashes + --- + duration_ms: 14.315541 + type: 'test' + ... +# Subtest: extension and release baselines agree +ok 353 - extension and release baselines agree + --- + duration_ms: 6.868333 + type: 'test' + ... +# Subtest: packaged Skills and extension runtime match their project sources +ok 354 - packaged Skills and extension runtime match their project sources + --- + duration_ms: 759.383333 + type: 'test' + ... +# Subtest: active Markdown links resolve and current docs do not depend on rolling history +ok 355 - active Markdown links resolve and current docs do not depend on rolling history + --- + duration_ms: 262.277792 + type: 'test' + ... +# Subtest: archive README indexes remain navigable +ok 356 - archive README indexes remain navigable + --- + duration_ms: 187.306834 + type: 'test' + ... +# Subtest: single-source and generated-output boundaries remain explicit +ok 357 - single-source and generated-output boundaries remain explicit + --- + duration_ms: 6.419083 + type: 'test' + ... +# Subtest: runtime image includes both LibreOffice document converters +ok 358 - runtime image includes both LibreOffice document converters + --- + duration_ms: 1.684667 + type: 'test' + ... +# Subtest: single-order preflight normalizes both sides and uses the exact ERP spelling through native linkage and intercepted submission +ok 359 - single-order preflight normalizes both sides and uses the exact ERP spelling through native linkage and intercepted submission + --- + duration_ms: 779.496542 + type: 'test' + ... +# Subtest: normalized exact match takes precedence over longer containing product names +ok 360 - normalized exact match takes precedence over longer containing product names + --- + duration_ms: 68.692459 + type: 'test' + ... +# Subtest: a unique shortened keyword still selects the ERP product +ok 361 - a unique shortened keyword still selects the ERP product + --- + duration_ms: 88.038583 + type: 'test' + ... +# Subtest: normalization collisions block even when one raw spelling matches exactly +ok 362 - normalization collisions block even when one raw spelling matches exactly + --- + duration_ms: 11.684125 + type: 'test' + ... +# Subtest: multiple shortened-keyword matches block instead of selecting the first +ok 363 - multiple shortened-keyword matches block instead of selecting the first + --- + duration_ms: 6.873375 + type: 'test' + ... +# Subtest: unmatched product stops with one useful error and preserves punctuation and qualifiers +ok 364 - unmatched product stops with one useful error and preserves punctuation and qualifiers + --- + duration_ms: 41.819708 + type: 'test' + ... +# Subtest: failed lookup transport or customer selection never advances into product linkage +ok 365 - failed lookup transport or customer selection never advances into product linkage + --- + duration_ms: 32.276292 + type: 'test' + ... +# Subtest: successful name resolution still requires complete native linkage before submission +ok 366 - successful name resolution still requires complete native linkage before submission + --- + duration_ms: 141.506542 + type: 'test' + ... +# Subtest: matches a persisted split parent row after an ERP error response +ok 367 - matches a persisted split parent row after an ERP error response + --- + duration_ms: 2.546209 + type: 'test' + ... +# Subtest: does not match a row from a missing requested date +ok 368 - does not match a row from a missing requested date + --- + duration_ms: 0.297666 + type: 'test' + ... +# Subtest: matches a mother-plan row without child customer or passenger criteria +ok 369 - matches a mother-plan row without child customer or passenger criteria + --- + duration_ms: 6.004708 + type: 'test' + ... +# Subtest: prefers a unique customer match when generic row criteria are ambiguous +ok 370 - prefers a unique customer match when generic row criteria are ambiguous + --- + duration_ms: 0.157792 + type: 'test' + ... +# Subtest: extracts the concrete child ddid instead of the parent tid +ok 371 - extracts the concrete child ddid instead of the parent tid + --- + duration_ms: 0.331416 + type: 'test' + ... +# Subtest: extracts only concrete shared children for the exact parent tid +ok 372 - extracts only concrete shared children for the exact parent tid + --- + duration_ms: 0.373625 + type: 'test' + ... +# Subtest: classifies a per-date split-order fact with a concrete child +ok 373 - classifies a per-date split-order fact with a concrete child + --- + duration_ms: 0.240083 + type: 'test' + ... +# Subtest: keeps a parent-only split-order result explicit instead of inventing a child +ok 374 - keeps a parent-only split-order result explicit instead of inventing a child + --- + duration_ms: 0.092209 + type: 'test' + ... +# Subtest: does not call a split-order fact determined without a parent tid or complete child scan +ok 375 - does not call a split-order fact determined without a parent tid or complete child scan + --- + duration_ms: 11.718916 + type: 'test' + ... +# Subtest: builds split-parent requery filters without retaining unrelated list state +ok 376 - builds split-parent requery filters without retaining unrelated list state + --- + duration_ms: 21.004916 + type: 'test' + ... +# Subtest: retries returned group-number queries without resubmitting and converges on visible rows +ok 377 - retries returned group-number queries without resubmitting and converges on visible rows + --- + duration_ms: 0.415208 + type: 'test' + ... +# Subtest: keeps a persistently missing returned group incomplete after the bounded retry budget +ok 378 - keeps a persistently missing returned group incomplete after the bounded retry budget + --- + duration_ms: 7.472875 + type: 'test' + ... +# Subtest: requires date reconciliation when any complete ERP response group remains unverified +ok 379 - requires date reconciliation when any complete ERP response group remains unverified + --- + duration_ms: 0.117333 + type: 'test' + ... +# Subtest: prefers a successful date fallback row over an earlier exact-query miss +ok 380 - prefers a successful date fallback row over an earlier exact-query miss + --- + duration_ms: 0.132458 + type: 'test' + ... +# Subtest: resolves a Chinese shorthand customer across multiple SelectBox columns +ok 381 - resolves a Chinese shorthand customer across multiple SelectBox columns + --- + duration_ms: 2.85925 + type: 'test' + ... +# Subtest: blocks ambiguous fuzzy customer matches instead of choosing the first row +ok 382 - blocks ambiguous fuzzy customer matches instead of choosing the first row + --- + duration_ms: 0.208291 + type: 'test' + ... +# Subtest: maps native weekday and odd/even shortcuts without changing business dates +ok 383 - maps native weekday and odd/even shortcuts without changing business dates + --- + duration_ms: 0.8495 + type: 'test' + ... +# Subtest: uses the same cycle selection plan for explicit dates and ERP shortcuts +ok 384 - uses the same cycle selection plan for explicit dates and ERP shortcuts + --- + duration_ms: 0.749917 + type: 'test' + ... +# Subtest: expands odd and even cycles by calendar day instead of weekday number +ok 385 - expands odd and even cycles by calendar day instead of weekday number + --- + duration_ms: 0.638292 + type: 'test' + ... +# Subtest: normalizes dates for the ERP range and keeps range containment deterministic +ok 386 - normalizes dates for the ERP range and keeps range containment deterministic + --- + duration_ms: 0.299459 + type: 'test' + ... +1..386 +# tests 452 +# suites 3 +# pass 450 +# fail 2 +# cancelled 0 +# skipped 0 +# todo 0 +# duration_ms 7484.330042 diff --git a/archive/evidence/2026-09-29/hotel-native-remark-01a0858b/repository-clean-tests.txt b/archive/evidence/2026-09-29/hotel-native-remark-01a0858b/repository-clean-tests.txt new file mode 100644 index 0000000..72b0ae2 --- /dev/null +++ b/archive/evidence/2026-09-29/hotel-native-remark-01a0858b/repository-clean-tests.txt @@ -0,0 +1,70 @@ +TAP version 13 +# Subtest: root contains only governed long-lived entries +ok 1 - root contains only governed long-lived entries + --- + duration_ms: 92.746625 + type: 'test' + ... +# Subtest: project docs are the sole active project memory +ok 2 - project docs are the sole active project memory + --- + duration_ms: 19.769834 + type: 'test' + ... +# Subtest: temporary residue and report outputs do not pollute the repository +ok 3 - temporary residue and report outputs do not pollute the repository + --- + duration_ms: 338.834166 + type: 'test' + ... +# Subtest: dist is an exact versioned release set with valid hashes +ok 4 - dist is an exact versioned release set with valid hashes + --- + duration_ms: 21.956 + type: 'test' + ... +# Subtest: extension and release baselines agree +ok 5 - extension and release baselines agree + --- + duration_ms: 5.963541 + type: 'test' + ... +# Subtest: packaged Skills and extension runtime match their project sources +ok 6 - packaged Skills and extension runtime match their project sources + --- + duration_ms: 1081.545417 + type: 'test' + ... +# Subtest: active Markdown links resolve and current docs do not depend on rolling history +ok 7 - active Markdown links resolve and current docs do not depend on rolling history + --- + duration_ms: 347.337041 + type: 'test' + ... +# Subtest: archive README indexes remain navigable +ok 8 - archive README indexes remain navigable + --- + duration_ms: 145.497375 + type: 'test' + ... +# Subtest: single-source and generated-output boundaries remain explicit +ok 9 - single-source and generated-output boundaries remain explicit + --- + duration_ms: 39.299333 + type: 'test' + ... +# Subtest: runtime image includes both LibreOffice document converters +ok 10 - runtime image includes both LibreOffice document converters + --- + duration_ms: 1.320125 + type: 'test' + ... +1..10 +# tests 10 +# suites 0 +# pass 10 +# fail 0 +# cancelled 0 +# skipped 0 +# todo 0 +# duration_ms 2460.424584 diff --git a/archive/evidence/2026-09-29/hotel-native-remark-01a0858b/repository-local-residue.txt b/archive/evidence/2026-09-29/hotel-native-remark-01a0858b/repository-local-residue.txt new file mode 100644 index 0000000..438b4d6 --- /dev/null +++ b/archive/evidence/2026-09-29/hotel-native-remark-01a0858b/repository-local-residue.txt @@ -0,0 +1,132 @@ +TAP version 13 +# Subtest: root contains only governed long-lived entries +not ok 1 - root contains only governed long-lived entries + --- + duration_ms: 5.146542 + type: 'test' + location: '/Users/andy/IdeaProjects/LWLT-AIBOT/tools/repository-hygiene.test.mjs:111:1' + failureType: 'testCodeFailure' + error: |- + Expected values to be strictly deep-equal: + + actual - expected + + + [ + + '.DS_Store', + + '.idea' + + ] + - [] + + code: 'ERR_ASSERTION' + name: 'AssertionError' + expected: + actual: + 0: '.DS_Store' + 1: '.idea' + operator: 'deepStrictEqual' + stack: |- + TestContext. (file:///Users/andy/IdeaProjects/LWLT-AIBOT/tools/repository-hygiene.test.mjs:114:10) + async Test.run (node:internal/test_runner/test:1054:7) + async startSubtestAfterBootstrap (node:internal/test_runner/harness:296:3) + ... +# Subtest: project docs are the sole active project memory +ok 2 - project docs are the sole active project memory + --- + duration_ms: 3.319083 + type: 'test' + ... +# Subtest: temporary residue and report outputs do not pollute the repository +not ok 3 - temporary residue and report outputs do not pollute the repository + --- + duration_ms: 45.544084 + type: 'test' + location: '/Users/andy/IdeaProjects/LWLT-AIBOT/tools/repository-hygiene.test.mjs:149:1' + failureType: 'testCodeFailure' + error: |- + Expected values to be strictly deep-equal: + + actual - expected + + + [ + + '.DS_Store', + + 'archive/evidence/2026-09-14/arrangement-original-date-year-01a0858b/build.log', + + 'archive/evidence/2026-09-14/arrangement-original-date-year-01a0858b/control-plane-tests.log', + + 'archive/evidence/2026-09-14/arrangement-original-date-year-01a0858b/focused-tests.log', + + 'archive/evidence/2026-09-14/arrangement-original-date-year-01a0858b/legacy-tests.log', + + 'archive/evidence/2026-09-14/arrangement-original-date-year-01a0858b/repository-clean.log', + + 'archive/evidence/2026-09-14/arrangement-original-date-year-01a0858b/repository-local-metadata.log', + + 'archive/evidence/2026-09-14/arrangement-original-date-year-01a0858b/runtime-layout-smoke.log', + + 'archive/evidence/2026-09-14/arrangement-original-date-year-01a0858b/typecheck.log', + + 'chrome-extension/.DS_Store' + + ] + - [] + + code: 'ERR_ASSERTION' + name: 'AssertionError' + expected: + actual: + 0: '.DS_Store' + 1: 'archive/evidence/2026-09-14/arrangement-original-date-year-01a0858b/build.log' + 2: 'archive/evidence/2026-09-14/arrangement-original-date-year-01a0858b/control-plane-tests.log' + 3: 'archive/evidence/2026-09-14/arrangement-original-date-year-01a0858b/focused-tests.log' + 4: 'archive/evidence/2026-09-14/arrangement-original-date-year-01a0858b/legacy-tests.log' + 5: 'archive/evidence/2026-09-14/arrangement-original-date-year-01a0858b/repository-clean.log' + 6: 'archive/evidence/2026-09-14/arrangement-original-date-year-01a0858b/repository-local-metadata.log' + 7: 'archive/evidence/2026-09-14/arrangement-original-date-year-01a0858b/runtime-layout-smoke.log' + 8: 'archive/evidence/2026-09-14/arrangement-original-date-year-01a0858b/typecheck.log' + 9: 'chrome-extension/.DS_Store' + operator: 'deepStrictEqual' + stack: |- + TestContext. (file:///Users/andy/IdeaProjects/LWLT-AIBOT/tools/repository-hygiene.test.mjs:153:10) + async Test.run (node:internal/test_runner/test:1054:7) + async Test.processPendingSubtests (node:internal/test_runner/test:744:7) + ... +# Subtest: dist is an exact versioned release set with valid hashes +ok 4 - dist is an exact versioned release set with valid hashes + --- + duration_ms: 5.366667 + type: 'test' + ... +# Subtest: extension and release baselines agree +ok 5 - extension and release baselines agree + --- + duration_ms: 2.476417 + type: 'test' + ... +# Subtest: packaged Skills and extension runtime match their project sources +ok 6 - packaged Skills and extension runtime match their project sources + --- + duration_ms: 137.733208 + type: 'test' + ... +# Subtest: active Markdown links resolve and current docs do not depend on rolling history +ok 7 - active Markdown links resolve and current docs do not depend on rolling history + --- + duration_ms: 48.791875 + type: 'test' + ... +# Subtest: archive README indexes remain navigable +ok 8 - archive README indexes remain navigable + --- + duration_ms: 27.249208 + type: 'test' + ... +# Subtest: single-source and generated-output boundaries remain explicit +ok 9 - single-source and generated-output boundaries remain explicit + --- + duration_ms: 2.113625 + type: 'test' + ... +# Subtest: runtime image includes both LibreOffice document converters +ok 10 - runtime image includes both LibreOffice document converters + --- + duration_ms: 0.471583 + type: 'test' + ... +1..10 +# tests 10 +# suites 0 +# pass 8 +# fail 2 +# cancelled 0 +# skipped 0 +# todo 0 +# duration_ms 377.6575 diff --git a/archive/evidence/2026-09-29/hotel-native-remark-01a0858b/typecheck.txt b/archive/evidence/2026-09-29/hotel-native-remark-01a0858b/typecheck.txt new file mode 100644 index 0000000..e69de29 diff --git a/archive/releases/2026-09-29/README.md b/archive/releases/2026-09-29/README.md new file mode 100644 index 0000000..218eff4 --- /dev/null +++ b/archive/releases/2026-09-29/README.md @@ -0,0 +1,5 @@ +# 2026-09-29 发布归档 + +此处为历史资料,不定义当前业务规则。 + +- [酒店默认备注修复前发布物](hotel-native-remark-01a0858b/README.md) diff --git a/archive/releases/2026-09-29/hotel-native-remark-01a0858b/README.md b/archive/releases/2026-09-29/hotel-native-remark-01a0858b/README.md new file mode 100644 index 0000000..501cde1 --- /dev/null +++ b/archive/releases/2026-09-29/hotel-native-remark-01a0858b/README.md @@ -0,0 +1,3 @@ +# 酒店备注修复前发布物 + +只读历史发布物,不定义当前业务规则。0.5.190 ZIP 在归档前核对原发布清单哈希,原字节保留。当前版本与哈希以 [发布清单](../../../../dist/release-manifest.json) 为准。 diff --git a/dist/ltjt-order-assistant-0.5.190.zip b/archive/releases/2026-09-29/hotel-native-remark-01a0858b/ltjt-order-assistant-0.5.190.zip similarity index 100% rename from dist/ltjt-order-assistant-0.5.190.zip rename to archive/releases/2026-09-29/hotel-native-remark-01a0858b/ltjt-order-assistant-0.5.190.zip diff --git a/chrome-extension/ltjt-order-assistant/README.md b/chrome-extension/ltjt-order-assistant/README.md index 2918a40..1433e31 100644 --- a/chrome-extension/ltjt-order-assistant/README.md +++ b/chrome-extension/ltjt-order-assistant/README.md @@ -11,9 +11,14 @@ Chrome Manifest V3 扩展,在用户已登录的 LTJT ERP 页面内执行经过 ## 当前版本 -当前源码版本为 `0.5.190`。版本化 ZIP、文件哈希和 Skill/DOCX 基线见 [`../../dist/release-manifest.json`](../../dist/release-manifest.json)。旧版本实现流水已冻结在 [`../../archive/project-history/2026-08-16/chrome-extension-README.pre-governance.md`](../../archive/project-history/2026-08-16/chrome-extension-README.pre-governance.md)。 +当前源码版本为 `0.5.191`。版本化 ZIP、文件哈希和 Skill/DOCX 基线见 [`../../dist/release-manifest.json`](../../dist/release-manifest.json)。旧版本实现流水已冻结在 [`../../archive/project-history/2026-08-16/chrome-extension-README.pre-governance.md`](../../archive/project-history/2026-08-16/chrome-extension-README.pre-governance.md)。 -0.5.190 当前重点: +0.5.191 当前重点: + +- 酒店新增未填备注时保留选中酒店原生联动备注,明确填写时使用用户备注;在资源选择后、日期/数量回调前冻结,保存前校验及写后回查均验证。默认备注回查使用 v2 证据,旧 v1 回查保持兼容。单条与批量逐条适用;变更未填备注仍保留原记录。仅本地合成验证,真实 ERP 验收待部署方完成。 +- 需更新插件和平台最低版本至 0.5.191 并刷新平台/ERP 页面;无新增数据库迁移。 + +继续保留 0.5.190 的同团批量酒店新增: - 同团 2—10 条酒店新增由程序解析为批量信封,插件按输入顺序复用单条原生保存/回查;首次失败或不确定即停止,逐条保存成功前缀、失败/待核验项与未执行项。每条确认成功才进入账号隔离的安排账本和团队进度;整批成功回执包含逐条结果及当前安排。只读回查只核验不确定项,不自动继续剩余安排。禁止跨团、混合动作、批量变更、整批自动重试。 - 需同步更新控制面、平台和插件 0.5.190,无新增数据库迁移。单条输入及原生资源匹配规则保持;本地合成验证通过,真实 ERP 验收待部署方完成。 diff --git a/chrome-extension/ltjt-order-assistant/inpage.js b/chrome-extension/ltjt-order-assistant/inpage.js index cb1d667..600642e 100644 --- a/chrome-extension/ltjt-order-assistant/inpage.js +++ b/chrome-extension/ltjt-order-assistant/inpage.js @@ -6677,7 +6677,7 @@ } window.LTJTOrderAssistant = { - version: '0.5.190', + version: '0.5.191', resolveNativeListSearchValues, lookupKeywordMatchesText, inspectLifecycleSearchCriteria: lifecycleSearchCriteria, diff --git a/chrome-extension/ltjt-order-assistant/lifecycle-adapters.js b/chrome-extension/ltjt-order-assistant/lifecycle-adapters.js index 824ec0a..988219c 100644 --- a/chrome-extension/ltjt-order-assistant/lifecycle-adapters.js +++ b/chrome-extension/ltjt-order-assistant/lifecycle-adapters.js @@ -651,6 +651,13 @@ return sha256(JSON.stringify([operation.action, operation.data.existing_refs, arrangement])); } + function usesNativeHotelRemark(operation) { + // Public input only permits a nonempty explicit remark. Resolution also + // normalizes an omitted remark to '', so both forms mean inherit here. + return operation.action === 'arrangement_hotel' && operation.data?.arrangement?.mode === 'create' + && !normalize(operation.data.arrangement.remark); + } + async function arrangementCreateEvidence(form, operation) { const rows = []; for (const index of arrangementRowIndexes(form)) { @@ -660,7 +667,7 @@ const preserved = createPreservedFields(form, operation); const preservedProof = await Promise.all(preserved.map(async (field) => ({ name: field.name, date: Boolean(field.date), sha256: await sha256(field.date ? dateYyyyMD(field.expected) : normalize(field.expected)) }))); - return { version: 1, slot_index: operation.data.arrangement.target.slot_index, + return { version: usesNativeHotelRemark(operation) ? 2 : 1, slot_index: operation.data.arrangement.target.slot_index, operation_key: await arrangementCreateOperationKey(operation), existing_rows: rows, ...(operation.action === 'arrangement_other' ? { preserved_fields: preservedProof } : {}), value_redacted: true }; } @@ -2318,11 +2325,13 @@ } const linkedFields = ['danwei0', 'danweiid0', 'fangxing0', 'diqu0', 'dianhua0', 'bizhong0', 'danjia0', 'fangshi0'].map((name) => arrangementFieldName(operation, name)); const before = Object.fromEntries(linkedFields.map((name) => [name, controlValue(getControl(form, name))])); + let nativeRemark; try { // SetValToObj is the same ERP-native mapping used by a real hotel-row // click. It fills the read-only room type and all linked fields. selectBox.SetVal = setVal; selectBox.SetValToObj(selected.candidate.raw || selected.candidate.row.join('◆')); + nativeRemark = controlValue(getArrangementControl(form, operation, 'beizhu0')); dispatchNativeFieldEvents(control); } catch (error) { blockers.push(`arrangement_hotel_native_selectbox_failed:${error?.message || String(error)}`); @@ -2340,7 +2349,7 @@ linked_fields_changed: linkedFields.filter((name) => before[name] !== after[name]), value_redacted: true }); - return selected; + return { ...selected, nativeRemark }; } function applyNativeSettlementSelection(form, supplier, changes, blockers, action = 'arrangement_transport', operation = {}) { @@ -2793,9 +2802,18 @@ const preserved = createPreservedFields(form, operation); const field = (name) => arrangementFieldName(operation, name); const action = operation.action; - if (action === 'arrangement_hotel') applyNativeHotelSelection(form, value.resource, changes, blockers, operation); + let hotelSelection; + if (action === 'arrangement_hotel') hotelSelection = applyNativeHotelSelection(form, value.resource, changes, blockers, operation); else applyNativeSettlementSelection(form, value.supplier, changes, blockers, action, operation); if (blockers.length) return { changes, blockers, arrangementSlot: slot }; + // Freeze the selected resource's note before date/quantity callbacks can + // clear it. Never inherit another existing row or read it back after save. + const nativeRemark = usesNativeHotelRemark(operation) + ? hotelSelection.nativeRemark : undefined; + const effectiveRemark = nativeRemark ?? value.remark; + const projectionOperation = nativeRemark === undefined ? operation : { + ...operation, data: { ...operation.data, arrangement: { ...value, remark: effectiveRemark } } + }; if (action === 'arrangement_hotel' || action === 'arrangement_vehicle') { applyExact(form, field('riqi0'), 'set', value.start_date, changes, blockers); applyExact(form, field('riqis0'), 'set', value.end_date, changes, blockers); @@ -2820,15 +2838,16 @@ // Native date/room callbacks may reset status and remark. Set and assert // the requested final values only after those callbacks have settled. applyExact(form, field('zt0'), 'set', value.status, changes, blockers, { optional: action === 'arrangement_other' }); - applyExact(form, field('beizhu0'), 'set', value.remark, changes, blockers); + applyExact(form, field('beizhu0'), 'set', effectiveRemark, changes, blockers); if (action === 'arrangement_other') { for (const [key, name] of Object.entries({ number: 'beianhao', date: 'beianri', entry_port: 'rujingkou', exit_port: 'chujingkou' })) { if (value.filing?.[key] !== undefined) applyExact(form, name, 'set', value.filing[key], changes, blockers); } } - const writeGuard = () => arrangementCreateWriteGuard(form, operation, signature, controls, preserved); + const writeGuard = () => arrangementCreateWriteGuard(form, projectionOperation, signature, controls, preserved); blockers.push(...writeGuard()); - return { changes, blockers, arrangementSlot: slot, writeGuard, linkageWait }; + return { changes, blockers, arrangementSlot: slot, writeGuard, linkageWait, + ...(nativeRemark !== undefined ? { nativeRemarkSha256: await sha256(normalize(nativeRemark)) } : {}) }; } async function applyArrangement(form, operation) { @@ -4077,7 +4096,7 @@ async function indexedCreateRequeryProjection(form, operation, proof) { const blockers = []; - if (!proof || proof.version !== 1 || !Array.isArray(proof.existing_rows) + if (!proof || ![1, 2].includes(proof.version) || !Array.isArray(proof.existing_rows) || !Number.isInteger(proof.slot_index) || proof.slot_index < 0 || proof.operation_key !== await arrangementCreateOperationKey(operation)) { return { fields: [], blockers: ['arrangement_create_before_evidence_missing_or_mismatched'], operation }; @@ -4097,6 +4116,16 @@ if (newRows.length !== 1) blockers.push(`arrangement_create_new_row_count:${newRows.length}`); if (blockers.length) return { fields: [], blockers: [...new Set(blockers)], operation }; const projectedOperation = arrangementCreateAtSlot(operation, newRows[0]); + if (proof.version === 2) { + if (!usesNativeHotelRemark(operation) || !/^(?:[a-f0-9]{64}|fallback-[a-f0-9]{1,8})$/.test(proof.native_remark_sha256 || '')) { + return { fields: [], blockers: ['arrangement_create_native_remark_evidence_missing'], operation }; + } + const nativeRemark = controlValue(getArrangementControl(form, projectedOperation, 'beizhu0')); + if (await sha256(normalize(nativeRemark)) !== proof.native_remark_sha256) { + return { fields: [], blockers: ['arrangement_create_native_remark_changed_after_save'], operation }; + } + projectedOperation.data.arrangement.remark = nativeRemark; + } const projection = arrangementExpectedFields(form, projectedOperation); if (operation.action === 'arrangement_other') { const expectedNames = createPreservedFields(form, projectedOperation).map((field) => field.name); @@ -4526,6 +4555,9 @@ applyBlockers = applied.blockers; writeGuard = applied.writeGuard || null; if (applied.linkageWait) preflight.preflight.arrangement_linkage = applied.linkageWait; + if (applied.nativeRemarkSha256 && preflight.preflight.hotel_create?.version === 2) { + preflight.preflight.hotel_create.native_remark_sha256 = applied.nativeRemarkSha256; + } } else if (operation.action.startsWith('order_update_')) { const applied = applyUpdates(form, operation); const receivable = applyReceivableFixture(form, operation); diff --git a/chrome-extension/ltjt-order-assistant/manifest.json b/chrome-extension/ltjt-order-assistant/manifest.json index c73d27e..ea70d44 100644 --- a/chrome-extension/ltjt-order-assistant/manifest.json +++ b/chrome-extension/ltjt-order-assistant/manifest.json @@ -1,7 +1,7 @@ { "manifest_version": 3, "name": "联泰下单助手", - "version": "0.5.190", + "version": "0.5.191", "description": "在已登录 LTJT ERP 页面内规划并受控执行联泰 ERP 业务操作。", "permissions": [ "activeTab", diff --git a/chrome-extension/ltjt-order-assistant/team-batch-inpage.js b/chrome-extension/ltjt-order-assistant/team-batch-inpage.js index 7845cbe..9d76146 100644 --- a/chrome-extension/ltjt-order-assistant/team-batch-inpage.js +++ b/chrome-extension/ltjt-order-assistant/team-batch-inpage.js @@ -944,7 +944,7 @@ window.LTJTOrderAssistant = { ...(window.LTJTOrderAssistant || {}), - version: '0.5.190', + version: '0.5.191', openTeamBatchForm, pingTeamBatchFrame, preflightTeamBatchNative, diff --git a/dist/ltjt-order-assistant-0.5.191.zip b/dist/ltjt-order-assistant-0.5.191.zip new file mode 100644 index 0000000000000000000000000000000000000000..7e30a10c2498de8768dcd3938d336d5afe8891a9 GIT binary patch literal 247885 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

qmKJNxep5s>WYPjeh^&}&@Xna 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%0DO5!Gm}=42%#8lG+^J!?UNpxCYqFp?DNz@d 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 literal 0 HcmV?d00001 diff --git a/dist/release-manifest.json b/dist/release-manifest.json index 801d043..5b079db 100644 --- a/dist/release-manifest.json +++ b/dist/release-manifest.json @@ -1,8 +1,8 @@ { "manifest_version": 1, - "generated_on": "2026-09-24", + "generated_on": "2026-09-29", "baselines": { - "chrome_extension": "0.5.190", + "chrome_extension": "0.5.191", "skills": "0.5.129", "business_instruction_docx": "0.5.137", "agent_prompt": "ltjt-agent-prompt-v1.8-independent-headcount-categories" @@ -10,10 +10,10 @@ "artifacts": [ { "kind": "chrome_extension", - "version": "0.5.190", - "path": "dist/ltjt-order-assistant-0.5.190.zip", + "version": "0.5.191", + "path": "dist/ltjt-order-assistant-0.5.191.zip", "source": "chrome-extension/ltjt-order-assistant", - "sha256": "092838d79cf5864ec3894035b60b6dde5bbeb979c6bf9bce0ad656dc9b7c7f69" + "sha256": "97ea457b40c164b5f015a051b450aed8e3617da950608eb293f18e3ae5e41d69" }, { "kind": "skill", diff --git a/mappings/lifecycle.mapping.json b/mappings/lifecycle.mapping.json index 5f67c3c..b6c3dbe 100644 --- a/mappings/lifecycle.mapping.json +++ b/mappings/lifecycle.mapping.json @@ -1,7 +1,7 @@ { "contract_version": "ltjt-lifecycle-v2.9-roster-leader-contact-2026-08", "current_agent_parse_prompt_version": "ltjt-agent-prompt-v1.8-independent-headcount-categories", - "current_extension_version": "0.5.190", + "current_extension_version": "0.5.191", "original_arrangement_date_selection": "Hotel, vehicle, transport and other/filing update selection accepts MM-DD or YYYY-MM-DD; omitted year matches original ERP month/day within the exact group only. Require exactly one persisted row, then freeze its actual full dates and id. Full year is exact; mixed/cross-year endpoints are matched independently with actual range order checked. No match or ambiguity blocks before mutation; show up to five original candidates and ask to resubmit complete dates. Creation and legacy target-date changes retain existing semantics.", "historical_test_marker": "TEST-202609", "scope": "/System/Business/", @@ -333,6 +333,7 @@ } }, "arrangement_hotel": { + "create_remark_policy": "0.5.191: omitted/normalized-empty remark inherits the selected native hotel note captured before field callbacks; explicit nonempty remark overrides. Freeze final note for the pre-POST guard. Hotel create proof v2 binds the inherited note hash before POST and verifies it on fresh requery/reconciliation; missing/mismatched proof cannot complete. Historical v1 and existing-row updates retain prior semantics. Applies independently to each batch item.", "page": "/System/Business/teams_jiudian.asp", "action": "DoInfo_jiudian", "create_form_readiness": { diff --git a/tools/hotel-create-empty-slot.test.mjs b/tools/hotel-create-empty-slot.test.mjs index 141dd71..33281ad 100644 --- a/tools/hotel-create-empty-slot.test.mjs +++ b/tools/hotel-create-empty-slot.test.mjs @@ -2,6 +2,12 @@ import assert from 'node:assert/strict'; import test from 'node:test'; import vm from 'node:vm'; import { readFileSync } from 'node:fs'; +import { webcrypto } from 'node:crypto'; +import { createRequire } from 'node:module'; + +const require = createRequire(import.meta.url); +const plans = require('../chrome-extension/ltjt-order-assistant/operation-plans.js'); +const hotelBatch = require('../chrome-extension/ltjt-order-assistant/hotel-batch.js'); const inpage = readFileSync(new URL('../chrome-extension/ltjt-order-assistant/inpage.js', import.meta.url), 'utf8'); const adapter = readFileSync(new URL('../chrome-extension/ltjt-order-assistant/lifecycle-adapters.js', import.meta.url), 'utf8') @@ -15,7 +21,7 @@ const adapter = readFileSync(new URL('../chrome-extension/ltjt-order-assistant/l teamSummaryRequery = async (operation, subpage) => subpage; assistant.preflightLifecycleOperation = preflightLifecycleOperation;`); -function fixture({ occupied = 1, rows = occupied + 2, onSelection = () => {}, onValidate = () => {}, sort = false, onPost = () => {}, linkageDelays = [], onLinkageTick = () => {} } = {}) { +function fixture({ occupied = 1, rows = occupied + 2, onSelection = () => {}, onValidate = () => {}, sort = false, onPost = () => {}, linkageDelays = [], onLinkageTick = () => {}, onFieldEvent = () => {}, crypto = webcrypto } = {}) { let now = 10000; let posts = 0; let selections = 0; @@ -25,13 +31,13 @@ function fixture({ occupied = 1, rows = occupied + 2, onSelection = () => {}, on const fields = new Map(); const document = { querySelector: () => form, querySelectorAll: () => [], readyState: 'complete', body: { innerText: '' } }; const location = { href: 'https://erp.invalid/System/Business/teams_jiudian.asp?tdID=123', pathname: '/System/Business/teams_jiudian.asp' }; - const window = { document, Event: class {}, location, testValidate: () => onValidate(fields), getComputedStyle: () => ({ display: 'block', visibility: 'visible', opacity: '1' }) }; + const window = { document, crypto, Event: class {}, location, testValidate: () => onValidate(fields), getComputedStyle: () => ({ display: 'block', visibility: 'visible', opacity: '1' }) }; window.parent = window; document.defaultView = window; form.ownerDocument = document; const add = (name, value) => { const control = { name, id: name, value: String(value), type: name === 'SubmitButton' ? 'submit' : 'text', tagName: 'INPUT', disabled: false, - ownerDocument: document, dispatchEvent() {}, + ownerDocument: document, dispatchEvent() { onFieldEvent(fields, name); }, getAttribute: (key) => key.toLowerCase() === 'data' ? '270◆测试新酒店◆TWN H◆CNY◆120' : key.toLowerCase() === 'setval' ? name : null }; fields.set(name, control); form.elements.push(control); }; @@ -204,3 +210,100 @@ test('requery cannot report an old row, duplicate new rows, changed existing row assert.equal(f.posts(), 1); } }); + +test('omitted hotel remarks survive selection/date callbacks, save and read-only requery', async () => { + for (const omitted of [undefined, '']) for (const crypto of [webcrypto, null]) { + const f = fixture({ sort: true, crypto, + onSelection(fields, index) { fields.get(`beizhu${index}`).value = '6月21号起 按照包房12间\n有房损另计'; }, + onFieldEvent(fields, name) { if (/^(danwei|riqi|riqis|jianshu)1$/.test(name)) fields.get('beizhu1').value = ''; } + }); + if (omitted === undefined) delete f.operation.data.arrangement.remark; + const before = JSON.stringify(f.operation); + const result = await f.api.liveSubmitLifecycleOperation(f.operation); + assert.equal(result.status, 'lifecycle_completed', JSON.stringify(result)); + assert.equal(f.fields.get('beizhu1').value, '6月21号起 按照包房12间\n有房损另计'); + assert.equal(f.fields.get('beizhu0').value, '保留备注0'); + assert.equal(JSON.stringify(f.operation), before); + assert.equal(result.preflight.hotel_create.version, 2); + const checked = result.requery.checks.find(check => check.field === 'beizhu0'); + assert.equal(checked.actual, f.fields.get('beizhu1').value); + assert.equal(checked.matched, true); + const verified = await f.api.verifyLifecycleOperation(f.operation, { hotel_create: result.preflight.hotel_create }); + assert.equal(verified.status, 'lifecycle_requery_matched', JSON.stringify(verified)); + assert.equal(f.posts(), 1); + } +}); + +test('explicit hotel remark overrides the native default, while missing native notes remain empty', async () => { + const f = fixture({ onSelection(fields, index) { fields.get(`beizhu${index}`).value = '酒店默认备注'; } }); + f.operation.data.arrangement.remark = '用户备注:晚到保留'; + const result = await f.api.liveSubmitLifecycleOperation(f.operation); + assert.equal(result.status, 'lifecycle_completed', JSON.stringify(result)); + assert.equal(f.fields.get('beizhu1').value, '用户备注:晚到保留'); + assert.equal(result.preflight.hotel_create.version, 1); + const empty = fixture(); + const blank = await empty.api.liveSubmitLifecycleOperation(empty.operation); + assert.equal(blank.status, 'lifecycle_completed', JSON.stringify(blank)); + assert.equal(empty.fields.get('beizhu1').value, ''); + // Old executions stored v1 and intentionally wrote the omitted note as ''. + const oldProof = { ...blank.preflight.hotel_create, version: 1 }; + delete oldProof.native_remark_sha256; + assert.equal((await empty.api.verifyLifecycleOperation(empty.operation, { hotel_create: oldProof })).status, 'lifecycle_requery_matched'); +}); + +test('native remark changes at validation block POST; missing or changed saved evidence cannot report success', async () => { + const selection = (fields, index) => { fields.get(`beizhu${index}`).value = '酒店默认备注'; }; + const f = fixture({ onSelection: selection, onValidate(fields) { fields.get('beizhu1').value = ''; } }); + const blocked = await f.api.liveSubmitLifecycleOperation(f.operation); + assert.equal(blocked.status, 'lifecycle_apply_blocked', JSON.stringify(blocked)); + assert.equal(f.posts(), 0); + const changed = fixture({ onSelection: selection, onPost(form) { form.elements.find(control => control.name === 'beizhu1').value = ''; } }); + const uncertain = await changed.api.liveSubmitLifecycleOperation(changed.operation); + assert.equal(uncertain.status, 'lifecycle_execution_uncertain'); + assert.ok(uncertain.requery.blockers.includes('arrangement_create_native_remark_changed_after_save')); + const good = fixture({ onSelection: selection }); + const result = await good.api.liveSubmitLifecycleOperation(good.operation); + const proof = structuredClone(result.preflight.hotel_create); + delete proof.native_remark_sha256; + assert.equal((await good.api.verifyLifecycleOperation(good.operation, { hotel_create: proof })).status, 'lifecycle_requery_not_matched'); + good.savedForm().elements.find(control => control.name === 'beizhu1').value = 'ERP后续变动'; + assert.equal((await good.api.verifyLifecycleOperation(good.operation, { hotel_create: result.preflight.hotel_create })).status, 'lifecycle_requery_not_matched'); + assert.equal(good.posts(), 1); +}); + +test('batch orchestration preserves each hotel native or explicit remark through actual lifecycle execution', async () => { + const base = fixture().operation; + const arrangements = [5, 6, 7].map(day => ({ mode: 'create', resource: { name: '测试新酒店TWN', keyword: '测试新酒店TWN' }, + start_date: `2026-09-0${day}`, end_date: `2026-09-0${day + 1}`, room_count: 12, + ...(day === 6 ? { remark: '用户独立备注' } : {}) })); + const operation = { action: 'arrangement_hotel', order_nature: 'formal', submit_mode: 'dry_run', + data: { existing_refs: { identifier: 'LW-TEST-HOTEL' }, arrangements } }; + const before = JSON.stringify(operation); + const results = {}, reports = []; + let final; + const context = { operationPlans: plans, hotelBatch, throwIfTaskCancelled() {}, + publishHotelBatch: async (_id, _op, batch) => { final = batch; }, + chrome: { storage: { local: { get: async () => ({ businessTaskResults: results }) } } }, + executeLifecycleOperation: async (id, child) => { + const index = reports.length; + const f = fixture({ onSelection(fields, slot) { fields.get(`beizhu${slot}`).value = `酒店备注${index}`; }, + onFieldEvent(fields, name) { if (/^(riqi|riqis|jianshu)1$/.test(name)) fields.get('beizhu1').value = ''; }, + onPost(form) { form.elements.find(control => control.name === 'id1').value = String(999 + index); } + }); + f.operation.data.arrangement = { ...base.data.arrangement, ...child.data.arrangement, resource: base.data.arrangement.resource }; + const report = await f.api.liveSubmitLifecycleOperation(f.operation); + assert.equal(report.status, 'lifecycle_completed', JSON.stringify(report)); + report.requery = { matched: report.requery.matched, subpage: report.requery }; + reports.push(report); + results[id] = { status: 'completed', report, write_attempted: true, no_erp_write: false }; + } + }; + const background = readFileSync(new URL('../chrome-extension/ltjt-order-assistant/background.js', import.meta.url), 'utf8'); + vm.createContext(context); + vm.runInContext(background.slice(background.indexOf('async function executeHotelBatch('), background.indexOf('async function runAutoTask(')), context); + await context.executeHotelBatch('TASK', operation); + assert.equal(hotelBatch.inspect(final).allCompleted, true); + assert.deepEqual(reports.map(report => report.requery.subpage.checks.find(check => /^beizhu\d+$/.test(check.field)).actual), + ['酒店备注0', '用户独立备注', '酒店备注2']); + assert.equal(JSON.stringify(operation), before); +}); diff --git a/tools/hotel-update-selection.test.mjs b/tools/hotel-update-selection.test.mjs index cf5f8f7..3f42a8a 100644 --- a/tools/hotel-update-selection.test.mjs +++ b/tools/hotel-update-selection.test.mjs @@ -123,6 +123,19 @@ test('fresh ERP MAIN world resolves the reported 2027 hotel update using the act assert.equal(f.fields.get('riqis1').value, '2027-9-13'); }); +test('hotel replacement preserves the existing note unless the user supplies a new one', async () => { + for (const remark of [undefined, '明确的新备注']) { + const f = fixture({ onSelection(fields, slot) { fields.get(`beizhu${slot}`).value = '新酒店默认备注'; } }); + if (remark !== undefined) f.input.data.arrangement.changes.remark = remark; + const resolved = f.api.testResolveHotel(f.form, f.input); + assert.equal(resolved.ok, true, JSON.stringify(resolved)); + const applied = await f.api.testApply(f.form, resolved.operation); + assert.equal(applied.blockers.length, 0, JSON.stringify(applied)); + assert.equal(f.fields.get('beizhu1').value, remark ?? '保留备注1'); + assert.equal(f.fields.get('beizhu0').value, '保留备注0'); + } +}); + test('missing page date dependency is diagnosed before matching and never reported as zero ERP records', () => { const f = fixture({ omitDateMatcher: true }); const before = [...f.fields].map(([key, control]) => [key, control.value]); diff --git a/tools/lifecycle-contract.test.mjs b/tools/lifecycle-contract.test.mjs index 180746d..2b30272 100644 --- a/tools/lifecycle-contract.test.mjs +++ b/tools/lifecycle-contract.test.mjs @@ -1374,7 +1374,7 @@ test('passenger explicit server success is terminal without a post-save row requ assert.doesNotMatch(passengerBranch, /passengerRequery|verifyLifecycleOperation/); assert.doesNotMatch(background, /attemptAutomaticPassengerReconciliation/); assert.match(background, /名单已取得 ERP 明确成功响应,按业务规则确认录入成功/); - assert.match(platformApp, /REQUIRED_EXTENSION_VERSION = '0\.5\.190'/); + assert.match(platformApp, /REQUIRED_EXTENSION_VERSION = '0\.5\.191'/); }); test('uncertain lifecycle writes can only converge through a read-only plugin requery', async () => { @@ -1584,7 +1584,7 @@ test('lifecycle execution keeps the MV3 worker alive until the durable task sett assert.match(background, /arrangement_resource_candidate_data_missing/); }); -test('extension 0.5.190 keeps reload dormant unless its durable execution state is fully idle', async () => { +test('extension 0.5.191 keeps reload dormant unless its durable execution state is fully idle', async () => { const [background, bridge] = await Promise.all([ readFile(new URL('../chrome-extension/ltjt-order-assistant/background.js', import.meta.url), 'utf8'), readFile(new URL('../chrome-extension/ltjt-order-assistant/business-bridge.js', import.meta.url), 'utf8') @@ -2037,7 +2037,7 @@ test('delete guard distinguishes independent, shared child, and shared parent ro for (const operation of operations) assert.equal(plans.validateOperation(operation).ok, true, plans.validateOperation(operation).blockers.join('; ')); const mapping = JSON.parse(await readFile(new URL('../mappings/lifecycle.mapping.json', import.meta.url), 'utf8')); - assert.equal(mapping.current_extension_version, '0.5.190'); + assert.equal(mapping.current_extension_version, '0.5.191'); assert.equal( mapping.updates.order_update_independent.field_mapped_pending_live_validation['pax.child_no_bed'], 'ertrenshu' @@ -2421,10 +2421,10 @@ test('schema and browser adapters contain the v2 safety fields and no confirm ov assert.match(inpage, /`ys_danweiid\$\{index\}`, resolvedCustomerId/); assert.doesNotMatch(inpage, /product_customer_source_region|sourceRegionCheck|source_reference/); assert.doesNotMatch(teamBatchInpage, /product_customer_source_region|sourceRegionCheck/); - assert.equal(extensionManifest.version, '0.5.190'); - assert.match(inpage, /version: '0\.5\.190'/); - assert.match(teamBatchInpage, /version: '0\.5\.190'/); - assert.match(platformApp, /REQUIRED_EXTENSION_VERSION = '0\.5\.190'/); + assert.equal(extensionManifest.version, '0.5.191'); + assert.match(inpage, /version: '0\.5\.191'/); + assert.match(teamBatchInpage, /version: '0\.5\.191'/); + assert.match(platformApp, /REQUIRED_EXTENSION_VERSION = '0\.5\.191'/); assert.match(inpage, /function strictIsoDate\(value\)/); assert.match(inpage, /const startDate = strictIsoDate\(current\('riqi'\)\)/); assert.match(inpage, /const endDate = strictIsoDate\(current\('riqis'\)\)/);