Skip to Content
核心概念CT 核心更新補齊

CT 核心更新補齊

來源界線

本次比較 backend 7c41cbc50170b3003ba16ee099f1db4e78f61d1a 與已 fetch 的 master c15a12f9b01aa3e88e7b0cf65fe4735a48e03718(VERSION 5.19.0),檢閱至 2026 年 10 月 6 日(UTC)。這是已合併 Custom Tables 來源的文件,不代表 staging/production 部署、瀏覽器驗收或新增行為測試結果。前次 1a1fd292a0 與 41f8a03ce3 checkpoint 之後的增補涵蓋 CT #1965、#1952、#1923、#1962 與 #1950 的 CT 審核 manifest 修正,以及 #1996 的來源證據無關 proposal、#1994 僅限 CT 附件的子集、#1987 history/ACL 投影與 #2015 proposal 失敗分類;非 CT 模組與只有測試的變更排除。 另包含已合併座標 PR1 #1988。主管將 PR1 加上 #1987、#2015 設為 backend 5.20.0 發行目標;空間查詢篩選稍後隨 backend 5.21.0 提供(見下方)。此處不是 production rollout 證據。

離線 Playground 與 OpenAPI snapshot 仍各自標示來源版本。來源說明不會自動把新描述的請求變成可執行 catalog 項目。整合新版契約前,先確認使用環境的部署版本。

Proposal 失敗與 logical read 證據

#2015 區分過期 schema/source/authority 證據與非預期服務失敗。Governed proposal/selection 路徑對非預期內部失敗回 HTTP 500 ct.operation_failed、retry_same_key;Command/query timeout 與 effect-identity lock 使用 ct.operation_in_progress,key-content 衝突使用 ct.request_key_reuse,table constraint 維持 ct.constraint_violation。根本原因 log 只標示 class/module/line/step,不記錄私密 exception text。已提交後的 receipt 失敗仍為 ct.operation_outcome_unknown,須查詢收據。Table-source logical read 證據從整表欄位集合排除呼叫者隱藏欄位,不放寬真正 read/version/authority 檢查。Client recovery 請見凍結提案。

History 與 canonical column ACL

#1987 已由主管確認合併,來源 b1e5a13d0e209b41cca460fbe6ba0dc7c7b301a8。Display-keyed column ACL 輸入會正規化為目前 internal key;衝突別名會被拒絕。Live-read masking 解析別名,history/diff 依現行 denial 與 computed source dependency 投影。受欄位 allowlist/Agent ceiling 限制的 principal 不再看見已移除欄位;未受限 history 讀者仍可能看見。請見欄位可見性與歷程。此增補更新先前 #1994 source checkpoint,不更新離線 OpenAPI。主管確認 #1987 已於 5.19.0 發行;owner 回報整合後 reader/manager 隱私控制通過。實際出勤套件仍須 safety-net 驗收;員工 execute grants 維持空陣列。

附件來源與投遞權限

**#1994(僅 CT 子集)**收緊 create/update、bulk 與 prepared approval 附件寫入。同公司計費歸屬必要但不足:ID 需是同一 cell 已持有、本表上傳路徑或允許的 acting/table-owned room 檔案,或 acting user 能透過其他 CT 表讀取的檔案。跨表複製需 live row/可見欄位權限;pending upload 需來源表可讀及完整有界 no-holder probe。External client、public callback 與 system/無 actor 寫入不借用 user 讀取權。未知、跨租戶及未授權同公司 ID 共用不可存取診斷。自後端 5.22.0 起,Command 的附件複製 grant是唯一的例外:它會放行由該 Command 自己的 select 選出的複製,並以 grant 作者(而不是呼叫者)的權限來判斷。見附件來源權限。

send_channel_message 更窄:不可變快照的 blob 必須由本表自己的上傳路徑產生,或已屬於收件客戶聊天室。Cell 或跨表複製不授予 delivery 權限。既有 column/type、company、history/version 及外部 channel URL 檢查仍保留。見trigger actions。此增補不教非 CT blob、root、media 或 messaging 功能。

既有欄位 update preview

