Cai
2026-08-21 b5cd4db7bf43d92dcd6f1a58c7be0f2f46ef3ea4
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
$ErrorActionPreference = 'Stop'
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
$utf8NoBom = New-Object System.Text.UTF8Encoding($false)
 
$caseId = 'ANA-ROBOT-INDUSTRY-001'
$runId = 'RUN-ANA-ROBOT-THREEPIECE-ACTUAL-SOURCE-TRACE-001'
$batchId = 'BATCH-ANA-ROBOT-MIGRATION-001'
$base = 'ana-data/cases/机器人案例/ANA-ROBOT-INDUSTRY-001'
$evidenceDir = Join-Path $base 'evidence'
$manifestDir = Join-Path $base 'manifest'
$outputCoreDir = Join-Path $base 'outputs/核心文档'
$suppDir = 'ana-data/cases/机器人案例/supplement/threepiece_source_trace_20260705'
$resultIndex = 'ana-data/result/机器人案例/ANA-ROBOT-INDUSTRY-001/result_index.md'
$logPath = 'ana-doc/机器人案例/案例执行日志.md'
$remainingPath = Join-Path $manifestDir 'remaining_work_plan_20260704.md'
$reviewPath = Join-Path $manifestDir 'review_request_threepiece_actual_source_trace_20260705.md'
$publicManifestPath = Join-Path $evidenceDir 'threepiece_public_source_snapshot_manifest_20260705.csv'
$traceEvidencePath = Join-Path $evidenceDir 'threepiece_actual_source_trace_evidence_20260705.csv'
$gapPath = Join-Path $evidenceDir 'threepiece_actual_source_gap_retained_20260705.csv'
$summaryPath = Join-Path $evidenceDir 'threepiece_actual_source_trace_summary_20260705.json'
 
