变更问题修复

This commit is contained in:
andy committed 2026-09-14 16:34:36 +08:00
1 parent 6de4422733
commit 9625110f44
62 files changed
+18116 -95

No files matched your search

@@ -0,0 +1,12 @@
# Original arrangement date year resolution verification
Historical verification evidence for task 20260914-arrangement-original-date-year-01a0858b; active sources and dist/release-manifest.json define current behavior.
- Main-thread final read-only review: PASS. No subagents used under the user constraint; no claim of independent Sol review.
- Typecheck and build: PASS; control-plane 231/231; legacy 353/353; focused parser/VM tests 34/34.
- Original-directory repository check: 8/10, only preserved pre-existing .idea / .DS_Store metadata failures. Byte-verified source copy: 10/10 repository checks. HTTP tests ran only against loopback in the copy, excluding .env files and local metadata. Source manifest reflects the final runtime source; task-record/evidence archival happened afterward.
- Runtime-layout smoke PASS: the external validator loads with only the files copied into the runtime layout. Dockerfile includes the shared operation-plans.js and its CommonJS package scope. An actual Docker image was not built.
- Plugin 0.5.181 ZIP: all 20 entries byte-identical to active extension source; all 7 release artifact hashes pass. Prior plugin 0.5.180 and DOCX 0.5.132 archived without byte changes.
- DOCX 0.5.133: rebuilt from Markdown with the existing builder; bundled LibreOffice and bundled CJK fontconfig rendered 16 pages. All pages visually checked (pages 2-3 pixel-identical to their previously inspected render); no clipping, missing glyphs, blank pages or overlap observed. QA PNGs retained here; PDF is a temporary QA artifact only.
- Regression coverage: past dates independent of current time/group-number digits; explicit and omitted year; mixed and cross-year endpoints; leap day and invalid calendars; unique/missing/multiple ERP rows; original dates and row identity preserved through native hotel replacement; common parsed/dispatch checks and strict full-year execution schema; guide singleton and legacy target-date/create behavior retained; candidate dates appear in the business failure message.
- No real ERP reads/writes, deployment, restarts or external sends. Deploy the service (parser v1.0.12) and plugin 0.5.181 together; no new database migration. Existing failed tasks require a fresh submission with the original input after upgrade; already-stored wrong-year operations are not automatically rewritten or replayed. Real ERP acceptance remains pending.
Binary file not shown.

After

Width:  |  Height:  |  Size: 321 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 243 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 342 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 309 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 353 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 302 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 217 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 197 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 202 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 171 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 231 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 385 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 216 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 186 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 197 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 277 KiB