#1941 在 company、department、chatroom 新增 moderator-authorized、identity-bound POST …/columns/{column_id}/preview。Body 為 ColumnUpdate,以替換 schema 投影 caller-visible sample,不修改資料;之後 caller PATCH 保留的 body,沒有 preview ticket/hash 或凍結狀態。Preview 每 checked table 上限 200 live row、共用 2,000 ms,在 #1941 時是每 tenant/table 一個 concurrent preview;backend 5.21.0(#2052)改為每個資料表一個、每位使用者一個。無效 update preview 使用 HTTP 拒絕,不是 create-preview 的 valid: false;PATCH missing column 也改回 404。見欄位 reference。

審批證據與 Commands

  • #1896、#1906、#1921 — 原生終態事實。 require_approval.output_map 可用 terminal_fact 綁定證據欄位。只有驗證通過的凍結 v2 Command 放行會與業務異動一起原子寫入。只有輸出用途的受保護載體不再要求呼叫者於 staging 前可讀;真正的映射輸入仍須可讀。收據、重播、事件及歷史仍遵守一般列/欄 ACL。JSON、載體型別及失敗契約請見終態來源證據。

  • #1923 — 終態載體與唯一性約束。 原生 Command prescan 只延後 enabled 且 matching 核准規則的 terminal-bound component,不建立暫時 unique claim;其他 forbidden null 仍須拒絕。每個延後的 record 必須有對應 held verdict,否則以 409 approval_decision_diverged 回滾該 pass。放行時注入真正終態事實,並原子檢查完整 tuple。Unique 失敗時 Review 保持 approved、hold 為 apply_failed,不提交業務/history/claim 效果,失敗收據不含值。Proposal staging 不是原生終態放行;下述 #1996 收窄先前對 write 的全面拒絕。窄範圍 staging 例外請見唯一 tuple與終態來源證據。

  • #1996 — 與來源證據無關的 proposal。 Terminal-carrier table 上只允許 write set 與受保護 carrier/output-map、approval field-map、condition、unique-key dependencies 無交集的既有列 update。Preparation 與 frozen-access/release 再驗證此邊界、protected old/new value 不變、target ID 與正數 expected version。對受保護 target 的 insert、delete、upsert、child/cascade 異動及 protected-field write 仍以 409 approval_provenance_unavailable 拒絕。一般 authority、stale-state 與 prescan/held-verdict 檢查不變;proposal 不能捏造原生終態事實。詳細邊界見終態來源證據。

  • #1965 — 收據與事件投影。 Mapping/list 中巢狀 reserved approval_provenance key(含 null)使回傳收據僅剩狀態,manager 也一樣;只有頂層 null 不會如此。Definer authority 下,只有不含 provenance 的 ct.command.succeeded metadata 能供具權限的原始 invoker 讀取,不含 cell、step 或 output。Execution owner/可見性及含 provenance 的 evidence 檢查仍適用,包括 replay;不改寫既有 legacy audit body。

  • #1892 — 有界相依閉包。 驗證與執行共用 256 張相依資料表上限。compiled.table_ids、驗證 advisory 的 table_ids、definition-authority 的 table_access 可承載完整閉包,不再截成 20 張。這不會提高直接 write target 或 approval-gated table 各 20 張的上限。過大閉包回傳 query_limit_exceeded、phase author、limit 與 actual;不得刪除相依項目來迴避驗證。

  • #1900 — Commands 尊重公式版本。 編譯、相依追蹤與求值均使用欄位 formula_version,包括 stored v2 值。明確採用工作日日曆時,核心可在 commands_only 表上以 derived_recompute 原子重算儲存結果/來源證據;不授權業務欄位寫入,也不發出業務 trigger。請見公式 v2。

  • #1852 — 審批映射與流程檢查。 原生表單輸入可用 column、fixed 或 omit 綁定;映射輸出仍驗證欄位型別。凍結放行仍重新驗證 schema/權限。對話同意不是原生 Review 核准;呼叫者傳入仿 Review 資料不會取得終態事實寫入權。

  • #1874 — 提案與委派。 受治理提案保留凍結計畫與收據;Command/審核者委派是即時權限相依,不是任意編輯資料列的授權。仍使用原生 prepare/approve/execute 生命週期及現行權限檢查。

  • #1962 — typed SELECT binds、祖先集合與日期算術。 SQL 綁定保留陣列/JSON 值及精確數值/日期項目;relation 的布林值與完整祖先陣列在重用時保留型別。成員運算比較完整 JSON 值,而非子集合;null 或非陣列的儲存集合不會成為可寫入的匹配。$case 保留相容陣列的項目型別與界限;$datediff 可參與精確 decimal SQL 算術。不支援的 JSON 傳遞回傳安全的型別拒絕,不暴露 SQL 或參數;Command JSON 深度失敗則是已清理的 request-validation 回應。見 typed SELECT 值與 Command 錯誤契約。既有授權、relation 界限與精確 decimal 限制不變。

  • #1950 — 安全 callback 審核投影。 Review manifest 從第一個 compiled delivery action(或直接 callback)取得 method、目的地、header 名稱、已去識別化的 body shape 與參照 token。目的地移除 URL 的使用者資訊、query 與 fragment。這不擴大 callback 授權,也不揭露凍結的 header/body 值。見審核者看到什麼。#1950 其餘內容是測試對齊,不是另一項產品契約。