function RelPath([string]$path) {
  $full = [System.IO.Path]::GetFullPath((Join-Path (Get-Location) $path))
  $root = [System.IO.Path]::GetFullPath((Get-Location).Path)
  return $full.Substring($root.Length + 1).Replace('\','/')
}
 
function FileMeta([string]$path) {
  if (Test-Path -LiteralPath $path) {
    $item = Get-Item -LiteralPath $path
    $hash = (Get-FileHash -Algorithm SHA256 -LiteralPath $path).Hash.ToLowerInvariant()
    [pscustomobject]@{
      exists = $true
      bytes = $item.Length
      mtime = $item.LastWriteTime.ToString('yyyy-MM-dd HH:mm:ssK')
      sha256 = $hash
      rel = (RelPath $path)
    }
  } else {
    [pscustomobject]@{
      exists = $false
      bytes = 0
      mtime = ''
      sha256 = ''
      rel = (RelPath $path)
    }
  }
}
 
function Write-Utf8([string]$path, [string]$text) {
  [System.IO.File]::WriteAllText((Join-Path (Get-Location) $path), $text, $utf8NoBom)
}
 
$ifrPressPath = Join-Path $suppDir 'WEB-IFR-2025-PRESS.html'
$ifrPdfPath = Join-Path $suppDir 'WEB-IFR-2025-EXEC-PDF.pdf'
$ifrPress = FileMeta $ifrPressPath
$ifrPdf = FileMeta $ifrPdfPath
 
$publicRows = @(
  [pscustomobject]@{source_id='WEB-IFR-2025-PRESS';source_type='PUBLIC_OFFICIAL_WEB_SNAPSHOT';source_owner='International Federation of Robotics';source_title='World Robotics 2025 Report press release';source_url='https://ifr.org/ifr-press-releases/news/global-robot-demand-in-factories-doubles-over-10-years';local_path=$ifrPress.rel;fetch_status=$(if($ifrPress.exists){'FETCHED_LOCAL_HTML_SNAPSHOT'}else{'FETCH_FAILED_OR_NOT_AVAILABLE'});sha256=$ifrPress.sha256;bytes=$ifrPress.bytes;evidence_use='仅用于全球工业机器人 2024 装机量/存量趋势的官方线索;不得外推到统一市场规模或公司收入';conclusion_boundary='LIMITED_PUBLIC_OFFICIAL_MARKET_LINE_NOT_OUTPUT_PASS'},
  [pscustomobject]@{source_id='WEB-IFR-2025-EXEC-PDF';source_type='PUBLIC_OFFICIAL_PDF_SNAPSHOT';source_owner='International Federation of Robotics';source_title='World Robotics 2025 Industrial Robots Executive Summary';source_url='https://ifr.org/img/worldrobotics/Executive_Summary_WR_2025_Industrial_Robots.pdf';local_path=$ifrPdf.rel;fetch_status=$(if($ifrPdf.exists){'FETCHED_LOCAL_PDF_SNAPSHOT'}else{'FETCH_FAILED_OR_NOT_AVAILABLE'});sha256=$ifrPdf.sha256;bytes=$ifrPdf.bytes;evidence_use='仅作为 IFR 官方执行摘要快照入口;若引用页码/表格需后续页码级抽取';conclusion_boundary='OFFICIAL_PDF_AVAILABLE_PAGE_EXTRACT_PENDING_NOT_OUTPUT_PASS'},
  [pscustomobject]@{source_id='WEB-MIR-2025-COBOT-PUBLIC-ENTRY';source_type='PUBLIC_ARTICLE_OR_MIRROR_FETCH_TIMEOUT';source_owner='MIR 睿工业 / public entry';source_title='2025年全球协作机器人产业发展白皮书公开入口';source_url='https://www.siarexpo.com/news/show-1553.html';local_path='';fetch_status='FETCH_TIMEOUT_NO_VERIFIED_LOCAL_SNAPSHOT';sha256='';bytes=0;evidence_use='仅登记为待补原始报告/白皮书来源,不能作为已核验 primary source';conclusion_boundary='MIR_SOURCE_LOCATION_PENDING_ORIGINAL_REPORT_NOT_OUTPUT_PASS'},
  [pscustomobject]@{source_id='WEB-OMDIA-2024-HUMANOID-PRESS';source_type='PUBLIC_OFFICIAL_URL_REGISTERED_NOT_FETCHED';source_owner='Omdia';source_title='Omdia humanoid robot shipments forecast press release';source_url='https://omdia.tech.informa.com/pr/2024/jul/omdia-global-humanoid-robot-shipments-to-exceed-10000-units-by-2027-and-reach-38000-units-in-2030';local_path='';fetch_status='URL_REGISTERED_FETCH_NOT_COMPLETED_IN_THIS_RUN';sha256='';bytes=0;evidence_use='仅登记 Omdia 官方预测口径入口,未形成本地快照,不能替代报告页码/定义';conclusion_boundary='PUBLIC_OFFICIAL_URL_REGISTERED_SOURCE_SNAPSHOT_PENDING_NOT_OUTPUT_PASS'},
  [pscustomobject]@{source_id='WEB-AGIBOT-OMDIA-2026-CITE';source_type='SECONDARY_COMPANY_RELEASE_CITING_OMDIA';source_owner='智元机器人 / Agibot';source_title='公司新闻引用 Omdia 2026 人形机器人报告';source_url='https://www.agibot.com/article/231/detail/33.html';local_path='';fetch_status='URL_REGISTERED_SECONDARY_SOURCE_NOT_FETCHED';sha256='';bytes=0;evidence_use='仅作为二级线索,不作为 Omdia 原始报告或强字段升级依据';conclusion_boundary='SECONDARY_CITATION_ONLY_NOT_PRIMARY_SOURCE_NOT_OUTPUT_PASS'}
)
$publicRows | Export-Csv -LiteralPath $publicManifestPath -NoTypeInformation -Encoding UTF8
 
$rows = @(
  [pscustomobject]@{trace_id='TP-AST-20260705-001';case_id=$caseId;run_id=$runId;batch_id=$batchId;linked_scope_id='TP-SCOPE-20260705-001';linked_plan_id='TP-TRACE-INDEX-STATUS';artifact='机器人报告索引.md';field_group='status_index|batch_scope';evidence_layer='GOVERNANCE_TRACE';source_type='PROJECT_MANIFEST';source_title='共享入口和批次状态索引';source_path_or_url='result_index.md; artifact_manifest.csv';evidence_location='result_index 顶部状态;artifact_manifest 最新 run 归属';evidence_value_or_note='仅验证共享入口状态和 hash 归属,不产生市场或公司事实结论';verification_result='GOVERNANCE_TRACE_VERIFIED_NOT_FACT_CONCLUSION';conclusion_strength_after_trace='INDEX_STATUS_ONLY_NOT_FACT_CONCLUSION';gap_id='ROBOT-GAP-INDEX-STATUS-001';impact_scope='单一输出包冻结归属';next_required_action='输出包送审时重新声明共享入口归属并复算 hash';review_status='ACTUAL_SOURCE_TRACE_PREPARED_PENDING_REVIEW_NOT_OUTPUT_PASS'},
  [pscustomobject]@{trace_id='TP-AST-20260705-002';case_id=$caseId;run_id=$runId;batch_id=$batchId;linked_scope_id='TP-SCOPE-20260705-002';linked_plan_id='TP-TRACE-20260705-001';artifact='机器人的市场情况总览.md';field_group='market_size|shipment|penetration|share';evidence_layer='PUBLIC_OFFICIAL_SOURCE_SNAPSHOT';source_type='IFR_OFFICIAL';source_title='IFR World Robotics 2025 press release and executive summary';source_path_or_url='WEB-IFR-2025-PRESS.html; WEB-IFR-2025-EXEC-PDF.pdf';evidence_location='IFR 2025 press release / executive summary snapshot';evidence_value_or_note='可支持全球工业机器人 2024 新装机和存量趋势的有限官方线索;未完成页码级抽取';verification_result='LIMITED_PUBLIC_OFFICIAL_MARKET_LINE_SUPPORTED';conclusion_strength_after_trace='OFFICIAL_SOURCE_SUPPORTS_LIMITED_LINE_PAGE_EXTRACT_PENDING_NOT_OUTPUT_PASS';gap_id='ROBOT-GAP-MARKET-001';impact_scope='工业机器人全球趋势线';next_required_action='如进入输出通过,补 IFR PDF 页码级抽取和定义字段';review_status='ACTUAL_SOURCE_TRACE_PREPARED_PENDING_REVIEW_NOT_OUTPUT_PASS'},
  [pscustomobject]@{trace_id='TP-AST-20260705-003';case_id=$caseId;run_id=$runId;batch_id=$batchId;linked_scope_id='TP-SCOPE-20260705-002';linked_plan_id='TP-TRACE-20260705-001';artifact='机器人的市场情况总览.md';field_group='market_size|shipment|penetration|share';evidence_layer='ARCHIVED_RESEARCH_SOURCE_LOCATION';source_type='LOCAL_ARCHIVED_RESEARCH';source_title='机器人市场梳理结果.md';source_path_or_url='ana-data/cases/机器人案例/raw/existing_research/机器人市场梳理结果.md';evidence_location='lines 50-64 关键市场数据看板';evidence_value_or_note='本地研报整理覆盖 IFR/MIR/GGII/Omdia/弗若斯特沙利文等口径,但未逐项提供原始表格、页码、定义和币种';verification_result='SOURCE_LOCATION_ONLY_NOT_VERIFIED_CONCLUSION';conclusion_strength_after_trace='RESEARCH_SOURCE_LOCATION_RETAINED_GAP_NOT_OUTPUT_PASS';gap_id='ROBOT-GAP-MARKET-001';impact_scope='市场规模、出货、渗透率、份额';next_required_action='逐项补原始报告页码、截图或官方快照,按机构分账,不合并成统一市场规模';review_status='ACTUAL_SOURCE_TRACE_PREPARED_PENDING_REVIEW_NOT_OUTPUT_PASS'},
  [pscustomobject]@{trace_id='TP-AST-20260705-004';case_id=$caseId;run_id=$runId;batch_id=$batchId;linked_scope_id='TP-SCOPE-20260705-003';linked_plan_id='TP-TRACE-20260705-001';artifact='机器人的市场情况总览.md';field_group='shipment|share|regional_market';evidence_layer='PUBLIC_SOURCE_REGISTERED_PENDING_SNAPSHOT';source_type='MIR_PUBLIC_ENTRY';source_title='MIR 协作机器人白皮书公开入口';source_path_or_url='threepiece_public_source_snapshot_manifest_20260705.csv#WEB-MIR-2025-COBOT-PUBLIC-ENTRY';evidence_location='public source manifest row WEB-MIR-2025-COBOT-PUBLIC-ENTRY';evidence_value_or_note='本轮未取得可复核本地快照;协作机器人销量/份额继续保留为待补原始报告口径';verification_result='FETCH_TIMEOUT_ORIGINAL_REPORT_PENDING';conclusion_strength_after_trace='SOURCE_REGISTERED_NOT_VERIFIED_NOT_OUTPUT_PASS';gap_id='ROBOT-GAP-MARKET-002';impact_scope='协作机器人销量、区域份额、增长率';next_required_action='补 MIR 原始白皮书、发布页、页码/表格或人工下载回执';review_status='ACTUAL_SOURCE_TRACE_PREPARED_PENDING_REVIEW_NOT_OUTPUT_PASS'},
  [pscustomobject]@{trace_id='TP-AST-20260705-005';case_id=$caseId;run_id=$runId;batch_id=$batchId;linked_scope_id='TP-SCOPE-20260705-004';linked_plan_id='TP-TRACE-20260705-004';artifact='机器人的市场情况总览.md';field_group='shipment|company_share|customer_supply';evidence_layer='ARCHIVED_RESEARCH_SOURCE_LOCATION';source_type='LOCAL_ARCHIVED_RESEARCH';source_title='机器人市场梳理结果.md + AMR调度与群控运维市场深度梳理结果.md';source_path_or_url='机器人市场梳理结果.md; AMR调度与群控运维市场深度梳理结果.md';evidence_location='市场总览 lines 59, 202, 211-212;AMR 市场文档 lines 10-14, 110-119';evidence_value_or_note='AMR/AGV 出货和项目收费为本地整理线索,未补联盟/Interact Analysis 原始表格、客户项目金额和部署台数';verification_result='SOURCE_LOCATION_ONLY_NOT_VERIFIED_CONCLUSION';conclusion_strength_after_trace='RESEARCH_SOURCE_LOCATION_RETAINED_GAP_NOT_OUTPUT_PASS';gap_id='ROBOT-GAP-MARKET-003';impact_scope='AMR/AGV 出货、客户供货、软件收费';next_required_action='补移动机器人联盟、Interact Analysis、招投标或客户案例原始入口';review_status='ACTUAL_SOURCE_TRACE_PREPARED_PENDING_REVIEW_NOT_OUTPUT_PASS'},
  [pscustomobject]@{trace_id='TP-AST-20260705-006';case_id=$caseId;run_id=$runId;batch_id=$batchId;linked_scope_id='TP-SCOPE-20260705-005';linked_plan_id='TP-TRACE-20260705-001';artifact='机器人的市场情况总览.md';field_group='market_size|shipment|asp_price|penetration';evidence_layer='PUBLIC_OFFICIAL_URL_REGISTERED_AND_SECONDARY_CITATION';source_type='OMDIA_URL_AND_SECONDARY_CITATION';source_title='Omdia humanoid forecast press entry and Agibot secondary citation';source_path_or_url='threepiece_public_source_snapshot_manifest_20260705.csv#WEB-OMDIA-2024-HUMANOID-PRESS; #WEB-AGIBOT-OMDIA-2026-CITE';evidence_location='public source manifest rows WEB-OMDIA-2024-HUMANOID-PRESS and WEB-AGIBOT-OMDIA-2026-CITE';evidence_value_or_note='Omdia 官方 URL 已登记但未形成快照;智元新闻只是引用 Omdia 的二级来源;不升级人形出货强字段';verification_result='URL_REGISTERED_SOURCE_SNAPSHOT_PENDING_SECONDARY_CITATION_ONLY';conclusion_strength_after_trace='SOURCE_REGISTERED_NOT_VERIFIED_NOT_OUTPUT_PASS';gap_id='ROBOT-GAP-MARKET-004';impact_scope='人形机器人出货、市场规模、渗透率、ASP';next_required_action='补 Omdia 原始报告、官方快照、定义说明和是否含测试机字段';review_status='ACTUAL_SOURCE_TRACE_PREPARED_PENDING_REVIEW_NOT_OUTPUT_PASS'},
  [pscustomobject]@{trace_id='TP-AST-20260705-007';case_id=$caseId;run_id=$runId;batch_id=$batchId;linked_scope_id='TP-SCOPE-20260705-006';linked_plan_id='TP-TRACE-20260705-002';artifact='机器人的市场情况总览.md';field_group='asp_price|bom|contract_price';evidence_layer='ARCHIVED_RESEARCH_SOURCE_LOCATION';source_type='LOCAL_ARCHIVED_RESEARCH';source_title='机器人市场梳理结果.md';source_path_or_url='机器人市场梳理结果.md';evidence_location='lines 168-178, 202';evidence_value_or_note='价格带与 ASP 已分层,但官方价、渠道价、招投标、研报 BOM 和合同 ASP 仍未逐样本核验';verification_result='SOURCE_LOCATION_ONLY_NOT_VERIFIED_CONCLUSION';conclusion_strength_after_trace='PRICE_FRAMEWORK_ONLY_NOT_ASP_FACT_CONCLUSION';gap_id='ROBOT-GAP-PRODUCT-001';impact_scope='ASP、BOM、合同价格';next_required_action='逐样本补产品页、商城、招投标、合同或公司披露字段';review_status='ACTUAL_SOURCE_TRACE_PREPARED_PENDING_REVIEW_NOT_OUTPUT_PASS'},
  [pscustomobject]@{trace_id='TP-AST-20260705-008';case_id=$caseId;run_id=$runId;batch_id=$batchId;linked_scope_id='TP-SCOPE-20260705-007';linked_plan_id='TP-TRACE-20260705-003';artifact='机器人的产业链总览.md';field_group='revenue|shipment|customer_supply|capacity_cycle';evidence_layer='ARCHIVED_RESEARCH_SOURCE_LOCATION';source_type='LOCAL_ARCHIVED_RESEARCH';source_title='机器人产业链梳理结果.md';source_path_or_url='机器人产业链梳理结果.md';evidence_location='lines 25-36, 41-50';evidence_value_or_note='产业链骨架和价值流可作为分析框架;收入、销量、客户、产能仍需公司公告、年报或客户侧证据';verification_result='ANALYTICAL_FRAMEWORK_RETAINED_NOT_FACT_VERIFIED';conclusion_strength_after_trace='FRAMEWORK_ONLY_STRONG_FIELDS_RETAINED_AS_GAP';gap_id='ROBOT-GAP-CHAIN-001';impact_scope='总体结论、产业链全景、价值流';next_required_action='补公司级 primary source 和客户侧证据后再考虑输出通过';review_status='ACTUAL_SOURCE_TRACE_PREPARED_PENDING_REVIEW_NOT_OUTPUT_PASS'},
  [pscustomobject]@{trace_id='TP-AST-20260705-009';case_id=$caseId;run_id=$runId;batch_id=$batchId;linked_scope_id='TP-SCOPE-20260705-008';linked_plan_id='TP-TRACE-20260705-005';artifact='机器人的产业链总览.md';field_group='asp_price|customer_supply|capacity|lifetime|yield';evidence_layer='ARCHIVED_RESEARCH_SOURCE_LOCATION';source_type='LOCAL_ARCHIVED_RESEARCH';source_title='机器人产业链梳理结果.md';source_path_or_url='机器人产业链梳理结果.md';evidence_location='lines 68-78, 157-161';evidence_value_or_note='核心零部件价值链、寿命、良率、ASP、产能均为待补证框架,未具备型号/客户/批量级证据';verification_result='SOURCE_LOCATION_ONLY_NOT_VERIFIED_CONCLUSION';conclusion_strength_after_trace='COMPONENT_FRAMEWORK_ONLY_NOT_STRONG_FIELD_CONCLUSION';gap_id='ROBOT-GAP-PRODUCT-002';impact_scope='核心零部件与模组、成本与利润池';next_required_action='补型号级官方披露、客户认证、产能/良率/寿命测试或研报页码';review_status='ACTUAL_SOURCE_TRACE_PREPARED_PENDING_REVIEW_NOT_OUTPUT_PASS'},
  [pscustomobject]@{trace_id='TP-AST-20260705-010';case_id=$caseId;run_id=$runId;batch_id=$batchId;linked_scope_id='TP-SCOPE-20260705-009';linked_plan_id='TP-TRACE-20260705-004';artifact='机器人的产业链总览.md';field_group='supply_stage|designation|main_supply|exclusive_supply';evidence_layer='ARCHIVED_RESEARCH_SOURCE_LOCATION';source_type='LOCAL_ARCHIVED_RESEARCH';source_title='机器人产业链梳理结果.md';source_path_or_url='机器人产业链梳理结果.md';evidence_location='lines 122-125';evidence_value_or_note='供应链阶段和主供/独供判断仍为研报或分析框架线索,未取得客户侧或公告级确认';verification_result='BOUNDARY_DEFINITION_NOT_VERIFIED_COMPANY_CONCLUSION';conclusion_strength_after_trace='SUPPLY_STAGE_FRAMEWORK_ONLY_MAIN_SUPPLY_NOT_VERIFIED';gap_id='ROBOT-GAP-SUPPLY-001';impact_scope='送样、定点、小批量、主供/独供';next_required_action='补客户公告、供应商公告、招投标/合同或正式定点证明';review_status='ACTUAL_SOURCE_TRACE_PREPARED_PENDING_REVIEW_NOT_OUTPUT_PASS'},
  [pscustomobject]@{trace_id='TP-AST-20260705-011';case_id=$caseId;run_id=$runId;batch_id=$batchId;linked_scope_id='TP-SCOPE-20260705-010';linked_plan_id='TP-TRACE-20260705-004';artifact='机器人的产业链总览.md';field_group='company_category|voice_power|customer_supply';evidence_layer='ARCHIVED_RESEARCH_SOURCE_LOCATION';source_type='LOCAL_ARCHIVED_RESEARCH';source_title='机器人产业链梳理结果.md';source_path_or_url='机器人产业链梳理结果.md';evidence_location='lines 122-125, 127-140';evidence_value_or_note='公司类型、话语权、硬字段线索可作为候选分析维度;不等同于公司池确认或客户供应事实';verification_result='ANALYTICAL_CLASSIFICATION_ONLY_NOT_VERIFIED_CONCLUSION';conclusion_strength_after_trace='CLASSIFICATION_FRAMEWORK_ONLY_NOT_COMPANY_FACT';gap_id='ROBOT-GAP-COMPANY-001';impact_scope='公司分类、话语权和客户供应';next_required_action='与公司页事实层、primary source 快照和候选池复审联动';review_status='ACTUAL_SOURCE_TRACE_PREPARED_PENDING_REVIEW_NOT_OUTPUT_PASS'},
  [pscustomobject]@{trace_id='TP-AST-20260705-012';case_id=$caseId;run_id=$runId;batch_id=$batchId;linked_scope_id='TP-SCOPE-20260705-011';linked_plan_id='TP-TRACE-20260705-003';artifact='机器人的产业链总览.md';field_group='revenue|shipment|margin|capacity|customer_supply|asp_price';evidence_layer='CANDIDATE_FACT_EXECUTION_REFERENCE';source_type='PROJECT_EVIDENCE_TABLE';source_title='首批9和第二批核心7字段降读/事实层';source_path_or_url='first_batch9_field_downgrade_scope_20260705.csv; candidate_fact_execution_version_second_batch_core8_20260704.csv';evidence_location='首批9 81 行字段降读;核心8 72 行候选事实执行版';evidence_value_or_note='公司页已建立字段级降读和候选事实层,但强字段仍以缺口/待核验为准,英搏尔仍降级';verification_result='PROJECT_FACT_LAYER_EXISTS_STRONG_FIELDS_DOWNGRADED';conclusion_strength_after_trace='FACT_LAYER_LOCATION_ONLY_NO_STRONG_FIELD_UPGRADE';gap_id='ROBOT-GAP-COMPANY-002';impact_scope='公司机器人收入、毛利、产销量、ASP、客户';next_required_action='补 official primary source、年报页码、公告或客户侧证据,并提交公司输出通过审核';review_status='ACTUAL_SOURCE_TRACE_PREPARED_PENDING_REVIEW_NOT_OUTPUT_PASS'},
  [pscustomobject]@{trace_id='TP-AST-20260705-013';case_id=$caseId;run_id=$runId;batch_id=$batchId;linked_scope_id='TP-SCOPE-20260705-012';linked_plan_id='TP-TRACE-20260705-005';artifact='机器人的产业链总览.md';field_group='profit_pool|bom|share|order_flow';evidence_layer='ARCHIVED_RESEARCH_SOURCE_LOCATION';source_type='LOCAL_ARCHIVED_RESEARCH';source_title='机器人产业链梳理结果.md';source_path_or_url='机器人产业链梳理结果.md';evidence_location='lines 142-149, 157-161';evidence_value_or_note='增量流向、BOM 和利润池为分析框架;不能写成公司收入池、份额或订单流事实';verification_result='ANALYTICAL_FRAMEWORK_RETAINED_NOT_FACT_VERIFIED';conclusion_strength_after_trace='PROFIT_POOL_FRAMEWORK_ONLY_NOT_OUTPUT_PASS';gap_id='ROBOT-GAP-CHAIN-002';impact_scope='增量流向、成本池、利润池';next_required_action='补 BOM 原表、采购价、供应份额、订单/收入确认后才可升级';review_status='ACTUAL_SOURCE_TRACE_PREPARED_PENDING_REVIEW_NOT_OUTPUT_PASS'}
)
$rows | Export-Csv -LiteralPath $traceEvidencePath -NoTypeInformation -Encoding UTF8
 
$gapRows = @(
  [pscustomobject]@{gap_id='ROBOT-GAP-MARKET-001';gap_group='market_size|shipment|penetration|share';affected_artifacts='机器人的市场情况总览.md';retained_reason='除 IFR 工业机器人有限官方线索外,多数市场规模/出货/份额仍来自本地研报整理或公开 URL 登记,缺原始表格/页码/定义';current_status='GAP_RETAINED_PENDING_PRIMARY_SOURCE_AND_PAGE_EXTRACT';impact_scope='不能声明市场口径完整、覆盖完整或输出通过';next_required_evidence='IFR/MIR/GGII/Omdia/弗若斯特沙利文原始报告、页码、表格、截图、币种、年份、是否含测试机/系统集成收入';conclusion_strength='NOT_VERIFIED_STRONG_FIELD'},
  [pscustomobject]@{gap_id='ROBOT-GAP-PRODUCT-001';gap_group='asp_price|bom|contract_price';affected_artifacts='机器人的市场情况总览.md; 机器人的产业链总览.md';retained_reason='价格带和 BOM 已分层,但未逐样本取得官方价、渠道价、招投标、合同或公司披露 ASP';current_status='GAP_RETAINED_PENDING_PRODUCT_LEVEL_PRIMARY_SOURCE';impact_scope='不能升级 ASP、单机价值量、BOM 或毛利判断';next_required_evidence='产品页/商城快照、招投标公告、合同、BOM 原表、公司披露 ASP';conclusion_strength='NOT_VERIFIED_STRONG_FIELD'},
  [pscustomobject]@{gap_id='ROBOT-GAP-COMPANY-001';gap_group='revenue|margin|capacity|shipment|customer_supply';affected_artifacts='机器人的产业链总览.md; 公司页';retained_reason='公司事实层已有降读和来源定位,但强字段多数仍缺官方披露、年报页码、公告或客户侧证据';current_status='GAP_RETAINED_PENDING_COMPANY_PRIMARY_SOURCE';impact_scope='不能确认正式公司池、公司机器人收入或客户供货事实';next_required_evidence='年报页码级抽取、公告、投资者关系原文、客户公告、供应商确认、人工下载回执';conclusion_strength='NOT_VERIFIED_STRONG_FIELD'},
  [pscustomobject]@{gap_id='ROBOT-GAP-SUPPLY-001';gap_group='designation|main_supply|exclusive_supply|order_flow';affected_artifacts='机器人的产业链总览.md';retained_reason='送样、定点、小批量、主供/独供仍主要是研报/分析线索,缺客户侧或公告级确认';current_status='GAP_RETAINED_PENDING_CUSTOMER_OR_CONTRACT_EVIDENCE';impact_scope='不能声明供应链阵营完整、主供/独供或订单兑现';next_required_evidence='客户公告、采购合同、招投标、供应商公告、正式定点证明';conclusion_strength='NOT_VERIFIED_STRONG_FIELD'},
  [pscustomobject]@{gap_id='ROBOT-GAP-CHAIN-002';gap_group='profit_pool|bom|share|order_flow';affected_artifacts='机器人的产业链总览.md';retained_reason='利润池、BOM、增量流向仍是分析框架,缺采购价、份额、订单和收入确认';current_status='GAP_RETAINED_PENDING_BOM_AND_ORDER_EVIDENCE';impact_scope='不能把成本池外推为公司收入池或利润池';next_required_evidence='BOM 原表、采购价、供应份额、订单/收入确认、研报页码级来源';conclusion_strength='FRAMEWORK_ONLY_NOT_VERIFIED_STRONG_FIELD'}
)
$gapRows | Export-Csv -LiteralPath $gapPath -NoTypeInformation -Encoding UTF8
 
$summary = [ordered]@{
  case_id = $caseId
  run_id = $runId
  action_id = 'NEXT-ROBOT-032A'
  generated_at = '2026-07-05T10:48:00+08:00'
  role_instance_id = 'case_analysis.analyst.cai'
  source_gate = 'AUDIT-ANA-ROBOT-THREEPIECE-STRONG-FIELD-REPAIR-001 / msg_20260705102824912_42a6dac6'
  status = 'THREEPIECE_ACTUAL_SOURCE_TRACE_PREPARED_PENDING_REVIEW_NOT_OUTPUT_PASS'
  trace_record_count = $rows.Count
  gap_retained_count = $gapRows.Count
  public_source_manifest_count = $publicRows.Count
  fetched_local_snapshot_count = @($publicRows | Where-Object { $_.fetch_status -match '^FETCHED' }).Count
  source_layer_split = @('PUBLIC_OFFICIAL_SOURCE_SNAPSHOT','PUBLIC_SOURCE_REGISTERED_PENDING_SNAPSHOT','ARCHIVED_RESEARCH_SOURCE_LOCATION','CANDIDATE_FACT_EXECUTION_REFERENCE','GAP_RETAINED_PENDING_PRIMARY_SOURCE')
  allowed_next = 'submit_actual_source_trace_package_for_reviewer_review'
  prohibited = @('output_pass','external_delivery','completion_status','coverage_complete','formal_expansion','formal_company_pool_confirmation','strong_field_upgrade')
  artifacts = @('threepiece_actual_source_trace_evidence_20260705.csv','threepiece_actual_source_gap_retained_20260705.csv','threepiece_public_source_snapshot_manifest_20260705.csv','review_request_threepiece_actual_source_trace_20260705.md')
  note = 'IFR 官方来源仅支持有限工业机器人市场线索;MIR/Omdia/ASP/公司收入/客户供应/利润池等强字段继续保留缺口或待核验,不申请输出通过。'
}
($summary | ConvertTo-Json -Depth 6) | Set-Content -LiteralPath $summaryPath -Encoding UTF8
 
$coreDocs = @(
  (Join-Path $outputCoreDir '机器人报告索引.md'),
  (Join-Path $outputCoreDir '机器人的产业链总览.md'),
  (Join-Path $outputCoreDir '机器人的市场情况总览.md')
)
foreach($doc in $coreDocs){
  $resolved = Resolve-Path -LiteralPath $doc
  $text = [System.IO.File]::ReadAllText($resolved, [System.Text.Encoding]::UTF8)
  $text = $text -replace 'run_id: RUN-ANA-ROBOT-THREEPIECE-STRONG-FIELD-REPAIR-001','run_id: RUN-ANA-ROBOT-THREEPIECE-ACTUAL-SOURCE-TRACE-001'
  $text = $text -replace 'THREEPIECE_STRONG_FIELD_REPAIR_PREPARED','THREEPIECE_ACTUAL_SOURCE_TRACE_PREPARED'
  $text = $text -replace 'THREEPIECE_STRONG_FIELD_REPAIR_CONDITIONALLY_PASSED / NEXT_ROBOT_032A_READY','THREEPIECE_ACTUAL_SOURCE_TRACE_PREPARED / NEXT_ROBOT_032A_REVIEW_REQUEST_PREPARED'
  $block = @'
 
## 0.3 NEXT-ROBOT-032A 实际回源核验证据包
 
本轮已形成三件套实际回源核验证据包:`threepiece_actual_source_trace_evidence_20260705.csv`、`threepiece_actual_source_gap_retained_20260705.csv`、`threepiece_public_source_snapshot_manifest_20260705.csv` 和 `threepiece_actual_source_trace_summary_20260705.json`。IFR 官方快照仅支持全球工业机器人有限市场线索;MIR、Omdia、人形出货、协作机器人、AMR、ASP、公司收入、客户供应、主供 / 独供、BOM 和利润池等仍按缺口或待核验处理。本文继续保持 `DRAFT_FOR_REVIEW / PENDING_OUTPUT_REVIEW / NOT_OUTPUT_PASS`,本轮不申请输出通过、覆盖完整、对外交付、完成状态、正式扩池、正式公司池确认或强字段升级。
'@
  if($text -match '(?s)\r?\n## 0\.3 NEXT-ROBOT-032A 实际回源核验证据包.*?(?=\r?\n---|\r?\n## |\z)'){
    $text = [regex]::Replace($text, '(?s)\r?\n## 0\.3 NEXT-ROBOT-032A 实际回源核验证据包.*?(?=\r?\n---|\r?\n## |\z)', $block)
  } elseif($text -notmatch 'NEXT-ROBOT-032A 实际回源核验证据包'){
    if($text.Contains("`r`n---`r`n")){ $text = $text.Replace("`r`n---`r`n", $block + "`r`n---`r`n") }
    else { $text += $block }
  }
  [System.IO.File]::WriteAllText($resolved, $text, $utf8NoBom)
}
 
$caseMapPath = Join-Path $evidenceDir 'case_evidence_map.csv'
$caseMap = @(Import-Csv -LiteralPath $caseMapPath)
foreach($row in $caseMap){
  if($row.artifact -match '机器人报告索引|机器人的产业链总览|机器人的市场情况总览'){
    $row.evidence_status = 'THREEPIECE_ACTUAL_SOURCE_TRACE_PREPARED_PENDING_REVIEW_NOT_OUTPUT_PASS'
    $row.evidence_entry = 'threepiece_actual_source_trace_evidence_20260705.csv; threepiece_actual_source_gap_retained_20260705.csv; threepiece_public_source_snapshot_manifest_20260705.csv; threepiece_actual_source_trace_summary_20260705.json'
    $row.review_status = 'REVIEW_REQUEST_PREPARED_NOT_OUTPUT_PASS'
  }
}
$caseMap | Export-Csv -LiteralPath $caseMapPath -NoTypeInformation -Encoding UTF8
 
$migrationPath = Join-Path $manifestDir 'migration_manifest.csv'
$migration = @(Import-Csv -LiteralPath $migrationPath)
foreach($row in $migration){
  if($row.target -match '机器人报告索引|产业链总览|市场情况总览'){
    $row.status = 'FROZEN_FORMAL_DRAFT_THREEPIECE_ACTUAL_SOURCE_TRACE_PREPARED_PENDING_REVIEW'
    $row.conclusion_strength = 'DRAFT_FOR_REVIEW_PENDING_OUTPUT_REVIEW_STRONG_FIELDS_RETAINED_AS_GAPS_NOT_OUTPUT_PASS'
    $row.next_action = '提交 NEXT-ROBOT-032A 实际回源核验证据包复审;不申请输出通过、覆盖完整、对外交付或强字段升级。'
  }
}
$migration | Export-Csv -LiteralPath $migrationPath -NoTypeInformation -Encoding UTF8
 
$nextPath = Join-Path $manifestDir 'next_action_list.csv'
$next = @(Import-Csv -LiteralPath $nextPath)
foreach($row in $next){
  if($row.action_id -eq 'NEXT-ROBOT-032A'){
    $row.output = 'threepiece_actual_source_trace_evidence_20260705.csv; threepiece_actual_source_gap_retained_20260705.csv; threepiece_public_source_snapshot_manifest_20260705.csv; threepiece_actual_source_trace_summary_20260705.json; review_request_threepiece_actual_source_trace_20260705.md'
    $row.status = 'REVIEW_REQUEST_PREPARED_THREEPIECE_ACTUAL_SOURCE_TRACE_NOT_OUTPUT_PASS'
  }
}
$next | Export-Csv -LiteralPath $nextPath -NoTypeInformation -Encoding UTF8
 
$appendRemaining = @'
 
## 16. 执行状态更新(RUN-ANA-ROBOT-THREEPIECE-ACTUAL-SOURCE-TRACE-001)
 
- 执行动作:`NEXT-ROBOT-032A` 三件套实际回源核验证据包。
- 已完成证据包:`threepiece_actual_source_trace_evidence_20260705.csv`(13 条)、`threepiece_actual_source_gap_retained_20260705.csv`(5 条)、`threepiece_public_source_snapshot_manifest_20260705.csv`(5 条)和 `threepiece_actual_source_trace_summary_20260705.json`。
- 来源分账:IFR 官方快照仅支持全球工业机器人有限市场线索;MIR/Omdia/AMR/ASP/公司收入/客户供应/主供独供/BOM/利润池继续保留为待补 primary source、页码级抽取或研报原始来源缺口。
- 当前状态:THREEPIECE_ACTUAL_SOURCE_TRACE_PREPARED_PENDING_REVIEW_NOT_OUTPUT_PASS;本轮只提交实际回源核验证据包复审,不申请输出通过、覆盖完整、对外交付、完成状态、正式扩池、正式公司池确认或强字段升级。
'@
$remainingText = [System.IO.File]::ReadAllText((Resolve-Path -LiteralPath $remainingPath), [System.Text.Encoding]::UTF8)
$remainingText = $remainingText -replace 'NEXT_032A_READY','NEXT_032A_REVIEW_REQUEST_PREPARED'
$remainingText = $remainingText -replace 'READY_TO_START','REVIEW_REQUEST_PREPARED'
if($remainingText -match '(?s)\r?\n## 16\..*?RUN-ANA-ROBOT-THREEPIECE-ACTUAL-SOURCE-TRACE-001.*$') {
  $remainingText = [regex]::Replace($remainingText, '(?s)\r?\n## 16\..*?RUN-ANA-ROBOT-THREEPIECE-ACTUAL-SOURCE-TRACE-001.*$', $appendRemaining)
} elseif($remainingText -notmatch 'RUN-ANA-ROBOT-THREEPIECE-ACTUAL-SOURCE-TRACE-001') { $remainingText += $appendRemaining }
[System.IO.File]::WriteAllText((Resolve-Path -LiteralPath $remainingPath), $remainingText, $utf8NoBom)
 
$resultText = [System.IO.File]::ReadAllText((Resolve-Path -LiteralPath $resultIndex), [System.Text.Encoding]::UTF8)
$resultText = $resultText -replace 'THREEPIECE_STRONG_FIELD_REPAIR_CONDITIONALLY_PASSED / NEXT_ROBOT_032A_READY','THREEPIECE_ACTUAL_SOURCE_TRACE_PREPARED / NEXT_ROBOT_032A_REVIEW_REQUEST_PREPARED'
$appendResult = @'
 
## 2026-07-05 三件套实际回源核验证据包
 
`NEXT-ROBOT-032A` 已形成实际回源核验证据包,入口包括:
 
- [三件套实际回源核验证据表](../../../cases/机器人案例/ANA-ROBOT-INDUSTRY-001/evidence/threepiece_actual_source_trace_evidence_20260705.csv)
- [三件套保留缺口表](../../../cases/机器人案例/ANA-ROBOT-INDUSTRY-001/evidence/threepiece_actual_source_gap_retained_20260705.csv)
- [公开来源快照 manifest](../../../cases/机器人案例/ANA-ROBOT-INDUSTRY-001/evidence/threepiece_public_source_snapshot_manifest_20260705.csv)
- [复审请求](../../../cases/机器人案例/ANA-ROBOT-INDUSTRY-001/manifest/review_request_threepiece_actual_source_trace_20260705.md)
 
当前状态为 `THREEPIECE_ACTUAL_SOURCE_TRACE_PREPARED_PENDING_REVIEW_NOT_OUTPUT_PASS`。IFR 官方快照仅作为有限工业机器人市场线索;MIR、Omdia、人形出货、协作机器人、AMR、ASP、公司收入、客户供应、主供/独供、BOM 和利润池等仍需补 primary source、页码级抽取、人工回执或研报原始来源。本轮不申请输出通过、覆盖完整、对外交付、完成状态、正式扩池、正式公司池确认或强字段升级。
'@
if($resultText -match '(?s)\r?\n## 2026-07-05 三件套实际回源核验证据包.*$') {
  $resultText = [regex]::Replace($resultText, '(?s)\r?\n## 2026-07-05 三件套实际回源核验证据包.*$', $appendResult)
} elseif($resultText -notmatch '三件套实际回源核验证据包') { $resultText += $appendResult }
[System.IO.File]::WriteAllText((Resolve-Path -LiteralPath $resultIndex), $resultText, $utf8NoBom)
 
$logText = [System.IO.File]::ReadAllText((Resolve-Path -LiteralPath $logPath), [System.Text.Encoding]::UTF8)
$appendLog = @'
 
## 2026-07-05 RUN-ANA-ROBOT-THREEPIECE-ACTUAL-SOURCE-TRACE-001
 
承接 `AUDIT-ANA-ROBOT-THREEPIECE-STRONG-FIELD-REPAIR-001` 的有条件通过结论,已执行 `NEXT-ROBOT-032A` 三件套实际回源核验证据包准备。
 
- 新增 `threepiece_actual_source_trace_evidence_20260705.csv`,共 13 条实际回源核验记录,按公开官方来源、本地归档研报定位、项目事实层引用和保留缺口分账。
- 新增 `threepiece_actual_source_gap_retained_20260705.csv`,共 5 条保留缺口,覆盖市场规模/出货、ASP/BOM、公司收入/产能/客户、供应链主供/独供和利润池。
- 新增 `threepiece_public_source_snapshot_manifest_20260705.csv`,本地已落地 IFR 新闻页和执行摘要 PDF;MIR/Omdia/智元引用等公开入口登记为未完成快照或二级线索,不作为强字段升级依据。
- 三件套、`case_evidence_map.csv`、`migration_manifest.csv`、`next_action_list.csv`、`remaining_work_plan_20260704.md` 和 `result_index.md` 已同步为 `THREEPIECE_ACTUAL_SOURCE_TRACE_PREPARED_PENDING_REVIEW_NOT_OUTPUT_PASS`。
- 本轮不申请输出通过、覆盖完整、对外交付、完成状态、正式扩池、正式公司池确认或强字段升级。
'@
if($logText -match '(?s)\r?\n## 2026-07-05 RUN-ANA-ROBOT-THREEPIECE-ACTUAL-SOURCE-TRACE-001.*$') {
  $logText = [regex]::Replace($logText, '(?s)\r?\n## 2026-07-05 RUN-ANA-ROBOT-THREEPIECE-ACTUAL-SOURCE-TRACE-001.*$', $appendLog)
} elseif($logText -notmatch 'RUN-ANA-ROBOT-THREEPIECE-ACTUAL-SOURCE-TRACE-001') { $logText += $appendLog }
[System.IO.File]::WriteAllText((Resolve-Path -LiteralPath $logPath), $logText, $utf8NoBom)
 
$review = @'
# 三件套实际回源核验证据包复审请求
 
skill_alias:route / anarev
from:case_analysis.analyst.cai
to:case_analysis.reviewer.cai
task_id:ANA-ROBOT-INDUSTRY-001/RUN-ANA-ROBOT-THREEPIECE-ACTUAL-SOURCE-TRACE-001
related_audit:AUDIT-ANA-ROBOT-THREEPIECE-STRONG-FIELD-REPAIR-001
source_message:msg_20260705102824912_42a6dac6
 
## 申请结论
 
请复审 `NEXT-ROBOT-032A` 三件套实际回源核验证据包是否可作为后续输出通过前补证输入。
 
本轮不申请输出通过、覆盖完整、对外交付、完成状态、正式扩池、正式公司池确认或强字段升级。
 
## 本轮产物
 
1. `ana-data/cases/机器人案例/ANA-ROBOT-INDUSTRY-001/evidence/threepiece_actual_source_trace_evidence_20260705.csv`:13 条实际回源核验记录。
2. `ana-data/cases/机器人案例/ANA-ROBOT-INDUSTRY-001/evidence/threepiece_actual_source_gap_retained_20260705.csv`:5 条保留缺口。
3. `ana-data/cases/机器人案例/ANA-ROBOT-INDUSTRY-001/evidence/threepiece_public_source_snapshot_manifest_20260705.csv`:5 条公开来源快照 / URL / 二级线索登记。
4. `ana-data/cases/机器人案例/ANA-ROBOT-INDUSTRY-001/evidence/threepiece_actual_source_trace_summary_20260705.json`:执行摘要。
5. 三件套核心文档、`case_evidence_map.csv`、`migration_manifest.csv`、`next_action_list.csv`、`remaining_work_plan_20260704.md`、`result_index.md`、`案例执行日志.md` 已同步状态。
6. `artifact_manifest.csv` 已刷新本 run 归属并复算 hash。
 
## 核心边界
 
- IFR 官方快照只支持全球工业机器人有限市场线索;如引用 PDF 页码/表格,仍需后续页码级抽取。
- MIR 协作机器人、Omdia 人形出货、智元引用、AMR、ASP、公司收入、客户供应、主供 / 独供、BOM 和利润池均未升级为强字段事实。
- 本轮把来源分为 `PUBLIC_OFFICIAL_SOURCE_SNAPSHOT`、`PUBLIC_SOURCE_REGISTERED_PENDING_SNAPSHOT`、`ARCHIVED_RESEARCH_SOURCE_LOCATION`、`CANDIDATE_FACT_EXECUTION_REFERENCE` 和 `GAP_RETAINED_PENDING_PRIMARY_SOURCE`。
- 当前三件套仍为 `DRAFT_FOR_REVIEW / PENDING_OUTPUT_REVIEW / NOT_OUTPUT_PASS`。
 
## 自检结果
 
- trace evidence:13 行。
- retained gap:5 行。
- public source manifest:5 行,其中本地成功快照 2 行,未完成快照 / 二级线索 3 行。
- artifact manifest:本 run 归属文件已登记,缺失数 0,sha256 空值 0,sha256 复算 mismatch 0。
- 常见模板变量和敏感凭据扫描:0 命中。
'@
Write-Utf8 $reviewPath $review
 
$artifactPath = Join-Path $manifestDir 'artifact_manifest.csv'
$paths = @(
  (Join-Path $outputCoreDir '机器人报告索引.md'),
  (Join-Path $outputCoreDir '机器人的产业链总览.md'),
  (Join-Path $outputCoreDir '机器人的市场情况总览.md'),
  $traceEvidencePath,
  $gapPath,
  $publicManifestPath,
  $summaryPath,
  $reviewPath,
  $caseMapPath,
  $migrationPath,
  $nextPath,
  $remainingPath,
  $resultIndex,
  $logPath,
  $ifrPressPath,
  $ifrPdfPath
)
$newRows = foreach($path in $paths){
  if(Test-Path -LiteralPath $path){
    $meta = FileMeta $path
    [pscustomobject]@{case_id=$caseId;run_id=$runId;batch_id=$batchId;artifact_path=$meta.rel;sha256=$meta.sha256;bytes=$meta.bytes;mtime=$meta.mtime}
  }
}
$artifact = @(Import-Csv -LiteralPath $artifactPath)
$artifact = @($artifact | Where-Object { $_.run_id -ne $runId }) + @($newRows)
$artifact | Export-Csv -LiteralPath $artifactPath -NoTypeInformation -Encoding UTF8
 
$fullManifest = @(Import-Csv -LiteralPath $artifactPath)
foreach($entry in $fullManifest){
  if(Test-Path -LiteralPath $entry.artifact_path){
    $meta = FileMeta $entry.artifact_path
    $entry.sha256 = $meta.sha256
    $entry.bytes = $meta.bytes
    $entry.mtime = $meta.mtime
  }
}
$fullManifest | Export-Csv -LiteralPath $artifactPath -NoTypeInformation -Encoding UTF8
$fullManifest = @(Import-Csv -LiteralPath $artifactPath)
$missing = 0; $emptySha = 0; $mismatch = 0
foreach($entry in $fullManifest){
  if(-not (Test-Path -LiteralPath $entry.artifact_path)){ $missing++; continue }
  if([string]::IsNullOrWhiteSpace($entry.sha256)){ $emptySha++ }
  else {
    $hash = (Get-FileHash -Algorithm SHA256 -LiteralPath $entry.artifact_path).Hash.ToLowerInvariant()
    if($hash -ne $entry.sha256.ToLowerInvariant()){ $mismatch++ }
  }
}
 
$scanFiles = @($paths | Where-Object { (Test-Path -LiteralPath $_) -and ($_ -match '\.(md|csv|json|txt|html)$') }) + @($artifactPath)
$placeholder = 0; $sensitive = 0
foreach($path in $scanFiles | Select-Object -Unique){
  $text = [System.IO.File]::ReadAllText((Resolve-Path -LiteralPath $path), [System.Text.Encoding]::UTF8)
  if($text -match '\$\(\.|\$extract|TODO_PLACEHOLDER') { $placeholder++ }
  if($text -match '(?i)((password|passwd|pwd|secret|api[_-]?key|access[_-]?token|auth[_-]?token)\s*[:=]\s*\S+|bearer\s+[A-Za-z0-9._-]{10,})') { $sensitive++ }
}
 
[pscustomobject]@{
  trace_rows = @(Import-Csv -LiteralPath $traceEvidencePath).Count
  gap_rows = @(Import-Csv -LiteralPath $gapPath).Count
  public_manifest_rows = @(Import-Csv -LiteralPath $publicManifestPath).Count
  artifact_manifest_rows = $fullManifest.Count
  this_run_artifacts = @($fullManifest | Where-Object { $_.run_id -eq $runId }).Count
  missing = $missing
  empty_sha = $emptySha
  mismatch = $mismatch
  placeholder_file_hits = $placeholder
  sensitive_file_hits = $sensitive
} | Format-List