docs: seven corrections, including one that misdirects contributors - #23
Merged
Merged
Conversation
Found by reading every doc in the repository against the code and the CI config, rather than grepping it. CONTRIBUTING.md said the markdown/prose checks "do not block merges yet, for the same reason: this tree's markdown was written hard-wrapped and most of it hasn't been through a dprint fmt pass." Both halves are false now. `prose` is a REQUIRED status check on main (confirmed against the branch protection API — there are twelve), and ci.yml's own comment says the reformatting happened and "both checks pass, so both gate". A contributor reading this today would believe a markdownlint failure cannot stop them. It also never mentioned the `public` job at all, so the most surprising gate in the repository — no pointers into the private repository, no citations of paths that are not here — was undocumented for contributors. docs/reference/artifact.md step 4 said four symbols are mandatory while naming `chtypes.NewRegistry` in go/chtypes/multiversion.go as "the reference algorithm". That code requires seven: Go also demands chs_free, chs_validate_type and chs_schema_free, because its C shims call them without NULL checks. Python, TypeScript and Rust require four and degrade. So the spec and the implementation it cites disagree, AND this is a real parity divergence nobody had catalogued — an artifact missing one of those three loads in three bindings and is refused by the fourth. The doc now describes both behaviours and points at #13; picking a winner is that issue's job, and the new finding is filed there. No artifact this repository builds is affected: every one exports all seven. The same file's Loading list numbered two different items 6, because one "6." was buried inline at the end of item 5. Renumbered, now eleven. docs/reference/bindings.md cited `chs_schema_compile_with_settings` as the symbol whose absence makes the probe answer false. That identifier exists nowhere — not in any binding, not in include/chtypes.h — and every binding's own doc-comment says the probe is ALWAYS true post-consolidation. It also announced "Two independent detectors" and then numbered three. bindings.md also presented 't'/'f'/'e'/'d' as though it were the universal verdict spelling. TypeScript renders 'true'/'false'/'error'/'decline'. The four states and the fail-closed rule really are identical; the spelling is not, and two SDKs cannot share a log format across it. Disclosed where the verdicts are described, pointing at #13 where the decision lives. docs/reference/python.md listed Schema, Filter and Block as the context managers. Registry is one too (registry.py:1160). Library deliberately is not, and that now says so with the reason. docs/install.md advertised ffi-rs's prebuilt matrix — darwin arm64/x64, linux arm64/x64 gnu and musl — without noting that chtypes artifacts are published for three platforms only. An Intel Mac or musl user installs cleanly, then `chtypes fetch` has nothing to give them. docs/index.md's Reference table never linked docs/reference/artifact.md, which exists and is what a reader debugging a fetch or verify problem wants. docs/limitations.md gated the filter surface on an internal rig gating green — a condition no public reader can check. Now gated on a release saying so, which they can. All four parity suites still pass; they read bindings.md, and the python one asserts the manifest and that document agree on the object-model table. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018ckJDLjWhAAttQVrYnQEJD
EricAndrechek
added a commit
that referenced
this pull request
Sep 13, 2026
… does (#26) Issue #13 A6 asks whether the missing scope-based release on Library is a divergence to fix or a design to document. It is the latter, and bindings.md §Teardown already carries the full reasoning: a scope-based close on a Library is the mid-lifecycle teardown measured on 2026-08-31 to segfault on the next open, so Python and TypeScript both withhold it from Library alone, on purpose. python.md gained the one-line pointer in #23. ts.md is the other language with the same asymmetry and did not have it, so a reader of ts.md alone still met the surprise with no explanation. Now both say it. No code change: A6 needed confirming and documenting, not fixing. Claude-Session: https://claude.ai/code/session_018ckJDLjWhAAttQVrYnQEJD Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Found by reading every doc in the repository against the code and the CI config, rather than grepping it. Touches no workflow file, so it is independent of #22.
1.
CONTRIBUTING.mdactively misdirects — highest severity hereBoth halves are false now.
proseis a required status check onmain— confirmed against the branch-protection API, which lists twelve — andci.yml's own comment says the reformatting already happened and "Both checks pass, so both gate." A contributor reading this today believes a markdownlint failure cannot stop their PR.It also never mentioned the
publicjob, so the most surprising gate in the repository was undocumented for the people most likely to trip it. Added, with the fix: say what a thing is, not where it lives.2.
docs/reference/artifact.md— the spec contradicts the code it citesStep 4 said four symbols are mandatory, while naming
chtypes.NewRegistryingo/chtypes/multiversion.goas "the reference algorithm." That code requires seven:Python (
_native.py:156), TypeScript (ffi.ts:135) and Rust (ffi.rs:175) require four and degrade the rest tounsupported. So this is not only a doc error — it is a real parity divergence nobody had catalogued: an artifact missingchs_free,chs_validate_typeorchs_schema_freeloads in three bindings and is flatly refused by the fourth.The doc now describes both behaviours and points at #13. Picking a winner is that issue's job, and the finding is filed there. No artifact this repository builds is affected — every one exports all seven — so the blast radius is third-party and historical artifacts only.
The same file numbered two different items 6, because one
6.was buried inline at the end of item 5. Renumbered; the list is eleven steps.3.
docs/reference/bindings.md— a symbol that exists nowhere, and a miscountchs_schema_compile_with_settingsas the symbol whose absence makes the probe answer false. That identifier exists nowhere — not in any binding, not ininclude/chtypes.h— and every binding's own doc-comment says the probe is always true post-consolidation.'t'/'f'/'e'/'d'as the universal verdict spelling. TypeScript renders'true'/'false'/'error'/'decline'. The four states and the fail-closed rule genuinely are identical; the spelling is not, and two SDKs cannot share a log format across it. Now disclosed where verdicts are described, pointing at SDK parity: 12 divergences between the four bindings that need a decision, not a fix #13.4–7. The rest
reference/python.mdSchema,Filter,Blockas the context managersRegistryis one too (registry.py:1160);Librarydeliberately is not, with the reasoninstall.mdchtypes fetchhas nothing for themindex.mdreference/artifact.mdlimitations.mdVerification
All four parity suites pass — they read
bindings.md, and the Python one asserts the manifest and that document agree on the object-model table, so an edit there is not free.lint-public,lint-prose,markdownlintanddprint checkall clean.🤖 Generated with Claude Code
https://claude.ai/code/session_018ckJDLjWhAAttQVrYnQEJD