可攜設定與存取

  • #1893 — 可攜 ACL 與 grant 參照。 IaC 在文件欄位宣告後、record seed 前綁定邏輯欄位 ACL key;匯出反向還原為 ref,包括 column write-ACL 與多 principal cell。Command grant 共用 table grant token:$user:<username>、$dept:<name>、$room:<name>、$room:<department>/<name>、$smc:<platform>:<external_id>。原生讀取仍回傳 native ID;模糊/懸空匯出參照保留既有 raw-ID fallback。於目的公司重套匯出內容,重新解析目的身分,不要把來源公司 ID 當可攜 principal。
  • #1884 — 指派與寫入 ACL。 寫入會檢查 incoming principal assignment 及欄位寫入限制;多 principal cell 不只是顯示清單。IaC user-list cell 用公司內的 $user: token;$dept: 是 grant token,不是 principal cell kind。未知、僅外公司存在或型別不符的 record token,在 plan 以 iac_principal_reference 拒絕,不產生資源效果。
  • #1873 — 維度、原生連結與 package readiness。 required native-link 與 same-dimension 規則加入 mutation/plan/apply 檢查。接受 JSON 形狀不代表可跨 scope 連結;須解析 package ref 及現行權限。請見同維度參照與 IaC。
  • #1878 — 權限涵蓋。 client-access 與部門欄位權限使用現行有效限制。較廣 scope grant 不代表可讀被遮罩欄位。請見權限與 ACL。

僅變更 ACL 的 IaC 更新可使用 table moderator 權限,但不因此取得建表、改名、其他 metadata、宣告欄位或 system import 權限。請以真正 apply 的 actor 規劃完整 package。

Scope 套件與不可變輸入

#1952 在 #1907 revert 後重新提供 scope CT package lifecycle 與 A1–A6 immutable-input 基礎。它不同於一般 IaC plan/apply及 append-only 暫存世代。使用帶 scope ID 的根路徑 /private/module/custom_tables/company/{company_id},或同 module prefix 下的 /department/{department_id}、/chatroom/{chatroom_id}。這些 input/package 路由要求 JWT,不是一般 API key 驗證。

路由後綴契約
POST /packages/plan提供 contract_version: 1、已取得的 manifest_artifact_id、semantic manifest_digest、mode install/upgrade/retire、expected_active_generation、request_idempotency_key
POST /packages/plans/{plan_id}/apply綁定 expected_plan_digest 與 request key;202 代表已保留 run,不是安裝完成
GET /packages/runs/{run_id}讀取目前 package_status、run_version 與 verification identity
POST /packages/runs/{run_id}/activate綁定 expected_run_version、expected_manifest_digest 與 request key;須為 ready_to_activate、目前 prerequisite 可用且 verification 通過

Install 與 upgrade 成功時都使用 verification outcome installed。Plan 在 24 小時後到期;inline step preview 最多 100 項,完整 step 保留於 steps_artifact_id。不提高既有 IaC 上限。

POST /core/input-artifacts 以 multipart metadata 加 file 取得輸入;/core/input-artifacts/from-source 只把目前可見、自己 turn 的 chat attachment 複製至目的 scope 的 manager audience,不改來源。不可用任意 URL 或一般 blob ID。以 /core/input-acquisitions/{acquisition_id} 讀取 acquisition status;artifact metadata 與 /bytes 是分開的讀取。iac_document 最多 5 MiB,其他 purpose 1 MiB,每次 byte-read chunk 64 KiB。這不是 id-less attachment blob 路由。

