网络测出了什么
下面每一行都是测量结果,不是观点。每一条都链接到一个已发布的样本,其 contract 在断网的固定容器中执行,你可以自己重跑并反驳结论。
操作系统和运行时来自所链接样本记录的环境;缺少该维度的条目会在筛选时排除。
597 条发现,覆盖 8 个生态。
- cargo
- composer
- gem
- golang
- hex
- npm
- pub
- pypi
样本自述,其契约实测
正在显示已发布样本测得的第 501–525 条(共 568 条)。
-
npm样本契约node · linux/x64@babel/core@8.0.1
普遍认为Targeting an environment with known JavaScript engine bugs forces preset-env to downlevel the surrounding modern ES2015+ syntax categories down to ES5 helper functions.
实测preset-env targeting Safari 14 preserves native ES2015 destructuring syntax and parameter defaults while surgically renaming only the colliding parameter identifier to avoid JavaScriptCore scope shadowing bugs
-
npm样本契约node · linux/x64@babel/preset-env@7.29.7
普遍认为Leaving useBuiltIns unset in @babel/preset-env automatically injects polyfills for unsupported ECMAScript standard library methods across configured target environments when corejs is configured or core-js is imported.
实测When useBuiltIns is unset, @babel/preset-env defaults to false and leaves standard library methods un-polyfilled without injecting any core-js imports, even when targets lack support or corejs is specified.
-
npm样本契约node · linux/x64@babel/preset-env@8.0.2
普遍认为In Babel presets, legacy configuration options like loose, spec, bugfixes, and useBuiltIns remain accepted as valid options, and isPluginRequired continues to be exported as a helper function.
实测Passing loose, spec, bugfixes, or useBuiltIns to @babel/preset-env in major version 8 throws descriptive removal errors rather than accepting legacy configuration options or polyfill strategies.
-
composer样本契约php · linux/x64symfony/console@8.1.4
普遍认为Subclassing Command with a static getDefaultName method automatically defines the command name on instantiation, and closures assigned via setCode may omit explicit integer return values.
实测Command subclasses defining static getDefaultName() have a null name in Symfony Console 8 because getDefaultName() was removed in favor of #[AsCommand], and Application::addCommand() throws LogicException for empty names.
-
npm样本契约node · linux/x64@rollup/plugin-commonjs@29.0.3
普遍认为When bundling CommonJS modules that conditionally require Node built-ins into ESM, @rollup/plugin-commonjs preserves lazy evaluation inside functions without hoisting static imports to the module top level.
实测By default, @rollup/plugin-commonjs hoists conditional require('node:fs') calls to top-level ESM static imports, eagerly loading built-in modules on startup rather than preserving lazy CommonJS evaluation.
-
npm样本契约node · linux/x64@rollup/plugin-commonjs@28.0.9
普遍认为By default @rollup/plugin-commonjs transforms require expressions into bundled module imports in any file processed by Rollup.
实测assert requireReturnsDefault defaults to false, returning an augmented namespace object with __esModule marker rather than unwrapping default export directly when CJS requires ESM
-
gem样本契约ruby · linux/x64csv@3.3.2
普遍认为A good model expects CSV to inherit its default `row_sep` from `$INPUT_RECORD_SEPARATOR` whenever `row_sep` is not passed.
实测assert that setting `$INPUT_RECORD_SEPARATOR` to "|" and calling `CSV.new("a,b")` yields `row_sep == "\n"`
-
gem样本契约ruby · linux/x64csv@3.3.2
普遍认为The CSV :numeric and :integer converters parse numeric string values using base-10 decimal representation.
实测CSV.parse_line with converters: :numeric parses leading-zero strings like 012 as octal integer 10, whereas strings with non-octal digits like 008 fall through to float 8.0 rather than parsing as decimal integers or strings
-
gem样本契约ruby · linux/x64csv@3.3.2
普遍认为CSV.parse treats an input IO stream as caller-managed and leaves it open after parsing, while CSV.open and CSV.foreach automatically release underlying file handles.
实测CSV.parse(io) without a block permanently closes the caller-provided IO or StringIO stream upon completion, whereas CSV.parse(io) with a block leaves the stream open
-
gem样本契约ruby · linux/x64csv@3.3.2
普遍认为Calling CSV.instance twice with the same source should create independent parser state that starts from the beginning each time.
实测CSV.instance caches one parser per source object and option set, so the second call with the same source reuses the first parser's cursor instead of starting over.
-
gem样本契约ruby · linux/x64csv@3.3.2
普遍认为Passing converters: :numeric parses numeric strings with leading zeros as decimal numbers or preserves them consistently as strings.
实测CSV.parse_line with converters: :numeric parses leading-zero strings with octal digits 0-7 as octal integers while strings containing 8 or 9 fall back to floats, mutating 0123 into 83 and 0890 into 890.0 across a round trip
-
gem样本契约ruby · linux/x64csv@3.3.2
普遍认为CSV::InvalidEncodingError inherits from Ruby core's EncodingError, and liberal_parsing: true suppresses unclosed quote errors.
实测CSV::InvalidEncodingError inherits from CSV::MalformedCSVError and RuntimeError rather than EncodingError, so rescue EncodingError fails to catch byte sequence errors during parsing.
-
gem样本契约ruby · linux/x64csv@3.3.2
普遍认为CSV.parse returns empty strings for unquoted empty fields between delimiters by default.
实测assert parsing unquoted empty fields returns nil rather than empty string when nil_value is left unset
-
gem样本契约ruby · linux/x64csv@3.3.2
普遍认为A developer expects duplicated header values to follow normal Ruby Hash last-wins semantics when using CSV row conversion.
实测CSV.parse("id,id,name\n1,2,alice\n", headers: true).first.to_h["id"] evaluates to "1", not "2", because CSV::Row#to_h preserves the first duplicate header.
-
cargo样本契约rust · linux/x64winnow@1.0.4
普遍认为Calling `Parser::default_value()` makes a parser yield the default value whenever the wrapped parser fails.
实测assert `alpha1.default_value()` on '123' returns `Err(ErrMode::Backtrack(_))` instead of falling back to `0`
-
npm样本契约node · linux/x64@babel/core@8.0.1
普遍认为loadPartialConfig({...}) returns a PartialConfig object synchronously, because that is how every Babel 7 example, README snippet, and tool integration calls it; the callback form was always optional.
实测Calling loadPartialConfig() without a callback in Babel 8 throws an Error whose message names loadPartialConfigSync as the required synchronous replacement — in Babel 7 the identical call returned a PartialConfig object without throwing.
-
hex样本契约elixir · linux/x64nimble_csv@1.3.0
普遍认为When a parser is defined with separator: ["|", ";"], dumping rows that were parsed from semicolon-delimited input will preserve the semicolon separator, because the parser accepted that format.
实测Parsing semicolon-separated CSV with a multi-separator parser succeeds, but dump_to_iodata emits pipe-separated output — the first separator in the list — not the semicolon the input used, because the dump separator is fixed at compile time by the first list entry.
-
hex样本契约elixir · linux/x64nimble_pool@1.1.0
普遍认为A model expects that starting a lazy pool with lazy: true defers worker module validation until checkout, allowing start_link to return {:ok, pid} even when given an unresolvable worker module or an atom :infinity for pool_size.
实测NimblePool.start_link/1 with lazy: true eagerly ensures the worker module is loaded in init/1 and fails pool startup with an ArgumentError when the module is not found.
-
hex样本契约elixir · linux/x64ecto@3.12.5
普遍认为Ecto.Multi.run/3 accepts a single-argument callback receiving the accumulated changes map, matching other Multi dynamic callbacks and Ecto 2 conventions.
实测assert Ecto.Multi.run/3 requires a 2-arity function taking repo and changes and raises FunctionClauseError on a 1-arity function, whereas Multi.insert/3 and Multi.merge/2 accept 1-arity functions receiving only changes
-
golang样本契约go · linux/x64net/http@go1.26.5
普遍认为Once net/http drops Authorization for a cross-domain redirect, the header stays absent for the rest of the chain — but before go1.23.7 / go1.24.1, a same-domain hop immediately following a cross-domain hop silently restores Authorization to the request, leaking the credential to the second domain while the HTTP response stays 200.
实测After a three-hop redirect chain where the first cross-domain hop strips Authorization, the Authorization header must be absent at the same-domain second hop on serverB — before go1.23.7 / go1.24.1 this assertion fails silently with a 200 response.
-
golang样本契约go · linux/x64net/http@v1.26.5
普遍认为Setting http.Transport.MaxIdleConns to a high value allows all idle connections to a single target host to be pooled when MaxIdleConnsPerHost is left unset.
实测Leaving http.Transport.MaxIdleConnsPerHost unset (0) with MaxIdleConns set to 100 retains only 2 idle connections for a host, rejecting the 3rd connection with 'too many idle connections for host'.
-
golang样本契约go · linux/x64net/http@go1.22.0
普遍认为ReadHeaderTimeout enforces a deadline on reading the request body
实测the server handler takes >2s to read the request body despite ReadHeaderTimeout=1s
-
golang样本契约go · linux/x64net/http@v1.26.5
普遍认为Calling resp.Body.Close() — the pattern shown in every tutorial — is sufficient for http.Transport to reclaim and reuse the underlying TCP connection for the next request.
实测When resp.Body.Close() is called without draining the body first, http.Transport opens a brand-new TCP connection for the very next request to the same host, measured via httptrace.GotConnInfo.Reused being false.
-
golang样本契约go · linux/x64net/http@v1.26.5
普遍认为A second request on the same `http.Client` should proceed after the first `Do` call returns, even if that first response body is never read or closed.
实测A second request using the same `http.Client` and `http.Transport{MaxConnsPerHost: 1}` does not complete while the first response body remains open, returning a context timeout instead.
-
golang样本契约go · linux/x64net/http@go1.26.5
普遍认为A setting named `GODEBUG=http2server=0` only affects debug output, so an explicit HTTP/2-only setup should still work.
实测An HTTP/2-only client-server pair should negotiate and return `HTTP/2.0` by default, while the same code with `GODEBUG=http2server=0` must fail because no shared protocol is available.
如何核对这里的任何一行
打开样本,读它的 contract,然后运行。contract 就是该样本自己的测试:它在断网的固定容器中运行,那次运行的签名回执才是网络所存储的东西。这里没有一条依赖我们对某个库的理解,只依赖这个库实际做了什么。
有些已发布的样例不在这个页面上。它们的契约通过了,样例也是活的 —— 但契约里没有一行能当句子读。像 expect(x).toBe(1) 这样的断言,放在它所检验的那个认知旁边,对读者什么也没说。与其登出没人能读的证据,不如空着。