1341 lines
129 KiB
Markdown
1341 lines
129 KiB
Markdown
# Current State
|
||
|
||
## 2026-09-18 — 按用户指定仓库整理最新代码交付
|
||
|
||
用户明确确认酒店由OHIP平台决定、本机核对OHIPSB02,生产切换时再调整;两条路径(接口数据、用户XML)并行且共用后续规则。
|
||
本次发布目标为https://git.nianxx.cn/shiyuyun/ARR-2.0-0918,初查无远端分支;保留原wyndham-ARR远端,不强推覆盖。
|
||
发布范围包括当前源码、处理器包、019迁移、模拟测试、接口参数清单和生产交付说明;本机私有凭据、原始业务响应、队列、输出、环境和规划目录不纳入。
|
||
README已明确两条入口及生产启用条件;发布验证和结果见任务记录。上传代码不等于生产部署,不启动新取数或重启当前服务。
|
||
本次发布前回归:146项Python(含独立临时PostgreSQL全流程)及9项JS全部通过,无跳过;JS语法及文档检查通过。发布方式为提交本地main后普通推送到新远端arr0918的main,并回读核对提交;原origin保留。
|
||
|
||
## 2026-09-18 — 接口传参清单已整理,供用户确认
|
||
|
||
按用户请求新增[实际传参确认单](../../ARR_OHIP_REQUEST_PARAMETERS.md):8接口的方法/路径/参数/来源/补查条件、页面到任务参数及酒店路由边界。
|
||
实际调用请求构造函数生成8份虚构示例,无网络、凭据读取或业务任务。没有改代码、规则或配置。
|
||
关键待确认范围已显式列明:预订列表只传到店日期/分页/排序,没有显式预订状态/分房状态;Comments没有额外内部备注开关。未传条件不能据此认定平台默认返回全部状态或备注。
|
||
房间日历未传预订ID(本地关联),套餐结束日为离店日;查不到预订当前结束采集并提示异常,不生成空日报。
|
||
接口开发完成结论保留,查询覆盖和真实返回验收仍待确认;本轮不自行扩大查询或触发取数。
|
||
|
||
## 2026-09-18 — 自动取数开发收尾完成
|
||
|
||
用户要求收尾并询问生产能否完成自动取数和报表处理。已整理[生产交付说明](../../deploy/OHIP_RELEASE_HANDOVER.md),明确开发/模拟/交互已完成,生产配置与首日真实数据验收待执行。
|
||
核对发现基础Compose尚未传三个OHIP参数/挂载私有目录,019需在018之后升级,独立月报worker需持续运行;固定平台/应用身份、酒店路由校验和booking_test数据库边界保留。
|
||
正式环境未提供,不擅自修改这些边界或启动部署。已纠正入口文档旧服务名和架构文档“尚未衔接处理”的过期说明。
|
||
2项部署入口检查通过,CLI参数核对通过;处理器zip/skill各8个关键文件与源码一致。本机无Docker,本次未构建生产镜像。未新增取数、停止原任务、重启服务或操作生产。
|
||
本阶段关闭。后续为正式环境配置,然后在有数据且开始验收时核对字段和报表,不再反复要求当前无数据沙箱出报表。
|
||
|
||
## 2026-09-18 — 字段接口接入已完成,用户说明测试环境无数据
|
||
|
||
用户明确当前测试环境无数据,现阶段无法核对实际结果,重点是确认字段对应接口是否接入。
|
||
只读核对代码:15字段由8个查询操作覆盖,日期参数、页面按钮、直接处理/日报/复核/月报均已衔接;团队读取权限此前已补齐。
|
||
状态为“接入完成,待有数据后验收”。测试环境无数据是用户提供的条件,本轮未自行查询或判断全平台数据状态。
|
||
不把实际报表结果核对作为当前必须推进事项,不新增/重试现有任务,不主动恢复实际取数验证。
|
||
|
||
## 2026-09-18 — 用户确认日期选择交互通过
|
||
|
||
用户明确反馈“OK了交互方式没问题”,本次页面内日历、运行中预选日期的交互验收关闭。
|
||
保留现有交互,后续关注用户已发起任务的状态和日报/月报结果;不得把交互确认当作实际取数成功或新增取数授权。
|
||
本轮仅记录验收,无代码、服务、任务或业务数据变更。
|
||
|
||
## 2026-09-18 — 日期选择与正在进行的任务分离
|
||
|
||
用户截图确认红框日历因原9/15任务运行而禁用,现允许预选下一日期,轮询保留用户所选值;仅提交瞬间短暂禁用日期。
|
||
运行中下载按钮仍禁用;不明结果/中断任务继续核对原编号、日期,继续按钮注明原日期。预选不会自动下载、改原任务或停止原任务。
|
||
原8875实际点日历→9/17成功,后续页面更新仍为9/17、进度仍为9/15;点日期文字也可展开。验证后恢复原显示日期,准备展开日历供用户操作。
|
||
9项JS提交/恢复检查与27项Python回归通过。没有新增或重试取数、重启服务、修改业务数据或委派。
|
||
下方“任务运行时锁定日期”的旧交互已由本条取代,任务身份与提交保护仍保留。[证据](../50-evidence/topics/2026-09-18-arr-calendar-selection.md)
|
||
|
||
## 2026-09-18 — 日期选不中已改为页面内日历并实际点选验证
|
||
|
||
用户明确故障出现在下载前,上次仅扩大原生点击区未解决,已撤回该完成结论。ARR日期框现使用页面内日历,保留YYYY-MM-DD、原日期校验及任务锁定,补充运行中/继续原任务的锁定原因。
|
||
独立只读8877中实际点击9/15、跨月点击8/31均更新输入值;键盘跨月和英文Report date点选成功。27项Python及5项JS检查通过。原8875已刷新加载新控件。
|
||
复查时已有用户06:13:51Z发起的9/15任务,原request_id保持、attempts=1,仍在获取;修复没有创建/重试/停止任务或重启服务。运行中日期锁定是正常状态,结束后可用新日历。不要再把“弹层打开”或fill改值当作鼠标选日验收。见[证据](../50-evidence/topics/2026-09-18-arr-calendar-selection.md)。
|
||
|
||
## 2026-09-18 — 修复Download ARR日期框难以点击
|
||
|
||
用户反馈日期点不动;确认日期未禁用,但仅小日历图标能打开选择器。已把原生日历点击区域扩大到整个日期框,保留原图标、日期编辑和任务锁定。实际浏览器点击文字/中部均打开日历,修改值可以保留;23项Python及5项JS检查通过。已刷新8875并恢复原日期2026-09-17,未查询订单、创建任务或重启服务,所需权限仍齐全。见[证据](../50-evidence/topics/2026-09-18-arr-date-click.md)。
|
||
|
||
## 2026-09-18 — 团队读取权限已补齐,OHIP下载按钮已启用
|
||
|
||
用户通知同事已完成授权。06:00:56Z运行既有check-access,仅读取开发身份、应用与密钥状态,返回ready=true、无缺项。应用现有blocks.read/configuration.read/finance.read/hotel.read/profiles.read/reservations.read;原密钥有效。额外hotel.read、finance.read由平台同事配置,ARR未调用,也未修改平台授权。
|
||
浏览器原8875页面刷新后显示“可下载所选日期的报表”,下载并处理按钮已启用,旧缺权提示消失。未重启服务、点击下载或实际查询酒店;当前任务数0、source归档不存在。
|
||
本机入口已就绪,本轮权限阻碍关闭。继续遵守不主动实际取数的要求,由用户在页面选择日期并主动发起。后续不要直接apply旧需求清单,以免覆盖平台已有额外权限。
|
||
见[开通证据](../50-evidence/topics/2026-09-18-arr-ohip-activation.md)。本轮仅配置状态及记录更新,无业务代码变化,无需重复离线测试。
|
||
|
||
## 2026-09-18 — 本机OHIP沙箱入口配置完成,等待团队读取权限
|
||
|
||
用户授权配置连接后,本机8875已切换为OHIPSB02的OHIP数据来源,沿用原登录信息;新私有本机库/对象/队列,原模拟实例完整保留。页面已登录核对,人工XML入口保留;没有真实查询任务。
|
||
平台现有configuration.read、profiles.read、reservations.read,缺blocks.read;开发身份无法在保留configuration.read的同时apply完整权限,403 capability_ceiling_exceeded。未修改授权、删除旧权限或签发新密钥。
|
||
用户已转达同事,并表示加好后通知。当前下载按钮暂停并显示具体原因;其余本机配置完成。收到通知后执行local_ohip check-access,仅核对权限并恢复按钮,禁止顺带实际取数。
|
||
7项新增及相关回归共37项通过(含本机真实隔离数据库,无skip);实际启动/登录/页面验证通过,零酒店业务调用。
|
||
没有子智能体、远程业务库/OSS或8873/8874操作。新运行目录和恢复方式见[本轮证据](../50-evidence/topics/2026-09-18-arr-ohip-activation.md),[给平台的说明](../../integrations/ohip/PLATFORM_ACCESS_REQUEST.md)。
|
||
|
||
## 2026-09-18 — 用户确认交互验收通过
|
||
|
||
用户在本机8875登录恢复后确认“ok交互没问题”。记录为新增按日期获取入口的页面交互验收通过。
|
||
当前交付状态:15字段接口接入、直接数据处理、原规则复用、价格复核及日报/月报已完成开发和本机模拟验证;
|
||
使用说明及运行配置已整理。下一阶段为目标运行环境的配置与启用安排,不重复调整已确认的交互。
|
||
此确认不扩展为实际沙箱取数验证或正式上线批准;原“跳过实际取数验证”要求继续有效。
|
||
本轮仅更新项目记录,无代码、运行实例、业务数据或平台调用变化。
|
||
|
||
## 2026-09-18 — 本机8875登录连接恢复
|
||
|
||
用户看到Failed to fetch;确认8875无监听,Web进程已退出,原测试数据库仍运行。仅核对并停止本实例遗留的数据库进程,保留全部记录后恢复。入口现由用户会话launchd后台运行,标识com.arr.local-direct-data.8875,配置在实例service.plist;不依赖对话执行进程。后台需LC_ALL=C/LANG=C,否则本机PostgreSQL启动时报locale/thread错误;已配置。未安装系统或开机自动启动项。
|
||
|
||
核验:healthz200、使用现有login.json登录200、认证会话200;原任务仍succeeded,Oracle连接false。未新增业务任务、未重新取数、未操作8873/8874。未修改应用代码。
|
||
|
||
## 2026-09-18 — 接口数据已直接接入按钮、复核与报表
|
||
|
||
按用户“继续”完成直接数据处理:选日期→15字段查询→共用筛选/去重/定价→独立核对→日报、价格复核、Finance及月报。
|
||
不生成中间XML;原XML入口保留。新来源明确为source_data/ohip_json,结果5.0,处理器4.2.0;XML4.0及旧3.0兼容保留。
|
||
迁移019仅在独立本机库使用,正式启动会检查迁移;正常OHIP启动需显式三项配置,构造服务不实际取数。
|
||
最终137项整体验证(含12项新入口检查,其中4项真实独立本机数据库)及83项相关回归、5项JS检查全部通过。
|
||
浏览器真实点击成功:6笔模拟订单/总额18200、日报/月报下载、刷新和服务重启恢复、桌面/手机、人工上传可用。
|
||
新演示页8875运行中,登录信息在私有实例login.json;不连接Oracle。原8873/8874未重启或重置。
|
||
未实际查询酒店、读取平台凭据、扩大权限、上线,未创建子智能体。已从“待开发加工衔接”推进到本机可体验。
|
||
见[入口说明](../../arr_web/DIRECT_DATA_ENTRY.md)、[ADR-007](../10-decisions/ADR-007-direct-ohip-data.md)、
|
||
[验证与实例信息](../50-evidence/topics/2026-09-18-arr-direct-processing.md)。
|
||
接下来为用户体验反馈和明确环境启用;不自行恢复实际订单验证。
|
||
|
||
## 2026-09-18 — 15 字段取数入口已实现(无实际订单验证)
|
||
|
||
用户要求直接接接口、跳过实际取数验证。新增 `integrations/ohip/arr_data.py` / `data_client.py`,
|
||
按单日查询预订并补查所需公司、主客、日价、团队、房间历史和套餐,直接输出15字段JSON,不生成XML。
|
||
明确区分有值/空/缺失/多候选/失败;保留多值原文和响应出处;完成请求可固定复用,失败重试保留旧尝试。
|
||
41项新增本机检查及相关回归共150项通过,含loopback HTTP、6笔样本原有定价函数结果(总额18200)。
|
||
没有实际酒店请求、凭据读取、授权变更、数据库/OSS写入、子智能体或运行实例操作。
|
||
现有页面执行器仍走XML;当前已交付取数程序,下一步是直接数据处理及其校验/复核/入库衔接,再连接页面。
|
||
不再把下一步写为“先验证真实订单”,除非用户后续改变这条要求。
|
||
见[使用说明](../../integrations/ohip/DATA_SOURCE.md)和[实施证据](../50-evidence/topics/2026-09-18-arr-data-interface.md)。
|
||
|
||
## 2026-09-18 — 当前重点:按字段接通 OHIP 数据入口
|
||
|
||
用户明确保留人工 XML 上传,同时新增按所选日期查询 OHIP 数据、直接按相同业务规则处理的入口;
|
||
不再以取得或重建 XML 为前提。当前优先事项是按 `ARR_XML_RAW_FIELDS.md` 接通对应接口,
|
||
自动入口共 15 个业务字段,Trace 不获取。公开目录/接口说明实时核对为 0.11.0、184 项操作,
|
||
预订、日价、档案、房间历史、团队及套餐查询均已列出;这不代表本轮实际沙箱字段取数通过。
|
||
[逐字段对接表](../../ARR_OHIP_FIELD_MAPPING.md)记录现有取值、组合查询及待验证项。
|
||
本轮仅新增对应表与项目记录,无酒店业务调用、权限修改、代码或运行实例变更。
|
||
后续按字段验证和补齐取数,不把历史 XML 显示等价条件作为所有数据入口工作的前提。
|
||
|
||
本对话沟通约定:使用产品语言,每次沟通末尾说明下一步;默认独立完成。
|
||
只有预计大幅提升效率时才可征求子智能体许可,得到用户同意后原则上最多创建一个。
|
||
|
||
## 2026-09-18 — 本地模拟数据补充
|
||
|
||
用户正在评估通过业务接口取数后按 ARR 规则加工,并要求补造部分测试数据。已新增独立的
|
||
[`arr_api_synthetic`](../../tests/fixtures/arr_api_synthetic/README.md) 数据包:6 条正常样本、8 种异常场景。
|
||
现有加工函数已核对 6 条正常样本及 3 种异常;另 5 种仅有样本和预期要求,尚未验证接口接入实现。
|
||
这不代表 Oracle 接口、完整 Excel 链路或真实取数规则已通过。未写入 Oracle、OSS、数据库,未操作 8874。
|
||
下一步是离线验证接口数据接入加工层,再以测试酒店实际返回验证关联规则;不继续把模拟结果作为原生下载证据。
|
||
本条为新增离线数据的进展说明,下方历史核验记录保留。详见[核对范围](../50-evidence/topics/2026-09-18-arr-synthetic-business-data.md)。
|
||
|
||
## Current Focus
|
||
|
||
|
||
Room-type continuation: official Oracle ROOM_CATEGORY_LABEL definitions support the room-type code, and all139 captured
|
||
records agree at search/current/arrival-day levels. Added strict selection (fields/v3, preparation/v4),4 new/98 scoped
|
||
checks and independent139-row comparison pass. Other candidate fields and oldfacts are byte/structure unchanged.
|
||
No dictionary query needed. Package22 records/30 items include8 multi-package records; all60 schedule dates coincide,
|
||
so timing/combination rules remain unproved. Search24 Group names match exact Profile IDs in detail; no missed company
|
||
or travel-agent role was found. No hotel requests/agents/8874 changes. No user reconfirmation needed for this authorized
|
||
technical work. See [room/package/company evidence](../50-evidence/topics/2026-09-17-arr-room-type-and-package-scope.md).
|
||
|
||
|
||
|
||
Existing-source correction:26 of139 RSV records already carry typed `BlockCode` alongside the separate Block ID.
|
||
Search/arrival-day identities and codes all agree (4 blocks);113 missing block objects remain explicit gaps.
|
||
`source_fields/v2` and preparation/v3 now select those codes, with9 new/94 scoped tests and independent139-row offline
|
||
comparison passing. Old field-facts bytes/native XML/851-file archive unchanged. No getBlock calls or permission expansion
|
||
needed for these26. Real adapter/validator still pending; recording8874 untouched. See
|
||
[typed BlockCode evidence](../50-evidence/topics/2026-09-17-arr-typed-block-code.md).
|
||
|
||
|
||
User confirms the technical request has been sent to platform developers. Await their diagnostic/evidence reply;
|
||
do not ask for another forwarding or infer the agent sent it. Independent button/local simulation work and identified
|
||
backend fixes are complete. Remaining actual-source mapping/integration depends on those specific inputs. Keep8874
|
||
unchanged; no repeated polling/audits or speculative code while evidence is unchanged. On a reply, assess which gaps
|
||
it closes, complete supported mappings and independently validate them in a separate instance.
|
||
|
||
User asked whether source evidence needs manual confirmation, then continued the responsibility triage. Clarified:
|
||
no new user business decision is currently pending; existing date/GEN/Trace choices stand. ARR owns mapping, independent
|
||
validation and integration; platform/test-environment owners supply diagnostic results and applicable same-source
|
||
evidence. Prepared the [technical request](../../integrations/ohip/arr-platform-evidence-request.md) with existing
|
||
request IDs and closure criteria; [source handoff](../../integrations/ohip/real-source-handoff.md) now separates owners.
|
||
No new hotel/public-network calls, code/tests, agents, messages or recording-instance changes in this clarification.
|
||
Next obtain specific evidence, resolve mappings and verify separately; no per-download source-confirmation step added.
|
||
|
||
Fixed a real PostgreSQL/Web failure-receipt mismatch found during source handoff review: rejected audit IDs were
|
||
misread as invalid Finance success evidence, leaving definite failures interrupted/retryable. Receipt conversion now
|
||
accepts the rejection ID with null version number;46 scoped tests including9 real disposable SQL cases pass.
|
||
No live8874 change/restart or new hotel call. Interface task has returned a dependency handoff, not a real adapter;
|
||
next requires sufficient source/report evidence before isolated actual-source integration. See
|
||
[failure-receipt evidence](../50-evidence/topics/2026-09-17-arr-rejected-receipt.md).
|
||
|
||
Real-source task handoff audit: current public catalog remains0.9/158;getBlock/getRoomTypeInfo/getPackage definitions
|
||
are published.4 public reads/0hotel requests. Real adapter and independent mapping validator are still not delivered:
|
||
name/historical-room/company/report inclusion-order semantics lack sufficient evidence; no guessed blanks, mock imports
|
||
or always-refusing placeholder added. The fixed139-row sandbox batch also has115non-whitelist/24missingrate codes,
|
||
so it cannot be a successfulFinance positive even after mapping completion. Minimal external dependency and component
|
||
restart boundary are in [real-source handoff](../../integrations/ohip/real-source-handoff.md). No code or8874 recording
|
||
instance changes; user must not be told actualARR is ready. See [audit evidence](../50-evidence/topics/2026-09-17-arr-real-source-delivery-gap.md).
|
||
|
||
User reconfirmed interaction acceptance and continued backend work. Explicit standard-Web source assembly is now
|
||
implemented with shared upload processing dependencies, pinned pre-dispatch source identity and orderly queue/storage
|
||
shutdown. Local owner shutdown race reproduced and fixed.91 distinct scoped tests pass, including3 owned SQL cases;
|
||
default CLI remains source-unconfigured. Source task has no new real adapter/validator delivery. No changes to the
|
||
running recording page/data, hotel calls, deployment or agents. Next actual-source mapping/independent acceptance,
|
||
then explicit source injection and bounded real-data integration. See [runtime evidence](../50-evidence/topics/2026-09-17-arr-download-runtime.md).
|
||
|
||
User accepted the ARR button interaction and requested a clean customer recording start. Local8874 was cleared with
|
||
a recoverable cold backup:6 prior tasks/6 daily/432 records/6 monthly are archived, current queue/SQL histories now0.
|
||
Same source fixture/date9/15 and login credentials; service ready, browser authenticated on empty daily page.
|
||
Do not submit another test before the user records. See [cleanup evidence](../50-evidence/topics/2026-09-17-arr-recording-cleanup.md).
|
||
Earlier integration counts below describe completed historical acceptance, not current live records.
|
||
|
||
The existing ARR card is now browser-integrated against local API8874: unavailable-date lock reproduced/fixed,
|
||
then9/15 double-click→one new152-call capture→61 retained→daily/monthly downloads. Reload and same-request replay
|
||
keep the same job. SQL totals changed from1 to2 versions/events/monthlies and72 to144 records, preserving the earlier
|
||
run; all61 new monthly formulas verified.5 new JS and34 regression tests pass. No subagents, Oracle calls or production
|
||
changes. The working page remains open. Next: user acceptance of this local button flow, followed by actual-source
|
||
mapping/acceptance when available. See [button integration evidence](../50-evidence/topics/2026-09-17-arr-button-api-integration.md).
|
||
|
||
Local API simulation is now separately usable at127.0.0.1:8874 (sidebar logged in). XML-derived72-row fixture →
|
||
152 actual loopback HTTP calls → generated processingXML/native comparison →61retained/11excluded → one isolatedSQL
|
||
version/event/monthly. Daily cells match native replay except user-excludedTraces; monthly61formulas pass. Restart
|
||
preserves results.91 scoped tests and real browser desktop/mobile/download/restart pass. No platform calls/agents or
|
||
booking/production changes. Native replay8873 remains available. Local full-flow/button milestone explicitly notified;
|
||
actual Oracle fullARR acceptance remains pending. Initial one-run acceptance is preserved below; the subsequent
|
||
button integration above adds one explicit fresh run while keeping Oracle source semantics acceptance separate.
|
||
See [API simulation evidence](../50-evidence/topics/2026-09-17-arr-local-api-simulation.md) and
|
||
[button/operator guide](../../arr_web/LOCAL_API_SIMULATION.md).
|
||
|
||
Isolated native XML replay is now usable at127.0.0.1:8873, sidebar browser logged in. Exact72-row9/15 XML processed
|
||
with current policy into61 retained/11 excluded; actual SQL confirms one version/event/monthly run; downloads and61
|
||
monthly formulas verified. Restart preserves same results.9 new+75 related tests pass, browser desktop/mobile passes.
|
||
Explicit local banner/cookie/filename prefix and separate owned private socket-only PostgreSQL/objects. No hotel calls,
|
||
agents, production settings or booking simulator changes. This is the local button milestone, not complete API ARR.
|
||
See [replay evidence](../50-evidence/topics/2026-09-17-arr-local-xml-replay.md) and [entry guide](../../arr_web/LOCAL_XML_REPLAY.md).
|
||
|
||
User clarified the booking project's current business execution is a local simulated hotel, not Oracle sandbox.
|
||
Read-only CP31/CP33 docs confirm that distinction and warn its in-process hotel state is lost if rebuilt. Recommend an
|
||
isolated ARR local instance for native XML replay and separately labelled API simulation; do not reset/share the active
|
||
booking instance implicitly. At that clarification checkpoint no import had occurred; the later replay result is above.
|
||
Earlier ARR platform captures remain separate evidence.
|
||
See [shared-hotel context](../50-evidence/topics/2026-09-16-shared-hotel-rsvn-context.md).
|
||
|
||
The ARR platform live-read target isOHIPSB02 sandbox. Calendar200 withoutroom is a data/coverage unknown,
|
||
not a diagnosed platform defect; do not frame platform repair as a prerequisite for every remaining development task.
|
||
Separate callable-contract, sample-coverage and real-report acceptance. Continue local/sandbox-contract integration where
|
||
possible;57106 XML cannot demand matching sandbox records.503 remains a real call failure. No readiness flags changed.
|
||
Authoritative boundary: [source contract](../40-domain/arr-source-report-contract.md#当前沙箱与验收边界).
|
||
|
||
Room/calendar continuation:13 new/71 scoped tests pass for bound single-page evidence, exact reservation/hotel joins,
|
||
all room occurrences/moves, original time zones and missing-vs-empty distinction. Existing3 responses still omitroom;
|
||
851 main files/17 probe files/nativeXML verify unchanged. Native72 ROOM_NO=DISP_ROOM_NO;10 CKOT also equalLAST_ROOM,
|
||
so fallback/selection rule remains unproved. Official pinned Postman example has reversed dates/no responses and does
|
||
not verify assignment defaults. No new hotel/credential/delegation/runtime actions. See
|
||
[room evidence](../50-evidence/topics/2026-09-17-arr-room-calendar-evidence.md). Need actual room-bearing responses plus
|
||
same-source semantics; completeARR/button milestone pending. Do not retry solely on elapsed time.
|
||
|
||
ARR name dependency correction: completev2 main captures are independent ofsearchProfiles. Added separately pinned
|
||
profile supplements, bounded failure/deferred gaps, chain-verified reuse of good names and retry of only missing profiles.
|
||
Connected optional supplements to local candidate preparation; oldv3/replay and default runtime stay unchanged.
|
||
131 scoped tests pass,12 new.139-row/851-file base,72 failedv3 files,14 earlier probe files and nativeXML verify unchanged.
|
||
No hotel calls/credentials/delegation. Direct display-name formatting remains sample evidence, not report acceptance.
|
||
See [decoupling evidence](../50-evidence/topics/2026-09-17-arr-profile-decoupling.md).
|
||
Next: use repaired/new evidence for bounded name/room checks and source acceptance; completeARR/button notice pending.
|
||
|
||
Local XML-upload improvement completed: processor4.1.0 ignores recognized emoji in text and narrowly recovers CESU-8 emoji while retaining original source bytes/hashes. Original71052877 now passes with4 ignored/67 retained;71052708 remains100.122 distinct Python/3 JS checks verified, including independent replay and frozen legacy behavior. Not deployed to the remote ARR runtime. See [emoji cleanup evidence](../50-evidence/topics/2026-09-17-xml-emoji-cleanup.md).
|
||
|
||
Latest reported-repair verification: catalog0.9.0/158(+43), getRoomCalendar now published under existing read permission.
|
||
Six business reads/own audits: original failed profile still503/25004ms;3 calendar200 responses are metadata-only with
|
||
no room/page/hotel totals;2 exact zero-night CheckedOut summaries match identities/dates but still lackroomId/shared=false.
|
||
No full-day restart, permission/key/runtime/production change. User explicitly approved1 read-only catalog reviewer under
|
||
new ask-first/normally-one policy for today.851+72 old files/native XML unchanged;21 new probe files privately verified.
|
||
[Current evidence](../50-evidence/topics/2026-09-17-arr-platform-recovery-recheck.md) and [platform request IDs](../../integrations/ohip/platform-recovery-check-20260917.md).
|
||
Next upstream failure/empty-calendar diagnosis; completeARR/source acceptance and button milestone remain pending.
|
||
|
||
Overnight continuation: delivery now checks the caller's complete capture binding/current policy before destination
|
||
writes; shared job and package identities reject numeric JSON type aliases. Executor collection/page limits are explicit,
|
||
validated and frozen.112 distinct scoped tests pass:38 batch,65 executor/handoff,2 package/recovery and7 real isolated PostgreSQL scenarios. v3 lost-COMMIT recovery makes no new profile reads and keeps one version/outbox event. No hotel,
|
||
network, credentials, production writes/runtime activation or subagents. See
|
||
[delivery and bounds evidence](../50-evidence/topics/2026-09-17-arr-delivery-context-and-bounds.md).
|
||
Remaining work needs profile recovery, reservation-bound historical rooms and same-source report semantics; it is not
|
||
only503. No new request for user materials. Full actual ARR/button milestone remains pending.
|
||
|
||
User requests all work independent of503 without repeated questions; no subagents. Completed integrated16-field source
|
||
preparation and opt-in v3 executor/profilebudget with typed immutable request identity.237 scoped tests pass (212 source,
|
||
25 executor). Real139 records retained:139 confirmations/dates/counts/notes,115 codes,73 agreed rooms,134 rates;
|
||
allrows keep unresolved display gaps.851+72 original files/native XML unchanged. Only2 public catalog reads, no hotel
|
||
calls/credentials or production/runtime activation. Catalog115ops/getRoomCalendar404 unchanged. See
|
||
[offline preparation/v3 executor](../50-evidence/topics/2026-09-17-arr-offline-preparation-and-v3-executor.md).
|
||
Next external repair/historical-room/same-source evidence, then accepted mapping and runtime wiring. The local candidate
|
||
preparer is not an adapter/independent business validator; completeARR/button milestone remains pending.
|
||
|
||
Latest independent work connects completev3 name captures to versioned field evidence and native comparison.19 new
|
||
cases/198 scoped tests pass; verifier independently derives raw Primary Profile joins and successful request provenance.
|
||
Missing query/field/blank stay distinct; exact and trimmed display names are separate observations. Replay rejects
|
||
JSON boolean/number aliases. Old139-row evidence is byte-identical;851 old and72 failedv3 files/native XML unchanged.
|
||
Five real names support primitive checks only; failedv3 remains rejected and no full ARR was produced. User has shared
|
||
503 diagnostic with platform. No new API/credential/Finance/runtime activity or subagents this round. See
|
||
[named evidence](../50-evidence/topics/2026-09-17-arr-named-field-evidence.md). Continue independently under the latest
|
||
no-subagents instruction; next recovery evidence/bounded acquisition and remaining historical-room/source acceptance.
|
||
|
||
Latest user“继续”authorized the concrete one-batch scope (139 reservations/112 profiles, OHIPSB02/2026-09-15).
|
||
The v3 live attempt stopped after23 requests:19 HTTP200/4 profile503, all matched own-app audits.139 search candidates,
|
||
6 successful details/rates,5 valid names; the6th primary profile exhausted3 attempts. Another profile recovered503→200.
|
||
Errors are auditedohip_unavailable/~25s/internal retry2, not a proved root cause.72 new private capture files verify;
|
||
complete-archive reader rejects this failed batch. No new whole attempt, delegate, code/grant/runtime or Finance write.
|
||
See [live failure](../50-evidence/topics/2026-09-16-arr-named-day-live-failure.md) and refreshed
|
||
[platform diagnostic](../../integrations/ohip/profile-summary-platform-check.md). User has since shared it; the agent has not sent it.
|
||
|
||
Bounded v3 name capture/replay/batch reuse retains the217-test local baseline. Original3 real responses pass offline;
|
||
139 old reservations contain112 profiles,851 originals/native XML unchanged. Next platform503 diagnosis/repaired full-day
|
||
acquisition and source acceptance; completeARR/button milestone pending. Latest2026-09-17 user instruction prohibits
|
||
subagents for subsequent work, superseding the earlier one-agent preference. Continue independently.
|
||
|
||
Earlier user-authorized22:21 profilePOST recheck succeeded for all3 original people: HTTP200, audit agreement, matching
|
||
Profile IDs/Primary name components and nonblankfullName. nameType is absent; GET not retested.503 was then considered
|
||
recovered for those samples; the later full-day failure above reopens platform investigation. See [recovery success](../50-evidence/topics/2026-09-16-arr-profile-recovery-success.md).
|
||
|
||
Independent work also fixed freeze-before-ready recovery with a durable pre-rename intent pin; full byte/context checks
|
||
precede ready repair, old unpinned packages stay rejected, completed legacy packages work. Added early cumulative archive
|
||
budget checks and bounded failure finalization.164 distinct scoped tests pass;139 records replay offline/851 originals
|
||
and native XML unchanged. Two newly authorized read-only reviews completed; no concurrent Web code/runtime changes.
|
||
Room-calendar public catalog recheck remains404. Next bounded name-collection integration and historical-room/source
|
||
acceptance; completeARR/button milestone pending. See [freeze recovery](../50-evidence/topics/2026-09-16-arr-freeze-recovery.md)
|
||
and [acquisition budget](../50-evidence/topics/2026-09-16-arr-acquisition-budget.md).
|
||
|
||
Earlier21:55 profile recovery recheck: user reported503 might be fixed; one exact-ID POST for the first of the previously
|
||
approved3 people still returned503/ohip_unavailable at2026-09-16 21:55 Asia/Shanghai. Edge audit confirms25009ms and
|
||
internal retry_count2; client made1 attempt with40s deadline and received the error in26.93s. Stopped before other2/GET.
|
||
851 capture files/native XML unchanged; no code/permission/runtime change or full ARR output. Next platform investigation
|
||
should use request ID`acea6692-25d7-4711-bcb6-3cd5916e3f5c`, then recheck the same sample upon new recovery evidence.
|
||
See [recovery evidence](../50-evidence/topics/2026-09-16-arr-profile-recovery-recheck.md).
|
||
|
||
Previous continuation consolidated the [minimal platform handoff](../../integrations/ohip/arr-platform-next-actions.md):
|
||
repair profile-summary503 (user says not repaired/unknown), and verify reservation-bound historical rooms for2 captured
|
||
CheckedOut zero-night/non-pseudo records lacking room values. Native10 CKOT rows retain display/last room, but are another
|
||
hotel, not paired proof. Suggest getRoomCalendar read/equivalent; company display needs same-source evidence, not another
|
||
blind API addition. No hotel retry/code/delegation;851 capture files/native XML unchanged, complete ARR still pending.
|
||
See [follow-up evidence](../50-evidence/topics/2026-09-16-arr-minimum-platform-followup.md).
|
||
|
||
Room/profile source agreement is implemented: matching reservation/hotel/day before three explicit room values,
|
||
and caller-selected role/internal Profile ID/raw-name agreement across reservation/day layers.10 new/133 tests pass;
|
||
139 offline rows give73 room agreements and24 Group agreements despite external-ID differences.1 current/search-only
|
||
room and65 missing all room fields remain distinct; company absence is not inferred from missing association containers.
|
||
851 originals unchanged. Public catalog getRoomCalendar exact lookup404; Oracle schema offers room-history/segments
|
||
as a candidate to assess, not a proven required extension. No hotel calls/delegation/Web activation or complete ARR.
|
||
See [room/profile evidence](../50-evidence/topics/2026-09-16-arr-room-profile-selection.md).
|
||
|
||
Source selectors now also preserve all exact GEN/RESERVATION text, select equal explicit stay/day adult/child counts,
|
||
and expose arrival-day raw numberOfUnits without asserting report share semantics.10 new/123 scoped tests pass;
|
||
139 real offline records agree with the independent comparator,851 originals unchanged.29 records contain30 GEN notes,
|
||
including3 internal;1 multi-note record is order-sensitive for first note/Group Code. No report-order inference or
|
||
whole-batch business gate added. No new hotel calls, delegation, Web change or complete ARR output. Next narrow company
|
||
and room source rules while profile summaries await recovery. See [note/count evidence](../50-evidence/topics/2026-09-16-arr-note-count-selection.md).
|
||
|
||
Direct source selectors now implement typed confirmation, explicit stay dates, strictly single-day rate codes, bound
|
||
raw Decimal rate/currency and empty Trace.12 new/91 scoped tests passed;139 pinned rows yield139 confirmations/dates,
|
||
115 codes (24 missing),134 prices (3 hidden/2 missing currency);851 originals unchanged. No XML/source acceptance.
|
||
User approved profiles.read and at-most3 primary guests. Acknowledge/validate/apply/read-back completed on the same
|
||
application and original key, preserving reservations.read. The single-profile summary helper has9 new/100 scoped tests.
|
||
Three POSTs and one same-person GET control all failed with audited503/ohip_unavailable after~25s; no name data verified.
|
||
Private originals/inventory and851 earlier files unchanged. No more approval needed for this permission; platform
|
||
endpoint recovery and later verification remain. No automatic monitor/retry, fourth guest, Finance or Web activation.
|
||
See [probe evidence](../50-evidence/topics/2026-09-16-arr-profile-summary-probe.md) and
|
||
[platform diagnostic handoff](../../integrations/ohip/profile-summary-platform-check.md).
|
||
|
||
User now explicitly says Trace is not needed. API-source output should supply an empty Trace list; Trace filter/order
|
||
acceptance is removed from the remaining blockers. Manual XML/history/generic serializer remain unchanged. Sort choice
|
||
was not supplied; the native72-row sample has no room/date duplicates, so do not keep asking the user about unfamiliar
|
||
settings. Offline capture coverage:115 present non-whitelist rate codes,24 missing,0 matching the hotel's unchanged rules;
|
||
851 files intact. No additional material requested now. See [triage](../50-evidence/topics/2026-09-16-arr-input-gap-triage.md).
|
||
|
||
User requests a separate notification once complete ARR data can be produced for button integration. This milestone is
|
||
pending and tracked in commitments; do not confuse candidate or synthetic output with complete API ARR.
|
||
Explicit-row XML serialization and independent structural/value verification are now implemented, matching the existing
|
||
25MiB handoff limit.13 new tests and37 related cases pass across scoped runs. Native72-row projection retains58 notes/31
|
||
traces and produces identical processing semantics (61 retained/11 excluded); originals/baseline unchanged. Accepted API
|
||
row/field mapping is still missing; no Web/runtime/Finance enablement. See
|
||
[output evidence](../50-evidence/topics/2026-09-16-arr-xml-output-boundary.md).
|
||
|
||
Offline source-field evidence is implemented for all139 pinned v2 records:16 target columns plus raw context, exact
|
||
types/Decimal values, missing/null/empty/multiple observations and original response/request provenance. A separate verifier
|
||
independently enumerates raw sources and paths;16 new/140 scoped tests pass.851 original files remain unchanged.
|
||
This is the foundation of source adaptation, not an accepted XML adapter/validator or Web runtime dependency; all business
|
||
readiness flags remain false. Resv.-GEN confirmation remains closed. Two explicitly authorized read-only reviewers completed
|
||
their checks; concurrent Web/PG code was untouched. See [evidence](../50-evidence/topics/2026-09-16-arr-source-field-evidence.md).
|
||
|
||
Download readiness now recovers from initial connection failure or service unavailability without a page reload. GET-only
|
||
checks preserve the selected date and saved request, coalesce, pause when hidden and resume on online/visibility events.
|
||
9 browser interaction tests and34 existing Web/auth/layout tests pass. No styling/source/runtime activation change; see
|
||
[reconnection evidence](../50-evidence/topics/2026-09-16-arr-download-reconnection.md).
|
||
|
||
Real PostgreSQL15.19 transaction acceptance now passes6 isolated cases: actual executor commit, concurrent exact delivery,
|
||
connection loss after COMMIT/restart replay, atomic rollback, manual-review completion and monthly/outbox replay uniqueness.
|
||
The private Unix-socket cluster used current008–018 schema and synthetic source/local objects, then was stopped and removed.
|
||
This does not enable real API sources/runtime. See [PostgreSQL acceptance](../50-evidence/topics/2026-09-16-arr-postgres-download-acceptance.md).
|
||
|
||
Explicit-date `CapturedARRExecutor` now connects v2 capture/replay, injected adaptation/independent mapping validation and
|
||
frozen processing.10 new synthetic orchestration tests pass, including checkpoints before delivery and recovery without
|
||
recapture after lost commit acknowledgement. No real source adapter/validator is supplied and no runtime is enabled.
|
||
See [executor evidence](../50-evidence/topics/2026-09-16-arr-web-capture-executor.md).
|
||
|
||
User accepted the card styling. Added strict frozen-delivery-to-Web outcome conversion and seven synthetic cross-module
|
||
tests;62 scoped tests pass, including lost-ack restart/replay and manual-review completion without recapture. Source mapping
|
||
and real execution remain unwired; this does not enable the download button. See
|
||
[Web handoff evidence](../50-evidence/topics/2026-09-16-arr-web-frozen-handoff.md).
|
||
|
||
Local UI preview entry was repaired on2026-09-16 after the raw `file://` HTML failed to load `/assets` and `/api`.
|
||
Run `.venv/bin/python -m arr_web.preview` and open `http://127.0.0.1:8872/`; this separate loopback-only runtime has
|
||
an explicit read-only banner, empty history and unavailable business services. The HTTP page was opened and visually
|
||
verified in the in-app browser;13 preview/auth/server tests pass. Production authentication and runtime are unchanged.
|
||
|
||
The single-day Web download card and durable task boundary are now implemented locally; the real executor remains
|
||
unwired/unavailable. See [card evidence](../50-evidence/topics/2026-09-16-arr-download-card.md) and
|
||
[executor handoff](../../arr_web/ARR_DOWNLOAD_HANDOFF.md).77 focused tests and10 synthetic browser checks pass;15 final
|
||
locale/viewport layouts pass. The UI suggests yesterday but submits an explicit selected date; the collector receives
|
||
equal fixed dates and never infers a missing date. No hotel/Finance/OSS call, deployment or delegation occurred here.
|
||
|
||
|
||
ARR2.0 owns the deterministic XML-to-Finance path and the complete post-commit monthly publication path. The user
|
||
uploads XML once. After an accepted Finance commit, a dedicated worker consumes the durable outbox event, derives the
|
||
month and “更新至” watermark from committed `ARRIVAL` facts, publishes a validated workbook, and records a durable
|
||
download identity.
|
||
|
||
The company-channel detail generator now separates generation permission from calendar completeness: a current-month
|
||
or historical C/O period can be generated from the current committed Finance snapshot, while future report months stay
|
||
blocked. A not-yet-ended period keeps its fixed C/O cutoff and must be rerun after later source facts arrive if the final
|
||
workbook needs those facts. Duplicate publication of the same semantic snapshot is idempotent: the first validated
|
||
archive/result pair remains authoritative even if a retry rebuilds different XLSX bytes.
|
||
|
||
Monthly and company-channel XLSX generation is now Web/container deployable with Python/openpyxl only. The monthly
|
||
builder preserves sheet/header/row/formula/semantic validation, including `=R[row]*C[row]*G[row]`; the company builder
|
||
preserves its no-formula contract. Both publishers upload new workbook and `result.json` objects through the existing
|
||
immutable OSS adapter, while download routing retains controlled-local compatibility for historical records and keeps
|
||
`.web-jobs` queue state local.
|
||
|
||
## Accurate Native XML And Note Selection Confirmed On 2026-09-16
|
||
|
||
- User supplied res_detail_71054429.XML, explicitly accurate with page Note Types=Resv.-GEN. It is byte-identical to
|
||
res_detail_71050118.XML:354839bytes, SHA2565c87ab6f2483b2244e98e47bb792080ef4aca9036568638842116b246ac97438.
|
||
- XML lines91/93 contain RES_COMMENT_TYPE=CAS and RES_COMMENT_DESCRIPTION=GENERAL;58 notes share these metadata values.
|
||
These are internal XML fields, not evidence the user selected a different page option. Earlier wording implied a
|
||
business-selection discrepancy without sufficient basis; corrected. Baseline and page-selection confirmation is closed.
|
||
- Existing72-row/61-retained processing baseline remains applicable to the same bytes; no unnecessary rerun, business
|
||
submission or runtime change. Same-hotel/date API equivalence remains separate, as API is OHIPSB02 and native file57106.
|
||
- Next continue mapping the confirmed Resv.-GEN requirement to API data; do not ask again or replace it with CAS/all notes.
|
||
[Exact evidence and lines](../50-evidence/topics/2026-09-16-confirmed-native-arr-notes.md).
|
||
|
||
## ARR Display Contract Follow-Up On 2026-09-16
|
||
|
||
- Extended source comparison to42 independent hypotheses with company display prefixes and rate-day guest-count layers;
|
||
native-only privacy-safe summaries can run without a comparable API pair.40 tool tests/87 scoped tests pass.
|
||
- Native57106 XML:65 T-prefix company names,6 C-prefix,1 blank;71 names contain commas; room text ascends but all72 ROWNUMs
|
||
differ from physical position.58 notes are CAS/GENERAL, with no export parameter block. None proves role priority or sort settings.
|
||
- API139 reservations have equal valid stay/day adults and children;851 files and native XML remain unchanged. No hotel
|
||
call, business write, runtime change or delegation. Catalog0.7 public read confirms published rate operation; stale wait text removed.
|
||
- Earlier text clarification is now resolved by the accurate new filename and explicit Resv.-GEN confirmation above.
|
||
Internal CAS/GENERAL metadata does not change the user's page selection or authorize a different API note scope.
|
||
- Next source adapter still requires the accepted role/display/note/order/scope contract and independent mapping checks.
|
||
[Evidence](../50-evidence/topics/2026-09-16-arr-display-contract.md), [safe aggregate](../../integrations/ohip/arr-display-contract-20260916.json).
|
||
|
||
## API / Native Source Comparison On 2026-09-16
|
||
|
||
- User cannot currently access OHIPSB02 Opera for the matching native export. Do not ask repeatedly or treat hotel57106
|
||
XML as same-source acceptance. No new UI automation, hotel call or business write was performed in this continuation.
|
||
- Offline pinned v2/XML comparator is complete:32 independent field/format/role/scope observations, unique internal-ID
|
||
pairing, duplicate/only-in-one-source/order checks and bounded privacy-safe diagnostics. All readiness flags remain false.
|
||
- 32 new tests plus47 related regressions pass. Actual139-record OHIPSB02 capture versus72-row57106 XML correctly returns
|
||
not_comparable;851 original files and manual XML are unchanged. Source equivalence remains unverified.
|
||
- Official Cloud evidence excludes resolved/completed Trace and InSession GDS; neither proves other status/order rules.
|
||
Existing12 API Trace records have empty resolveInfo, so resolved exclusion is not covered. Company, display name,
|
||
report order/granularity and GEN mapping remain pending. Two explicitly permitted read-only agents completed their reviews.
|
||
- Next: continue evidence-backed source contract work; perform paired acceptance when same-environment input becomes
|
||
available, then versioned adaptation and executor/Finance integration. [Evidence](../50-evidence/topics/2026-09-16-arr-source-comparison.md).
|
||
|
||
## Complete Search/Detail/Day-Rate Capture On 2026-09-16
|
||
|
||
- User supplies From/To/rate date all2026-09-15. New v2 collector/replay/local batch entry accepts and freezes all three
|
||
explicit equal dates; shared v1 state/lock/retry behavior is preserved. Source adaptation and real Web executor remain unwired.
|
||
- 29 new tests,167 distinct relevant tests passed across the scoped runs. Catalog0.7 manifest now declares three reads,
|
||
acknowledges existing group-implied GET and passes plan/validate; no apply/grant/key changes.
|
||
- OHIPSB02/day2026-09-15:139 details and139 rate responses, both full search passes equal.283 transport attempts comprise
|
||
282 HTTP200 and1 recovered transport failure.134 valid amount/currency candidates (59 explicit zeros), allUSD;
|
||
3 InHouse rates suppressed and2 NoShow details lack base currency. Candidate capture complete, all_rates_valid=false.
|
||
- 851 private files pass hashes/protocol replay. Offline v2 batch replays283 stored attempts once and reuses the same pin
|
||
with0 new response reads on retry;851 current and432 v1 original files remain unchanged. No Finance/Oracle/OSS writes.
|
||
- Next: same-source field/range/order acceptance and source adapter, then connect the Web executor using stable capture/
|
||
frozen-package/Finance identity. Current missing names/company/rate codes and5 price diagnostics are not silently dropped.
|
||
[Evidence and pins](../50-evidence/topics/2026-09-16-arr-day-capture.md), [aggregate](../../integrations/ohip/arr-day-verification-20260916.json).
|
||
|
||
## System-Supplied Report Dates — User Clarification On 2026-09-16
|
||
|
||
- From Date / To Date are supplied by the upstream system; its current rule is T-1/T-1. ARR validates and freezes the
|
||
supplied dates, rather than calculating yesterday from a local clock/timezone or Opera business date. Current single-day
|
||
scope requires both dates to be valid and equal; search bounds and rate detailDate use that same day throughout retries.
|
||
- v1 collector/batch CLI require explicit arrival_date; new v2 accepts from_date/to_date/rate_date explicitly and checks
|
||
equality. No collector computes T-1. Web sends equal Python dates; accepted runtime executor wiring remains pending.
|
||
- Updated the [authoritative source contract](../40-domain/arr-source-report-contract.md), replacing the earlier provisional
|
||
ARR-side Asia/Bangkok date calculation. This clarification does not create a scheduler or alter existing evidence dates.
|
||
|
||
## Rate-Info Publication Verified On 2026-09-16
|
||
|
||
- User notification arrived; the earlier wait is satisfied. Edge catalog0.7.0/115 operations publishes recommended
|
||
POST searchRateInfo and deprecated GET getRateInfo under existing reservations.read; no grants/keys/apply were changed.
|
||
- Added separate [rate lookup primitive](../../integrations/ohip/rate_info.py) and contract excerpt.18 new tests plus99
|
||
existing acquisition/audit/XML tests pass (117 total). Minimal id/type/summaryInfo=false/detailDate request is sufficient
|
||
for the sampled test reservations; no repricing/currency override fields were sent.
|
||
- OHIPSB02,2026-09-15:5 distinct existing reservations (cross-day, package, zero, zero-night, ordinary),11 HTTP200 read calls,
|
||
all5 effective-price candidates valid in USD, first GET/POST equal. Package sample differs from base and matches total;
|
||
this remains a sample observation, not a replacement arithmetic rule. Raw37 files private and hash verified.
|
||
- POST lookup has since been integrated into v2 whole-day capture above; next complete source mapping/same-source report
|
||
acceptance. v1 archives remain search/detail-only. No Finance source adapter or production connection yet. See
|
||
[publication evidence](../50-evidence/topics/2026-09-16-rate-info-publication.md).
|
||
|
||
## Frozen Processing Handoff On 2026-09-16
|
||
|
||
- Added an isolated [frozen XML handoff library](../../integrations/ohip/processing_handoff.py), with21 new and131 related passing tests:
|
||
stable per-batch task identity, local processor/independent validation, immutable source/output/envelope preparation,
|
||
same-package upload/registration/commit retry, and recovery from lost acknowledgements without marking an uncertain commit failed.
|
||
- Tests use synthetic XML, filesystem objects and an in-memory repository; PostgreSQL exact-replay control flow also passes
|
||
with a simulated cursor. No live database, OSS, hotel/platform calls, deployment, grants or new delegation.
|
||
- This is preparation for an eventual accepted source adapter. It does not create XML from API data or prove source mapping;
|
||
source_mapping_verified remains false. Production wiring, authoritative package retention and real PostgreSQL concurrent/
|
||
disconnect/outbox acceptance remain open. Existing manual upload and price review are unchanged.
|
||
- The then-pending getRateInfo notification has since arrived; see the publication verification above. See
|
||
[handoff evidence](../50-evidence/topics/2026-09-16-arr-processing-handoff.md) and the existing field acceptance matrix.
|
||
|
||
## Retryable ARR Acquisition Batches On 2026-09-16
|
||
|
||
- User asked to progress non-price work while platform adds getRateInfo. Added isolated [capture-job utility](../../integrations/ohip/capture_job.py):
|
||
fixed batch identity/options, per-batch process lock, atomic private state, full-day fresh attempts after failure/interruption,
|
||
and completed-manifest verification/reuse before credentials or network are loaded. New ID explicitly requests fresh data.
|
||
- 20 new lifecycle/concurrency/crash tests and79 existing scoped checks pass (99 total). Offline139-record job first reads143
|
||
stored responses, second reads0 new responses and returns the same capture pin;432 original files unchanged. No hotel calls.
|
||
- This is local POSIX acquisition state only: no production distributed queue, scheduler, source adapter or Finance submission.
|
||
Existing manual XML submit still creates a fresh job. A later isolated frozen-handoff prototype above addresses retry
|
||
identity/unknown-result handling locally; production Finance integration/acceptance remains future work.
|
||
- No delegation used this turn; platform-ready notification remains with user. Details and resume boundary:
|
||
[batch evidence](../50-evidence/topics/2026-09-16-arr-capture-jobs.md), [run instructions](../../integrations/ohip/README.md).
|
||
|
||
## ARR Capture Readiness And Platform Handoff On 2026-09-16
|
||
|
||
- User coordinated platform getRateInfo addition and subsequently notified this task; the prior wait is now satisfied.
|
||
Two local read-only subagents were explicitly approved for this turn and completed processor/sample checks.
|
||
- Added a [manifest-pinned offline audit](../../integrations/ohip/audit_arr_capture.py) with raw-file integrity/protocol replay
|
||
and16-field candidate counts. Collector now returns its result-manifest digest.79 targeted tests pass;432 files/139
|
||
records verified without mutation or new hotel calls. No source conversion, deployment, grants or business writes.
|
||
- New concrete gaps: no complete displayed FULL_NAME despite unique primary-name components;396 rate segments all single-day,
|
||
so general date boundaries remain untested. Eight raw current-room collision groups can differ in rate/departure/notes.
|
||
Five zero-night records are valid; multi-room/shared-room scenarios are not covered.
|
||
- Confirmed validation precedes deduplication; later duplicate candidates cannot hide missing mandatory fields. XML replay
|
||
shares processor core functions and cannot by itself prove API-to-source mapping correctness. Existing rules unchanged.
|
||
- [Acceptance matrix](../../integrations/ohip/arr-api-acceptance-matrix.md) and
|
||
[readiness evidence](../50-evidence/topics/2026-09-16-arr-api-capture-readiness.md) specify resume steps once platform is ready.
|
||
Candidate availability is not value validity or report equivalence; Finance-ready flags remain false.
|
||
|
||
## ARR API Candidate Collector On 2026-09-16
|
||
|
||
- Added independent [read-only collector](../../integrations/ohip/collect_arr_source.py) for existing search/detail APIs:
|
||
explicit day/hotel, bounded pagination/retries, private original-response archive, identity/count/status checks,
|
||
explicit notes/Trace counts and complete search recheck. Partial, empty, drifting or warned batches fail closed.
|
||
- 34 collector tests and18 neighboring XML tests pass. Offline replay of139 details/four search pages preserves143 raw
|
||
responses exactly, with original477 files unchanged. No fresh hotel business calls, permissions, deployment or new delegation.
|
||
- Success means candidate acquisition only; Finance readiness, report equivalence and atomic snapshot flags remain false.
|
||
No source-format conversion, scheduler or integration with XML intake/Finance/OSS exists in this utility.
|
||
- Public catalog refreshed:0.6.0/111; getRateInfo/searchRateInfo still absent. Next resolve the actual platform rate-info
|
||
wrapper and same-environment price/report semantics before source adaptation and runtime integration. See
|
||
[collector evidence](../50-evidence/topics/2026-09-16-arr-api-collector.md) and [run instructions](../../integrations/ohip/README.md).
|
||
|
||
## End-To-End Readiness Audit On 2026-09-16
|
||
|
||
- Current source implements XML intake, immutable source replay, deterministic daily processing, manual-price review,
|
||
atomic Finance/outbox commit, independent monthly publication, Booking review/company reports, BI and authenticated
|
||
artifact downloads. The principal missing feature for the daily/monthly/BI path is automatic Opera source acquisition
|
||
and submission; native XML availability versus JSON adaptation remains unresolved.
|
||
- Automatic intake also needs complete-day delivery and task retry/deduplication semantics. Existing source/order/day
|
||
replacement rules remain authoritative. Manual price approval and Booking-source review/company generation are
|
||
existing operator steps, so source download alone does not make every product branch unattended.
|
||
- Compose starts Web/Caddy only; the implemented monthly worker must be supervised separately. Current production
|
||
deployment/restart behavior was not revalidated, and historical task failures are not current incident evidence.
|
||
Full local unittest regression: 401 total, 398 passed, 3 intentional private-fixture skips, zero failures/errors.
|
||
See the [audit evidence](../50-evidence/topics/2026-09-16-end-to-end-readiness-audit.md).
|
||
|
||
## Active ARR API Research Scope — User Correction On 2026-09-16
|
||
|
||
- The user explicitly corrected the Agent: Opera UI steps specify business criteria/data elements for platform API
|
||
discovery, not a browser-click implementation. Stop the Schedule Report/SFTP branch and UI/screenshot requests for it.
|
||
- XML is the supplied manual baseline and current processor input, not a user-imposed native-download-only API gate.
|
||
Study searchHotelReservations plus getReservation for equivalent ARR data, while keeping completeness, source replay,
|
||
price rules and existing validation intact. JSON adaptation is not yet approved or implemented.
|
||
- Both real operation definitions were re-read at07:07Z; they remain available under the existing reservations.read
|
||
grant. Only developer catalog reads were made. The subsequent mapping section records the delivered composition,
|
||
parameter/field mapping and concrete gaps. See [scope correction and mapping](../50-evidence/topics/2026-09-16-arr-api-scope-correction.md).
|
||
|
||
## ARR Rate-Info Endpoint And Semantic Follow-Up On 2026-09-16
|
||
|
||
- Found Oracle RSV getRateInfo/searchRateInfo: rateInfo.detail.totalRateAmount explicitly means the effective rate for
|
||
the specified reservation/date. Fresh catalog0.6.0/111 lacks both. Prepared a concrete [platform read-operation request](../../integrations/ohip/rate-info-platform-request.md)
|
||
and typed upstream examples; no Edge route invented, no grant/config changed, no external message sent.
|
||
- Saved-response analysis explains all9 search/base mismatches: search price matches the next-day2026-09-16 base.
|
||
All7 base/total mismatches equal that arrival day's computed package-price sum. This supports date-specific Oracle
|
||
rate info rather than guessed price reconstruction; report equivalence still needs validation.
|
||
- Company-role evidence is limited to Group (24 names across26 associations), so no new profiles.read need is proven.
|
||
Manual XML is in ascending room order with no duplicates; test API has8 duplicate nonblank-room groups/16 records.
|
||
Tie-breaking and report inclusion cannot be inferred from this cross-environment sample.
|
||
- This turn used saved139 records, the supplied XML and one public catalog read; no new hotel calls or delegation.
|
||
Next prerequisite for direct effective-price verification is the platform read wrapper, with parameters/tests in
|
||
[semantic evidence](../50-evidence/topics/2026-09-16-arr-api-semantics.md). Existing source/Finance controls remain intact.
|
||
|
||
## ARR API Read-Only Live Probe On 2026-09-16
|
||
|
||
- User continued the concrete proposal to test existing search/detail in known OHIPSB02. Isolated client made158 read
|
||
requests for arrival2026-09-15; allHTTP200 and expected envelopes. Two pages yield139 unique reservations; all139
|
||
details match identity/hotel/day. End recheck shows the same ordered IDs and no changed search records.
|
||
- Observed notes correct the official example:30 GEN/RESERVATION notes, including3 internal;32 total notes and12 Traces
|
||
match search indicator counts for every record. effectiveRate is absent in all139 details/396 rate entries, including
|
||
two focused fetch tests; search/base differ for9 candidate arrival rates and base/total differ for7. Do not default prices.
|
||
- Assignment filtering works with explicit paired booleans:74 assigned +65 unassigned form the exact baseline partition.
|
||
Single true flags alone did not narrow. ETA+07:00 returned0/warnings; local no-zone variants return12 and omit90 missing
|
||
and37 date-only values. These outcomes are current test evidence, not adopted production filtering rules.
|
||
- Raw sources are privately saved outside the repository with SHA-256 inventory. Repository includes only
|
||
[aggregate results](../../integrations/ohip/arr-api-probe-results-20260916.json) and [evidence](../50-evidence/topics/2026-09-16-arr-api-live-probe.md).
|
||
No new delegation, permissions/runtime/Oracle writes or Finance/Booking/OSS mutations. Research helper is isolated.
|
||
- Next: resolve report inclusion/empty-ETA behavior, actual effective-price and company-role mapping, and source ordering
|
||
using saved evidence; discuss optional Block access and source adaptation only after gaps are understood. Native XML
|
||
download, same-environment report equivalence and production end-to-end acceptance remain unproven.
|
||
|
||
## ARR API Field Mapping On 2026-09-16
|
||
|
||
- Completed a [concrete mapping](../../integrations/ohip/arr-api-mapping.md) of search/detail requests, all16 processor
|
||
source columns,3 derived outputs, pagination/completeness and source-adaptation boundaries. Five credential-free
|
||
examples passed offline targeted field/type/enum/date/query checks; no hotel business request was made.
|
||
- Key corrections: GEN is notificationLocation in the official RESERVATION comment example; effectiveRate includes
|
||
specified package additions and must be evaluated before using base; reservationBlock has no blockCode. These facts
|
||
narrow the test plan but do not establish hotel-specific report equivalence.
|
||
- The next proposed step was isolated read-only verification in known OHIPSB02 (subsequently completed above) of full date/status scope, pagination, detail completeness,
|
||
note selection, effective price, company role and ordering. Preserve raw responses and current pricing/replay/day
|
||
replacement controls. JSON adaptation and optional Block/profile/room-type grants remain undecided.
|
||
- The user now requires permission before each delegation. Exactly two read-only audits were started after explicit
|
||
permission in this turn; no nested or future delegation is covered. See [evidence](../50-evidence/topics/2026-09-16-arr-api-field-mapping.md).
|
||
|
||
## Historical Native XML Scheduled Delivery Investigation — Stopped After User Correction
|
||
|
||
- Re-read the complete live catalog and OpenAPI at06:42Z:0.6.0,111 catalog operations and152 total OpenAPI routes;
|
||
both data documents are identical to prior snapshots, with no report execution/download route.
|
||
- Oracle's official demonstration schedules Arrivals: Detailed; the standard-report guide supports XML and SFTP.
|
||
The user confirmed the scheduling entry is visible. Actual XML/SFTP options and an approved receiving location
|
||
were not confirmed. This investigation is stopped after the user's explicit API-scope correction; it is not an
|
||
adopted architecture or active prerequisite for API work.
|
||
- Prepared a [single-delivery trial draft](../../integrations/ohip/native-xml-delivery-trial.md), including fixed-day
|
||
validation, original-file comparison, destination prerequisites and the calendar-date/business-date mismatch.
|
||
A possible platform-owned receiver plus authenticated file API remains a proposal; no client/runtime/schedule,
|
||
destination configuration, external file delivery or permission change has been made.
|
||
|
||
## Native ARR XML Comparison Preparation On 2026-09-16
|
||
|
||
- Added an isolated read-only native XML comparator with a required pinned baseline SHA-256. It preserves physical
|
||
order, duplicate reservation occurrences and all note/Trace content, reports privacy-minimized counts/positions,
|
||
and refuses different hotel/group-date comparisons. It is not connected to ingestion, Finance or runtime.
|
||
- 18 synthetic tests passed; supplied manual XML versus its protected identical copy also passed for all72 rows.
|
||
This is a utility smoke test, not a downloaded-candidate comparison or business acceptance. Existing processor and
|
||
independent-validator results remain authoritative; GEN/CAS and source-environment evidence are still pending.
|
||
- Live catalog recheck at 06:26Z remains0.6.0/111 operations with no report operation. This tool can compare future native
|
||
XML files but is not a prerequisite for studying API-data composition under the later user correction. See
|
||
[comparison evidence](../50-evidence/topics/2026-09-16-native-arr-xml-comparison.md).
|
||
|
||
## Manual ARR XML Baseline On 2026-09-16
|
||
|
||
- User supplied res_detail_71050118.XML from Downloads: valid UTF-8 RES_DETAIL, one arrival group for 2026-09-15,
|
||
72 source rows, RESORT 57106 and THB. Processor 4.0.0 and its independent validator passed locally: 11 rate exclusions,
|
||
zero duplicates, 61 retained rooms, 125 room nights, all fixed prices matched, zero review issues. Source and outputs
|
||
are hash-checked in a private isolated Downloads directory; no Finance/Booking/OSS or runtime mutation occurred.
|
||
- Observed 58 notes coded CAS with description GENERAL; UI request remains Resv. - GEN until their relationship is
|
||
confirmed. XML has no internal-note marker. Asked the user for actual Note Types and source environment; screenshots
|
||
and export metadata remain unprovided. The sample includes 10 CKOT records, multiple Traces, nonmonotonic ROWNUM and
|
||
four starred arrival-time displays; preserve physical XML order and do not invent API semantics for these fields.
|
||
- This is a structural/processing baseline, not native API download or full parameter-equivalence acceptance. Current
|
||
OHIPSB02 and file hotel code57106 cannot be treated as one comparison dataset without verified environment binding.
|
||
See [sample evidence](../50-evidence/topics/2026-09-16-manual-arr-xml-baseline.md).
|
||
|
||
## Historical Native ARR Report API Review On 2026-09-16
|
||
|
||
- User offered to provide a manual export. Prepared a [minimal sample request](../../integrations/ohip/manual-export-sample-request.md):
|
||
one original XML for 2026-09-15, complete parameter screenshots, environment/hotel and export time. The XML has since
|
||
arrived and passed the local checks above; the screenshots and environment/export metadata remain pending. Interface
|
||
generation/download is still unverified.
|
||
|
||
- Fresh Edge catalog/OpenAPI readbacks remain 0.6.0 with 111 operations. No report metadata/parameter, native
|
||
res_detail execution or XML download operation is exposed. The current independent ARR application's read-only
|
||
reservation permissions were not changed.
|
||
- Reviewed all 45 public Property v1 specifications at Oracle commit dd631fbd5d0fce74a7dbdf96b43f07ce587211f2,
|
||
covering 3,580 operations. REPCFG provides getReports/getAllReports and getReportParameters metadata, but no
|
||
confirmed complete res_detail execution/download flow was found. This does not prove universal Oracle unavailability
|
||
or that an Edge wrapper alone can solve the gap. dateOffset is relative to business date, not calendar today.
|
||
- Prepared a concrete [platform handoff](../../integrations/ohip/arr-report-platform-handoff.md), not sent to others.
|
||
That native-file investigation depended on an execution/file-delivery contract, identity/parameters and comparable XML;
|
||
the later user correction restored broader platform API composition research. JSON reconstruction is not selected. No business call, real report
|
||
download, runtime, schedule or data mutation occurred. See [evidence](../50-evidence/topics/2026-09-16-native-arr-report-api-review.md).
|
||
|
||
## ARR Source Report Parameters Confirmed On 2026-09-16
|
||
|
||
- User supplied the actual Opera report workflow and options. The source is Arrivals: Detailed (`res_detail`), located
|
||
with Report Name ARR, for T-1 through T-1 and arrival time 00:00–23:59, with ALL Reservations/room assignments and
|
||
all seven code filters. Display Room Number and Notes, include internal notes, restrict Note Types to Resv. - GEN,
|
||
and download XML. Exact values are centralized in the [source contract](../40-domain/arr-source-report-contract.md).
|
||
- Source acquisition preserves ALL Rate Codes; the existing processor performs whitelist filtering after intake.
|
||
Calendar-yesterday does not silently become business-date-minus-one. API status/default/ETA/remark ordering equivalence
|
||
and native report generation/download remain technical verification work, not missing user button instructions.
|
||
- No report download, scheduling, application permission, processor, runtime or business-data mutation occurred.
|
||
|
||
## Same-Hotel Department Scope Confirmed On 2026-09-16
|
||
|
||
- The user clarified ARR is the Finance department's full report-acquisition/processing service, while the referenced
|
||
RSVN task serves the Reservation department of the same hotel. Restored the historical user confirmation: current
|
||
Oracle access is the standard test environment; after testing and Oracle approval, switch to the real hotel environment
|
||
using the same API contract with verified environment configuration.
|
||
- OHIPSB02 is therefore known test context, not an unanswered hotel-identity question. Reuse this background and prior
|
||
verified research without merging application credentials, copying Reservation write permissions or replacing the
|
||
current Booking Excel workflow. No sibling project, runtime, permission or business state was modified.
|
||
See [shared context evidence](../50-evidence/topics/2026-09-16-shared-hotel-rsvn-context.md).
|
||
|
||
## OHIP Application Provisioned On 2026-09-16
|
||
|
||
- The user supplied a new delegated credential. Installed CLI 0.5.0 authenticated as
|
||
`auto_219f3af6dc2123dc29ee3138` and created `Wyndham-ARR2.0-Codex` / `caller_zloxalzsQ9pYsztt` under the verified
|
||
human owner. Plan/validate/apply passed for `reservations.read` with search/detail and no implied extra operations.
|
||
- Issued one application Key through the CLI's protected file-delivery flow. Application readback confirms enabled=true
|
||
and one active key; local ready-file metadata, permissions and platform audit agree. All secret files are outside the
|
||
repository. See [integration setup](../../integrations/ohip/README.md) and
|
||
[provisioning evidence](../50-evidence/topics/2026-09-16-ohip-application-provisioning.md).
|
||
- The prior missing-management-credential blocker is resolved. Source download/JSON adaptation is still undecided and
|
||
unimplemented; no Oracle business request or ARR runtime/business mutation occurred. Management audits report
|
||
`hotel_id=OHIPSB02`, now confirmed from the related task and user clarification as the shared standard test environment.
|
||
|
||
## OHIP Integration Research On 2026-09-16
|
||
|
||
- Read the live Edge 0.6.0 catalog/OpenAPI (111 operations) and Oracle 26.3 reservation contracts against the current
|
||
programmatic ARR pipeline. The catalog exposes reservation JSON search/detail and async daily summary, but no
|
||
`RES_DETAIL` report-download operation. Search by arrival date plus detail with Comments/Traces is the leading
|
||
candidate for field-equivalence validation; no integration direction has been adopted or implemented.
|
||
- Preserve complete single-arrival-day replacement, deterministic first-row deduplication, source replay, manual-price
|
||
review and Finance/outbox boundaries. Incremental API data cannot directly replace a complete current-day version.
|
||
- Installed CLI 0.5.0 and the existing skill remain usable for public discovery. The official tools page requires an
|
||
authenticated console, while browser control timed out; new CLI/skill packages were not downloaded or installed.
|
||
A subsequent user-authorized login attempt returned HTTP 503 with “登录服务暂时不可用” on two attempts even though
|
||
`/healthz` returned 200/ok; no console session or package was obtained, and no login secrets were saved in project files.
|
||
Public contracts and a source/hash inventory were saved locally for discussion. No application, key, live Oracle
|
||
business call, ARR runtime or business-state mutation occurred. See the
|
||
[discussion memo](../50-evidence/topics/2026-09-16-ohip-interface-review.md).
|
||
- Historical task `01a08f5b-e9bf-7821-871a-6da7a088b806` subsequently confirmed a successful official CLI/skill download
|
||
and installation through the then-authenticated, functioning in-app browser. The installed CLI and all 3 skill files
|
||
are still present and usable; only the old download archive/directory is absent. Re-downloading is not a prerequisite
|
||
to continue integration research. No newer tooling release has been established, and no forced upgrade was requested.
|
||
- A later user-requested retry after a possible platform repair still returned console-login HTTP 503. The in-app tab
|
||
read timed out again, and the direct official bundle URL redirected to login HTML rather than a ZIP. No new tooling
|
||
artifact was downloaded; the installed CLI 0.5.0 and skill remain unchanged and available.
|
||
- The user then clarified that the installed CLI should create the ARR application directly. A fresh `automation whoami`
|
||
fails locally with missing `OHIP_EDGE_AUTOMATION_TOKEN` / `OHIP_EDGE_AUTOMATION_FILE`; relevant environment settings,
|
||
standard credential directories and matching Downloads files provide no configured identity. Application creation is
|
||
awaiting a delegated CLI credential, not a tooling re-download. No new application or key has been created.
|
||
|
||
## Documentation And Repository Handoff On 2026-09-06
|
||
|
||
- Added root `PROJECT_GUIDE.md` as a Chinese project explanation and handoff guide. It consolidates the project goal,
|
||
architecture, XML/manual-review/monthly/Booking/company-report/BI flows, module map, configuration, local startup,
|
||
migrations, tests, deployment, troubleshooting, security boundaries and new-member checklist. The root README links
|
||
to it as the complete project entry point.
|
||
- The guide explicitly separates repository implementation from production deployment and business acceptance, and
|
||
routes changing operational gaps back to `90-maintenance/stale-items.md`. Local Markdown links, Git whitespace and
|
||
the documented Web/worker CLI entry points pass. This documentation-only task changed no application behavior,
|
||
database, object store, runtime process or business data.
|
||
|
||
## Daily Interaction Correction On 2026-08-11
|
||
|
||
- The local source now treats Daily Report rows as informational table rows rather than hidden log controls. It removes
|
||
row click and Enter/Space activation, `role=button`, `tabindex`, selected-row decoration and pointer styling. The
|
||
explicit needs-review button still focuses the manual-price panel, report downloads remain links, and only the
|
||
top-right `任务日志` link opens the trace dialog.
|
||
- JavaScript syntax, all 81 `test_arr_web*.py` regressions and an isolated browser interaction check pass. The browser
|
||
proved an ordinary `0805.XML` row leaves the dialog closed, the `待人工处理` control focuses a populated review panel,
|
||
and the header utility opens the dialog; there were no console errors. This source change has not been pushed or
|
||
deployed to `8.138.234.141:8765`, so the reported production behavior remains until a controlled release.
|
||
|
||
## Implemented Locally On 2026-08-11
|
||
|
||
- Implemented Booking parser 2.1.0 exact-header compatibility for the user-confirmed July legacy and August bilingual
|
||
source templates. Readable approved header labels are normalized once and then compared as complete cells; the
|
||
parser does not use substring, fuzzy, month, filename or worksheet-name matching. Existing aliases, 20-row header
|
||
scan, duplicate-header failure and one-file/full-replacement activation semantics remain unchanged.
|
||
- Added parser/coordinator/i18n regressions. Four supplied workbooks now parse only their intended source sheets with
|
||
the expected 79/111/16 (Lian Tai July), 67/100/16 (Lian Tai August), 235/447/432 (QBD July) and 104/218/212 (QBD
|
||
August) rows/items/pending counts; two Daily/channel output workbooks remain rejected. No workbook, OSS object,
|
||
draft, Booking batch, Finance fact or runtime process was changed. Deployment and a controlled post-restart
|
||
read-only replay remain pending; QBD pending items are existing room-type review work, not a header failure.
|
||
|
||
## Diagnosed On 2026-08-11
|
||
|
||
- The reported company-channel Booking Excel parse failure occurs before object storage and draft persistence; a
|
||
read-only database snapshot shows no new draft/artifact/batch and accepted batch 7 `july-test.xlsx` remains current.
|
||
Exact parser replay isolates two cases: generated Daily/channel report workbooks are correctly rejected as the wrong
|
||
input type, while current Lian Tai/QBD raw workbooks expose a parser compatibility defect because bilingual
|
||
`Tour Code / 主团号` and hotel-detail headers do not equal the narrow exact alias allowlist. Replacing only those two
|
||
headers in memory makes both raw workbooks parse, with original files and all business state unchanged. At diagnosis,
|
||
the controlled alias expansion plus regression fixtures remained unimplemented. The user has now explicitly confirmed that both
|
||
supplied formats must be supported. An exact three-alias process-memory probe recognizes only the intended sheet in
|
||
each file: Lian Tai yields 67 rows/100 items/16 pending, while QBD 2026-08-06 yields 104 rows/218 items/212 pending;
|
||
Daily/channel output workbooks remain rejected. This parser-only plan needs no migration or upload-page redesign, but
|
||
the existing one-file/full-replacement activation model still cannot append two separately uploaded files.
|
||
- The exact desktop `0806.XML` deterministically fails processor 4.0.0 before any row or price processing with
|
||
`XML_PARSE_ERROR` at line 1872, column 0. A `TRACE_TEXT` value contains one CESU-8 surrogate pair representing
|
||
`U+1F389` even though the document declares UTF-8; the file is structurally closed and not truncated. This error is
|
||
outside the pure-`PRICE_UNMATCHED` review boundary, so a formal failure with no manual-price panel is correct. The
|
||
public deployment health endpoint remains 200. The source must be re-exported as valid UTF-8 and uploaded as a new
|
||
task; no source, runtime, database, Finance, object-store or event state was changed during diagnosis.
|
||
|
||
## Artifact Conversion On 2026-08-11
|
||
|
||
- The user-supplied `8.6 修正.XML` was an XLSX package mislabeled with an XML extension. Its 181-row first sheet
|
||
contains the flattened Opera fields needed by the ARR parser. A separate UTF-8 `RES_DETAIL` XML was reconstructed
|
||
from those rows and passed strict XML/UTF-8 checks plus processor 4.0.0: 115 retained rows, 37 rate-code exclusions,
|
||
29 duplicates and zero price-unmatched/review rows. The original workbook and malformed XML remain unchanged; no
|
||
upload, Finance, database, object-store or event state was changed.
|
||
|
||
## Runtime Recovery On 2026-08-06
|
||
|
||
- Restored the local ARR login page after a reported opening failure. No Web process was listening and the retained
|
||
Keychain-backed 8766 launcher still passed two removed Node/artifact-tool flags. Removed only those obsolete flags,
|
||
then started one detached `arr2-web-8766` Screen session. `/healthz` returns 200 and root redirects to login with no
|
||
browser console error. No login, upload, database, Finance or object-store mutation was performed. The existing
|
||
reboot-persistent supervision follow-up remains open.
|
||
|
||
## Deployed And Accepted On 2026-08-06
|
||
|
||
- Reconciled the live migration-016 function/comment semantics without rerunning 016, created a privacy-minimized
|
||
pre-017 checkpoint, and ran a transaction-only up/down probe. The first probe exposed a real legacy
|
||
`artifact_callback`/`direct_mcp` run-constraint drift and rolled back cleanly; corrected 017 preserves that contract.
|
||
Formally applied migration 017 SHA-256 `22a0578e…67b5b` under an advisory lock with all original business table counts
|
||
unchanged. The guarded down migration SHA-256 is `9e85af0c…29101`.
|
||
- Closed incomplete runs 61–63 through the normal repository failure transition as
|
||
`REVIEW_SCHEMA_MIGRATION_MISSING`, retaining all three source artifacts and adding only failure-audit events. The
|
||
first post-migration upload, run 64, then exposed a 16-value/15-placeholder delivery INSERT bug and closed safely as
|
||
`DATABASE_WRITE_FAILED`; the placeholder and a focused regression were corrected.
|
||
- Restarted Web as PID 24225 with all six authenticated readiness flags true. A subsequent exact-hash `0805.XML`
|
||
upload is now run 65 / open review case `dailyreview-878e45ae132b73c131560299b3b2dcb3`: the live page shows the two
|
||
expected Lian Tai keys and candidate prices at `0 / 2`, while confirmation remains disabled. PostgreSQL has one open
|
||
revision-0 case, two unset items and one required event, with no daily XLSX, manual manifest, Finance version, run
|
||
outbox or new monthly event. Historical daily version 28 remains rejected and unchanged. Finance-priced finalization
|
||
is the remaining authorized business step.
|
||
- Subsequent employee interactions created two independent frozen cases: run 66 stores GRP1/LBLT as `2300/0`, and
|
||
latest run 67 stores `200/0`. Both stopped safely as retryable `generation_failed` with no Finance version or run
|
||
outbox event. Diagnosis found two finalization defects: the live artifact-kind constraint omitted
|
||
`manual_override_json`, and the Finance-version INSERT had 21 placeholders for 20 values. Migration 018
|
||
(`5600d825…cd00`) was rollback-probed and formally applied as the additive artifact-kind correction; the surplus SQL
|
||
placeholder was removed. A real PostgreSQL outer-transaction review-to-Finance slice now reaches one active version,
|
||
one manual row and one commit event before rolling back to zero residue.
|
||
- Web is now PID 26286 with all six readiness flags true. The review UI/API displays and accepts only non-negative
|
||
integers while preserving exact `.00` database/manifest normalization. At the finalization-repair handoff, run 67
|
||
was revision 2 `generation_failed`, read back as `200` and `0`, and had not been retried by that repair; run 66 held a
|
||
different frozen GRP1 value. That checkpoint is historical and the later browser-visible state is recorded below.
|
||
Historical version 28 remained rejected and unchanged at the repair checkpoint.
|
||
- The manual-review UI follow-up is runtime-active without a Web restart because static files are read on each request.
|
||
`待人工处理` plus progress are one operation button that focuses/scrolls the price panel without opening the task
|
||
log; retryable cases omit the removed frozen-list sentence; finalization projects `日报生成中`; and the complete
|
||
review panel/dialog/error surface follows the Chinese/English/Thai selector. Authenticated read-only browser QA
|
||
verified both a retryable and an editable case. During that QA, history had advanced outside this task: jobs
|
||
`arrjob-e36d8c4c133b48dbb81a57a002e41d76` and `arrjob-cce736734c5e4731b733f03c4a9a3b76` displayed succeeded, while
|
||
`arrjob-d3bbbb435cae4559b5f69cb7ea331cee` and `arrjob-dddc27119bea43b19588c78eac087763` still displayed needs-review.
|
||
This UI task issued no price save, finalize/retry/cancel submission or upload, so it does not attribute those external
|
||
lifecycle changes to itself.
|
||
|
||
## Diagnosed On 2026-08-06
|
||
|
||
- Diagnosed the user's fresh post-v4 `0805.XML` upload read-only. The page shows `请求未完成`, while PostgreSQL has
|
||
three new v4 run/attempt shells (61–63 / 53–55) stuck `running`, three exact 948,683-byte source artifacts, no
|
||
delivery, Finance version or outbox event. Live database effects match 016 but migration 017 is absent: review tables
|
||
do not exist and lifecycle checks permit only success/failed. An isolated same-hash v4 replay plus independent
|
||
validation succeeds as `review_required` with exactly `LIAN TAI / LBLT / 0` and `LIAN TAI / GRP1 / 1150`. The Web
|
||
transaction therefore fails on the missing review table and its best-effort closure fails at the same dependency.
|
||
No live migration, cleanup, re-upload, review edit or business write was performed.
|
||
- Diagnosed deployed daily job `arrjob-f1cd01f5fddd458cbdafada0ec7dd14d` read-only. A local XML with the exact logged
|
||
948,683-byte/SHA-256 identity reproduces the processor-3.0.0 failure: Lian Tai `LBLT + 0` and `GRP1 + 1150` are absent
|
||
from the frozen price reference. All 151 `validation_failed` outcomes are `BATCH_NOT_VALIDATED` fallout; they are not
|
||
separate source-field errors. Finance version 28 remains rejected, and no price, code, server, database or job state
|
||
was changed. Finance must approve the missing totals or an explicit zero-night rule before rebuild, exact replay and a
|
||
fresh upload.
|
||
|
||
## Implemented Locally On 2026-08-06
|
||
|
||
- Added the v4 `PRICE_UNMATCHED`-only manual-price-review path for the active fixed-processor/artifact-callback flow.
|
||
A pure missing-price result records an audited, privacy-minimized `awaiting_review` case and returns `needs_review`
|
||
without a daily XLSX, Finance version, rejected version, failure outbox or monthly event. Mixed errors remain failures.
|
||
- Authenticated/CSRF review APIs and the Daily Report panel page grouped keys, candidate fixed prices, aggregate impact
|
||
and revision-locked non-negative integer prices (including `0`), then normalize exact `.00` storage/manifest values. Finalization freezes canonical provenance, rematerializes
|
||
the registered source XML and independently replays before its one atomic Finance/outbox commit. Infrastructure
|
||
retries retain the manifest; deterministic final errors close the review/run.
|
||
- Migrations 017/018 and their guarded down migrations, v4 processor package/schema, trace v4 and package checksum parity were
|
||
locally verified. After the navigation/progress/localization follow-up, the dependency-complete `.venv` suite passes
|
||
393 tests with three intentional private-fixture skips; direct-MCP remains an explicit v3 no-review compatibility
|
||
projection. The controlled rollout and later browser-visible user activity supply live review/success state, while
|
||
this follow-up itself remains UI-only and produced no Finance or monthly mutation.
|
||
|
||
## Completed On 2026-08-04
|
||
|
||
- Repaired deployment availability for monthly and company report artifacts. Removed the monthly Node/private-package
|
||
runtime path and the stale Node builders/package manifests, added Python/openpyxl monthly validation, and added
|
||
shared OSS publication/read routing with hash/size/MIME rechecks. Migration 016 allows OSS monthly artifact
|
||
identities while preserving historical local rows. Local fake-object-store, builder, publisher, download-router and
|
||
migration tests pass; the development machine has no Docker, so CentOS image/Compose acceptance is explicitly handed
|
||
to the operator. No live report or business data was changed.
|
||
- Fixed the reported `MONTHLY_REPORT_OUTPUT_VALIDATION_FAILED` false negative for the 2026-08-03 440-row monthly
|
||
workbook. `_validate_workbook` now scans read-only sheets sequentially with `iter_rows` and compares Excel-decimal
|
||
readback values within `0.000001`; sheet order, headers, dimensions, semantic identity, formula count and exact
|
||
`=R[row]*C[row]*G[row]` formulas remain strict. A 440-row/five-sheet decimal regression and the 18-case monthly
|
||
builder/publishing/worker/service/repository suite pass. The dead/pending outbox events were not modified.
|
||
|
||
## Completed On 2026-08-03
|
||
|
||
- Removed the private npm dependency from the company-channel report deployment path after CentOS Docker build failed
|
||
with `@oai/artifact-tool` 404. The company workbook builder now uses Python/openpyxl inside Web, keeps formula-injection
|
||
text escaping, produces no preview PNGs, and validates regenerated workbooks after saving. `compose.yaml` starts Web
|
||
with `--enable-company-reports`; HTTP/IP test overrides must keep that flag while omitting `--secure-cookies`.
|
||
Focused company-report and deployment-entrypoint tests pass 19/19. No database migration or live server deployment was
|
||
performed from this workstation.
|
||
- Made the mobile H5 dashboard publicly readable without weakening the desktop/operator boundary. Anonymous users can
|
||
load `/h5`, its H5 assets and purpose-built `/api/public/h5/months` plus `/api/public/h5/analytics` aggregate routes;
|
||
the public projection omits source hashes and operational metadata. Generic analytics, legacy H5 APIs, desktop pages,
|
||
detailed health, jobs/traces, downloads and all write paths remain authenticated. H5 keeps optional authenticated
|
||
logout, uses no-detail `/healthz` for its connection indicator, and 71 `test_arr_web*` tests plus syntax checks pass.
|
||
No live service restart or public deployment was performed.
|
||
- Clarified ARR trace semantics for internet-facing deployment. `artifact_callback` traces now expose additive
|
||
`execution_scope=arr_runtime`, `processor_mode=fixed_processor` and `remote_dispatch=none`; legacy `direct_mcp`
|
||
traces identify remote Agent/MCP delivery. User-visible messages no longer call ARR output “本地处理”, and the
|
||
queued downstream message explicitly says Finance database commit is complete while the outbox waits for its
|
||
consumer. Persisted `local-...` delivery keys and existing trace fields remain unchanged. Trace/Web tests (27) plus
|
||
Python/JavaScript syntax and diff checks pass; no live task or business data was mutated.
|
||
- Performed a read-only live diagnosis after a user reported that Daily Report uploaded but monthly did not update.
|
||
Daily run 39 is accepted and Finance version 14 is active with 111 retained rows for 2026-08-01; its
|
||
`arr.daily_version_committed` outbox event was initially pending with zero attempts. The dedicated worker was then
|
||
started in detached Screen, consumed the backlog through event 20, and published active August V01 (`更新至
|
||
2026-08-01`, 111 rows); July V05 (`更新至 2026-07-27`, 987 rows) also became active while older July V04 was
|
||
superseded. The registered XLSX/result pair exists and the Web health endpoint remains ready. The worker is running
|
||
for this session, but reboot-persistent supervision is still open; no re-upload or source-code change was made.
|
||
- Performed a second read-only BI freshness diagnosis after August publication advanced. Active August V02 is now
|
||
`更新至 2026-08-02` with 268 rows, and a fresh repeatable-read analytics query returns the same watermark and
|
||
`updated_at=2026-08-03 14:21:29 +08`. An already-open BI page can still show 8.1 because `app.js` loads analytics
|
||
only at boot, first BI entry or month change; the monthly page's four-second poll does not refresh BI. This is a
|
||
frontend freshness bug, not a monthly worker/database publication failure. No code or business data changed.
|
||
- Implemented BI freshness detection for desktop and public H5. While visible, each surface checks its lightweight
|
||
month metadata endpoint every five seconds and reloads full analytics only when the selected month's `updated_at`
|
||
changes or the selected month changes. Polling pauses while hidden, resumes with an immediate check, preserves the
|
||
last good snapshot during transient failures, and keeps the existing four-second monthly-history polling separate.
|
||
Static BI/Web tests pass 5/5 and 19/19; both JavaScript syntax checks and `git diff --check` pass. No API, report or
|
||
business data behavior changed.
|
||
- Fixed company-report duplicate publication. A retry now validates the existing archive/result pair against the
|
||
deterministic reservation and builder `semantic_sha256`, verifies the archive hash against the result JSON, and
|
||
reuses the first successful artifact metadata instead of comparing the new XLSX binary SHA. Partial, corrupt or
|
||
semantically conflicting pairs fail closed; an existing `current` file is not overwritten, while a missing one can be
|
||
repaired from the authoritative archive. First-publication rollback behavior and monthly publication code are
|
||
unchanged. Publisher tests pass 6/6, company-report tests pass 32 with five optional ArtifactTool skips, Web
|
||
company/trace tests pass 13/13 and Python compilation is clean. No live report rerun or business-data mutation was
|
||
performed; the historical 2026-07 `11-20` retry remains to be rerun as a separate acceptance action.
|
||
- Added Booking Excel to company-report traceability. New report jobs persist a safe source summary captured server-side
|
||
at submission (batch id, filename, activation time and counts); the company page now shows the active source, job
|
||
detail shows the submission-time source, and history adds a source column. Re-uploading the same active workbook is
|
||
treated as an informational refresh that keeps the existing source and report history; it does not re-extract or
|
||
auto-generate a report. Historical jobs without source metadata remain readable and show that the source was not
|
||
recorded. Full discovery passes 360 tests with 10 optional skips; no live upload, activation, report generation or
|
||
service restart was performed because the available browser session was unauthenticated.
|
||
- A read-only live follow-up found accepted Booking Excel batch 7 active with 72 rows and no review draft. The latest
|
||
August `01-10` jobs contain `source: null` and all five company results fail at `publish` with
|
||
`COMPANY_REPORT_PUBLISH_FAILED` after building row counts. The port-8766 Web process predates both source-traceability
|
||
and current duplicate-publication handling, so a controlled Web restart followed by one authorized rerun is required;
|
||
no restart or backfill was performed.
|
||
- Clarified company-report source and publication status copy for operators. The job panel now says `本次任务使用的
|
||
Excel`; missing metadata says `未记录,无法确认使用了哪份 Excel` and explains that the filename/batch were not saved.
|
||
`COMPANY_REPORT_PUBLISH_FAILED` now says the data reached publication but the official Excel was not saved, and
|
||
explicitly distinguishes that error from successful reuse of a complete identical version. Focused Web/company and
|
||
publisher tests plus JavaScript syntax checks pass. Existing `source: null` jobs remain untraceable and no live
|
||
restart, report rerun or business-data mutation was performed.
|
||
- Removed the redundant Booking Excel provenance card from company-report job details and the provenance column from
|
||
generation history. The upload/review current-source panel and server-side job `source` metadata remain intact for
|
||
operation and audit. Web/company regression passes 29 tests, JavaScript syntax and runtime-reference checks pass,
|
||
and no report or business data changed.
|
||
- After the operator-reported 8766 restart and another `2026-08/01-10` attempt, job
|
||
`253ce23dc7544d34a6e0fb9405ac4d9a` again built all five row sets (`54/18/7/1/15`) but failed at `publish`; the prior
|
||
`c5358fa293184f5f9bad85178afada22` succeeded with the same counts and complete artifacts. Read-only process evidence
|
||
still shows PID `11176` started on 2026-08-02 12:20, before the current duplicate-publication source change, so the
|
||
effective 8766 listener was not replaced. Publish copy was simplified to direct restart-and-retry instructions; no
|
||
report, database or output mutation was performed by this recheck.
|
||
- The operator's latest `2026-08/01-10` retry, job `087dceca79e64bebb719ad06e7813465`, finished at 15:29 +08 with the
|
||
same five row counts and the same publish-only failures. At 15:37 +08, TCP 8766 was still owned by PID 11176 under
|
||
the 2026-08-02 Screen session; the launcher preflight is ready, but the listener still predates the current publisher
|
||
and job-source modules. The earlier successful five archive/result pairs and current downloads all remain
|
||
SHA-256-consistent, and six focused publisher tests pass. No restart, rerun, file repair or business-data write was
|
||
performed; exact listener replacement remains the required operational fix.
|
||
- With explicit operator confirmation, the exact stale PID 11176 was stopped and replaced by PID 54127 at 15:46:29
|
||
+08 through the existing launcher. One authorized job `05cc547d62854df281b0c9cac60e6f6d` then succeeded at 15:48:37
|
||
+08 for all five companies with row counts `54/18/7/1/15`; the new job recorded active Booking batch 7 source
|
||
metadata, reused the same version numbers/artifact descriptors as `c5358fa...`, and all five authenticated HTTP
|
||
downloads returned 200 with matching archive/current/result hashes. The prior files were not overwritten, the
|
||
temporary session was logged out, and no Booking/Finance source or fact mutation occurred.
|
||
- Confirmed the source contracts for repeated Booking/report workflows: byte-identical activated Excel uploads reuse the
|
||
activated source; same rows with different XLSX bytes create a new reviewable source; unchanged report snapshots
|
||
reuse their complete publication pair; changed Finance or Booking version pins create a new report version; and an
|
||
activated subset changes Booking detail coverage without deleting the Finance fact rows. Focused source/publisher/
|
||
integration checks pass 14 tests with two optional ArtifactTool skips. The controlled 8766 replacement and one live
|
||
5/5 rerun now pass; reboot-persistent supervision remains a separate deployment gap.
|
||
- Confirmed a separate operator-visibility gap: the publisher reuses the archive/result pair internally, but neither
|
||
`PublicationOutcome`, `CompanyRunResult` nor the public company-job projection exposes a reuse disposition or prior file
|
||
identity. A successful retry therefore looks like a normal new successful job with a download link; no code change was
|
||
made in this read-only check.
|
||
|
||
## Completed On 2026-08-02
|
||
|
||
- Restored cross-month history visibility for Daily Report, monthly processing and company-channel generation history.
|
||
Each list now has an independent previous/month/next/`本月` navigator and defaults to its latest non-empty month using
|
||
authenticated read-only `GET /api/history-months`. Counts and empty states name the active month and can jump to the
|
||
latest month with records. Company `生成月份` is now visibly labeled and independent from history `查看月份`; monthly
|
||
polling follows the viewing month without changing generation contracts. A guarded live read returns July counts of
|
||
30 daily and four monthly records, while company state retains four July jobs. The full 356-test suite passes with 10
|
||
skips, and isolated Chinese/English/Thai browser QA at 1440/900/390 pixels found no page overflow. Port 8766 was
|
||
restarted under detached Screen and is `ready`; no upload, report generation, source activation or business-data write
|
||
occurred.
|
||
|
||
## Completed On 2026-07-31
|
||
|
||
- Refined the Channel BI utility surface in preserve mode: removed the visible BI panel heading and ready-state
|
||
`数据库已连接` copy while retaining the navigation label, browser metadata and semantic status dot. Compressed the
|
||
month selector to a compact control on desktop/H5, and changed task-log/logout utilities from button chrome to
|
||
low-emphasis accessible links without changing their behavior. JavaScript syntax plus focused BI, daily visual,
|
||
task-log and auth tests pass; no API or business data changed.
|
||
- Tightened the Channel BI panel's top rhythm after the heading removal: the desktop panel now starts 20px higher
|
||
relative to the shared 38px page padding, while the responsive desktop shell keeps a 10px mobile-only adjustment.
|
||
The four-tab bar, panel content and BI data behavior are unchanged; focused Web regression remains green.
|
||
- Refined the Channel BI presentation and data-range contract. Removed the BI-only CHANNEL PERFORMANCE, snapshot
|
||
watermark copy and visible TOTAL PRICE labels on desktop and H5, and added a localized 数据范围 line below the
|
||
company-sales title. The read-only analytics payload now supplies the minimum and maximum ARRIVAL coverage dates
|
||
from one repeatable-read current-version snapshot; no Finance/report business data changed. JavaScript syntax and
|
||
focused analytics/Web/UI tests pass.
|
||
- Implemented the ARR Web Chinese/English/Thai presentation layer. Desktop, H5 and login now share `arr_web/static/i18n.js` with locale selectors, localStorage/cookie preference, `html.lang`, dynamic prompt/API-error translation, Bangkok/Gregorian/Latin-digit date/number formatting and locale-aware duration/money display. The runtime preserves original source strings so switching back to Chinese is safe. `ARR Report`, operational proper nouns, business/API behavior and XLSX/monthly/company report output contracts remain unchanged. Scoped Web regression passed 61/61; full discovery still has only the pre-existing environment errors for missing `httpx`/unavailable OSS client.
|
||
- Rotated both ARR Web operator credential values in separate macOS Keychain items without recording either value in
|
||
source, launcher arguments, logs or project memory. The exact port-8766 listener was stopped by controlled SIGINT and replaced at
|
||
15:30 +08 under one detached `arr2-web-8766` Screen session. Live acceptance rejects the prior pair, accepts the new
|
||
pair, verifies hardened cookie/session/CSRF/logout, desktop/H5, anonymous route boundaries, all six detailed readiness
|
||
flags and loopback/LAN health. Two read-only snapshots stayed at 30 daily jobs, 4 monthly versions and 4 company jobs;
|
||
the newest business records predate the restart, so no business write occurred. Nine focused auth/deployment tests and
|
||
credential-literal scans of the workspace, launcher, state logs and process list pass. The requested password still
|
||
matches the username, so the distinct high-entropy password follow-up remains open.
|
||
- Simplified the three company-channel generation cards by removing the visible `第一期`/`第二期`/`第三期`
|
||
labels and making the C/O ranges the primary card values: `C/O:01-10`, `C/O:11-20` and a month-aware final range
|
||
(`C/O:21-30` for 30-day months or `C/O:21-31` for 31-day months).
|
||
Completion-state chips (`周期未结束` / `周期已结束`) and Bangkok completion times remain, while the underlying period
|
||
keys and generation payload are unchanged. An incomplete period is now still generatable; future months remain blocked.
|
||
JavaScript/HTML checks, 28 focused Web/company tests, 348-test discovery and isolated 1280x720/390x844 browser QA
|
||
pass with no overflow or page-console warnings. The shared port-8766 service was restarted at 14:36:45 +08 and
|
||
its `/healthz` endpoint returns `ready`.
|
||
- Simplified company report results for end users: duplicate review problems are collapsed by type/code/period so a
|
||
repeated `同房型存在不同静态价格,需人工复核` item appears once per company and period. Replaced the internal
|
||
`版本`/`version_no` display with `生成时间`, using the completed job time and falling back to its created time;
|
||
API version metadata remains intact. JavaScript/HTML checks, 28 focused Web/company tests and targeted deduplication
|
||
execution pass.
|
||
- Rebuilt the company-channel report setup as a dense four-card desktop row: `上传 Excel 报表` followed by the first,
|
||
second and third C/O periods. At that point the `报表月份` picker was a compact visually unlabeled control in the large
|
||
setup card's upper-right corner; the 2026-08-02 history repair later labeled it `生成月份` and moved history filtering
|
||
to its own control. All period CTAs read `生成` with responsive card-sized widths. Replaced the
|
||
browser-native generation confirm with an in-page accessible dialog showing month/period context; cancel, backdrop
|
||
and Escape dismiss without submitting, while explicit confirmation preserves the existing payload, generation polling
|
||
and business behavior. JavaScript/HTML checks, 28 focused Web/company tests, 348-test discovery and isolated
|
||
1280x720/390x844 browser QA pass with no overflow or console warnings; the shared port-8766 service was restarted at
|
||
14:36:45 +08 and its `/healthz` endpoint returns `ready`.
|
||
- Rebalanced the company-channel setup surface for the current Finance workflow. The fixed five-company scope now sits
|
||
beside `公司渠道明细` as pale helper text, the Excel upload action is bounded to a 760px desktop rail and remains
|
||
full-width/single-column on mobile, and `刷新任务` exposes a read-only scope tooltip. The generation month remains the
|
||
C/O report-month selector for period completeness and the generation payload; its former history-filter role was
|
||
removed by the 2026-08-02 cross-month history repair. No report,
|
||
upload or database behavior changed. JavaScript/HTML checks, 28 focused Web/company tests, 348-test discovery and
|
||
isolated 1280x720/390x844 browser QA pass with no overflow or console warnings. Port 8766 was not mutated by QA.
|
||
- Compressed the daily overview row to a compact equal-height desktop treatment. The upload card now uses a horizontal
|
||
icon-and-copy dropzone, reduced heading/footer spacing and smaller controls, while the three KPI cards stretch to the
|
||
same row height. Mobile upload layout remains unchanged. JavaScript syntax and 20 focused Web/static/trace tests pass;
|
||
no upload, API or processing behavior changed.
|
||
- Refined the company-channel generation controls for dense Finance use. The three period CTAs are now compact
|
||
104–124px actions centered inside each card, while `提取并核对` uses the same 42px button family and is centered
|
||
inside the upload action column on desktop and mobile. Labels remain single-line, upload/report behavior is
|
||
unchanged, 28 focused Web/company tests and the 348-test discovery pass, and the restarted port-8766 service is
|
||
healthy at 13:37:49 +08.
|
||
- Restored equal card heights across the daily overview row. The ARR.XML upload panel and the three KPI cards now
|
||
stretch to the same grid-row height, with KPI content centered inside each card; mobile stacking remains unchanged.
|
||
JavaScript syntax and 20 focused Web/static/trace tests pass; no upload, API or processing behavior changed.
|
||
- Reverted the KPI width shrink after clarification. The three daily cards now retain their original grid-column widths,
|
||
while their height is content-sized and vertically centered in the upload module's shared desktop row. JavaScript
|
||
syntax and 20 focused Web/static/trace tests pass; no upload, API or processing behavior changed.
|
||
- Centered the shortened daily KPI cards within the upload module's shared desktop grid row, preserving their widths,
|
||
270px height and mobile content-sized fallback. JavaScript syntax and 20 focused Web/static/trace tests pass; no
|
||
upload, API or processing behavior changed.
|
||
- Tightened the three daily KPI cards so they no longer inherit the upload panel's full grid-row height. The desktop
|
||
cards keep their existing widths and data hierarchy, use a compact 270px height with smaller decorative rings, and
|
||
return to content-sized cards on narrow screens. JavaScript syntax and 20 focused Web/static/trace tests pass; no
|
||
upload, API or processing behavior changed.
|
||
- Recomposed the daily overview into one desktop row containing the ARR.XML upload station plus the ARRIVAL DATE,
|
||
processing-duration and NO. OF ROOM cards. Removed the duplicate top `Daily Report` heading and `THIS MONTH` eyebrow,
|
||
renamed the daily-history heading to `Daily Report`, and kept the upload request, inline progress estimate and
|
||
on-demand task-log behavior unchanged. JavaScript syntax and 20 focused Web/static/trace tests pass; no API or
|
||
processing behavior changed.
|
||
- Updated the daily XML upload surface so submitting ARR.XML stays on the daily page instead of opening the task-log
|
||
dialog automatically. The upload card now shows a compact stage-based estimate for upload, fixed processing,
|
||
validation and database commit, finalizing at 100% on success and retaining an inline error state on failure. The
|
||
header task-log button remains the sole on-demand trace entry; the later 2026-08-11 interaction correction removed
|
||
daily-history row log activation. JavaScript syntax and the original 15 focused Web/static/trace tests passed; no API
|
||
or processing behavior changed.
|
||
- Simplified the desktop monthly page into a single six-column download table. The redundant standard-monthly heading,
|
||
`VERSION HISTORY`/version-record copy, visible monthly `版本` column and C/O-period footer note are removed; the
|
||
navigation label is now `月报`; the list is identified by a compact `月报处理` heading. The visible `更新至` cell reads the explicit `max_arrival_date` API field, which is
|
||
backed by the published run's `as_of_date` (the maximum included `ARRIVAL`) while retaining the legacy field and
|
||
version ordering for compatibility. The remaining panel uses a compact live-status toolbar and responsive table
|
||
spacing; focused Web/schema/task-log tests and JavaScript/Python syntax checks pass. No report or business data changed.
|
||
- Froze the Markdown-backed July company-channel baseline before any Booking Excel activation. The read-only,
|
||
non-publishing package binds the exact `RES_COMMENT_TYPE_OF_ROOM.md` hash to accepted Booking batch 1, five pinned
|
||
Finance daily versions, processor 1.2.0/rule identity and five generated XLSX files. All 314 output rows independently
|
||
match the Markdown-derived Booking Room expectation; 27 are filled and 287 are correctly blank. The builder reopened
|
||
and exact-value checked every workbook, rendered all 15 sheets, and the retained SHA-256 inventory verifies every
|
||
package file. One reviewing Excel draft remained separate; the current Booking pointer and room-item counts were
|
||
unchanged.
|
||
- Refined the Booking record-extraction review surface for dense operator work. The page now renders 50 records at a
|
||
time, supports individual and all-visible selection, and deletes 1-50 unique selected records through one bounded
|
||
atomic backend operation. Single and batch delete share a count-aware in-page dialog; cancel, backdrop and explicit
|
||
Escape handling never submit and restore focus. The separate accepted-source status/summary is removed; the open
|
||
review now identifies its own extraction records with the validated uploaded workbook filename directly below
|
||
`Booking记录提取`, wrapping fully on narrow screens. The requested review/upload helper copy is removed. Isolated authenticated browser QA covered one/two/50-row
|
||
selection plus 390×844 layout without calling delete; the full suite passes 346 tests with 10 expected optional skips.
|
||
- Implemented the deterministic Booking Excel extraction program requested for raw Tour Code/`โรงแรม` workbooks.
|
||
It applies physically-last-row replacement/cancellation, splits bracketed room items, normalizes agreed TWN/DBL
|
||
variants, preserves quantities on unknown labels, and routes unknown/unbracketed room names to editable/deletable
|
||
pending records. The supplied workbook replays to 26 Tour Codes, 37 items and 7 pending items; `LLT260715AC` becomes
|
||
`TWN/12 + DBL/9`, while `LT260715LD` becomes `U-TWN/17 + pending/2`. Durable review/activation, paged desktop UI and
|
||
bounded GET/POST/PATCH/DELETE transport are present. A real-PostgreSQL transaction probe created a two-item draft,
|
||
corrected its pending item, atomically activated one three-room source row and then rolled the outer transaction back;
|
||
source batch 1, zero drafts and zero synthetic artifacts were restored. No persistent Booking/report business write
|
||
was performed.
|
||
- Confirmed end-to-end readiness boundaries. The company-channel processor already reads current Booking views at report
|
||
generation; a live read-only July snapshot produced valid 5/5 results from 417 Finance facts and 27 matched Booking
|
||
Group Codes, with missing/unmatched Booking Room blank. The expanded Booking/company/real-XLSX suite passed 55/55.
|
||
The controlled real-PostgreSQL draft/edit/activation path passed inside an outer rollback. July `21-month-end` does not open until
|
||
2026-08-01 00:00 Bangkok, and a shared-database test workbook must be a deliberate complete replacement.
|
||
- Audited Booking parser 2.0's human-review requirements across the live schema, current source and active Web process.
|
||
During the audit, concurrent work applied migrations 014/015: the live database now has a current-source pointer plus
|
||
empty draft/item tables supporting basic confirmed/pending/deleted latest-state editing. It still lacks actor, reason
|
||
and revision history. Its earlier GET/POST-only transport finding was subsequently repaired with PATCH/DELETE handlers
|
||
and real socket coverage; real PostgreSQL write/rollback acceptance now passes. The audit itself made no persistent
|
||
database/runtime/business-data mutation.
|
||
- Completed a privacy-minimized, read-only Booking dimension/database audit. `Group Code + room type + quantity` is the
|
||
sufficient normalized allocation model for current data, whose nonblank codes do not cross stay/company/channel;
|
||
missing/unmatched enrichment is blank as designed. Its initial parser/importer snapshot was superseded by the dedicated
|
||
manual-review audit above; migrations 014/015 are formally applied and the transaction boundary is verified, while the
|
||
first operator-authorized real workbook activation remains incomplete.
|
||
No business data changed by this audit.
|
||
- Reduced the ARR login gateway to one clear brand statement and one form. The old workflow marketing copy, numbered
|
||
steps, repeated welcome/access copy and help/footer disclaimers are removed; the remaining field labels are
|
||
`username` and `password`. Existing password visibility, loading/error, safe-return and authentication behavior is
|
||
unchanged. Thirty-three focused Web/auth/UI tests pass, and live 390x844 plus 1280x720 checks show no horizontal
|
||
overflow or browser warnings/errors.
|
||
|
||
## Completed On 2026-07-30
|
||
|
||
- Added application-owned Finance login across desktop, H5, APIs, uploads, traces and downloads. Runtime credentials are
|
||
required, login attempts are bounded, random server-side sessions retain hardened cookies/CSRF, logout revokes the
|
||
session, and only login assets plus no-detail `/healthz` remain anonymous. Caddy now owns HTTPS only.
|
||
- Added a responsive ARR login gateway and desktop/H5 logout/session-expiry behavior. The live source passed wrong and
|
||
correct login, password visibility, safe `/`/`/h5` return, both logout paths, zero-console-error checks and
|
||
375/768/1024/1440 no-overflow verification.
|
||
- Added and applied additive migration 013. New uploads store the validated browser XML basename on
|
||
`ingestion.processing_runs`, while private source artifacts and processor input remain canonical `source.xml`.
|
||
Daily history and task trace read only the new provenance; pre-013 rows render `—`.
|
||
- Added and applied additive migration 012. The `reporting` schema stores monthly versions, Finance daily-version
|
||
lineage, channel row-count manifests and two artifact references without duplicating business/guest rows.
|
||
- Replaced in-memory monthly identities with database IDs, sequential versions, canonical snapshot hashes, atomic
|
||
activation/supersession, persisted failures and idempotent published-snapshot replay.
|
||
- Made the report's `as_of_date` equal the greatest `ARRIVAL` actually included in its snapshot. XML filenames and the
|
||
wall clock are ignored.
|
||
- Added a standalone `monthly_reports.worker` process with leases, `FOR UPDATE SKIP LOCKED`, expired-lease reclaim,
|
||
bounded retry/backoff and dead-letter behavior.
|
||
- Made outbox acknowledgement conditional on a registered active/superseded report and both workbook/result artifacts.
|
||
- Replaced the synthetic monthly list and unavailable download resolver with `reporting.monthly_runs` reads and
|
||
confined path/size/SHA-256 checked downloads.
|
||
- Removed month/cutoff/manual-generation controls from the primary page. The guarded POST route remains only as a
|
||
controlled recovery surface when explicitly enabled.
|
||
- Changed every XLSX data-row `TOTAL PRICE` cell to the exact row-relative `=R[row]*C[row]*G[row]` formula and validates
|
||
the complete formula matrix again after reopening the workbook.
|
||
- Removed the monthly refresh control. The visible monthly tab now performs one non-overlapping list read every four
|
||
seconds, stops while hidden/inactive, reloads immediately when restored, and preserves the last good list during a
|
||
transient background failure.
|
||
- The desktop and H5 headers use the plain `ARR Report` identity with no decorative icon. The daily content heading is
|
||
`Daily Report`; the duplicated daily/monthly explanatory copy has been removed without changing automatic publishing.
|
||
- The desktop header utility formerly labeled `手机看板` is now `任务日志` and opens the existing black task console in
|
||
a native modal. The console no longer occupies the daily-processing layout, and the 2026-08-11 interaction correction
|
||
makes this header utility its only opener; upload completion and Daily rows do not open it. `/h5` remains available
|
||
by direct URL. Both history and trace SQL are explicitly limited to `pipeline_type = 'opera_daily'`, so this is a
|
||
one-daily-job processing trace rather than a global server, monthly-run or company-report log.
|
||
- Refined the daily desktop surface after visual review. `ARR Report` remains the dominant workspace title while
|
||
`Daily Report` is smaller; `任务日志` is a compact outlined button at the adjacent status-label size; the upload
|
||
station is centered and responsive; decorative `01 / UPLOAD` and `本月留痕` labels are gone; and `开始处理` is a
|
||
compact right-aligned action. No upload, API, route or trace behavior changed.
|
||
- Daily, monthly and selected-month company histories use 50 records per page. Each footer shows the exact monthly
|
||
total, current visible range, page number and previous/next controls; counts and rows are read from one database
|
||
snapshot or coordinator lock. Channel BI remains an aggregate view rather than a paginated detail list.
|
||
|
||
## Live Acceptance
|
||
|
||
- Five `arr.daily_version_committed` events have produced July publications: one is the earlier database acceptance
|
||
fixture `mvp-v1-fixture-20260727`; four are real 07-20/07-21/07-22/07-23 uploads.
|
||
- Report ID 4/version 4 is active for 2026-07 with `as_of_date=2026-07-27`, 417 rows and six channels; V03/V02/V01 are
|
||
superseded. Its persisted date equals max current `ARRIVAL` structurally, but that maximum comes from the fixture.
|
||
- The superseded V03 workbook has 308 authorized `TOTAL PRICE` formulas and zero mismatches. Its 40,635 bytes and SHA-256
|
||
`494fb78283f68cb7bffce2501b3531613c494d148a56a7ccc8d2aabe46b1e29c` match the registered artifact.
|
||
- Earlier browser/access-log verification showed V03/V02/V01 downloads and repeated monthly API reads at the
|
||
four-second cadence. The current API now lists V04 active above those versions; ARR2 Web remains green and the worker
|
||
remains separate.
|
||
- ARR2 Web is active on all local interfaces at port 8766 under detached Screen session `arr2-web-8766`. The current
|
||
trusted-Wi-Fi entry is `http://192.168.3.103:8766/`; anonymous root redirects to login and `/login` plus `/healthz`
|
||
return HTTP 200. The current process restarted at 2026-07-31 19:27:42 +08 to load the Web i18n static resources
|
||
after the source implementation; it loads the Booking bulk-review
|
||
composition; the public health check returns `ready`.
|
||
Authenticated acceptance reports database, processing, monthly reports, downloads, company reports and company-source
|
||
upload ready. At the earlier 11:30 acceptance the draft endpoint returned no open draft; this later UI task did not
|
||
authenticate against, inspect or mutate the shared draft contents. Anonymous PATCH/DELETE reach the application auth gate and return JSON
|
||
401 rather than transport-level 501. Migrations 014/015 are live and the current pointer selects batch 1; no persistent
|
||
Booking write was performed. Legacy port 8765 remains closed; the mode-0700 launcher keeps secrets outside the repository.
|
||
- The active ARR2 analytics API on port 8766 returns 417 rooms because the known one-row fixture remains current.
|
||
- Live pagination acceptance on port 8766 currently reports 30 daily jobs, 4 monthly versions and 4 company jobs. All
|
||
three render page 1/1 with correct disabled boundary controls; a 390-pixel viewport has no horizontal overflow.
|
||
- Migration 013 is live in `booking_test`: 25 total processing runs, zero falsely backfilled upload filenames and a
|
||
validated constraint. A rolled-back Unicode-basename probe proved history/trace return the upload name while the
|
||
artifact remains `source.xml`.
|
||
- The pre-012 privacy-minimized metadata checkpoint is
|
||
`runtime/backups/booking_test_pre_012_20260730T151922+0800/manifest.json`, SHA-256
|
||
`230206eb074fd5877132744eb592b3dc6cd6638d12a3dd4d71a8101a9bd2998e`.
|
||
|
||
## Active Data-Quality Incident
|
||
|
||
- The company-report cutoff-10 and cutoff-20 Web jobs both completed 5/5 with valid zero-row workbooks because every
|
||
current supported-company fact has C/O in the 21-to-month-end period. Processor 1.2.0 implements the final
|
||
user-confirmed fallback: no Group Code leaves both `RES_COMMENT`/`Booking Room` blank; a present Group Code that
|
||
cannot resolve in Booking remains visible while only `Booking Room` is blank. A repeatable-read July 31 preview is
|
||
now valid 5/5: LianTai 138 rows/122 blank Booking Rooms, QBD 139/128, DY-AI-Easy-KB 1/1, FengRun 33/33 and HanaTour
|
||
3/3. No report or business-data mutation was performed. The active port-8766 runtime now loads the current processor
|
||
and reports company-report readiness true; one controlled 5/5 Web job remains a separate acceptance action, with a
|
||
post-completion rerun recommended if later source facts should be reflected.
|
||
- Finance current version 2 is `synthetic.xml` from provider `local_fixture`; it adds 1 room, 3 room-nights, 5,400
|
||
revenue and a synthetic room type to Channel BI and all July monthly publications.
|
||
- V01's legitimate operational source is exactly 119 rows with `ARRIVAL=2026-07-21`; its persisted lineage and
|
||
hash-matched workbook also contain the one-row 07-27 fixture, which is why the stored report says 120 rows and
|
||
`as_of_date=2026-07-27`. This is contaminated content, not a metadata-only date error.
|
||
- Excluding the fixture leaves the verified four-day business total of 416 rows/rooms, 853 room-nights and 1,451,350
|
||
revenue through ARRIVAL 2026-07-23. Hash matching and isolated replay prove the accepted file mapping is
|
||
07-20=100, 07-21=119, 07-22=88 and 07-23=109; the user's total was right but the 07-20/07-22 labels were reversed.
|
||
- No database repair was performed during diagnosis. The fixture should be retired from the current projection without
|
||
deleting immutable history, followed by a clean July republication and live API verification.
|
||
- Channel BI now checks the selected month's `updated_at` every five seconds while visible, so an already-open view
|
||
reloads its aggregate data after a new Finance version is published. The historical 308/417 observation above is
|
||
retained as evidence of the earlier stale-view behavior, separate from the one-row fixture contamination.
|
||
- The BI `公司数` card actually counts worksheet channels; LianTai GROUP/FIT are separate, so six channel keys can still
|
||
correspond to five top-level companies.
|
||
|
||
## Verification Status
|
||
|
||
- The 2026-07-31 Web i18n implementation passed JavaScript syntax checks, a DOM/runtime locale smoke (Chinese → English → Thai → Chinese), and 61 focused ARR Web tests. A full 298-test discovery was attempted; eight import/runtime errors are environment-only (`httpx` absent and OSS client unavailable), with no i18n-related failure.
|
||
- Migration 012 passed transaction-only up/down probes, including a synthetic active publication followed by rollback.
|
||
- The 38-test monthly/migration/Web regression set passed, including real XLSX build/reopen checks.
|
||
- A clean full-suite rerun with the optional ARR1 compatibility dependency installed passed 291 tests in 108.2 seconds
|
||
with 7 explained environment/fixture skips and no failures or errors.
|
||
- The automatic-list follow-up passed 18 focused Web/schema tests, JavaScript syntax checking and a clean 291-test full
|
||
discovery in 110.8 seconds with the same 7 explained environment/fixture skips.
|
||
- The post-update BI diagnosis passed 24 focused analytics/contracts/Web tests and reconciled both live Web APIs against
|
||
a repeatable-read, read-only database snapshot.
|
||
- Hash-matched local source inspection and isolated deterministic replay reproduced `0720.XML=100` and `0722.XML=88`;
|
||
the 07-23 accepted run was traced to its 16:12:27 commit and 109 retained rooms.
|
||
- The final scoped company/Booking/report suite ran 32 tests successfully with three expected private-fixture skips; it
|
||
included real XLSX export, value verification after reopen, rendering and the dedicated no-Group-Code path. Four Web
|
||
company-task coordinator tests also passed.
|
||
- The 50-row pagination follow-up passed JavaScript syntax, 29 focused Web/repository tests and the complete 305-test
|
||
discovery with 10 existing environment-dependent skips. Live desktop and 390-pixel checks confirmed all three
|
||
totals/ranges and boundary-button states.
|
||
- The upload-filename change passed 69 focused tests, JavaScript/Python syntax checks and a clean 312-test full
|
||
discovery in 99.280 seconds with 10 environment/fixture skips.
|
||
- The application-login change passed a 33-test focused auth/Web/company/deployment set after final compatibility edits,
|
||
JavaScript/Python syntax checks, Ruby static Compose parsing and the clean 317-test full discovery in 97.311 seconds
|
||
with 10 environment/fixture skips. Docker is not installed locally, so live `docker compose config` was not claimed.
|
||
- The expanded absent-or-unmatched company-report fallback passed a 37-test
|
||
company/Booking/real-XLSX/Web-coordinator suite with three expected private-fixture skips and no failures; the current
|
||
controlled July 31 projection previewed valid 5/5. A separate non-publishing real-data vertical slice built, reopened,
|
||
value-checked and rendered all five actual workbooks in a temporary directory.
|
||
- The daily visual-polish follow-up passed JavaScript syntax and 33 authenticated Web/auth/daily-visual/task-log tests.
|
||
Live 375/768/1024/1440 checks confirmed the corrected title hierarchy, centered upload geometry, compact actions,
|
||
task-log dialog focus restoration, zero horizontal overflow and zero browser warnings/errors.
|
||
- Live login activation passed anonymous root/API rejection, exact credential login, hardened cookie/session/CSRF,
|
||
authenticated desktop/H5/history reads, all five readiness flags, logout revocation and loopback/LAN health. Read-only
|
||
totals at initial activation were 24 daily jobs, 4 monthly versions and 3 company jobs; no upload, report job or worker
|
||
was started.
|
||
- The 2026-07-31 credential rotation passes prior-pair rejection, new-pair login, hardened cookie/session/CSRF, logout
|
||
revocation, desktop/H5 and all six current detailed readiness flags. Two read-only snapshots remained 30 daily jobs,
|
||
4 monthly versions and 4 company jobs, with their latest creation times before the 15:30 restart. No upload, report
|
||
generation, Booking activation or monthly worker action occurred.
|
||
- Booking extraction runtime acceptance passed authenticated health/source-draft reads, clean logout, anonymous
|
||
PATCH/DELETE application routing and direct read-only repository access. At that probe all relevant readiness flags
|
||
were true, source batch 1 remained current and no draft existed. A later operator upload created one reviewing draft;
|
||
the Markdown baseline freeze proved it remained isolated and did not change batch 1. A 2026-07-31 14:14 +08 live
|
||
read-only recheck found no reviewing draft and still found Markdown batch 1 current with 867 rows, six worksheets and
|
||
348 Group Codes, so the draft blocker is currently clear without any Booking source switch.
|
||
- The same live recheck found that the current July company-report projection has advanced beyond the frozen
|
||
five-version baseline: 986 supported-company Finance facts now all have C/O dates from July 21 through July 30.
|
||
Read-only processor 1.2.0 output remains valid 5/5 with 598 rows, 224 filled Booking Rooms and 374 blanks. The earlier
|
||
314-row package remains correct for its pinned snapshot; it is not the expected row count for this later live
|
||
projection. The first two July periods can now be generated from the current snapshot before their calendar
|
||
completion; any later Finance facts within the fixed C/O ranges require a rerun.
|
||
- Final post-change discovery ran 343 tests in 102.451 seconds: all passed, with 10 explained optional
|
||
renderer/private-fixture skips. JavaScript syntax, Python compilation, supplied-workbook replay and the 17 focused
|
||
parser/review/coordinator/router/socket tests are also green.
|
||
- Booking review persistence passed a real-PostgreSQL transaction-only vertical slice: draft creation exposed two items
|
||
with one pending, edit confirmed the pending item, activation produced one source row with quantity three, and the outer
|
||
rollback restored batch 1 with no synthetic draft, source or artifact residue.
|
||
- A 2026-08-03 diagnosis reproduced the 2026-07 `11-20` company-report retry failure: all five companies failed at
|
||
`publish` after an earlier same-period success because repeated XLSX builds had identical semantic SHA-256 values but
|
||
different binary SHA-256 values. Publisher idempotency now reuses a complete matching archive/result pair and fails
|
||
closed on partial or conflicting state; the historical retry still needs a deliberate live rerun.
|
||
- Isolated authenticated browser checks covered the upload-first desktop flow, editable review table, fixed-company text
|
||
and responsive 375/390-pixel layouts with no horizontal overflow or console errors.
|
||
|
||
## Remaining Deployment Work
|
||
|
||
- Perform the first operator-authorized real workbook upload/review/activation, then run one controlled five-company
|
||
report and verify all five downloads. The database transaction boundary is accepted, but this task intentionally did not
|
||
replace the current business Booking source. Because activation replaces the whole source, supply a complete workbook
|
||
and restoration plan.
|
||
- Decide whether Booking confirmation is a simple single-operator correction loop or an auditable approval workflow;
|
||
add actor/reason/revision history and stronger declarative DB transitions if audit-grade confirmation is required.
|
||
- Upload one controlled raw Tour Code/`โรงแรม` workbook, review/activate it, confirm
|
||
replacement semantics and run one controlled company report. A period may be generated before its Bangkok completion
|
||
boundary, but rerun it after completion if the source snapshot changes; the currently open July periods contain zero
|
||
rows and cannot prove populated Booking Room. Before real use, confirm whether 23 fixture Group Codes shared by
|
||
`DY-AI-Easy-KB` and `LIANTAI-FIT` are intentionally additive; the current view merges them globally.
|
||
- The prior 8766 outage and credential gate are resolved. The current Web process is a detached local Screen session,
|
||
not a reboot-persistent service; `/Users/chillishark/.local/bin/arr2-web-8766 --check` validates its private route and
|
||
Keychain inputs without printing them before a controlled restart.
|
||
- Live authentication/readiness and one controlled 5/5 company-report job with all five downloads are accepted. One
|
||
no-PII XML upload should still confirm migration-013 filename provenance after restart; the Web/worker sessions remain
|
||
detached and are not reboot-persistent.
|
||
- The latest operator-selected Web credentials were rotated on 2026-07-31, but the password still matches the username.
|
||
Rotate it again to a distinct high-entropy value in Keychain, followed by one controlled Web restart.
|
||
- The workstation runs Web and worker as separate processes. The checked-in Compose image supports both report paths
|
||
through Python/openpyxl; the worker still needs the existing database/OSS secrets and may use `/app/outputs` only for
|
||
staging and local `.web-jobs` state. A formally controlled no-PII CentOS Docker acceptance run remains appropriate.
|
||
- ARR2.0 now has Git metadata; `main` tracks `origin/main`. Runtime credential values remain outside Git and project
|
||
files.
|
||
|
||
## Last Updated
|
||
|
||
2026-09-17
|