变更问题修复
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.
|
||||
|
After Width: | Height: | Size: 321 KiB |
|
After Width: | Height: | Size: 243 KiB |
|
After Width: | Height: | Size: 342 KiB |
|
After Width: | Height: | Size: 309 KiB |
|
After Width: | Height: | Size: 353 KiB |
|
After Width: | Height: | Size: 302 KiB |
|
After Width: | Height: | Size: 217 KiB |
|
After Width: | Height: | Size: 197 KiB |
|
After Width: | Height: | Size: 202 KiB |
|
After Width: | Height: | Size: 171 KiB |
|
After Width: | Height: | Size: 231 KiB |
|
After Width: | Height: | Size: 385 KiB |
|
After Width: | Height: | Size: 216 KiB |
|
After Width: | Height: | Size: 186 KiB |
|
After Width: | Height: | Size: 197 KiB |
|
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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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"
|
||||
}
|
||||
]
|
||||
}
|
||||