Broken links in prose, invisible to a gate that checks a list
Three hand-written internal links across two days pointed at URLs the site does not publish. Each was guessed from where the source file lives rather than read from where its build script puts it. Ten deploy checks were green throughout.
同一個缺陷,每一個視角
- 使用者
A link in the development log went to a 404. Nothing on the page suggested it would.
- 測試
The deploy gate verifies a list of URLs it is handed. A link written inside a page's prose never joins that list, so no amount of green says anything about it.
- 架構
The URL a page publishes to is decided by its build script. Prose that names a URL is a second, hand-maintained copy of that decision.
判斷軌跡
- 何事 · 使用者dead-internal-link2026-08-02 19:12 → 至今信心 0.99
- 為何 · 開發者url-inferred-from-source-path2026-08-02 19:14 → 2026-08-02 19:22信心 0.7已被取代
- 為何 · 測試the-gate-checks-a-list-and-a-prose-link-is-on-no-list2026-08-02 19:22 → 至今信心 0.93
觀察記錄
- 2026-08-02 19:10已捕捉
A link written minutes earlier returned 404.
- 2026-08-02 19:14調查中
Read as a one-off careless guess.
- 2026-08-02 19:22已定位
Two more found, both a day old. The cause is a missing axis, not a slip.
- 2026-08-02 19:35已驗證
Check fails on a bad link, passes when fixed.
可執行見證
BU-0006 · A gate over an enumeration cannot see what is not enumerated
假設
- refuted
One careless link, caught on the day.
Two of the three were written the previous day and had been live since.
證據
- observation · 2026-08-02 19:12
Three of 28 hand-written internal links returned 404 against the live site.
- observation · 2026-08-02 19:20
Two of the three shipped the previous day and survived ten green deploy checks.
- test_result · 2026-08-02 19:34
New check fails on a reinstated bad link and passes once removed; 28 links across 11 files resolve.
修補
- rejected
Add the pages to the deploy gate's URL list.
Rejected: extends the list, which is the thing that cannot see a link nobody added to it.
- accepted
Resolve every hand-written link against the built output, offline, before deploy.
關聯
- same_root_asBP-0003