mirror of
https://github.com/bytedance/deer-flow.git
synced 2026-10-27 05:30:39 +00:00
* fix(skills): strip section anchors from code-span resource refs Markdown-link targets already drop their #fragment before the reference is resolved, but code-span refs did not: a prose reference like `references/faq.md#pricing` kept the anchor and was resolved as a literal path, producing a resource.missing finding for a file that exists and is referenced. The bare-path token scanner stops at '#', so only the code-span branch leaked fragments. Split the fragment off code-span tokens the same way the link branch does, then strip trailing sentence punctuation. Real dotted filenames keep their dots: the split happens at the first '#', and '.' is only stripped from the very end. Signed-off-by: yetuge <2219677952@qq.com> * fix(skills): prefer exact hash-bearing filenames over fragment stripping Package paths permit '#', so a code-span reference to a real file like references/C#.md was truncated to references/C by the fragment split, producing both a false resource.missing and an orphan report (the bare path token stopped at '#' the same way). Keep the whole reference in every extraction branch (link target, code span, bare path token now includes '#' in its character class) and resolve the fragment existence-aware: prefer the exact token when it names a real file and treat the suffix after the first '#' as a section fragment only when it does not. Red/green: a new test pins references/C#.md resolving to the real file while references/faq.md#pricing still strips to faq.md — it fails on the reviewed head and passes with the change; full test_skill_review_core.py is 36 passed. Signed-off-by: yetuge <2219677952@qq.com> * fix(skills): strip the fragment before normalizing the fallback path The exact-path preference checked the normalized reference, so a token like references/faq.md#/../other.md normalized to references/other.md; when that file existed the check succeeded and the fragment-removal branch was skipped, recording the wrong edge and orphaning faq.md. Check the literal token against the package files instead, and drop the fragment before the remaining path is normalized — normalizing a hash-bearing segment must never retarget an edge. Signed-off-by: yetuge <2219677952@qq.com> * fix(skills): canonicalize leading segments in the hash-filename lookup The literal-file check compared the verbatim joined path, whose leading relative segments are uncanonicalized: from references/sub/guide.md, a reference to ../C#.md joins to references/sub/../C#.md, matches no snapshot key, and falls through to fragment stripping — truncating the real references/C#.md into a false missing and an orphan. Compare against the normpath-canonicalized whole token instead, and treat the post-'#' text as a fragment whenever it is path-like (carries / or ..) so it can still never participate in normalization and retarget an edge. Signed-off-by: yetuge <2219677952@qq.com> * fix(skills): check the canonical whole path before stripping a fragment The path-like-fragment heuristic dropped any post-'#' text carrying '/': a real package file such as references/C#/readme.md (a '#' inside a directory name) was truncated to references/C, producing a false resource.missing and orphaning readme.md. Only a '..' segment in the post-'#' text forces the strip-first fallback — that is the one case where fragment text participates in normalization and can retarget an edge (faq.md#/../other.md). Every other fragment first gets the canonicalized whole-token lookup, which already canonicalizes leading relative segments for nested sources. Signed-off-by: yetuge <2219677952@qq.com> * fix(skills): always strip markdown link fragments and blind the bare-path pass to links Markdown link targets have fixed fragment semantics: the text after '#' is a URL fragment, never part of the filename, so a link to a file literally named references/faq.md#pricing would have to percent-encode it. The exact-file branch applied the hash-filename preference to link targets too, recording a valid edge and suppressing resource.missing for a broken link when a literal same-named file existed. Links strip the fragment again, and their full construct is blanked out of the residual text so the code-span and bare-path passes — literal-path contexts where '#' may be part of a real filename — never see link-internal text. Signed-off-by: yetuge <2219677952@qq.com> --------- Signed-off-by: yetuge <2219677952@qq.com>