包括 same-key replay,都重新檢查目前 scope、resource 與 retained-input 權限;foreign、revoked、missing retained authority 共用 typed hidden/missing 404。拒絕 client-authored $ct_secret_version object;$ct_secret_slot 只可用於 mapped credential field 並具 exact-purpose accounting,不可放任意業務 JSON。A7 full-state snapshot/rebuild/restore 仍延後:取得 export index/template 不授予 trusted source-system 或 restore 權限。這個 source note 不代表部署可用、瀏覽器驗收或 real-model 對話品質,也不更新離線 catalog/OpenAPI pin。

計算值與文件明細

  • #1865 — 公式 v2 與工作日。 明確選 formula_version: 2;省略仍是 legacy v1。computation_mode: "stored" 僅適用 v2 及支援的同列相依。結果、來源變更及日曆證據走核心重算;v1 不會自動遷移。請見公式 v2。
  • #1890 — computed metadata。 新增計算 metadata 使用可 instant-add 的 schema 路徑;不代表可提交生成/計算 cell 或跳過公式驗證。
  • #1861 — 有序子集合。 主表/明細 bundle 用已儲存的 v2 Command、actor 範圍 idempotency 及預期版本進行原子寫入。陣列取代成員;省略集合 key 保留成員。parent/position 欄位由伺服器擁有;分組歷史/as-of 仍受現行 ACL 限制。請見子集合。
  • #1882 — 過帳與有限資源。 過帳組合及有限資源保留檢查使用既有 Command/rule 交易。posted-state 規則、禁止編輯 grant、歷史及沖銷 Command 是控制組合,不是不可覆寫 seal;高權限管理者或 IaC 仍可改變政策/資料。請見動作政策。

CT 整合與發佈

  • #1858 — events、inbox、outbox。 CT 發出伺服器擁有的型別化 event envelope。Command inbox 以 external_event_id 綁定 inputs;不同 payload 為 ct.inbox_payload_conflict。未知結果必須查詢/調解,不要盲目啟動新業務執行。delivery reconciliation 使用 action_id、expected_attempts、outcome(applied、not_applied、unresolved)及非空 reference。
  • #1875 — 完成 callback。 Command 完成透過 durable outbox 傳送;callback 已排隊不等於接收端已套用。重試保留 execution/event 身分,未知投遞結果須調解。
  • #1879 — CT 觸發 Worker 與排程。 CT trigger 可呼叫 EdgeWorker;排程執行及 CT event delivery 仍遵守配置的 Command/存取界線。trigger 不能繞過 commands_only 或欄位 ACL;本頁只述 CT 整合,不含一般 Worker 管理。
  • #1866 — 公開讀取。 matrix/timeline view 與每 token rate limit 保留即時 view/token projection。mint 時省略或 null columns 使用 view projection;columns: [] 代表無欄位,不是全部。schema 變更不會凍結舊的無限制 projection。請見公開讀取。
  • #1867 — 原子 publish session。 publish task ticket 綁定擁有者及原生發佈檢查;ticket ID 不是權限 capability。請見原子 publish session。
  • #1864 — 附件。 CT 附件生命週期延伸至 REST、IaC、CT Agent/MCP,仍保留 blob 擁有者、可見性與清理檢查。請見附件與 blob。
  • #1877 — CT Analyst 讀取。 CT Analyst 工具清單包含 child-bundle 讀取;寫入仍使用已儲存 Command 的同意/執行路徑。

Backend 5.21.0(10 月 8 日)

