# 已核對的持股來源

使用者報告與每日發布採註記模式。本版內建快照的商品名單及
持股日見 [snapshot-coverage.md](snapshot-coverage.md)。
下文保留歷次來源觀察與原嚴格合約作診斷依據，不代表目前每日更新範圍。
透過 `parse_annotated` 取得的數值對帳差異會保留為 `quality_notes`；
市場未知的新列保留未知，缺值不補零，仍拒絕錯身分、錯單位與非法數字。
0055／0056 的公布權重可暫估，但 Summary.fundsize 與 PCF.totalav 的差異
必須明示。新增研究資料及 agent 可用部分先算的流程見
[research-and-annotations.md](research-and-annotations.md)。

v1.2.0 已新增四檔混合／跨市場 ETF 的台股現貨部分，請先讀 [mixed-etfs.md](mixed-etfs.md)。下方原有來源合約仍適用各自商品，不能外推成整家投信支援。

## v1.7.0：內建快照與來源追溯

一般報告不再下載 PyInvest 網站 JSON。套件自帶 GCS 封存還原的快照，缺漏或超過 30 天時由 agent 另取官方檔。下載包不會自行更新；索引中的 generated_at 是打包時間，不是持股日。

`result.json` 的 `delivery="bundled"` 表示由套件交付，`source_kind` 仍是原始來源。`archive_content_sha256` 對應內建索引的 `snapshot_sha256`，計算時排除 fetched_at；報告既有 `snapshot_sha256` 包含原始 fetched_at，兩者用途不同。原始持股日、取得時間、權重與未知欄位不重寫。

## 2026-11-02：四檔每日來源通過驗收（歷史紀錄）

00984A、00993A、00903、00920 已通過 Actions 來源取得及正式 publisher 暫存發布驗收，接入每日抓取。首次驗收的官方持股日均為 **2026-10-30**，股票列數依序為 80、50、30、34。公開快照仍為 96 檔，其中 88 檔為每日來源、8 檔為固定研究。最新日期與執行狀態請見 [snapshot-coverage.md](snapshot-coverage.md)。

持股日採用投信公布的日期，不以抓取日替代。每日執行不代表每天都有新資料。本次僅為單次驗收，不代表多日穩定。來源失敗或資料不合格時，系統會保留上次合格快照並標示錯誤。四檔原有的固定日期快照及其雜湊不會改寫。

股票沿用官方原生 NAV 權重，不放大至 100%。四檔均以 annotated（warn）發布，strict 則均因 quality_notes 不通過。仍未知的項目如下：

- 00903／00920：非股票權重未知；00920 的股份類別／歷史市場證據仍有限制
- 00984A：非股票組成
- 00993A：非股票組成，以及期貨 NAV 權重／底層曝險

未知值不補零。本次發布不代表已取得完整組合，也不代表全部非股票權重已知。

## 2026-10-28 每日來源相容修正

本機重播官方原始回應確認：聯博 00404A 的期貨原生權重揭露至八位小數，
仍只留為來源文字，NAV 與名目曝險保持未知；股票仍要求六位以內。
元大 0053 的 `(3301, 應付申購預收款, PAYABLES)` 依同日 NTD 金額除基金
總 NAV 保留負值，歸入 other；未核對的新代號／名稱仍拒絕。
台新 00936 的 30 檔股票顯示加總 97.5642%，總額 97.5641%，差 0.0001
個百分點，容差只採 `(stock_rows + 1) * 0.00005` 個百分點，包含逐列與
獨立總額各自四位小數的半單位誤差；不重縮放逐股權重，NAV 對帳不放寬。

0055 在本次官方回應已通過原 parser；排程當時缺少的資料物件仍維持拒絕，
沒有以空值補零。00932、00982T 的 GitHub 執行出現 HTTP 403，未繞過或
追加重試，也未據此認定官網在所有環境永久不可用。

排程可明確選擇 `--allow-partial --run-report <fresh_external_path>`：
合格快照與逐檔失敗狀態完成寫入後才產生含 index SHA-256 的完成報告，
失敗商品保留舊快照，該輪不刪歷史；損壞索引、I/O 或報告寫入失敗仍非零
退出。未使用此選項的 CLI 維持原本任一來源失敗即非零的行為。
workflow 驗證完成報告後才提交資料；有失敗來源時在提交後標示 job 失敗，
讓合格資料可前進且告警保留。這份描述不代表新 workflow 已遠端驗收。

## v1.1.0：2026-10-27實跑與發布範圍

歷史樣本合格的10檔已做一次本機官方HTTPS實跑：16次順序請求均HTTP200，
共1,033,584bytes、46.60秒，沒有重試或額外搜尋。復華00929、富蘭克林華美
00905、台新00936、兆豐00932、玉山009803、第一金00728、摩根00401A、
聯博00404A通過；玉山實際持股日2026-10-27，另外七檔仍為2026-10-22，
保留原始日期與取得時間，不把HTTP200當成當日資料或完整性證明。

永豐00888同頁資產日10/22、上方NAV日10/27；野村00935最新資產／NAV日
10/27，當次PCF仍是10/22，NAV也不同。兩檔都被既有交叉驗證拒絕，
目前轉為 official_only，由 agent 取同日且合格的官方完整檔；不追加抓取、
不放寬日期或分母。凱基00915與聯邦009804亦維持 agent 官方備援及原資格
停止條件。本輪這四檔均不加入自動發布，避免單檔不合格阻塞每日整批流程。

本版registry共45檔，36 HTTP、9 official_only；資料工作依相同名單更新。
公開快照／備援完整清單與更新流程見[snapshot-coverage.md](snapshot-coverage.md)。
原五家取得受限來源仍由agent官方備援，未列自動registry。單一代表商品的
資格不外推整家投信，單次本機成功亦不等同Actions或持續排程驗收。

原生百分比來源採原始比例，不用 stocks-normalized 權重。HTML 完整列表、
desktop/mobile 副本、來源分類總額／NAV、同日另一資產 API 與原生表頭等
形成各家交叉證據，限制另見 source fixture 的 qualification/native-contract。
這些證據不等於獨立審計；捨入界限無法完全排除極小或零權重的來源缺漏。
沒有將缺資料補零，也不對無法證明的來源放寬驗證。

兆豐採 018 原始產品頁的實際資產區，其股票原生合計為 97.79%，日期
2026-10-22；不能沿用 019 PCF 的 97.75% 或公告日期 2026-10-27。
第一金保留 31 筆包含零權重殘存部位，以 group1/5 核對；不使用未證明日期
的 PCF NAV 重算。玉山使用成功的073 overview核對 FundNo 50／009803，
不用失敗的072空回應作身分證據。

