[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M71RJ28FJ4PM6DXHB7T5CF8H":3,"skill-same:01M71RJ28FJ4PM6DXHB7T5CF8H":98},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":23,"publishedAt":43,"linkOnly":44,"markdownContent":45,"markdownBody":46,"frontMatter":47,"refName":48,"commitSha":49,"skillDirectory":50,"forksCount":51,"repositoryHtmlUrl":52,"repositoryHomepageUrl":6,"ownerHtmlUrl":53,"ownerBlogUrl":6,"ownerDescription":54,"updatedAt":55,"install":56,"resources":69},"01M71RJ28FJ4PM6DXHB7T5CF8H","autospec-ui-audit",null,"Use when a React Router application needs a deterministic whole-site route inventory before UI, UX, navigation, or evidence auditing begins.","berlinguyinca\u002Fautospec","berlinguyinca","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F16364?v=4","01M71R7C0SWBG05FNHQE4XQ7Y3","Gert Wohlgemuth","01M71R7C1VY5K3Q715RNDDBVGQ",3,"MIT","https:\u002F\u002Fgithub.com\u002Fberlinguyinca\u002Fautospec\u002Fblob\u002Fmain\u002Fskills\u002Fautospec-ui-audit\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000032","设计师","PROFESSION","适用职业",[24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42],"ui audit","audit","autospec ui audit","ui","autospec","application","navigation","react router","site","ux","route","router","react","needs","when","use","inventory","evidence","deterministic","2026-11-10 13:02:02",false,"---\nname: autospec-ui-audit\ndescription: Use when a React Router application needs a deterministic whole-site route inventory before UI, UX, navigation, or evidence auditing begins.\n---\n\n# Autospec UI audit: route inventory\n\nBuild the route inventory before auditing pages. The inventory is deterministic evidence:\nevery discovered route appears exactly once as runtime-eligible or explicitly excluded,\nand navigation registry gaps remain visible with reasons.\n\n\u003C!-- autospec-block:startup-self-update SKILL_NAME=autospec-ui-audit -->\n\n## Required capabilities & harness adapter\n\n| Capability | Claude Code | OpenCode | Codex CLI | Fallback if missing |\n| --- | --- | --- | --- | --- |\n| Shell execution | Bash tool | shell tool | shell | Required; do not infer inventory in prose |\n| Subagent model tier | Tier B: current Sonnet | Tier B: smaller task model | Tier B: current cost-optimized Codex | Run the deterministic command inline |\n| Subagent dispatch policy | AGENTS.md decision matrix | AGENTS.md decision matrix | AGENTS.md decision matrix | Inline; the helper owns discovery |\n\u003C!-- autospec-block:harness-adapter-core -->\n\n**Model tier:** `TIER_B`. The model only selects inputs and reads artifacts; the Node\nhelper owns discovery, classification, reconciliation, and failure decisions.\n\n## Invocation\n\n```text\n\u002Fautospec-ui-audit [--repo PATH] [--output-dir PATH]\n```\n\nDefaults: `--repo` is the current repository and `--output-dir` is\n`.autospec\u002Fui-audit`. Resolve the installed helper and run it as a direct argument\nvector:\n\n```bash\nnode \"${AUTOSPEC_SCRIPTS_DIR:-$HOME\u002F.autospec\u002Fscripts}\u002Fautospec-ui-route-inventory.mjs\" \\\n  --repo \"$REPO\" --output-dir \"$OUTPUT_DIR\"\n```\n\nDo not replace this command with model-authored route lists, `grep` pipelines, or\nbrowser crawling. If the helper is missing, stop with the install command from this\nskill's README rather than silently approximating its output.\n\n## Deterministic contract\n\nThe first slice supports React Router route elements with literal `path` attributes.\nIt discovers nested routes, records lazy route evidence, merges duplicate discoveries\nunder one canonical path, and excludes catch-all routes with a reason. Route-shaped\ncontent inside JavaScript\u002FTypeScript comments, strings, and templates is ignored without\nhiding later authored JSX, and common generated trees (`dist`, `build`, `.next`, `out`,\n`coverage`, `target`) are not scanned. It also reads:\n\n- `to` and `href` literals from files whose names contain `nav` or `menu`;\n- `\u003Cloc>` entries from sitemap XML files;\n- literal `goto()` and `visit()` paths from E2E or test files.\n\nThe helper writes `route-inventory.json` and `route-inventory.md` to the configured\noutput directory. Registry-only and route-only paths are mismatches with reasons; they\nare never silently dropped. Query strings and fragments are removed before matching,\nand duplicate mismatch evidence is combined into one record with all source locations.\n\nThe command fails closed before writing artifacts when it finds a cyclic route\ncollection proven to feed `useRoutes`, `createBrowserRouter`, or `createHashRouter`, a\nduplicate final record, or a missing classification. Unrelated object arrays are not\ntreated as router graphs. Exit `2` means bad\narguments or a missing repository; exit `1` means the inventory could not be proven;\nexit `0` means the artifacts satisfy the reconciliation invariants.\n\n## Review the artifacts\n\nConfirm all of the following before handing off to a later UI audit:\n\n- each `routes[]` path is unique;\n- every route has `runtime-eligible` or `excluded` status;\n- every excluded route has a non-empty reason;\n- every mismatch has a source and reason;\n- the JSON and Markdown describe the same route set.\n\nDo not call a route reachable merely because it is listed. Runtime navigation evidence\nand page scoring belong to later slices.\n\n## Out of scope\n\n- Angular and Next.js adapters;\n- browser\u002Fruntime evidence capture and reachability proof;\n- page quality scoring, accessibility, IA, search, and visual review;\n- dashboards, remediation waves, or implementation issue generation.\n\nFile follow-up issues for those surfaces without expanding this inventory run.\n","# Autospec UI audit: route inventory\n\nBuild the route inventory before auditing pages. The inventory is deterministic evidence:\nevery discovered route appears exactly once as runtime-eligible or explicitly excluded,\nand navigation registry gaps remain visible with reasons.\n\n\u003C!-- autospec-block:startup-self-update SKILL_NAME=autospec-ui-audit -->\n\n## Required capabilities & harness adapter\n\n| Capability | Claude Code | OpenCode | Codex CLI | Fallback if missing |\n| --- | --- | --- | --- | --- |\n| Shell execution | Bash tool | shell tool | shell | Required; do not infer inventory in prose |\n| Subagent model tier | Tier B: current Sonnet | Tier B: smaller task model | Tier B: current cost-optimized Codex | Run the deterministic command inline |\n| Subagent dispatch policy | AGENTS.md decision matrix | AGENTS.md decision matrix | AGENTS.md decision matrix | Inline; the helper owns discovery |\n\u003C!-- autospec-block:harness-adapter-core -->\n\n**Model tier:** `TIER_B`. The model only selects inputs and reads artifacts; the Node\nhelper owns discovery, classification, reconciliation, and failure decisions.\n\n## Invocation\n\n```text\n\u002Fautospec-ui-audit [--repo PATH] [--output-dir PATH]\n```\n\nDefaults: `--repo` is the current repository and `--output-dir` is\n`.autospec\u002Fui-audit`. Resolve the installed helper and run it as a direct argument\nvector:\n\n```bash\nnode \"${AUTOSPEC_SCRIPTS_DIR:-$HOME\u002F.autospec\u002Fscripts}\u002Fautospec-ui-route-inventory.mjs\" \\\n  --repo \"$REPO\" --output-dir \"$OUTPUT_DIR\"\n```\n\nDo not replace this command with model-authored route lists, `grep` pipelines, or\nbrowser crawling. If the helper is missing, stop with the install command from this\nskill's README rather than silently approximating its output.\n\n## Deterministic contract\n\nThe first slice supports React Router route elements with literal `path` attributes.\nIt discovers nested routes, records lazy route evidence, merges duplicate discoveries\nunder one canonical path, and excludes catch-all routes with a reason. Route-shaped\ncontent inside JavaScript\u002FTypeScript comments, strings, and templates is ignored without\nhiding later authored JSX, and common generated trees (`dist`, `build`, `.next`, `out`,\n`coverage`, `target`) are not scanned. It also reads:\n\n- `to` and `href` literals from files whose names contain `nav` or `menu`;\n- `\u003Cloc>` entries from sitemap XML files;\n- literal `goto()` and `visit()` paths from E2E or test files.\n\nThe helper writes `route-inventory.json` and `route-inventory.md` to the configured\noutput directory. Registry-only and route-only paths are mismatches with reasons; they\nare never silently dropped. Query strings and fragments are removed before matching,\nand duplicate mismatch evidence is combined into one record with all source locations.\n\nThe command fails closed before writing artifacts when it finds a cyclic route\ncollection proven to feed `useRoutes`, `createBrowserRouter`, or `createHashRouter`, a\nduplicate final record, or a missing classification. Unrelated object arrays are not\ntreated as router graphs. Exit `2` means bad\narguments or a missing repository; exit `1` means the inventory could not be proven;\nexit `0` means the artifacts satisfy the reconciliation invariants.\n\n## Review the artifacts\n\nConfirm all of the following before handing off to a later UI audit:\n\n- each `routes[]` path is unique;\n- every route has `runtime-eligible` or `excluded` status;\n- every excluded route has a non-empty reason;\n- every mismatch has a source and reason;\n- the JSON and Markdown describe the same route set.\n\nDo not call a route reachable merely because it is listed. Runtime navigation evidence\nand page scoring belong to later slices.\n\n## Out of scope\n\n- Angular and Next.js adapters;\n- browser\u002Fruntime evidence capture and reachability proof;\n- page quality scoring, accessibility, IA, search, and visual review;\n- dashboards, remediation waves, or implementation issue generation.\n\nFile follow-up issues for those surfaces without expanding this inventory run.\n",{"name":5,"description":7},"main","9e7f04357ff46ab731d4f56a4ac5ca5449c13bb0","skills\u002Fautospec-ui-audit",1,"https:\u002F\u002Fgithub.com\u002Fberlinguyinca\u002Fautospec","https:\u002F\u002Fgithub.com\u002Fberlinguyinca","Love to lead, code, cook and contribute to open source and believe that you can learn anything you set your mind too.\r\n","2026-11-11 07:09:35",{"source":8,"skillName":5,"commands":57,"prompt":67,"zipAvailable":68},[58,61,64],{"tool":59,"command":60},"npx","npx skills add berlinguyinca\u002Fautospec --skill autospec-ui-audit",{"tool":62,"command":63},"bunx","bunx skills add berlinguyinca\u002Fautospec --skill autospec-ui-audit",{"tool":65,"command":66},"pnpm","pnpm dlx skills add berlinguyinca\u002Fautospec --skill autospec-ui-audit","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fberlinguyinca\u002Fautospec\u002Fblob\u002Fmain\u002Fskills\u002Fautospec-ui-audit\u002FSKILL.md",true,[70,76,82,86,90,94],{"path":71,"resourceType":72,"resourceTypeDesc":73,"sizeBytes":74,"sourceHtmlUrl":75},"codex\u002Fprompt.md","REFERENCE","参考文档",4005,"https:\u002F\u002Fgithub.com\u002Fberlinguyinca\u002Fautospec\u002Fblob\u002Fmain\u002Fskills\u002Fautospec-ui-audit\u002Fcodex\u002Fprompt.md",{"path":77,"resourceType":78,"resourceTypeDesc":79,"sizeBytes":80,"sourceHtmlUrl":81},"install.sh","SCRIPT","脚本",2866,"https:\u002F\u002Fgithub.com\u002Fberlinguyinca\u002Fautospec\u002Fblob\u002Fmain\u002Fskills\u002Fautospec-ui-audit\u002Finstall.sh",{"path":83,"resourceType":72,"resourceTypeDesc":73,"sizeBytes":84,"sourceHtmlUrl":85},"opencode\u002Fagent.md",4181,"https:\u002F\u002Fgithub.com\u002Fberlinguyinca\u002Fautospec\u002Fblob\u002Fmain\u002Fskills\u002Fautospec-ui-audit\u002Fopencode\u002Fagent.md",{"path":87,"resourceType":72,"resourceTypeDesc":73,"sizeBytes":88,"sourceHtmlUrl":89},"README.md",1161,"https:\u002F\u002Fgithub.com\u002Fberlinguyinca\u002Fautospec\u002Fblob\u002Fmain\u002Fskills\u002Fautospec-ui-audit\u002FREADME.md",{"path":91,"resourceType":78,"resourceTypeDesc":79,"sizeBytes":92,"sourceHtmlUrl":93},"scripts\u002Froute-inventory.mjs",14010,"https:\u002F\u002Fgithub.com\u002Fberlinguyinca\u002Fautospec\u002Fblob\u002Fmain\u002Fskills\u002Fautospec-ui-audit\u002Fscripts\u002Froute-inventory.mjs",{"path":95,"resourceType":78,"resourceTypeDesc":79,"sizeBytes":96,"sourceHtmlUrl":97},"uninstall.sh",1861,"https:\u002F\u002Fgithub.com\u002Fberlinguyinca\u002Fautospec\u002Fblob\u002Fmain\u002Fskills\u002Fautospec-ui-audit\u002Funinstall.sh",[99,112,121,130,156,179],{"skillNo":100,"name":101,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":102,"categories":103,"keywords":109,"publishedAt":43},"01M71RJHYMKPTC9AAPXWQ6F4RT","trio-pass-skill","https:\u002F\u002Fgithub.com\u002Fberlinguyinca\u002Fautospec\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002Flockstep-trio-pass\u002FSKILL.md",[104],{"categoryNo":105,"categoryName":106,"taxonomyType":107,"taxonomyTypeDesc":108},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[110,111],"trio","trio pass skill",{"skillNo":113,"name":114,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":115,"categories":116,"keywords":118,"publishedAt":43},"01M71RJFBQ1KAF9XM3T3Y4VMSK","duo-pass-skill","https:\u002F\u002Fgithub.com\u002Fberlinguyinca\u002Fautospec\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002Flockstep-duo-pass\u002FSKILL.md",[117],{"categoryNo":105,"categoryName":106,"taxonomyType":107,"taxonomyTypeDesc":108},[119,120],"duo pass skill","duo",{"skillNo":122,"name":123,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":124,"categories":125,"keywords":127,"publishedAt":43},"01M71RJDT1TB3P9TRWR6A534FB","duo-divergence-skill","https:\u002F\u002Fgithub.com\u002Fberlinguyinca\u002Fautospec\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002Flockstep-duo-divergence\u002FSKILL.md",[126],{"categoryNo":105,"categoryName":106,"taxonomyType":107,"taxonomyTypeDesc":108},[128,120,129],"duo divergence skill","divergence",{"skillNo":131,"name":28,"nameZh":6,"description":132,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":133,"categories":134,"keywords":138,"publishedAt":43},"01M71RJAC4NNEQSYBDSY3NZS73","Use when the user wants to ship a feature end-to-end across multiple commits — bootstraps repo if missing, brainstorms a design spec, decomposes into linked GitHub issues, or splits an existing spec into issues, then runs an autonomous implementation loop with auto-merge.","https:\u002F\u002Fgithub.com\u002Fberlinguyinca\u002Fautospec\u002Fblob\u002Fmain\u002Fskills\u002Fautospec\u002FSKILL.md",[135],{"categoryNo":136,"categoryName":137,"taxonomyType":107,"taxonomyTypeDesc":108},"01JBSEEDCAT000000000000015","视觉设计",[28,139,140,141,142,143,144,145,38,146,147,148,149,150,151,152,153,154,155,39],"ship a feature","end","issues","design","autonomous","auto","loop","across","design spec","merge","ship","implementation loop","github issues","feature","commits","repo","missing",{"skillNo":157,"name":158,"nameZh":6,"description":159,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":160,"categories":161,"keywords":162,"publishedAt":43},"01M71RJ4F9HT8PT26CKNM9XE1M","autospec-upgrade","Use when the user wants to upgrade an Angular, Next.js, or React project to the latest official versions safely — by locking observable behavior before touching versions, upgrading one major at a time with official codemods, and gating completion on mutation score rather than coverage theater.","https:\u002F\u002Fgithub.com\u002Fberlinguyinca\u002Fautospec\u002Fblob\u002Fmain\u002Fskills\u002Fautospec-upgrade\u002FSKILL.md",[],[163,28,164,165,166,167,168,169,170,171,38,172,36,173,174,39,175,176,177,178],"autospec upgrade","upgrade","latest","time","coverage","official","project","mutation","gating","angular","next","at","Next.js","one","with","behavior",{"skillNo":180,"name":181,"nameZh":6,"description":182,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":183,"categories":184,"keywords":192,"publishedAt":43},"01M71RHV8DR6K242WDMB9HZ8WW","autospec-test","Use when you want to gate every Phase 4 PR on unit + E2E test coverage against an isolated environment, auto-heal coverage gaps within a 60-minute coding budget, and block assertion-loosening rewrites before auto-merge.","https:\u002F\u002Fgithub.com\u002Fberlinguyinca\u002Fautospec\u002Fblob\u002Fmain\u002Fskills\u002Fautospec-test\u002FSKILL.md",[185,188,189],{"categoryNo":186,"categoryName":187,"taxonomyType":107,"taxonomyTypeDesc":108},"01JBSEEDCAT000000000000008","测试与质量",{"categoryNo":105,"categoryName":106,"taxonomyType":107,"taxonomyTypeDesc":108},{"categoryNo":190,"categoryName":191,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000037","律师与法务",[193,28,194,195,38,144,196,197,167,198,199,200,201,39,202,203,204,148,205,206],"test","autospec test","you","e2e test","unit","coding","pr","environment","e2e","coverage gaps","gaps","test coverage","phase","Budget"]