Backend 172a7f80bdf4dbdffdc018eb08bfa42c62bb485c(tag v5.21.0,VERSION 為 5.21.0)依其已發行的程式碼樹撰寫文件,並與 5.20.1(4a6921b7e2b1b09f9c9cd5615210e3cc234fe364)比較。這是來源 pin,不代表 staging/production 已部署;離線 OpenAPI 快照、端點目錄與 Playground 仍維持各自較早的 pin。每項變更給整合方的「該怎麼做」寫在變更紀錄;以下清單列出每個呼叫端可見變更背後的 backend PR,以及講解它的頁面。

  • #2101、#2110、#2112 — 其他公司的 id 回應與不存在相同。 其他公司的資料表、房間、link 目標、診斷與 trigger 目標 id 不再回 403(或回一個能分辨兩種情況的錯誤),而是與不存在的 id 相同;個別使用者授權路由則維持單一 403。見其他公司的 id 回應與不存在相同。
  • #2117 — 新增欄位、刪除欄位或清除單一資料表時遇到 Redis 中斷,回有型別的 503。 見併發與重試。
  • #2091、#2111、#2113、#2117、#2118、#2121、#2048、#2058 — IaC。 大型欄位回填走有 ticket 的非同步 apply(202);ticket 以有型別的 ct.iac_apply_* 狀態結束,不再卡住;原始資料表 id 與名稱一樣被授權;plan、state、export 與 apply 的起始階段受請求時間預算限制;Commands 可以寫入名為 secret_ref 的業務欄位。見 plan 與 apply。
  • #2104、#2115、#2123、#2067、#2134 — 匯出、隱藏欄位與 unique 衝突。 CSV 與 XLSX 會中和以公式字元開頭的文字,匯出的大小與產生時間有上限,隱藏欄位的回應與不存在的欄位完全相同,unique 衝突錯誤也不再點出隱藏欄位。#2134 是 review 後續修正:unit selector 指向隱藏欄位的查詢和以前一樣被拒絕(#2123 曾在同一版內拿掉這項拒絕),而 IaC apply 若在自己的期限檢查寫入 ct.iac_apply_timeout 之後才完成,會用完成結果取代那張 ticket。其餘部分讓 Agent 工具箱的查詢工具套用同樣的 unit selector 拒絕、移除一個沒用到的 IaC 429 schema model,並補上測試。見匯出檔案與欄位可見性。
  • #2072 — 座標空間索引與距離查詢。 紀錄查詢可使用 within、within_any 與 sort[].distance_from。見座標查詢。
  • #2105、#2116、#2135、#2052 — 欄位操作。 超過 500 筆 live 紀錄的 REST 欄位新增改為背景執行,並有狀態紀錄與有型別的錯誤;欄位寫入依 API worker 准入,滿載時回有型別的 429;更新預覽則依資料表與使用者各准入一個。見背景新增欄位與欄位參考。
  • #2060、#2066 — Command 運算子與 upsert。 $time_of_day、$local_date、$date_add,以及針對 unique_tuple 規則的 on_conflict upsert step(含 stored formula 鍵)與 dry_run 預覽。見本地時間與日期與以 on_conflict 做 upsert。
  • #2083、#2120、#2109、#2055、#2056、#2033 — Commands:公開結果、子集合、法律保留、provenance、release 失敗與 SQL 組合。 在 flush 期間失敗的 release 現在會以終態結束。見作者選擇公開的結果與審批與法律保留。
  • #2050 — 工作日行事曆。 唯讀 API key scope 與選用的例外 label。見唯讀 API key 存取。
  • #2085、#2118、#2135 與 commit 9440dd930e(沒有 PR 編號)— ticket 與背景工作。 Bulk ticket 在 worker 消失時以有型別的狀態結束,GET /public/task 只提供呼叫者有權輪詢的 ticket,匯入 extraction ticket 歸上傳者所有。見輪詢 ticket。
  • 僅可靠性 — #2140、#2139、#2122、#2136、#2096、#2106。 Custom Tables 的資料庫工作改在 event loop 之外執行,full-GC 暫停與 worker 回收不再卡住請求,plan、reference guard 與時區集合的運算也更快。請求與回應的形狀都沒有改變。
  • 僅測試與 harness — #2068、#2074、#2089、#2098、#2114、#2119、#2138。 不是呼叫端契約。

Backend 5.22.0(10 月 9 日)

