<< All versions
Skill v1.0.0
currentTrusted Publisher100/100anthropics/healthcare/verify
──Details
PublishedJuly 23, 2026 at 02:01 PM
Content Hashsha256:5f17a5f7bc88b3d2...
Git SHA
──Files
Files (1 file, 4.1 KB)
SKILL.md4.1 KBactive
SKILL.md · 20 lines · 4.1 KB
version: "1.0.0" name: verify description: Drive the contracts engine's runtime surface (the stdio MCP server) to verify changes end-to-end. Scoped to public-plugins/plugins/healthcare/skills/contracts/ and ../../servers/documents/.
Verifying contracts-engine changes
The engine is the MCP server at ../../servers/documents/src/index.mjs — plain runnable .mjs, no build step; the source IS the shipped artifact. Most changes are drivable without a full /contracts session by speaking JSON-RPC to the server over stdio.
- Typecheck:
cd ../../servers/documents && bun run check(tsc over the .mjs via checkJs). There is no bundle; edits to src are live immediately. - Data:
~/.claude/data/healthcare/documents/data.sqlite— the dir is the server's name (documents), not the skill's (contracts); shared across checkouts; safe to delete — schema v-check tells users to do the same. For throwaway runs pointCLAUDE_HEALTHCARE_DATAat a scratch PARENT dir (the server appendsdocuments/) — never drive tests against the live db. Corpus names live incorpus_documents.corpus; query before assuming. - CLI mode:
node ../../servers/documents/src/index.mjs <tool> '<json-args>'runs one tool call without MCP — result JSON on stdout, exit 1 + stderr on error. Bare invocation is MCP stdio. - Schema changes: views and triggers are dropped/recreated on every open, so editing one reaches existing databases for free. Dropping a column is breaking — it needs a
SCHEMA_VERSIONbump and forces every user to delete their db. Verify either kind by opening the real db read-only afterwards and checkingPRAGMA user_versiondid not move. - Concurrency changes need racing, not single runs: spawn ≥16 servers with
&under/bin/bash(zsh backgrounding under the CC sandbox emits bogusnice(5)failures), fresh AND warm db, ≥60 trials each. Desktop-side repro evidence:~/Library/Logs/Claude/main.log, grepLocalMcpServerManager. - Tool schemas must be JSON Schema draft 2020-12. The API validates them when an agent spawns, so a bad schema shows up as "agent terminated early: input_schema is invalid" — never as a server error, and never in a plain tools/list. Two zod idioms silently emit draft-07:
z.tuple([...])(array-formitems→ usez.array().length(n)) andz.union([...])/.nullish()on primitives (type: [...]→ use.optional()or one type).servers/documents/test/schema.test.tsguards this; runbun testafter touching any tool's inputSchema, and spawn a real agent (claude --plugin-dir <plugin> -p "spawn subagent_type 'healthcare:documents-reader-cli' …" --allowedTools Agent) after changing agent tool lists. - MCP smoke: pipe
initialize→notifications/initialized→tools/list/tools/calllines intonode ../../servers/documents/src/index.mjsand read the JSON-RPC replies. A sequential client (write line, read reply) avoids out-of-order confusion. Core chain worth driving after engine changes:corpus_prepare(temp dir with a .txt) →write runs/briefs→findwithcites: [{doc_id, lines, has}](expect one citation per cite,kind:"exact") AND a bogushas(expect the row rejected, batch intact) →coverage. The CLI takes<tool> -with JSON on stdin, which is how workers send document text without shell escaping. - Sweep is
sweep.mjs(no agent loop, one toolless extraction per doc — verify it with--limit 2against a scratchCLAUDE_HEALTHCARE_DATAdb; also pass--groupswith one 2-doc family JSON and expectfamily:<label>workers in shard_coverage); reader agents handle only the rescue pass and no-CLI surfaces, as plain parallel Agent calls in one message (10-wide,getMaxToolUseConcurrency). To check parallelism after a real run:sql "SELECT worker, min(created_at), max(created_at) FROM findings WHERE run_id='<id>' GROUP BY worker"— the windows should overlap, not chain end-to-start. - SKILL.md / agents/documents-reader-*.md prose changes: no cheap harness — check internal consistency (tool names match the server's
tools/list, referenced file paths exist) and, for protocol changes, drive at least the mechanical tool calls the prose mandates exactly as written.