docs(2meet-data-optimizer): ADR-004 search-index mode and 1.1.0 release notes

- ADR-004: HivePress / WooCommerce sites keep native meta as the source of truth and use flat tables as its search index; records the 2.1 write order, shadow_read, Promotion Guard, restore policy and router rules, with known limits
- CONTEXT.md Entity Bridge, BENCHMARK-SCALE.md front-end and write-chain measurements (dev36), CHANGELOG and readme for 1.1.0; version 1.1.0
- composer phpcs uses phpcs.xml like CI (was --standard=WordPress with 2312 false errors)
- Verify: composer phpcs (0); composer test; composer stan
- PR: PR-064
This commit is contained in:
2026-09-26 20:24:42 +08:00
parent aa2da274dd
commit 4fc59b757e
7 changed files with 218 additions and 4 deletions
+51
View File
@@ -7,6 +7,57 @@ Versioning follows [Semantic Versioning](https://semver.org/).
---
## [1.1.0] — 2026-09-26 — HivePress / WooCommerce 搜尋索引模式(hardening 2.1)
**性質**:資料正確性修正 + 查詢改寫補強。無 schema 變更。決策與設計見
`docs/adr-004-search-index-mode-for-hp-wc.md`;搭配 HivePress AddOn 0.2.0。
### Added
- **Promotion Guard**(`TMDO_Promotion_Guard`):HivePress 啟用時 post / user / term /
comment、WooCommerce 啟用時 post / user 不得升到 aeav_only 或執行 cleanup
(`WP_Error( 'promotion_guarded' )`,filter `tmdo_promotion_guard_allow`);已在
aeav_only 的站只顯示後台 notice。(PR-053)
- **`wp tmdo repair-array-literals [--entity] [--confirm]`**:把扁平表中的 `"Array"`
從原生修回;原生也被污染的列出清單。(PR-055)
- **`bridge-restore-native --overwrite / --only-missing`**:預設依模式(aeav_only 覆寫、
其他只補缺);報告新增 `missing` / `differs` / `same` / `default_skipped`。(PR-058)
- **live 測試層** `tests/live/`(在真實站台以 `wp eval-file` 執行):suites
`shadow_write`、`serialized`、`resync`、`router`、`zero_side_effect`,以及 qbench /
fe.sh 等量測工具。(PR-052)
### Changed
- **Hook Bus 寫入順序**:dual_write / shadow_read 由 WordPress 寫原生,扁平表在
`added_ / updated_ / deleted_{type}_meta` 從原生重新同步(含 `delete_all`、
`update_metadata_by_mid` 改 key)。(PR-057)
- **shadow_read** 讀原生,並抽樣比對扁平值(`tmdo_shadow_compare_sample_rate`)。(PR-056)
- **Post query router**:
- 全有或全無:OR、多 post type、含已註冊 key 的巢狀 group、type 語意與欄位不符的
clause 讓整個查詢維持原生;LIKE 包 `%esc_like%`;`pre_get_posts` priority 1000。(PR-060)
- 每個 group 各自 JOIN、不加 GROUP BY;NOT EXISTS 不走狀態 / 日期副本路由。(PR-061)
- meta orderby:HivePress `_sort`(NOT EXISTS + EXISTS)形狀、具名 clause、
`meta_key` + `meta_value_num`。(PR-062)
- routed 搜尋維持 WordPress 的 split query(ID-first)。(PR-062b)
- `composer phpcs` 改用 `phpcs.xml`(與 CI 相同)。
### Fixed
- shadow_read 下 `update_*_meta()` 回傳 false、原生沒有寫入(資料遺失)。(PR-056)
- 陣列 / 物件存進 text 欄位變成 `"Array"`;text 超過 255 字元改存 NULL 並記錄
`text_overflow`。(PR-055)
- `bridge-restore-native` 覆蓋較新的原生值(WC 庫存)、替每個 user 捏造預設值列。(PR-058)
- Cold / Hot 表不存在時,`save_post`、`loop_start`、刪除文章仍查詢它們(DB error)。(PR-054、PR-054b)
- Router:Q05(wp_core 與另一 group 的 key 並用)`Unknown column`;OR / 多 post type /
無 type 數值比較 / 具名 orderby 的結果與原生不同。(PR-060〜062)
### Docs
- ADR-004、`CONTEXT.md` Entity Bridge(寫入順序、shadow_read、搜尋索引模式、Router 規則)、
`docs/BENCHMARK-SCALE.md` 前台與寫入鏈實測。(PR-064)
---
## [1.0.2] — 2026-08-15 — NinjaFirewall 相容性:WAF 設定選項保護
**性質**:防禦性修正 + 文件。無 schema 變更,無破壞性變更。