From 315ea299a6e8d004e2803ab42c1447021fa28ea6 Mon Sep 17 00:00:00 2001 From: Harlan Wilton Date: Thu, 1 Oct 2026 00:52:41 +1000 Subject: [PATCH] fix(registry): render Skill file deep links `[name].vue` sat beside a `[name]/` folder, so Nuxt made it the parent route of `[name]/-/[...file].vue`. It has no ``, so every direct link to a Skill file rendered the whole Skill page. Moving it to `[name]/index.vue` makes the two pages siblings. nuxt-ai-ready also claims every `.md` URL as a page's Markdown twin, so `/-/reference.md` came back as the Skill page in Markdown. Skill file URLs now bypass it and content negotiation, since the file is the content. The file tree used a router link that pushed `/-/`. The nested route hid that push, so the click looked like an in-place swap. With sibling routes it would leave the Skill page, so the tree link is a plain anchor now. The routing test resolves every page file through unrouting, so a page nested under a parent without `` fails it. `/me` hit the same bug before. --- .../app/components/SkillFileTreeNode.vue | 11 ++- .../[repo]/{[name].vue => [name]/index.vue} | 0 nuxt.config.ts | 2 + server/handlers/skill-file-page.ts | 18 ++++ shared/skill-asset-path.ts | 11 +++ test/e2e/skill-file-deep-link.spec.ts | 23 +++++ test/unit/page-routing.test.ts | 96 +++++++++++++++++++ test/unit/skill-asset-path.test.ts | 23 ++++- test/unit/skill-detail-route-title.test.ts | 2 +- 9 files changed, 181 insertions(+), 5 deletions(-) rename layers/registry/app/pages/gh/[owner]/[repo]/{[name].vue => [name]/index.vue} (100%) create mode 100644 server/handlers/skill-file-page.ts create mode 100644 test/e2e/skill-file-deep-link.spec.ts create mode 100644 test/unit/page-routing.test.ts diff --git a/layers/registry/app/components/SkillFileTreeNode.vue b/layers/registry/app/components/SkillFileTreeNode.vue index fd32fd57..9d9c99cc 100644 --- a/layers/registry/app/components/SkillFileTreeNode.vue +++ b/layers/registry/app/components/SkillFileTreeNode.vue @@ -101,9 +101,14 @@ function onInlineClick(event: MouseEvent) {