Files
wyndham-ARR/.project-docs/30-worklog/task-history.md
2026-08-03 16:08:14 +08:00

48 KiB
Raw Blame History

Task History

Completed Tasks

Date Task Outcome Docs Updated
2026-08-03 Execute controlled fix and live-accept 2026-08 01-10 company report With explicit confirmation, stopped only the stale PID 11176 and started new listener PID 54127 through the existing Keychain-backed launcher. One authorized job 05cc547d… succeeded 5/5 with row counts 54/18/7/1/15, captured active Booking batch-7 source metadata, reused the existing version/artifact identities, and passed five HTTP download/hash checks. Logout and temporary-file cleanup completed; no Booking/Finance source or fact mutation occurred Current state, runtime evidence/index, stale item, commitments, scoped planning record
2026-08-03 Diagnose the latest 2026-08 01-10 official-Excel save failure Read-only evidence confirms newest job 087dceca... built all five companies (54/18/7/1/15) and failed only at publish. Port 8766 is still PID 11176 from 2026-08-02, older than the semantic-reuse publisher fix; the earlier successful five-file archive/result/current set remains hash-consistent and intact. The launcher preflight is ready and six publisher tests pass. Repair is an exact controlled listener replacement followed by one authorized rerun; no restart, report write or business-data mutation was performed Current state, runtime evidence/index, stale item, scoped planning record
2026-08-03 Check whether company-report retries show reused-file identity Confirmed the publisher can reuse an existing archive/result pair, but the outcome, job API and frontend expose only success/version/download; users cannot see that the file was reused or which prior artifact supplied it. No code or business-data change was made Current state, retry-semantics evidence/index
2026-08-03 Confirm repeated Booking and company-report rerun semantics Verified by source inspection and focused tests: byte-identical activated Excel reuses the source; same rows with different XLSX bytes require a new review/activation; unchanged report snapshots reuse complete publication pairs; a subset source can be activated and rerun, leaving Finance rows present while missing Booking room details remain blank. Live acceptance remains pending the stale 8766 process replacement Current state, retry-semantics evidence/index, stale item
2026-08-03 Recheck 2026-08 company-report publication after reported 8766 restart The newest 01-10 job again built all five row sets (54/18/7/1/15) but failed at publish; a read-only process check shows the effective listener is still PID 11176 from 2026-08-02, before the current publisher fix. Simplified the confusing duplicate-reuse error copy to direct restart-and-retry instructions; 29 Web/company tests and JavaScript checks pass, with no report or business-data write Current state, runtime/status-copy evidence, stale item, scoped planning record
2026-08-03 Remove redundant company-report Excel provenance module Removed the source card from job details and the source column from generation history; retained the upload/review current-source panel and server-side source metadata. The history table and empty state now use seven columns. Web/company tests (29), JavaScript syntax checks and runtime-reference scan pass; no report or business-data write occurred Current state, status-copy evidence/index, scoped planning record
2026-08-03 Clarify company-report source and publish-failure copy The job detail/history now identifies the Excel as 本次任务使用的 Excel / 任务使用的 Excel; missing source metadata says the Excel cannot be confirmed and explains why. Publish failures now explain that data reached publication but the official Excel was not saved, and are not presented as a normal duplicate skip; a complete identical publication remains a success reuse. Focused Web/company/publisher tests and JavaScript syntax checks pass; no live report or business-data write occurred Current state, status-copy evidence/index, scoped planning record
2026-08-03 Add five-second Channel BI freshness detection Desktop and public H5 now poll lightweight month metadata every five seconds while visible, compare the selected month's updated_at, and reload full analytics only after a version change. Hidden tabs pause polling, visible tabs check immediately, and transient background errors retain the last good snapshot. BI visual tests pass 5/5, Web tests pass 19/19, both JavaScript syntax checks and diff checks pass; no report or business data changed Current state/history, Channel BI freshness evidence/index, stale item
2026-08-03 Diagnose BI remaining at 8.1 after August monthly publication Read-only database and analytics checks confirm active August V02 is 更新至 2026-08-02 with 268 rows, while a fresh BI query returns the same watermark. The existing page only loads analytics at boot, first BI entry or month change, so an already-open view can remain at 8.1. Confirmed a frontend freshness bug; no code or business data changed Current state/history, BI freshness evidence/index, existing stale lifecycle item
2026-08-03 Recover automatic monthly publication User-authorized detached monthly_reports.worker start consumed pending outbox events 1520 in order. July V05 (as_of_date=2026-07-27, 987 rows) and active August V01 (as_of_date=2026-08-01, 111 rows) are registered with workbook/result artifacts; all six checked daily-commit events are published, the XLSX passes ZIP integrity, and Web health remains ready. Re-upload and source-code changes were not needed; reboot-persistent supervision remains open Current state, daily-to-monthly evidence topic/index, stale supervision item, scoped planning record
2026-08-03 Review monthly worker logging and monitoring Confirmed Screen/stdout and Web/stderr are not durable monitoring, /healthz excludes worker liveness, and the existing outbox/task trace lacks heartbeat and monthly-specific end-to-end wording. Prepared a privacy-minimized structured-log, heartbeat, status and supervisor/alert recommendation; no code or runtime change was made Monthly worker observability evidence/index, stale item, scoped planning record
2026-08-03 Diagnose company-report source label after subset Excel activation Read-only checks found accepted current Booking Excel batch 6 with 73 rows and no open draft; latest August jobs were created after activation but saved source: null because the live Web process predates the source-traceability code. The label is a metadata/runtime mismatch, not proof that the report used the old source; no restart or backfill was performed Current state/evidence topic/index, stale item, scoped planning record
2026-08-03 Diagnose subset-source 2026-08 01-10 publication failures Batch 7 is accepted/current with 72 rows and no review draft. The latest job built all five company row sets but failed all at publish with COMPANY_REPORT_PUBLISH_FAILED; the live 8766 process predates both source metadata and current duplicate-publication fixes. No restart or rerun was performed Current state/evidence topic/index, stale item, scoped planning record
2026-08-03 Evaluate Daily task trace for company-report publication failure Confirmed the supplied Daily trace only covers successful Finance commit and outbox publication; it lacks company-report job linkage and publish-stage detail, shows unknown execution metadata and prints an unmasked full source hash. Recommended separate trace scopes, runtime identity and hash masking; no code/runtime change was made Daily/company trace evidence/index, stale item, scoped planning record
2026-08-03 Diagnose Daily Report uploaded but monthly report not updated Read-only database/runtime inspection confirms Daily run 39 committed successfully as Finance version 14 with 111 retained rows for 2026-08-01, but outbox event 20 remains pending with zero attempts because no independent monthly_reports.worker process is running. Monthly history still ends at July V04; no August version exists. No restart, rerun, upload or database write was performed Current state, daily-to-monthly diagnosis evidence/index, scoped planning record
2026-08-03 Make the mobile H5 dashboard publicly readable Added public H5 shell/assets and purpose-built sanitized aggregate month/analytics endpoints; desktop, generic APIs, legacy H5 APIs, detailed health, jobs/traces, downloads and writes remain protected. Anonymous H5 loading plus authenticated compatibility is covered by 71 Web tests and syntax checks; no live restart or deployment occurred Current state/history, architecture, business rules, ADR-005, H5 public-access evidence/index, scoped planning record
2026-08-03 Clarify ARR trace semantics for internet deployment Added additive execution-scope, processor-mode and remote-dispatch fields; replaced misleading “本地处理” copy and clarified that a pending downstream event follows a completed Finance commit. Existing delivery IDs/trace fields remain compatible; 27 trace/Web tests plus Python/JavaScript syntax and diff checks pass, with no live mutation Current state/history, ARR trace-semantics evidence/index, scoped planning record
2026-08-03 Add Booking Excel to company-report traceability New company-report jobs store the server-captured active source summary; the page shows the current source, job detail/history show the source Excel, and identical active uploads become an informational refresh instead of a generic extraction error. Old jobs remain compatible without source metadata. Focused Web/company tests and the 360-test suite pass with 10 optional skips; no live mutation or restart was performed Current state, source-to-report traceability evidence/index, scoped planning record
2026-08-03 Fix duplicate company-report publication Made same-reservation/same-semantic retries reuse the first validated archive/result identity even when a rebuilt XLSX has different binary bytes. Partial, corrupt or semantic-conflict states fail closed; an existing current file is preserved and a missing one can be repaired from the archive. Publisher tests pass 6/6, company-report tests pass 32 with five optional ArtifactTool skips, Web company/trace tests pass 13/13 and compilation is clean. No live rerun or business-data mutation was performed Current state, company-report retry evidence/index, scoped plan
2026-08-03 Diagnose 2026-07 company-report 正式表格发布失败 Found the historical 11-20 retry failed for all five companies at publication after an earlier same-period success. A read-only double-build probe showed identical semantic workbook identities but different binary XLSX SHA-256 values; the immutable archive/result identity rejects that retry. No code, report, database or output state was changed Current state, company-report retry evidence/index
2026-08-02 Restore prior-month history across Daily Report, monthly processing and company-channel detail Added a read-only merged history-month count endpoint and three independent month navigators with latest-non-empty defaults, month-aware empty/pagination states and Chinese/English/Thai responsive copy. Company generation/history months are separate and monthly polling follows only the viewing month. A live read confirms July 30/4/4 records, 356 tests pass, isolated 1440/900/390 QA is overflow-free, and the restarted 8766 runtime is ready without business writes Current state/history, history-visibility evidence/index, stale item, scoped planning record
2026-08-02 Diagnose missing prior-month history and design its display Proved the data was retained: July has 30 daily jobs, 4 monthly publications and 4 company jobs, while the August-default frontend view is empty. Daily/monthly loaders hard-code the Bangkok current month; company history hides its month filtering inside generation setup. Proposed visible per-history month navigation, recent-record empty states and separation of company generation/history months; no product code, runtime or business data changed History-visibility evidence/index, stale item, scoped planning record
2026-07-31 Tighten Channel BI top spacing Raised the desktop BI panel by 20px toward the four-tab bar and applied a lighter 10px mobile adjustment. Other panels, tab behavior and BI data are unchanged; JavaScript syntax and 39 focused Web tests pass Current state/history, Channel BI utility evidence
2026-07-31 Quiet the Channel BI header utilities Removed the visible BI page heading and ready-state 数据库已连接 copy, compressed the desktop/H5 month selector, and restyled task-log/logout as low-emphasis links while preserving click behavior. JavaScript syntax plus focused BI/daily/task-log/auth tests pass; no API or business data changed Current state/history, Channel BI utility evidence/index
2026-07-31 Remove BI labels and add actual data coverage Removed CHANNEL PERFORMANCE, the BI snapshot watermark and visible BI TOTAL PRICE labels on desktop/H5. Added localized 数据范围 below each company-sales title, backed by additive min_arrival_date plus existing max_arrival_date values from the same read-only analytics snapshot. JavaScript syntax and focused analytics/Web/UI tests pass; no Finance/report business data changed Current state/history, Channel BI evidence/index, channel-analytics README
2026-07-31 Restart ARR Web after Web i18n implementation Replaced the stale port-8766 process under detached Screen arr2-web-8766 with the current source launcher at 19:27:42 +08. Loopback and current LAN 192.168.3.103 return the expected anonymous root redirect, /login 200, /healthz 200 and /assets/i18n.js 200; the prior .48 address is no longer assigned to this workstation. No upload, report generation, download or business-data mutation occurred Current state/history, i18n implementation evidence/index, stale-items
2026-07-31 Rotate the ARR Web login credentials Updated the two existing macOS Keychain-backed runtime values without storing them in source or process arguments, normalized the password item's account metadata and performed one controlled port-8766 restart under detached Screen. The prior pair returns 401, the new pair passes session/cookie/CSRF/logout plus desktop/H5 and all six readiness flags, and loopback/current LAN health return 200. Two read-only snapshots stayed at 30 daily jobs, 4 monthly versions and 4 company jobs; latest business records predate restart, nine focused tests pass and literal/process scans are clean. The requested password still equals the username, so the strength follow-up remains open Current state/history, login-runtime evidence/index, stale items, commitments, scoped planning record
2026-07-31 Allow early company-channel report generation and rename period states Removed the old time-release gate from company-channel generation. Current-month incomplete periods now generate from the current committed Finance snapshot with the existing fixed C/O cutoff; historical months can rerun, while future months remain blocked. Replaced the permission-oriented state copy with 周期未结束 / 周期已结束 and added a confirmation warning that later data requires rerun. node --check, Python compilation, HTML parsing, 28 focused tests and the project-venv full discovery of 348 tests with 10 skips pass; no report or business data was generated Business rules, current state/history, evidence topic/index, scoped planning record
2026-07-31 Simplify company-channel period card labels Removed the visible 第一期/第二期/第三期 copy and changed the three card headlines to C/O:01-10, C/O:11-20, plus a month-aware final range (C/O:21-30 or C/O:21-31). Release status and opening time remain visible; internal period keys and generation requests are unchanged. JavaScript/HTML checks, 28 focused tests, 348-test discovery and isolated 1280×720/390×844 browser QA pass with no overflow or page-console warnings Current state/history, module map, company-period evidence/index
2026-07-31 Simplify company report result details Collapsed duplicate review problems by type/code/period; replaced the user-facing 版本 column with 生成时间 from job completion time, with creation-time fallback. Internal version_no API data remains unchanged. JavaScript/HTML checks, 28 focused tests and targeted deduplication execution pass Current state/history, module map, company-period evidence/index
2026-07-31 Recompose company-channel report cards and replace native generation confirmation Placed the Excel source and three C/O periods in one responsive desktop card row, moved the compact visually unlabeled month picker to the setup card's upper-right, shortened all period CTAs to 生成, and replaced the browser-native confirm with an accessible in-page dialog supporting cancel, backdrop and Escape dismissal. Existing generation payload/polling and business behavior remain unchanged. JavaScript/HTML checks, 28 focused tests, 348-test discovery and isolated 1280×720/390×844 QA pass with no overflow or console warnings. Shared port 8766 restarted at 14:26:56 +08 and /healthz is ready Current state/history, module map, company-detail evidence/index, scoped planning record
2026-07-31 Rebalance company-channel title and upload rail Moved the fixed five-company context beside 公司渠道明细 as pale helper text, removed the duplicate generator scope block, and bounded the Excel upload action to a 760px desktop rail with a full-width mobile fallback. Kept 报表月份 and 刷新任务 behavior intact, adding a read-only refresh tooltip. JavaScript/HTML checks, 28 focused tests, 348-test discovery and isolated 1280x720/390x844 QA pass with no overflow or console warnings Current state, module map, company-detail evidence/index, scoped planning record
2026-07-31 Compress the daily overview cards to one-third height Reduced the desktop upload card's internal spacing and changed its dropzone to a compact horizontal icon-and-copy layout. The upload card and three KPI cards now share a compact equal grid-row height, while the mobile upload layout remains unchanged. JavaScript syntax and 20 focused Web/static/trace tests pass; no upload/API/processing behavior changed Current state/history, KPI-card evidence/index
2026-07-31 Compact company-channel action buttons Reduced the three generation CTAs to a centered 104124px width family inside their period cards and made 提取并核对 a matching 42px centered button. Labels remain one line with active/focus states intact; no upload, extraction, report or database behavior changed. JavaScript/HTML checks, 28 focused tests, 348-test discovery and isolated 1280×720/390×844 browser geometry checks pass with no overflow or console warnings. Port 8766 restarted at 13:37:49 +08 Current state/history, company-action visual evidence, scoped planning record
2026-07-31 Match daily overview card heights Restored shared grid-row stretching so the ARR.XML upload panel and ARRIVAL DATE, processing duration and NO. OF ROOM cards have identical desktop heights. KPI content stays vertically centered, mobile stacking is unchanged, and no upload/API/processing behavior changed. JavaScript syntax and 20 focused Web/static/trace tests pass Current state/history, KPI-card evidence/index
2026-07-31 Revert KPI width shrink and fit card height to content Restored the original grid-column widths for ARRIVAL DATE, processing duration and NO. OF ROOM. Their height is now content-sized with the existing shared-row centering, while the upload module and desktop row remain unchanged. JavaScript syntax and 20 focused Web/static/trace tests pass; no upload, API or processing behavior changed Current state/history, KPI-card evidence/index
2026-07-31 Fit daily KPI card widths to content Set ARRIVAL DATE, processing duration and NO. OF ROOM cards to intrinsic content width, centered within their existing metric columns while preserving the upload module, 270px height and desktop row. JavaScript syntax and 20 focused Web/static/trace tests pass; no upload, API or processing behavior changed Current state/history, KPI-card evidence/index
2026-07-31 Center the shortened daily KPI cards Vertically centered the shortened ARRIVAL DATE, processing duration and NO. OF ROOM cards within the upload module's shared desktop grid row. Their widths, 270px height, smaller decorative ring and mobile fallback remain unchanged. JavaScript syntax and 20 focused Web/static/trace tests pass; no upload, API or processing behavior changed Current state/history, KPI-card evidence/index
2026-07-31 Tighten the daily KPI cards Removed the percentage-based height inheritance that stretched ARRIVAL DATE, processing duration and NO. OF ROOM to the upload panel height. The three cards retain their widths, use a compact 270px desktop height with a smaller decorative ring, and remain content-sized on narrow screens. JavaScript syntax and 20 focused Web/static/trace tests pass; no upload, API or processing behavior changed Current state/history, KPI-card evidence/index
2026-07-31 Add a monthly processing heading Added the requested 月报处理 heading to the top of the monthly download list, paired with the existing live-update state without changing table columns, pagination, polling or data behavior Current state/history, monthly-page evidence/index
2026-07-31 Recompose the daily report overview Removed the duplicate top Daily Report heading and THIS MONTH eyebrow, renamed the history heading to Daily Report, and placed the ARR.XML upload station with the ARRIVAL DATE, processing-duration and NO. OF ROOM cards in one responsive desktop row. Existing upload/progress/task-log behavior is unchanged. JavaScript syntax and 20 focused Web/static/trace tests pass; no API or processing behavior changed Current state/history, daily overview layout evidence/index
2026-07-31 Simplify the standard monthly report page Removed the redundant standard-monthly heading, VERSION HISTORY, version-record title, visible monthly 版本 column and C/O-period footer note. Renamed the navigation item to 月报, kept 50-row polling/pagination and API version ordering, and made 更新至 render the explicit maximum-ARRIVAL field with an as_of_date compatibility fallback. Added restrained live-status/table spacing; 32 focused Web/schema/task-log tests plus JavaScript/Python syntax checks pass. No report or business data changed Current state/history, monthly-page evidence/index, scoped planning record
2026-07-31 Keep ARR.XML upload on the daily page and add progress feedback Removed the automatic task-log popup after upload. Added an accessible inline progress bar with approximate upload, processor, validation and database stages, success/error states and mobile spacing. Manual header and history-row log access remain unchanged. node --check, five task-log/progress tests, two static Web tests and eight trace/repository tests pass; no API or processing behavior changed Current state/history, daily upload evidence/index
2026-07-31 Attach Booking extraction records to their uploaded filename Removed the separate accepted/historical-source status and summary from the company page. The open review now shows its draft's validated uploaded filename directly below Booking记录提取, clears it with the draft and wraps long names on 390px screens. JavaScript/HTML checks, 36 focused tests and the 346-test discovery pass with 10 expected skips; isolated desktop/mobile QA found no overflow or console errors and performed no mutation. Port 8766 restarted at 12:43 +08 Current state/history, Booking evidence/index, business rules, module map, scoped planning record
2026-07-31 Freeze and save the Markdown company-channel test baseline Created a read-only, non-publishing acceptance package bound to the exact Markdown/source-batch hash, processor/rule identity and five Finance version pins. Generated/reopened/value-checked five XLSX files and visually reviewed all 15 sheets. All 314 rows match an independent Markdown aggregation: 27 Booking Room values filled, 287 blank, zero mismatches and zero company errors. SHA-256 verification covers every retained file; the open Excel draft and active Booking batch were unchanged Current state/history, new Markdown baseline evidence/index, stale item, scoped planning record
2026-07-31 Add Booking review multi-select and an in-page delete dialog Added row/all-visible selection for 50-record pages, count-aware single/batch confirmation, explicit mouse/Escape cancellation and one strict 1-50-item atomic soft-delete API while preserving the item route. Removed the requested review/helper/source metadata copy so the source summary exposes only the uploaded filename. Focused suites and 346-test discovery pass with 10 expected skips; isolated desktop/390px browser QA selected 1/2/50 rows, showed no native prompt/overflow/console errors and submitted no deletion. Port 8766 restarted on the final composition at 12:22 +08 Web README, business rules, data flow/module map, current state/history, Booking extraction evidence/index, scoped planning record
2026-07-31 Define Booking review end-to-end acceptance boundary Confirmed the company-channel processor reads current Booking views, current July data is valid 5/5 and the expanded Booking/company/XLSX suite passes 55/55. A real-PostgreSQL draft/edit/activation slice now passes under an outer rollback. Remaining work is one operator-authorized complete-workbook replacement and a released populated period; July month-end opens 2026-08-01 00:00 Bangkok Current state/history, extraction/company evidence/index, stale items, scoped planning record
2026-07-31 Build the raw Booking Excel extraction program Added deterministic Tour Code/โรงแรม parsing, agreed TWN/DBL normalization, last-row/cancellation rules, quantity-preserving manual review, editable/deletable durable drafts, zero-pending atomic activation, upload-first responsive UI and real PATCH/DELETE HTTP transport. The supplied workbook yields 26 codes/37 items/7 pending and both named examples match. Migrations 014/015 are applied; a real-PostgreSQL create/edit/activate slice rolled back cleanly; 343 tests and authenticated browser QA pass; port 8766 runs the new composition with all readiness flags true and the original business source unchanged Root/schema docs, business rules, data flow/module map, current state/history, extraction evidence/index, reflection/index, stale items, scoped planning record
2026-07-31 Audit whether Booking DB supports parser 2.0 human review Initial snapshot found a coarse row gate, no review transport and no repository acceptance. The later extraction-program task applied 014/015, added PATCH/DELETE, passed a real-PostgreSQL transaction rollback slice and restarted the runtime. The remaining audit finding is that the latest-state draft model has no actor/reason/revision history Current state/history, Booking review evidence/index, data flow/module map, stale items, migration record, scoped planning record
2026-07-31 Audit current database content and manual Booking import dimensions Read-only snapshots found one 867-row/348-code Booking fixture and 417 active Finance rows: 121 matched, 285 missing-code and 11 unmatched. Group Code + room type + quantity is sufficient under a global-code invariant. The initial snapshot found migration 014 absent and parser/importer drift; the later manual-review audit superseded deployment status by observing concurrent 014/015 application Current state/history, business rules, Booking data-flow/module map, evidence/index, stale items, applied-migration record, scoped planning record
2026-07-31 Simplify the ARR login page copy and hierarchy Replaced the left marketing narrative with one ARR Report heading, removed the duplicate top-left brand, workflow steps, welcome/access copy and help/footer disclaimers, and changed field labels to username/password. Authentication behavior remains unchanged. JavaScript syntax, 33 focused tests and live 390x844/1280x720 checks passed with no overflow or browser logs Current state/history, login-runtime evidence/index
2026-07-31 Restore access after another reported page failure Confirmed the authenticated 8766 runtime and detached Screen process were healthy: loopback/LAN root redirect to login and health/login return 200. The failure was a DHCP address change from .103 back to .48, not a service outage. Opened the working loopback login gateway in the in-app browser and recorded http://192.168.3.48:8766/ as the current LAN entry; no runtime or business data changed Current state, runtime-mismatch evidence/index, stale items
2026-07-30 Activate the ARR application login on port 8766 Stored both Web credential values in separate Keychain items, added a mode-0700 credential-free local launcher, restored the prior controlled database/OSS/report composition under detached Screen and verified loopback/LAN login. Anonymous root/API gating, hardened session/CSRF, desktop/H5/history reads, all five readiness flags and logout revocation passed; live totals remained 24/4/3 and no business job or worker was started Current state/history, login-runtime evidence/index, stale items, commitments, mixed-runtime reflection, scoped activation plan
2026-07-30 Recheck the complete ARR page outage after login work Found no process or listener on 8766: loopback and current-LAN root/login/health/static probes are refused, old PID 37865 is gone, and no auto-restart service exists. The Wi-Fi address also changed from .48 to .103. Available evidence cannot prove login work caused the process exit; it does prove current login-enabled source cannot start without operator-selected credentials. No runtime or business-data mutation was made Current state, runtime-mismatch evidence/index, stale items
2026-07-30 Polish the Daily Report title, task-log utility and XML upload area Rebalanced the workspace hierarchy so ARR Report outranks Daily Report, styled task log as a real 13px outlined button, centered and simplified the responsive upload station, removed the numbered/retention labels and reduced the primary action to a compact control. JavaScript syntax, 33 focused tests and live 375/768/1024/1440 checks passed with no overflow or browser issues Current state, daily visual-polish evidence/index, scoped planning record
2026-07-30 Expand blank Booking Room fallback to unmatched Group Codes Bumped the company-report processor to 1.2.0. A present consistent Group Code now retains its stay-segment/pricing row but leaves Booking Room blank when no accepted room can resolve; missing codes remain separate blank rows and Finance validation stays strict. A repeatable-read July 31 preview is valid 5/5 and 37 focused/real-XLSX/Web-coordinator tests passed with three expected skips. No data/report mutation occurred; the later port-8766 activation row records runtime loading Business rules, current state, company-report readiness evidence/index, stale items, company-report README, scoped planning record
2026-07-30 Add an application login page and protect the ARR portal Added fail-closed environment credentials, bounded login attempts, random authenticated sessions/CSRF, protected desktop/H5/API/upload/trace/download routes, revoking logout, safe return targets, no-detail /healthz, a responsive accessible login UI and Caddy HTTPS-only deployment. Final focused tests pass 33/33; the 317-test full suite is green; isolated browser checks pass all login/logout states and four responsive widths. Activation was intentionally deferred at source completion and is recorded by the later port-8766 activation row Root/Web/deploy runbooks, success criteria, architecture/data flow/module map, business rules, current state/history, login-runtime evidence/index, reflection/index, stale items, commitments, scoped planning record
2026-07-30 Diagnose the reported unavailable ARR page Proved the service was not generally down: loopback/LAN root, H5, health and JavaScript return HTTP 200, and a fresh root browser session has zero warnings/errors. /login alone is 404 because the long-lived process predates the login routes while serving newer static files. Opened the working root for the user and withheld an unsafe restart because required operator-selected login credentials are absent Current state, runtime-mismatch evidence/index, scoped planning record
2026-07-30 Show the uploaded XML filename instead of internal source.xml in daily history Added/applied migration 013 and separated run-level upload provenance from canonical artifact identity. History/trace now use only the uploaded basename; pre-013 rows render . A rolled-back live DB probe and 312-test suite passed. The later port-8766 activation row resolves the credential/restart gate; one no-PII write-path check remains Root/Web/migration runbooks, data flow/module map, business rules, current state, evidence/index, stale items, scoped planning record
2026-07-30 Move the daily task log into the former mobile-dashboard header utility Replaced the desktop 手机看板 link with a visible, focusable 任务日志 trigger and moved the sole black console out of the 日报处理 layout into a native modal. Upload and mouse/keyboard history selection open the matching job; polling runs only while the modal is open. SQL proof confirms the console is limited to one opera_daily job and its linked attempts, deliveries/submissions, Finance daily versions and outbox facts—not global, monthly-run or company-report logs. JavaScript syntax, 12 focused tests and live 1440×900/375×812 checks passed with zero browser warnings/errors; the broader legacy Web test class remains blocked by separate in-progress login-contract drift Current state, task-log relocation evidence/index, scoped planning record
2026-07-30 Add 50-row pagination to every monthly history list Daily, monthly and selected-month company histories now request 50 rows per page and show exact total/range, page number and previous/next controls. Backend totals and page rows share one consistent snapshot/lock, old array-shaped API data remains compatible, monthly polling reconciles new publications back to page 1, and desktop/390-pixel live checks passed Current state, module map, stale items, planning record
2026-07-30 Accept blank Booking Room when company detail has no Group Code Confirmed the supplied 867-row/348-code Markdown is valid but already imported under the same hash. Changed the company-report rule so every no-code Finance fact remains a separate row with blank RES_COMMENT/Booking Room and no false duplicate/warning. Four July companies now preview valid; LianTai still has two present-but-unmatched codes. Focused tests and real XLSX export/reopen/render checks passed; no database or report mutation occurred Business rules, current state, company-report readiness evidence/index, stale items, company-report README
2026-07-30 Enable the phone Channel BI dashboard on the current LAN Restarted the validated ARR2 Web process from loopback-only to 0.0.0.0:8766 with the same controlled database, Keychain-backed OSS and report-generation configuration. Both 127.0.0.1 and 192.168.3.48 returned HTTP 200 for /h5; LAN health kept all readiness flags true and the analytics endpoint returned HTTP 200. The full portal, including upload controls, is now reachable from the trusted Wi-Fi Current state
2026-07-30 Simplify ARR Report branding/copy and audit page display bounds Replaced desktop/H5 header marks with plain ARR Report, changed the daily content heading to Daily Report, and removed the specified daily/monthly explanatory copy without changing automatic publication. Static scans, JavaScript syntax, 22 Web regressions and live desktop/monthly/390×844 H5 checks passed. Audited the current UI: daily/monthly/company history silently cap at 100 without pagination; BI renders uncapped aggregates, not detail rows Current state, stale items, planning record
2026-07-30 Reconcile the user's 416-room correction Confirmed the user was right about the total: 07-23 committed after the prior snapshot and four real sources now sum to 416. Hash matching and isolated replay prove 0720.XML=100 and 0722.XML=88, so those two day labels were reversed. Live API/monthly V04 show 417 due solely to the fixture; an open BI view can separately remain stale at 308 because it does not refresh after upload. No business state changed Current state, BI evidence/index, stale items, planning record
2026-07-30 Reconcile V01's claimed 2026-07-21 watermark Proved the user is operationally correct: V01's OSS source has 119 rows all arriving 07-21. Its database lineage and hash-matched workbook also contain one 07-27 local_fixture row, so the persisted 7.27 label is contaminated content rather than a metadata-only error. No database/report state changed Current state, BI contamination evidence, stale items, planning record
2026-07-30 Diagnose wrong-looking Channel BI values after data update Proved BI reads current retained PostgreSQL facts and its aggregation code is green, but an accepted 07-27 local_fixture remained current. It contaminates BI/monthly V03 by +1 room, +3 room-nights, +5,400 and a false 7.27 watermark; also found 公司数 is actually worksheet-channel count. No database state changed Current state, BI contamination evidence/index, prior BI/monthly evidence caveats, stale items, reflection, planning record
2026-07-30 Make published monthly versions appear without manual refresh Removed the refresh control and added a four-second, visible-tab-only, non-overlapping list poll with immediate resume and last-good-state retention. Browser/access-log verification showed real repeated reads and current V03/V02/V01 downloads; latest included ARRIVAL remains the “更新至” authority ADR-001/index, success criteria, data flow/module map, business rules, current state/evidence/reflection, root/Web runbooks
2026-07-30 Complete monthly publication, page visibility/download, automatic dispatch and formulas Applied metadata-only migration 012; derived “更新至” from max included ARRIVAL; added durable idempotent report activation, real list/download, exact TOTAL PRICE formulas and a dedicated reliable worker. Two pending live events resolved to one active 120-row report ID 1/version 1 and both were acknowledged only after publication ADR-001/index, architecture, business rules, current state, evidence/reflection, stale items, migration/root/Web/monthly/deploy runbooks
2026-07-30 Trace first live ARR2 daily and monthly user run Proved the daily result was atomically committed as active Finance version 4 with 119 retained rows and a pending downstream event. Proved the manual monthly action generated a valid 120-row local XLSX but no database report metadata or Web-download identity, because ARR2 has no finance.report_versions and its monthly list is synthetic source_ready data Current state, live-run evidence/index, stale items, planning record
2026-07-30 Build independent ARR2.0 programmatic XML ingestion Copied a filtered source snapshot without touching ARR1; replaced Agent/MCP transport with local fixed processing, private immutable artifacts, independent validation and atomic ingestion; removed active callback/trace/deployment dependencies; added lifecycle/download/vertical-slice coverage and updated project memory ADR-004, positioning, architecture, current state, evidence, reflection, commitments, stale items, runbooks
2026-07-30 Analyze first successful XML fetch/Skill/MCP run Confirmed one exact fetch and one deterministic Skill run produced 135 records/119 output rows, followed by repeated large-file rereads and one MCP submission containing only 20 records. ARR rejected it as RESULT_CONTRACT_INVALID, wrote zero Finance versions and terminalized the job. XML allowlisting and MCP reachability are proven; reliable large-payload transfer is now the blocker Current state, fetch evidence/index
2026-07-30 Diagnose frozen log that still displays RUNNING Proved the four-second UI refresh is working but the task is no longer executing: SuperAgent completed and the trace stream ended, while ARR run/attempt remained running with no MCP submission or Finance write. The production upload lifecycle has no terminal poll/reconciler, PostgreSQL cannot persist delivery_missing, and grant expiry is not scheduled to close this case. No task state, service or remote run was mutated Current state, fetch evidence/index, task-log evidence, stale items, planning record
2026-07-30 Analyze first true PROGRAM_INPUT v3 controlled run Confirmed one HTTPS fetch call, no retry/bypass and a sole extension_not_allowed Tool result. Anonymous HEAD proved the public source URL/ACL and exact object identity. Skill/MCP did not run; the failure object was Profile-invalid and ARR remained running after remote completion, exposing a separate finalization defect Current state, fetch evidence/index
2026-07-30 Reload local ARR with PROGRAM_INPUT v3 Proved the prior job was generated by a stale v2 Web process, stopped only the validated 8765 listener, and restarted it through the controlled Keychain-backed launcher. PID 10376 now serves the updated source with all readiness flags true; a new job is still required for SuperAgent/MCP verification Current state, local-runtime evidence, fetch experiment evidence
2026-07-30 Replace credential-backed/oss:// fetch with ARR-generated public OSS URL Added PROGRAM_INPUT v3 oss.url, exact HTTPS pass-through Prompt, percent-encoded key handling and ACL/readiness alignment. Only committed source XML is public-read; staging and outputs remain private. Forty-four targeted and 276 full-suite tests pass (2 skipped); SuperAgent republish, XML allowlist and live MCP/Finance proof remain external ADR-003, processing/storage/integration READMEs, architecture, current state, fetch evidence, stale-item resolution, planning record
2026-07-30 Add one-click copy for the full task log Added one plain button that copies the current black console's full textContent, with Clipboard API plus selected-textarea fallback, disabled/loading state and existing toast feedback. JavaScript syntax, 15 Web tests and live 8765 button behavior passed with zero console warnings/errors; browser clipboard isolation prevented external pasteback comparison Web README, current state, task-log evidence, planning record
2026-07-29 Add real SuperAgent execution trace to the plain task-log console Replaced production non-stream submit with one include_trace=true stream, returned on run.started, drained the same connection in the background, persisted only sanitized run/task/step/end JSONL and merged it with authoritative ARR facts. Verified POST-only/non-replay semantics, blocked ambiguous automatic retries, passed a 45-event live handoff probe, 38 targeted tests and the 275-test full suite (2 skipped). Existing pre-change jobs remain DB-only because trace cannot be replayed Agent/Web/processing READMEs, architecture/data flow/module map, current state, evidence/index, planning record
2026-07-29 Replace processing status with a full-flow raw task log Added a privacy-minimized trace API over persisted run/attempt/result/Finance/outbox facts and logical ordering for equal timestamps; after user feedback, reduced the frontend to one black monospace <pre> with one event per line, task switching, polling and refresh. Real running/success/failure states, mobile containment, zero console errors, 20 targeted tests and 269 full-suite tests passed (2 skipped) Web README, architecture/data flow, current state, evidence/index, planning record
2026-07-29 Fix repeated XML upload source identity failure Found that content-hash artifact deduplication reused an older run's job-scoped OSS key. Added/applied migration 011 and storage-identity lookup; 57 targeted and 269 full-suite tests pass. A real equal-content upload then reached SuperAgent under a new object identity, but remote success produced no MCP submission and no Finance write, so exported run events are the next blocker Migration ledger, current state, repeated-upload evidence/index, memory index, planning record
2026-07-29 Reduce the dedicated Agent Prompt to controlled orchestration After the user clarified that only the fixed business-system entrypoint can invoke this Agent, removed redundant input gates and reduced the Prompt from 6,874 to 1,321 characters. ARR code, Skill and MCP retain authoritative validation; Prompt performs only one fetch/process/submit/output cycle. Twelve targeted tests pass; platform publication remains external ADR-002, architecture, current state, manual-run evidence, planning record
2026-07-29 Analyze exported SuperAgent manual XML run Confirmed the daily Skill completed deterministically, but the run had no PROGRAM_INPUT, OSS fetch, submission grant, MCP call, receipt, or database evidence; its acceptance of chat upload and use of present_files prove the active Profile behavior does not match the required full Main Prompt Current state, manual-run evidence/index, runtime-target reflection/index, planning record
2026-07-29 Verify current Web “渠道BI” database connectivity Confirmed the complete browser → Web API → PostgreSQL read path against the running 8765 instance: health and live analytics passed, the page rendered the matching 2026-07 QBD metrics with zero console errors, and 24 targeted tests passed. No connection code change was needed; the all-interface local listener was recorded as a deployment-boundary risk Current state, BI runtime evidence/index, planning record
2026-07-29 Open XML processing in the Docker image and current local Web entry Added --enable-processing to Dockerfile CMD so direct image launches match Compose; updated/restarted the controlled local launchd entry and verified database/processing health plus an enabled XML file chooser; kept source CLI/runtime readiness fail-closed; passed 260 tests with 2 expected skips; pushed code commit ad3d987 and verified the remote branch README/runbook, current state, architecture module map, deployment and local-runtime evidence/index, container-entry reflection, planning record
2026-07-29 Prepare and publish the project for controlled public-server deployment Added Docker/Compose/Caddy deployment with XML processing explicitly enabled, HTTPS Secure cookies, Basic Auth/Bearer boundaries and a Chinese runbook; sanitized publishable history; 259 tests passed (2 skipped), all contracts/checksums and a 271-file secret/size/symlink scan passed; pushed main to the self-hosted repository and verified initial deployment commit a701de9 Current state, architecture, deployment evidence/index, commitments, module map
2026-07-29 Restart the controlled ARR MCP public path Restarted loopback MCP and fixed ngrok host; corrected exact public Host allowlisting after a diagnostic 421; public unauthorized requests now return 401 and authenticated one-tool discovery returns 200. Main upload remains disabled Current state, E2E evidence/index, commitment, active planning record
2026-07-29 Diagnose persistent SuperAgent MCP failed status Confirmed the temporary MCP and ngrok processes had exited; public /mcp returns ERR_NGROK_3200 endpoint offline despite valid DNS/TLS. The stale platform config version 33 remains a second-stage issue after reachability is restored Current state, E2E evidence/index, commitment, active planning record
2026-07-29 Open XML upload in a controlled boundary and execute a real no-PII vertical slice UI upload, OSS registration and SuperAgent dispatch passed; SuperAgent returned success without calling MCP because platform tool discovery remained at config version 33. Test run was failed safely, grant revoked, zero Finance writes verified, and temporary upload closed Current state, evidence topic/index, commitments, planning record
2026-07-29 Clear incorrect monthly-report memory and record the user's final corrections Replaced manual-input/button assumptions with automatic post-commit triggering; confirmed the required TOTAL PRICE formula; no product code changed Project positioning, ADR-001, architecture, current state, business rules, stale items, monthly audit planning notes

Notes

Keep entries concise. Move durable rationale to ADRs and durable rules to the appropriate higher-level document.