[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6D255AS6K9WD4X849CCCG5V":3,"skill-same:01M6D255AS6K9WD4X849CCCG5V":73},{"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":28,"publishedAt":45,"linkOnly":46,"markdownContent":47,"markdownBody":48,"frontMatter":49,"refName":50,"commitSha":51,"skillDirectory":52,"forksCount":53,"repositoryHtmlUrl":54,"repositoryHomepageUrl":55,"ownerHtmlUrl":56,"ownerBlogUrl":55,"ownerDescription":57,"updatedAt":58,"install":59,"resources":72},"01M6D255AS6K9WD4X849CCCG5V","research-web",null,"Finding and judging information on the web: official documentation for the right version, changelogs and migration guides, GitHub issues and discussions, specifications and MDN, package registries, forums with dates checked, avoiding outdated answers, reading source when docs are silent, and citing with URLs, versions and dates. Read before researching a library, an API, an error message or a standard online.","enowdev\u002Fenowxcli","enowdev","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F179420349?v=4","01M6D1MVX2KC0X3Z9NESE7P22K","Enow Dev.","01M6D1MW1FMZGBDKWAJY4GQX81",67,"Apache-2.0","https:\u002F\u002Fgithub.com\u002Fenowdev\u002Fenowxcli\u002Fblob\u002Fmain\u002Fcrates\u002Fenowx-core\u002Fskills\u002Fresearch-web\u002FSKILL.md",[18,23],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000021","资料检索与研究","SCENARIO","使用场景",{"categoryNo":24,"categoryName":25,"taxonomyType":26,"taxonomyTypeDesc":27},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44],"research","web","research web","docs","github","official","documentation","github issues","issues","package","library","api","read","version","migration","message","2026-11-10 10:12:30",false,"---\nname: research-web\ndescription: \"Finding and judging information on the web: official documentation for the right version, changelogs and migration guides, GitHub issues and discussions, specifications and MDN, package registries, forums with dates checked, avoiding outdated answers, reading source when docs are silent, and citing with URLs, versions and dates. Read before researching a library, an API, an error message or a standard online.\"\n---\n\n# Researching on the web\n\nThe naive search takes the first result: a 2019 Stack Overflow answer for a\nlibrary three majors ago, docs for the wrong version, an error message\nparaphrased so nobody can find it again, a blog post quoted as if it were\nthe specification, links with no dates. This is where each kind of fact\nlives, how to tell a current source from a stale one, and how to cite it so\nthe next person can check. The method for any question is `research`.\n\n## 1. Know the version before you search\n\n- Read it from the lockfile and the runtime files first (`research`,\n  section 4). Every page you then read is for that version.\n- A fact without a version is a fact about some version. \"Next.js caches\n  `fetch` by default\" was true before Next.js 15 and not after it.\n\n## 2. Official documentation for the right version\n\n- Versioned docs have the version in the path or a switcher on the page:\n  `docs.python.org\u002F3.12\u002F`, `docs.djangoproject.com\u002Fen\u002F5.1\u002F`,\n  `nodejs.org\u002Fdocs\u002Flatest-v22.x\u002Fapi\u002F`, `docs.rs\u002F\u003Ccrate>\u002F\u003Cversion>\u002F`,\n  `pkg.go.dev\u002F\u003Cmodule>@\u003Cversion>`. A page with no version describes the\n  latest, which may not be yours.\n- Migration guides (\"Upgrading from 4 to 5\") list the behaviour that\n  changed, which is exactly where old answers go wrong.\n- Hosted APIs have versions of their own: the one the project pins (a\n  header, a dated API version, the SDK's default) decides which reference\n  and which changelog entries apply.\n- A site rendered by script comes back nearly empty from `fetch`. Try\n  `\u002Fllms.txt` or `\u002Fllms-full.txt` (many documentation sites publish their\n  docs as plain text there), the docs' markdown in the repository through\n  `raw.githubusercontent.com`, or the README at the tag.\n\n## 3. Changelogs and releases\n\n- `CHANGELOG.md` at a tag:\n  `https:\u002F\u002Fraw.githubusercontent.com\u002F\u003Cowner>\u002F\u003Crepo>\u002F\u003Ctag>\u002FCHANGELOG.md`.\n- The releases page, `https:\u002F\u002Fgithub.com\u002F\u003Cowner>\u002F\u003Crepo>\u002Freleases`, and the\n  compare view for everything between two versions:\n  `https:\u002F\u002Fgithub.com\u002F\u003Cowner>\u002F\u003Crepo>\u002Fcompare\u002Fv4.2.0...v4.3.0`.\n- Read every entry between the version a source used and yours for the\n  behaviour in question: breaking changes, changed defaults, deprecations,\n  fixes.\n\n## 4. Issues and discussions\n\n- Search the tracker, closed issues included:\n  `https:\u002F\u002Fgithub.com\u002F\u003Cowner>\u002F\u003Crepo>\u002Fissues?q=is%3Aissue+%22socket+hang+up%22`.\n- Weigh by who answered: a maintainer's reply (the Member or Collaborator\n  badge) and a linked fix (`Fixes #1234`) outrank the thread's guesses.\n- Find the release the fix shipped in and compare it with yours.\n- An open issue with many reactions is evidence of a known bug, not of a\n  fix, and not of a workaround that works.\n- Discussions and RFC threads explain why an API has the shape it has.\n\n## 5. Specifications and the web platform\n\n| Question | Source |\n|---|---|\n| HTML, DOM, Fetch, URL, Streams | WHATWG living standards: `html.spec.whatwg.org`, `fetch.spec.whatwg.org` |\n| CSS | `drafts.csswg.org` (editor's drafts), `w3.org\u002FTR\u002F` (published) |\n| Accessibility | WCAG 2.2 (`w3.org\u002FTR\u002FWCAG22\u002F`), ARIA Authoring Practices (`w3.org\u002FWAI\u002FARIA\u002Fapg\u002F`) |\n| HTTP and other protocols | RFCs at `rfc-editor.org`; read \"Obsoleted by\" at the top (RFC 9110 replaced 7231) |\n| JavaScript | `tc39.es\u002Fecma262\u002F`; proposals and their stage at `github.com\u002Ftc39\u002Fproposals` |\n| Web APIs in practice | MDN (`developer.mozilla.org`): behaviour, examples, compatibility |\n| Browser support | caniuse.com; MDN's tables come from `mdn\u002Fbrowser-compat-data` |\n\n- Baseline, shown on MDN and caniuse: \"Newly available\" means supported in\n  every core browser; \"Widely available\" means that has held for 30 months.\n  Use a feature without a fallback when it is widely available, or when the\n  project's `browserslist` covers it.\n- The spec says what should happen; MDN and the support data say what\n  browsers do. A question about production behaviour needs both.\n\n## 6. Package registries\n\n| Ecosystem | Page | Data as JSON or text |\n|---|---|---|\n| npm | `npmjs.com\u002Fpackage\u002F\u003Cpkg>` | `registry.npmjs.org\u002F\u003Cpkg>\u002Flatest`, `api.npmjs.org\u002Fdownloads\u002Fpoint\u002Flast-week\u002F\u003Cpkg>` |\n| PyPI | `pypi.org\u002Fproject\u002F\u003Cpkg>\u002F` | `pypi.org\u002Fpypi\u002F\u003Cpkg>\u002Fjson`, `pypi.org\u002Fpypi\u002F\u003Cpkg>\u002F\u003Cversion>\u002Fjson` |\n| Rust | `crates.io\u002Fcrates\u002F\u003Cname>`, `docs.rs\u002F\u003Cname>`, `lib.rs\u002Fcrates\u002F\u003Cname>` | the crates.io API wants a user agent, so use the pages |\n| Go | `pkg.go.dev\u002F\u003Cmodule>` | `proxy.golang.org\u002F\u003Cmodule>\u002F@latest`, `proxy.golang.org\u002F\u003Cmodule>\u002F@v\u002Flist` |\n| Maven | `central.sonatype.com\u002Fartifact\u002F\u003Cgroup>\u002F\u003Cartifact>` | `repo1.maven.org\u002Fmaven2\u002F\u003Cgroup as path>\u002F\u003Cartifact>\u002Fmaven-metadata.xml` |\n| RubyGems | `rubygems.org\u002Fgems\u002F\u003Cname>` | `rubygems.org\u002Fapi\u002Fv1\u002Fgems\u002F\u003Cname>.json` |\n| Packagist | `packagist.org\u002Fpackages\u002F\u003Cvendor>\u002F\u003Cpkg>` | `repo.packagist.org\u002Fp2\u002F\u003Cvendor>\u002F\u003Cpkg>.json` |\n| NuGet | `nuget.org\u002Fpackages\u002F\u003Cid>` | `api.nuget.org\u002Fv3-flatcontainer\u002F\u003Cid in lower case>\u002Findex.json` |\n| Several | `deps.dev` | `api.deps.dev\u002Fv3\u002Fsystems\u002F\u003Cnpm, pypi, cargo, go, maven or nuget>\u002Fpackages\u002F\u003Cname>` |\n\nFrom a registry: the latest version and its date, how often releases come,\ndownloads (inflated by CI and transitive installs, so compare only within a\nniche), the repository link (check it points where you expect), the\nlicence, deprecation notices, and provenance on npm. A scoped npm name is\nencoded in deps.dev paths (`%40scope%2Fname`). Choosing between packages is\n`research-libraries`.\n\n## 7. Security advisories\n\n- An advisory id: `osv.dev\u002Fvulnerability\u002F\u003Cid>` (affected and fixed versions\n  per ecosystem), `github.com\u002Fadvisories\u002F\u003CGHSA id>`,\n  `nvd.nist.gov\u002Fvuln\u002Fdetail\u002F\u003CCVE id>`.\n- Settle three things: whether the installed version is in the affected\n  range, which release fixed it, and whether the project calls the\n  vulnerable code at all. A score alone decides none of them.\n- The project's release notes or security page for the fix and any\n  workaround.\n\n## 8. Forums and blogs, dated\n\n- Stack Overflow, Reddit, Medium, dev.to and personal blogs are leads.\n  Before using one, check its date, the version it used, the newer answers\n  and comments under the accepted one, and whether it links to docs or\n  source you can check.\n- A source older than the release that changed the behaviour describes the\n  past: say so, or drop it.\n- Content farms and generated pages reword the docs and get the details\n  wrong; go to the docs.\n\n## 9. Read the source when the docs are silent\n\n- The installed copy in the project first (`research-code`).\n- Otherwise at the exact version:\n  `raw.githubusercontent.com\u002F\u003Cowner>\u002F\u003Crepo>\u002F\u003Ctag>\u002F\u003Cpath>`; npm files through\n  `unpkg.com\u002F\u003Cpkg>@\u003Cversion>\u002F\u003Cpath>` or\n  `cdn.jsdelivr.net\u002Fnpm\u002F\u003Cpkg>@\u003Cversion>\u002F\u003Cpath>`; crates through\n  `docs.rs\u002Fcrate\u002F\u003Cname>\u002F\u003Cversion>\u002Fsource\u002F`.\n- Find the file from the repository's tree at the tag\n  (`github.com\u002F\u003Cowner>\u002F\u003Crepo>\u002Ftree\u002F\u003Ctag>\u002Fsrc`). GitHub's code search needs\n  a signed-in browser, so it is out of reach for `fetch`: browse the tree,\n  or grep the installed copy. The repository's own tests show the edge\n  cases its authors meant to handle.\n\n## 10. Error messages\n\n- Search the message verbatim, in quotes, without what is yours (paths,\n  ids, ports, times), with the library's name: `\"socket hang up\" undici`.\n- Find where it is raised: grep the installed package for a fixed part of\n  the message and read the condition around it. That is usually faster and\n  more certain than any thread.\n- Match an issue's version to yours before trusting its fix.\n\n## 11. Judging a source\n\n| Question | Good sign | Bad sign |\n|---|---|---|\n| Who wrote it | the maintainers, the spec's editors, the vendor | anonymous, a content farm |\n| When | after the release you use | before a major that changed the behaviour |\n| Which version | stated, and yours | not stated |\n| Evidence | code, links to source or docs, steps to reproduce | assertion only |\n| Agreement | matches the source code and the official docs | contradicts the code |\n\n## 12. `fetch` in practice\n\n- It reads one URL with a plain GET: no headers, cookies or sign-in, and\n  only `http` and `https`. It is not a search engine: go straight to the\n  page that holds the fact, built from what you know (the registry, the\n  tracker's search URL, the docs path).\n- HTML comes back as text, capped at 100 KB of text and 2 MB downloaded,\n  with a 30-second timeout; binary files such as PDFs fail. Prefer raw and\n  JSON endpoints: less noise, and they fit.\n- A page cut at the cap: fetch the section's own page or the raw markdown.\n- Pages behind a sign-in, a consent wall or client-side rendering come back\n  empty or wrong; APIs that insist on a user agent or a token (the GitHub\n  REST API) refuse the request. Take another route to the same fact and say\n  which.\n- Cite only pages you fetched and read, by the URL you fetched.\n\n## 13. Citing\n\n- Each source: the URL, its title or section, the version it documents, and\n  the date published or read (\"read 2026-09-29\").\n- Link to a tag or a commit, not a branch that moves:\n  `github.com\u002F\u003Cowner>\u002F\u003Crepo>\u002Fblob\u002Fv5.2.0\u002Fsrc\u002Fpool.ts#L40-L58`.\n- Quote the sentence or lines that carry the claim, briefly.\n- State contradictions with both sides: \"The v5 docs say X; the source at\n  v5.2.0 does Y; for this project the code wins.\"\n\n## Check it\n\n- Every source's version matches the project's, or the gap is stated.\n- Every source is dated, and none predates a release that changed the\n  behaviour without the answer saying so.\n- Every citation is a URL you fetched, pinned to a tag or version where one\n  exists.\n- The answer stands on primary sources; forums appear only as leads.\n\n## Avoid\n\nThe first search result as the answer; docs for the latest version when the\nproject runs an older one; paraphrased error messages; Stack Overflow\nanswers used without their date; blog posts cited as the spec; links to\n`main` that will drift; citing a page you did not fetch, or one that came\nback empty; generated summaries instead of the docs.\n","# Researching on the web\n\nThe naive search takes the first result: a 2019 Stack Overflow answer for a\nlibrary three majors ago, docs for the wrong version, an error message\nparaphrased so nobody can find it again, a blog post quoted as if it were\nthe specification, links with no dates. This is where each kind of fact\nlives, how to tell a current source from a stale one, and how to cite it so\nthe next person can check. The method for any question is `research`.\n\n## 1. Know the version before you search\n\n- Read it from the lockfile and the runtime files first (`research`,\n  section 4). Every page you then read is for that version.\n- A fact without a version is a fact about some version. \"Next.js caches\n  `fetch` by default\" was true before Next.js 15 and not after it.\n\n## 2. Official documentation for the right version\n\n- Versioned docs have the version in the path or a switcher on the page:\n  `docs.python.org\u002F3.12\u002F`, `docs.djangoproject.com\u002Fen\u002F5.1\u002F`,\n  `nodejs.org\u002Fdocs\u002Flatest-v22.x\u002Fapi\u002F`, `docs.rs\u002F\u003Ccrate>\u002F\u003Cversion>\u002F`,\n  `pkg.go.dev\u002F\u003Cmodule>@\u003Cversion>`. A page with no version describes the\n  latest, which may not be yours.\n- Migration guides (\"Upgrading from 4 to 5\") list the behaviour that\n  changed, which is exactly where old answers go wrong.\n- Hosted APIs have versions of their own: the one the project pins (a\n  header, a dated API version, the SDK's default) decides which reference\n  and which changelog entries apply.\n- A site rendered by script comes back nearly empty from `fetch`. Try\n  `\u002Fllms.txt` or `\u002Fllms-full.txt` (many documentation sites publish their\n  docs as plain text there), the docs' markdown in the repository through\n  `raw.githubusercontent.com`, or the README at the tag.\n\n## 3. Changelogs and releases\n\n- `CHANGELOG.md` at a tag:\n  `https:\u002F\u002Fraw.githubusercontent.com\u002F\u003Cowner>\u002F\u003Crepo>\u002F\u003Ctag>\u002FCHANGELOG.md`.\n- The releases page, `https:\u002F\u002Fgithub.com\u002F\u003Cowner>\u002F\u003Crepo>\u002Freleases`, and the\n  compare view for everything between two versions:\n  `https:\u002F\u002Fgithub.com\u002F\u003Cowner>\u002F\u003Crepo>\u002Fcompare\u002Fv4.2.0...v4.3.0`.\n- Read every entry between the version a source used and yours for the\n  behaviour in question: breaking changes, changed defaults, deprecations,\n  fixes.\n\n## 4. Issues and discussions\n\n- Search the tracker, closed issues included:\n  `https:\u002F\u002Fgithub.com\u002F\u003Cowner>\u002F\u003Crepo>\u002Fissues?q=is%3Aissue+%22socket+hang+up%22`.\n- Weigh by who answered: a maintainer's reply (the Member or Collaborator\n  badge) and a linked fix (`Fixes #1234`) outrank the thread's guesses.\n- Find the release the fix shipped in and compare it with yours.\n- An open issue with many reactions is evidence of a known bug, not of a\n  fix, and not of a workaround that works.\n- Discussions and RFC threads explain why an API has the shape it has.\n\n## 5. Specifications and the web platform\n\n| Question | Source |\n|---|---|\n| HTML, DOM, Fetch, URL, Streams | WHATWG living standards: `html.spec.whatwg.org`, `fetch.spec.whatwg.org` |\n| CSS | `drafts.csswg.org` (editor's drafts), `w3.org\u002FTR\u002F` (published) |\n| Accessibility | WCAG 2.2 (`w3.org\u002FTR\u002FWCAG22\u002F`), ARIA Authoring Practices (`w3.org\u002FWAI\u002FARIA\u002Fapg\u002F`) |\n| HTTP and other protocols | RFCs at `rfc-editor.org`; read \"Obsoleted by\" at the top (RFC 9110 replaced 7231) |\n| JavaScript | `tc39.es\u002Fecma262\u002F`; proposals and their stage at `github.com\u002Ftc39\u002Fproposals` |\n| Web APIs in practice | MDN (`developer.mozilla.org`): behaviour, examples, compatibility |\n| Browser support | caniuse.com; MDN's tables come from `mdn\u002Fbrowser-compat-data` |\n\n- Baseline, shown on MDN and caniuse: \"Newly available\" means supported in\n  every core browser; \"Widely available\" means that has held for 30 months.\n  Use a feature without a fallback when it is widely available, or when the\n  project's `browserslist` covers it.\n- The spec says what should happen; MDN and the support data say what\n  browsers do. A question about production behaviour needs both.\n\n## 6. Package registries\n\n| Ecosystem | Page | Data as JSON or text |\n|---|---|---|\n| npm | `npmjs.com\u002Fpackage\u002F\u003Cpkg>` | `registry.npmjs.org\u002F\u003Cpkg>\u002Flatest`, `api.npmjs.org\u002Fdownloads\u002Fpoint\u002Flast-week\u002F\u003Cpkg>` |\n| PyPI | `pypi.org\u002Fproject\u002F\u003Cpkg>\u002F` | `pypi.org\u002Fpypi\u002F\u003Cpkg>\u002Fjson`, `pypi.org\u002Fpypi\u002F\u003Cpkg>\u002F\u003Cversion>\u002Fjson` |\n| Rust | `crates.io\u002Fcrates\u002F\u003Cname>`, `docs.rs\u002F\u003Cname>`, `lib.rs\u002Fcrates\u002F\u003Cname>` | the crates.io API wants a user agent, so use the pages |\n| Go | `pkg.go.dev\u002F\u003Cmodule>` | `proxy.golang.org\u002F\u003Cmodule>\u002F@latest`, `proxy.golang.org\u002F\u003Cmodule>\u002F@v\u002Flist` |\n| Maven | `central.sonatype.com\u002Fartifact\u002F\u003Cgroup>\u002F\u003Cartifact>` | `repo1.maven.org\u002Fmaven2\u002F\u003Cgroup as path>\u002F\u003Cartifact>\u002Fmaven-metadata.xml` |\n| RubyGems | `rubygems.org\u002Fgems\u002F\u003Cname>` | `rubygems.org\u002Fapi\u002Fv1\u002Fgems\u002F\u003Cname>.json` |\n| Packagist | `packagist.org\u002Fpackages\u002F\u003Cvendor>\u002F\u003Cpkg>` | `repo.packagist.org\u002Fp2\u002F\u003Cvendor>\u002F\u003Cpkg>.json` |\n| NuGet | `nuget.org\u002Fpackages\u002F\u003Cid>` | `api.nuget.org\u002Fv3-flatcontainer\u002F\u003Cid in lower case>\u002Findex.json` |\n| Several | `deps.dev` | `api.deps.dev\u002Fv3\u002Fsystems\u002F\u003Cnpm, pypi, cargo, go, maven or nuget>\u002Fpackages\u002F\u003Cname>` |\n\nFrom a registry: the latest version and its date, how often releases come,\ndownloads (inflated by CI and transitive installs, so compare only within a\nniche), the repository link (check it points where you expect), the\nlicence, deprecation notices, and provenance on npm. A scoped npm name is\nencoded in deps.dev paths (`%40scope%2Fname`). Choosing between packages is\n`research-libraries`.\n\n## 7. Security advisories\n\n- An advisory id: `osv.dev\u002Fvulnerability\u002F\u003Cid>` (affected and fixed versions\n  per ecosystem), `github.com\u002Fadvisories\u002F\u003CGHSA id>`,\n  `nvd.nist.gov\u002Fvuln\u002Fdetail\u002F\u003CCVE id>`.\n- Settle three things: whether the installed version is in the affected\n  range, which release fixed it, and whether the project calls the\n  vulnerable code at all. A score alone decides none of them.\n- The project's release notes or security page for the fix and any\n  workaround.\n\n## 8. Forums and blogs, dated\n\n- Stack Overflow, Reddit, Medium, dev.to and personal blogs are leads.\n  Before using one, check its date, the version it used, the newer answers\n  and comments under the accepted one, and whether it links to docs or\n  source you can check.\n- A source older than the release that changed the behaviour describes the\n  past: say so, or drop it.\n- Content farms and generated pages reword the docs and get the details\n  wrong; go to the docs.\n\n## 9. Read the source when the docs are silent\n\n- The installed copy in the project first (`research-code`).\n- Otherwise at the exact version:\n  `raw.githubusercontent.com\u002F\u003Cowner>\u002F\u003Crepo>\u002F\u003Ctag>\u002F\u003Cpath>`; npm files through\n  `unpkg.com\u002F\u003Cpkg>@\u003Cversion>\u002F\u003Cpath>` or\n  `cdn.jsdelivr.net\u002Fnpm\u002F\u003Cpkg>@\u003Cversion>\u002F\u003Cpath>`; crates through\n  `docs.rs\u002Fcrate\u002F\u003Cname>\u002F\u003Cversion>\u002Fsource\u002F`.\n- Find the file from the repository's tree at the tag\n  (`github.com\u002F\u003Cowner>\u002F\u003Crepo>\u002Ftree\u002F\u003Ctag>\u002Fsrc`). GitHub's code search needs\n  a signed-in browser, so it is out of reach for `fetch`: browse the tree,\n  or grep the installed copy. The repository's own tests show the edge\n  cases its authors meant to handle.\n\n## 10. Error messages\n\n- Search the message verbatim, in quotes, without what is yours (paths,\n  ids, ports, times), with the library's name: `\"socket hang up\" undici`.\n- Find where it is raised: grep the installed package for a fixed part of\n  the message and read the condition around it. That is usually faster and\n  more certain than any thread.\n- Match an issue's version to yours before trusting its fix.\n\n## 11. Judging a source\n\n| Question | Good sign | Bad sign |\n|---|---|---|\n| Who wrote it | the maintainers, the spec's editors, the vendor | anonymous, a content farm |\n| When | after the release you use | before a major that changed the behaviour |\n| Which version | stated, and yours | not stated |\n| Evidence | code, links to source or docs, steps to reproduce | assertion only |\n| Agreement | matches the source code and the official docs | contradicts the code |\n\n## 12. `fetch` in practice\n\n- It reads one URL with a plain GET: no headers, cookies or sign-in, and\n  only `http` and `https`. It is not a search engine: go straight to the\n  page that holds the fact, built from what you know (the registry, the\n  tracker's search URL, the docs path).\n- HTML comes back as text, capped at 100 KB of text and 2 MB downloaded,\n  with a 30-second timeout; binary files such as PDFs fail. Prefer raw and\n  JSON endpoints: less noise, and they fit.\n- A page cut at the cap: fetch the section's own page or the raw markdown.\n- Pages behind a sign-in, a consent wall or client-side rendering come back\n  empty or wrong; APIs that insist on a user agent or a token (the GitHub\n  REST API) refuse the request. Take another route to the same fact and say\n  which.\n- Cite only pages you fetched and read, by the URL you fetched.\n\n## 13. Citing\n\n- Each source: the URL, its title or section, the version it documents, and\n  the date published or read (\"read 2026-09-29\").\n- Link to a tag or a commit, not a branch that moves:\n  `github.com\u002F\u003Cowner>\u002F\u003Crepo>\u002Fblob\u002Fv5.2.0\u002Fsrc\u002Fpool.ts#L40-L58`.\n- Quote the sentence or lines that carry the claim, briefly.\n- State contradictions with both sides: \"The v5 docs say X; the source at\n  v5.2.0 does Y; for this project the code wins.\"\n\n## Check it\n\n- Every source's version matches the project's, or the gap is stated.\n- Every source is dated, and none predates a release that changed the\n  behaviour without the answer saying so.\n- Every citation is a URL you fetched, pinned to a tag or version where one\n  exists.\n- The answer stands on primary sources; forums appear only as leads.\n\n## Avoid\n\nThe first search result as the answer; docs for the latest version when the\nproject runs an older one; paraphrased error messages; Stack Overflow\nanswers used without their date; blog posts cited as the spec; links to\n`main` that will drift; citing a page you did not fetch, or one that came\nback empty; generated summaries instead of the docs.\n",{"name":5,"description":7},"main","38293fe1b096e6bf3646c7344c38786ed688f464","crates\u002Fenowx-core\u002Fskills\u002Fresearch-web",21,"https:\u002F\u002Fgithub.com\u002Fenowdev\u002Fenowxcli","https:\u002F\u002Fenowx.ai","https:\u002F\u002Fgithub.com\u002Fenowdev","Pretending to be a Developer","2026-10-06 02:05:35",{"source":8,"skillName":5,"commands":60,"prompt":70,"zipAvailable":71},[61,64,67],{"tool":62,"command":63},"npx","npx skills add enowdev\u002Fenowxcli --skill research-web",{"tool":65,"command":66},"bunx","bunx skills add enowdev\u002Fenowxcli --skill research-web",{"tool":68,"command":69},"pnpm","pnpm dlx skills add enowdev\u002Fenowxcli --skill research-web","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fenowdev\u002Fenowxcli\u002Fblob\u002Fmain\u002Fcrates\u002Fenowx-core\u002Fskills\u002Fresearch-web\u002FSKILL.md",true,[],[74,88,110,126,151,173],{"skillNo":75,"name":76,"nameZh":6,"description":77,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":78,"categories":79,"keywords":83,"publishedAt":45},"01M6D2HQYSQD9N7MTNDT4A7CBM","demo-skill","Project-scope demo skill for tests.","https:\u002F\u002Fgithub.com\u002Fenowdev\u002Fenowxcli\u002Fblob\u002Fmain\u002Fworkspace\u002F.agents\u002Fskills\u002Fdemo-skill\u002FSKILL.md",[80],{"categoryNo":81,"categoryName":82,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发",[84,85,86,87,41],"demo skill","demo","tests","project",{"skillNo":89,"name":90,"nameZh":6,"description":91,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":92,"categories":93,"keywords":100,"publishedAt":45},"01M6D2HM0GCPM0TM2HPG9HHR2R","writing","Writing words people read: the specific thing instead of claims, words to drop, sentences, interface copy (buttons, labels, errors, empty states, confirmations), page copy, notifications and emails, alt text and link text, numbers and dates, words that translate well, documentation and voice. Read before writing a page's copy, an interface's text or a document.","https:\u002F\u002Fgithub.com\u002Fenowdev\u002Fenowxcli\u002Fblob\u002Fmain\u002Fcrates\u002Fenowx-core\u002Fskills\u002Fwriting\u002FSKILL.md",[94,97],{"categoryNo":95,"categoryName":96,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000018","写作与文案",{"categoryNo":98,"categoryName":99,"taxonomyType":26,"taxonomyTypeDesc":27},"01JBSEEDCAT000000000000036","内容创作者",[90,101,102,103,104,105,41,106,107,108,35,109],"text","emails","empty","drop","document","page","voice","notifications","translate",{"skillNo":111,"name":112,"nameZh":6,"description":113,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":114,"categories":115,"keywords":119,"publishedAt":45},"01M6D2HG07YS49NM196Q0R3AZ8","ui","Designing or restyling an interface: direction, layout, type, colour, icons, components, states, responsive behaviour. Read before building a page, a screen or a set of components.","https:\u002F\u002Fgithub.com\u002Fenowdev\u002Fenowxcli\u002Fblob\u002Fmain\u002Fcrates\u002Fenowx-core\u002Fskills\u002Fui\u002FSKILL.md",[116],{"categoryNo":117,"categoryName":118,"taxonomyType":26,"taxonomyTypeDesc":27},"01JBSEEDCAT000000000000032","设计师",[112,120,121,122,123,106,124,41,125],"icons","components","SET","responsive","layout","before building",{"skillNo":127,"name":128,"nameZh":6,"description":129,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":130,"categories":131,"keywords":136,"publishedAt":45},"01M6D2HB59HZHWG1RYZDV4SJ91","ui-themes","Light and dark themes, and colour that holds in both: tokens with a value per theme, and what each kind of content needs to stay visible (icons, SVG drawings and line art, logos, photos, screenshots, charts, code, maps, borders, shadows, focus, form controls), switching without a flash, and checking both. Read before building a second theme or a theme toggle, and before any drawing, logo or chart on a page that has two themes.","https:\u002F\u002Fgithub.com\u002Fenowdev\u002Fenowxcli\u002Fblob\u002Fmain\u002Fcrates\u002Fenowx-core\u002Fskills\u002Fui-themes\u002FSKILL.md",[132,135],{"categoryNo":133,"categoryName":134,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000015","视觉设计",{"categoryNo":24,"categoryName":25,"taxonomyType":26,"taxonomyTypeDesc":27},[112,137,138,139,140,141,142,143,144,41,125,145,106,146,147,148,120,149,150],"ui themes","switching","photos","tokens","drawing","focus","maps","Art","flash","code","Charts","content","screenshots","logo",{"skillNo":152,"name":153,"nameZh":6,"description":154,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":155,"categories":156,"keywords":160,"publishedAt":45},"01M6D2H5R5KRAE524C8QX0T7Q0","ui-structure","Structure before styling: the blueprint written before any interface code (the screen's job, the regions its kind of page needs, their order and why, the layout skeleton in numbers, the components and their states), the anatomy and order of a homepage, a dashboard, a list, a detail page, settings, a form, sign-in, pricing, docs, an article and a checkout, and how to turn the blueprint into code (tokens, layout primitives, components, sections, page). Read first, before building or rebuilding any page or screen.","https:\u002F\u002Fgithub.com\u002Fenowdev\u002Fenowxcli\u002Fblob\u002Fmain\u002Fcrates\u002Fenowx-core\u002Fskills\u002Fui-structure\u002FSKILL.md",[157,158,159],{"categoryNo":95,"categoryName":96,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":24,"categoryName":25,"taxonomyType":26,"taxonomyTypeDesc":27},{"categoryNo":98,"categoryName":99,"taxonomyType":26,"taxonomyTypeDesc":27},[161,112,162,121,163,164,146,165,166,167,124,140,168,169,170,41,125,106,171,172],"structure","ui structure","pricing","dashboard","Blueprint","article","anatomy","styling","primitives","list","why","how",{"skillNo":174,"name":175,"nameZh":6,"description":176,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":177,"categories":178,"keywords":186,"publishedAt":45},"01M6D2H0ZZBJG77MBGPZHA6MWD","ui-stack-vue","Building interfaces in Vue 3 and Nuxt: project layout, script setup with typed defineProps, defineEmits and defineModel, attribute fallthrough, slots and scoped slots, template refs, ref, reactive and computed, watch versus watchEffect, composables and VueUse, provide and inject, Pinia, keyed v-for, transitions, Nuxt 4 (app directory, pages, layouts, useFetch and useAsyncData keys, $fetch in handlers, server routes, runtime config, useSeoMeta, NuxtImg, middleware), VeeValidate forms, Reka UI and Nuxt UI, testing, vue-tsc, and the traps. Read when the project uses Vue or Nuxt.","https:\u002F\u002Fgithub.com\u002Fenowdev\u002Fenowxcli\u002Fblob\u002Fmain\u002Fcrates\u002Fenowx-core\u002Fskills\u002Fui-stack-vue\u002FSKILL.md",[179,182,185],{"categoryNo":180,"categoryName":181,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000008","测试与质量",{"categoryNo":183,"categoryName":184,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000009","前端开发",{"categoryNo":117,"categoryName":118,"taxonomyType":26,"taxonomyTypeDesc":27},[112,187,188,189,190,191,192,193,124,87,194,195,41,196,197,198,199,200,201,202],"vue","stack","ui stack vue","forms","pages","watch","runtime","transitions","fetch","pinia","nuxt","template","server","config","directory","testing"]