Fix Polyglot Detection for Tauri+TS and Ruby+JS Projects

The polyglot language detector has two gaps that produce trust-killing misclassifications on real customer repos:

verdict PASSscore 19 / 19findings 7 (0 risk · 2 debt · 5 obs)duration 1h 11mrejection cycles 0shipped May 20, 2026surface cli

Pipeline timeline

Intent to proven code in 1h 11m across Think, Plan, Build, and Verify.

Think
4m
Plan
13m
Build
4m
Verify
6m

Assertion ledger

19 claims, each independently verified. Showing 8 — show all →

IDSaysMatcher
A001A Tauri monorepo with pnpm workspace detects as a TypeScript projectverifiedok
A002Tauri monorepo detection has high but not maximum confidenceverifiedok
A003Tauri monorepo detection includes the pnpm workspace file as evidenceverifiedok
A004A Rust workspace without Tauri still detects as Rustverifiedok
A005A Tauri project without pnpm workspace correctly stays Rustverifiedok
A006Pure Tauri desktop app keeps Rust confidenceverifiedok
A007A Ruby on Rails project with package.json detects as Rubyverifiedok
A008Ruby detection with lockfile has high confidenceverifiedok

Findings 7 total

debtpackages/cli/src/engine/detectors/projectType.tsclosed
Stale docstring — says 'Python → Go → Rust → Ruby → PHP' but polyglot tier order is Python → Rust → Ruby → Go
obspackages/cli/src/engine/detectors/projectType.tsclosed
indexOf('\n[') section boundary misses header at position 0 of sliced block — inherited from hasPythonProjectDeps pattern
obspackages/cli/src/engine/detectors/projectType.tsclosed
Tauri discriminator omits Cargo.toml from indicators — downstream consumers can't tell Rust is present
obspackages/cli/src/engine/detectors/projectType.tsmonitor
Ruby detection is existence-only — no Gemfile content analysis, so a Gemfile with only dev gems still triggers Ruby
debtpackages/cli/tests/engine/detectors/polyglot.test.tsclosed
Tag collision — @ana IDs A001-A019 used by both old contracts and this contract in same file, creating ambiguity for tooling
+2more findings

Integrity seal

scopesha256:a3ddedc3c63fe...
contractsha256:d033dee05b38b...
plansha256:eccacd455a7dc...
specsha256:5fac00b644acb...
build-reportsha256:003367411f90a...
build-datasha256:fe9e41b6e9ce4...
verify-reportsha256:f39c6bc919b81...
verify-datasha256:c8a1f3bb4dd5e...
audit cmd$ ana proof audit fix-polyglot-rust-ts-ruby   → all hashes match