Backend 36270f5a2b83fdd71b6641ad94cee707f8028292(即 tag v5.22.0 的程式碼樹;tag 所在的 commit ceee9a325d17d08a33e6c5bd94b9ecc3d1c84112 只把 VERSION 改為 5.22.0)依其已發行的程式碼樹撰寫文件,並與 5.21.0(172a7f80bdf4dbdffdc018eb08bfa42c62bb485c)比較。這是來源 pin,不代表 staging/production 已部署;離線 OpenAPI 快照、端點目錄與 Playground 仍維持各自較早的 pin。每項變更給整合方的「該怎麼做」寫在變更紀錄;以下清單列出每個呼叫端可見變更背後的 backend PR,以及講解它的頁面。這個範圍內共 23 個 commit,其中 9 個與 Custom Tables 有關;其餘 14 個是 Edge Workers、Sandbox 與基礎設施的 commit,本站不涵蓋。

  • #2167 — 變更超過 300 個資源的 plan 改走 ticket 套用。 若 IaC apply 的 plan 建立、更新、刪除或搬移超過 300 個資源(CUSTOM_TABLE_IAC_SYNC_CHANGE_LIMIT),會回 202 與 ticket,而不是在 request 內套用;noop、adopt、orphaned 與 record 行不計入。client 必須同時處理 200 與 202。見變更量大的 Plan。
  • #2151(ticket 部分)— 準時回傳的 apply 以 finished 結束。 在 attempt 期限之前就回傳的結果,會取代搶先寫入的 ct.iac_apply_timeout(不論是 worker 的 heartbeat、某次 status poll,還是重新投遞的工作寫的);超過期限才回傳的結果則維持 timeout。這取代了上面 #2134 為 5.21.0 描述的「遲到的結果取代 timeout」。見 Ticket 沒有結果就結束。
  • #2166 — Command dry run、資料表 settings 與公開讀取。 definer 權限 Command 的 dry_run 失敗時,對 execute-only 呼叫者的錯誤會像執行一樣被遮蔽;資料表 settings 中的座標索引狀態改由伺服器擁有(任何讀取都不回傳、IaC 會丟掉文件裡的副本、REST 建立會拒絕;在 5.21.0 上傳、文件帶有這個 key 的 package input 必須重新上傳),含座標欄位資料表的既有 IaC plan hash、Command 提案與暫存世代會在升級時失效一次;公開讀取的 query 最多接受 3 個 sort 鍵(第 4 個回 400,不再是 500)。見以 dry_run 預覽、座標索引與讀取。
  • #2159 — 附件複製。 version 2 的寫入型 Command 可以帶 attachment_copies grant,讓原本無法自行複製的呼叫者(例如外部 client)也能跨資料表複製指定的附件;每次複製都會重新檢查 grant 的作者,部署也可以關閉這項功能。見附件複製。
  • #2155 — 背景新增欄位不再因鎖衝突永久失敗。 死結會在 worker 內重跑;鎖等待逾時,或重跑後仍發生的死結,會把該次嘗試結束為 ct.column_add_interrupted,下一次 status poll 會接續;第三次以鎖衝突結束的嘗試才把工作結束為 ct.column_add_failed。見背景新增欄位。
  • #2151 — 隱藏名稱與有型別的 Command 錯誤。 被隱藏的欄位在另外三處的回應與不存在的欄位相同(以紀錄欄位排序的 saved view、MCP records_aggregate 的 group_by、agent 計算篩選);對不含 child_collection step 的 Command 呼叫 /execute 時,核准規則的來源資料表落在 tag 之外,改回 422 command_tables_outside_tag,不再是 500。見欄位可見性與 Commands。
  • 僅可靠性 — #2158。 單一 API worker 收到大量已驗證請求時,請求不再互相卡住:request log 改在回應之後寫入,等候資料庫連線也有自己的限流器。請求與回應的形狀都沒有改變。
  • 內部或僅測試 — #2153、#2149、#2164。 讀不到的時區資料庫不再讓 worker 啟動失敗、行程內工作登錄表會把關鍵字參數原樣傳遞,E2E 工具中的 worker 回收與 staging IaC 探測也做了調整。這些都不是呼叫端合約。

刻意不宣稱的功能

#1907 已被 #1948 revert;後續 #1952 僅重新提供此處描述的 scope package lifecycle 與 A1–A6 input 基礎。不得宣稱 A7 full-state snapshot/rebuild/restore。排除非 CT、root operations、Custom API tools、billing 及通用 agent platform;唯一有說明的 root 路由是座標索引回填,寫在座標查詢頁僅供 operator 參考的提示框中,因為它會補完呼叫端看得到的狀態。只有測試的合併(#1863、#1798、#1889、#1959)不是新增呼叫契約。

座標型別、幾何、formula/Command/rule 運算子,以及(自 5.21.0 起)stored 查詢篩選與距離排序都已提供;只有核准設計仍不等於已提供運算子,所以依賴某項功能前請先對照它的頁面。

Last updated on