fix(preview+pipeline): 资产键编码归一——7 张全角名图片预览 404 修复;证据文档叙述修正
spec 复审发现(浏览器可见缺陷):manifest 资产行 exact_key 有 7 例为裸形 (文件名含全角括号/顿号/间隔号)——html/redirect 键源数据侧已编码、asset 键来自文件名本体是裸形;浏览器对裸非 ASCII 一律百分号编码后发请求,预览 按请求字节逐字匹配 → 裸键永不命中 → 两页 3 张图破图(dist 文件在盘; 生产面 nginx 先解码不受影响)。修补 pipeline.toManifestRoute:exact_key 归一为 URL 线形(可打印 ASCII 原样、其余 UTF-8 百分号编码大写 hex), target_file 仍盘上裸名、DB/渲染快照域不变。 回归三层:build-pipeline 注入裸全角资产行(红验证);preview-server 2c 非 ASCII redirect → Location → 资产终端 200;e2e 断言 ④c(7 条全查 跟随到终端 200)+ ⑦c(manifest 2772 键全 ASCII 不变量)。spec 复审复跑 (新库全链 job e059bf41)23/23 PASS,浏览器实测 3 张原破图全部加载。 证据文档:§5.2 失败计数修正(5×500+2×mojibake=7 例)、§2 ①c 措辞对齐 断言实义(抽前 3 标题)、§5.5 修补记录、计时/产物/job 面更新至复跑值。 验证:vitest 382 + 主题 26 全绿(408);typecheck 过;lint 裸跑零告警。 Co-Authored-By: Claude Code <noreply@anthropic.com>
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"verdict": "PASS",
|
||||
"generatedAt": "2026-10-22T06:21:14.951Z",
|
||||
"generatedAt": "2026-10-22T07:20:15.759Z",
|
||||
"env": {
|
||||
"node": "v24.13.0",
|
||||
"platform": "win32",
|
||||
@@ -10,55 +10,58 @@
|
||||
},
|
||||
"chain": {
|
||||
"register": {
|
||||
"runId": "20261022T142105-hiapw6",
|
||||
"siteId": "599b435b-0778-4676-8a95-b134546a1eb8",
|
||||
"siteCreated": false,
|
||||
"connectionId": "3c6b9a48-0426-4f01-b822-56c20b5e8208",
|
||||
"runId": "20261022T151903-lhppmd",
|
||||
"siteId": "763a6544-dcdd-43c8-b1a9-11769f4b720a",
|
||||
"siteCreated": true,
|
||||
"connectionId": "05a9f6a7-cf67-4f0f-ac11-a4899378bd08",
|
||||
"snapshots": [
|
||||
{
|
||||
"kind": "wxr",
|
||||
"sha256": "f9bc5d4497a1",
|
||||
"byteSize": 5490399,
|
||||
"reused": true,
|
||||
"reused": false,
|
||||
"copied": false,
|
||||
"durationMs": 15.189599999999928
|
||||
"durationMs": 16.857200000000034
|
||||
},
|
||||
{
|
||||
"kind": "media_bundle",
|
||||
"sha256": "8b674261c104",
|
||||
"byteSize": 172532000,
|
||||
"reused": true,
|
||||
"reused": false,
|
||||
"copied": false,
|
||||
"durationMs": 1288.2132000000001
|
||||
"durationMs": 2684.0553999999997
|
||||
},
|
||||
{
|
||||
"kind": "manual_url_list",
|
||||
"sha256": "c935d444f52b",
|
||||
"byteSize": 143945,
|
||||
"reused": true,
|
||||
"reused": false,
|
||||
"copied": false,
|
||||
"durationMs": 20.976500000000215
|
||||
"durationMs": 24.289099999999962
|
||||
}
|
||||
]
|
||||
},
|
||||
"import": {
|
||||
"jobId": "9d82df35-5c8a-4345-8156-3319c7ac9d67",
|
||||
"jobId": "c7b4fd9d-61d6-46d5-8022-86259a1675ac",
|
||||
"status": "succeeded_with_issues",
|
||||
"reused": true,
|
||||
"reportPath": "D:\\project\\cms-one\\artifacts\\import\\9d82df35-5c8a-4345-8156-3319c7ac9d67\\reports\\import.json"
|
||||
"reused": false,
|
||||
"reportPath": "D:\\project\\cms-one\\artifacts\\import\\c7b4fd9d-61d6-46d5-8022-86259a1675ac\\reports\\import.json"
|
||||
},
|
||||
"publish": {
|
||||
"dryRunCandidates": 0,
|
||||
"publishedCount": 0,
|
||||
"dryRunCandidates": 192,
|
||||
"publishedCount": 192,
|
||||
"upToDateCount": 192,
|
||||
"siteConfigRevision": null
|
||||
"siteConfigRevision": {
|
||||
"created": true,
|
||||
"version": 1
|
||||
}
|
||||
},
|
||||
"build": {
|
||||
"jobId": "619c440c-f579-4647-99dc-2840dcd36f19",
|
||||
"jobId": "e059bf41-0ba6-4539-a9b4-6eb8a75c1b6e",
|
||||
"status": "succeeded",
|
||||
"reused": true,
|
||||
"inputDir": "D:\\project\\cms-one\\artifacts\\jobs\\619c440c-f579-4647-99dc-2840dcd36f19\\input",
|
||||
"reportPath": "D:\\project\\cms-one\\artifacts\\jobs\\619c440c-f579-4647-99dc-2840dcd36f19\\reports\\build.json",
|
||||
"reused": false,
|
||||
"inputDir": "D:\\project\\cms-one\\artifacts\\jobs\\e059bf41-0ba6-4539-a9b4-6eb8a75c1b6e\\input",
|
||||
"reportPath": "D:\\project\\cms-one\\artifacts\\jobs\\e059bf41-0ba6-4539-a9b4-6eb8a75c1b6e\\reports\\build.json",
|
||||
"counts": {
|
||||
"contents": 192,
|
||||
"taxonomies": 6,
|
||||
@@ -71,14 +74,23 @@
|
||||
},
|
||||
"issues": [],
|
||||
"artifacts": {
|
||||
"distPath": "D:\\project\\cms-one\\artifacts\\jobs\\619c440c-f579-4647-99dc-2840dcd36f19\\dist",
|
||||
"distPath": "D:\\project\\cms-one\\artifacts\\jobs\\e059bf41-0ba6-4539-a9b4-6eb8a75c1b6e\\dist",
|
||||
"distSha256": "b97ecbdaa37de096a5b780b9b3b2c889e9156a1c2bb06457cff4686436aa6276",
|
||||
"distByteSize": 122929197,
|
||||
"distFileCount": 1029,
|
||||
"distSha256": "6883e70a1ae31f1f5244fef3315bd57a6c46eb08f078ac84d99373f21c621832",
|
||||
"routeManifestPath": "D:\\project\\cms-one\\artifacts\\jobs\\619c440c-f579-4647-99dc-2840dcd36f19\\route-manifest.json",
|
||||
"routeManifestPath": "D:\\project\\cms-one\\artifacts\\jobs\\e059bf41-0ba6-4539-a9b4-6eb8a75c1b6e\\route-manifest.json",
|
||||
"routeManifestSha256": "5b11f7f11da66dff6dcfac97bc0324178e8ed146227dc5b3df90c2cd49f2486d",
|
||||
"routeManifestByteSize": 812072,
|
||||
"sitemapEntries": 190,
|
||||
"mediaCopied": 836
|
||||
},
|
||||
"marks": []
|
||||
"marks": [
|
||||
"queued",
|
||||
"snapshotting",
|
||||
"building",
|
||||
"validating",
|
||||
"succeeded"
|
||||
]
|
||||
}
|
||||
},
|
||||
"sqlCounts": {
|
||||
@@ -116,14 +128,17 @@
|
||||
]
|
||||
},
|
||||
"timings": {
|
||||
"registerWallMs": 1771,
|
||||
"registerServiceMs": 1750,
|
||||
"importMs": 94,
|
||||
"publishDryRunMs": 87,
|
||||
"publishConfirmMs": 77,
|
||||
"buildTotalMs": 11875,
|
||||
"astroProbeMs": 7486,
|
||||
"smokeMs": 1225
|
||||
"registerWallMs": 2886,
|
||||
"registerServiceMs": 2874,
|
||||
"importMs": 57199,
|
||||
"publishDryRunMs": 6,
|
||||
"publishConfirmMs": 17,
|
||||
"buildTotalMs": 9498,
|
||||
"buildSnapshotMs": 431,
|
||||
"buildBuildingMs": 8880,
|
||||
"buildValidatingReportMs": 174,
|
||||
"astroProbeMs": 4865,
|
||||
"smokeMs": 285
|
||||
},
|
||||
"assertions": [
|
||||
{
|
||||
@@ -196,6 +211,13 @@
|
||||
"pass": true,
|
||||
"note": ""
|
||||
},
|
||||
{
|
||||
"id": "④c 非 ASCII redirect → 资产终端(7 条全查)",
|
||||
"expect": "301 → 跟随 Location 编码形 → 终端 200 + 图片 MIME(exact_key 编码线形命中)",
|
||||
"actual": "[{\"request\":\"/?attachment_id=2835\",\"location\":\"/wp-content/uploads/2024/01/PE-water-supply-pipe-engineering-drawing-of-Wuxi-Wuai-Primary-School-%EF%BC%881%EF%BC%89.jpg\",\"hopStatus\":301,\"terminalStatus\":200,\"terminalContentType\":\"image/jpeg\"},{\"request\":\"/?attachment_id=3125\",\"location\":\"/wp-content/uploads/2024/03/Papua-New-Guinea-Water-Supply-Project-PE-Water-Supply-Pipe%EF%BC%88hesu%EF%BC%89.png\",\"hopStatus\":301,\"terminalStatus\":200,\"terminalContentType\":\"image/png\"},{\"request\":\"/changqing%c2%b7lixiang-cultural-tourism-street-project-steel-mesh-skeleton-pipe-1/\",\"location\":\"/wp-content/uploads/2024/04/Changqing%C2%B7Lixiang-Cultural-Tourism-Street-Project-Steel-Mesh-Skeleton-Pipe-1.png\",\"hopStatus\":301,\"terminalStatus\":200,\"terminalContentType\":\"image/png\"},{\"request\":\"/changqing%c2%b7lixiang-cultural-tourism-street-project-steel-mesh-skeleton-pipe/\",\"location\":\"/wp-content/uploads/2024/04/Changqing%C2%B7Lixiang-Cultural-Tourism-Street-Project-Steel-Mesh-Skeleton-Pipe.jpg\",\"hopStatus\":301,\"terminalStatus\":200,\"terminalContentType\":\"image/jpeg\"},{\"request\":\"/hdpe-carat-pipe/hdpe-carat-pipe-%ef%bc%881%ef%bc%89/\",\"location\":\"/wp-content/uploads/2024/10/HDPE-carat-pipe-%EF%BC%881%EF%BC%89.jpg\",\"hopStatus\":301,\"terminalStatus\":200,\"terminalContentType\":\"image/jpeg\"},{\"request\":\"/product/steel-belt-reinforced-pe-corrugated-pipe/steel-belt-reinforced-pe-corrugated-pipe%e3%80%81-4/\",\"location\":\"/wp-content/uploads/2023/12/Steel-Belt-Reinforced-PE-Corrugated-Pipe%E3%80%81-4.jpg\",\"hopStatus\":301,\"terminalStatus\":200,\"terminalContentType\":\"image/jpeg\"},{\"request\":\"/product/steel-belt-reinforced-pe-corrugated-pipe/steel-belt-reinforced-pe-corrugated-pipe%e3%80%81-5/\",\"location\":\"/wp-content/uploads/2023/12/Steel-Belt-Reinforced-PE-Corrugated-Pipe%E3%80%81-5.jpg\",\"hopStatus\":301,\"terminalStatus\":200,\"terminalContentType\":\"image/jpeg\"}]",
|
||||
"pass": true,
|
||||
"note": ""
|
||||
},
|
||||
{
|
||||
"id": "⑤sitemap 条目数",
|
||||
"expect": "= manifest indexable html 数(190)",
|
||||
@@ -224,10 +246,17 @@
|
||||
"pass": true,
|
||||
"note": ""
|
||||
},
|
||||
{
|
||||
"id": "⑦manifest 键线形",
|
||||
"expect": "全 2772 键纯 ASCII(编码线形——裸非 ASCII 键 = 预览永不命中)",
|
||||
"actual": "nonAsciiKeys=0",
|
||||
"pass": true,
|
||||
"note": ""
|
||||
},
|
||||
{
|
||||
"id": "⑨门禁 validation_runs",
|
||||
"expect": "job succeeded + validation_run PASS(build succeeded 即含门禁通过)",
|
||||
"actual": "job=succeeded runs=[{\"id\":\"6dc3776b-7bd5-4199-aa95-2db8e8a5ea41\",\"status\":\"PASS\",\"rule_version\":\"min-gates-v1\"}] issues=[]",
|
||||
"actual": "job=succeeded runs=[{\"id\":\"6459e0df-dd53-4158-b300-7c610100eeef\",\"status\":\"PASS\",\"rule_version\":\"min-gates-v1\"}] issues=[]",
|
||||
"pass": true,
|
||||
"note": ""
|
||||
},
|
||||
@@ -536,6 +565,57 @@
|
||||
"locationMatch": true
|
||||
}
|
||||
],
|
||||
"a4c": [
|
||||
{
|
||||
"request": "/?attachment_id=2835",
|
||||
"location": "/wp-content/uploads/2024/01/PE-water-supply-pipe-engineering-drawing-of-Wuxi-Wuai-Primary-School-%EF%BC%881%EF%BC%89.jpg",
|
||||
"hopStatus": 301,
|
||||
"terminalStatus": 200,
|
||||
"terminalContentType": "image/jpeg"
|
||||
},
|
||||
{
|
||||
"request": "/?attachment_id=3125",
|
||||
"location": "/wp-content/uploads/2024/03/Papua-New-Guinea-Water-Supply-Project-PE-Water-Supply-Pipe%EF%BC%88hesu%EF%BC%89.png",
|
||||
"hopStatus": 301,
|
||||
"terminalStatus": 200,
|
||||
"terminalContentType": "image/png"
|
||||
},
|
||||
{
|
||||
"request": "/changqing%c2%b7lixiang-cultural-tourism-street-project-steel-mesh-skeleton-pipe-1/",
|
||||
"location": "/wp-content/uploads/2024/04/Changqing%C2%B7Lixiang-Cultural-Tourism-Street-Project-Steel-Mesh-Skeleton-Pipe-1.png",
|
||||
"hopStatus": 301,
|
||||
"terminalStatus": 200,
|
||||
"terminalContentType": "image/png"
|
||||
},
|
||||
{
|
||||
"request": "/changqing%c2%b7lixiang-cultural-tourism-street-project-steel-mesh-skeleton-pipe/",
|
||||
"location": "/wp-content/uploads/2024/04/Changqing%C2%B7Lixiang-Cultural-Tourism-Street-Project-Steel-Mesh-Skeleton-Pipe.jpg",
|
||||
"hopStatus": 301,
|
||||
"terminalStatus": 200,
|
||||
"terminalContentType": "image/jpeg"
|
||||
},
|
||||
{
|
||||
"request": "/hdpe-carat-pipe/hdpe-carat-pipe-%ef%bc%881%ef%bc%89/",
|
||||
"location": "/wp-content/uploads/2024/10/HDPE-carat-pipe-%EF%BC%881%EF%BC%89.jpg",
|
||||
"hopStatus": 301,
|
||||
"terminalStatus": 200,
|
||||
"terminalContentType": "image/jpeg"
|
||||
},
|
||||
{
|
||||
"request": "/product/steel-belt-reinforced-pe-corrugated-pipe/steel-belt-reinforced-pe-corrugated-pipe%e3%80%81-4/",
|
||||
"location": "/wp-content/uploads/2023/12/Steel-Belt-Reinforced-PE-Corrugated-Pipe%E3%80%81-4.jpg",
|
||||
"hopStatus": 301,
|
||||
"terminalStatus": 200,
|
||||
"terminalContentType": "image/jpeg"
|
||||
},
|
||||
{
|
||||
"request": "/product/steel-belt-reinforced-pe-corrugated-pipe/steel-belt-reinforced-pe-corrugated-pipe%e3%80%81-5/",
|
||||
"location": "/wp-content/uploads/2023/12/Steel-Belt-Reinforced-PE-Corrugated-Pipe%E3%80%81-5.jpg",
|
||||
"hopStatus": 301,
|
||||
"terminalStatus": 200,
|
||||
"terminalContentType": "image/jpeg"
|
||||
}
|
||||
],
|
||||
"smoke": {
|
||||
"htmlTotal": 190,
|
||||
"htmlFailures": 0,
|
||||
@@ -544,14 +624,14 @@
|
||||
}
|
||||
},
|
||||
"buildReport": {
|
||||
"distPath": "D:\\project\\cms-one\\artifacts\\jobs\\619c440c-f579-4647-99dc-2840dcd36f19\\dist",
|
||||
"distPath": "D:\\project\\cms-one\\artifacts\\jobs\\e059bf41-0ba6-4539-a9b4-6eb8a75c1b6e\\dist",
|
||||
"distFileCount": 1029,
|
||||
"mediaCopied": 836,
|
||||
"sitemapEntries": 190,
|
||||
"validation": {
|
||||
"ruleVersion": "min-gates-v1",
|
||||
"status": "PASS",
|
||||
"runId": "6dc3776b-7bd5-4199-aa95-2db8e8a5ea41",
|
||||
"runId": "6459e0df-dd53-4158-b300-7c610100eeef",
|
||||
"p0Count": 0,
|
||||
"p2Count": 0
|
||||
},
|
||||
@@ -559,6 +639,6 @@
|
||||
"rewritten": 386,
|
||||
"unresolved": 317
|
||||
},
|
||||
"durationMs": 11875.096499999992
|
||||
"durationMs": 9485.525300000001
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user