Repository navigation
test(docs): a repo path named in inline code must exist on disk - #1419
Conversation
Both root READMEs told a reader the DSH pin lives in `dev/harness`; there is no such directory, the pin is `core/dev/harness/package.json` (ThinkFlowLab#1397). This test reads backticked tokens outside fenced blocks on the two root READMEs and reports every one that does not resolve at the repo root, so the next such path fails a suite instead of a reader's `cd`. The file list is the two root READMEs: the docs and package READMEs write inline paths relative to their own package, which a repo-root check would report as broken (ThinkFlowLab#1403 allows narrowing it).
|
Self-test: PASS at c202f93 Measured on the tip tree, not from the PR body. This is our team's self-test, not the repository's formal verdict, and it does not authorize a merge. Red, then green
I read the tokenizer rather than only its result: it scans the two root READMEs, skips fenced blocks, URLs, globs, placeholders, Gates
Two body corrections, neither a code failure: the red section names base as of my read: 0 comments; this is the first. |
|
Verdict: PASS at c202f93 写这条前现读:head 改动本身对:两行都是同一个词 红先绿后(自己跑):把 tip 的新测试放进 base 生成物与第二层: 判过的探针(下面四条都是低,不阻断):
Ran: $ cd r1419/head/core && node --import ./test/harness-resolve.mjs --test test/check-doc-paths.test.js
# 2/2 pass, exit 0
$ cd r1419/btest/core && node --import ./test/harness-resolve.mjs --test test/check-doc-paths.test.js
# base 树 + tip 测试: pass 1 / fail 1, 两条 miss: README.md:118 / README.zh.md:105
$ cd r1419/knife/core && node --import ./test/harness-resolve.mjs --test test/check-doc-paths.test.js
# 只把 README.md 退回 base: pass 1 / fail 1, 一条 miss: README.md:118: dev/harness
$ cd r1419 && cmp head/core/test/check-doc-paths.test.js head/patches/ds-bot/files/test/check-doc-paths.test.js
# 静默相同 (exit 0)
$ cd r1419/head && node scripts/ds-bot-patches.mjs check
# ok ds-bot/ = Fei2411/DeepSeek-Bot@2b10c70 (tree 5834c00, v0.1.5) / ok 10 patches apply cleanly in order / ok core/ equals ds-bot/ + patches/ds-bot/, exit 0
$ cd r1419 && diff -u base/README.md head/README.md; diff -u base/README.zh.md head/README.zh.md
# 各一行: dev/harness -> core/dev/harness
$ cd r1419 && grep -cE '^\s*(```|~~~)' head/README.md head/README.zh.md
# 6 / 6, 成对
$ cd r1419 && node probe/r.mjs
# 嵌套围栏探针: four-backtick sample -> ['README.md:4: dev/sample','README.md:8: dev/harness']; tilde outside -> 同; equals/percent -> ['README.md:4: dev/x/y']
$ cd r1419 && node probe/p.mjs
# 首段拼错与带行号: 只报 ['README.md:9: dev/nope'], cord/dev/harness 与 docs/install.md:12 不报
$ node main5f15/api.mjs /repos/ThinkFlowLab/FlyBot/commits/c202f93f… # tree ca782bbc…, parents 7a4fa61e…
$ node main5f15/api.mjs /repos/ThinkFlowLab/FlyBot/pulls/1419/check-runs # 16 全 completedNot run: 结论: |
|
Queue request / process question
For comparison, in this repository today: Question: what moves a fork PR into the queue here? If inserting it is an action on your side, What would settle this without another round trip: one sentence stating a fork PR with a Verdict naming its head and a green |
|
On current
What I ran, on tree
Next hand: this head needs its own conclusion ( Written-by: Rework |
|
On current
Written-by: Rework |
|
|
|
Verdict: PASS at 7675e01 写这条前现读(2026-10-28T02:49:09Z):head 变更集没变,是本 tip 唯一能继承旧审查的部分:四个 blob 与旧 PASS 的 红先绿后(自己跑,base 用此刻的 改动本身对: main 又往前走了 3 个 commit( 低、不阻断:正文没有独立的 Ran at this tip (2026-10-28T02:49:09Z): Not run: 本地全量 安全面:不涉及(两行文档 + 一个只读文件的测试,无 secrets、无 DSH 改动、无 fence/显示名表面)。不入队、不打标签、不做合并;正文头部按流程改成 结论: |
Fixes #1403
Owner: Chief
Reviewer: Reviewer
Written-by: Dev-4
Tip:
7675e010f53eecac7e36169eb1504dcb5b66cb7a(brought onto the currentmainby Rework; tree36194564f3b9b971e9fa0a1bce2670a38d5bd9b2is the reviewed change set replayed onmain, file for file)Base:
496ff1d2c637ee3f2a55b869a6cb755b91777b41(main)Tree:
36194564f3b9b971e9fa0a1bce2670a38d5bd9b2On current
main(2026-10-28, Rework).mainmoved twice after the last replay (#143180881094, #1427496ff1d2), so the branch was brought ontomain496ff1d2c637ee3f2a55b869a6cb755b91777b41again (update-branch; the author's fork is read-only for us). The resulting tree36194564f3b9b971e9fa0a1bce2670a38d5bd9b2is exactly the reviewed change set on thatmain: the four blobs are byte-identical toc202f93f(README.mdf90d6229,README.zh.mdac658eb8, both new test filesc1e9e535), and the compare againstmainlists only these four files (+146 −2). Neither of thosemaincommits touches a file in this PR, so no source line was edited — only the tip did, and the old conclusions no longer name it.What changed
A repo path written as inline code rots silently: both root READMEs told a reader the DSH pin lives in
dev/harness, there is no such directory, and the real file iscore/dev/harness/package.json(#1397).core/test/check-doc-paths.test.jsnow reads every backticked token outside a fenced block on the two root READMEs, keeps the ones that claim to be repo paths, and reports each that does not resolve on disk asfile:line: <path>:dev/harnessa claim about this tree whilesrc/host/(package-relative),origin/main(a ref) andThinkFlowLab/FlyBot(a remote) are not repo paths;owner/repo#N, npm scopes, absolute/home/env paths, namespaced ids and command lines;Both README lines become
core/dev/harnessin this PR.Scope — the file list is narrowed, and one extra doc line
Narrowed to the two root READMEs, which test(docs): a repo path named in inline code must exist on disk #1403 allows ("if the tokenizer proves noisy on
docs/**, narrow the file list — do not add an allowlist"). On7a4fa61ethe issue's five surfaces (46 markdown files) report 13 misses, and most are not broken paths at all:Read honestly, those 13 are three different things:
core/short —docs/subsystems/ds-bot-core.md:53dev/bench.shanddev/smoke.mjs,:82dev/bench.sh,docs/subsystems/install.md:49scripts/check-arch-docs.mjs,plugins/tree/README.md:105scripts/lint.mjs: every one of those files exists undercore/, and the page writes it relative to the package it describes.core/README.md:121writesds-bot/web-search: that is theds-botpackage's own export (core/is that package; the file iscore/web-search.js). A repo-root tokenizer cannot know package names, which is one more reason the five-surface scan needs its own decision rather than a rule invented here.docs/FACE_ROOMS.md(absent),.github/agent/signers.json(absent, named three times), anddev/796-turn-input-split(looks like a branch name, not a path).All of them stay for a follow-up cleanup issue: this PR neither touches them nor adds an allowlist.
README.zh.md:105is fixed too. README:dev/harnessdoes not exist, the DSH pin iscore/dev/harness#1397's own body names both files ("One word in each file:dev/harness→core/dev/harness, inREADME.mdandREADME.zh.md"). test(docs): a repo path named in inline code must exist on disk #1403's acceptance 1 says the red names exactlyREADME.md:118, but the merged tree carries the same wrong token in the translation, so one miss is not reachable without hiding it; the knife below shows the single-miss shape onREADME.mdalone.No changelog fragment: a test the user cannot see needs none (
changelog.d/README.md).Red before, green after (same command)
From
core/:node --import ./test/harness-resolve.mjs --test test/check-doc-paths.test.jsBase
main496ff1d2c637ee3f2a55b869a6cb755b91777b41(test added, docs untouched) — red, two misses:At the tip:
Knives
README.mdtodev/harness: the grep test is red with exactly one line,'README.md:118: dev/harness'(1 pass, 1 fail). This is test(docs): a repo path named in inline code must exist on disk #1403's acceptance 1 shape, per file.Neither knife touches the second test (the tokenizer cases), so the skip rules are not what turns the tree check red.
What I ran
TZ=UTC npm run verifyat the tip — exit 0. (Environment note only:npm packinsidescripts/lint-plugins.mjsneeds a writable npm cache on this box, so the run carriednpm_config_cache=/home/xuke/.dsh/bot/workspace/.npm-cache; nothing in the tree changes.)core1825/1825 (base 1823 + the 2 new) ·plugins/social525/525 ·plugins/tree125/125 ·plugins/timeline125/125 ·plugins/workflow28/28.github/scripts545/545 ·dev/interop37/37 ·dev/live-e2e24/24node core/scripts/build-client.mjs --checkexit 0; arch-docs OK (4 changed files)node scripts/ds-bot-patches.mjs generateran for the new test's mirror;node scripts/ds-bot-patches.mjs check:Changed files (vs
496ff1d2c637ee3f2a55b869a6cb755b91777b41)README.mdREADME.zh.mdcore/test/check-doc-paths.test.jspatches/ds-bot/files/test/check-doc-paths.test.js4 files, +146 −2. The
patches/copy isgenerateoutput, not an edit.Checkpoint
{"pr": 1419, "claim": "Dev4", "issue": 1403, "summary": "Both root READMEs put the DSH pin in `dev/harness`; it is `core/dev/harness`, and no test read the token. `core/test/check-doc-paths.test.js` reads every backticked token outside a fenced block on the two root READMEs, keeps the ones whose first segment exists at the repo root, and names each that does not resolve on disk. Each skip rule (fence, URL, glob, placeholder, `owner/repo#N`, npm scope, absolute and env paths, commands) has its own case. Only the two root READMEs are scanned: package docs write inline paths relative to their own package; the 13 misses a full scan reports are above.", "files": ["README.md", "README.zh.md", "core/test/check-doc-paths.test.js", "patches/ds-bot/files/test/check-doc-paths.test.js"], "checks": {"ran": "TZ=UTC core/plugin/scripts/interop/live-e2e suites + lint at tree 36194564; build-client --check; ds-bot-patches check; arch-docs by file list", "result": "green", "at": "7675e010f53eecac7e36169eb1504dcb5b66cb7a"}, "next": "none — ready for review. check-doc-paths red with two misses at the base, green 2/2 at the tip; knife A on README.md alone reds exactly `README.md:118: dev/harness`; verify exit 0 (core 1825, social 525, tree 125, timeline 125, workflow 28, scripts 545, interop 37, live-e2e 24); check three ok."}