230 KiB
LTJT Business Module API Research Progress
2026-08-10 — LianSyn-platform 正式化与持久登录启动
- 用户已确认:正式平台统一使用
LianSyn-platform,不再使用旧平台目录名。 - 用户已确认:登录除主动退出外持续有效;安全撤销(改密、停用、管理员强制撤销)仍保留。
- 已完成只读影响面审计,确认当前目录尚未存在
LianSyn-platform,可安全执行明确目录迁移;现有大量未提交改动需保留。 - 已完成目录迁移、运行时路径/脚本/文档/桥接标识替换,并保留内部测试文件和历史归档。
- 已完成
008_persistent_sessions.sql与 AuthService 持久会话改造;历史已过期会话先撤销,活动会话和新会话不再自动过期。 - 已完成最终验证:TypeScript no-emit/build、控制平面 27/27、解析/业务回归 58/58、前端/插件语法检查、旧引用扫描和
git diff --check。 - 已启动正式控制平面:
008_persistent_sessions已应用,/health/live与/health/ready返回 200,数据库和 AgentBus 均已连接,首页返回 200。
2026-08-05 — Skill naming and prompt refinement
- Renamed the active booking Skill to
lwlt-newbooking, including its package metadata and references. - Simplified the main Agent Prompt for clean business input and kept only Skill routing, task/session continuation, missing-information follow-up, and direct result return.
- Updated active README and maintenance documentation so future business capabilities can use independent Skills.
2026-07-12 — External Agent Parsing Refactor
- Confirmed implementation scope with the user: external service replaces only raw-input parsing; ERP/plugin work remains unchanged.
- Confirmed preserved
operationJSON contract, one independent external session per task, SSE transport, server-only environment credentials, external published prompt ownership, and complete removal of local Agent configuration/terminology. - Started implementation from the existing
LianSyn-platform/server.mjsandapp.jschain. No secret has been written to the workspace. - Added
LianSyn-platform/external-agent-client.mjswith Bearer auth, CSRF double-submit headers, task-scoped idempotency keys, SSE parsing, timeout/error mapping, operation normalization, and safe contract-mismatch blocking. - Replaced the local model/prompt proxy with
/api/parse, removed the browser configuration/prompt dialogs, deleted the local prompt file, and added server-only.env.example/.gitignoreguidance. - Added
external-agent-client.test.mjs; all 10 contract/HTTP tests pass. Local no-key startup and/api/parsesmoke checks pass on port 18765. - Ran real synthetic parser smoke calls with the user's private environment file. Auth/session/SSE succeeded, but the current published Profile returned a generic response shape rather than the required
operation; no ERP operation was attempted. - Final local verification: all four relevant Node files pass
node --check; all 10 external-parser contract/HTTP tests pass; the actual supplied key is absent from workspace scans; the obsolete local prompt file and/api/agent/*/browser configuration surface are gone. - Added parser request observability: the UI immediately shows
parse_sending, then renders the external request stage and technical JSON in the right-side task detail. Local/API failures now persist to the task card with an explicit failure status. Cache-busted assets were verified through the running server on port 8765. - Diagnosed a real business-input failure: the external session and SSE completed, but the published Profile returned
skill_error:ltjt_business_operationwith nooperation. Updated the UI to label this as an external Skill block and show the business blocker separately from transport errors.
2026-07-12 — Task deletion and cancellation completed
- Added
删除任务to the right task panel. It requires browser confirmation, cancels confirmed/handed-off tasks through the bridge, then removes the selected business-system card, logs, and persisted task ID. - Removed the top-level
查询反馈and清空任务controls and their event bindings. Automatic polling for accepted tasks remains internal. - Added
DELETE_TASKtobusiness-bridge.js, including cleanup of the selected task and batch child records from extension storage. - Added
LTJT_CANCEL_TASKand cancellation guards tobackground.js; cancellation stops future tab/frame/preflight/verification phases and suppresses late result writes after the business task is removed. - Bumped the extension to
0.2.15and rebuiltchrome-extension/ltjt-order-assistant.zip. - Verification passed: affected JavaScript syntax checks, operation-plan tests 12/12, focused deletion/cancellation assertions, local page HTTP 200 checks on port 18767, and ZIP integrity.
2026-07-12 — AI workbench header refinement completed
- Copied the supplied logo to
LianSyn-platform/assets/ltjt-platform-logo.pngand placed it at the top-left with horizontal crop styling to remove the source image's large white margins. - Replaced
下单任务工作台/模拟业务系统with a stretched horizontal header menu;AI操作台is the active page menu and the document title was updated. - Moved clickable
AI状态and插件状态status tags to the far right. AI refresh calls/api/status; plugin refresh calls the existing bridge PING path. Both expose only green已开启and red未连接states. - Added PNG MIME handling to the local static server. Header assertions, syntax checks, API response, logo HTTP load, and app/CSS resource checks passed.
2026-07-12 — AI connectivity probe correction
- Replaced the AI status check based only on local Key presence with a real server-side external API probe.
- The probe sends an authenticated empty validation request with CSRF headers; it does not create an Agent Session or task. Validated
400/422responses mean the API and credentials are reachable;401/403, timeout, and network errors remain red未连接. - Added
ai_connectedto/api/status, switched the browser to that field, added five-second polling, and kept click-to-refresh behavior. - Regression verification passed: 13/13 external parser and HTTP tests plus JavaScript syntax checks.
2026-07-12 — Three-stage project status UI started
- Confirmed the right panel currently renders only the terminal-like task log; existing task data already carries parse status, handoff status, execution status, and
erp_receipt/verification results. - Started a three-stage status surface: Agent处理, 业务系统处理, and 获取回执, with stage-specific small status labels driven from the existing task/result contract.
2026-07-12 — AI status runtime diagnosis
- Investigated a report that AI remained
未连接despite the external service being available. - Confirmed the active process on port 8765 served the new static frontend but returned
404 Not FoundforGET /api/status, proving the Node process had not been restarted after the server route was added. No application code change is required for this incident; restart the service with the server environment loaded. - Restarted the business-system service on port 8765 as PID 61781. The new
/api/statusroute now responds correctly; this execution environment has no.envorDEERFLOW_OPEN_API_KEY, so the response correctly reportsai_connected: falsewithexternal_service_not_configured. - After the private
/Users/inmanx/.envwas updated, restarted the service again as PID 64750 withnode --env-file=/Users/inmanx/.env server.mjs./api/statusnow reportsai_configured: trueandai_connected: truewith an authenticated probe response. - The detached background process was later reaped by the local runtime, causing the browser to see connection refused. Relaunched the service in a persistent terminal session (PID/session 21906), verified page HTTP 200 and
ai_connected: true, and openedhttp://127.0.0.1:8765/in the default browser.
2026-07-12 — Confirmation action relocation completed
- Removed the card-level
确认提交button and added确认执行to the right task-detail header beside the task state and delete action. - The right-side button is shown only for a selected task that still requires manual confirmation. It calls the existing
confirmTask()flow, so handoff and plugin execution behavior are unchanged. - Updated the waiting-state guidance to tell operators to confirm from the right task detail. Syntax and static assertions passed.
2026-07-12 — Input area copy refinement completed
- Renamed the left panel heading from
原始指令to输入区域. - Removed the
编辑发送区helper text. - Renamed the bottom action from
发送解析并创建任务to创建任务; the existing click behavior is unchanged. - Verified syntax, served-page markers, and cache-busted input-area assets.
- Centered the left input area's
创建任务button with a scoped.instruction-panel .actionsrule and verified the served stylesheet. - Renamed the successful top-right AI/plugin status label from
已开启to已连接; detection and red未连接behavior are unchanged. - Added the stage board above the log with the requested sub-statuses: Agent
已提交/已成功/已失败, business system已接单/处理中/已完成, and receipt待获取/已获取回执. - Added automatic visual mapping for empty, parse-failed, queued/accepted/running, blocked, completed, saved-unverified, and receipt-present task states. Browser screenshot verification passed at the desktop layout; existing terminal log and delete action remain intact.
2026-07-12 — Task deletion and cancellation
- User confirmed that deleting the selected task must remove the business-system card/logs and cancel the matching plugin task.
- Existing bridge supports only whole-queue
CLEAR_TASKS; no single-task cancellation message exists yet. - Existing background executor tracks active task IDs in
runningTasksbut has no cancellation flag or phase-boundary guard.
2026-07-12 — Agent Design Specification
- Confirmed the target architecture with the user: one cloud Agent digital-employee prompt for raw instruction decomposition plus one unified business-behavior Skill with internal references.
- Created the project-root management directory
agent设计规范/with the external Profile prompt draft, Skill package, references, examples, and a root index. - The canonical Agent output remains the local business-system
agent_parse_passed/agent_parse_blockedwrapper around the seven-actionoperationobject. Handofferp-task-v1is documented as internal Skill compatibility input only. - Recorded the current schema/runtime alignment gate:
operation-plans.jsconsumesdata.test_markeranddata.order_mode, while the root JSON Schema does not yet declare both; transport metadata must remain outside the canonical operation. - Validation:
quick_validate.pypassed forlwlt-newbooking; roottools/operation-plans.test.mjspassed 12/12; relevant current JavaScript syntax checks passed. No cloud Agent or ERP runtime was changed.
2026-07-07
- Confirmed user logged into a dedicated collaboration Chrome window on
127.0.0.1:9223. - Confirmed logged-in main URL and visible business-module menu items.
- Created research plan and findings log.
- Added
tools/cdp_lwlt_probe.mjsto query the temporary Chrome collaboration window directly. - Ran authenticated page map before logout and extracted business menu URLs plus homepage shortcut URLs.
- Captured cookie metadata without values.
- Main-page reload redirected the collaboration window back to login, so further interactive capture requires re-login.
- Checked public JS and unauthenticated business URLs. Public JS is mostly form validation/helpers; unauthenticated business URLs return login-timeout script.
- Documented login request shape from the public login page:
POST /system/dat/AjaxCommand.aspwithAction=CheckSystemLoginplus CAPTCHA and generatedsession_id. - Extended
tools/cdp_lwlt_probe.mjswith iframe navigation and richer page-map extraction for business pages. - Added a
clickmenucapture mode to trigger the system's real menu click path by visible menu label. - Captured 产品管理 via real menu click. Found
/System/dat/product.asplist XHR and/System/dat/AjaxPublicFun.aspautocomplete/metadata XHR. - Learned module pages are loaded into additional iframes (e.g.
jidiao40) rather than replacingIframe_Home. - Added
batchmenusmode to collect menu page request and structure summaries sequentially. - Sanitized temporary capture outputs and updated the probe to redact login parameters (
UserName,UserPwd,Code,session_id) and avoid storing business data rows as table headers. - Captured core list endpoints for product, independent group orders, shared group plans, teams, tickets, filing, returns, and customer follow-up.
- Added
api_inventory.mdwith endpoint inventory, parameter shapes, related pages, permission-sensitive pages, and integration feasibility notes. - Checked repository files for secrets and business rows. No credentials, cookie values, CAPTCHA values, or obvious business data rows are stored in the project files.
- Recorded the page-context/session sensitivity issue in
findings.mdfor future adapter design. - Opened the independent group
下单dialog read-only and captured its add-page route, submit endpoint, primary required fields, lookup endpoints, and attachment helper pages. - Extracted
SubmitInfoForm()and add-form field statistics. ConfirmedAct=DoInfoJHis the save action and the form is a large browser-form contract rather than a small JSON-style API. - Generated full independent-order add-form schema:
schemas/orders_add_form_schema.jsonandschemas/orders_add_form_schema.mdcovering 825 controls, 92 field groups, and 14 required fields. - Added
adapter_design.mddocumenting that production runtime must be deterministic and must not depend on AI/LLM decisions. - Reviewed the pure business background document from
/Users/inmanx/Desktop/业务背景流程与客户指令模板-纯业务版-20260707.mdand extracted the LTJT-facing system-operation scope. - Added
system_operation_scope.mdto separate upstream business interpretation from deterministic LTJT operations, map the six business scenarios to known/unknown system endpoints, and preserve submit preconditions. - Added
schemas/standard_system_operation.schema.jsonas the first deterministic input contract for system operations, including the current priority actionteam_order_create. - Confirmed architecture assumption with the user: their own business system and database will maintain/support the pending field data. Updated
task_plan.md,system_operation_scope.md, andadapter_design.mdso the LTJT adapter consumes a validated standard operation object instead of inferring fields at runtime. - Added
mappings/orders_add.mapping.jsonfor the firstteam_order_create->orders_add.aspfield mapping, separating direct field assignment from LTJT lookup-required fields. - Updated
schemas/standard_system_operation.schema.jsonsoteam_order_createand batch create requireroute,trip, andorder_number, matching the LTJT add-form required fields. - Added
tools/dry_run_order_create.mjs, a deterministic local dry-run serializer that reads a standard operation JSON file, validates blockers, maps fields, and outputsAct=DoInfoJH&plus the serialized form payload without calling LTJT. - Added
samples/team_order_create.dry-run.example.jsonwith fake-only sample values and generatedreports/team_order_create.dry-run.example.report.jsonplusreports/team_order_create.dry-run.example.payload.txt. - Verified JSON validity with
jq, script syntax withnode --check, sample schema validity with Pythonjsonschema, and the dry-run sample with zero blockers/warnings. - Added
tools/browser_order_add_dry_run.mjsto read a local dry-run report, fill the live LTJTorders_add.aspform in a CDP-controlled browser, compare mapped values against browserListForm.serialize(), redactsession_idby default, and never submit. - Verified the browser dry-run script syntax/help path. A read-only CDP target probe failed because
127.0.0.1:9223is currently offline, so live browser comparison is waiting on a fresh collaboration Chrome login. - Reopened the collaboration Chrome on port
9223after user login and confirmed authenticatedSystem/Mainlt.asp. - Ran browser-context dry-run against the live
orders_add.asppage with fake-only sample values. No submit was attempted. - Found that the live form serializes
yaobeian=要备案; updatedschemas/standard_system_operation.schema.json,mappings/orders_add.mapping.json,samples/team_order_create.dry-run.example.json, andtools/dry_run_order_create.mjsso the local serializer includesfiling_required/yaobeian. - Hardened
tools/browser_order_add_dry_run.mjsso--open-formforces a freshorders_add.aspURL timestamp and waits for the fullListFormbefore filling. - Final browser dry-run result:
browser_dry_run_passed, 58 mapped fields, 822 local fields, 822 live browser fields, zero missing elements, zero mismatches, noDoInfoJHsubmit. - User flagged the real production risk that many fields are SelectBox-bound choices and auto-fill linked fields. Confirmed this from live page scripts.
- Added
tools/inspect_orders_add_selectboxes.mjsto inspect SelectBox bindings, lookup endpoints, linkedSetValtargets, and data shape without storing real option values. - Confirmed LTJT SelectBox protocol from the browser-loaded
SelectBox.min.js: rows are separated by◇, columns by◆. - Added
tools/validate_order_add_lookups.mjsto validate standard operation values against existing LTJT SelectBox choices. Fake sample data is now correctly blocked:TianShu=4D3Nmatches, but fake route/product/customer/OP/sales do not. - Updated
mappings/orders_add.mapping.jsonwith the SelectBox contract, observed row/column counts, critical linked fields, and a stricter rule that upstreamresolved=trueis not sufficient without runtime exact-match lookup validation. - Added
tools/resolve_order_add_lookups.mjs, which applies LTJT SelectBoxSetValrules after exact-match lookup. Default output redacts resolved values; actual resolved fields are written only via explicit--resolved-outand only when all critical lookups pass. - Updated
tools/dry_run_order_create.mjswith--lookup-resolution. When supplied, dry-run payload generation is blocked unless lookup resolution has passed and can provide real resolved fields. The fake sample now correctly blocks the stricter dry-run with the lookup report. - Added
tools/inspect_order_add_product_effect.mjsto executeFind_product()/GetProduct(cpm)in the browser without submitting and report only redacted field-change metadata. - Verified fake sample product side-effect inspection blocks because the fake product has zero LTJT matches.
- Ran a redacted, non-submit sample against the first existing LTJT product option.
GetProductreturned successfully and changed 135 form fields: core fields, itinerary text, resource rows, and receivable/pricing rows. - Added
tools/browser_order_add_preflight.mjs, the closest-to-submit dry run: it exact-matches LTJT lookups, runs product side effects, validates product-template consistency, clears/rebuilds standard-owned receivable rows, and serializes the live browser form without callingDoInfoJH. - Verified browser preflight blocks the fake sample before product side effects:
TianShu=4D3Nmatches once, while fake route/product/customer/OP/sales values match zero LTJT rows. - Updated
task_plan.md,findings.md,adapter_design.md,system_operation_scope.md, andmappings/orders_add.mapping.jsonwith the product-template-first preflight contract. - Added
tools/browser_order_add_submit_intercept.mjs, which patchesjQuery.ajaxbefore callingSubmitInfoForm()so page validation and the submit branch can be tested without allowingDoInfoJHto reach the network. - Refilled the live browser form with fake-only dry-run values and ran submit intercept. It captured one prevented
Act=DoInfoJHrequest, zero validation alerts, 822 fields, and no live submit. - Added
tools/browser_order_add_template_selftest.mjsto prove the non-writing pipeline with actual existing LTJT options while keeping product/customer/route/staff values in browser memory only. - Ran the template self-test with
--open-form --intercept-submit. It passed: product/trip/route/customer/staff exact-match counts were each 1, product side effects changed 135 fields, required fields were filled, final serialized field count was 822, and oneDoInfoJHsubmit branch was intercepted/prevented. - Added
tools/browser_order_add_submit_approved.mjs, the guarded live-submit tool. It requires a realbrowser_preflight_passedreport, a separatesubmit_intercept_capturedreport with matching payload SHA-256,--execute-live-submit, and approval tokenAPPROVE-LTJT-DOINFOJH-SUBMIT. - Verified the guarded submit tool refuses before browser access when given the template self-test report instead of real preflight/intercept reports.
- Final validation for this pass: all JSON reports/mappings parse with
jq, all Node tools passnode --check, the standard operation sample passes the JSON Schema validator, and sensitive-value scanning found only endpoint templates, redactedcpm, and explicitly fake dry-run payloads. - Updated template self-test compatible reports to account for the fact that
SubmitInfoForm()mutates the finalDoInfoJHpayload. The preflight-compatible report now includes the actual submit payload SHA-256 from the intercepted request. - Ran a controlled live test submit using the approved submit tool with
--execute-live-submitand approval token. The actualDoInfoJHrequest hash matched the intercepted approved hash, one POST completed, the response had a success hint, and no login-timeout or permission text was detected. - Added
tools/verify_order_marker.mjsand verified the submitted test markerAI-DRYRUN-NO-SUBMITthroughJH_OrderListfor departure date2026-8-1. The authorized list response contained the marker, proving the test order is visible after submit.
2026-07-09
- Shifted the product direction from a developer-operated Chrome extension popup to a business-system-driven task workflow: business users create and track tasks in the platform; the extension acts as a browser-session adapter.
- Built the platform UI around a single raw-instruction input, task cards, task detail/progress views, and server-backed task persistence.
- Added model-agent support to the platform adapter through
LianSyn-platform/server.mjs: configurable external parsing endpoint/API key and/api/parsetransport. - Added the platform parsing contract under
LianSyn-platform/and kept prompt ownership with the published external Profile. - Diagnosed MiniMax API connectivity failures. The failing
https://api.minimax.io/v1/chat/completionscalls returned HTTP 401invalid api key; switching tohttps://api.minimaxi.com/v1/chat/completionswith the correct Pay-as-you-go key reached HTTP 200. - Extended the Chrome extension bridge (
business-bridge.js) so the platform can create tasks, poll task results, clear tasks, and detect bridge readiness through pagepostMessage. - Moved normal automation into the extension background executor: after receiving a business task, it finds/opens the logged-in LTJT ERP page, opens the order form, runs preflight/intercept, submits the obvious test order, verifies the marker, and publishes task status back to
chrome.storage.local. - Added automatic result feedback to the business system task cards: queued, accepted, running, saved/verification, completed, blocked, paused, and waiting-extension states.
- Reduced the extension popup to a minimal status panel with one operator switch: "允许插件操作 ERP". The popup no longer exposes raw instruction entry, manual preflight, submit, or verification controls to normal business users.
- Added an ERP-operation disable path: when the switch is off, the business system can still see the plugin but tasks are marked paused and are not handed to the ERP executor until the switch is enabled again.
- Added bridge-state propagation so
PINGandBRIDGE_READYincludeerp_automation_enabled; the platform displays "插件已连接,ERP 操作已开启/已关闭" instead of a generic connection state. - Changed the post-save ERP behavior so after successful verification the extension returns the ERP order-entry frame to the independent-order list, filtered by departure date and test marker, instead of leaving the operator looking at the completed entry page.
- Iterated on connection reliability. Version
0.2.11added active popup-to-business-page bridge ping. Version0.2.12added reinjection tolerance forExtension context invalidatedafter extension reloads. - Clarified current browser boundary: the page bridge works within the same Chrome/browser profile. Cross-browser or multi-profile operation needs a local bridge hub service or backend queue rather than direct extension/page messaging.
- Current packaged extension is
chrome-extension/ltjt-order-assistant.zip; current extension version is0.2.12.
2026-07-12 — Incremental business-system and browser-plugin absorption
- Confirmed the scope for this pass: do not integrate or redesign the external Agent; absorb the handoff package into the root business system and Chrome plugin.
- Added
chrome-extension/ltjt-order-assistant/operation-plans.jsas a pure, browser-independent operation rule layer. It maps the handoffcreate_order/update_order/export_confirmationforms to the root operation matrix, validates identifiers and required fields, normalizes export aliases, preserves thevisitor-detailboundary, and records no-write/fallback status. - Added
tools/operation-plans.test.mjswith 7 passing tests covering team-single, team-batch fallback, handoff task normalization, update planning, export safety, and fail-closed unknown operations. - Updated
chrome-extension/ltjt-order-assistant/background.jsto load the rule layer, publish capability plans to business tasks, fail closed for unconnected routes, and execute team-batch test tasks sequentially through the verified team-single browser path. NativeDoInfoJHsremains deferred. - Updated
LianSyn-platform/app.jsto display operation type, identifier, capability route, no-write state, fallback, warnings, and planning status in task cards/details. The external Agent parsing path was not changed. - Updated the extension README and rebuilt
chrome-extension/ltjt-order-assistant.zipto includeoperation-plans.js. - Verification: all root JavaScript/ES module syntax checks passed; operation-plan tests passed 7/7. No live ERP operation was executed in this increment; the new batch loop still requires a separately authorized browser test.
2026-07-12 — Handoff business expansion and read-only browser probes
- After the root regression gate passed, absorbed the remaining handoff task shapes into the root operation layer: split parent, split child, structured order update, traveler-list attachment/update, and export/recovery tasks now normalize without inventing ERP identifiers or values.
- Expanded
schemas/standard_system_operation.schema.jsonwith structured update actions, export-only types/recovery flags, attachment paths, and parent/child ERP reference fields so the business-system contract covers the handoff operations. - Updated
operation-plans.jsto preserve parent-group and child-order references, planned capacity, plans-per-date, cycle, supplemental data, update actions, attachment metadata, export aliases, andneverResaverecovery semantics. - Added pure update preview logic for
set,delta, andappendactions. It reads a supplied ERP snapshot, rejects missing delta baselines/negative results/unsupported targets, and always reportsno_erp_write=true. - Added read-only page probes to
inpage.jsfor the independent-order list, split-plan pages, and split-child context. The probe reports login/page mismatch/candidate ambiguity and extracts only safe order-link metadata; it does not fill, submit, import, or download. - Updated the background executor to run those probes for all non-team-single routes and publish browser probe status, export-only source paths, and no-write state back to the business system. The task detail now shows the selected dry-run adapter, candidate count, and export recovery policy.
- Bumped the extension to
0.2.13and rebuilt the packaged ZIP. - Verification:
tools/operation-plans.test.mjspasses 12/12; all root JS/MJS files passnode --check; handoff fixtures normalize to the expected six operation families; the standard-operation schema parses as JSON; ZIP integrity passes. The handoff package's fullnpm testremains environment-incomplete (missing@e965/xlsx/playwright-coreand intentionally omitted legacy docs), so it is recorded separately from the root absorption gate.
2026-07-12 — Authorized full ERP/plugin live test and handoff completion
- User authorized temporary ERP order creation for end-to-end verification; cleanup remains manual and no test records were deleted automatically.
- Revalidated the existing team-single route and sequential team-batch fallback. Confirmed groups:
LLW-260811CDP-PLUGIN-TEST-20260712-1783842347475-A,LLW-260901BATCHT0712-D20260901-1783843465676-A, andLLW-260908BATCHT0712-D20260908-1783843475645-A. - Completed guarded live split creation through the business-system bridge: parent
LW-260916PLUGSP0712R2-A(capacity 4), followed by child orderD14271with pax2+1+1. A prior direct split test remainsLW-260915SPT0712-Awith childD14269. - Completed source-only confirmation export for Xingyou, Liantai, and JOB. The plugin used the correct
ddid/tidmapping and verified HTTP 200 Word-like responses without saving or delivering files. - Update and traveler routes were exercised safely but remain dry-run/read-only: update responses were HTTP 200 empty/non-persisting; traveler import revealed a native phone-field offset and was not saved.
- Final verification passed: loaded plugin
0.2.14/bridgePING, syntax checks, operation-plan tests 12/12, schema validation, and packaged ZIP integrity. The historical extension package wasltjt-order-assistant.zip.
2026-07-12 — Separate task logs and return JSON
- Confirmed the right panel had a data-display gap:
renderTaskDetail()only renderedtask.logs, whilesetOutput()retained only a short message/status line and the full parser/plugin responses were not visible. - Updated
LianSyn-platform/app.jsto preserve the full external parser response, combine parser/operation/handoff/executor data into a formatted JSON payload, and render it below a separate real-time log box. - Added display redaction for API keys, authorization/cookie/password/secret fields, session identifiers, and idempotency keys; the returned business fields remain visible.
- Added cache-busting versions for the updated app and stylesheet in
LianSyn-platform/index.html. - Verification passed:
node --checkfor the changed/server/extension scripts,LianSyn-platform/external-agent-client.test.mjs13/13, and a static UI resource smoke check.
2026-07-12 — Project Development and Maintenance Standard
- Added root document
开发维护规范.mdfor business and technical maintainers. - Defined the maintenance chain: exact first-line business command -> Agent routing -> unified Skill/reference -> task-ready operation -> ERP product-template resolution and exact lookup -> preflight/dry-run -> authorized submit and post-operation re-query.
- Recorded field ownership: Agent/Skill extracts user facts; ERP derives or validates customer, route, trip, currency, route prefix, hidden IDs, and form values; scripts must not make AI decisions at runtime.
- Defined the initial command registry for team single/batch, split parent/child, order update, traveler import, and confirmation export/recovery.
- Marked first-line command enforcement as the next implementation phase; this document does not yet change the Prompt or business-system input validator.
2026-07-12 — Production platform scope discovery
- Performed a read-only architecture scan for the newly requested productionization scope.
- Confirmed the early business system was a browser task loop, the Chrome extension was a browser-session adapter, and no durable backend/database/plugin-management runtime was present yet.
- Paused before implementation because the system-of-record choice materially changes the platform schema, synchronization strategy, migration plan, and plugin contract.
2026-07-12 — Repository cleanup audit
- Read-only inventory found five mixed categories in the root: active Agent/Skill and ERP adapter source, legacy handoff code, validation reports, generated packages, and planning/history logs.
- The root
交接包/is not referenced by current runtime code. Its olderp-task-v1, eight legacy Skills, scripts, and tools remain useful as comparison/compatibility material, but its README/docs reference missing.project-docs, deployment paths, and old task entrypoints. 交接包/runtime,交接包/diagnostics,交接包/tools/runtime, and rootreports/contain runtime residue, exported documents, test artifacts, and technical fields; they must be quarantined or archived rather than treated as source.- Root has no README, no root
.gitignore, and no usable.gitrepository. The next cleanup step must be non-destructive: create a manifest and target archive layout before moving or deleting anything. - Current active maintenance authority remains
开发维护规范.md,agent设计规范/, root schemas/mappings, root ERP-control tools, extension source, and the platform integration tests. Historical architecture docs and long planning logs should be marked as history before relocation.
2026-07-12 — Repository cleanup execution started
- User confirmed the proposed cleanup and authorized deletion of historical material with no current dependency.
- Dependency scan found no active-code import of
交接包/;reports/is only an output location referenced by CLI help text. The report files can be removed while the empty output directory remains available. - Planned mutations: create root README/ignore rules and archive manifests; move the old handoff package to a dated archive; remove handoff runtime/diagnostics/output residue, root reports, temporary health files, and
.DS_Store; move the extension ZIP intodist/. - Active source, schemas, mappings, scripts, extension source, platform adapter, samples, and planning files are preserved.
2026-07-12 — Repository cleanup completed
- Added the root project entrypoint and maintenance boundaries:
README.md,.gitignore,archive/README.md,dist/README.md,quarantine/README.md, andreports/README.md. - Moved the reusable legacy handoff to
archive/handoff/2026-07-12/legacy-erp-handoff/and removed its runtime, diagnostics, and generated output subtrees. - Deleted 22 historical root validation report files and both
.DS_Storefiles. The emptyreports/directory remains as a generated-output location. - Moved the verified extension package to
dist/ltjt-order-assistant.zip. - Removed stale live-report claims from
adapter_design.mdandsystem_operation_scope.md; both now require a fresh gated report for any future write. - Verification after cleanup: 25/25 Node tests passed; changed JavaScript files passed
node --check; current JSON contracts parsed; Skill quick validation passed;unzip -t dist/ltjt-order-assistant.zippassed. - User confirmed: keep LTJT as the initial external source of truth and perform architecture hardening only; do not add business features or alter existing workflows.
- User confirmed: phase one is a single-company, single-tenant private deployment, with future organization isolation reserved in the model but no full SaaS multi-tenancy now.
- User confirmed: use a centralized backend/database control plane with an authenticated Chrome plugin Worker; deploy the service in a persistent Linux/Docker environment and treat browser-local state as non-authoritative.
- User confirmed: PostgreSQL is the primary durable database; any Redis use remains optional and non-authoritative for cache, locks, or transient transport only.
- User confirmed: phase one will not integrate enterprise SSO; the platform must provide its own account login, with the security and lifecycle policy still to be finalized.
- User confirmed: accounts are administrator-created/invited, public registration is disabled, and the first administrator is created through deployment bootstrap.
- User confirmed: phase one has only one human administrator role with full permissions; multi-role RBAC is deferred, but plugin Workers remain separately identifiable.
- User confirmed: use revocable server-side administrator sessions with secure HttpOnly/SameSite cookies; do not persist long-lived JWTs in browser storage.
- User explicitly declined MFA for phase one; compensating controls and a controlled password-recovery procedure remain required.
- User confirmed password recovery is server-side/operator-controlled only; no email self-service recovery will be added in phase one.
- User confirmed the plugin remains a session-bound adapter with no independent registration, pairing code, or Worker credential in phase one.
- User confirmed the execution safety invariant: preflight/dry-run -> explicit administrator confirmation -> one submit -> ERP re-query; uncertain outcomes require reconciliation and cannot be retried automatically.
- User confirmed a clean production database initialization with no migration of prototype tasks, caches, reports, or test orders; only schemas, configuration structure, and operation contracts are retained.
- User confirmed direct production deployment without a separate test/staging environment; offline verification, no-write defaults, release prechecks, and backups become mandatory safeguards.
- User confirmed automated PostgreSQL backups, pre-migration backups, independent storage, and verified restore procedures.
- User confirmed structured redacted logs, health checks, and key failure alerts for the private deployment, with no third-party monitoring platform in phase one.
- User confirmed protected deployment-host secret injection and server-side rotation; secrets must not enter source, images, logs, database, frontend, or extension storage.
2026-07-12 — Consolidated production hardening baseline
- Re-read the active root after cleanup and confirmed the current implementation remains a browser-local prototype around the existing Agent/Skill/schema/mapping/ERP adapter.
- Consolidated the user-confirmed scope and technical defaults in
task_plan.md: PostgreSQL control plane, native admin login, DB-backed task state/leases/audit, session-bound extension, direct production deployment, backups, observability, and no new business capabilities. - Waiting for the user's explicit final confirmation before modifying application code or deployment files.
2026-07-12 — Architecture hardening implementation
- User confirmed the consolidated scope and explicitly authorized implementation.
- Added root production package/lock, TypeScript configuration, PostgreSQL migration, encrypted field helper, DB connection/transaction layer, admin authentication/session service, task service, Fastify server, admin CLI, retention job, Dockerfile, Compose, Caddy config, backup/restore scripts, and predeploy checks.
- Added login panel and server-backed task synchronization to the existing operation page; browser local storage is no longer the task authority. Added backend claim/result/heartbeat calls around the existing session-bound plugin handoff.
- Rebuilt
dist/ltjt-order-assistant.zipwith extension version0.3.0; retained the existing ERP operation logic and safety gates. - Verification:
npm testpasses 25 tests,npm run buildpasses, changed browser/extension scripts passnode --check, and backup scripts passsh -n. - Environment limitation: this Mac has no
psqlor Docker executable, so PostgreSQL migration/restore and Compose tests are pending on the target production host. - Migration smoke was attempted and failed as expected with
ECONNREFUSED 127.0.0.1:5432; the failure is explicit and fail-closed, with no partial migration claim.
2026-07-12 — Final local verification
npm test: 25 tests passed, including 5 control-plane tests and all existing parser/operation-plan regressions.npm run build: passed; browser/extension scripts and backup scripts pass syntax checks.npm audit --omit=dev --audit-level=high: 0 vulnerabilities after upgrading@fastify/staticto the patched major.- Control plane starts, serves the login page and
/health/live;/health/readycorrectly returns 503 while PostgreSQL is absent instead of claiming readiness. dist/ltjt-order-assistant.zippassesunzip -tand contains extension version0.3.0.- Remaining target-host gates: run PostgreSQL migration, bootstrap the administrator, configure HTTPS/secrets, create and verify an independent backup, run restore-check, then perform a no-write browser preflight before enabling any ERP submit.
2026-07-13 — Login gate visual fix
- Fixed the login/workbench overlap caused by the workbench grid's
displayrule overriding the HTMLhiddenattribute. - Added the explicit hidden-state CSS rule, updated the CSS cache-buster, and verified the served page contains the fix and the workbench remains marked
hidden.
2026-07-13 — Remote PostgreSQL startup and admin bootstrap
- Connected to the supplied PostgreSQL host
192.168.3.211:5433, databasepostgres, without writing the credential into the repository. - Ran migration
001_initialsuccessfully. - Created administrator
xqkadminusing the generated 20-character password; no password value was logged or persisted in project files. - Restarted the control plane against the remote database at
http://127.0.0.1:8786. - Verified
/health/readyreturns database-ready and administrator login plus/api/auth/meboth return HTTP 200. - External parser credentials were not supplied, so AI parsing remains disconnected until
DEERFLOW_OPEN_API_KEYis injected into the runtime environment.
2026-07-13 — Automatic environment loading completed
- Added a root local
.envwith mode0600, combining the current control-plane database configuration and private external Agent configuration; its values were not printed or logged. - Updated root
package.json:dev,start,db:migrate,admin, anddata:retentionnow automatically load.env;start:platform-adapterloadsLianSyn-platform/.env. - Restarted the control plane through
npm run dev;http://127.0.0.1:8786/api/statusnow reportsdatabase_ready:true,ai_configured:true, andai_connected:truewith authenticated HTTP 200 probe. - Regression gate passed: typecheck, 5 control-plane tests, and 20 legacy/parser tests (25 total).
- The actual administrator password was not changed. Login should use the existing bootstrapped account; password recovery remains the separate admin reset path.
2026-07-13 — Parse stall hardening completed
- Replaced the state-changing Agent health probe with read-only
GET /health; added a 30-second server-side cache and reduced browser status refresh to 30 seconds. - Added a 180-second total parser deadline, terminal SSE/[DONE] handling, and tests proving a terminal event does not wait for stream closure.
- Updated parse claiming to exclude tasks already active in the current process, set the durable message to
任务正在解析。, and require the current lease owner when persisting parse results. npm testpassed all 26 tests andnpm run buildpassed. The control plane was restarted as the new process and/health/live,/health/ready, and/api/statusall returned HTTP 200;/api/statusnow reportsprobe: health_endpointand no external HTTPS session connection remained after the status checks.- The previously stuck task had already been cancelled before restart and was intentionally not recreated or resubmitted.
2026-07-13 — Delete task visibility fix
- Fixed the apparent no-op after clicking “删除任务”: cancelled tasks are now excluded from the default control-plane task list, so the SSE refresh cannot add the cancelled card back.
- Added a defensive frontend filter for cancelled rows returned by stale servers or in-flight event refreshes.
- Kept the backend cancellation record and audit trail intact; this change hides cancelled items from the active task-card view rather than deleting history.
- Bumped the frontend cache-buster to
20260713-delete-task-1;npm test(26 tests),npm run build, served-resource checks, and/health/liveplus/health/readyall pass after restarting the control plane.
2026-07-13 — Parse reliability and full live-flow verification completed
- Reproduced the persistence failure with a real Agent response and captured PostgreSQL SQLSTATE
22P02: the system Worker's empty actor ID was invalid for the UUID column. - Fixed system-event actor handling, added durable parse attempts, Worker watchdog/abort propagation, bounded SSE cancellation, persistence retries, lease-expiry terminal recovery, stale-result protection, terminal lease cleanup, and SSE refresh coalescing.
- Applied migrations
002_parse_reliabilityand003_terminal_lease_cleanupto the configured PostgreSQL database. - Verified a fresh real Agent task completes in one attempt and reaches
awaiting_confirmationwith the expected standard operation and full encrypted response. - Verified the remaining backend state machine through authenticated/CSRF-protected API routes in an isolated no-write run:
confirmed -> queued -> completed, withno_erp_write=trueand no ERP action. - Final gates pass: 27/27 tests, TypeScript build, JavaScript and shell syntax checks, dependency audit with 0 vulnerabilities, live/ready/status endpoints, database invariants, browser-extension heartbeat, and compiled
npm startruntime.
2026-07-13 — ERP duplicate dispatch and stuck receipt fully remediated
- Immediately stopped the prior control-plane process to prevent additional claims. Database evidence confirmed four
task.browser_claimedevents forTASK-20260713103736-9tLJa4wand no persisted terminal plugin result. - Created
/Users/inmanx/Documents/lwltAPI-backups/ltjt-platform-20260713T112103Z.dump, verified its SHA-256 and archive listing, then applied migration004_erp_execution_idempotency. - Added a unique partial index enforcing one ERP attempt per task and an execution-lease watchdog that moves expired browser executions to reconciliation rather than reclaiming them.
- Reworked claim/result APIs around a server-issued execution UUID, strict browser ownership, idempotent result hashes, monotonic terminal states, and no cancellation after an ERP attempt exists.
- Reordered the page flow to claim before extension delivery; removed refresh/reconnect/heartbeat auto-handoff and the “重交” action; expanded polling to all active claimed states; and added a minimum extension-version gate.
- Added
execution-guard.jsand extension-side durable execution state. Task payload and execution acquisition are written atomically, duplicate messages cannot overwrite a running task, and a real ERP operation recordswrite_startedbefore invoking the page action. - Suppressed unsafe replay of native ERP dialog callbacks; explicit verification and return-to-list remain authoritative. Cleared the old diagnostic error after reload and verified zero extension runtime/manifest errors.
- Marked the incident task
reconciliation_pendingwithduplicate_execution_detected, cleared its lease, disabled deletion, and displayed explicit manual-requery guidance. It was not marked completed and was not sent to ERP again. - Rebuilt
dist/ltjt-order-assistant.zipat version0.3.1, verified archive integrity, and reloaded the unpacked extension in the active Chrome session. The control plane records the connected version as0.3.1. - No-write live verification proved: first claim accepted, replay claim returned
claimed=false, exactly one ERP attempt existed, an identical result added zero events, and a running result after completion was rejected asresult_after_terminal. Verification data was removed afterward. - Browser refresh verification kept the incident claim count at exactly four before and after reload; the page remained
待回查, plugin stayed connected/compatible, and delete remained disabled. - Final gate: 30/30 tests, TypeScript build, JavaScript syntax, ZIP integrity, health/readiness, dependency audit with zero vulnerabilities, and compiled production runtime all pass.
2026-08-05 — Task-scoped Agent session continuation started
- User confirmed implementation of task-bound sessions, recoverable missing-input turns, generic task messages, encrypted message retention, one-time external session recovery, and a minimal operator reply UI.
- Baseline inspection found existing uncommitted security/reliability work in
.env*,control-plane/src/config.ts,LianSyn-platform/app.js,LianSyn-platform/server.mjs, andLianSyn-platform/external-agent-client.*; these changes are preserved. - Current architecture creates a Superagent session inside each parse call and returns
session_id, but has no durable task-to-session relation, continuation endpoint, orawaiting_user_inputstate.
2026-08-05 — Task-scoped session implementation progress
- Added the strict
agent_parse_needs_inputwrapper schema and updated the local Skill, host integration, safety, examples, and prompt contracts without weakening the complete operation schema. - Added migration
005_agent_task_sessions.sqlfor encrypted task sessions, encrypted user/assistant turns, per-turn idempotency, conversation indexes, and legacy-task backfill. - Extended the control plane with session-aware task creation/claims, encrypted message turns,
POST /api/messagesmatching,awaiting_user_inputtransitions, redacted public session metadata, and one-time recovery state handling. - Extended the Superagent adapter to reuse task sessions, use task/turn idempotency keys, replay stored history once after a 404/410 session expiry, and preserve NEED_INPUT results with
operation: null. - Added the minimal operation-desk reply panel for missing fields/questions and wired it to the authenticated message API; ERP/plugin execution paths remain unchanged.
- Bundled pnpm dependency setup briefly altered tracked
node_modules; those tool-generated changes were restored and the generated lockfile was removed. Direct TypeScript checking now passes.
2026-08-05 — Task-scoped session continuation verification complete
- Control-plane tests: 10 passed; external Agent, legacy parser, and ERP execution tests: 43 passed.
- Production TypeScript build passed and generated
dist/control-planeartifacts include the task-session/message API and state transitions. - JavaScript syntax checks, JSON Schema parsing, migration marker checks, and
git diff --checkpassed. - PostgreSQL migration execution and online Superagent Profile/Skill publication remain deployment/integration steps; neither was run against external state in this pass.
2026-08-05 — Manual Agent-to-ERP handoff boundary started
- User clarified that Agent-result confirmation and submission to the next step are one manual action, not two separate buttons.
- Agreed behavior: Agent parsing remains automatic; after the result returns, the operator explicitly confirms and submits the operation to the ERP plugin; plugin preflight, form filling, ERP submit, and verification remain controlled by the existing automation setting.
- Baseline inspection shows the current code already performs confirmation and plugin handoff from the same selected-task action, but the action wording and some failure-path semantics need to be checked against this boundary before changing anything.
2026-08-05 — Manual Agent-to-ERP handoff implementation in progress
- Confirmed no second confirmation button is needed: the selected-task action will represent one operator decision,
确认并提交到 ERP 插件. - The existing
/confirmthen/claimsequence and server-issued execution ID remain intact; this is a presentation/flow-boundary clarification, not a relaxation of the at-most-once execution guard. - First direct Node test attempt failed because the TypeScript test imports compiled
.jsmodules that were not present incontrol-plane/src; this was an invocation error, not a product regression. Static assertions and JavaScript syntax checks passed. - A compiled
disttest attempt was not usable because relative fixture paths resolve underdistwhile migrations and platform static files are not copied bytsc; the supported source test runner remains the authoritative regression path.
2026-08-05 — Manual Agent-to-ERP handoff boundary complete
- Renamed the selected-task action to
确认并提交到 ERP 插件; the same button handles the confirmation-to-handoff transition and uses a clear retry label only when a confirmed task was not yet delivered. - Updated task status, stage notes, process logs, backend transition messages, operator documentation, and extension flow documentation to distinguish the manual Agent boundary from plugin-internal automation.
- Kept the server
/confirm→/claimordering, one ERP execution-attempt invariant, execution ID, plugin duplicate guard, and uncertain-result reconciliation behavior unchanged. - Verification passed: TypeScript no-emit check, TypeScript build, control-plane tests 10/10, legacy/external tests 43/43, JavaScript syntax checks, static manual-handoff assertions, and
git diff --check.
2026-08-05 — Login session persistence fix complete
- Confirmed the database still contained active, unexpired sessions; the issue was on the browser/session-restore boundary rather than session-table persistence.
- Added an explicit
Expiresattribute alongsideMax-Agefor the HttpOnly session cookie and marked auth responsesno-store. - Changed page startup to show a disabled “正在恢复登录状态…” state while
/api/auth/meand CSRF restoration run; the login form appears only when restoration fails. - Corrected the documented full-operation-console URL to
http://127.0.0.1:8786/;8765is parser-only and has no login session API. - Rebuilt and restarted the control plane. Health/readiness and
/api/statusremain healthy; regression tests pass 10/10 control-plane and 43/43 legacy/external.
2026-08-05 — Login refresh false-logout fixed
- Inspected the live control-plane request log: refresh authentication was successful (
/api/auth/me200 and/api/auth/csrf200), followed by/api/tasks500 from missingagent_sessions. - Ran the project migration runner against the configured database; it applied
005_agent_task_sessions. A smoke request using a temporary revoked session now returns/api/auth/me200 and/api/tasks200 with 23 task rows. - Updated
initializeSession()so only auth/CSRF failures show the login panel; task synchronization failures stay in the authenticated workbench and show a sync error. - Added host canonicalization to 8786 and redirected the parser-only 8765 root to the control-plane console.
- Final checks: TypeScript check/build, JavaScript syntax,
git diff --check, control-plane tests 10/10, and legacy/external tests 43/43. - Bumped the operator-page script cache-buster to
20260805-auth-persistence-2after the false-logout guard was added.
2026-08-05 — Clickable status diagnostics started
- User confirmed transport-oriented AI and plugin connection semantics.
- User confirmed a lightweight click-to-open details popover with safe diagnostic fields and manual recheck actions.
- Baseline inspection found AI currently gates
ai_connectedon historical authentication evidence, while status button clicks only refresh labels and expose no diagnostic panel. - Backend
/api/statusnow computes the primary AI connection from database readiness, configuration presence, and service reachability while preserving authentication evidence as diagnostics. - Added AI/plugin detail-popover structure, safe field rendering, click/outside/Escape dismissal, manual rechecks, and plugin warning-state semantics.
- TypeScript no-emit check, JavaScript syntax checks,
git diff --check, control-plane tests 11/11, and legacy/external/ERP tests 43/43 passed. - Production TypeScript build completed and the compiled status route contains the reachability-based contract.
- Restart completed under PID 70360; live
/api/statusreports the AI service connected by reachability while retaining the old 401 only as historical evidence. - In-app browser verification confirmed the AI details dialog, plugin failure details, manual recheck controls, and Escape dismissal. Element bounds showed the popover remains inside the 1280px viewport with a 33px right margin.
2026-08-05 — Operator reply panel removal started
- User confirmed removing the large reply panel while retaining backend continuation capabilities for future channels.
- Diagnosis found
applyParseResult()writesoperationSummary(null)into the public JSON column. That becomes a truthy blank object, so the frontend incorrectly offers ERP confirmation forawaiting_user_input. - The current waiting task proves the mismatch: parse response operation is null, but persisted operation is a blank summary object.
- Removed the operator reply markup, CSS, local draft/idempotency state,
/api/messagesclient call, and event handlers; the backend endpoint remains intact. - ERP confirmation now requires
awaiting_confirmationor legacyagent_parse_passed, soawaiting_user_inputcannot expose the action. - Future parse results persist a SQL/JSON null operation summary when no operation exists; public task wrapping also masks legacy blank summaries for NEED_INPUT/blocked parse responses.
- Verification passed: syntax/type/build, control-plane 11/11, other regression 43/43, and
git diff --check. - Restarted the supervised control plane as PID 74979. Served HTML contains no reply-panel controls, and the existing waiting task now publicly returns
operation: nullwhile retaininginput_requestdiagnostics.
2026-08-05 — Production team-order parser rules
- Located the active route prompt at
agent设计规范/agent-prompt.mdand the active Skill atagent设计规范/skills/lwlt-newbooking/. - Confirmed stale rules in the active Skill/reference set: create/batch required explicit prices, OP, salesperson, and test-order handling; room schema still exposed HNM/TL; date handling did not document nearest-date month/day parsing.
- User confirmed all requests are production/formal, price and linked fields are synchronized after product/business selection, OP/sales are login defaults, and passenger/room objects are required as groups but sparse by subtype.
- Updated the active Agent prompt and Skill, the create-order/operation/output/host references, both canonical operation-schema copies, and the canonical examples.
- Validation complete: Skill frontmatter quick validation passed; both Schema copies parse and remain aligned; six canonical JSON examples pass the wrapper and operation Schema checks; the production batch sample passes without prices/OP/sales; missing room allocation is rejected; TypeScript check and 43 legacy/external tests pass;
git diff --checkpasses.
2026-08-05 — Four-domain Skill routing redesign started
- User confirmed the long-term four-Skill architecture:
newbookingfor three create behaviors,updatingfor two modification behaviors,arrangementfor four arrangement behaviors, andconfirmationfor confirmation exports. - Baseline inspection found the current seven-action registry and main Prompt still route everything through
lwlt-newbooking, while the maintenance document contains a planned but unimplemented first-line command protocol. - Clarified the routing decision: the first line contains the human-facing business behavior, not
newbooking/updating/arrangement/confirmation; those four names remain internal Skill targets. Source Skill/router edits can now proceed.
2026-08-05 — Four-domain Skill routing redesign implementation
- Added the business-behavior registry and replaced the Agent Prompt with a first-line-preferred router. The full input/context remains authoritative when the line is incomplete, misspelled, or absent.
- Split active Skill metadata into
newbooking,updating,arrangement, andconfirmation. Removed the previous activelwlt-newbookingmetadata so the internal Skill list has the four requested names only. - Scoped
newbookingto the three requested create behaviors and carried forward production-order rules: nearest-date month/day selection, no leader-fare question, first-four room types with aliases, login-default OP/sales, sparse passenger/room objects, and product/business auto-synced fields. - Added the
confirmationexport boundary and registered the two future modification behaviors plus four future arrangement behaviors as fail-closed Skill scaffolds; they do not borrow an unrelated operation contract. - Updated the maintenance standard, project README, behavior registry, and Skill references to use the same mapping.
2026-08-05 — Business-behavior hint protocol relaxed
- Replaced the rigid exact-first-line rule with a soft routing hint: prefer the first line, tolerate spaces/minor typos/common wording, and inspect the full input and context.
- Updated the Agent Prompt, registry, all four Skill descriptions/relevant references, maintenance standard, README, and planning notes. Missing or imperfect first-line wording now remains routable when the overall intent is clear.
2026-08-05 — Internal Skill identifier prefix
- Renamed the four active Skill directories to
lwlt-newbooking,lwlt-updating,lwlt-arrangement, andlwlt-confirmation. - Updated frontmatter names, display names, invocation tokens, internal blocker identifiers, reference headings, registry mappings, README links, and maintenance-document paths.
- Kept business behavior names unchanged and did not add internal Skill names to the cloud-facing Agent Prompt.
2026-08-05 — Cloud Agent prompt boundary cleanup
- Removed the internal Skill names, registry link, internal route table, and maintainer-facing routing explanation from the cloud Agent Prompt.
- Kept the Prompt focused on business-intent recognition, tolerant first-line hints, production orders, task continuation, missing-input handling, and standard JSON output.
2026-08-05 — Cloud prompt failure-example cleanup
- Removed the concrete
agent_parse_blockedJSON example from the cloud Prompt. It now states the failure behavior only; the shared output contract defines the machine-readable shape.
2026-08-05 — Cloud prompt role wording
- Updated the cloud Prompt identity from a generic business-request entry point to
老挝联泰系统操作员; routing and output rules are unchanged.
2026-08-05 — Skill runtime package cleanup
- Refactored
lwlt-newbookinginto a minimal runtime package withactions-and-fields.md,normalization-rules.md, andoutput-contract.md; moved examples and host input documentation toagent设计规范/test-fixtures/lwlt-newbooking/. - Reduced
lwlt-updatingandlwlt-arrangementto their stable blocking behavior, and reducedlwlt-confirmationto order identification, type normalization, recovery boundaries, and output packaging. - Removed the source
.DS_Storeand all runtime references to host integration, old duplicate references, and repository-relative root Schema links. - Validated representative newbooking/create and confirmation operations plus all parse-result wrappers against the canonical JSON Schemas.
- Rebuilt four clean Desktop packages:
lwlt-newbooking.skill,lwlt-updating.skill,lwlt-arrangement.skill, andlwlt-confirmation.skill.
2026-08-05 — Exported prefixed Skill packages
- Packaged
lwlt-newbooking,lwlt-updating,lwlt-arrangement, andlwlt-confirmationas four standalone.skillarchives on the Desktop. - Verified each archive with
unzip -tand confirmed the packagedSKILL.mdfrontmatter name matches its prefixed Skill name.
2026-08-05 — Skill/ERP plugin alignment complete
- Audited the four Skill contracts against the extension planner, background executor, ERP page adapter, form mapping, standard operation Schema, and confirmation export adapter.
- Enabled formal production routing for the three active newbooking behaviors while keeping the existing execution-ID, explicit handoff, preflight, submit-intercept hash, write-started, and ERP-receipt guards.
- Removed manual price/OP/sales requirements from the active create handoff. Product/GetProduct-linked rows and prices are preserved; staff resolves from the logged-in ERP defaults.
- Added split-parent date-range/recurrence handling and both ERP product-radio names (
cpidandcp_id); removed invented default/test group suffixes and switched verification to ERP receipt identifiers. - Canonicalized confirmation export types and camel/snake recovery flags. Kept updating and arrangement as explicit capability blockers until their formal ERP actions are captured.
- Validation passed: four Skill quick checks, standard and wrapper Schema examples, extension JS syntax, 16 planner tests, 3 execution-guard tests, TypeScript no-emit, 11 control-plane tests, 28 external-parser tests,
git diff --check, and all four Desktop package integrity/source-match checks. - The archived legacy ERP suite was not used as a release gate because the archive is missing its optional
@e965/xlsxdependency and several historical fixture files; no current extension or Skill test depends on those archived failures.
2026-08-06 — Strict contract alignment started
- User confirmed implementation with no old-task compatibility requirement and asked for an explicit Skill-versus-plugin validation comparison.
- Read the active Skill, Schema, parser adapter, extension planner, page preflight, and current tests. The first implementation target is to reject malformed canonical output at the parser boundary, then keep the plugin checks identical.
- Retry behavior for safely re-runnable no-write failures remains a separate decision from this contract/package change; write-started or uncertain executions must stay non-retryable.
2026-08-06 — Strict contract alignment completed
- Updated the active newbooking references, standard Schema, parser adapter, extension planner, page preflight, background executor, platform/control-plane documentation, and regression fixtures to one canonical production contract.
- Rejected the original
product: "老挝好时光"/customer: "衡阳广东"batch result before ERP handoff; the corrected{name: ...}form passes the planner and Schema. - Targeted parser/planner/guard tests pass 51/51; control-plane tests pass 11/11; TypeScript, JavaScript syntax, Schema, archive-integrity, and diff checks pass.
- Built and later archived ltjt-order-assistant-0.3.2.zip; refreshed the unversioned current package.
2026-08-06 — 独立团批量下单原生流程启动
- User explicitly authorized real ERP order creation for this case and supplied the new live origin
https://lwlt.hisy.cc/System/Mainlt.asp. - Added a tracked implementation phase for live native batch-page discovery, Skill/contract update, native ERP adapter, business-system return handling, authorized execution, regression, and packaging.
- No source/plugin behavior has been changed yet; the next action is to connect to the logged-in Chrome session and inspect the native batch page without saving.
2026-08-06 — 原生批量页已定位
- Connected to the logged-in Chrome target at the new ERP origin with the authorized CDP workflow.
- Opened the independent-team plan list and invoked its native
批量下单action without saving. - Confirmed the nested
orders_adds.aspform and the observed control names:Riqi1/Riqi2,zutuanshe,S_chanpinming,darenshu,frenshu1,zhouqi,cp_id, andSubmitButton. - Confirmed the page already contains the target product label
老挝好时光-(广东); next discovery will capture row/lookup behavior and the native save response contract.
2026-08-06 — 原生批量页保存前预检通过
- Captured the native
InfoForm1contract: POST/System/DAT/orders.aspwithAct=DoInfoJHs, script response. - Verified the abbreviated customer resolver against the live SelectBox dataset. The combined token match
衡阳广东uniquely resolves to customer ID661; its page-side effect populated customer, manager/sales, and source-region fields. - Verified context-aware product reload:
老挝好时光plus the resolved customer reduced the product candidates to the intended老挝好时光-(广东)row, radiocp_id=409, and product-side group prefix/suffixLW/A. - Filled the requested dates/counts/rooms and selected exactly three explicit cycle dates. The page-generated serialized form contains the expected values.
- Called the native save function with the DoInfoJHs network request intercepted. It passed required-field validation with one clean intercepted submit, no alert, and no live network write; preflight hash is recorded in findings.
- Live page discovery is complete; contract/Skill update is now the active phase.
2026-08-06 — 原生批量下单授权执行完成
- Compared the archived plugin experience before retrying: the older successful batch path was a verified per-date
DoInfoJHfallback, while nativeDoInfoJHswas historically deferred. The first current native attempt was therefore left non-retryable after its ERP error callback, and a read-only order-list query found no target order. - After the user confirmed the ERP-side bug was fixed, re-ran the exact native workflow under a fresh execution ID. Customer
衡阳广东and product老挝好时光each resolved uniquely in the logged-in ERP context; the requested counts, rooms, range, and three explicit dates were applied. - ERP returned
操作成功,共计新增 3 个团队with group numbersLW-260903A-A,LW-260905A-A, andLW-260930A-B. - The plugin completed post-save
JH_OrderListverification for all three identifiers (HTTP 200, positive marker occurrence, no login-timeout/permission text) and returned the three group numbers to the business-system task ascompleted.
2026-08-06 — 原生批量下单交付包完成
- Updated the Skill handoff with the repaired-ERP live-validation evidence and the rule that the legacy per-date fallback must not silently replace the native batch route.
- Rebuilt and checked
dist/ltjt-order-assistant-0.4.0.zipanddist/ltjt-order-assistant.zip; both includeteam-batch.jsandteam-batch-inpage.js, with manifest version0.4.0. - Rebuilt and checked
/Users/inmanx/Desktop/lwlt-newbooking.skillfrom the currentagent设计规范/skills/lwlt-newbookingsource.
2026-08-06 — 扩展桥接失效误报修复完成
- 定位到扩展重载后旧 content-script 监听器返回
Extension context invalidated,但当前桥接同时返回有效PONG;弹窗原逻辑错误地采用了第一个响应。 popup.js现等待有效PONG,业务系统客户端也忽略同类旧错误并继续等待当前响应。- 已同步实际 Chrome 加载目录
/Users/inmanx/Desktop/ltjt-order-assistant-0.4.0,重新加载后弹窗实测为“已联通”。 - 插件包重新生成并通过 ZIP 检查;操作计划/批量测试 23/23,扩展与工具 JS 语法检查、
git diff --check均通过。
2026-08-06 — 业务系统回查轮询修复完成
- 发现业务系统将
reconciliation_pending误判为终态,导致已完成的 ERP 回查结果停留在“待回查”。 - 已用现有插件结果完成一次只读回查结果持久化,任务
TASK-20260806044018-ocRc2O0当前显示“已完成”,三条团号均已命中。 - 修正前端轮询边界并通过
LianSyn-platform/app.js语法检查;本次没有再次提交 ERP。
2026-08-06 — 控制平面回执收敛修复完成
- 修复写入后
running/verification中间回执被误判为不可变reconciliation_pending的状态分类。 - 允许同一执行编号、同一浏览器连接携带确定性 ERP 回执从待回查安全收敛为
completed;真实不确定结果仍保持不可重试并等待租约回查。 - 控制平面类型检查、构建与测试通过;当前任务已返回“已完成”,三条团号保持原回执结果。
2026-08-06 — 原生批量流程日志完整团号完成
- 修复原生批量后台消息只显示首个团号的问题,日志现在输出全部团号列表。
- 插件包与实际 Chrome 加载目录已同步,插件相关测试 23/23、语法检查和 ZIP 完整性检查通过。
- 当前业务系统刷新验证通过:流程日志已显示 3 个完整团号,任务状态为“已完成”。
2026-08-06 — 业务设计范式与历史治理专项启动
- 已读取并恢复现有
task_plan.md、findings.md、progress.md,并检查了当前项目的业务注册表、四类 Skill、独立团批量下单 references/fixtures、Schema/mapping、ERP 插件、归档区、发布物和忽略规则。 - 已确认第一业务的经验可以抽象为“用户输入契约 → Skill 规范化 → ERP 确定性流程 → 回执/回查证据”的业务适配包;接下来会把三项核心交付(用户输入模板与示例、ERP 操作流程、Skill 适配)统一登记,并补上跨会话可读的状态和验收入口。
- 已发现仓库在 2026-07-12 做过第一轮归档清理,本轮必须保留现有归档历史并尊重当前未提交改动;暂未执行任何源文件修改、搬移或删除。
- 下一步等待用户确认历史文件治理边界后,再实施标准文档、第一业务索引和分层清理。
2026-08-06 — 治理边界确认
- 用户确认采用“先归档/隔离、后清理”的可恢复策略:保留源码、当前契约、Skill、测试和真实验证证据;仅处理确认无引用的临时残留、重复生成物或明确废弃副本。
- 用户明确旧版
开发维护规范.md已过期,需要重写为新的业务设计与交付规范;旧版本不再作为当前工作依据,Git 历史保留其可恢复性。 - 当前阶段切换为“规范重建 + 第一业务迁移”,完成后再处理已识别的历史报告和旧发布物。
2026-08-06 — 业务设计范式沉淀与历史治理完成
- 将旧版
开发维护规范.md重写为当前权威的“业务适配设计与交付规范”,明确每类业务必须同步完成用户输入模板/示例、ERP 操作流程/证据、Skill 适配三项设计,并定义统一字段边界、实施顺序、验收门禁和归档规则。 - 新增跨会话入口 business-adaptation-registry.md、通用模板 business-adaptation-template.md 和参考业务 team_order_batch_create.md。
- 第一业务入口已串起真实案例的输入模板、标准 operation、
lwlt-newbookingSkill、ERP handoff、原生批量插件、Schema/mapping、测试和三条团号的真实回查证据。 - 按确认的可恢复边界归档
api_inventory.md和旧0.3.2扩展包,删除根目录及发布目录的.DS_Store残留;当前0.4.0交付包和现有未提交业务改动均保留。 - 验证通过:Markdown 本地链接、四个 Skill quick validator、JSON、TypeScript、控制平面 11/11、业务/插件回归 55/55、JavaScript 语法、
git diff --check和三个 ZIP 完整性检查。
2026-08-06 — 独立团单个下单业务梳理启动
- 恢复现有计划、Skill、Schema、单团插件和历史经验;确认
team_order_create已有受保护单团执行路径,但当前契约未把用户输入的预定客户设为单团必填项。 - 连接用户已登录的 ERP 页面,仅打开单团下单表单并做只读 DOM/SelectBox 检查:确认
OPEN_update(0,0,0)、orders_add.asp、826 个表单元素和Act=DoInfoJH提交契约。 - 发现关键词
老挝联泰命中三个客户记录:人民币、美金、老挝;因此按唯一匹配门禁暂停后续 contract/插件修改,等待用户选择具体客户记录。 - 发现产品关键词
遇见老挝同时存在“遇见老挝(常规)”和“遇见老挝”,但名称列有一个精确候选;选定客户后仍需重新运行产品联动和保存前预检。 - 本阶段没有保存 ERP、没有产生新团号;日期暂以当前上下文推定为
2026-09-03,待业务确认后进入下一阶段。
2026-08-06 — 独立团单个下单适配完成至预检门
- 用户补充了
人名币客户关键词和“产品选择后必须点击更新行程”的 ERP 操作要求;已将两点写入 Skill、ERP handoff、fixture、业务适配包和插件。 team_order_create的标准 operation/Schema/planner 现在要求customer: {name, keyword};当前示例使用name=老挝联泰人民币、keyword=老挝联泰人名币。- 单团插件已加入客户安全匹配、实际更新行程按钮点击、GetProduct 监听、产品模板客户覆盖后的客户恢复和客户 ID 复核。
- 静态/回归验证通过:插件 JavaScript 语法、operation planner 20/20、
git diff --check;真实 ERP 页面保存前预检通过,提交请求已拦截且网络写入为 0。 - 业务入口 team_order_create.md 与登记表状态均已更新为
预检通过。本阶段没有真实保存,后续若执行必须先取得该单独写入授权并在完成后回查团号。
2026-08-06 — 单团真实保存工作开始
- 用户已明确授权对第二业务的示例执行真实 ERP 保存,并指出仅有拦截预检不能算完整流程。
- 先复用已通过的单团插件保护路径:
preflightRawInstruction→liveSubmitApproved→verifyOrderMarker;本次使用新任务 ID/执行编号,避免与此前预检或批量任务混淆。 - 同步补齐第二业务独立产出文件,继续以 team_order_create.md 作为该业务的三项适配入口。
2026-08-06 — 单团首次真实提交被安全门拦截
- 插件已按用户授权启动真实单团流程,但
SubmitInfoForm()生成的实际请求载荷与预检哈希不一致。 - 安全门在请求到达网络前拦截,ERP 没有写入、没有返回团号;失败执行编号不重试。
- 当前切换到“修正动态提交载荷校验 → 新执行编号重新预检 → 真实保存 → ERP 回查”阶段。
2026-08-06 — 单团第二次尝试定位为指纹编码异常
- 第二次真实路径仍未触达 ERP 网络;失败发生在插件提交包装器对中文保护字段做同步哈希时。
- 已修复为对 URL 编码后的规范化字段做同步指纹,并通过 JS 语法、planner 20/20、
git diff --check。 - 需要重新加载实际 Chrome 扩展后再进行第三个新执行编号的真实保存;前两个执行编号均不重试。
2026-08-06 — 单团第三次真实保存完成
- 修复后的插件重新加载并重新建立业务桥接;ERP 操作开关为 enabled。
- 第三个新执行编号通过完整路径真实保存成功,ERP 返回团号
LLW-260903A-A。 - 插件随后按团号和发团日期执行 ERP 回查,HTTP 200、命中 9 次、无登录失效/权限错误,任务状态为
completed。 - 已将 team_order_create.md 和登记表状态更新为
已真实验证,第二个业务现在具备完整独立适配包和真实证据。 - 单团最终业务回执的写入标记已修复为显式保留
write_attempted=true;仅更新源代码和后续包,不对已完成订单重复写入。
2026-08-06 — 散拼团新增计划梳理启动
- 读取当前计划、Skill、Schema、插件和历史业务适配入口,确认
shared_plan_create是现有散拼母团路由,但当前实现与用户新给出的“计划字段 + 拼单信息字段”顺序不完全一致。 - 连接登录 ERP,只读打开“散拼团计划表 → 新增计划”;确认
plan_add.asp、InfoForm1、DoInfoSPs、日期/计划人数/房型/产品/周期/拼单客户/拼单人数的真实字段。 - 已记录发现到
task_plan.md与findings.md;当前尚未修改业务契约、尚未保存 ERP,下一步先处理“老挝联泰”与“南宁国旅”两个客户语义的边界,再实现第三个业务适配包。
2026-08-06 — 散拼团新增计划输入确认
- 用户纠正示例,移除误写的
预定客户:老挝联泰;正式 operation 只处理产品遇见老挝、日期/周期、计划收客数、房型、拼单客户南宁国旅和人数15+1。 - 已解除字段歧义,进入第三业务的 contract、Skill、插件适配与真实页面预检阶段;目前仍未保存 ERP。
2026-08-06 — 散拼产品查询发现阻断
- 在真实散拼新增计划页面输入
遇见老挝并执行原生产品查询,ERP 按散拼团 + 老挝联泰 + 遇见老挝返回空候选。 - 当前没有修改代码、没有提交保存;下一步改为只读检查散拼产品目录与历史产品名称,确认业务关键词如何映射后再编写适配器。
2026-08-06 — 散拼产品类别阻断
- 只读核查确认
遇见老挝不在当前 ERP 的散拼团产品集合中;精确同名产品 ID399属于“保险银行商会”,遇见老挝(常规)ID403属于“常规团”。 - 未修改代码、未提交
DoInfoSPs,当前暂停实现和真实保存,等待产品类别/名称决策。
2026-08-06 — 散拼产品关键词改为老挝广东
- 重新验证
老挝广东,原生连续字符串搜索仍为空;空条件散拼目录可见老挝行程--广东(ID412)。 - 初步确定需要在散拼类别候选集合内按关键词分词匹配,而不是绕过类别过滤;尚未修改代码、尚未提交 ERP。
2026-08-06 — 散拼第三业务最终输入与适配完成
- 用户确认唯一匹配策略:业务侧产品/客户关键字应当唯一命中;0 个或多个候选直接提示用户,不自动选择。
- 最终案例为产品
老挝广东8D、计划容量30、房型8标1单、周期2026-09-03/2026-09-05/2026-09-30、拼单客户南宁国旅、人数15+1。 - 真实只读产品列表验证:唯一命中
老挝行程--广东 8D7N;连续 SQL 搜索为空,但插件的有序关键字匹配会在当前散拼候选集内处理此类缩写。 - 已完成
shared_plan_create的标准 Schema/validator/planner、Skill references/fixture、独立业务适配包、ERP 字段 mapping/form schema,以及inpage.js的产品/客户唯一匹配、房型、日期枚举和拼单人数适配。 - 本地回归通过:operation planner 24/24、外部 operation/client 29/29、JavaScript 语法和 JSON 解析;尚未调用
DoInfoSPs,待新扩展加载后执行真实预检、保存和团号回查。
2026-08-06 — 散拼团新增计划真实保存完成
- 真实操作中确认 Chrome 开发扩展的加载路径为
/Users/inmanx/Desktop/ltjt-order-assistant-0.4.0;已同步工作区最新散拼适配代码并重新加载扩展、刷新 ERP 与业务台。 - 处理并记录两个前置失败:原生连续搜索会清空已加载产品候选;旧桌面副本仍使用旧产品/容器适配器。两次均未取得 DoInfoSPs 成功回执,没有据此自动重试。
- 修复后最终任务
TASK-20260806074844-1IJ7ukM通过业务确认,按顺序完成日期范围、唯一产品、计划容量、房型、周期、拼单客户和拼单人数填写。 - 预检结果:产品
老挝广东8D→老挝行程--广东 8D7N(cp_id=412);客户南宁国旅→LW南宁国旅;容量30;房间总数9;人数总数16;周期命中 3 个日期;默认人员和团号设置有效。 - 真实
DoInfoSPs保存成功,ERP 返回三团:LW-260903A-A、LW-260905A-A、LW-260930A-B。 - 插件按团号逐一回查散拼计划表,三个团号均命中,状态为
completed;业务适配包与 registry 已更新为已真实验证。 - 同步修复回执提取:散拼新增计划现在返回完整
group_numbers数组与group_count,同时保留group_number首团号兼容字段。
2026-08-06 — 插件版本 0.5.0 与 newbooking Skill 完整性确认
- 按新增第三类真实 ERP 业务能力,将插件版本从
0.4.0提升到0.5.0;实际 Chrome 加载目录的 manifest、运行时 JS 和批量桥接也已同步。 lwlt-newbooking主 Skill 及 references 已覆盖独立团批量下单、独立团单个下单、散拼团新增计划三个 action;三项业务适配包和登记表状态均为已真实验证。- 重新生成
dist/ltjt-order-assistant-0.5.0.zip与无版本别名 ZIP,并将0.4.0包移入归档。
2026-08-06 — 修复批量成功后的 ERP loading 遮罩
- 定位到原生批量路线只捕获成功弹窗、未关闭 ERP loading 遮罩的问题;增加共享清理器和批量提交后的立即/延迟清理。
- 插件补丁版本升级为
0.5.1,最低兼容版本和当前发布包同步更新;0.5.0包移入归档。 - 未重新提交 ERP;验证通过:JS 语法、TypeScript、59/59 回归测试、manifest JSON、
git diff --check和 ZIP 完整性。
2026-08-06 — 修复散拼团外部解析契约偶发阻断
- 复现任务
TASK-20260806083108-BbOyzPw:失败阶段为stream_completed后的external_operation_contract_invalid,校验提示是operation.data含未声明字段;没有进入确认后的系统写入,也没有触发 ERP。 - 保持标准契约严格拒绝未知字段,同时在校验错误中显示具体字段名;向外部 Profile 的请求补充三类
lwlt-newbookingaction 的 canonical 输出边界,明确shared_plan_create.split_order的嵌套位置和禁止的别名字段。 - 新增同会话单次契约修复:首次只因 contract invalid 被拒时,把校验错误回传给外部 Profile 重新生成;第二次仍失败则阻断,不丢字段、不自动补事实、不进入插件。
- 同一最终输入真实解析复核通过:
shared_plan_create、产品老挝广东8D、计划人数30、周期日期2026-09-03/2026-09-05/2026-09-30、拼单客户南宁国旅、成人15+ 领队1,contract_repair_count=0。 - 外部解析回归 32/32、TypeScript no-emit、JS 语法、
git diff --check通过;控制平面已重启并通过/api/status健康检查。插件版本仍为0.5.1,本次不涉及 ERP 插件或 ERP 数据。
2026-08-06 — Lifecycle console presentation adjustment
- 按用户反馈取消卡片化/节点化时间线渲染,保留单一大黑框,以纯文本日志方式展示合并后的生命周期和技术详情。
- 页面缓存版本更新为
20260806-lifecycle-console-2,不改变后端事件与失败字段契约。
2026-08-06 — Browser execution blocker diagnosis and visibility
- 任务
TASK-20260806091051-e4C0sJg的 Agent SSE 已完成,标准 operation 已通过校验,用户确认后才进入插件;因此不是 Agent 未返回,也不是外部解析失败。 - 插件在
browser_execution的 ERP 写入前预检阶段停止,真实 blocker 为product lookup keyword expected exactly one candidate, found 0;数据库回执确认no_erp_write=true、write_attempted=false,没有提交 ERP,也不应按保存失败重试。 - 控制平面现在把执行回执中的
blockers、lookup_checks、执行阶段、失败码和插件/ERP边界标记写入生命周期事件;失败码规范化为plugin_executor_blocked,避免把 ERP 插件业务提示误当成 Agent 解析错误。 - 黑框日志的
browser_execution事件现在附带完整技术详情,能直接显示产品候选为空及“未写入 ERP”的证据。已通过 TypeScript、JavaScript 语法、控制平面 11/11、外部解析 32/32 和git diff --check。
2026-08-06 — ERP 实测确认散拼产品缩写查询边界
- 在用户授权的真实 Chrome 登录会话中打开散拼团计划新增弹窗,当前 Chrome 加载插件版本确认是
0.5.1。 - 新增弹窗空条件首屏返回 20 条产品;其中
cp_id=365的可见行是产品名江西老挝、天数10D9N,页面组合显示为江西老挝10D9N。 - 只读输入
江西老挝10D并触发 ERP 原生S_chanpinming的onblur=AjaxLoadData(true)后,页面候选立即变为 0 条。原生请求为Act=PrintGridList_list&S_zhuanxianlei=散拼团&S_chanpinming=江西老挝10D&fabudanwei=老挝联泰,ERP 返回的 SQL 条件只对a.chanpinming执行LIKE '%江西老挝10D%',没有匹配天数字段a.tianshu,因此返回“没有找到您要的数据”。 - 对同一空条件产品列表按插件当前规范化的连续匹配复核,
江西老挝10D唯一命中江西老挝10D9N;所以本地算法在首屏候选完整时是可用的,失败发生在进入原生搜索 fallback 后,ERP 用 0 条结果覆盖了候选表。 - 本次只读测试未点选产品、未提交
DoInfoSPs、未创建或修改 ERP 团队;结论是平台原生查询字段与“产品名+天数”业务缩写不兼容,需要调整插件的候选加载/fallback边界,而不是放宽唯一匹配安全规则。
2026-08-06 — Unified task lifecycle observability
Completed
- Added explicit failure metadata at the parser boundary and control-plane public-task boundary:
failure_stage,failure_source,failure_message,agent_returned,plugin_dispatch_started,erp_write_started,no_plugin_dispatch, andno_erp_write. - Exposed persisted task-event payloads safely and added an external Agent request timeline without changing the compatibility meaning of
external_request.stage. - Replaced the separate
流程日志and返回 JSONpanels with one chronological large black-box任务生命周期console; technical JSON is indented under the relevant event in the same plain-text log. - Updated parser/schema/UI/control-plane tests and documentation. Verification passed: parser 32/32, control-plane 11/11, TypeScript no-emit, JS syntax, JSON parse, and
git diff --check.
2026-08-06 — 产品名称/天数匹配算法与插件 0.5.2
- 根据真实 ERP 产品目录补充了 20 条产品样本,覆盖
老挝行程--广东 8D7N、江西老挝 10D9N、尊享老挝3.10 8D7N、括号/短横线和不同天数等显示形式。 - 新增
chrome-extension/ltjt-order-assistant/product-lookup.js:将候选行拆分为产品名称与天数,支持 NFKC、中文天数别名、连续匹配和有序名称/天数匹配;仍严格要求唯一命中。 - 散拼计划和独立团批量路径不再把“产品名+天数”复合缩写直接发送给 ERP
S_chanpinming。当前候选无法唯一解析时,仅用空条件重载候选,再在插件本地匹配;0 个或多个候选继续阻断。 lwlt-newbooking主 Skill、ERP 衔接、归一化规则、三个业务适配包和plan_add.mapping.json已同步该边界;新增tools/product-lookup.test.mjs。- 插件版本升级为
0.5.2,当时已重建ltjt-order-assistant-0.5.2.zip、无版本别名 ZIP 和 lwlt-newbooking.skill。 - 验证通过:产品匹配 5/5、全量 Node 回归 77/77、Skill quick validation、JS 语法、ZIP 完整性和
git diff --check;本轮 ERP 验证仍为只读,没有触发保存。 - 已在真实 Chrome 的扩展管理页重新加载工作区扩展,确认当前加载版本为
0.5.2;同时刷新 ERP 与业务台使旧扩展上下文失效状态清除。未用历史失败任务重跑,避免在未重新确认的情况下触发真实保存。 - 新版本只读回归通过:真实
plan_add.asp空条件候选 20 条,江西老挝10D唯一命中cp_id=365 / 江西老挝 10D9N,老挝广东8D唯一命中cp_id=412 / 老挝行程--广东 8D7N;前者为unique_contiguous,后者为unique_name_duration_tokens。测试后关闭新增计划弹窗,未点选、未调用DoInfoSPs。
2026-08-06 — 真实成功回执复盘启动
- 已读取用户提供的完整生命周期日志,确认
TASK-20260806095904-M7VZmvA实际完成shared_plan_create:产品江西老挝10D唯一命中cp_id=365,ERP 返回LW-260907A-B、LW-260915A-A,两条均已回查命中。 - 已将这次成功运行写入
task_plan.md与findings.md,作为产品匹配算法和“写入后逐团号回查”的真实回归证据。 - 初步根因:
control-plane/src/task-service.ts的recordExecutionResult()成功路径没有从executor_response推导生命周期边界字段,而是仅从空的executionFailure取值并默认false;下一步修正归一化并补回归测试,期间不再次写 ERP。
2026-08-06 — 生命周期边界归一化已实现
- 在
control-plane/src/task-service.ts增加executionLifecycleFacts(),把 Agent 返回、插件派发、ERP 写入、未写入和回查完成事实从执行回执统一推导。 recordExecutionResult()现在先把归一化事实写入执行结果,再用同一份事实生成task_event;成功回执不再依赖failureSummary()的空值默认成全 false。- 成功且有团号/回查证据时,
reconciliation_resolved=true;插件预检阻断仍保持no_erp_write=true、erp_write_started=false,但明确已到达插件边界。 - 新增控制平面回归测试,覆盖本次两团号成功回执和产品唯一匹配失败的写入前阻断场景。
- 复核 running 事件后补充边界:
no_erp_write=false只表示这是写入型任务,不等于已发起写入;只有write_attempted、写入阶段或回执证据出现时才置erp_write_started=true,并新增该回归测试。 - 已完成 TypeScript 生产构建;扩展
0.5.2ZIP、JavaScript 语法和git diff --check均通过。首次 Skill 完整性命令使用了不存在的文件名,已记录并按实际dist/lwlt-newbooking.skill重新检查。 - 回查证据兼容性补强:
verification.group_numbers也被视为完成证据,并用附件中的真实两团号结构覆盖测试。
2026-08-06 — 生命周期字段修正完成
- 完成
executionLifecycleFacts()归一化:成功执行结果和对应task_event使用同一组 Agent/插件/ERP/回查边界事实。 - 本次成功回执现在应显示:Agent 已返回、插件已派发、ERP 已写入、未写入为 false、回查已解决;开始执行事件不会提前标记写入已发起。
- 全量回归 80/80;TypeScript no-emit/build、JavaScript syntax、
dist/ltjt-order-assistant-0.5.2.zip、dist/lwlt-newbooking.skill完整性和git diff --check均通过。 - 本轮没有再次提交 ERP,也没有修改本次已成功生成的两条 ERP 团队记录。
2026-08-06 — 新一轮散拼计划日志复核启动
- 已读取任务
TASK-20260806101143-Zy0vgtA的完整生命周期:Agent 解析成功,产品/客户唯一匹配和保存前预检通过。 - ERP 实际
DoInfoSPs请求返回 HTTP 500 与提交超时!,未返回团号;插件正确停止并进入reconciliation_pending,未自动重试。 - 已确认本次最终执行事件中的 ERP 边界字段已正确;下一步修复解析成功的
awaiting_confirmation事件边界字段,并继续核对 500 请求与已成功请求的差异。
2026-08-06 — 解析成功事件边界修正
applyParseResult()原先只从失败对象读取边界字段;成功解析没有 failure,因此awaiting_confirmation事件错误显示agent_returned=false、no_plugin_dispatch=false、no_erp_write=false。- 新增
parseLifecycleFacts():解析成功时明确标记 Agent 已返回、插件尚未派发、ERP 尚未写入,并补充回归测试;不改变确认和插件执行流程。 - 同步明确“无 ERP 回执不能标记 completed”:更新过时的 classifier 测试断言为
reconciliation_pending,并将execution_uncertain的错误码统一为erp_result_uncertain。
2026-08-06 — HTTP 500 后实际落库证据补充
- 用户截图确认本次异常请求实际生成
LW-260907A-B;原插件只从成功响应解析团号,响应为 500 时没有候选团号可回查,因此误把“已落库但无回执”保持为待回查。 - 后续修复方向调整为只读 reconciliation fallback:利用本次已保存的日期、产品、客户、人数/房型条件扫描 ERP 列表,确认已有记录后补齐团号回执;不自动重提。
2026-08-06 — 全量任务彻底删除启动
- 用户确认所有任务卡片均可彻底删除,包括已进入 ERP、已完成和待回查任务。
- 已完成只读审计:现有 UI 安全规则会置灰部分卡片;现有后端只有取消接口,不会物理删除任务。
- 下一步先读取任务表及关联表结构,确定事务内的硬删除顺序;不修改 ERP 数据。
2026-08-06 — 任务成功回执与错误摘要时间戳启动
- 用户确认新增固定
success_receipt/error_summaryAPI 字段,并保留完整events。 - 用户确认成功回执必须有可验证 ERP 证据;无证据的
completed结果保持待回查。 - 用户确认每次错误追加事件,
error_summary展示最近一次错误;时间戳由服务端生成。 - 已发现当前任务表没有成功/错误专用时间字段;现有成功回执在
execution_result内,错误摘要由failureSummary()派生。 - 审计确认:迁移编号使用
006_task_outcomes.sql;hasCompletionEvidence()可作为成功门槛,需让无证据的completed转为待回查;前端现有生命周期面板可承载独立终态摘要。
2026-08-06 — 任务成功回执与错误摘要时间戳完成
- 新增
control-plane/migrations/006_task_outcomes.sql:任务表持久化success_receipt、success_receipt_at、error_summary、error_summary_at。 - 控制面返回固定
success_receipt/error_summary字段;成功回执只接受可验证 ERP 证据,无证据的completed转为reconciliation_pending。 - 解析失败、解析租约过期、插件执行失败/不确定和人工回查状态都会在事务中更新最近错误摘要;事件流继续追加每次错误。
- 业务系统新增“终态摘要”面板,显示成功回执或最近错误的服务端时间、团号/订单号、阶段和原因。
- 文档与测试已同步。验证结果:TypeScript no-emit 通过,控制面 19/19,旧回归 57/57,前端/插件 JavaScript 语法检查通过,
git diff --check通过;未执行数据库迁移,未进行 ERP 写入。 - 关联审计完成:主任务级联清理事件、attempt、幂等键和 Agent 会话;审计/outbox 需显式按组织与任务文本 ID清理。
- 当前进入控制平面硬删除 API 实现阶段。
- 控制平面已实现
DELETE /api/tasks/:taskId,删除审计/outbox 任务关联后物理删除任务主记录;服务端保留旧取消接口供兼容调用。 - 前端已取消状态置灰逻辑,卡片和详情按钮均可触发硬删除;插件本地清理改为尽力执行,ERP 写入边界不再阻断平台删除。
- 首次控制平面回归仅因静态断言仍期待旧缓存版本失败;已记录并同步测试断言到本轮
task-card-delete-1版本,同时增加硬删除路由/SQL/桥接覆盖。 - 补充独立的
LTJT_HARD_DELETE_TASK插件消息,避免旧取消分支在 ERP 写入边界后把不确定结果重新写回扩展存储。 - 修正现有
PublicTask返回包装器缺失的success_receipt/error_summary字段,使正式 TypeScript 检查恢复通过;未改变删除语义。 - 全量验证完成:TypeScript 通过,控制平面 15/15,业务/插件回归 57/57,前端/插件语法检查通过,
git diff --check通过。 - 本轮完成:所有任务卡可发起硬删除;控制平面物理删除任务与 task-scoped 关联,插件强制删除消息阻止后续本地结果回写;不执行真实数据库删除测试,也不修改 ERP。
2026-08-06 — 任务卡片固定布局与错误日志归位启动
- 已完成 UI 审计:长失败文案来自
#taskState,卡片内仍有第二个删除按钮,窄屏规则通过overflow-x: auto允许横向滑动。 - 用户要求已转为实现约束:状态区显示短状态;完整错误摘要进入下方生命周期日志;删除只保留任务状态详情面板;卡片缩小且不横向滚动。
- 本轮不修改上一轮彻底删除 API、数据库语义或 ERP 行为。
2026-08-06 — HTTP 500 后散拼计划回查兜底实现
- 用户截图确认本次 ERP 实际生成
LW-260907A-B;授权的只读查询进一步确认2026-09-07命中,2026-09-15与2026-09-26未命中,因此本次是部分落库,不是完整成功。 - 新增
split-plan-reconciliation.js纯匹配模块:按产品/日期/计划收客数/拼单人数匹配列表行;客户名仅作消歧条件,匹配不唯一则保持待回查。 createSplitParentLive()在写入已发起且 ERP 响应无团号时,逐日期执行只读列表回查;回查确认的团号会进入erp_receipt,并保留receipt_source=post_write_list_fallback。- 全量确认时返回完成并给出只读回查 warning;部分或零确认时返回不确定状态与缺失/歧义日期,禁止自动重提。
- 插件版本已升至
0.5.3,已完成生产构建并生成dist/ltjt-order-assistant-0.5.3.zip,同步刷新dist/ltjt-order-assistant.zip。 - 最终回归:控制平面 19/19、业务与插件 69/69、TypeScript no-emit/build、JavaScript syntax、插件 ZIP、
dist/lwlt-newbooking.skill和git diff --check均通过。 - 全量回归中发现一处 UI 静态断言仍查找旧“错误摘要”文案,已同步为当前“错误详情已记录在下方任务生命周期日志”,页面行为未改。
2026-08-06 — “暂无成功回执”根因确认
- 读取任务
TASK-20260806103834-yBRZWMY:Agent 解析成功,插件已发起 ERP 保存,ERP 返回 500;保存后只读回查确认LW-260907A-B,但 09-15/09-26 未确认。 - 执行结果中已有
erp_receipt.receipt_source=post_write_list_fallback,但最终状态是execution_uncertain/reconciliation_pending,所以没有写入固定字段success_receipt。 - 前端
renderTaskOutcomeSummary()只读取task.success_receipt,不存在时显示“暂无成功回执”,没有把result.erp_receipt作为“部分回执”展示;这是本次界面提示过于绝对的直接原因。 - 日志仍显示旧的
task_failed和错误解析边界字段。当前运行的控制平面进程 17:18 启动,源码/构建在 18:27/18:28 更新,需重启服务后再验证新日志。
2026-08-06 — 散拼三日期只成功一单的原因核对
- 预检确认用户输入中的 09-07、09-15、09-26 均已解析并勾选,保存请求也序列化了三个
zhidingzhouqi值。 - 已授权在真实 ERP 中只读查询 09-15、09-26:两天均无任何团队记录;因此不是插件回查算法漏匹配,也不是三单其实都已生成。
- ERP 对一次三日期
DoInfoSPs请求返回通用 HTTP 500;第一日期已提交,后续日期没有提交成功。客户端无法从 IIS 500 页面判断具体是产品、客户、占床人数、日期业务规则还是数据库约束。 - 历史同一接口已成功创建过 2/3 单,说明多日期提交能力本身可用;本次需 ERP 端按提交时间和执行请求排查服务端日志,不能仅靠客户端推断。
2026-08-06 — 任务卡片固定布局与错误日志归位完成
- 删除入口已收敛到任务状态详情面板;卡片内不再渲染删除按钮,卡片点击只负责切换当前任务。
- 任务状态区与卡片改为短状态标签(如“失败”“待回查”);完整失败阶段/原因补入下方生命周期日志,不再在终态摘要区重复显示错误卡片。
- 任务卡片缩小内边距、间距、标题和状态胶囊;三栏列宽使用
minmax(0, …),窄屏改为纵向布局并禁止横向滚动。 node --check、TypeScript no-emit、控制平面 19/19、业务/插件回归 57/57 和git diff --check均通过。- 实时页面仅验证到管理员登录页;未使用凭据绕过登录、未删除真实任务、未修改 ERP。
2026-08-06 — 删除按钮无响应修复完成
- 根因是删除流程先等待插件
DELETE_TASK,以及失败后状态反馈被重渲染覆盖。 - 现在点击确认后立即调用平台
DELETE /api/tasks/:taskId;插件清理改为异步尽力执行,不再因插件/ERP 状态阻塞。 - 删除按钮增加“删除中…”和失败后的“重试删除”反馈;前端资源缓存版本更新为
20260806-task-delete-responsive-1。 - TypeScript no-emit、控制平面 19/19、业务/插件回归 57/57、JavaScript 语法和
git diff --check均通过。
2026-08-06 — 删除接口运行态恢复完成
- 在当前登录页面确认删除按钮已执行,但服务返回 404;服务日志对应为 DELETE 路由不存在。
- 确认 8786 上运行的是 17:18 启动、尚未加载新增路由的旧控制平面实例。
- 已安全终止旧实例;原有守护程序自动启动 PID 29585 的新实例并加载最新源码。
- 验证
/health/live为 200;对不存在的虚拟任务发起未认证删除探针得到 401,确认路由已生效且未删除任何真实数据。
2026-08-06 — 删除状态串项修复完成
- 核对运行日志:用户点击对应的三次任务删除均已成功返回 200。
- 修复共用详情按钮跨任务保留“删除中…”文案的问题;状态现按任务 ID 隔离,其他任务保持“删除任务”。
- 删除失败的“重试删除”同样只属于失败的任务;同一任务处理期间会阻止重复提交。
- 前端缓存版本更新;JavaScript 语法、TypeScript no-emit、控制平面 19/19、业务回归 57/57 和
git diff --check均通过。
2026-08-06 — 散拼周期双通道统一启动
- 用户确认散拼团新增计划与独立团批量下单使用同一组 ERP 周期字段,要求实现保持一致并继续排查本次部分落库。
- 对照发现:独立团批量已按显式日期/快捷周期分别操作
zhidingzhouqi/zhouqi;散拼当前只勾选显式日期,文档与运行代码存在偏差。 - 另确认散拼本地
odd_days/even_days展开误用了星期序号;本轮统一到 ERP 快捷标签后修正该语义。 - 本轮不会再次提交 ERP,继续使用已有 HTTP 500、三日期 POST 和按日只读查询证据。
2026-08-06 — 散拼周期双通道统一验证
- 已抽取共享
cycleSelectionPlan()/expandCycleDates(),独立团批量与散拼新增计划使用同一套显式日期和快捷周期判定。 - 散拼页面适配器已同时清理并选择
zhidingzhouqi/zhouqi,预检新增cycle_mode和cycle_shortcut_values,便于日志明确记录实际使用的 ERP 通道。 - 已修正单双日按星期序号展开的问题;新增测试覆盖显式日期、星期快捷、日历单双日。
- 插件与业务系统最低版本同步为
0.5.4。聚焦周期测试 6/6、全量业务/插件测试 71/71、控制平面 19/19、TypeScript no-emit、插件脚本语法和git diff --check均通过。 - 未重新保存失败任务;已有证据仍指向 ERP 服务端批处理部分落库后 500,需要 ERP 端日志才能把根因缩小到具体字段或 SQL。
- 首次打包命令因临时目录清理动作被安全策略预执行拒绝;代码构建未报错、目标包也未被写入,后续改用明确版本文件直接打包。
0.5.4正式包已生成并通过unzip -t,manifest 版本正确;通用包已同步且 SHA-256 完全一致,dist/lwlt-newbooking.skill完整性检查通过。
2026-08-06 — 控制平面持久化修复启动
- 用户确认整体修复,并明确“不用重新解析之前的了”。
- 修复目标:应用远程缺失的
006_task_outcomes迁移、补上部署防回归门禁、重启控制平面并验证运行态;不触发插件或 ERP。 - 基线已确认:任务
TASK-20260806111446-V5d0hnc仍为parse_running,解析 attempt 仍为running;远程tasks表缺少任务结果时间戳字段,日志已有error_42703写回失败记录。 - 首次使用
npm验证失败,因为当前 shell 没有 npm 命令;已确认项目依赖和 bundled Node 存在,后续改用同一 bundled Node 直接运行检查与测试。
2026-08-06 — 控制平面持久化修复完成
- 本地修改:
control-plane/src/db.ts增加必需 schema 版本检查和启动断言;server.ts的 ready health 返回 schema 状态;package.json的 dev/start 先执行迁移;根 README 与控制面 README 补充发布顺序和门禁说明;控制面测试新增迁移门禁断言。 - 远程修改:运行迁移脚本仅应用
006_task_outcomes,未修改任务业务数据。 - 运行态:构建成功;重启后唯一监听
127.0.0.1:8786的实例为 PID32880;/health/ready返回 200 且database=true/schema=true;AI/api/status仍为 configured/reachable/authenticated。 - 旧任务边界:
TASK-20260806111446-V5d0hnc在迁移前已由页面 DELETE 200 删除;没有重新解析、确认、插件接管或 ERP 写入。 - 验证:TypeScript no-emit 通过,控制面测试 20/20,既有业务/外部解析测试 57/57,构建和
git diff --check通过。 - 额外防回归:
app.listen()失败时主动关闭 Fastify,清理 parser queue interval;已重新构建、重启并验证 health。
2026-08-10 — 散拼创建契约与 ERP 写入边界已修复
- 标准 Schema 已移除
shared_plan_create的split_order必填项,并拒绝customer、passenger_counts、split_order。 - 外部 Agent 提示与校验已改为只接受产品、日期/周期、计划收客数和房型;旧的平铺字段不再自动归一化,直接阻断。
- 插件
createSplitParentLive()已取消客户 lookup、SetVal、人数填写和GetVisitorsHtml();提交观测字段也不再包含客户/人数,回查只使用产品、日期和计划收客数,候选不唯一继续阻断。 plan_add映射、表单字段说明、Skill、业务适配包和运行范围文档已同步;当前仍需完成测试、构建和发布包验证。
2026-08-10 — AgentBus 接入启动
- 用户确认渠道 Adapter 由 AgentBus 负责,本服务只对接 AgentBus;用户确认继续沿用现有管理员确认门禁。
- 已通读 AgentBus Bot onboarding 文档,并核对现有控制平面任务、会话、解析队列和终态结构。
- 已确认本轮只实现消息传输与现有任务链桥接,不自动确认任务、不调用 Chrome 插件、不写入 ERP。
- 已完成传输设计和工作树审计;首次规划文件追加因上下文不匹配失败,随后已按实际文件尾部重新定位,源代码仍未改动。
- 已添加 AgentBus 配置解析、组织 UUID 只读查询、WebSocket listener、重连、session.ready、进度/最终结果回传和控制平面状态暴露。
- 已添加 AgentBus 协议、配置边界和任务回传测试;控制平面测试 23/23、既有业务/外部解析回归 57/57、TypeScript no-emit 与构建均通过。
- 已更新根 README、控制平面 README、两个环境示例和 npm package/package-lock;没有写入实际 Token。
- 安装依赖时 pnpm 曾移动仓库已跟踪的 node_modules,已在确认其安装前无用户改动后恢复;最终 node_modules 工作树无变更。
- 已用 onboarding 文档参数完成一次真实短连接握手,收到 session.ready(epoch 1、目标 Bot 地址正确)后立即关闭;未发送业务任务。
- 本轮没有重新解析历史任务、自动确认任务、调用 Chrome 插件或向 ERP 写入。
2026-08-10 — 散拼创建契约修复启动
- 用户已明确确认:开始执行整体修复,散拼团新增计划创建时不得传客户名称和人数。
- 已完成首轮影响面审计,确认涉及标准 Schema、外部 Agent 提示/校验与 legacy normalize、插件
createSplitParentLive()、plan_add映射、Skill/业务适配文档及对应测试。 - 当前阶段仍未修改业务代码、未重新解析旧任务、未调用插件或 ERP;下一步先修正创建契约和浏览器写入边界。
2026-08-10 — 散拼创建契约修复完成
- 标准 Schema、外部 Agent prompt/validator、浏览器 operation validator 和
normalizeOperation已统一为:shared_plan_create不接受customer、passenger_counts、split_order。 createSplitParentLive()已移除客户 lookup、客户 SetVal、人数写入和GetVisitorsHtml();失败回查不再依赖拼团信息,改为产品/日期/计划收客数匹配,歧义时保持阻断。- Skill、业务适配包、归一化规则、ERP handoff、输出契约、
plan_add映射、表单说明、运行范围和插件 README 已同步;插件与业务系统最低版本升至0.5.5。 - 验证完成:控制平面 20/20,业务/插件 72/72,TypeScript no-emit/build、JavaScript syntax、Schema/JSON、ZIP
unzip -t、SHA-256 和git diff --check均通过。 - 安全边界保持不变:未重新解析历史任务,未迁移旧任务,未调用 Chrome 插件或 ERP。
2026-08-10 — 任务来源标签已完成
- 任务表新增
source字段,迁移007_task_source.sql将值限制为manual/agentbus,历史行默认manual。 - 人工 HTTP 创建/消息入口和 AgentBus 消息入口分别携带明确来源;恢复已有等待补充任务时不覆盖原来源。
- 任务卡片标题行新增小标签:AgentBus 使用蓝色样式,人工输入使用中性样式;旧 API 数据缺少字段时也会显示人工输入。
- 更新了静态资源缓存版本,并同步了控制平面、AgentBus、UI 断言和构建产物。
- 验证完成:TypeScript no-emit、控制平面 26/26、前端语法检查、构建和
git diff --check均通过。 - 部署时仍需按现有发布流程执行
npm run db:migrate,使线上数据库应用007_task_source;本轮未操作远程数据库。
2026-08-10 — awaiting_user_input 会话续接修复启动
- 用户确认:普通输入默认创建新任务;只有任务处于
awaiting_user_input时才续接原任务/会话;左侧输入继续作为新任务入口;右侧当前任务详情提供补充输入框。 - 已确认后端状态门禁和
/api/messages已存在,当前主要缺口是 AgentBus 缺少稳定会话键时无法匹配等待补充任务,以及操作台没有可见的人工补充入口。 - 本轮尚未修改业务代码;不重新解析历史任务,不自动确认,不调用 Chrome 插件或 ERP。
2026-08-10 — awaiting_user_input 会话续接修复完成
- AgentBus 入站消息现在优先使用显式
conversation_id;缺少时稳定回退到agentbus:<from>,因此同一渠道发送方的后续消息可以命中原任务会话。 - 续接仍由
TaskService.ingestMessage()的awaiting_user_input状态门禁控制:非等待任务不会被普通消息续接;没有等待任务时仍创建新任务/新会话;多个等待任务仍安全返回选择错误。 - 操作台右侧当前任务详情新增“补充信息”面板,仅精确匹配
awaiting_user_input时显示;提交携带task_id和 CSRF 保护的/api/messages请求,左侧输入区保持新任务语义。 - 补充草稿仅保留在当前页面内存中,异步刷新不会覆盖用户正在输入的内容;提交成功后清除草稿并刷新任务状态。
- 验证通过:AgentBus 5/5、控制平面全套 26/26、既有业务/外部解析 57/57、TypeScript no-emit/build、前端 JavaScript 语法和
git diff --check。 - 只读检查确认数据库仅有取消/待回查历史任务,没有排队或运行中的解析任务;随后应用既有
007_task_source迁移并重启 8786 服务,未重新解析历史任务。 - 运行态验证通过:
/health/ready返回 schema007_task_source,AgentBusenabled=true/connected=true/session_ready=true,页面资源已加载20260810-awaiting-input-1;没有自动确认任务、调用 Chrome 插件或写入 ERP。
2026-08-10 — AgentBus 全链路日志启动
- 当前运行态已确认 WebSocket/session.ready 正常,但数据库没有新的
agentbus任务;问题发生在入站帧到任务入队之前。 - 已确定日志范围:连接生命周期、握手、每个入站/出站帧、忽略原因、任务入队、解析队列、终态等待、重连和异常。
- 已确定安全边界:默认不打印正文;本地调试通过专用配置开启截断正文,任何 Token/Authorization 永不打印。
- 尚未修改业务代码;下一步实现 listener 日志和配置测试。
2026-08-10 — AgentBus 全链路日志已完成
AgentBusListener已输出连接尝试、socket open/error/close、重连、每个收帧、session.ready、帧忽略原因、重复帧、任务入队、解析队列、任务终态等待、进度/最终结果收发和错误。- 所有日志带
agentbus_event;消息正文默认脱敏,只记录长度/摘要,AGENTBUS_LOG_PAYLOADS=true时本地记录最多 2,000 字符预览。 - 已更新
config.ts、两个环境示例、受保护的本地.env和控制平面 README;没有打印任何 Token 或 Authorization。 - 已重启 8786 控制平面为 PID
93767,运行态出现listener_starting、connect_attempt、socket_open、frame_received、session_ready日志,健康状态为 connected/session_ready。 - 验证完成:TypeScript no-emit、AgentBus 5/5、控制平面 26/26、前端语法检查、构建和
git diff --check。
2026-08-10 — 散拼创建选填字段能力矩阵修正完成
- 用户确认 ERP 插件应按字段能力过滤:母团必填字段缺失才阻断;客户名称、人数等 ERP 选填字段,用户给出就分别写入,未给出则不主动修改。
- 恢复
data.split_order的可选结构,并允许customer、passenger_counts独立出现;旧平铺字段归一到 canonical 结构,冲突值阻断。 operation-plans.js、LianSyn-platform/external-agent-client.mjs、标准 Schema 和inpage.js已同步;母团 adapter 条件调用客户 lookup/隐藏字段映射和GetVisitorsHtml()。- 更新
plan_add.mapping.json、表单说明、Skill/业务适配包/fixture、system scope、插件 README;版本升至0.5.6,业务系统最低兼容版本同步升至0.5.6。 - 验证通过:业务/插件/外部解析 76/76,控制平面 27/27,TypeScript no-emit、JS syntax、Schema/JSON、
git diff --check;插件 ZIP 和 Skill 包unzip -t通过。 - 未重新解析历史任务,未迁移旧任务,未调用 Chrome 插件或 ERP。
Errors encountered
- 首次 Skill 打包从仓库根目录执行,
references/*.mdglob 无匹配而失败;随后切换到 Skill 目录重新打包成功,未造成源码或 ERP 状态变化。
2026-08-10 - UI visual optimization started
- 用户确认按
taste-skill进行 targeted evolution:保留现有功能、Logo、三列流程、字段/事件和状态契约,只优化视觉与交互层。 - 已读取
taste-skill、grilling、planning-with-files和agent-browser;本轮不使用营销页组件模式,按业务操作台约束执行。 - 已完成只读审计并记录到
findings.md;随后完成LianSyn-platform/styles.css视觉令牌/组件层优化、静态资源缓存版本更新和状态详情占位文案清理。 - 桌面回归覆盖登录态、三列工作台、待确认、已完成回执、失败任务和状态详情弹层;窄屏回归覆盖 390px 宽度,修复了输入面板按钮被任务列表覆盖的问题。
- 本地控制平面因数据库
EHOSTUNREACH无法启动,视觉回归改用 18786 静态文件服务和浏览器内存 fixture;未写入数据库、未创建任务、未调用插件或 ERP。 - 最终验证:控制平面 27/27,业务/外部解析 61/61,TypeScript no-emit、Node 语法检查、
git diff --check和浏览器 errors/console 均通过。
2026-08-10 — 订单生命周期深度调研启动
- 已取得用户确认,开始按 LTJT 订单生命周期调研运营梳理 10—21 全部板块。
- 调研顺序固定为:下单基线 → 名单导入/补充 → 团队安排 → 修改/取消 → 确认件及文件导出。
- 已初始化当前任务的阶段计划;第一阶段先统一已有下单成功证据和公共订单标识,再进入名单与安排页面只读勘察。
- 已确认本机存在
agent-browserCLI(/opt/homebrew/bin/agent-browser);后续优先尝试复用授权登录会话,无法连接时改用现有 CDP/静态证据,不绕过登录或权限。 - 本轮尚未调用 ERP、插件或真实保存;尚未修改业务代码。
- 首次实时会话尝试失败:
127.0.0.1:9223的 CDP 端口当前拒绝连接;未重复尝试,转向现有静态/历史 ERP 证据与源码页面映射。
2026-08-10 — 生命周期第一轮静态页面映射完成
- 已阅读归档 API inventory、当前 findings、订单表单 Schema、当前插件路由和现有 Skill 边界。
- 已确认生命周期公共骨架:订单/计划主表 → 订单详情/名单 → 团队安排子页面 → 编辑/取消分支 → 确认件/文件导出。
- 已确认团队安排的静态页面入口:
teams_daoyou.asp、teams_cheliang.asp、teams_jiudian.asp、teams_piao.asp、teams_qita.asp;列表主请求为/System/dat/team.asp,酒店用房总表的精确写入 action 仍待实时捕获。 - 已确认跨阶段需要保留的引用至少包括
group_no、ddid、tid、tdid、child_order_no;不能只用产品名或日期定位后续操作。 - 本阶段尚未拿到新的实时登录快照或请求录制;没有调用写入 action。
2026-08-10 — 历史生命周期探针复核完成
- 已复核历史名单导入、订单修改、散拼子单和确认件下载探针,提取当前需要重新验证的页面路径、控件候选和跨阶段引用。
- 名单候选链路为订单详情/编辑页 →
daoru.asp对话框 →DaoruText→ 确定导入 → 游客行数/已填行数回查;旧探针的电话字段偏移被记录为高风险,不迁移旧固定下标实现。 - 修改候选链路为
orders_add.asp/plan_order.asp编辑 iframe → 读取当前快照 → 窄范围字段写入 → 页面保存 → 列表/父团回查;当前只读边界保持不变。 - 导出候选链路为订单详情 iframe 的联泰/星游/JOB 三类源链接;源文件历史上为
.doc,DOCX/PDF 转换与客户交付仍需单独定义。
2026-08-10 — 安排/修改/导出静态契约复核完成
- 已补齐安排总入口、五个资源子页、独立/散拼主表取消 action、当前三类确认源及历史状态漂移证据。
- 仍未把安排或修改写入能力标为已完成:子页保存 action、状态联动、取消副作用和文件交付都缺实时授权会话证据。
- 当前继续沿生命周期向“实时页面/请求录制与字段契约”推进;若会话不可用,则保留静态结论和明确的 live revalidation 缺口,不用猜测补齐。
2026-08-10 — 当前会话复核结果
lwlt-research会话没有返回可用页面快照;本轮未获得实时 ERP 授权态,也未触发任何 ERP 写入。- 继续使用静态页面映射、现有插件实现和历史探针建立生命周期契约;实时验证只保留为下一次登录会话的明确采集任务。
2026-08-10 — Skill 边界核对完成
- 已核对当前
lwlt-arrangement、lwlt-updating、lwlt-confirmation与业务适配登记表,确认安排/修改是“识别后阻断”,确认件是已有订单的只读源导出。 - 发现散拼团登记状态仍滞后于用户确认的成功事实;先记录为文档同步项,待生命周期矩阵和证据汇总完成后统一修订,避免只改一处造成状态漂移。
2026-08-10 — 业务包覆盖范围盘点完成
- 已确认当前正式适配包尚未覆盖名单导入、取消、安排四类资源和修改;这些是接下来 ERP 深度调研的实际待建对象。
- 下一步将按“单个模块的页面/字段/写入/回查”建立可执行契约,不直接把识别注册误当成执行支持。
2026-08-10 — 标准 operation 现状盘点完成
- 已确认中段业务目前只有兼容 action,没有取消和安排的正式 action;名单导入与修改仍是预览/阻断边界。
- 已记录一次结果 Schema 路径读取错误,后续交付研究文档时不依赖该不存在路径。
2026-08-10 — 历史字段边界补充完成
- 已区分订单详情中的航班/酒店/接送机补充字段与团队安排资源子页,避免将旧订单表单 writer 误当作安排模块适配器。
- 已再次确认游客字段必须按当前页面行结构验证,不能复用历史固定下标。
2026-08-10 — 本机 Chrome 端口复核
- 发现普通 Chrome 的
127.0.0.1:9222监听端口;agent-browser连接/快照读取仍未返回可用页面内容,未取得 ERP 授权快照,也未发生 ERP 写入。
2026-08-10 — 9222 端口响应结论
- 9222 的
/json/version返回 404 空响应,不是可用 DevTools 端点;本轮没有可复用的实时 ERP 页面。
2026-08-10 — 生命周期研究文档完成
- 已新增
ltjt_order_lifecycle_research.md,覆盖第 10–21 项、生命周期顺序、证据等级、跨阶段引用、模块矩阵、ERP 兼容契约、实时采集表和后续 Skill 拆分建议。 - 研究文档明确区分了已真实回查的下单能力、当前只读导出能力,以及名单/安排/修改/取消/文件交付的实时验证缺口。
2026-08-10 — 实时团队安排与导游页采集完成
- 已取得当前登录 ERP 的团队安排总表和导游安排页快照;确认总表有资源状态筛选/回查、五类独立安排入口,导游页有真实字段和保存按钮。
- 已确认本轮仅读取页面,没有触发提交保存;名单导出链接也只记录了类型和路径模式,没有下载或交付文件。
2026-08-10 — 实时酒店安排页采集完成
- 已读取酒店安排表的字段、状态、备用行、费用合计和提交按钮;确认酒店安排是多行资源记录,而非订单详情中的住宿备注。
- 本轮仍只读,未修改酒店行、未点击提交保存。
2026-08-10 — 实时车辆安排页采集完成
- 已读取车辆安排表的字段、必填标识、状态、空白备用行、费用合计和提交按钮;确认车辆安排与酒店一样是多行资源记录。
- 本轮未修改车辆行、未点击提交保存。
2026-08-10 — 实时大交通安排页采集完成
- 已读取大交通/车票安排表的字段、必填标识、已有多条记录、状态、费用合计和提交按钮;确认它是团队资源安排记录,不是单纯控位表。
- 本轮未修改车票行、未点击提交保存。
2026-08-10 — 实时其他/备案安排页采集完成
- 已读取其他/备案页的字段、必填标识、已有费用行、备案附加信息、合计和落实控件;确认其他与备案在当前 ERP 中共享安排页。
- 本轮未修改其他费用或备案字段、未点击提交保存。
2026-08-10 — 备案附加字段采集完成
- 已补齐备案号、备案日期、出入境口岸、备案导游/司机证件字段、备案表导出链接、落实复选框和独立保存按钮。
- 已确认“其他费用安排”和“备案资料”在同一窗口内但属于两层对象,后续适配不能只做一套自由文本字段。
2026-08-10 — 实时团队详情与导出/修改入口采集完成
- 已读取团队详情的团队级导出入口、子单导出矩阵、发送状态、修改团队信息入口和操作日志事件。
- 已确认当前 ERP 实际文件类型至少比插件现有三类 source export 多,后续需扩展“确认件/业务文件”契约,但仍保持只读和不重存边界。
2026-08-10 — 实时计划修改页字段快照完成
- 已读取“修改发团计划”真实页面的计划级字段、状态选项、行程编辑区、文件上传区、应收/应付入口和提交按钮。
- 已确认页面提供“已取消”状态控件,但未提交任何状态变更;取消 action、应收/安排联动和回查仍待后续在明确测试对象上验证。
- 已确认团队详情的子单入口在“订单信息(双击修改订单)”表格中,但本轮双击未能稳定打开子单窗口;因此继续把子单修改和名单导入列为未形成写入契约的缺口。
- 本轮仍只读,未输入、上传、保存或取消任何 ERP 数据。
2026-08-10 — 实时散拼子单修改与名单导入入口完成
- 已通过订单表双击进入真实“新增/修改订单信息”子单窗口,区分出计划级修改与散拼子单级修改两条页面路线。
- 已读取子单核心订单、状态、人数、备案、航班、接送机、应收团款、游客明细、删除订单和提交保存控件。
- 已打开名单导入对话框,确认其为 Word/Excel 逐行粘贴文本区 + “取消导入/确定导入”按钮的模式;没有输入或确认任何名单。
- 已确认取消状态与“删除订单”分别呈现,后续只需在明确测试对象上验证语义和联动,不把二者合并。
2026-08-10 — 实时独立团修改与名单入口对照完成
- 已读取独立团计划表的状态筛选、检索、批量取消及单条修改/删除/查账入口。
- 已打开独立团修改窗口,确认计划级字段、应收团款、航班/接送机、行程、游客表和提交保存结构。
- 已确认独立团名单导入对话框与散拼子单一致,仍为 Word/Excel 逐行粘贴文本 + 取消/确定导入。
- 本轮未点击批量取消、删除、提交保存或名单确定导入。
- 未勾选团队直接打开“批量取消”仅得到“请选择要操作的团队!”提示,未触发取消请求;已记录选择前置条件。
- 已记录独立团与散拼子单状态控件的 value/组合文案差异,后续需按页面路线读取 checked 状态,不能共用数字枚举。
2026-08-10 — 酒店安排原生保存请求只读拦截完成
- 已从团队安排总表打开酒店子页,确认
InfoForm1→POST /System/DAT/team.asp?Act=DoInfo_jiudian,页面原生提交格式为Act=DoInfo_jiudian&InfoForm1.serialize(),响应类型为 script。 - 已在不改变表单值的前提下调用原生
SubmitInfoForm()并拦截网络,捕获唯一保存分支:206 个序列化字段、202 个唯一字段、7 行酒店资源记录,网络发送为 0。 - 已记录酒店行字段族、主团/子单引用、供应商选项联动
ProDanweiZCxm、价格联动set_price、状态枚举已确认/未确认及总表/子页双重回查入口。 - 本轮未点击真实提交网络、未修改酒店值、未生成 ERP 保存回执;当前仍属于可执行适配前的请求契约证据。
2026-08-10 — 车辆安排原生保存请求只读拦截完成
- 已确认车辆子页
InfoForm1的原生保存 action 为DoInfo_cheliang,请求为POST /System/DAT/team.asp+ script 响应。 - 已在不改值的情况下捕获唯一原生保存分支:147 个序列化字段、143 个唯一字段、5 行车辆资源记录,网络发送为 0。
- 已记录车辆供应商联动
ProDanweiZCxm&leibie=2、set_price价格联动、状态/数量选项及总表/子页双重回查入口。 - 本轮未触发真实保存、未修改车辆字段、未获得服务端回执。
2026-08-10 — 大交通安排原生保存请求只读拦截完成
- 已确认
teams_piao.asp原生保存为POST /System/DAT/team.asp、Act=DoInfo_piao,响应类型为 script。 - 已在不修改表单值的情况下调用原生
SubmitInfoForm()并拦截网络,捕获 296 个序列化字段、292 个唯一字段和 13 行票务资源,网络发送为 0。 - 已记录
ProDanweiZCxm(leibie=5)、票务set_price联动、状态值(已确认/未确认/自损/取消/出票)及总表/子页双重回查入口。 - 载荷仅记录 6847 字节和 SHA-256 摘要
5f40d6b3231675a4ae7b0c1e62572e4eebb9d517d446ffa96d34d19f5a48c0c4,未记录客户或票务原值。 - 本轮未触发真实保存,未获得服务端回执或写后回查结果。
2026-08-10 — 修改/取消分支原生请求只读采集完成
- 独立团修改已捕获
POST /System/DAT/orders.asp、Act=DoInfoJH:821 个序列化字段、821 个唯一字段,核心引用含ddid/tdid/session_id,载荷摘要 13743 字节。 - 散拼母团计划修改已捕获
POST /System/DAT/plan.asp、Act=DoInfoSP:642 个序列化字段、642 个唯一字段,含tdid/session_id和 15 天行程字段,载荷摘要 29043 字节。 - 散拼子单修改已捕获
POST /System/DAT/plan.asp、Act=DoInfo_order:495 个序列化字段、159 个唯一字段,含tdid/oldtdid/ddid/session_id,载荷摘要 11674 字节。 - 三条修改请求均只读拦截,未修改字段、未发送网络、未获得服务端响应或回查。
- 独立团取消/恢复已捕获
JH_set_quxiao的cz=1/0;独立团删除DelRecord与散拼删除Del_order也已捕获确认与请求形状,均未发送网络。 - 已明确取消状态、批量取消、恢复和删除必须分成不同 operation,继续保持真实写入阻断。
2026-08-10 — 最终确认件与业务文件源响应只读采集完成
- 已以内存
fetch读取当前团队详情的 9 类导出源,并记录路径模式、query key、HTTP 状态、content-type、Content-Disposition 存在性、长度、内容特征和哈希;未下载落盘、转换、发送或回写 ERP。 - Word 兼容源:联泰/星游确认单、导游确认单、当前备案表、历史并列备案表、接机牌;Excel 兼容源:游客名单(实际内容为 HTML 表格);HTML 源:酒店预订单和大交通预订单。
- 已确认当前
teams_beian.asp与历史teams_beian1.asp是两个不同响应源;接机牌 query 依赖游客姓名,后续必须从已定位游客行生成。 - 当前只完成源读取,文件转换/落盘/发送状态模型仍待后续设计,
confirmation_export继续保持 source-only 边界。
2026-08-10 — 删除闸门与逐操作证据表补强
- 删除契约现在同时要求
TEST-202609、allowlist、测试账号、当前 run_id、目标引用精确命中created_refs,并在浏览器适配器再次校验;不满足任一条件即不调用原生删除函数。 - 新增
agent设计规范/test-fixtures/lwlt-lifecycle/evidence-register.template.md,覆盖四条下单路线、名单、五类安排、三类修改、取消/恢复、十类源导出和三类删除对象的逐操作记录位。 - 新增
risk-register.md,集中登记 9 月前未验证项、适配假设、人工复核触发条件和 Node 22 环境限制。
2026-08-10 — 最终本地回归
bun run check、生命周期/operation planner 30/30、浏览器辅助回归 18/18、控制面 27/27、四个 Skill quick validation 和git diff --check均通过。- Schema 已完成 JSON/Ajv 编译,并验证生命周期修改白名单、删除 guard 账号/run/精确引用边界;当前日期不在 2026-09,浏览器真实写入时间闸门 smoke 通过阻断。
- 外部 parser 在 Bun 下为 28 pass / 1 个既有
node:test嵌套测试运行器限制;本机没有 Node 22,完整 Node 22 外部套件留待具备该运行时的环境补跑。
2026-08-10 — 名单导入解析与保存边界完成只读确认
- 已读取
daoru.asp?ziduan=全部的原生控件和按钮回调,确认“确定导入”是父页面 DOM 写回,不是独立 ERP 请求。 - 已确认
DaoRuDones()按首行表头解析游客列,从既有游客行第 1 行开始覆盖,超过已有行数停止,不自动增行;游客行需先由人数控件生成。 - 已记录字段别名映射、M/F 转男/女、英文名/拼音拼接、清空只清文本输入等边界;独立团与散拼子单最终分别走已确认的
DoInfoJH/DoInfo_order保存。 - 本轮未输入、粘贴或确认任何真实名单,未产生 ERP 网络写入;仍缺真实保存回执、行数/覆盖回查和失败边界。
2026-08-10 — 生命周期研究文档与登记状态同步完成
- 已将顺序固定为“下单 → 名单导入/补充 → 团队安排 → 修改/取消 → 最终导出”,并在
ltjt_order_lifecycle_research.md中形成模块矩阵、公共引用、原生请求契约、导出响应矩阵和 Skill 拆分建议。 - 已同步
shared_plan_create登记状态为“已真实验证(以用户确认及现有逐团回查记录为准)”,没有重新调用 ERP 或重放历史任务。 - 已把当前证据边界明确为:创建能力有真实成功/回查;中段安排、修改、取消只完成原生请求的只读拦截;导出完成源响应只读采集;名单导入完成 DOM 解析语义确认。
- 已写明下一阶段按名单预检 → 导游 → 车辆/酒店/大交通/其他 → 低风险修改 → 取消 → 导出交付的闸门顺序推进,真实保存必须逐模块具备响应和双重回查。
git diff --check与研究文档/登记文件存在性检查通过;本轮未修改插件实现、Skill 主文件或 ERP 数据。
2026-08-10 — 其他/备案安排原生保存请求只读拦截完成
- 已确认
teams_qita.asp原生保存为POST /System/DAT/team.asp、Act=DoInfo_qita,响应类型为 script。 - 已在不修改表单值的情况下调用原生
SubmitInfoForm()并拦截网络,捕获 266 个序列化字段、262 个唯一字段和 12 行其他成本资源,网络发送为 0。 - 已确认同一载荷包含备案号、日期、出入境口岸、备案导游/司机证件资料和
ddID/tdID/session_id;备案导出链接仍独立存在,业务模型需拆成成本行与备案资料两层。 - 已记录
ProDanweiZCxm(leibie=7)、其他成本set_price及备案ProGetTableZD/ProGetBeian联动;载荷摘要为 6082 字节、SHA-2562de1bb1088577ab397d8b2cb2456e8228b8001ade7f8d0d309eca7b35ae05fa6。 - 本轮未触发真实保存,未获得服务端回执或写后回查结果。
2026-08-10 — 导游安排原生保存请求只读拦截完成
- 已确认
teams_daoyou.asp原生保存为POST /System/DAT/team.asp、Act=DoInfo_daoyou,响应类型为 script。 - 已在不修改表单值的情况下调用原生
SubmitInfoForm()并拦截网络,捕获 17 个序列化字段、17 个唯一字段和 2 个导游槽位,网络发送为 0。 - 已记录导游资源
ProDanweis(leibie=1)、导管员工ProDanwei_Yuangong、等级选项及ap_dy勾选后才进入序列化的边界;载荷摘要为 300 字节、SHA-256e7a583191d039ee04c399ce49b631712820cd0a1e35359f2d59fc91c49efdfef。 - 本轮未触发真实保存,未获得服务端回执或写后回查结果。
2026-08-10 — 9 月真实 ERP 全链路测试范围已确认
- 用户确认 9 月可创建真实 ERP 测试订单,并由用户在测试完成后手动清理。
- 测试集固定为 1 组独立团 + 1 组散拼母团/子单,统一使用
TEST-202609标记,覆盖下单、名单导入/补充、团队安排、修改/取消和最终导出。 - 已将测试拆为“执行窗口与访问前置、下单与名单、安排与修改、取消分支与导出、清理交接”五个待执行阶段;当前尚未创建任何测试订单。
- 已设定写入闸门:每项操作必须记录请求/响应、列表或详情回查和订单引用;删除放到导出与证据留存之后,名单使用合成数据。
2026-08-10 — 9 月执行窗口改为灵活择机
本节中的早期“两类测试订单”表述已由当前实施方案取代;当前以四条创建路线、三批量日期和统一生命周期矩阵为准。
- 用户确认 2026 年 9 月内任意时段均可执行,不需要预先固定具体日期或创建提醒。
- 批量下单所需的出团时间段由测试方案统一设置;执行当天仍需检查登录会话、系统可用性和当前测试对象引用。
2026-08-10 — 安排资源外部影响边界已确认
- 用户确认安排环节可使用 ERP 现有可选的导游、车辆、酒店、交通和其他资源。
- 所有安排只保存为未确认/测试状态,不触发真实采购、付款、通知或对外发送;该边界适用于 9 月全链路测试。
2026-08-10 — 测试单删除权限范围已确认
- 用户允许在测试结束后删除本次测试创建的测试单,删除范围限定为 AI 测试账号可归属且带有
TEST-202609标记的本次测试对象。 - 删除前必须完成订单号/团号/子单号登记及导出证据留存,并逐对象核对创建清单;不删除账号下的既有历史订单。
- 删除后执行列表/详情回查,异常对象保留并转人工复核;当前仍未创建或删除任何 ERP 测试单。
2026-08-10 — 生命周期验证与适配落地开始
- 用户确认并要求实施完整验证计划;本轮范围为契约、Skill、插件安全闸门、fixture、证据模型和本地回归,不提前创建 ERP 测试订单。
- 已确认当前实现事实:三类创建能力已有真实成功/回查基线;名单、五类安排、三类修改、取消/恢复/删除仍需把只读原生 action 转成受控写入契约;导出继续 source-only。
- 已将实施拆为契约结果模型 → 原生适配/安全闸门 → Skill/mapping/fixture → 9 月测试清单 → 本地回归/发布闸门 → 9 月真实执行六阶段。
2026-08-10 — 生命周期契约、Skill 与测试态适配完成
- 已扩展标准 action:
passenger_list_import、五类arrangement_*、order_update_independent/_shared_plan/_shared_child、order_cancel、order_restore、order_delete;旧order_update仍保持只读兼容,不静默迁移。 - 已统一结果模型:
resolved_refs、before_snapshot、preflight、native_request、server_response、requery、side_effects、manual_review_required;写后响应或回查缺失不能完成,未知写入不自动重试。 - 已实现浏览器测试态适配器:五类团队安排对应
DoInfo_daoyou/cheliang/jiudian/piao/qita,三类修改对应DoInfoJH/DoInfoSP/DoInfo_order,名单使用daoru.asp/DaoRuDones,取消恢复分离编辑页状态与JH_set_quxiao,删除分离DelRecord/Del_order。 - 已加入 2026-09 时间闸门:真实写入必须同时满足宿主 test context、
TEST-202609、AI 测试账号、原生基线、allowlist(删除)和allow_live_write=true;当前日期不在 2026-09,因此本轮没有 ERP 写入。 - 已更新 Schema、外部 parser validator/prompt、四个既有 Skill及新增
lwlt-lifecycle、业务登记表、生命周期 mapping、运行夹具、证据模板、allowlist 模板和发布门槛报告。 - 本地结果:生命周期与 operation planner 回归 30/30;四个 Skill
quick_validate全部通过;标准 Schema JSON/Ajv compile 通过;外部既有测试在 Bun 上 28 项通过但有一项既存嵌套node:test在 Bun 的运行器兼容错误,需用项目要求的 Node 22 再跑完整套件。
2026-08-10 — 发布前回归结果
bun run check通过;控制平面 Bun 回归 27/27;既有浏览器辅助单元回归 18/18;生命周期/规划器回归 30/30;扩展 background、lifecycle adapter 预检和 2026-09 写入窗口阻断 smoke 均通过。git diff --check通过;标准 Schema、lifecycle mapping、run manifest 均可解析,Ajv 2020 Schema compile 和一个有效 lifecycle arrangement operation 校验通过。- Bun 执行既有
external-agent-client.test.mjs时 28 项通过,剩余 1 项是现有测试中嵌套node:test在 Bun 1.3.13 的 runner 限制;项目脚本仍以 Node 22 为准,本机当前未提供 Node 22 可执行文件,因此未把该限制误报为业务代码失败。 - 最终状态:新生命周期模块保持
test_only/阻断;真实 ERP 创建、修改、取消、恢复、导出和删除均未在本轮执行,待 2026 年 9 月按运行夹具和发布门槛执行。
2026-08-10 — AgentBus 重要消息与最终回执排查开始
-
用户反馈 AgentBus 已能收到进度,但“需返回/交互用户的重要消息”及最终回执没有返回渠道。
-
已确认需要同时检查任务公共结果字段、
taskResultText()映射、AgentBustask.result组装与 outbound 日志;当前先完成复现和根因定位。 -
已复现实际完成任务:AgentBus 仅发送等待确认文案,管理员确认和 ERP 完成后没有新的最终回执帧;下一步修复等待确认到最终完成的回传链路,并把结构化重要消息展开为渠道可读文本。
2026-08-10 — AgentBus 重要消息与最终回执修复完成
- 已修复
awaiting_confirmation被当作终态的问题:现在先发送task.progress,并继续保留原入站任务上下文等待确认后的执行结果;completed/failed/其他真正终态才发送唯一的task.result。 - 已将
important_message的input_request、error_summary、success_receipt等结构化内容展开到payload.text;成功场景明确带“重要消息详情(最终回执)”,同时保留payload.important_message供支持结构化消息的渠道使用。 - 已补充完成回执和 AgentBus 等待确认→最终完成的回归测试;AgentBus 专项 5/5、控制平面全量 27/27、TypeScript 编译和
git diff --check通过。 - 已重启运行中的控制面;
/health/ready返回 200,数据库/schema 正常,AgentBus WebSocket 已重新建立 session(epoch 2)。 - 旧任务在修复前已发送过一次终态帧,不能自动 retroactive 重放;需要重新发送一条 AgentBus 消息验证新链路。
2026-08-10 — 本地 Chrome 登录态与 ERP 真实只读核查
- 已通过本地 Chrome 的有效登录会话进入真实 ERP,确认当前账号为“测试ai员工账号”。
- 独立团 2026-09-03~09-30 +“只看我的”返回 0 个订单;散拼团同区间返回 32 个既有团队,均未带
TEST-202609,未纳入测试清理范围。 - 已真实读取四类创建表单、五类安排子页、独立/散拼详情页、取消恢复/删除原生函数和源导出链接;只完成页面级预检,没有保存、取消、恢复、导出下载或删除。
- 已在未保存表单内预检
15+1名单导入:生成 16 行、输入 17 行时第 17 行被原生解析器截断,未发生网络写入。 - 真实写入仍按用户已确认的 2026 年 9 月窗口执行;当前阶段从“无登录态”推进到“真实 ERP 页面基线已确认”,但不把只读证据记为生命周期写入成功。
2026-08-10 — 组织级全自动化流程开始
-
用户已确认增加组织级“全自动化”按钮:管理员可开启/关闭,开启后所有 AgentBus 渠道的新任务在解析完整明确时直接进入 ERP,不再等待人工确认。
-
已确认设置需数据库持久化、服务重启保持;默认关闭,仅管理员可操作并记录审计。
-
已确认历史
awaiting_confirmation任务不追溯执行;关闭开关不打断已进入 ERP 的任务,只影响后续新任务。 -
已确认缺资料、解析失败、歧义、插件/ERP异常、超时或回查不确定时安全停机并返回原因/重要消息。
-
已进入 Phase 3:在完成组织设置和审计后验证自动确认到插件派发的运行链路。
-
现状核对完成:服务端的 ERP 唯一执行权在
claimForBrowser(),实际下发依赖已登录平台页面的浏览器插件桥接;因此自动化采用“服务端自动确认 + 平台页面自动 claim/dispatch”,不增加服务端 ERP 写入旁路。 -
任务源已由
tasks.source区分manual/agentbus;自动模式只在 AgentBus 新解析成功任务的确认边界生效,平台手动任务继续人工确认。 -
已确认需要给任务保存自动确认模式快照,避免开关关闭后改变已进入自动执行链路的任务;历史
awaiting_confirmation任务保持原状态。 -
Phase 2 已完成:新增
009_organization_automation.sql,组织设置默认关闭,任务记录confirmation_mode;新增管理员设置读写接口和组织级审计。 -
Phase 3 已实现首版:解析完整且无阻断的 AgentBus 任务自动转为
confirmed/awaiting_handoff,AgentBus 返回自动接管进度;平台页面只对confirmation_mode=automatic自动申请插件执行权。 -
静态验证:TypeScript no-emit、前端语法、AgentBus 5/5、控制平面 23/23、总控制面测试 28/28、
git diff --check均通过。 -
已将数据库迁移应用到
009_organization_automation;当前组织开关仍为关闭,现有任务均为手动模式,不会被本轮迁移追溯执行。 -
已补齐编译产物迁移目录回退:
dist/control-plane/src/migrate.js在 SQL 未复制到 dist 时会从项目根目录control-plane/migrations读取;编译产物迁移命令已实测返回applied: []。 -
运行态已重启加载新代码:
/health/ready返回 200,要求迁移为009_organization_automation,AgentBus WebSocket session ready 为 true(epoch 3)。设置读取服务方法实测返回当前组织enabled=false。 -
最终验证通过:control-plane 全量测试 28/28、业务/外部回归测试 67/67,AgentBus focused 测试 5/5;TypeScript no-emit/build、前端语法检查和
git diff --check均通过。 -
当前开关保持关闭(
enabled=false),未触发新的 ERP 写入;启用后需保持平台页面与 ERP 插件桥接在线,服务端负责自动确认,浏览器插件负责实际 ERP 执行。
2026-08-10 — 业务操作根目录边界校正
- 根据用户确认,运营验证范围收敛到 ERP“业务操作”根目录;客户信息、导游信息、酒店/车队/票务/其他合作商资料页不再作为本次生命周期操作入口。
- 通过当前登录 Chrome 从主框架点击这些资料页,真实 iframe 返回权限不足;未再继续尝试,也未把该权限错误当作业务流程失败。
- 重新回到业务操作根目录并确认独立团计划表、散拼团计划表、团队安排、酒店用房表、航班控位表、团队备案表均可打开;后续以这些页面的原生表单、请求和回查为事实基线。
- 订单表单中仍会引用客户、产品、OP、资源等已有对象,但只在业务操作页面内做唯一引用解析,不进入或修改基础资料管理页。
2026-08-10 — 业务操作页面边界闸门落地
- 通过真实 Chrome 复核独立团计划表的筛选、下单、批量下单、批量取消、修改、查账、删除、插入和复制入口,未触发任何动作提交。
- 生命周期浏览器适配器现要求当前 frame 位于
/System/Business/;资料页或其他非业务根目录页面会在预检阶段阻断,并返回lifecycle_business_operation_scope_required。 /System/DAT/只保留为页面内原生 POST action 的固定契约,插件不把它当作可直接导航的业务入口。- 验证结果:生命周期/规划器/执行闸门 33/33;TypeScript no-emit 通过;浏览器目标构建通过;
git diff --check通过。
2026-08-10 — AgentBus 渠道回执摘要过滤完成
- 已定位渠道技术细节来源:
taskResultText()将important_message的内部success_receipt、error_summary和input_request直接序列化进payload.text。 - AgentBus 对外文本现只返回
important_message.text;成功摘要保留用户需要的团号/订单号,等待补充保留用户问题,不再输出回执校验状态、房型统计、错误码、执行阶段等内部字段。 task.result.payload.important_message同步改为安全结构:只保留kind、text,等待补充时附带必要问题列表;平台任务接口仍保留完整结构供内部操作台使用。- 已重建 TypeScript 编译产物并重启常驻控制面;
/health/ready返回 200,数据库/schema/AgentBus session 均正常。 - 验证通过:控制平面 28/28、业务/外部回归 67/67、TypeScript build/no-emit、前端语法检查和
git diff --check均通过。
2026-08-10 — AgentBus 错误回执摘要压缩完成
- 渠道错误回执现在只保留第一条主错误;ERP 写入不确定、必填项缺失和契约不通过等场景使用固定的一句话用户提示,并保留“是否写入 ERP”的关键信息。
- 例如“来源地匹配器未加载”这类长诊断现在只返回“插件执行阻断:来源地匹配器未加载,已阻断 ERP 写入。”,后续请求追踪和字段校验不再发往渠道。
- AgentBus 专项测试 5/5、控制平面全量测试 28/28、TypeScript build/no-emit 和前端语法检查通过;服务已重启,AgentBus session ready 正常。
- 本轮复跑既有业务/外部契约夹具时有 14 项因测试输入缺少当前强制的客户来源地字段而失败;这些测试未涉及本次 AgentBus 文件改动,需单独更新夹具。
2026-08-10 — 真实 ERP 测试执行、证据冻结与来源地适配
- 已从“只读准备”推进到真实登录会话的创建、名单、安排、修改、取消/恢复、source-only 读取和删除清理;测试日期全部控制在 2026 年 9 月,账号为“测试ai员工账号”,范围仅为业务操作根目录。
- 已完成四条创建路线的实际尝试:独立单成功、独立批量 3/3 成功、散拼单个母团/子单成功、散拼批量在来源地修正后仍 HTTP 500。所有成功写入均有服务端响应和列表/详情回查;不确定状态未自动重试。
- 已完成独立单 16 行名单与散拼子单 16 行名单回查、独立单五类安排回查、独立单备注修改、散拼子单字段差异验证、编辑页与列表级取消/恢复对照。
- 已完成 10 类导出源的内存读取和脱敏摘要登记;没有把源响应误报为文件下载、转换或发送。
- 已完成清理:3 条独立批量、散拼单个母团/子单、4 条散拼批量部分母团均删除并回查消失。独立单由于 ERP 应收零行仍保留财务账、当前账号无财务页权限,删除保持阻断并转人工复核;该残余对象及资源未扩大操作范围。
- 新增并同步
source-region.js、插件 preflight/注入、operation planner、外部 parser validator、Schema、orders/plan mapping、Skill、source-region fixture、真实 evidence register 和 live allowlist。来源地无法解析或不一致时在 ERP 写入前阻断。 - 当前回归:
tools/product-lookup.test.mjs7/7、tools/operation-plans.test.mjs25/25;全部tools/*.test.mjs51/51;外部 parser 在 Bun 下 29 项通过,剩余 1 项为既有嵌套node:test与 Bun runner 的兼容限制(本机无 Node 22),不归因于本次来源地修改。JSON 校验通过。 - 发布状态:保持
test_only/阻断。解除前仍需解决散拼批量 HTTP 500、xiadanbeizhumapping、列表恢复不一致和独立单财务清理权限四项人工/系统风险。
2026-08-10 — 来源地校验延后到 ERP 插件(已确认,实施中)
-
用户确认:插件/后台的结构校验只负责必填字段有无及格式;产品来源地等必须依赖 ERP 搜索的数据不能在外部 Agent 阶段拦截。
-
已记录影响面:外部 Agent Prompt、外部 parser validator、插件
operation-plans.js的前置 validator,以及 ERP 页面inpage.js的运行时 preflight。 -
当前尚未修改业务代码;下一步移除外部/后台对未解析
source_region的阻断,保留 ERP 页面搜索后的来源地兼容性与提交前安全闸门。 -
已完成第一阶段代码调整:外部 Agent Prompt 不再要求
source_region,外部 parser validator 和插件operation-plans不再在 ERP 执行前做来源地语义阻断。 -
已将独立单页面
inpage.js的来源地检查从初始候选匹配后移到GetProduct/产品模板联动及客户恢复后的核心字段形成之后,并保留写入前阻断。 -
已同步 active newbooking Skill、ERP handoff、字段说明和输出契约;已更新外部 parser 与 operation planner 测试断言,下一步运行回归并补齐发布包。
-
针对性回归通过:外部 parser、插件 planner 62/62;全量
tools/*.test.mjs加外部 parser 共 88/88。 -
已重建
dist/ltjt-order-assistant-0.5.6.zip与无版本别名包,包内现在包含source-region.js、lifecycle-result.js、lifecycle-adapters.js,unzip -t通过。 -
已重建
dist/lwlt-newbooking.skill并确认包内 Skill 已改为“来源地由 ERP 插件预检负责”。 -
最终检查通过:全部相关 JavaScript
--check、JSON 解析、git diff --check、两个插件 ZIP 与 Skill 包unzip -t、源码与插件包关键文件逐一cmp、控制平面/health/ready均通过;数据库/AgentBus 在线,未调用 ERP。
2026-08-10 — 插件正式发布包升级至 0.5.7
- 已将扩展 manifest、
inpage.js/team-batch-inpage.js运行时版本、LianSyn-platform 最低兼容版本统一升级为0.5.7。 - 已同步插件 README、控制平面 README 和批量下单业务说明;历史
0.5.6包及历史验证记录保留。 - 已生成
dist/ltjt-order-assistant-0.5.7.zip,并同步覆盖无版本别名dist/ltjt-order-assistant.zip;旧dist/ltjt-order-assistant-0.5.6.zip未删除。 - 两个 ZIP
unzip -t通过;包内 manifest/桥接版本为0.5.7,与源码关键文件cmp通过。 - 全量回归测试 88/88、插件/LianSyn JavaScript 语法、JSON 解析和
git diff --check均通过;本轮未调用 ERP、未产生新的 ERP 写入。
2026-08-10 — 删除来源地语义阻断但保留匹配器
- 新日志确认:客户/产品候选唯一匹配、
GetProduct联动、结构性必填和最终表单字段均已通过;唯一阻断为source_region_match对“遇见老挝”无法推导地域词的错误判断。 - 已移除独立单、原生批量、散拼母团和散拼子单页面的
source_region_match调用、阻断和结果回执字段;不会再因来源地无法解析/不一致阻止 ERP 写入。 - 已保留
source-region.js、product-lookup.js、客户/产品关键字模糊搜索和唯一候选匹配算法,并恢复 matcher 的后台加载/页面注入;匹配器回归测试仍保留。 - 已同步 Agent Prompt、Skill、ERP handoff、输出契约、控制面/插件说明和生命周期风险文档,明确
source_region仅为可选上下文。 - 88/88 回归测试、JavaScript/JSON/diff 检查通过;
0.5.7ZIP 完整性通过,包内仍含source-region.js与product-lookup.js,源码比对通过;控制面健康且 AgentBus 在线,未调用 ERP。
2026-08-10 — 新独立团全生命周期继续执行
- 新建并回查
LW-260920A-A(tid14379、ddid14447),原生创建报告保存在reports/lwlt-independent-full-*.json,合成输入在agent设计规范/test-fixtures/lwlt-lifecycle/live-inputs/independent-full-20260920.json。 - 已完成并回查 16 行游客名单;已完成导游、车辆、酒店、大交通和其他/备案五类安排。最后一类
DoInfo_qita返回 HTTP 200“操作成功”,总表显示其他成本行,重开子页确认备案号、日期、口岸和测试备注均持久化。 - 当前进入独立团业务字段修改阶段;后续仍需执行取消/恢复、source-only 导出、证据冻结、allowlist 校验和删除后回查。
- 多字段修改首轮返回 HTTP 200 空响应,写后列表回查明确未落库;已登记为一次失败,不重复相同载荷,下一步使用单字段原生提交定位可持久化白名单。
- 单字段
xiadanbeizhu直接提交同样空响应且回查未变;已停止该方法,下一步改用页面自己的 jQuery/script 提交函数并捕获其真实回调。 - 页面原生 jQuery/script 提交也空响应且回查未变;独立团修改在当前“已安排五类资源”状态下转为人工复核,不再继续试写。流程继续验证取消/恢复、导出和清理。
- 列表取消返回明确业务阻断:零金额其他安排仍生成“应付其他”账,状态回查保持预订。下一步先读取并冻结当前安排状态下的导出源,再清除本测试单自己的安排成本,重新验证取消/恢复。
- C08 安排态 10 类 source-only 响应已全部读取并登记完整 SHA-256;无登录超时/权限错误,未落盘或发送。下一步可以安全清除本单测试安排成本并继续状态/删除验证。
- 已完成其他成本清理前置核验:只命中本单行 ID
88435,未付款、未审核、标记一致;准备使用原生DoInfo_qita清空该精确行并重开子页/总表回查。 - 其他成本行已成功清除并双重回查,备案资料保持不变;
arrangement_other的删除/保留边界得到真实验证。下一步按同样精确行前置清理车辆、酒店和大交通成本,导游只清资源引用,不触碰主数据。 - 车辆清理前置只命中本单行 ID
88432,yf=0、未审核、状态未确认、测试标记一致;已确认需保留行 ID 并清空供应商/车辆/数量/金额字段,让原生DoInfo_cheliang删除该行。 - 车辆行清除成功并完成总表/子页双回查;当前继续清理酒店和大交通测试资源。
- 酒店清理前置只命中本单行 ID
88433,yf=0、未审核、未确认、测试备注一致;原生行还含 8 间 × 7 晚派生数量 56,清理时将一并归零但保留精确行 ID 供 ERP 删除。 - 酒店安排清除成功并完成总表/子页双回查;订单基础用房需求 TWN8 仍保留,已区分于酒店资源行。下一步清除大交通安排。
- 大交通清理前置只命中本单行 ID
88434,yf=0、未审核、未确认、16 张、金额 0、测试备注一致;准备保留精确 ID 并清空资源/数量/状态字段。 - 大交通行清除成功并完成总表/子页双回查。当前剩余导游引用与备案资料;导游无成本行,仍将按本单精确引用清除,以便验证取消/删除前的最小状态。
- 导游清理前置确认只有槽位 0 命中内部 ID
11与本次测试备注,槽位 1 为空、落实复选框未勾选;本页没有财务/行级 ID,只清除团队对既有导游资源的引用,不修改导游主数据。 - 导游引用清除成功并完成总表/子页双回查;主数据未改动。重开页只渲染一个空槽位,说明槽位数会动态收缩。
- 清除成本安排后再次执行列表取消,
JH_set_quxiao(cz=1)返回 HTTP 200“操作成功”并给出行状态“已取消”。首次使用全部状态回查时精确团号未返回,当前不据此宣告完成,继续用显式“已取消”过滤查询。 - 显式已取消筛选已确认取消持久化。随后列表恢复
cz=0再次复现响应仍写“已取消”:预订筛选为空、已取消筛选命中。停止该恢复路径,改用编辑页状态恢复并回查。 - 编辑页恢复已通过:
DoInfoJHHTTP 200“修改成功”,预订筛选回查状态、团号、测试标记和零财务汇总一致。由于清除安排成本后同一修改 action 已恢复正常,下一步重新验证业务字段修改。 - 清除安排后多字段修改仍为空响应且回查未变,说明问题是字段组合/业务约束而非仅由安排成本锁定。停止组合提交,改为单字段逐项验证可写白名单。
- 单备注尝试暴露更基础的时序问题:本次只序列化 314 字段,写后回查未变;完整页应约 1046 字段。下一次先轮询完整表单/16 行游客加载完成,再允许提交。
- 完整页前置通过(1050/1046 字段、16 行游客)后,单独修改
xiadanbeizhu仍空响应且未持久化;该字段从独立团修改白名单移除,接下来改测明确的说明/接送/行程字段。 - 完整页单改
shuoming0也空响应且未持久化。停止对这张“曾有安排历史”的订单继续试写普通业务字段;后续适配新增安排历史阻断,状态恢复仍保留独立可写契约。 - C08 已在 live allowlist 中以精确团号/tid/ddid/账号/run_id/标记登记,安排态导出证据已冻结,状态已恢复预订,活动安排成本已清除;进入删除前只读核验。
- C08
DelRecordHTTP 200“操作成功”;删除后独立团 0 个订单、团队安排 0 个团队,五类安排单元格均不存在。allowlist 和真实证据表已更新为 deleted;这是不可恢复删除,仅限本次测试对象。 - 已进入散拼团计划表,保持业务操作根目录;首次只改 iframe
src被页面旧对话框状态拉回独立团,关闭旧提示并用 framelocation.href后成功进入/System/Business/plan.asp。下一步从页面原生新增入口创建 9 月母团。 - 已打开并只读核验散拼原生新增母团页:
InfoForm1/DoInfoSPs、日期/容量/房型/周期/产品字段均已确认;cp_id=412唯一命中老挝行程--广东 8D7N,业务页客户候选 ID661唯一命中广东市场衡阳客户。已关闭预检弹窗,尚未提交新母团;下一步按单日期创建并捕获回执。 - 已创建并回查散拼母团
LW-260922A-A(tid14384):DoInfoSPsHTTP 200,计划 16、TWN 8、产品/账号/日期一致。随后创建子单D14452(ddid14452):DoInfo_orderHTTP 200,客户 ID661、预订、15+1、零金额应收、TEST-202609均在父列表回查命中。母团和子单已登记为 active allowlist 对象,尚未授权删除;下一步导入 16 行合成名单。 - C09 散拼子单 16 行名单已完成真实导入与保存:原生
DaoRuDones()复现电话错位/接送机电话污染后,按游客行修正并清空接送机字段;DoInfo_orderHTTP 200“修改成功”,重载回查 16/16 姓名、证件、电话、TEST-202609全部一致。下一步进入母团五类安排。 - C09 母团五类安排已全部真实保存并双路径回查:
DoInfo_daoyou/cheliang/jiudian/piao/qita均 HTTP 200;活动资源行为88436–88439,导游 ID 11,全部未确认/付款引用 0,酒店明确绑定 ddid14452,备案号99092284持久化。车辆价格联动清空备注的问题已通过“等待联动后补写精确行”验证并登记。下一步按生命周期执行母团/子单业务修改。 - C09 安排后修改已完成:母团
DoInfoSP单改计划容量16 → 17,子单DoInfo_order单改zhusushuoming追加MOD-C09,两次均 HTTP 200“修改成功”并写后回查一致,核心引用与 16 行名单未变。下一步验证取消前置、冻结安排态导出源,再清理本测试对象的安排成本并完成取消/恢复。 - C09 安排态 10 类 source-only 响应已冻结并登记完整 SHA-256,无下载/转换/发送。取消先被零金额应收阻断;已用子单业务页原生
GetYSHtml + DoInfo_order清除 ID31551/31552并回查 recorded 数量 0。再次取消转而被“团队成本-应付其他”阻断,下一步只清理本单精确安排行88436–88439与导游引用。 - C09 其他成本行
88439已在yf=0、未审核、测试标记和账号精确前置下通过DoInfo_qita清除,服务端 HTTP 200“操作成功”;重开子页确认活动成本行不存在,备案号99092284、日期和口岸完整保留。下一步依次清理车辆88436、酒店88437、大交通88438与导游引用。 - C09 车辆行
88436已通过原生DoInfo_cheliang清除,HTTP 200“操作成功”;车辆子页无活动资源行,团队总表不再显示车辆资源,酒店/票务仍保持待清理。下一步处理酒店88437。 - C09 酒店行
88437已通过原生DoInfo_jiudian清除,子页和团队总表均无活动酒店资源;基础TWN8仍保留且不误判为残留安排。下一步处理大交通88438。 - C09 大交通行
88438已通过原生DoInfo_piao清除,子页和团队总表均无活动票务资源。当前仅剩导游资源引用;备案资料继续保留。 - C09 导游资源引用已通过原生
DoInfo_daoyou清除,HTTP 200“操作成功”;重开页唯一动态槽位为空,团队总表五类活动安排均已清空,未触碰导游主数据。下一步重试母团取消并执行显式状态回查。 - C09 母团取消已成功:
JH_set_quxiao(cz=1)HTTP 200,显式“已取消”筛选唯一回查。列表恢复cz=0仅测试一次,再次返回仍写“已取消”;“收客中”筛选为 0,已停止该缺陷路径,下一步使用母团编辑页完整表单恢复。 - C09 母团已通过完整编辑页
DoInfoSP单字段恢复为“收客中”:HTTP 200“修改成功”,编辑页重开、列表“收客中”唯一命中与“已取消”0 命中三重回查一致。下一步验证子单自身取消/恢复状态边界,再读取最终 source-only 响应。 - C09 子单状态联动已完整验证:母团取消会把 D14452 设为已取消,但母团恢复不级联;子单需用完整
DoInfo_order单独恢复。子单直接取消不会取消母团,但母团已收统计从 16 降为 0;再次恢复子单后,详情状态回到预订、16 行游客与零应收不变、母团统计回到 15+1。下一步读取清理后最终 10 类 source-only 响应。 - C09 清理后最终 10 类 source-only 响应已全部 HTTP 200 并登记完整 SHA-256;无登录/权限错误、无下载/转换/发送。生命周期状态敏感文档 hash 已变化,名单/备案当前/接机牌保持一致。下一步执行删除前 allowlist 与业务页精确预检,再按子单后母团顺序删除。
- C09 删除前预检已通过,业务页母团/子单/安排/应收/导出条件与本地 allowlist 全部一致;仅这两个对象的
delete_authorized已置为 true 并通过jq校验。现按原生Del_order先删除 D14452,写后回查成功后才允许删除母团。 - C09 子单 D14452 已由原生
Del_order删除,HTTP 200“操作成功”;母团列表无子单引用且统计为 0,原子单 URL 已无表单/游客/测试标记。allowlist 子单状态已更新为 deleted;现在才进入母团删除。 - C09 母团
LW-260922A-A / 14384已由原生DelRecord删除,HTTP 200“操作成功”;散拼计划表全部状态精确查询 0,团队安排表精确查询 0。allowlist 已把母团/子单均标为 deleted,散拼完整生命周期事实基线完成。
2026-08-10 — Agent 后插件桥接接管延迟修复完成
- 用户确认实施最小范围修复:只优化 ERP claim 之前的 bridge 唤醒/重试,不改变 claim 后的幂等、写入安全和不确定结果停机。
LianSyn-platform/app.js新增 bridge 恢复识别:连接从断开变为可用,或内容脚本重新注入产生新的bridge_installed_at时,立即强制调用自动派发,跳过旧的 30 秒冷却。- 修复自动派发失败时的本地状态覆盖问题:保留
confirmed + awaiting_handoff,仅更新 bridge 阶段提示,确保重连事件仍能触发 claim。 - 新增控制平面静态回归断言,防止再次把自动任务标为不可 claim 的
waiting_extension。 - 结果:前端/桥接语法、TypeScript、控制平面 28/28、legacy/业务回归 71/71、
git diff --check全部通过;服务健康检查正常,未主动调用 ERP。
2026-08-11 — 生命周期 v2 契约实现与回归收尾
- 已把 C08/C09 真实生命周期结论落入
operation-plans.js、lifecycle-adapters.js与external-agent-client.mjs:精确 refs、目标日期、名单、五类安排、三类窄修改、取消/编辑页恢复、source-only 导出和三类删除均有独立契约。 - 已更新
standard_system_operation.schema.json与lifecycle.mapping.json,增加对象类型、resolved ERP ID、安排历史、应收/资源前置、证据冻结、删除授权与子单优先顺序约束。 - 已更新
inpage.js/team-batch-inpage.js的业务页来源地检查和confirmation_export路由解析、二进制 SHA-256 证据字段;扩展与平台最低版本统一为0.5.8。 - 已同步
lwlt-lifecycle、lwlt-arrangement、lwlt-updating、lwlt-confirmation四个 Skill 及其 Agent prompt;4/4 通过 skill-creator 快速校验。 - 已同步 v2 mapping、16 行标准合成 TSV、run manifest、验证计划、研究结论、风险表和发布门槛报告;C08/C09 删除状态与真实 allowlist/evidence 保持一致。
- 新增/更新 planner 与 lifecycle contract 回归,当前针对性结果为 38/38;来源地匹配测试 7/7,所有已修改 JavaScript/MJS 语法检查通过。
- 正在执行全仓
npm test、JSON/Schema、diff 和发布包完整性审计;在插件内生命周期真实重放、C01 外部财务前置和散拼批量 HTTP 500 被解决前,新增模块继续保持 test-only,不提前整体发布。
2026-08-11 — 生命周期 v2 发布审计完成(正式放行仍阻断)
- 生命周期 refs、删除 allowlist、单字段修改、状态 from/to、完整名单投影及明确服务端回执/fresh requery 闸门已完成最后一轮 fail-closed 加固。
confirmation_export现要求散拼同时提供母团搜索引用与具体子单引用;页面以母团号筛选列表,再按精确子单 token 或ddid锁定唯一叶子行并核对ddid/tid。每个源读取异常都会形成结构化失败,不会误报下载、转换或发送成功。- 最终验证:TypeScript no-emit 通过;控制平面 28/28;
tools/*.test.mjs与外部 parser 共 96/96;相关 JavaScript/MJS 语法、Schema/JSON、git diff --check、4 个 Skill quick validator 全部通过。 - 已从最终源码重建
dist/ltjt-order-assistant-0.5.8.zip和dist/ltjt-order-assistant.zip;两个包完整性、manifest 版本、关键文件存在性及解包后逐文件比对通过,SHA-256 均为c94de1be6d0cfd8956e57b78e54cb23bcee092cd26457bb8c40cf12c2a2fdf7d。 - 再次检查本地 Chrome 时,macOS 仍处于锁屏状态;Chrome 进程与 9222 监听存在,但无法获得窗口状态或调试授权。未尝试绕过锁屏、未产生 ERP 写入;插件级完整重放继续作为唯一实现内发布阻断之一。
2026-08-11 — 生命周期 v2 最终安全加固继续
lifecycle-adapters.js已加入路线级表单完整度/稳定性/加载提示门槛;名单导入改为检查父ListForm,不再把导入弹窗自身当作页面完整证据。- 五类安排已加入第 0 槽位创建专用闸门:既有行 ID、资源隐藏 ID、付款引用或审核状态非空即阻断;其他/备案不同值也禁止覆盖。
- 安排异步联动完成后会重新核对资源 ID、车型/房型/说明和日期,再写正数量、未确认状态和
TEST-202609备注。 - Planner、外部 Agent validator、Schema、mapping、
lwlt-arrangement/lifecycle/updatingSkills、run manifest 和插件 README 已同步 9 月日期、正数量、酒店日期先后及页面完整度规则。 - 针对性 lifecycle contract 14/14、相关 JavaScript/MJS 语法、JSON 解析和
git diff --check已通过。 - 真实 Chrome 检查确认 PID 18141 监听 9222,但系统仍锁屏;CDP 等待本机授权后已主动停止,未产生 ERP 请求。下一步完成全量回归和重打包,真实重放保持阻断。
- 全量发布审计完成:TypeScript 通过;控制平面 28/28;全部业务/契约 96/96;4 个 Skill validator、JavaScript/MJS 语法、JSON 和 diff 全部通过。
- 安全加固版本提升为 0.5.9,
LianSyn-platform最低兼容版本同步更新;旧 0.5.8 不会被当成已具备完整加载/空槽位闸门。 - 已重建
dist/ltjt-order-assistant-0.5.9.zip与通用别名包;两者 manifest=0.5.9、18 个文件、完整性和解包源码比对通过,SHA-256 均为9eb1befab6c839f9dcadc6dc6e254f30940910e15e4d967373b239d8a1462b44。 - 当前唯一实现内发布硬阻断仍是 0.5.9 的浏览器插件真实重放;Mac 锁屏未解除,未写 ERP。
2026-08-11 — 继续完善:运营原文复核启动
- 重新完整提取运营梳理 10—21 文本并查看内嵌 ERP 截图,已将四类下单、两类名单、宽字段修改、五类安排状态/变更及导出需求与当前 0.5.9 契约逐项对照。
- 识别出真实重放前的关键实现缺口:五类安排目前只允许空槽位创建,尚不能安全更新/清理本轮自有资源行;独立团宽字段更新仍缺真实白名单证据。
- 保持 source-only 范围:DOC→DOCX、提前两天自动任务和外部发送不在本轮已确认发布边界内。
- 再次只读检查本机状态,macOS 仍锁屏;未调用 ERP、未写入或删除任何对象。当前继续进行插件/Schema/Skill 静态补缺,解锁后再执行 0.5.9+ 的新对象全生命周期重放。
- 已完成安排与来源地代码审计:确认运行时来源地门槛已正确启用,但 Agent/Skill 文档仍有反向描述;确认取消前的安排清场在 C08/C09 有真实原生证据,却尚未成为插件可表达 operation。
- 已确定最小补缺方案:不新增业务 action,在五类
arrangement_*内增加严格的mode=create|clear;clear只处理当前运行精确测试行/导游引用,其他备案保持不变,并使用删除感知的 fresh GET + 团队总表双回查。既有安排普通更新因缺真实证据暂不开放。 - 已实现
arrangement.mode=create|clear的 planner、外部 validator、JSON Schema 和浏览器 adapter 第一版。clear 对非导游要求原生 row_id,对其他成本要求备案保留;页面执行保留 row ID/付款/审核,只清当前测试资源字段,并新增 absence-aware 双回查及 resolved target 证据。 - 即时验证通过:
lifecycle-adapters.js、operation-plans.js、external-agent-client.mjs语法通过;生命周期契约 15/15 通过。尚未在真实 Chrome 写入,仍保持 test-only。 - 已同步 lifecycle mapping、run manifest、fixture README、业务行为登记、适配登记、验证计划、风险表和三个相关 Skill 边界;运行清单版本更新为
ltjt-lifecycle-v2.1-clear-baseline-2026-09。 - 已统一来源地文案与运行实现:仅当 ERP 最终产品候选含可识别地域词时要求最终客户候选兼容;缺少显式
source_region不要求 Agent 追问或虚构。JSON/Schema 编译与 15/15 针对性回归再次通过。 - 插件版本面已提升为 0.5.10(manifest、两条页面 bridge 和平台最低兼容版本一致),防止 0.5.9 被误判为具备安排清理能力;README 和当前业务说明已同步。
- 已按 skill-creator 更新
lwlt-arrangement/agents/openai.yaml,五个相关 Skill quick validator 全部通过;clear 增加联动稳定后二次清空和关键字段不回填检查,针对性回归仍为 15/15。 - 已新增
operations-requirement-matrix.md,把运营原文 10—21 的每项需求明确标成原生已实证、0.5.10 已实现待重放、ERP 阻断、待逐字段验证或本轮延期,并从 fixture README 与 release gate 建立入口。 - 再次检查 macOS 仍为锁屏;未触发 Chrome 调试授权或 ERP 请求。当前进入 0.5.10 全量静态回归和打包阶段。
2026-08-11 — 0.5.10 全量静态审计与发布包完成
- 全量验证通过:TypeScript no-emit;控制平面 28/28;全部业务/插件/外部解析契约 97/97;相关 JavaScript/MJS 语法、JSON/Schema、五个 Skill validator 和
git diff --check均通过。 - 已生成
dist/ltjt-order-assistant-0.5.10.zip并刷新通用别名dist/ltjt-order-assistant.zip;旧 0.5.9 包保留。两个新包均为 18 文件、manifest 0.5.10、解包后与当前源逐文件一致,SHA-256 均为13841e0e02451eb1577ebcb7f80004fd9ba2bfdfaa8ef8cb54ab4f4a57adae05。 - 打包前先验证版本包,验证通过后才覆盖通用别名;没有删除历史包。真实 ERP 重放尚未执行,0.5.10 继续 test-only。
2026-08-11 — 0.5.11 回放准备与静态发布物完成
- 新增确定性生命周期回放生成器、状态模板和 6 项生成器测试;可从四条创建 operation 开始,随真实 refs、资源和 row ID 回填逐阶段生成后续 action,并对 planner、外部 validator 与 JSON Schema 三重校验。生成器现自动创建缺失父目录但仍拒绝覆盖既有运行目录。
- 三条创建运行时现支持产品联动后的显式
order_number.suffix,模板升级为TEST-202609-R0511;mapping 与lwlt-newbookingSkill 明确区分普通 Agent 用户事实和宿主级测试注入。 - 来源地 helper 已统一条件式语义;新增“无可识别地域词不阻断”和“有广东地域词但客户来源无法解析仍阻断”回归。
- 发现并关闭应收假能力:新对象完成业务页 0.01 新增/清零和插件重放前,
receivable_fixture.add/clear在 planner、外部 validator 和 adapter 全部明确阻断;lwlt-lifecycle与lwlt-updating已同步。 - 插件/平台最低版本升为 0.5.11。全量检查通过:业务/插件/外部解析 106/106、控制平面 32/32、TypeScript、JS/MJS 语法、关键 JSON、5 个 Skill。
- 生命周期测试 operation 的写授权已收回控制面:parser 输入一律按
allow_live_write=false持久化,AgentBus 不得自动确认这 12 类 action;平台人工确认前展示 operation 和测试上下文,确认时服务端重新核对精确 created refs、运行 ID、账号、标记、9 月日期及删除证据,随后才注入该次写权限。 - 修复控制面完成证据误判:名单、安排、修改、状态、删除只有在统一
server_response.completed=true + requery.matched=true且无 blocker/人工复核时才生成成功回执;source-only 导出还要求hashes_frozen=true。缺任一条件仍进入 reconciliation,相关控制面回归增至 32/32。 - 已建立本轮专用
replay-state.live-20260811-r0511-01.json、四个已验证创建输入、逐操作证据表和删除允许清单;预期 4 个独立团、4 个散拼母团和 1 个散拼子单,批量每日期对象都必须登记和清理。主顺序已按“安排 → 修改 → 导出”校正,独立团无安排历史修改仅作为明确例外探针。 - 已生成
dist/ltjt-order-assistant-0.5.11.zip并刷新通用别名;两者均为 18 文件、manifest 0.5.11、解包源码逐一一致,SHA-256 均为fc47fceab8d1d2ce8a11f948f502ebbc345d420be7a0a34b4cbde872b57a6cf1。dist/lwlt-newbooking.skill已从当前源码重建并验证一致,SHA-256 为ac54e7b286e1a0000e202c3ea7d7ef77d6dcc1c4f20eb22a2e932fef94423edf。 - 再次检查已登录 Chrome:CDP 仍等待授权,Computer Use 明确返回 Mac locked;命令已安全中止,没有 ERP 请求或写入。真实回放、应收基线和最终删除证据继续等待用户解锁及点击 Chrome“允许调试”。
- 控制面已重新编译并由常驻守护进程在 05:00:12 拉起;
/health/ready确认数据库、Schema、AgentBus session 全部正常,数据库仅有 5 个历史 completed 任务,无排队、待确认或执行中任务。 lwlt-lifecycle、lwlt-confirmation、lwlt-updating已同步主生命周期顺序、批量对象清理完整性和统一成功证据;连同lwlt-newbooking、lwlt-arrangement共 5 个 Skill 再次通过 quick validator。- 最终桌面复核仍为
CGSSessionScreenIsLocked=Yes。截至本记录,四个新创建 operation 仅生成在本地且均未提交;真实 ERP 中没有本轮 R0511 新对象,不能把准备完成表述为安排、修改或导出已通过插件重放。
2026-08-11 — 0.5.11 已登录 Chrome 真实重放启动
- 当前 macOS 会话已解锁;Chrome PID 18141 正常监听
127.0.0.1:9222,控制面/health/ready的数据库、Schema 与 AgentBus 均为健康。 chrome-cdp list已成功接入现有登录会话,ERP 目标为https://lwlt.hisy.cc/System/Mainlt.asp,平台目标为http://127.0.0.1:8786/。- ERP 可访问性快照确认当前登录账号为“测试ai员工账号”,业务操作根目录及独立团、散拼团、团队安排入口可见;尚未触发本轮任何 ERP 写入。
- 真实回放阶段由 Blocked 转为 In Progress;后续仅操作
TEST-202609-R0511、2026 年 9 月且由本轮真实创建/回查登记的对象。 - 已打开
chrome://extensions/并确认未打包扩展“联泰下单助手”处于启用状态,页面显示版本0.5.11、IDkafggjjlhebccdgkechmbgflkaifkccf;下一步执行明确重载并读取页面桥接版本。 - 已精确解析扩展卡片的
dev-reload-button,目标 ID 与工作区记录一致;未使用索引或模糊文本选择器,避免误操作其他扩展。 - 已精确点击目标扩展的“重新加载”;重载后扩展卡片仍显示
0.5.11、启用状态和同一扩展 ID。下一步刷新 ERP 与平台页并读取实际 bridge/PING 回执。 - ERP 主页面已完成一次忽略缓存刷新;AI 操作台页签首次 CDP 访问仍在等待该页签自己的 Chrome“允许调试”确认,因此其刷新未执行。
- 两个页签现均可读取:ERP 刷新后仍为“测试ai员工账号”登录态;AI 操作台为
lwltadmin管理员登录态、全自动化已开启,但刷新前页面仍显示“插件状态 未连接”。 - AI 操作台完成忽略缓存刷新并主动执行运行时 PING:bridge connected、版本兼容、ERP 自动化开启均为 true,实际运行版本与最低要求均为
0.5.11,新安装时间为2026-08-11T02:01:24.159Z。 - 已将组织“全自动化”临时切换为关闭,避免创建 action 在解析后自动下发;原设置为开启,完成本轮后恢复。
- 已通过平台正常
/api/tasks工作流提交 C01 独立团单个创建任务TASK-20260811020415-knTEfuA,输入包含精确客户、产品、2026-09-12、15+1、TWN8 与宿主 suffix;当前仅进入解析队列,尚未人工确认或写 ERP。 - C01 两次服务端轮询均为
parse_running / parse,operation 仍为空;未确认、未 claim、未触发 ERP 写入,继续等待外部 Agent 返回。 - C01 已进入
awaiting_confirmation,未自动确认。解析结果准确保留team_order_create、精确客户/产品、2026-09-12、成人15+领队1、TWN8 和order_number.suffix=TEST-202609-R0511;尚未下发 ERP。 - 已同步任务卡并从页面的“确认并提交到 ERP 插件”按钮人工确认 C01;确认前 UI 再次显示 action、suffix 和可提交状态一致。任务现已越过写入授权边界,等待服务端响应与 fresh requery,期间不自动重试。
- C01 已由插件 0.5.11 真实完成:原生成功页返回团号
LW-260912TEST-202609-R0511-A,产品与人数回执正确,任务为completed / verification且列表标识回查命中;当前继续解析列表中的精确tid/ddid后再登记删除 allowlist。 - C01 列表唯一行解析得到 tid
14385、ddid14453;行内账号、日期、客户、产品、人数、TWN8 和TEST-202609团号标记均一致。精确引用已立即写入 replay-state cleanup 与本轮 allowlist。 - 已提交 C02 独立团批量任务
TASK-20260811020955-7Uat1v0,限定 2026-09-04/08/29 三个指定日期、同一北京产品/客户、每日期 15+1 与 TWN8;自动化仍关闭,当前parse_running,尚未确认或写 ERP。 - C02 已到
awaiting_confirmation;页面审核确认 action、三个日期、specified_dates范围、客户、产品、15+1、TWN8 和TEST-202609-R0511全部准确,确认按钮可用。 - 已从正常页面按钮人工确认 C02;当前为
running / preflight,插件正在拦截批量原生载荷,write_attempted=false,尚未越过网络写入,不自动重试。 - C02 已真实完成:原生响应明确新增 3 个团队,团号分别为
LW-260904TEST-202609-R0511-A、LW-260908TEST-202609-R0511-A、LW-260929TEST-202609-R0511-A;三条 HTTP 200 fresh fetch 均命中且无登录/权限文本。当前补解析每条tid/ddid后立即登记清理集合。 - C02 三个精确引用已解析并登记:09-04=
14386/14454、09-08=14387/14455、09-29=14388/14456(tid/ddid)。本轮 cleanup/allowlist 现含 C01+C02 共 4 个独立团对象。 - 已提交 C03 散拼单个母团任务
TASK-20260811021415-rHpbRFc:2026-09-16、广东 8D7N 产品、计划16、TWN8、每日期1团和 R0511 suffix;明确不虚构客户/子单。当前parse_running,未确认、未写 ERP。 - C03 已到
awaiting_confirmation;审核结果为 shared_plan_create、09-16、计划16、TWN8、默认每日期1团、无客户字段、R0511 suffix,确认按钮可用。 - 已人工确认 C03;当前
running / browser_execution,插件规则校验已通过但write_attempted=false,尚未执行原生保存。 - C03 平台任务仍暂时显示 browser_execution,但 ERP 散拼计划表已出现唯一行
LW-260916TEST-202609-R0511-A、2026-09-16、测试ai员工账号、广东产品。按不确定写入规则停止任何重提,只继续等待插件回执并做 fresh requery。 - C03 的扩展本地任务仍为 queued,结果缓存停在
running/browser_execution,与 ERP 已出现目标行不一致;确认不是控制面漏轮询。继续诊断 background/inpage 上报链,并把现有母团先视作不确定写入命中对象。 - 已确认 0.5.11 Service Worker 目标仍存活(
background.jstarget 可见);标准 CDP CLI 只接受 page target,不能直接 eval worker,下一步用只读扁平 CDP session 检查 worker 执行锁/缓存。 - 新增只读
tools/inspect_extension_worker.mjs并修正 DevToolsActivePort 路径拼接后,独立连接已能访问浏览器;复查时 Service Worker 目标已消失。这与 C03 长任务中途失去 Worker、ERP 已写但结果未收敛的症状一致。 - 页面 bridge PING 仍返回 0.5.11/自动化开启,但不会唤醒 background Worker;紧接着诊断工具仍找不到 Worker。下一步用 CDP
ServiceWorker.startWorker只启动后台上下文并读取持久化 execution,不重新派发任务。 - 首次
ServiceWorker.startWorker因 CDP domain 未启用而安全失败;现已在扩展页调试 session 启用 ServiceWorker domain,尚未启动或重派发任务。 - 已只启动 Worker 并读取持久化状态:C03 execution 实际为
completed,submitted_at02:17:31.968Z;本地结果为split_parent_completed,原生回执与parent_groups_found回查均完整,runningTasks 为空。问题收敛为平台漏取已持久化终态,而非 ERP/插件动作未完成。 - 已用平台既有
pollTaskResult()回收同一 execution 的已完成结果;控制面 C03 现为completed/browser_execution、handoff completed,无错误。没有重新 claim 或调用 ERP。下一步只读解析母团 tid 并登记 allowlist。 - C03 母团列表唯一行为
tr_14389,状态收客中,账号、09-16、广东产品、计划16 与测试团号一致;tid14389已写入 core object、cleanup 与 allowlist。 - 已提交 C04 散拼批量母团任务
TASK-20260811022440-SdzS3uU,只含 2026-09-06/10/24、specified_dates、计划16、TWN8、每日期1团和 R0511 suffix;自动化关闭,当前 parse_running,无 ERP 写入。 - C04 已到 awaiting_confirmation;审核确认三个日期/范围/指定日期模式、广东产品、计划16、TWN8、默认每日期1团、无客户和 R0511 suffix 均准确。
- 已人工确认 C04;当前 browser_execution 且 write_attempted=false,插件尚处预写入阶段。
- C04 确认约 20 秒后,控制面与扩展持久化结果仍为 running/browser_execution;execution ID
8b0bb1d4-d2b0-4473-aed2-4e83e255bbd3一致。尚未把此状态解释为失败或重试,继续等待多日期回查窗口。 - C04 约 38 秒时仍在 running,但 ERP 计划表已显示 09-10 目标母团
LW-260910TEST-202609-R0511-A/ tid14391;写入边界已明确跨越,严格禁止重提,继续让逐日期回查自然收敛。 - C04 随后页面已推进到第三个 09-24 团
LW-260924TEST-202609-R0511-A/ tid14392,证明逐团回查仍在执行而非死锁;继续等待最终 publish。 - C04 第三步后本地结果仍 running;已仅将 ERP 目标页签激活以解除后台 timer 节流,没有改字段、点击提交或创建新 execution。
- 激活 ERP 页后 C04 收敛为 completed:原生响应返回 3 团,09-06/10/24 均
parent_group_found,reconciliation=all_dates_confirmed、无 missing/ambiguous。列表只读接口为/System/DAT/plan.asp?Act=SP_OrderList,下一步逐团解析 tid。 - C04 三个 tid 已由原生
SP_OrderList片段精确解析为 14390/14391/14392;连同 C03,4 个散拼母团均已加入 cleanup/allowlist。本轮已创建并登记 8 个对象,尚缺 C05 子单。 - 回填 state 后重新生成 phase2,5 个创建 operation 通过 parser/planner/schema 三重校验;已提交 C05 子单任务
TASK-20260811023219-cwV0qXk,精确母团14389、09-16、广东客户、15+1,当前 parse_running,未写 ERP。 - C05 提交后约 30 秒仍为 parse_running,operation 为空;自动化关闭且无确认,因此 ERP 尚无 C05 写入。
- C05 首次解析任务
TASK-20260811023219-cwV0qXk最终为parse_failed/external_cancelled;控制面明确记录未进入插件、未写 ERP。可安全只重试解析,不属于 ERP 写入重试。 - AI 状态确认 reachable/authenticated/AgentBus ready 后,已提交一次等价且更精简的 C05 解析任务
TASK-20260811023510-HCsZjUY;自动化仍关闭,尚未生成 operation 或写 ERP。 - C05 第二次解析约 25 秒仍为 parse_running,operation 为空;继续保持无插件/无 ERP 状态。
- C05 第二次解析约 50 秒仍未返回 operation;不再并发创建任务,继续等服务端确定终态。
- C05 第二次同样在外部流阶段 120 秒被取消;两次 timeline 都是 session_created → stream_connecting → 120 秒 event_count=0 → external_cancelled,且 no plugin/no ERP。开始检查解析超时配置与 Profile 路由。
- 已完成 C05 的跨层契约核对:Schema、planner 与外部 validator 支持
shared_child_order_create,但lwlt-newbooking及其示例只声明三个创建动作,业务注册表还存在一个指向缺失文件的链接。当前先补齐 Skill、业务入口、fixture 与 parser guidance,再进行一次有明确修复依据的第三次正常解析;不绕过平台直接写 ERP。 - C05 解析修复的首轮回归通过:
lwlt-newbookingquick_validate、外部解析器 38/38、planner 26/26;Skill 包重建并与源码逐文件一致。控制面在无运行任务时由守护进程自动热重启为新 PID,健康检查与 AgentBus ready。 - 第三次 C05
TASK-20260811024927-gzjPwX8已成功解析到人工审核,核心母团/客户/人数事实正确,但丢失测试备注,尚未确认、未派发插件、未写 ERP。 - 已把测试子单备注升级为三层失败关闭规则:母团号含
TEST-202609时,外部 validator、插件 planner 和根 Schema 都要求special_requests含同一标记;新增针对性回归后外部解析器 39/39、planner 27/27、Skill/语法/JSON/diff 均通过。下一步重载该解析契约并创建一次最终 C05 解析。 - 最终 C05 解析
TASK-20260811025402-4b6tqt4成功保留测试备注并经页面人工确认;0.5.11 插件在写前列表定位阶段阻断,write_attempted=false/no_erp_write=true,未创建子单。 - 只读页面确认目标母团约 3 秒后已渲染,故修复为异步稳定等待 + 团号唯一匹配 + 输入/页面 tid
14389交叉校验 + 写后具体子单等待回查。针对性生命周期 17/17 通过。 - 扩展版本升为 0.5.12。全量静态首轮唯一失败是版本断言仍写 0.5.11,修正后业务/插件/解析 111/111、控制面 32/32、TypeScript、五个 Skill、语法、JSON 和 diff 全通过。
dist/ltjt-order-assistant-0.5.12.zip与通用别名均含 18 文件、manifest=0.5.12、源码逐文件一致,SHA-256 均为42368c4fbe78734079d2add1ca4545c20449e6d14d5a085c47c19cb013b0a5bb;lwlt-newbooking.skill当前 SHA-256 为5bda9471015127042525f6a1e2d77ed16eabfaee5c58019a461b1a6fabdac289。- 已在 Chrome 精确重载目标扩展并刷新 ERP/平台;运行时 bridge version/minimum 均为 0.5.12,组织全自动化仍关闭。由于上一任务确定无写,可安全新建一次等价 C05 解析并重试 adapter。
2026-08-11 — C05 完成与名单自动路由缺口
- 0.5.12 已完成 C05 散拼子单:任务
TASK-20260811030233-E_SID8Y,原生DoInfo_orderHTTP 200,子单D14457/ ddid14457在母团LW-260916TEST-202609-R0511-A/ tid14389行内写后回查命中;state、evidence 和 allowlist 已同步。 - P01/P02 16 行合成名单均通过正常外部解析,字段、顺序、marker 与生成输入一致。P01 经人工确认后由插件在页面前置阶段安全阻断,明确
write_attempted=false/no_erp_write=true;P02 保持 awaiting_confirmation,未写 ERP。 - 只读复核已确认 P01 原生路由链为:独立团列表精确行
tr_14385→[修改]/OPEN_update('14453','0',团号)→ 完整/orders_add.asp→[导入]/DaoRuLie('全部','')→/daoru.asp的#DaoruText。打开导入弹窗期间未输入、未提交、未修改 ERP。 - 当前开始实现由 operation refs 驱动的 lifecycle route preparation;完成后升版、全量回归、精确重载,再仅对已证明无写的 P01 建立新任务并继续 P02。
- 已只读确认 P02 路由:母团
tr_14389内具体子单D14457的唯一入口为OPEN_update(14389,14457),目标/plan_order.asp完整表单含 407 个控件、16 行游客及原生DaoRuLie('全部','')。没有填写或保存名单。 - 已从团队安排业务列表只读确认五类原生入口和五个子页;未进入任何主数据模块。实页同时暴露旧加载安全门的三个假阻断:车辆 99 < 140、大交通 130 < 280、其他 135 < 250,下一步改为必需控件/slot/稳定性校验。
- 已从业务页候选确认大交通零额测试资源
机票成本/1220/控位-包位联运票损为唯一三元组;酒店可用万象未确认/947/【TWN】零额候选。其余三类候选仍在只读唯一性复核中。 - 五类候选均已逐页完成唯一性复核并写入本轮 state;车辆/酒店/大交通/其他都锁定精确“ID+名称+项目”,导游锁定“ID+名称”。插件也已加入同样的业务页候选唯一性闸门;未进入或修改任何主数据模块。
2026-08-11 — 0.5.13 静态收口完成,进入真实重放
- 完成 lifecycle route preparation:名单和五类安排现在由 operation 的精确 refs 自主定位,不再要求人工预先打开目标弹窗或子页。
- 完成真实安排页 readiness 校准、资源唯一性证明、radio group 写入修复及对应 Skill/Schema/mapping/fixture 同步。
- 全量测试通过:控制面 32/32,业务/插件/外部解析 95/95,总计 127/127;TypeScript、JS/MJS 语法、JSON、5 个 Skill、
git diff --check均通过。 - 已构建
dist/ltjt-order-assistant-0.5.13.zip和别名包,18 文件且与源码一致,SHA-256e64f4f40a33e7324dbb4e5f149c36963391c18c4616019e5f0cf18efdc4b5c51;dist/lwlt-arrangement.skillSHA-25683b9a92f3f6b590b2cff4f0be49389e5608187f575807bcc7d868decd8fd9de7。 - 下一步:精确重载 Chrome 目标扩展到 0.5.13,刷新 ERP/平台并核对 PING 与组织自动化=false;随后新建 P01 等价任务、确认 P02,并按生成器继续安排→修改→导出→清理→状态→删除。
2026-08-11 — 0.5.14 名单实页安全门收口
- 已把固定扩展 ID 精确重载到 0.5.13,刷新 ERP/平台后 PING 与账号/组织自动化门槛全部通过。
- P01 新任务
TASK-20260811034431-TwHYg2o正常解析、人工确认并自动路由到精确导入弹窗;随后因隐藏 loading 占位和完整团号文本缺失在写前阻断,持久化结果明确write_attempted=false/no_erp_write=true。 - 已完成 0.5.14 修复:loading 文案只读取节点直接文本;精确
tid与必要ddid可作为编辑表单稳定身份,但任何数值不匹配仍失败关闭。 - 完整静态回归通过:TypeScript,控制面 32/32,业务/插件/解析 95/95,总计 127/127;JS/MJS、JSON、5 Skills 和
git diff --check通过。 - 已构建并验证
dist/ltjt-order-assistant-0.5.14.zip与通用别名,均为 18 文件、manifest 0.5.14、源码逐文件一致,SHA-2561d093344f5713f1f7cb4e3717d04570583fe24d02080bb90d3aef67b8d66b9a0。 - 下一步:重载 Chrome 到 0.5.14,核对 PING 后只重试明确无写的 P01;通过后确认仍未写的 P02。
2026-08-11 — 0.5.15 ownership 原生 action 修复
- 已重载 0.5.14 并完成 P01 第三次正常解析/人工确认;路由、16 行表单 readiness 与
tid/ddid身份均通过,ownership HTTP 200 空列表导致写前阻断,仍为确定零写。 - 已从独立团和散拼计划真实
SearchForm读取 action/body:Act必须位于/System/DAT/*.asp?Act=...,发布单位字段为S_fabudanwei,旧裸wode=0不属于原生契约。 - 0.5.15 已改用原生 URL query/body;修正后的只读请求在 C01 上精确返回团号、tid、ddid 和账号证据。
- TypeScript、控制面 32/32、业务/插件/解析 95/95,总计 127/127;JS/MJS、JSON、5 Skills 和 diff 均通过。
dist/ltjt-order-assistant-0.5.15.zip与通用别名均为 18 文件、manifest 0.5.15、源码逐文件一致,SHA-25635aeaff18fcd422096c2176a362221fd859f6e84a3ade3c52db9464b48a01ce6。- 下一步:重载 Chrome 到 0.5.15 后只重试明确无写的 P01;成功后处理 P02。
2026-08-11 — 0.5.16 裸行解析收口
- 0.5.15 P01 首次解析任务
TASK-20260811040441-NIp2qyo在外部输入校验失败,明确未进入插件;等价重试TASK-20260811040614-dV3QMKU正常确认后又在 ownership 行解析阶段保存前阻断,仍为确定零写。 - 已证明 ERP 列表接口返回裸
<tr>,直接 DOMParser 会丢掉行;table/tbody 上下文可唯一恢复tr_14385。 - 0.5.16 已让 ownership/team summary 共用裸行解析,并让 passenger/update/arrangement fresh detail 使用完整编号或稳定
tid/ddididentity。 - 只读注入预演已让 P01 目标 frame 的 readiness 与 ownership 全绿,状态
lifecycle_preflight_ready。 - 127/127、语法、JSON、5 Skills 和 diff 全通过;
dist/ltjt-order-assistant-0.5.16.zip与别名 SHA-256 均为61f6fef70a5bcad86f4a7c6371c40717aa60fb8a31d050523b22f589cd5205e4。 - 下一步:重载 0.5.16,核对运行时门槛后正式重放 P01。
2026-08-11 — 0.5.17 名单真实持久投影收口
- 0.5.16 P01
TASK-20260811041739-Zs1YC0k的路由、readiness、ownership 全通过,原生DaoRuDones()已在未保存 DOM 中运行;真实差异为 NAME 去空白、控件 token 不同和无独立证件类型字段。该任务在网络保存前阻断,明确无 ERP 写入。 - 0.5.17 已改用
pinyinxm/zjhaoma/fazhengri/youxiaori真实投影,同步原生 NAME 归一化;证件类型仅允许护照,并明示报告未单独持久。 - Planner、外部 validator、JSON Schema、mapping、parser guidance 和
lwlt-lifecycleSkill 已同步;非护照样例在三层契约均失败关闭。 - 全量门槛通过:TypeScript;控制面 32/32;业务/插件/解析 96/96;所有相关 JS/MJS、JSON、
git diff --check;5 个 Skill quick validator。 dist/ltjt-order-assistant-0.5.17.zip与通用别名均为 18 文件、manifest 0.5.17、与源码逐文件一致;SHA-256 均为e6104f226aad256b05d018226e11c3cfc56690d0eac2fb24f9fe7e7a16beffb4。- 下一步:精确重载 Chrome 目标扩展到 0.5.17,核对 ERP 账号、bridge 与组织自动化=false,然后通过平台正常任务重放 P01。
2026-08-11 — 0.5.18 整行归一化收口
- 0.5.17 P01
TASK-20260811043638-cd-o31A从平台正常解析、人工确认后进入原生 DOM 解析,16 行只剩16.remark不一致;保存前阻断,server_response=null/write_attempted=false/no_erp_write=true。 - 原生实际对整行先去所有空白再拆列;0.5.18 已将全部真实持久字段的 expected/actual 归一化统一为该规则。
- 全量回归再次通过:TypeScript;控制面 32/32;业务/插件/解析 96/96;语法、JSON、diff、5 Skills。
dist/ltjt-order-assistant-0.5.18.zip与通用别名均为 18 文件、manifest 0.5.18、与源码逐文件一致,SHA-2568d9e47e5c8e7c9f1c630e488a76860d9ee2d317667f33c98b321955d3324c5d9。
2026-08-11 — 0.5.19/0.5.20 P01 只读收敛推进
- P01 0.5.18 已真实保存 16 行并取得明确 HTTP 200;首次 requery 只因日期补零差异进入 uncertain,没有自动重试。
- 0.5.19 增加同 operation/execution 的人工只读回查。首次运行在精确列表路由阶段被
passenger_list_exact_row_not_found_or_ambiguous:2阻断,确认没有附加 ERP 写入。 - 真实 DOM 对照确认重复候选来自隐藏 art-dialog 标题与
tr_14385数据行。0.5.20 已将生命周期唯一行限定为原生业务数据行/业务 action 行。 - 0.5.20 回归通过:TypeScript、控制面 32/32、业务/插件/解析 97/97、语法、44 JSON、5 Skills、diff;两个 18 文件 ZIP 与源码一致,SHA-256
01a8ff40f53254e24334b8cc88f0271a1f3a8c2c83c9bd1476ac1fad1118c492。 - 0.5.20 实页只读多 frame 对照确认 P01 已完全匹配:16 行、16 marker、identity/account 和
ec9d217d…投影 hash 一致;旧 selector 仅因收到 4 份相同成功证据保持待回查。 - 0.5.21 已把名单 reconciliation 限定到唯一
daoru.aspframe;全量回归继续为 32/32 + 97/97,18 文件 ZIP SHA-256276ce1c2d3fe4cee520381c3cf76df1a66c024eee0826e41a58d671b19c2587c。 - P01 正式只读回查完成:原 execution
133192df-30fb-4753-b560-8ff08218684c收敛 completed,16/16、marker 16、投影 hash 完全一致,no_additional_erp_write=true。 - P02 旧任务已正常人工确认,但在散拼子单路由阶段无写阻断;真实入口为
D14457-客户名 / OPEN_update(14389,14457)。 - 0.5.22 已加入专用子单文本边界并覆盖名单/修改/删除;32/32 + 97/97、语法、JSON、5 Skills 全通过,18 文件包 SHA-256
fd08860041b87ff6097b4d0722b488512130c2e5b1ab559df48f2ab6db87364a。 - 0.5.22 P02 页面入口已命中,但 DAT ownership 裸行仍因同一
D14457-客户边界在保存前阻断;表单 403 控件、16 行 ready,明确无写。 - 0.5.23 已同步 ownership exact-row/leaf-row 规则;全量门槛通过,18 文件包 SHA-256
261c82e8e62501054704e65398626afe9465e275362cfd8d4941d2caccdd8957。新 P02 任务TASK-20260811052524-0CxBXdY已入队。
2026-08-11 — 0.5.24 与 P02 完成
- 0.5.23 新 canonical P02 在保存前暴露散拼页面证件号控件
haoma与独立团zjhaoma的真实差异;该 execution 明确write_attempted=false,未重试。 - 0.5.24 已同步 adapter、mapping、Skill、README、平台最低版本和回归契约;TypeScript、控制面 32/32、legacy 99/99、语法、JSON、5 Skills 全通过。
- 已构建并验证两个 18 文件扩展包,manifest=0.5.24、源码逐文件一致,SHA-256
8489f60ea7be77226d0ed32879d171b683fca398a2b47ea7a4f1e5253aa5225d;Chrome runtime/minimum 均为 0.5.24,组织自动化=false。 - P02
TASK-20260811054424-EDZ2f-M已真实完成:HTTP 200“修改成功”,fresh GET 16/16、marker 16、投影 hash 完全一致。下一步执行安排前独立团窄修改 U01。
2026-08-11 — 0.5.25 与 U01 完成
- strict canonical 路径已停止注入无关
passenger_list=none,新增回归通过;旧候选未确认、未进入插件。 - 0.5.25 增加 route 后目标 frame 发现收敛:仅对 scope/page/form 型 blocker 最多读重试 5 秒。全量 TypeScript、32/32、99/99、语法、JSON、5 Skills 通过。
- 已构建/重载 18 文件 0.5.25,源码一致,SHA-256
74752ed883e52ea6aa94898d02df159846bd62685f7d6e1bd95419e54a0b2ce2;runtime/minimum=0.5.25、组织自动化=false。 - U01
TASK-20260811060217-spxiqTg已按原生请求真实探测;HTTP 200 空响应且 fresh GET 仍为空,保持reconciliation_pending并禁止重试。其安排前探针职责已完成,下一步生成含 10 个 create arrangement 的新回放目录。
2026-08-11 — 0.5.32 与 A-I-G 完成
- 0.5.31 修复导游 fresh GET 不含异步候选
data的回查断点;0.5.32 修复团队总表序号与团号文本拼接造成的精确边界误判。 - 全量门槛通过:TypeScript、控制面 32/32、业务/插件/解析 99/99、JS/MJS 语法、JSON、
lwlt-arrangementSkill 和git diff --check。 - 已构建并重载 0.5.32;运行时/最低版本均为 0.5.32,ERP 自动化=true,组织自动化=false。插件 ZIP SHA-256
869491279f66185fa6c117a632b682afb2166d7e503c08f2ca4d9b2ff77ecc7a,Skill 包 SHA-256e52000bb43850bf90979d88c4c6c69086bc420b2b2f2910ba09c430821f779df。 - A-I-G 原 execution 已通过只读 reconciliation 收敛 completed;没有第二次 ERP 写入。下一步按顺序执行 C01 车辆、酒店、大交通、其他/备案。
2026-08-12 — 第二轮全生命周期与清理完成
- 已完成
sept-2026-lifecycle-plugin-e2e2-01的创建 → 名单 → 五类安排 → 散拼窄修改/应收 → 安排和应收清理 → 取消/恢复 → 两阶段导出 → 删除全链路;9 个对象均使用 2026 年 9 月业务日期和TEST-202609-E2E2标记。 - 已冻结逐操作证据、真实 task/execution、原生 payload hash、40 个导出源 hash 和 9 个删除回执。最终聚合探针证明
present=0/9、running_tasks=[],allow_live_write=false、delete_enabled=false、cleanup_completed=true。 - 已将母团取消逐子单 fresh 状态回查纳入 0.5.76,并构建/reload 后完成真实验证。
- 已根据 U01 原生不持久化事实形成 0.5.77:parser、planner、Schema、mapping、adapter 和
lwlt-updating/lifecycleSkill 均不再生成或接受独立团普通字段写入,仅保留精确零额应收清理。 - 已把 lifecycle contract 升至
ltjt-lifecycle-v2.3-second-run-validated-2026-09;最终 replaygenerated/e2e2-phase12为 40 个 operation、0 blocker,且不含删除或独立团普通修改。 - TypeScript、控制平面 32/32、业务/插件/外部解析 105/105、定向生命周期 76/76、5 Skills、JSON、语法和 diff 已全部通过;0.5.77 扩展包与源码逐文件一致,SHA-256
19ed257c48141aae4b1b7e55d4aecfd644d5f776eeaa47fd007678d9fcecb29d。 - 数据库收尾确认 9 个删除任务全部
completed/lifecycle_completed,无活动 lease、无 idle/stale transaction 或 lock waiter。当前仅余 macOS 解锁后的 Chrome 0.5.77 只读运行时核对;统一正式发布仍需业务负责人批准。
2026-08-12 — 第三轮前的原始需求审计启动
- 已重新提取并逐段阅读
运营梳理.rtfd的 10—21 号原文,确认需要把“已验证窄能力”和“原文未来需求”分开登记。 - 已识别散拼批量逐日期子单、独立团宽字段、安排状态/变更、DOCX/定时/外发等未被第二轮证明的范围;下一步建立逐子项覆盖审计,并据此检查 planner、Schema、mapping 与五个 Skills 是否存在误放行或误宣传。
- 已新增
agent设计规范/test-fixtures/lwlt-lifecycle/original-demand-coverage-audit.md,逐项覆盖 10.1—21.6、取消/恢复、独立团宽字段、安排模板和删除收尾;每项按V2/V1/S2/P/B/N/D/X标注真实证据等级。 - 已更新摘要矩阵,明确散拼批量第二轮只证明 3/3 母团创建,未证明 13.6—13.8 的逐日期客户/15+1 子单;第三轮将把这一组合列为专门事实探针。
- 浏览器状态:内置浏览器没有可认领标签,新开 ERP 导航超时;Chrome CDP 等待不到连接,Computer Use 明确返回 Mac 已锁。均未发生 ERP 写入;继续完成本地契约修正,解锁后再进入第三轮。
- 插件 planner 已增加显式
capability_state与契约版本,修正“独立团业务字段修改”为“自动零额应收清理”,修正“确认件导出”为“确认件源读取”,并让 source plan 固定返回scheduled=false/delivery_scope=source_only。 - 已在插件 planner、外部 parser validator/Prompt 和 JSON Schema 增加散拼多日期客户/人数组合测试闸门:普通任务阻断,只有
phase=shared_batch_split_order_probe的完整TEST-202609test context 可进入第三轮事实验证。 confirmation_export现在在 planner、外部 validator 和 Schema 三层拒绝confirmation.format,避免把 source-only 响应误解为 DOCX 转换;Schema 顶层也明确原文宽能力不由当前窄契约隐含。- 当前 JavaScript 语法及 Schema/mapping JSON 解析检查通过。
- lifecycle mapping 已升级为
ltjt-lifecycle-v2.4-original-demand-audited-2026-09,新增validated_core/test_probe_only/blocked_erp/not_live_validated/deferred/outside_authorized_scope能力矩阵,并把误导的narrow_updates=3拆成 3 个探针、2 个持久成功、1 个阻断探针。 - 五个 Skills 及 newbooking/confirmation 直接引用的 handoff/output/normalization 文件已同步:独立团不再生成普通探针;安排状态/变更模板失败关闭;source-only 明确无格式、调度、下载、转换或外发;散拼多日期 split facts 仅允许第三轮 test probe。
- 继续收口 0.5.78 候选:
lifecycle-result.js现要求导出根结果与每个 artifact 都显式scheduled=false;任何定时、下载、转换或发送迹象均不得判为 source-only 成功。尚未进入真实 ERP 写入。 - 新增 planner/外部 parser/JSON Schema 三层的散拼多日期 split facts 探针回归、格式拒绝回归、公开 capability/contract 回归及 source-only
scheduled=false结果回归;定向测试目前 54/54 通过。候选版本已升至 0.5.78,历史 0.5.77 证据保持不变。 - 已修正业务行为/适配注册表、平台标签、三个核心业务入口、生命周期夹具说明、风险表和 Skill UI 元数据中的旧口径:第二轮已完成不再写“待第二轮”;独立团普通字段明确四层阻断;散拼批量客户/15+1 明确仅事实探针;“导出”执行语义统一为不下载、不转换、不定时、不发送的源读取。
- 回放生成器现支持受控
shared_batch_split_order_probe:C04 可在 3 个 9 月日期携带同一来源匹配客户与15+1,只注入专用 test context,不预造任何子单引用或放宽普通任务。生成器/planner/外部 parser/Schema 联合回归现为 61/61 通过。 - 首次全量门槛中 TypeScript、控制平面 32/32 通过;legacy 集合因一条旧测试仍期待“普通多日期 split facts 可通过”而出现 109/110。该测试已改为专用 probe context,重跑 110/110 通过;这是契约预期变更,不是运行时回归。
- 控制平面 source-only 成功回执现与插件同样要求:无 ERP 写入、artifact 数量一致、每份源有有效 HTTP/字节/类型/SHA-256,且根结果与每份 artifact 均为未下载、未转换、未定时、未发送;TypeScript 与控制平面 32/32 回归通过。
- 0.5.78 最终静态候选已通过:控制平面 32/32、全部 MJS 业务/插件/解析 126/126、TypeScript、JS/MJS 语法、JSON、五个 Skill 官方校验及
git diff --check。第三轮 phase1 已生成 4 条创建 operation、0 blocker。 - C04 写后事实门槛审计前的首个 0.5.78 包曾为 SHA-256
04a3b58e925c9a95f05787d9dbaa60fa5ad1c34eee2b30aff8c5c3ba609adfc5;该候选未进入真实 ERP,现已由修复后的同版本候选替代,不再作为当前交付包。 - 内置浏览器连接可建立,但两次访问
https://lwlt.hisy.cc/System/Mainlt.asp均在页面加载/DOM 读取阶段超时,没有进入表单、没有提交、没有 ERP 写入。已把 ERP 地址排队显示到当前任务右侧;等待用户在该内置浏览器完成登录或确认已处于业务首页后继续真实第三轮。 - 已新增第三轮空白删除允许清单和逐阶段证据表;初始
created_objects=[]、export_evidence_frozen=false、delete_authorized=false,不会因准备 fixture 提前获得删除权限。发布门槛已明确区分第二轮真实基线、0.5.78 静态候选和待完成第三轮。 - 一致性审计发现 mapping 的 artifact 字段列表漏写
scheduled=false,现已补齐并增加回归断言;这是文档/契约同步,不改变历史回执。 - 第三轮平台 runner 已增加 C04 独立安全复核:多日期 split facts 必须绑定当前 run、
TEST-202609、测试账号、native baseline、专用 phase 和覆盖全部日期的 target list,且 fixture 不得自授权 live write;新增静态契约回归。 - 第三轮执行前的最后 adapter 审计发现 C04 假阳性风险:当前写后回查只证明母团,不证明逐日期具体子单、客户和
15+1的最终落点。正在把母团tid、子单ddid、客户/人数持久事实和逐日期确定性纳入同一成功门槛;修复完成并全量回归前不进入真实 C04 写入。 - C04 写后事实门槛已实现:三日期逐一要求唯一母团、
tid、完整 child-link 扫描、客户/人数可见性与 outcome;缺证据返回 uncertain,parent-only/mismatch 标记人工复核。README、plan_add mapping、newbooking Skill/handoff/output contract 和第三轮证据表已同步;相关 72/72 回归通过,尚无本轮 ERP 写入。 - C04 adapter 首次修复后的中间候选曾通过控制平面 32/32 与业务/插件/解析 131/131,并生成扩展 SHA-256
3e7596dac0263d1c1fa15c0013c71807698e65b85bb8e119727680593d5a6a75;该候选随后因控制面 direct receipt 假成功缺口被淘汰,未进入真实 ERP。 - 后续控制面审计发现 direct group receipt 会绕过 C04 的
manual_review_required。插件状态判定与控制面成功回执现已同步失败关闭,并增加三日期具体 child facts 的独立成功证明;修改后的定向 TypeScript、控制面 28/28、lifecycle 25/25 已通过,需重新跑全量门槛并重建扩展包,上一条扩展 hash 已被源码更新淘汰。 - 最终静态候选再次全绿:控制平面 33/33、业务/插件/解析 131/131、TypeScript、JS/MJS 语法、23 个当前 JSON、五个 Skill 官方校验和 diff 均通过。0.5.78 扩展包及通用别名均为 18 文件、解包逐文件等同源码,SHA-256
2e5aa876af29b8191af4ac2c71aab80c05e83dedcc32e882d8a18d7c05e67324;五个 Skill 包仍与源码一致,其中 newbooking 为ff99603c4673ffc2c8f96d86fe12a5ac6b6541b5c309cbbf8bfffd717d441317。 - 第三轮 phase0 本地前置已收口:5 条无 ERP attempt 的历史待确认草稿经正式事务路径取消,活动任务 0、组织自动化=false、idle transaction=0;8786 由守护机制拉起源码实例 PID 86215,database/schema/AgentBus ready。新增
preflight-report-live-20260812-e2e3-01.md;当前只阻断在实际浏览器仍为扩展 0.5.76 且内置浏览器无登录标签,未发生第三轮 ERP 写入。 - 已补齐 C04 正式 runner 的关键事实保留,并新增动态引用记录器;第三轮 allowlist 改为 canonical
created_refs。语法、两份运行状态 JSON 与 35 项定向回归通过。 - 当前内置浏览器 API 再次确认
openTabs=[]/allTabs=[];因此尚未核对 ERP 登录账号或进入任何表单,也没有发生第三轮写入。继续完成动态删除顺序和全量静态门禁,同时等待右侧 ERP 标签建立。 - C04 动态清理回归已证明:核心子单加三日期动态子单必须全部先删;任一母团缺少独立 child-free 证明时,所有母团删除均不生成。README 已补充记录器预览/
--apply流程和不授权删除的边界。 - 最新全量静态门禁通过:TypeScript;控制平面 33/33;业务、插件、外部解析与记录工具 135/135;全部当前 JS/MJS 语法、26 个非 generated JSON、五个 Skill 官方 validator、
git diff --check;扩展双包与五个 Skill 包均可解压且逐文件等同源码。扩展包 SHA-256 仍为2e5aa876af29b8191af4ac2c71aab80c05e83dedcc32e882d8a18d7c05e67324。 - 已再次请求在当前任务右侧打开 ERP,但 Codex 返回
queued,内置浏览器 API 仍为零标签;没有因此进入 ERP 或产生写入。
2026-08-12 — 第四轮真实全生命周期、0.5.81 与最终交付
- 已通过本地 Chrome 完成
sept-2026-lifecycle-plugin-e2e4-01:四条创建路线、12 个对象、两次 16 行名单、两组五类安排、散拼窄修改、测试应收、7 次状态转换、40/40 源读取和 12/12 删除。 - C04 散拼批量三日期均形成具体子单并持久客户+15+1;记录器结果完整,
manual_review_required=false。 - 已修复并真实验证 0.5.80/0.5.81:应收与住宿说明完全分离、子单父引用优先
oldtdid、顶层精确清理编辑窗、排除继承业务 URL 的辅助about:blankframe。 - 已冻结 E2E4 前置报告、逐操作证据表、最终 state、allowlist、需求矩阵、逐子项审计、风险登记和发布门槛;最终状态
allow_live_write=false、delete_authorized=false。 - 已同步生命周期 mapping、三份创建 mapping、根 operation Schema、业务注册表、外部 parser guidance 及五个 Skills。
- 五个 Skills 均通过官方 validator 并重新打包;扩展 0.5.81 精确 18 文件,与源码一致,SHA-256
79a9b49035f707d8ca297e7803ab89faf47b14d2bdabb02ce39c948f7ab0c535。 - 最终工程门槛:TypeScript 检查/构建、控制面 33/33、核心回归 117/117、补充回归 18/18、所有当前 JSON、JS/MJS 语法、diff、扩展包与 Skill 包源码一致性全部通过。
- 发布状态更新为“已验证核心候选可提交业务审批;运营原文宽能力继续阻断”,没有扩大到主数据、真实财务、采购、付款、通知、下载、转换、调度或外发。
2026-08-12 — 运营业务 AI 输入模板体系完成
- 完成运营梳理 10—21、需求覆盖审计、现有四个输入入口、根 operation Schema 和五个 Skill 的字段盘点。
- 新增
agent设计规范/templates/business-input-templates.md,按下单、名单、安排、修改/状态、源读取、系统清理和未开放需求登记组织全部输入模板。 - 首行指令、用户事实和内部字段边界已同步到 Agent Prompt、业务行为注册表、业务适配登记表、README、业务适配模板及四个新增业务入口;散拼子单模板不再要求业务人员填写母团
tid。 - 为
lwlt-newbooking、lwlt-arrangement、lwlt-updating、lwlt-confirmation和lwlt-lifecycle分别新增references/input-contract.md并接入主 Skill。 - 新增
tools/business-input-templates.test.mjs并纳入test:legacy,固定检查首行指令、内部 ID 禁止项、路由/Skill 覆盖、用户给出的散拼短模板和需求登记:失败关闭语义。 - 校验通过:模板 5/5、核心回归 122/122、控制面 33/33、TypeScript 无错误、五个 Skill 官方校验通过、
git diff --check通过。 - 五个
.skill包均已重建并逐文件等同源码;SHA-256:newbooking83bfdeeb...cdf48、arrangementd8ddb07d...d5d5f、updating1880d442...763、confirmation7a00d5b1...cb70、lifecyclef9932387...eb6。 - 验证期间默认 shell 无
node,改用工作区捆绑 Node;工作区 Python 无 PyYAML,改用系统 Python 3.14 完成官方 Skill 校验。没有进入 ERP,也没有创建、修改或删除任何 ERP 对象。
2026-08-12 — 运营输入模板最小化修订完成
- 中央模板新增“最小必填速查”,所有模板改成最小必填、其余标注
(选填);系统先按单号读取订单信息,再决定是否追问。 - 修改类不再要求任何修改前值:散拼两类窄修改只收单号+目标值;独立团宽修改、安排变更和真实应收登记也只收目标内容,当前值由 ERP 查询并形成
before_snapshot。 - 名单输入精简为单号+完整名单;取消/恢复精简为单号;团队文件源读取精简为单号+文件类型,接机牌游客姓名按需追问。
- 五类安排移除团队类型、发团日期和固定未确认状态等可推导字段;只保留资源、日期/数量等无法安全推导的安排事实。
清理测试订单已从生产模板、业务行为注册表、业务适配登记表和模板测试移除;底层order_delete不删除,继续仅供测试宿主回收本轮测试对象。- Agent Prompt、五个 Skill 主文件和五份 input contract 已同步。模板回归现为 7/7,核心回归 123/123、控制面 33/33、TypeScript、五 Skill 官方校验、16 文件链接检查和
git diff --check全部通过。 - 五个
.skill包已重建并逐文件等同源码;SHA-256:newbooking75def9f5...378ed、arrangementf10498c7...0877f、updatinge6581003...4f66d、confirmation383e758b...4d06f、lifecycled8b68b64...920e8。本轮没有进入或操作 ERP。
2026-08-12 — 输入模板双段式规范化完成
business-input-templates.md已重构为 21 个连续操作;每项只保留相邻的“模板”和“示例”两个代码块,移除重复速查、能力状态表和散拼计划重复示例。- 全部模板字段显式标注必填/选填并使用占位符;全部示例只使用具体业务值。独立团单个下单和散拼团新增计划两段用户指定示例已锁定为精确回归。
- 五份 Skill 输入契约、四个下单业务页、Agent Prompt、规范 README 和业务适配模板已同步;测试清理仍不属于生产用户操作。
- 模板契约 10/10、核心回归 127/127、控制平面 33/33、TypeScript 和
git diff --check全部通过;五个 Skill 均通过官方 validator。 - 五个
.skill包已重建并逐文件等同源码;SHA-256:newbookingef5cc7f2...6450c、arrangementceb5a024...87981、updating452e9f77...03141、confirmation0134f219...2813、lifecycle35dc55b9...f456。本轮没有进入或操作 ERP。
2026-08-12 — 团队文件业务指令改名完成
- 第 16 项标准输入已改为
导出团队文件,模板和示例首行、章节标题、行为/适配注册表、Agent Prompt、平台任务标签及插件能力标签全部同步。 - 内部 action 继续使用
confirmation_export。当前插件仅取得并校验 ERP 文件源内容;下载、格式处理、定时和传输明确由后续平台模块负责。 - confirmation Skill 与 lifecycle Skill 已同步主规则、references 和
agents/openai.yaml;官方 validator 均通过,制品逐文件等同源码。 - 验证通过:定向 42/42、模板子集 11/11、核心回归 128/128、控制平面 33/33、TypeScript、三个 JS/MJS 语法和
git diff --check。 - 新 Skill 包 SHA-256:confirmation
ac0e651b...fe977、lifecycle4d155817...f0521f。本轮没有进入 ERP 或处理真实团队文件。
2026-08-12 — 修改类归并与暂缓需求清理完成
- 独立团信息修改、安排变更已移入“修改”板块并去掉
需求登记:前缀;修改板块现连续覆盖四项操作。 - 目录重排为 18 项:独立团信息修改/安排变更为 14/15,取消/恢复为 16/17,导出团队文件为 18。
- 原 19—21 已从当前运营模板及五份 Skill 输入表面移除;历史研究和底层安全阻断保留。
- 两项新归并修改仍失败关闭:系统读取当前值并形成差异后转人工复核,
operation=null,不提交 ERP,也不改写成其他 action。 - 验证通过:模板 12/12、核心回归 129/129、控制平面 33/33、TypeScript、外部解析脚本语法和
git diff --check;四个受影响 Skill 均通过官方 validator。 - 四个
.skill包已重建并逐文件等同源码;SHA-256:updating52ac68a3...3bb22、arrangemente43a7ab7...8c1ad、confirmation969ce91a...ed055、lifecyclea85bf154...d51a9。本轮没有操作 ERP。
2026-08-12 — 原需求 17/18 真实执行适配启动
- 用户明确要求原需求 17、18 必须真正可执行,不能只调整模板位置。
- 已恢复既有生命周期事实:独立团普通
booking_note曾出现 HTTP 200/空响应但 fresh 回查未持久;既有安排此前只验证create|clear,没有验证 update/状态变更。 - 已建立五阶段真实适配计划;下一步先逐字段审计原文和代码,再连接用户指定的已登录 Chrome 选择本次专用测试对象。
- Chrome 正式操作台已验证管理员登录、插件 0.5.81 兼容且 ERP 自动化开启;已创建本轮首个独立团测试任务,当前停在解析队列,未进入 ERP。
2026-08-12 — 原需求 17/18 真实执行适配完成
- 创建并逐日期回查 3 个
TEST-202609-U1718C独立团;精确引用为14420/14482、14421/14483、14422/14484。 - 需求 17:插件真实执行
frenshu1 8→9,冻结明确 HTTP 200 成功响应和 fresh GET;证据留存后又执行9→8恢复并再次回查。 - 需求 18:创建未确认酒店 row
88528后,首次 update 因原生回调清空备注而在写前阻断;修复 remark 恢复守卫后,真实执行离店日09-12→09-13、房间数8→9并双回查,随后精确清除该测试行。 - parser、planner、Schema、adapter、mapping、运营模板和 updating/arrangement/lifecycle Skills 已收敛到同一窄白名单;宽字段与状态变更继续失败关闭。
- 0.5.84 已构建、打包并真实重载;平台/插件版本一致、账号与 ERP 会话正常。最终无写回查确认标间数 8、酒店行缺席,3 个订单精确存在且归属/标记匹配。
- 工程门槛通过:TypeScript 检查与构建、控制面 33/33、核心 129/129、三 Skill 官方校验、JSON/JS/MJS 语法、diff 和制品源码一致性。扩展 18 文件,SHA-256
cade01f0973454f43a904c71cec53329076b132486714e39e81b43eea538d3b9。 - 三张惰性订单未删除:本专项没有先冻结导出证据,删除开关与授权保持 false;精确允许清单已交付供用户手动清理或后续补齐前置后自动清理。
2026-08-12 — 插件 0.5.85、三个 Skill 与主提示词完善完成
- 完成主提示词
ltjt-agent-prompt-v1.0-u1718-live:固定 18 类指令的 Skill/action 路由、最小输入、三种解析状态、修改只收目标值、内部引用不向用户索取、无变化不写和统一回执门槛。 - 运行时 parser 内嵌同一路由与状态契约,自然语言结果的
parser_prompt_version由宿主强制固定,不信任供应商回传版本;canonical JSON 保留canonical-json-v1。 - 插件 update adapter 增加目标=当前值检查:已相同字段不再派发 input/change/blur,全部无变化时在 ERP 保存前阻断,
write_attempted=false。 - 使用
skill-creator重构lwlt-updating、lwlt-arrangement、lwlt-lifecycle:主 Skill 只保留可复用流程,新增 operation/execution references,中文 UI 元数据明确引用对应$skill,三项均通过官方 quick validator。 - 验证通过:TypeScript 检查和正式构建、控制面 33/33、插件/解析/生命周期 133/133、JSON、JS/MJS 语法、
git diff --check与制品源码比对。 - 扩展 0.5.85 为 18 文件,版本包与通用别名包 SHA-256 均为
569b858fca9ef1e41dac8564a79c4f860bae6d11947fc601994ce8d3ec9ba58b。Skill 包:updatingf3b8149f...6097f、arrangementf3d43cbd...60ac、lifecycle1bc5e58b...1d256。 - Chrome 已重载新源码;平台
required=0.5.85、插件version=0.5.85、测试 AI 账号匹配、ERP 会话无登录/权限错误。 - 旧 17/18 对象只读回查两次都在路由阶段返回 0 个候选且没有 ERP 写入;用户确认已手动删除全部旧测试订单。因此本轮不伪造对象终态通过,17/18 真实业务事实仍以先前 0.5.84 回执为基线。本轮没有新增、修改或删除 ERP 数据。