@@ -0,0 +1,13 @@
# Arrangement page injection regression verification
Historical corrective evidence for task `20260914-arrangement-original-date-year-01a0858b`. Active source and `dist/release-manifest.json` define the current release.
- Root cause: version 0.5.181 loaded operation-plans.js in the service worker but omitted it from DEFAULT_PAGE_ACTION_FILES injected into ERP MAIN. The page returned an empty array when the dependency was absent. Previous tests manually loaded the dependency and missed this wiring failure.
- Before-fix reproduction: using the actual production page-action file list in a fresh VM MAIN realm reproduced candidate_count:0 for a persisted 2027-09-12 to 2027-09-13 hotel row with month/day selectors. The log contains expected failing tests. It is a simulated native form, not a live ERP observation.
- Version 0.5.182 adds the shared module before inpage.js in MAIN injection. Date-based update resolution now checks dependency availability first and surfaces a separate plugin-component error. True zero/multiple matches keep their existing blockers. No date/ID/financial guard was relaxed.
- Updated hotel and unified-arrangement fixtures use the production injection list with window/self/globalThis sharing a fresh page realm. The worker realm is separate. Tests cover original full-year/month-day matching, replacement, no mutations for missing dependency, preserved dates and native IDs, true zero/multiple matches, vehicle/transport/other paths and independent single-guide behavior.
- Main-thread final read-only review: PASS. Compared runtime changes against the archived 0.5.181 ZIP, checked all helper call paths, MAIN-world injection order and route failure propagation. No subagents or independent reviewer claimed.
- Focused tests 33/33; control-plane 231/231; legacy 356/356; typecheck/build PASS. Required original-directory repository check 8/10 due to preserved .idea/.DS_Store metadata and eight Git-ignored logs from the preceding task evidence; original files left unchanged. Byte-verified source copy excludes local metadata, generated output, Git-ignored logs and all non-example .env files before reads: repository 10/10. Legacy HTTP tests used loopback only in this copy.
- Source manifest records the tested source copy before this evidence/task-record append. All runtime and release files remain identical. Test logs are stored as .txt to comply with the repository residue rule.
- Plugin 0.5.182 package: 20 files byte-verified; all seven artifact hashes PASS. Archived 0.5.181 ZIP and manifest preserved unchanged. DOCX 0.5.133 and five Skill 0.5.126 packages unchanged.
- No real ERP access/write, deployment, restart or external send. Real ERP acceptance remains pending. With parser v1.0.12 already deployed, update the plugin to 0.5.182, refresh ERP and submit the original instruction again. Existing failed tasks are not automatically replayed.
@@ -0,0 +1,182 @@
TAP version 13
# Subtest: hotel replacement resolves a dated existing row and uses native linked selection on that row only
not ok 1 - hotel replacement resolves a dated existing row and uses native linked selection on that row only
---
duration_ms: 24.342542
type: 'test'
location: '/Users/andy/IdeaProjects/LWLT-AIBOT/tools/hotel-update-selection.test.mjs:78:1'
failureType: 'testCodeFailure'
error: |-
{"ok":false,"operation":{"action":"arrangement_hotel","data":{"existing_refs":{"identifier":"LW-TEST-HOTEL","kind":"shared_plan"},"arrangement":{"mode":"update","selection":{"start_date":"2026-09-15","end_date":"2026-09-16"},"changes":{"resource":{"name":"测试新酒店TWN","keyword":"测试新酒店TWN"},"room_count":9}}}},"blockers":["arrangement_update_target_candidate_count:0"],"evidence":{"match_count":0,"candidates":[],"value_redacted":true}}
false !== true
code: 'ERR_ASSERTION'
name: 'AssertionError'
expected: true
actual: false
operator: 'strictEqual'
stack: |-
TestContext.<anonymous> (file:///Users/andy/IdeaProjects/LWLT-AIBOT/tools/hotel-update-selection.test.mjs:82:12)
Test.runInAsyncScope (node:async_hooks:214:14)
Test.run (node:internal/test_runner/test:1047:25)
Test.start (node:internal/test_runner/test:944:17)
startSubtestAfterBootstrap (node:internal/test_runner/harness:296:17)
...
# Subtest: fresh ERP MAIN world resolves the reported 2027 hotel update using the actual injection list
not ok 2 - fresh ERP MAIN world resolves the reported 2027 hotel update using the actual injection list
---
duration_ms: 1.650083
type: 'test'
location: '/Users/andy/IdeaProjects/LWLT-AIBOT/tools/hotel-update-selection.test.mjs:109:1'
failureType: 'testCodeFailure'
error: |-
{"ok":false,"operation":{"action":"arrangement_hotel","data":{"existing_refs":{"identifier":"LLW-270911A-A","kind":"shared_plan"},"arrangement":{"mode":"update","selection":{"start_date":"09-12","end_date":"09-13"},"changes":{"resource":{"name":"测试新酒店TWN","keyword":"测试新酒店TWN"},"room_count":10}}}},"blockers":["arrangement_update_target_candidate_count:0"],"evidence":{"match_count":0,"candidates":[],"value_redacted":true}}
false !== true
code: 'ERR_ASSERTION'
name: 'AssertionError'
expected: true
actual: false
operator: 'strictEqual'
stack: |-
TestContext.<anonymous> (file:///Users/andy/IdeaProjects/LWLT-AIBOT/tools/hotel-update-selection.test.mjs:117:10)
Test.runInAsyncScope (node:async_hooks:214:14)
Test.run (node:internal/test_runner/test:1047:25)
Test.processPendingSubtests (node:internal/test_runner/test:744:18)
Test.postRun (node:internal/test_runner/test:1173:19)
Test.run (node:internal/test_runner/test:1101:12)
async startSubtestAfterBootstrap (node:internal/test_runner/harness:296:3)
...
# Subtest: missing page date dependency is diagnosed before matching and never reported as zero ERP records
not ok 3 - missing page date dependency is diagnosed before matching and never reported as zero ERP records
---
duration_ms: 7.780833
type: 'test'
location: '/Users/andy/IdeaProjects/LWLT-AIBOT/tools/hotel-update-selection.test.mjs:127:1'
failureType: 'testCodeFailure'
error: |-
Expected values to be strictly deep-equal:
+ actual - expected
[
+ 'arrangement_update_target_candidate_count:0'
- 'arrangement_date_matcher_unavailable'
]
code: 'ERR_ASSERTION'
name: 'AssertionError'
expected:
0: 'arrangement_date_matcher_unavailable'
actual:
0: 'arrangement_update_target_candidate_count:0'
operator: 'deepStrictEqual'
stack: |-
TestContext.<anonymous> (file:///Users/andy/IdeaProjects/LWLT-AIBOT/tools/hotel-update-selection.test.mjs:132:10)
Test.runInAsyncScope (node:async_hooks:214:14)
Test.run (node:internal/test_runner/test:1047:25)
Test.processPendingSubtests (node:internal/test_runner/test:744:18)
Test.postRun (node:internal/test_runner/test:1173:19)
Test.run (node:internal/test_runner/test:1101:12)
async Test.processPendingSubtests (node:internal/test_runner/test:744:7)
...
# Subtest: hotel replacement stops on ambiguous or missing dated rows before selecting a hotel
not ok 4 - hotel replacement stops on ambiguous or missing dated rows before selecting a hotel
---
duration_ms: 3.943208
type: 'test'
location: '/Users/andy/IdeaProjects/LWLT-AIBOT/tools/hotel-update-selection.test.mjs:137:1'
failureType: 'testCodeFailure'
error: |-
The input did not match the regular expression /target_candidate_count:3/. Input:
'arrangement_update_target_candidate_count:0'
code: 'ERR_ASSERTION'
name: 'AssertionError'
expected:
actual: 'arrangement_update_target_candidate_count:0'
operator: 'match'
stack: |-
TestContext.<anonymous> (file:///Users/andy/IdeaProjects/LWLT-AIBOT/tools/hotel-update-selection.test.mjs:141:10)
Test.runInAsyncScope (node:async_hooks:214:14)
Test.run (node:internal/test_runner/test:1047:25)
Test.processPendingSubtests (node:internal/test_runner/test:744:18)
Test.postRun (node:internal/test_runner/test:1173:19)
Test.run (node:internal/test_runner/test:1101:12)
async Test.processPendingSubtests (node:internal/test_runner/test:744:7)
...
# Subtest: hotel replacement blocks stale row identity, payment, audit and confirmed status
ok 5 - hotel replacement blocks stale row identity, payment, audit and confirmed status
---
duration_ms: 19.082334
type: 'test'
...
# Subtest: hotel replacement rejects native callbacks that change another row or change the record id
ok 6 - hotel replacement rejects native callbacks that change another row or change the record id
---
duration_ms: 5.211
type: 'test'
...
# Subtest: month/day hotel selector freezes the unique actual ERP year and preserves native dates on replacement
not ok 7 - month/day hotel selector freezes the unique actual ERP year and preserves native dates on replacement
---
duration_ms: 4.522
type: 'test'
location: '/Users/andy/IdeaProjects/LWLT-AIBOT/tools/hotel-update-selection.test.mjs:167:1'
failureType: 'testCodeFailure'
error: |-
{"ok":false,"operation":{"action":"arrangement_hotel","data":{"existing_refs":{"identifier":"LW-TEST-HOTEL","kind":"shared_plan"},"arrangement":{"mode":"update","selection":{"start_date":"09-04","end_date":"09-05"},"changes":{"resource":{"name":"测试新酒店TWN","keyword":"测试新酒店TWN"},"room_count":9}}}},"blockers":["arrangement_update_target_candidate_count:0"],"evidence":{"match_count":0,"candidates":[],"value_redacted":true}}
false !== true
code: 'ERR_ASSERTION'
name: 'AssertionError'
expected: true
actual: false
operator: 'strictEqual'
stack: |-
TestContext.<anonymous> (file:///Users/andy/IdeaProjects/LWLT-AIBOT/tools/hotel-update-selection.test.mjs:174:12)
Test.runInAsyncScope (node:async_hooks:214:14)
Test.run (node:internal/test_runner/test:1047:25)
Test.processPendingSubtests (node:internal/test_runner/test:744:18)
Test.postRun (node:internal/test_runner/test:1173:19)
Test.run (node:internal/test_runner/test:1101:12)
async Test.processPendingSubtests (node:internal/test_runner/test:744:7)
...
# Subtest: cross-year duplicate month/day rows remain ambiguous and report original dates before any mutation
not ok 8 - cross-year duplicate month/day rows remain ambiguous and report original dates before any mutation
---
duration_ms: 1.656416
type: 'test'
location: '/Users/andy/IdeaProjects/LWLT-AIBOT/tools/hotel-update-selection.test.mjs:185:1'
failureType: 'testCodeFailure'
error: |-
The input did not match the regular expression /target_candidate_count:2/. Input:
'arrangement_update_target_candidate_count:0'
code: 'ERR_ASSERTION'
name: 'AssertionError'
expected:
actual: 'arrangement_update_target_candidate_count:0'
operator: 'match'
stack: |-
TestContext.<anonymous> (file:///Users/andy/IdeaProjects/LWLT-AIBOT/tools/hotel-update-selection.test.mjs:194:10)
Test.runInAsyncScope (node:async_hooks:214:14)
Test.run (node:internal/test_runner/test:1047:25)
Test.processPendingSubtests (node:internal/test_runner/test:744:18)
Test.postRun (node:internal/test_runner/test:1173:19)
Test.run (node:internal/test_runner/test:1101:12)
async Test.processPendingSubtests (node:internal/test_runner/test:744:7)
...
1..8
# tests 8
# suites 0
# pass 2
# fail 6
# cancelled 0
# skipped 0
# todo 0
# duration_ms 223.368583
Whitespace-only changes.
@@ -0,0 +1,208 @@
TAP version 13
# Subtest: dated updates report missing MAIN-world dependency without changing native fields; guide stays independent
ok 1 - dated updates report missing MAIN-world dependency without changing native fields; guide stays independent
---
duration_ms: 17.965833
type: 'test'
...
# Subtest: guide update resolves the original record and preserves dates and unspecified fields
ok 2 - guide update resolves the original record and preserves dates and unspecified fields
---
duration_ms: 23.540333
type: 'test'
...
# Subtest: vehicle update resolves the original record and preserves dates and unspecified fields
ok 3 - vehicle update resolves the original record and preserves dates and unspecified fields
---
duration_ms: 13.899709
type: 'test'
...
# Subtest: transport update resolves the original record and preserves dates and unspecified fields
ok 4 - transport update resolves the original record and preserves dates and unspecified fields
---
duration_ms: 12.898458
type: 'test'
...
# Subtest: other update resolves the original record and preserves dates and unspecified fields
ok 5 - other update resolves the original record and preserves dates and unspecified fields
---
duration_ms: 22.912166
type: 'test'
...
# Subtest: missing or ambiguous original records never trigger a native selection
ok 6 - missing or ambiguous original records never trigger a native selection
---
duration_ms: 17.746917
type: 'test'
...
# Subtest: old row identity, audit, payment and realized flags stop the update before mutation
ok 7 - old row identity, audit, payment and realized flags stop the update before mutation
---
duration_ms: 36.322083
type: 'test'
...
# Subtest: other update merges filing changes, preserves filing date and omitted zero quantity
ok 8 - other update merges filing changes, preserves filing date and omitted zero quantity
---
duration_ms: 8.858167
type: 'test'
...
# Subtest: date changes are rejected and native callbacks cannot change dates, IDs or other rows
ok 9 - date changes are rejected and native callbacks cannot change dates, IDs or other rows
---
duration_ms: 52.972459
type: 'test'
...
# Subtest: vehicle create AND-filters type and supplier, preserves native description and original dates
ok 10 - vehicle create AND-filters type and supplier, preserves native description and original dates
---
duration_ms: 4.973459
type: 'test'
...
# Subtest: vehicle update AND-filters type and supplier, preserves native description and original dates
ok 11 - vehicle update AND-filters type and supplier, preserves native description and original dates
---
duration_ms: 3.636792
type: 'test'
...
# Subtest: vehicle filter never drops an unmatched type, picks an ambiguous row, or selects a different supplier
ok 12 - vehicle filter never drops an unmatched type, picks an ambiguous row, or selects a different supplier
---
duration_ms: 15.017292
type: 'test'
...
# Subtest: changed vehicle candidates or type cannot reach form mutation after resolution
ok 13 - changed vehicle candidates or type cannot reach form mutation after resolution
---
duration_ms: 12.018209
type: 'test'
...
# Subtest: vehicle filter is nonempty, vehicle-only and outside date selectors or direct changes in every contract
ok 14 - vehicle filter is nonempty, vehicle-only and outside date selectors or direct changes in every contract
---
duration_ms: 12.744167
type: 'test'
...
# Subtest: transport create selects the unique supplier+ticket row through native linkage
ok 15 - transport create selects the unique supplier+ticket row through native linkage
---
duration_ms: 4.802666
type: 'test'
...
# Subtest: transport update selects the unique supplier+ticket row through native linkage
ok 16 - transport update selects the unique supplier+ticket row through native linkage
---
duration_ms: 3.246334
type: 'test'
...
# Subtest: explicit ticket filter never drops a keyword or defaults to the first ambiguous result
ok 17 - explicit ticket filter never drops a keyword or defaults to the first ambiguous result
---
duration_ms: 19.598042
type: 'test'
...
# Subtest: changed ticket description or candidates block before any native call or mutation
ok 18 - changed ticket description or candidates block before any native call or mutation
---
duration_ms: 14.667667
type: 'test'
...
# Subtest: ticket filter is nonempty, transport-only, and never a date selector or direct item update
ok 19 - ticket filter is nonempty, transport-only, and never a date selector or direct item update
---
duration_ms: 17.855958
type: 'test'
...
# Subtest: native transport selection rechecks a filter even after preflight and never falls back to a different ID
ok 20 - native transport selection rechecks a filter even after preflight and never falls back to a different ID
---
duration_ms: 4.512167
type: 'test'
...
# Subtest: vehicle month/day dates pass parsed contracts and resolve to a full-year execution snapshot
ok 21 - vehicle month/day dates pass parsed contracts and resolve to a full-year execution snapshot
---
duration_ms: 2.084208
type: 'test'
...
# Subtest: transport month/day dates pass parsed contracts and resolve to a full-year execution snapshot
ok 22 - transport month/day dates pass parsed contracts and resolve to a full-year execution snapshot
---
duration_ms: 1.752458
type: 'test'
...
# Subtest: other month/day dates pass parsed contracts and resolve to a full-year execution snapshot
ok 23 - other month/day dates pass parsed contracts and resolve to a full-year execution snapshot
---
duration_ms: 2.235833
type: 'test'
...
# Subtest: parsed date-selector validators agree on invalid calendars while execution still requires a full year
ok 24 - parsed date-selector validators agree on invalid calendars while execution still requires a full year
---
duration_ms: 12.039209
type: 'test'
...
# Subtest: ambiguous original dates are surfaced in the route failure message without native ids
ok 25 - ambiguous original dates are surfaced in the route failure message without native ids
---
duration_ms: 1.161667
type: 'test'
...
# Subtest: hotel replacement resolves a dated existing row and uses native linked selection on that row only
ok 26 - hotel replacement resolves a dated existing row and uses native linked selection on that row only
---
duration_ms: 54.031167
type: 'test'
...
# Subtest: fresh ERP MAIN world resolves the reported 2027 hotel update using the actual injection list
ok 27 - fresh ERP MAIN world resolves the reported 2027 hotel update using the actual injection list
---
duration_ms: 5.429083
type: 'test'
...
# Subtest: missing page date dependency is diagnosed before matching and never reported as zero ERP records
ok 28 - missing page date dependency is diagnosed before matching and never reported as zero ERP records
---
duration_ms: 3.653416
type: 'test'
...
# Subtest: hotel replacement stops on ambiguous or missing dated rows before selecting a hotel
ok 29 - hotel replacement stops on ambiguous or missing dated rows before selecting a hotel
---
duration_ms: 7.364125
type: 'test'
...
# Subtest: hotel replacement blocks stale row identity, payment, audit and confirmed status
ok 30 - hotel replacement blocks stale row identity, payment, audit and confirmed status
---
duration_ms: 9.582584
type: 'test'
...
# Subtest: hotel replacement rejects native callbacks that change another row or change the record id
ok 31 - hotel replacement rejects native callbacks that change another row or change the record id
---
duration_ms: 9.761083
type: 'test'
...
# Subtest: month/day hotel selector freezes the unique actual ERP year and preserves native dates on replacement
ok 32 - month/day hotel selector freezes the unique actual ERP year and preserves native dates on replacement
---
duration_ms: 8.962875
type: 'test'
...
# Subtest: cross-year duplicate month/day rows remain ambiguous and report original dates before any mutation
ok 33 - cross-year duplicate month/day rows remain ambiguous and report original dates before any mutation
---
duration_ms: 3.614958
type: 'test'
...
1..33
# tests 33
# suites 0
# pass 33
# fail 0
# cancelled 0
# skipped 0
# todo 0
# duration_ms 845.294792
File diff suppressed because it is too large. Load diff
@@ -0,0 +1 @@
PASS: all 7 active artifact hashes; all 20 plugin ZIP entries byte-identical to source; archived 0.5.181 ZIP hash unchanged. DOCX and five Skill packages unchanged.
@@ -0,0 +1,70 @@
TAP version 13
# Subtest: root contains only governed long-lived entries
ok 1 - root contains only governed long-lived entries
---
duration_ms: 3.354584
type: 'test'
...
# Subtest: project docs are the sole active project memory
ok 2 - project docs are the sole active project memory
---
duration_ms: 2.338916
type: 'test'
...
# Subtest: temporary residue and report outputs do not pollute the repository
ok 3 - temporary residue and report outputs do not pollute the repository
---
duration_ms: 21.997125
type: 'test'
...
# Subtest: dist is an exact versioned release set with valid hashes
ok 4 - dist is an exact versioned release set with valid hashes
---
duration_ms: 4.723417
type: 'test'
...
# Subtest: extension and release baselines agree
ok 5 - extension and release baselines agree
---
duration_ms: 2.363209
type: 'test'
...
# Subtest: packaged Skills and extension runtime match their project sources
ok 6 - packaged Skills and extension runtime match their project sources
---
duration_ms: 139.535833
type: 'test'
...
# Subtest: active Markdown links resolve and current docs do not depend on rolling history
ok 7 - active Markdown links resolve and current docs do not depend on rolling history
---
duration_ms: 37.161125
type: 'test'
...
# Subtest: archive README indexes remain navigable
ok 8 - archive README indexes remain navigable
---
duration_ms: 21.985709
type: 'test'
...
# Subtest: single-source and generated-output boundaries remain explicit
ok 9 - single-source and generated-output boundaries remain explicit
---
duration_ms: 2.424833
type: 'test'
...
# Subtest: runtime image includes both LibreOffice document converters
ok 10 - runtime image includes both LibreOffice document converters
---
duration_ms: 0.5115
type: 'test'
...
1..10
# tests 10
# suites 0
# pass 10
# fail 0
# cancelled 0
# skipped 0
# todo 0
# duration_ms 334.893833
@@ -0,0 +1,132 @@
TAP version 13
# Subtest: root contains only governed long-lived entries
not ok 1 - root contains only governed long-lived entries
---
duration_ms: 25.009833
type: 'test'
location: '/Users/andy/IdeaProjects/LWLT-AIBOT/tools/repository-hygiene.test.mjs:111:1'
failureType: 'testCodeFailure'
error: |-
Expected values to be strictly deep-equal:
+ actual - expected
+ [
+ '.DS_Store',
+ '.idea'
+ ]
- []
code: 'ERR_ASSERTION'
name: 'AssertionError'
expected:
actual:
0: '.DS_Store'
1: '.idea'
operator: 'deepStrictEqual'
stack: |-
TestContext.<anonymous> (file:///Users/andy/IdeaProjects/LWLT-AIBOT/tools/repository-hygiene.test.mjs:114:10)
async Test.run (node:internal/test_runner/test:1054:7)
async startSubtestAfterBootstrap (node:internal/test_runner/harness:296:3)
...
# Subtest: project docs are the sole active project memory
ok 2 - project docs are the sole active project memory
---
duration_ms: 6.383708
type: 'test'
...
# Subtest: temporary residue and report outputs do not pollute the repository
not ok 3 - temporary residue and report outputs do not pollute the repository
---
duration_ms: 331.53425
type: 'test'
location: '/Users/andy/IdeaProjects/LWLT-AIBOT/tools/repository-hygiene.test.mjs:149:1'
failureType: 'testCodeFailure'
error: |-
Expected values to be strictly deep-equal:
+ actual - expected
+ [
+ '.DS_Store',
+ 'archive/evidence/2026-09-14/arrangement-original-date-year-01a0858b/build.log',
+ 'archive/evidence/2026-09-14/arrangement-original-date-year-01a0858b/control-plane-tests.log',
+ 'archive/evidence/2026-09-14/arrangement-original-date-year-01a0858b/focused-tests.log',
+ 'archive/evidence/2026-09-14/arrangement-original-date-year-01a0858b/legacy-tests.log',
+ 'archive/evidence/2026-09-14/arrangement-original-date-year-01a0858b/repository-clean.log',
+ 'archive/evidence/2026-09-14/arrangement-original-date-year-01a0858b/repository-local-metadata.log',
+ 'archive/evidence/2026-09-14/arrangement-original-date-year-01a0858b/runtime-layout-smoke.log',
+ 'archive/evidence/2026-09-14/arrangement-original-date-year-01a0858b/typecheck.log',
+ 'chrome-extension/.DS_Store'
+ ]
- []
code: 'ERR_ASSERTION'
name: 'AssertionError'
expected:
actual:
0: '.DS_Store'
1: 'archive/evidence/2026-09-14/arrangement-original-date-year-01a0858b/build.log'
2: 'archive/evidence/2026-09-14/arrangement-original-date-year-01a0858b/control-plane-tests.log'
3: 'archive/evidence/2026-09-14/arrangement-original-date-year-01a0858b/focused-tests.log'
4: 'archive/evidence/2026-09-14/arrangement-original-date-year-01a0858b/legacy-tests.log'
5: 'archive/evidence/2026-09-14/arrangement-original-date-year-01a0858b/repository-clean.log'
6: 'archive/evidence/2026-09-14/arrangement-original-date-year-01a0858b/repository-local-metadata.log'
7: 'archive/evidence/2026-09-14/arrangement-original-date-year-01a0858b/runtime-layout-smoke.log'
8: 'archive/evidence/2026-09-14/arrangement-original-date-year-01a0858b/typecheck.log'
9: 'chrome-extension/.DS_Store'
operator: 'deepStrictEqual'
stack: |-
TestContext.<anonymous> (file:///Users/andy/IdeaProjects/LWLT-AIBOT/tools/repository-hygiene.test.mjs:153:10)
async Test.run (node:internal/test_runner/test:1054:7)
async Test.processPendingSubtests (node:internal/test_runner/test:744:7)
...
# Subtest: dist is an exact versioned release set with valid hashes
ok 4 - dist is an exact versioned release set with valid hashes
---
duration_ms: 25.2755
type: 'test'
...
# Subtest: extension and release baselines agree
ok 5 - extension and release baselines agree
---
duration_ms: 9.16325
type: 'test'
...
# Subtest: packaged Skills and extension runtime match their project sources
ok 6 - packaged Skills and extension runtime match their project sources
---
duration_ms: 951.288333
type: 'test'
...
# Subtest: active Markdown links resolve and current docs do not depend on rolling history
ok 7 - active Markdown links resolve and current docs do not depend on rolling history
---
duration_ms: 655.337625
type: 'test'
...
# Subtest: archive README indexes remain navigable
ok 8 - archive README indexes remain navigable
---
duration_ms: 105.69625
type: 'test'
...
# Subtest: single-source and generated-output boundaries remain explicit
ok 9 - single-source and generated-output boundaries remain explicit
---
duration_ms: 11.362875
type: 'test'
...
# Subtest: runtime image includes both LibreOffice document converters
ok 10 - runtime image includes both LibreOffice document converters
---
duration_ms: 8.081792
type: 'test'
...
1..10
# tests 10
# suites 0
# pass 8
# fail 2
# cancelled 0
# skipped 0
# todo 0
# duration_ms 2419.608959
+4
View File
@@ -8,3 +8,7 @@ Historical artifacts only; current rules and deliverables are defined by active
- Plugin 0.5.178 and its manifest (instruction DOCX 0.5.132) retained unchanged before hotel-create empty-row binding release 0.5.179.
- `ltjt-order-assistant-0.5.179.zip` 与 `release-manifest-0.5.179-0.5.132.json`:酒店空行新增版本,被 0.5.180 扩展安排修复替代;仅供历史追溯,不是当前发布源。
- Plugin 0.5.180, instruction DOCX 0.5.132 and their manifest are retained unchanged before original-date year resolution release 0.5.181 / DOCX 0.5.133. Historical evidence only; use the active release manifest for deployment.
- Plugin 0.5.181 and its manifest (DOCX 0.5.133) are preserved unchanged before corrective release 0.5.182. Version 0.5.181 omitted the date-matching dependency from ERP MAIN-world injection; its isolated helper tests did not detect this wiring regression. Do not deploy the archived ZIP.
@@ -0,0 +1,69 @@
{
"manifest_version": 1,
"generated_on": "2026-09-14",
"baselines": {
"chrome_extension": "0.5.180",
"skills": "0.5.126",
"business_instruction_docx": "0.5.132",
"agent_prompt": "ltjt-agent-prompt-v1.8-independent-headcount-categories"
},
"artifacts": [
{
"kind": "chrome_extension",
"version": "0.5.180",
"path": "dist/ltjt-order-assistant-0.5.180.zip",
"source": "chrome-extension/ltjt-order-assistant",
"sha256": "1ba4434d5bdec9e476ee29d0e4e7b9c64713c8cbffd501e552d10debbb521a71"
},
{
"kind": "skill",
"name": "lwlt-arrangement",
"version": "0.5.126",
"path": "dist/lwlt-arrangement-0.5.126.skill",
"source": "agent设计规范/skills/lwlt-arrangement",
"sha256": "83770befe3a8e4048eacaeacb567c5139bf8a0b3a49f2b1513c26383422f2a9c"
},
{
"kind": "skill",
"name": "lwlt-confirmation",
"version": "0.5.126",
"path": "dist/lwlt-confirmation-0.5.126.skill",
"source": "agent设计规范/skills/lwlt-confirmation",
"sha256": "543507ed8b68c183d2df6722061b0e927ebb728de4bf254d15f83311c9264018"
},
{
"kind": "skill",
"name": "lwlt-lifecycle",
"version": "0.5.126",
"path": "dist/lwlt-lifecycle-0.5.126.skill",
"source": "agent设计规范/skills/lwlt-lifecycle",
"sha256": "fff3879d9a4143c34ae51e091b91411e55382ad3f5d77c99d6202a005b1ddbd9"
},
{
"kind": "skill",
"name": "lwlt-newbooking",
"version": "0.5.126",
"path": "dist/lwlt-newbooking-0.5.126.skill",
"source": "agent设计规范/skills/lwlt-newbooking",
"sha256": "5eb6a7bf5649a0fcee3fbee488a124e1b1d018a642a3a49ebb5439ccf20ccc2f"
},
{
"kind": "skill",
"name": "lwlt-updating",
"version": "0.5.126",
"path": "dist/lwlt-updating-0.5.126.skill",
"source": "agent设计规范/skills/lwlt-updating",
"sha256": "3bd665207649cbb8e0e5ebb012c916720201fe160eea62bccdf1c3a1f0275d1d"
},
{
"kind": "business_instruction_docx",
"version": "0.5.132",
"path": "dist/老挝联泰AI指令表-0.5.132.docx",
"source": "agent设计规范/templates/business-input-templates.md",
"builder": "tools/build_business_instruction_docx.py",
"sha256": "42358803259d7621b8d313cfcc4ee0df8dbca6336649e116ffca3a4efeae9e4d",
"source_sha256": "e9eafe383d17989f93d3d1bce6be96977880eb3b4592cb9f3975e3e588d07dce",
"builder_sha256": "c162884210da22e3b78368749b66f1f177df5e9fc6155f4fd9954bd516d187f1"
}
]
}
@@ -0,0 +1,69 @@
{
"manifest_version": 1,
"generated_on": "2026-09-14",
"baselines": {
"chrome_extension": "0.5.181",
"skills": "0.5.126",
"business_instruction_docx": "0.5.133",
"agent_prompt": "ltjt-agent-prompt-v1.8-independent-headcount-categories"
},
"artifacts": [
{
"kind": "chrome_extension",
"version": "0.5.181",
"path": "dist/ltjt-order-assistant-0.5.181.zip",
"source": "chrome-extension/ltjt-order-assistant",
"sha256": "5e92b2b7c5c2c9db13da03bba3f6fe8f6f8bebf02ff6e72b21f64f6303986056"
},
{
"kind": "skill",
"name": "lwlt-arrangement",
"version": "0.5.126",
"path": "dist/lwlt-arrangement-0.5.126.skill",
"source": "agent设计规范/skills/lwlt-arrangement",
"sha256": "83770befe3a8e4048eacaeacb567c5139bf8a0b3a49f2b1513c26383422f2a9c"
},
{
"kind": "skill",
"name": "lwlt-confirmation",
"version": "0.5.126",
"path": "dist/lwlt-confirmation-0.5.126.skill",
"source": "agent设计规范/skills/lwlt-confirmation",
"sha256": "543507ed8b68c183d2df6722061b0e927ebb728de4bf254d15f83311c9264018"
},
{
"kind": "skill",
"name": "lwlt-lifecycle",
"version": "0.5.126",
"path": "dist/lwlt-lifecycle-0.5.126.skill",
"source": "agent设计规范/skills/lwlt-lifecycle",
"sha256": "fff3879d9a4143c34ae51e091b91411e55382ad3f5d77c99d6202a005b1ddbd9"
},
{
"kind": "skill",
"name": "lwlt-newbooking",
"version": "0.5.126",
"path": "dist/lwlt-newbooking-0.5.126.skill",
"source": "agent设计规范/skills/lwlt-newbooking",
"sha256": "5eb6a7bf5649a0fcee3fbee488a124e1b1d018a642a3a49ebb5439ccf20ccc2f"
},
{
"kind": "skill",
"name": "lwlt-updating",
"version": "0.5.126",
"path": "dist/lwlt-updating-0.5.126.skill",
"source": "agent设计规范/skills/lwlt-updating",
"sha256": "3bd665207649cbb8e0e5ebb012c916720201fe160eea62bccdf1c3a1f0275d1d"
},
{
"kind": "business_instruction_docx",
"version": "0.5.133",
"path": "dist/老挝联泰AI指令表-0.5.133.docx",
"source": "agent设计规范/templates/business-input-templates.md",
"builder": "tools/build_business_instruction_docx.py",
"sha256": "879f1acc3a6a60842e59ae8396f72d39504ea1f3a4110a9f305d94553b38848c",
"source_sha256": "37b6b689c5c6a80683dd1deeff52a90ac8b4bd3ac0380e6b771dcb557c0918f7",
"builder_sha256": "c162884210da22e3b78368749b66f1f177df5e9fc6155f4fd9954bd516d187f1"
}
]
}