摩根四張完整投資組合工作表明示 NAV、期貨 mark-to-market 與選擇權說明，
帶負號帳面比重採 derivative_nav，原名目曝險仍未知。聯博只用無日期參數的
最新 basket 取得同日 NAV；帶日期的申購籃子曾回前日 NAV，不使用，兩份
日期不一致即停止，不回退或重試。聯博股票市值／同日
AUM 與全部六位百分比吻合，但衍生品原比例口徑不明；保留未知與 gap，
不能借用摩根說明。AB API 股數 1294499.9999999998 的浮點尾差只在股數
驗證時容忍 1e-8 股；不改原檔、不調金額或權重。

完整實作及驗收見 repository 的
`research/etf-lookthrough-feasibility/ten-issuer-expansion-20261027/`；本次實跑
原檔／TLS前檢／requests／results／receipt另見repository的
`research/etf-lookthrough-feasibility/live-source-validation-20261027/`。
備援範圍與每檔停止條件見 [official-fallback.md](official-fallback.md)。

## 2026-10-27 本地擴充候選

新增復華 00929 與富蘭克林華美 00905；完整取得與 agent 操作合約見
[official-fallback.md](official-fallback.md)。目前 registry 是原四家 33 檔加上
這兩檔（本段為前輪歷史範圍）；當時只做離線資格／取得流程測試，本次兩檔
本機連線均通過，尚未公開發布或驗收排程機器。下文四家數量與Actions證據是
原 v1.0.0 範圍，不延伸為新增兩家的線上成功證明。

兩來源的 canonical 股票權重均使用原始官方市值除同回應／同日 NAV。
復華 50 股逐列核對三位小數百分點，富蘭克林 142 股核對兩位小數百分點，
每列均符合 `ROUND_HALF_UP`；股票金額合計與獨立股票分類總額一致。
這是原始分母的來源交叉證據，不是將股票權重重新放大到 100%。

復華頁面股票摘要 96.696%、XLSX 逐列合計 96.697%、原始金額／NAV
96.69844609329698% 分別保留。富蘭克林逐列顯示合計 97.46%，精確
金額／NAV 為 97.39487283937537%；不將顯示捨入累積誤認為缺少股票。
復華其他資產合計產生負 gap，富蘭克林保留未解釋正 gap；不猜測來源會計
原因、不補平、不把未知款項命名為現金。期貨名目曝險維持未知。

僅有 2026-10-22 這一實際持股日的原檔驗證；測試會檢查可接受新的來源日期，
不能以單日樣本宣稱未來格式穩定或整家投信全商品支援。原包來源、檔案 hash、
逐列算術與名錄對照保存於 repository 的
`research/etf-lookthrough-feasibility/issuer-expansion-20261027/` 及對應測試 fixture。

本版本 registry 已逐一對齊 **2026-10-25 已保存觀察的33檔eligible名錄**：富邦11＋元大10＋群益7為28檔HTTP自動候選，國泰5檔為`official_only`官方備援。名錄依原生發行人、官方國內股票類型與foreign旗標／TPEx篩選交集分類，126個TWSE四家primary rows的include／exclude與paired shareclasses trace保留於repository的`research/etf-lookthrough-feasibility/catalog-observed-20261025/`；33含32TWSE＋TPEx006201，共5主動管理基金。這不是10/26 live refresh，亦不將歷史master37候選直接當現行名錄。

`is_active`代表主動管理，與掛牌有效性無關。33檔名錄配置不等於33檔已自動發佈：28 HTTP已通過一次Actions端到端驗收，仍不保證每日穩定性；國泰五檔只官網備援，不呼叫publisher fetch、不建立latest。私有每日排程已獲批登錄，run40283575366已完成28 HTTP pass／5 official_only及資料commit1fa4dc9的單次端到端驗收；本站提供通過驗證的持股snapshot；更新窗口仍待觀察，日期以索引與各快照為準。原五檔固定示範已依使用者特例採本地共同日2026-10-22；此特例與每日發布分開處理。

## 富邦

