feat(cli): doctor checks vendored wasm grammars + scip indexers (--strict)#159
Merged
Merged
Conversation
11f69cd to
9157ccf
Compare
…rict) Extends `codehub doctor` with two check groups so an operator can verify a deployment's full parse/index toolchain, not just node/pnpm/native bindings: - vendored wasm grammars: one row asserting all 16 blobs ship in @opencodehub/ingestion's vendor/wasms/ with valid \0asm magic (mirrors the prepublish gate). A shipped artifact being absent/corrupt is ALWAYS fail — never a soft skip. Resolves the vendor dir via import.meta.resolve (the package exports only the ESM import condition, so createRequire throws ERR_PACKAGE_PATH_NOT_EXPORTED) so the check works in a real global install, not just the monorepo. - scip indexers: one row per language (typescript/python/go/rust/java/ruby/ c-c++/c#/kotlin/cobol). Probes `<bin> --version`, ~/.codehub/bin, and JAR assets under ~/.codehub. Absence is `warn` by default — the analyze pipeline skips an unavailable language gracefully (a Python-only box doesn't need scip-go), matching the lenient runtime — but escalates to `fail` (exit 2) under the new --strict flag for release/CI gates. Hints route setup-installable indexers to `codehub setup --scip=<flag>` and system toolchains (go/rust/java) to the user's package manager. 262/262 cli tests pass (8 new). Default exit 1 on absent indexers, --strict exit 2.
9157ccf to
44a612f
Compare
Merged
theagenticguy
pushed a commit
that referenced
this pull request
May 29, 2026
🤖 Automated release via release-please --- <details><summary>analysis: 0.3.2</summary> ## [0.3.2](analysis-v0.3.1...analysis-v0.3.2) (2026-05-29) ### Bug Fixes * **deps:** downgrade write-file-atomic 8.0.0→7.0.1 to match supported node range ([#155](#155)) ([a723e53](a723e53)) ### Dependencies * The following workspace dependencies were updated * dependencies * @opencodehub/storage bumped to 0.2.2 * @opencodehub/wiki bumped to 0.2.2 </details> <details><summary>cli: 0.5.4</summary> ## [0.5.4](cli-v0.5.3...cli-v0.5.4) (2026-05-29) ### Features * **cli:** doctor checks vendored wasm grammars + scip indexers (--strict) ([#159](#159)) ([36a241e](36a241e)) ### Bug Fixes * **deps:** downgrade write-file-atomic 8.0.0→7.0.1 to match supported node range ([#155](#155)) ([a723e53](a723e53)) * **scanners:** correct scanner exit-code handling and stop duplicate skip logs ([#156](#156)) ([5d30eb4](5d30eb4)) ### Dependencies * The following workspace dependencies were updated * dependencies * @opencodehub/analysis bumped to 0.3.2 * @opencodehub/ingestion bumped to 0.4.4 * @opencodehub/mcp bumped to 0.4.3 * @opencodehub/pack bumped to 0.2.3 * @opencodehub/scanners bumped to 0.2.1 * @opencodehub/search bumped to 0.2.2 * @opencodehub/storage bumped to 0.2.2 * @opencodehub/wiki bumped to 0.2.2 </details> <details><summary>cobol-proleap: 0.1.8</summary> ## [0.1.8](cobol-proleap-v0.1.7...cobol-proleap-v0.1.8) (2026-05-29) ### Dependencies * The following workspace dependencies were updated * dependencies * @opencodehub/ingestion bumped to 0.4.4 </details> <details><summary>ingestion: 0.4.4</summary> ## [0.4.4](ingestion-v0.4.3...ingestion-v0.4.4) (2026-05-29) ### Bug Fixes * **deps:** downgrade write-file-atomic 8.0.0→7.0.1 to match supported node range ([#155](#155)) ([a723e53](a723e53)) * **ingestion:** vendor graphty Leiden to drop node-pty install fetch ([#157](#157)) ([790ca4e](790ca4e)) ### Dependencies * The following workspace dependencies were updated * dependencies * @opencodehub/analysis bumped to 0.3.2 * @opencodehub/scip-ingest bumped to 0.2.4 * @opencodehub/storage bumped to 0.2.2 </details> <details><summary>mcp: 0.4.3</summary> ## [0.4.3](mcp-v0.4.2...mcp-v0.4.3) (2026-05-29) ### Dependencies * The following workspace dependencies were updated * dependencies * @opencodehub/analysis bumped to 0.3.2 * @opencodehub/pack bumped to 0.2.3 * @opencodehub/scanners bumped to 0.2.1 * @opencodehub/search bumped to 0.2.2 * @opencodehub/storage bumped to 0.2.2 </details> <details><summary>pack: 0.2.3</summary> ## [0.2.3](pack-v0.2.2...pack-v0.2.3) (2026-05-29) ### Dependencies * The following workspace dependencies were updated * dependencies * @opencodehub/analysis bumped to 0.3.2 * @opencodehub/ingestion bumped to 0.4.4 * @opencodehub/storage bumped to 0.2.2 </details> <details><summary>scanners: 0.2.1</summary> ## [0.2.1](scanners-v0.2.0...scanners-v0.2.1) (2026-05-29) ### Bug Fixes * **scanners:** correct scanner exit-code handling and stop duplicate skip logs ([#156](#156)) ([5d30eb4](5d30eb4)) </details> <details><summary>scip-ingest: 0.2.4</summary> ## [0.2.4](scip-ingest-v0.2.3...scip-ingest-v0.2.4) (2026-05-29) ### Bug Fixes * **scanners:** correct scanner exit-code handling and stop duplicate skip logs ([#156](#156)) ([5d30eb4](5d30eb4)) * **scip-ingest:** prepend ~/.codehub/bin to indexer spawn PATH ([#160](#160)) ([4418db9](4418db9)) ### Dependencies * The following workspace dependencies were updated * dependencies * @opencodehub/analysis bumped to 0.3.2 </details> <details><summary>search: 0.2.2</summary> ## [0.2.2](search-v0.2.1...search-v0.2.2) (2026-05-29) ### Dependencies * The following workspace dependencies were updated * dependencies * @opencodehub/storage bumped to 0.2.2 </details> <details><summary>storage: 0.2.2</summary> ## [0.2.2](storage-v0.2.1...storage-v0.2.2) (2026-05-29) ### Bug Fixes * **storage:** retry transient lbug WAL→checkpoint race in bulkLoad ([#161](#161)) ([450714c](450714c)) </details> <details><summary>wiki: 0.2.2</summary> ## [0.2.2](wiki-v0.2.1...wiki-v0.2.2) (2026-05-29) ### Bug Fixes * **deps:** downgrade write-file-atomic 8.0.0→7.0.1 to match supported node range ([#155](#155)) ([a723e53](a723e53)) ### Dependencies * The following workspace dependencies were updated * dependencies * @opencodehub/storage bumped to 0.2.2 </details> <details><summary>root: 0.6.5</summary> ## [0.6.5](root-v0.6.4...root-v0.6.5) (2026-05-29) ### Features * **cli:** doctor checks vendored wasm grammars + scip indexers (--strict) ([#159](#159)) ([36a241e](36a241e)) ### Bug Fixes * **ci:** isolate verify-global-install into a per-run npm prefix ([#162](#162)) ([3b59373](3b59373)) * **deps:** bump qs 6.15.1→6.15.2 and tmp 0.2.4→0.2.6 to clear osv findings ([#151](#151)) ([2f798ec](2f798ec)) * **deps:** downgrade write-file-atomic 8.0.0→7.0.1 to match supported node range ([#155](#155)) ([a723e53](a723e53)) * **ingestion:** vendor graphty Leiden to drop node-pty install fetch ([#157](#157)) ([790ca4e](790ca4e)) * **scanners:** correct scanner exit-code handling and stop duplicate skip logs ([#156](#156)) ([5d30eb4](5d30eb4)) * **scip-ingest:** prepend ~/.codehub/bin to indexer spawn PATH ([#160](#160)) ([4418db9](4418db9)) * **storage:** retry transient lbug WAL→checkpoint race in bulkLoad ([#161](#161)) ([450714c](450714c)) </details> --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.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.
Summary
Extends
codehub doctorso an operator can verify a deployment's full parse + index toolchain, not just node/pnpm/native bindings. Closes the gap wheredoctorwas silent about the two things most likely to makeanalyzequietly under-perform: missing vendored grammars and missing SCIP indexers.Builds on the existing
doctorframework (sameCheckinterface,ok/warn/fail, exit 0/1/2) —@ladybugdb/coreand the scanner binaries were already covered; this adds the missing rows.New checks
1. Vendored WASM grammars (1 row)
Asserts all 16 blobs ship in
@opencodehub/ingestion'svendor/wasms/with valid\0asmmagic — mirrors the prepublish gateverify-vendor-wasms.mjs, but runs against the installed package so it validates a real deployment. Alwaysfailon absence/corruption (never a soft skip — a shipped artifact being gone means parsing is broken).2. SCIP indexers (1 row per language)
typescript, python, go, rust, java, ruby, c/c++, c#, kotlin, cobol. Probes<bin> --version,~/.codehub/bin, and JAR assets under~/.codehub. Hints route setup-installable indexers tocodehub setup --scip=<flag>and system toolchains (go/rust/java SDKs) to the user's package manager.The
--strictflag (skip = fail, opt-in)By default an absent indexer is
warn— the analyze pipeline skips an unavailable language gracefully (a Python-only box doesn't needscip-go), matching the lenient runtime behavior.--strictescalates every absent indexer tofail(exit 2) for release/CI gates. Vendored WASMs arefailin both modes.This deliberately reconciles with #156: runtime stays lenient; the diagnostic gate can be strict.
Implementation note
The vendor dir resolves via
import.meta.resolve("@opencodehub/ingestion"), notcreateRequire().resolve()— the package'sexportsmap declares only the ESMimportcondition, so the require form throwsERR_PACKAGE_PATH_NOT_EXPORTED. Caught during testing: the require path only "worked" locally via the monorepo fallback and would have falsely FAILed the WASM check in a real globalnpm i -ginstall. Theimport.meta.resolvepath is verified to resolve with a bogus repoRoot (i.e. no monorepo).Verification
codehub doctor→ new rows render; exit 1 with absent indexerscodehub doctor --strict→ indexer rows FAIL, exit 2; OK indexers (go/rust here) stay OK; wasm stays OKTest plan