concept-drift: promote to a verb (CLI + MCP); type-check test.mjs too - #45
Merged
Conversation
Two finishers on the verb/typecheck story:
1. concept-drift — promoted from spikes/concept-drift.mjs to a real verb (verbs.mjs) →
registry → CLI bin (concept-drift.mjs / string-audit-concept-drift) + MCP, the same way
scan was. Per-message coverage vs the canonical brand registry, string-level (i18n /
translation-style); tiered matching, best-available + graceful fallback: embeddings
(opt-in EMBED_API_KEY, OpenAI-compatible) -> token overlap (stemmed) -> exact (zero-dep).
A signal, not a gate. registry = { audit, extract, scan, concept-drift }. CI smokes
repointed from the spike to the bin; concept-drift added to the MCP toolset assertion.
2. test.mjs is now type-checked too — dropped the tsconfig exclude and fixed the few real
issues it surfaced (input_schema.required accessed as unknown -> cast; extractVerb.run
not awaited -> await, same sync/async-union fix as the bins). tsc --checkJs now covers
every root .mjs, test included.
No new deps (stemmer/acorn already optional). README/Surfaces gains Concept-drift;
spikes/README drops the promoted row.
Co-Authored-By: Claude Opus 4.8 (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.
What — two finishers (Tasks 2 + 3)
1.
concept-drift→ a real verb (CLI + MCP)Promoted from
spikes/concept-drift.mjsto a verb inverbs.mjs→ registry → CLI bin(
concept-drift.mjs/string-audit-concept-drift) + MCP, the same wayscanwas.Per-message coverage vs the canonical brand registry, string-level (i18n /
translation-style). Tiered matching, best-available + graceful fallback:
embeddings (opt-in
EMBED_API_KEY, OpenAI-compatible) → token overlap, stemmed(optional
stemmer) → exact (zero-dep). A signal, not a gate.2. Type-check
test.mjstooDropped the
tsconfigexclude —tsc --checkJsnow covers every root.mjs, testincluded. The few real issues it surfaced, fixed (not suppressed):
input_schema.requiredaccessed asunknown→ cast.extractVerb.runnotawaited →await(the same sync/async-union fix as the bins).Test
test.mjs: a concept-drift case (per-message coverage, the active tier) + the toolsetassertion now expects all four tools.
ci.yml: the concept-drift smokes repoint from the deleted spike to the bin (coreexact-fallback + stemmed after the optional install);
concept-driftadded to the MCP grep.tsc0 errors,test.mjsgreen, both smokes pass, MCP lists 4 tools.stemmer/acornalready optional). README/Surfaces gains Concept-drift.🤖 Generated with Claude Code