- 0052：[官方基金資產頁](https://websys.fsit.com.tw/FubonETF/Trade/Assets.aspx?lan=TW&stkId=0052)
- 00405A：[官方基金資產頁](https://websys.fsit.com.tw/FubonETF/Trade/Assets.aspx?lan=TW&stkId=00405A)
- 006208：[官方基金資產頁](https://websys.fsit.com.tw/FubonETF/Trade/Assets.aspx?lan=TW&stkId=006208)
- 原始來源：`research/etf-lookthrough-feasibility/remote-run-40208652308/fixtures/`。
- 006208 原始來源及 HTTP metadata：`research/etf-lookthrough-feasibility/resumed-direct-downloads/fubon-006208/`。
- 其餘八檔原始來源、HTTP／TLS metadata 及獨立 raw audit：`research/etf-lookthrough-feasibility/resumed-direct-downloads/fubon-roster/`。
- 測試副本：`tests/fixtures/issuers/fubon/{symbol}.2026-10-22.html`，逐位元組保留原文。
- `tests/fixtures/issuers/fubon/provenance.json` 記錄來源網址、取得時間、SHA-256、
  原文基金標題與 hidden ID、原始金額／符號、經濟金額／符號、NAV 與轉換理由。

11 頁原文宣告 UTF-8，資料日期均為 **2026-10-22**；0052／00405A 查詢框日期是 2026-10-25，006208 與新增八檔是 2026-10-26，
不能當作持股日。parser 同時核對 `h6.top` 的基金代碼與隱藏 `hidStkId`，任一缺漏、
重複或不符即拒絕。主動式標題也須與請求的管理類型相符。

| 代號 | 股票數 | 股票金額合計（TWD） | 同頁基金淨資產（TWD） | 股票 NAV fraction |
| --- | ---: | ---: | ---: | ---: |
| 0052 | 72 | 161746375520 | 162498863813 | 0.995369270434617 |
| 00405A | 47 | 20572671828 | 21604667338 | 0.952232751661728 |
| 006208 | 50 | 456399857323 | 457796188686 | 0.996949884255245 |
| 0057 | 74 | 480949380 | 483428418 | 0.994871964684542 |
| 00692 | 100 | 56509880561 | 56665699092 | 0.997250214265476 |
| 00730 | 30 | 1992169505 | 2008172252 | 0.992031188069618 |
| 00733 | 92 | 4165580186 | 4338459629 | 0.960151883898053 |
| 00892 | 30 | 12485310763 | 12599712086 | 0.990920322447120 |
| 00900 | 30 | 28516258843 | 28692324787 | 0.993863657082267 |
| 009802 | 50 | 9868663225 | 9969277997 | 0.989907516669685 |
| 009809 | 34 | 576830816 | 581209962 | 0.992465466378224 |

每檔股票使用該頁正式金額除以該頁基金淨資產。頁面原生百分比有捨入差異，不能直接當
精確 NAV fraction，也不重新放大。股票表須具完整標頭、唯一代碼、必要數值與合計列，
逐列金額合計須等於官方合計。

| 原始標籤 | 原始值（TWD） | 經濟值（TWD） | 類別與規則 |
| --- | ---: | ---: | --- |
| 0052 保證金 (TWD) | 333430747 | 333430747 | other；不代表期貨名目額 |
| 0052 現金 (TWD) | 1327617287 | 1327617287 | cash；保留原符號 |
| 0052 應收(付)證券款 (TWD) | -841093306 | -841093306 | other；保留既有負值 |
| 00405A 現金 (TWD) | 1067109338 | 1067109338 | cash；保留原符號 |
| 00405A 應付受益權單位買回款 (TWD) | 21565665 | -21565665 | other；精確負債標籤轉負 |

買回應付款採來源專屬 `-abs(raw_amount)`，已是負值時仍保留負值。這是核准 signed NAV
合約下的經濟解讀，並非另行取得的官方欄位手冊；不能把名稱式翻號放進通用 loader。
其他已知標籤不做翻號；所有經濟值均除以同頁 NAV。

0052 的實際期貨代碼為 `WTEX6F` 與 `WVHFX6F`，保留完整原名。原始口數、金額及百分比
未充分確認名目額、方向或 NAV 意義，因此兩個 canonical 權重均為 `None`，不以保證金、
現金或未帶方向的口數推估。00405A 這次沒有期貨表，只描述這次揭露，並不保證未來沒有。

0052 原始經濟對帳差額為 `-0.0004151809644505505`；核心因嚴格小於 `0.0005` 的
容差將其視為零，不分攤殘差。00405A 差額為 `-0.0006270942656992648`，保留負值與
警告。歷史研究套件的 `full_calculation_qualified:false` 早於核准修訂，保留原檔供追溯。

新標籤、新標頭、編碼宣告不明、缺少欄位或重複表格均須拒絕，或先根據來源證據做明確
映射，不能猜測。這些離線測試只驗收 parser 與計算合約；不等於人工前十大比對、平台
交叉驗證、其他投信支援或完整發布驗收。

## 四家投信的路徑與備援狀態

| 投信 | 已知官方入口／候選 route | 本次可聲稱的狀態與缺口 |
| --- | --- | --- |
| 富邦 | 上述 Assets.aspx；http | registry 為上述 11 檔觀察子集，離線 parser 已驗證；不代表獨立重新取得的現行掛牌名單或完整 universe |
| 元大 | [0050 持股](https://www.yuantaetfs.com/product/detail/0050/ratio)；官方 Daily API 離線來源 | 10 檔已觀察 HTTP registry；原0050／0056合約不變，其餘八檔有界資格與Cash差異見下文；已有單次Actions與已啟用排程證據，不代表重新查核的完整掛牌universe |
| 國泰 | [00878 已核對頁](https://www.cathaysite.com.tw/ETF/detail/ECN?tab=etf3)、[00400A 已核對頁](https://www.cathaysite.com.tw/ETF/detail/EEA?tab=etf3)；手動完整呈現 | 兩份legacy與五份modern公開DOM可用有界離線adapter；modern原名／比例、明示精確衍生code、非股None見下文。本版本五檔已列official_only；未資格化自動browser publisher collector、原生XLSX或任何當期自動下載能力 |
| 群益 | [00919 持股](https://www.capitalfund.com.tw/etf/product/detail/195/portfolio)、[00982A 持股](https://www.capitalfund.com.tw/etf/product/detail/399/portfolio)；buyback API離線來源 | 7檔已觀察HTTP registry與兩階段POST接線；date2與正totStock合約不變；00415A RP有界映射、三檔負gap見下文，歷史rps另待資格；已有單次Actions驗收；歷史非空rps不得擴大解讀 |

候選路徑證據保留於 repository 的 `research/etf-lookthrough-feasibility/README.md` 與 `local-followup/`；這些歷史大型研究資料不隨下載套件提供，不能因此聲稱包內有原始 capture。富邦專屬來源證據及 raw/economic 符號保留在上方紀錄。

## 群益：顯式 PCF 日期查詢的離線 adapter

`PARSERS["capital"]` 接受官方POST buyback API原始code/data/message envelope，輸出`agent_official` Snapshot；離線parser不執行HTTP，7檔已觀察產品另加入`SUPPORTED_ETFS`。身分先由raw pcf.fundName對應已核對的官方ticker／productId：「群益台灣精選高息ETF基金」↔00919／195被動；「群益台灣精選強棒主動式ETF基金」↔00982A／399主動，再核對descriptor。body沒有ticker，這個已驗證對應不能由requested symbol盲填。

實際來源URL為`https://www.capitalfund.com.tw/CFWeb/api/etf/buyback`，七檔共用端點，所以須另保留POST request body、productId、取得時間與raw hash。正式取得使用兩階段唯讀POST：固定已核對fundId，以date=null取得當次pcf.date1並核對原生fundName／body／嚴格ISO日期，間隔至少2秒後同端點**明確POST該PCF日期（YYYY/MM/DD）**。只把第二份原始bytes交給既有parser驗證正aggregate及所有持股；不以discovery零totStock發佈、不猜today或date2、不回退日期或重試。本次explicit request date為`2026/10/27`；不是production日期白名單。

### 日期與NAV比例的交叉證據

兩份歷史10/1 API的date2明示9/30，同基金官方月報的證券代碼／截止日／前十大／pUnit與基金規模吻合；00919完整40股票的code/name/weightRound另與MOPS Q3表逐列一致、differences=[]、sum99.48%。這些支持同兩檔同API形狀的date2實際as-of映射，是有證據的契約解讀，未聲稱取得官方逐字date2欄位手冊。

current pcf.date1及stock.date1為2026-10-27 PCF／清單日期，holdings_date仍取**date2=2026-10-22**。request的27、公告日與取得時間均不代入holdings_date，也不推前一營業日。日期／UTC stamp沒有fixture白名單。

原高精度stocks.weight、同基金公開持股／NAV、歷史月報與季度交叉支持其NAV貢獻解讀；每列用原weight／100，weightRound僅顯示／交叉證據，不rescale、不share×外部價格重建。

| 顯式PCF日樣本 | 管理類型 | 股票／原weight合計 | 原pcf.totStock | NAV TWD | 現金 TWD | 保證金 TWD | 應收付證券款 TWD |
| --- | --- | --- | --- | ---: | ---: | ---: | ---: |
| 00919 | 被動 | 40／99.6679% | 99.667900 | 629953562600 | 69035832 | 1874823135 | 這份未列 |
| 00982A | 主動 | 57／97.0203% | 97.020300 | 45940715407 | 1600408101 | 33240 | -209577698 |

正例API原SHA-256分別為`4ae27405a4dab31be533e3b4b27e5a631b6eec33139c730948dd76809d9e83b6`／`5a95b685e5127e352929d142918b93ef99e01548b3e52e38316104afa1393a3f`；取得時間2026-10-26T03:38:05.652132+00:00／03:38:08.416548+00:00，完整request metadata與原bytes保存於`tests/fixtures/issuers/capital/`。

精確「現金」→cash；「保證金」「應收付證券款」→other，原asMoney TWD金額／NAV，負值不翻號。未知標籤／幣別／重複資產拒絕。PCF tUnit、equNav、forecastAmt、disAmt等申購單位資訊不當全基金現金。00919期貨TX202611／台指期202611的原weight、lot、month保留；canonical weight及exposure_weight均None。00982A空期貨只描述這份樣本。

### 有用合計、零回應與完整性邊界

顯式PCF日查詢與較早date=null兩份回應逐欄比較，唯一差異為.data.pcf.totStock；所有股票、日期、資產、期貨與rps相同。date=null回應的字面0.000000仍保留為negative，parser要求**正的原生totStock與逐股weight合計在六位小數精度內一致**；零／缺失／矛盾合計皆拒絕，不轉None、不當零實際持股，也不以warning後放行。production無零aggregate例外或固定每日筆數常數。

移除正權重列會因來源合計不符而拒絕；新增同格式日期或實際列數改變且合計一致，不被fixture日期／筆數鎖死。00982A原始57列包含2881富邦金、share250、公開weight=0.0，必須保留該已披露列，不篩掉或當缺值。合計只能核對公開權重；不能認證任意外部編輯刪掉零捨入列。當次完整名單由可信來源取得、原始raw hash與40／57筆fixture驗證支撐，不聲稱任意bytes的密碼學真實性。

原始canonical gap為00919約+0.000235282127436293、00982A約-0.000478184673943360，均由既有嚴格abs(gap)<0.0005政策歸0；provenance保留未clip原值，不補平衡列或稱差額為現金。

current rps／bonds皆空。歷史9/30資料的rps有64／4筆，與cash／其他資產是否重複計入尚未解除；歷史stocks/date資格不等於完整非股票資格。**原兩檔非空rps、所有非空bonds仍明確拒絕；只有下述00415A新來源的精確RP形狀獲資格**，不能默默刪除後產生完整Snapshot，也不能因加rps後差額接近0推測會計關係。HTTP200／business code400／data=null的10/23真實回應同樣拒絕，不當空完整持股。

原始正例／negative API與request metadata、月報提取文字及PDF原hash／真實連結、40股MOPS比較、四樣本diagnostic及新舊顯式日期比較保存在fixture的cross-validation與provenance。歷史DOM及大型PDF不重複複製，保留hash與來源鏈；舊資格報告未覆寫，沒有將9/30股票權重嫁接到10/22。

使用方式同既有離線adapter：明確`SupportedEtf("00919", "capital", False, "http", verified_buyback_url)`及真實fetched_at，執行`PARSERS["capital"](raw, descriptor, fetched_at)`後保存Snapshot JSON與來源provenance，再接`local_snapshot_dir`。七檔現有HTTP route接既有fetch_official／publish_all，群益分支使用前述POST，其他issuer沿普通GET。全群益universe、歷史完整rps／非股票、Actions／排程與完整Task17／Task1仍待驗收。


### 群益已觀察七檔：有界擴充及POST失敗邊界

完整observed集合：00919／195被動、00982A／399主動、00415A／504主動、00923／365被動、00927／366被動、00946／388被動、00992A／500主動。固定對應來自已核對官方產品與raw fundName，不能由requested symbol盲填；不是33檔完整universe。

新增五份explicit原始bytes、兩階段actual request／metadata、provenance及最終來源資格報告在`tests/fixtures/issuers/capital/roster/`。00946採single-retry成功來源；較早read timeout紀錄仍在研究scratch保留，不能解讀為空持股或存取拒絕。

| ETF | 實際持股日／PCF清單日 | 完整股票／原生合計 | NAV TWD | canonical gap（套既有嚴格EPS後） |
| --- | --- | --- | ---: | ---: |
| 00415A | 2026-10-22／2026-10-27 | 50／96.0950% | 12183347575 | 0 |
| 00923 | 2026-10-22／2026-10-27 | 50／99.1840% | 37105084137 | 0 |
| 00927 | 2026-10-22／2026-10-27 | 30／99.8156% | 73537457982 | -0.054375386941712739 |
| 00946 | 2026-10-22／2026-10-27 | 50／98.5503% | 6499795912 | -0.0039375240407911442 |
| 00992A | 2026-10-22／2026-10-27 | 43／96.0759% | 44993823193 | -0.049502399085526117 |

三個負gap是實質公開來源對帳差異，00927／00992A約超NAV5.44%／4.95%；保留原負值與JSON／Markdown警告，不稱捨入末位、不推測原因、不改stock/cash/負債/EPS平帳。00415A原gap約-0.0003420578925944333、00923約-0.0002684362715714168，依既有abs(gap)<0.0005規則歸0；與精確財務對平不同。

00415A的rps精確欄位bondsName／bondsMoney／bondsEname、明示TWD金額，官方既存JS把rps呈現為「附買回債券」並與其他assets分開。兩筆47043279及133000000各以原bondsName作來源識別／name、kind=other、amount/NAV一次；無證券code不從P10/P12名稱猜ticker，不額外造合計列。重複RP、未知欄位／幣別、與assets重複摘要均拒絕；其他基金非空rps仍未資格。00415A／00992A原assets沒有保證金、futures為空，保留未列狀態，不補margin0。原兩檔必備cash／margin的合約保留。

00946精確新標籤「應付贖回款」／Accrued Redemption為other，原-69562447 TWD/NAV維持負，不再翻號或按「應付」猜通用規則。股票用原native weight/100，正totStock嚴格核對，不rescale、不用weightRound或外部價格；日期／每日筆數不鎖fixture常數，零權重原列仍保留。所有期貨canonical weight及exposure_weight皆None。

POST沿既有proxy-free、cookie-free、HTTPS驗證、30秒timeout與10MiB read cap。只允許唯一exact endpoint；每次POST redirect均fail closed（同host也拒絕，不能變GET或重送body）。HTTP/TLS／business失敗、data:null、錯身分／日期或兩次date1/date2矛盾、截斷JSON、超cap直接失敗，由publish_all記fetch_error；不改日期補救。Stub已驗證兩個exact body、至少2秒間隔、只傳回第二份raw。2026-10-26首次獲批run40279682217中群益6檔pass、00923 fetch_error，原原因仍未知。其後另行批准的run40283575366中群益7檔均pass，已產生私有資料commit；不倒推前次錯誤原因、不將一次成功當成每天穩定。

## 元大：Daily API 實際持股的離線 adapter

`PARSERS["yuanta"]` 接受已核對的10檔官方Daily API原始JSON，輸出`agent_official` Snapshot；registry增加上述已觀察子集的HTTP路徑。離線parser不執行HTTP，也不把被動資格外推其他元大基金。身分同時核對PCF.markcd／fundid／fullname及FundWeights.Summary.code，分別為0050／1066、0056／1084；source URL須為已核對official endpoint與符合基金身分的query，輸出保留實際URL，不重組來源query。

來源取得metadata完整保存於`tests/fixtures/issuers/yuanta/capture-metadata.json`；其中前兩份為本adapter的HTTP200原始JSON，包含exact URL、UTC取得時間、SHA-256及未截斷狀態。保留原始PCF、Summary、股票／期貨列與日期欄位的provenance，不混稱原生CSV或表格手抄。既有CSV逐列code/name/qty/weights全相同的舊audit另保存；其中舊`qualified_NAV_weight_source:false`屬已被新資格複核取代的判準，原數字與事實未改寫。

| 樣本 | 實際持股日 | 完整股票／原比例sum | Summary股票TWD | Summary基金規模TWD | PCF.totalav |
| --- | --- | --- | ---: | ---: | ---: |
| 0050 | 2026-10-22 | 50／99.77% | 2453038380448 | 2458820687058 | 2464140967258 |
| 0056 | 2026-10-22 | 50／99.58% | 823295200393 | 826785591485 | 831727816333 |

逐股來源只用`FundWeights.StockWeights`，weight=原生weights/100，保留兩位小數的公開精度；不依Summary金額重分配，不用PCF.totalav重算，不拼外部股價、不rescale。官網前端資產圖明確以Summary.stkvalues/Summary.fundsize顯示整體股票配置，原生逐股合計與該配置落在逐列捨入精度內，並有官方完整CSV對照，足以合理支持NAV貢獻解讀；不聲稱官方逐字定義每股未捨入分母。

兩個原始差額精確為5320280200／4942224848，等於各自estcvalue×(issuesdiff/baseunit)。原式與官方frontend hash／offset保留證據；將其理解為申購單位估計值相關差異是有支持的因果推論，不是官方明文會計公式。adapter不依這條診斷增加修正層。

**InKind.FundComposition為申購籃子，永不當實際持股。** PCF.cashdiff、estcvalue及Memo每實物申購單位現金不是全基金現金；Cash=null為未知，不代表0。來源ETFWeights／BondWeights空且Summary對應值為0；若出現未映射的實際Cash類別／ETF／bond或未知actual-holdings欄位，明確拒絕，不靜默當股票。

0050期貨TX／臺股期貨（202611、548口、0.21%）及NYF／台灣50ETF股票期貨（202611、738口、0.03%），0056期貨TX（202611、353口、0.39%），均保留原始欄位與Summary.futvalues；canonical weight及exposure_weight皆None，不猜方向／NAV貢獻或穿透成股票。只有已知股票比例時，核心未分類差額分別0.0023／0.0042，保留而不稱現金，也不宣稱是精確非股票金額。

實際日期只取PCF.trandate，並核對upddate與中文Memo supplied-date同日；公告日anndate、取得時間不可代入。日期／UTC stamp沒有fixture白名單，同格式新資料仍需日期與來源一致性檢查。來源擷取真實性與TLS仍由取得流程保證，離線parser不能認證任意偽造API bytes。

使用時建立明確`SupportedEtf(symbol, "yuanta", False, "http", verified_api_url)`，verified_api_url與fetched_at取實際取得metadata而非自行重組query。用`PARSERS["yuanta"](raw, descriptor, fetched_at)`轉Snapshot，再依國泰段的Snapshot JSON／`local_snapshot_dir`流程手動備援。上述10檔現已註冊HTTP route，safe GET精確允許etfapi.yuantaetfs.com；2026-10-26首次獲批Actions中10檔取得／解析驗證均pass但整次job失敗；其後另批run40283575366整體成功並產生私有資料commit。公開發布與更新窗口仍待驗收，不把單次私有成功當成完整對外發布。


### 元大已觀察10檔與新增Cash合約

完整被動觀察集合：0050、0051、0053、0055、0056、006201、006203、00713、00850、00940。不是現行掛牌全集或33檔完整universe。每個registry URL均保留各次實際capture URL。

新增八份HTTP200原始bytes與metadata／provenance／最終資格報告保存在`tests/fixtures/issuers/yuanta/roster/`；metadata記錄exact URL、UTC、SHA及未截斷狀態。2026-10-22僅為本批fixture日期，不是production白名單。

| ETF | 完整股票列 | 原生股票合計 |
| --- | ---: | ---: |
| 0051 | 100 | 95.70% |
| 0053 | 366 | 97.55% |
| 0055 | 15 | 97.58% |
| 006201 | 50 | 96.88% |
| 006203 | 74 | 99.52% |
| 00713 | 50 | 97.63% |
| 00850 | 110 | 97.45% |
| 00940 | 50 | 97.17% |

0053的210筆已披露零權重股票完整保留；數量／日期不鎖production常數。原生逐股合計與Summary股票amount/NAV的差異是公開兩位百分點捨入診斷，不rescale，也不認證任意刪除零捨入列的外部bytes。

0051／0055／006203沿既有Cash=null與Memo supplied-date契約。其餘五份Cash=dict、Memo=null，以PCF日期、Cash.TranDate、每項資產trandate、Currency.cDate/fundId及InvestArea.TRAN_DATE/FUND_ID交叉核對；有Memo仍核對。公告日與取得時間不代替持股日。

已核對Cash頂層精確為TranDate、CashPosition、MMF、Margin、RP、ForwardExchange、Currency、CouponRate、InvestArea、CreditRating。後四個未資格資產類別MMF／ForwardExchange／CouponRate／CreditRating若非空拒絕；Currency與InvestArea僅作日期／身分元資料，不造資產。CashPosition空不等於現金0，未知仍留gap。

精確NTD CashPosition的1500/現金/CASH為cash；1200/附買回債券/RP、3300/應付受益權單位買回款/PAYABLES FOR UNITS REDEEMED為other；Margin的null/保證金/Margin為other。canonical均為原signed amt/Summary.fundsize，不用rto或exrate。00713應付款-457808780原符號保留；RP摘要500000000與400000000+100000000明細精確核對，只計摘要一次。

00940只有RP明細B63529與B644BT，原amt250000000與150000000、null crncy、rto0不具已資格貨幣／NAV會計貢獻錨點。保留原code/name為other、weight=None、exposure_weight=None；400m只供追溯，不計入已知資產貢獻，不稱cash或零。已知other只含margin674741091/NAV；未知總體仍留gap約0.0181841011712663，不等同400m。既有核心JSON／Markdown逐筆顯示「權重缺漏，金額保留於未分類差額」warning，不能消音或宣稱other已完整衡量。全部期貨兩個canonical權重仍None。

## 國泰：手動完整呈現 capture 的離線 adapter

`PARSERS["cathay"]` 接受保存的公開 rendered DOM envelope，介面仍為 `parse(raw, etf, fetched_at)`，輸出 `source_kind="agent_official"`。未加入 `SUPPORTED_ETFS`，不執行瀏覽器或網路；普通UI可讀不代表Actions／自動collector已驗收。原先HTTP403及舊研究報告保留，不因本次離線資格而改寫。

這兩份來源在同一持股權重概覽有基金身分、TWD NAV、股票總額及完整明細；股票原生比率合計與股票金額／NAV的差落在逐股兩位小數精度容許範圍，足以合理解讀為基金NAV貢獻。未聲稱官方逐字明示公式或逐股精確TWD金額。每筆股票使用原百分比／100，保留捨入，不重放大為100%或重新分配到股票總額／NAV。

| capture | 管理類型 | 持股日 | 股票筆數／原比率合計 | NAV TWD | 股票總額 TWD | 原始TWD對帳殘差 |
| --- | --- | --- | --- | ---: | ---: | ---: |
| 00878 | 被動 | 2026-10-22 | 29／97.13% | 668149631061 | 648849813118 | 33496273 |
| 00400A | 主動 | 2026-10-22 | 53／94.93% | 29929318108 | 28404190732 | -223469666 |

現金為明列金額／NAV，kind=cash；保證金及申贖應付款為原帶符號金額／NAV，kind=other。00400A的申贖應付款 **-21435293** 原樣保留為負；00878的0為來源明示零，不是缺值填零。未知新標籤拒絕，不按名稱套用全域翻號。00878期貨TX／台股期貨的2.89%、2088口、2026/11及名目本金19307318400只保留原始證據；canonical weight與exposure_weight均為None，不推測方向或NAV貢獻。00400A只描述這份沒有期貨區，不聲稱永久零期貨。

原始TWD殘差與採捨入股票百分比後的canonical gap不同。00878 canonical gap約-0.00013533983159686018，依既有嚴格abs(gap)<0.0005政策為0；00400A約-0.007724219211750309，保留負值與核心警告。不補造other列來對帳。

日期採**人工取得時的可見官方持股日期控制，並與保存AX交叉確認**；HTML的input value attribute在這兩份capture中缺漏。adapter只驗ISO日期／UTC stamp、raw h1身分與管理類型、official URL、capturetime=fetched_at及已知完整展開結構；raw日期控制若有value則再核對。它不能獨立認證任意envelope的日期或任意編輯後檔案的真實性。新capture的可見日期與完整展開仍由取得者查核；沒有fixture日期／UTC stamp白名單，不使用fetched_at、產業圖日期或收盤日替代持股日。

`APP-ETF-DETAIL`、`app-holdings`、已展開`s_show_all_cnt`及股票／期貨／其他資產data-anchor是已核對結構。缺NAV、錯身分、collapsed／未知區塊、重複代碼、非法數字及不完整欄位拒絕；觀察到的一個空其他資產容器不是資料列。這些檢查不等於任意檔案完整性的密碼學證明。

來源bytes／SHA-256、rendered_html hash、完整原始code/name/quantity/percent、資產原符號、期貨欄位及AX日期excerpt保存在`tests/fixtures/issuers/cathay/`的兩份capture與provenance.json；envelope是本機保存格式，不是官方API JSON、原始HTTP或已下載XLSX。手動輸出可先存Snapshot JSON，再交既有local_snapshot_dir：

```python
import json
from pathlib import Path

from lookthrough.issuers.registry import PARSERS, SupportedEtf
from lookthrough.models import snapshot_to_dict
from lookthrough.run import run_lookthrough

raw = Path("verified-cathay-capture.json").read_bytes()
captured_at = json.loads(raw)["captured_at"]
etf = SupportedEtf(
    "00878", "cathay", False, "playwright",
    "https://www.cathaysite.com.tw/ETF/detail/ECN?tab=etf3",
)
snapshot = PARSERS["cathay"](raw, etf, captured_at)
folder = Path("manual-snapshots")
folder.mkdir(exist_ok=True)
(folder / "00878.json").write_text(
    json.dumps(snapshot_to_dict(snapshot), ensure_ascii=False),
    encoding="utf-8",
)
outputs = run_lookthrough(
    Path("portfolio.json"), Path("output"), use_network=False,
    local_snapshot_dir=folder,
)
```

此例需先人工核對capture，保留其來源provenance；`route="playwright"`只是legacy來源的明確descriptor，不是已註冊的自動擷取路線。legacy descriptor必須仍用與raw body一致的舊URI，不能直接套用registry現代fund-details URL。五檔已列official_only備援；自動browser collector／Actions發布、固定示範與完整計畫仍另待驗收。


### 國泰modern：手動完整投資標的卡、精確衍生代碼

`cathay.parse`只按明確envelope representation分派現代格式；legacy已知同頁NAV／日期／單位驗證不變。五份來源為正常官方fund-details→投資組合→查看更多後的完整公開DOM，無原生股票代碼或基金總NAV，不能稱HTTP原始bytes／API／XLSX。

| ETF／官方route | 原股票列／native合計 | 管理 |
| --- | --- | --- |
| 00701／EAD | 30／99.40% | 被動 |
| 00881／ECR | 30／98.45% | 被動 |
| 00922／EDO | 49／99.04% | 被動 |
| 00878／ECN | 29／97.13% | 被動 |
| 00400A／EEA | 53／94.93% | 主動 |

全部本次持股卡明示資料日期2026/10/22；不採capture日、產業配置日期10/16或契約到期月。00922實際49列，不依名稱50補股。日期與列數僅fixtures；同格式新日期／完整列數可變，不設production白名單。

代碼是**明示衍生**：只移除Unicode排版空白，以已打包官方company-directory.json精確唯一name→code join，零／多匹配fail closed，不做大小寫／標點／星號／前綴／別名／模糊改寫。名錄本身有某精確帶星名稱時可精確匹配，這不等於允許刪星別名。三個原名零匹配補充僅「國巨」→2327、「世界先進」→5347、「Lotes Co Ltd」→3533，來自已資格同issuer同持股日legacy公開code_and_name原生節點；不是modern原生code，也不借用legacy權重／NAV。

打包`data/cathay-modern-lookup.json`保存官方名錄SHA／as_of／TWSE與TPEx原來源、三個補充原節點HTML／code/name／URL／raw與HTML hash／日期。runtime檢查名錄resource hash版本錨點，這不是固定capture的raw hash或日期白名單。完整五份DOM、四份identity、逐列original_name／lookup_key／matched code/name/market／method／match_count=1 trace與raw／HTML hash保存在`tests/fixtures/issuers/cathay/modern/`。生成JSON的selected snapshot source_note及Markdown均明示官方精確lookup與已核對原生對照衍生，不能對外稱modern原生code。

原生股票percentage/100，不縮成股票內100%。現金cash、保證金／申贖應付款other均weight=None；原TWD amount／負號／明示0保留來源，但無基金總NAV不得拿單位NAV42.xx、rto0、gap或legacy NAV反推。00922三筆repo保留原名為other/None，100m／100m／130m未確認幣別／NAV金額意義，只供追溯。期貨保留原code/name、原比例／口數／月份，canonical weight及exposure_weight皆None。

既有core逐筆missing-weight警告保留在JSON／Markdown；known-only cash/other合計0不是實際0。僅按已知股票的gap分別0.006／0.0155／0.0096／0.0287／0.0507，不宣稱等於原cash或repo金額。未知新資產類別／結構、錯基金／日期、未full與收合、重複或HTML/text缺列、名字零／多匹配等拒絕。兩份可見表示法可交叉核對列，不認證任意同時偽造的手動envelope；完整性由正常官方capture、展開狀態與本批hash／逐列trace支持，不硬鎖每日列數。

此來源轉換仍為**manual offline only**；五檔現列入registry的`official_only`，不是自動browser取得／發佈。原直接StockListAPI AD GET已403並停止整批，CR／DO未試，不改UA/cookie/IP/TLS、不把被拒API搬進browser重放。

### 本版本國泰 official_only 配置與一次遠端probe的界線

| ETF | 管理 | registry實際官方備援URL |
| --- | --- | --- |
| 00701 | 被動 | https://www.cathaysite.com.tw/fund-details/EAD?tab=portfolio |
| 00881 | 被動 | https://www.cathaysite.com.tw/fund-details/ECR?tab=portfolio |
| 00922 | 被動 | https://www.cathaysite.com.tw/fund-details/EDO?tab=portfolio |
| 00878 | 被動 | https://www.cathaysite.com.tw/fund-details/ECN?tab=portfolio |
| 00400A | 主動 | https://www.cathaysite.com.tw/fund-details/EEA?tab=portfolio |

[GitHub run40272074836](https://github.com/KaiQin04/pyinvest/actions/runs/40272074836)只驗了特定head d51c140的遠端prototype：CA／Python／實際Playwright Node120 roots／Chromium安裝及離線邊界測試皆pass；第一個00878現行ECN正常頁回403，latch即停止整批，其他00400A／00701／00881／00922未試。沒有rerun、accepted snapshot或對外發佈。raw證據保存於repository `research/etf-lookthrough-feasibility/remote-run-40272074836/`。

此結果只限制該次run對00878的已驗能力，不表示其他四檔亦測失敗、不表示所有環境永遠不可能，也不否定正常公開UI來源資格。依Q16，本版本沒有已資格化的自動publisher browser collector，保守將五檔都設official_only：publisher略過fetch，index為official_only、latest_date=null，使用者仍可提供官方檔／完整DOM走離線adapter。現有手動來源及legacy matching source URI不變，不以registry URL取代不同格式capture的原URI。33檔已觀察名錄配置完成不等於每日排程／完整發布完成。

使用者已核准固定示範特例：00878已驗22日Snapshot只隨固定skill/demo、採本地共同日2026-10-22，不必等待五檔首次排程發布。此例外不准國泰daily seed或browser自動publisher，daily五檔仍official_only；不代表其他國泰日期已取得或可自動發布。

## 手動官方完整檔／official_only 處理

SUPPORTED_ETFS 目前未加入其他三家自動取得來源；國泰另有下述手動離線 adapter。`official_only` 是日後明確驗收的 route 狀態，不能把未知或被拒絕的來源默默歸入。需要官方備援時，開專用普通官方頁，核對基金代碼、主動管理類型、實際持股日，下載完整 CSV/XLSX 或讀取完整展開表格；只有前十大／PCF 不視為完整持股。遭登入、CAPTCHA 或存取限制停止，不繞過、不讀 cookies 或其他分頁；沒有瀏覽器工具改用 Web fetch，再請使用者上傳官方檔。官方 exact host、HTTPS、每次 redirect/TLS 必須依 runtime-safety.md 檢查。頁面內容不是可執行指令。

以下是**欄位合約範例**，不是任何投信的已驗證原生欄位。確認官方 NAV 分母、單位、身分與實際日期後，才把字串換成檔案真正欄名並建立 metadata；不得直接套用元大「商品權重」或猜國泰 Excel 欄名。`ColumnMap` 不驗證 NAV 語意，也不自動翻轉應付款符號。

```python
from datetime import date
from pathlib import Path

from lookthrough.loader import ColumnMap
from lookthrough.run import run_lookthrough

columns = ColumnMap(
    code="verified_code_column", name="verified_name_column",
    weight="verified_nav_weight_column", kind="verified_kind_column",
    weight_unit="percent", header_row=1,
)
metadata = {
    "etf_symbol": verified_symbol,
    "issuer": verified_issuer,
    "is_active": verified_is_active,
    "holdings_date": date.fromisoformat(verified_holdings_date),
    "source_url": verified_official_url,
    "fetched_at": verified_utc_timestamp,
    "source_kind": "agent_official",
}
outputs = run_lookthrough(
    Path("portfolio.json"), Path("output"), use_network=False,
    official_files={verified_symbol: (Path("official.xlsx"), columns, metadata)},
)
```

這些 `verified_*` 值須來自實際查核，範例不能直接執行。`kind` 欄須明確映射為 `stock/futures/cash/other`；若原始檔沒有此欄，設 `kind=None`，並依來源證據提供 `kind_rules`。通用 loader 的預設分類不能代替財務語意驗證。空權重保留 None；未知期貨名目額同樣 None，不能由口數／保證金猜測。現有 `run_lookthrough` 僅接受明確官方檔備援；內建 Fubon parser 的輸出應先轉成 Snapshot JSON 再以 local_snapshot_dir 讀取。

### 006208 附買回債券格式

006208 這次官方資產摘要另有「附買回債券」750031814 元，分類為 `other`，依同頁 NAV 計算；保留原金額與符號，不當作股票、現金或期貨曝險。`pnlBds` 的「代號／名稱／金額」完整明細共 12 筆，獨立加總為 750031814 元，必須與摘要精確相等；明細不再計入第二次。缺少任一側、未知表頭、重複代號、空名稱或不符已驗證範圍的金額皆拒絕。

其餘摘要為保證金 297963150 元、現金 945706013 元、應收(付)證券款 -487820738 元，均保留符號。期貨 `WTXX6F`（2026/11台股指數期貨）原始金額 1396266800 元、151 口與顯示權重 0.3049% 保留在來源證據；canonical NAV weight 與 exposure_weight 仍為 `None`。原始經濟對帳差額為 `-0.00023929617307307685`，核心依既有嚴格容差視為零，不分攤殘差。本次只補原始示範所需的一檔來源，完整 Task 13 仍為 **PARTIAL**。

### 富邦已觀察名單補齊

新增八檔的 body title、hidden ID、2026-10-22 實際資料日期、同頁 NAV 與完整股票逐筆金額，均先從 raw HTML 獨立擷取後凍結預期。原生顯示百分比不取代 amount/NAV；沒有新增財務映射規則。全部通過核心 validator，但原始經濟差額仍保留。

00692 有一筆附買回債券明細 B644BS「P09鴻海3B」，金額 30043911 元，與摘要精確相等；仍以摘要 `other` 一次計入。00900、009802 的精確既有負債標籤「應付受益權單位買回款 (TWD)」原金額分別 158468972、9855132，依既有規則轉為負的經濟貢獻；原始正值保留在來源與 provenance。其他 cash/other 保留原符號。八檔均有一筆期貨，NAV weight 與 exposure_weight 維持 `None`。

| ETF | 原始經濟差額 NAV fraction | 核心嚴格容差後差額 |
| --- | ---: | ---: |
| 0057 | -0.000326017242949916940960637 | 0 |
| 00692 | -0.000192629971480243147160642 | 0 |
| 00730 | -0.004066241823562454043907385 | -0.004066241823562454043907385 |
| 00733 | -0.021073802413386477083200721 | -0.021073802413386477083200721 |
| 00892 | -0.000509861809234360627119492 | -0.000509861809234360627119492 |
| 00900 | 0.0004983974671330629532232891 | 0 |
| 009802 | 0.0000858772320580920399826623 | 0 |
| 009809 | -0.000406137223091850583249294 | 0 |

00730、00733、00892 的負差額超出既有嚴格容差，保留並交由核心報告揭露，不把差額重新分攤。本段只說明富邦11檔來源子集；當前33檔觀察名錄配置見開頭，原五檔本地固定示範見後節，完整自動路線／其他平台與對外發布仍另待驗收。


## 固定demo：本地共同日與00878唯一例外

`demo/portfolio.json` 中的金額都是**假設市值**（新台幣），不是使用者真實部位：0050 為 300,000、006208 為 200,000、0056 為 150,000、00878 為 150,000、00919 為 100,000，直接持有 2330 為 100,000。五份 ETF 快照的共同持股日為 2026-10-22；各快照的原始 URL、`fetched_at` 與原始來源 hash 均維持原樣。

00878 使用的是已核對、含總淨值（NAV）的舊版中文完整持股表，沒有改用缺少淨值的新版格式來推算。這項來源例外**僅適用於固定示範**，不能延伸到其他日期，也不能作為判斷當期來源是否合格的依據。

預期結果由現有run_lookthrough在真實台北2026-10-26、default today、use_network=False＋deny opener實跑一次生成；前置source／snapshot hash與03:44Z獨立2330預期先凍結，並非拷貝舊expected或反推。完整證據在demo/provenance.json、pre-run-evidence.json、generation-evidence.json及repository demo-handcheck.md。舊原五檔雙run與Codex乾淨ZIP證據仍保持原樣，不把它們當本次新Web驗收。

demo/report.md與README明示native百分比保留、不rescale，Cathay native97.13%與同頁amount/NAV97.111452727684...%差異、44.631996610434726 TWD桶殘差、1320 TWD未分類與NYF/TX/TX202611/WTXX6F四筆unknown futures。source manifests原件留研究區，包內只有canonical snapshots及小lineage metadata，不冒稱下載包內已有全部大型raw。

固定示範保留原本的持股日，與當期資料包分開管理。固定示範不能用來建立當期快照，也不能用來宣稱每日資料已成功取得。目前支援哪些商品、各商品的持股日，請查閱 [snapshot-coverage.md](snapshot-coverage.md)；舊網站索引已停用，不再讀取。

一般使用與平台操作一律以**實際執行日**為準。若資料超過既有的 30 天規則，依核心邏輯保留過期警告，並照常提供可用資料；不得把 today 寫死，也不得修改 `fetched_at` 來掩蓋資料過期。

重現完整 JSON 歷史結果時，只排除最上層的 `generated_at`。固定時鐘僅用於歷史單元測試，不代表平台驗收結果。


封存管線可用 `publish --raw-dir <fresh-directory>` 同時保存原始 bytes 與不可變的 `raw-manifest.json`；輸出目錄須獨立於持股發布目錄。
