td-feature-qa — verify it works, not just exists

SkillDev tools

Quality-assure integrated tdmcp features: run the four PR gates + recipe/bridge tests, cross-boundary coherence checks (tool schema↔CLI↔docs↔registry, operator↔createable, bridge↔client), and live TouchDesigner validation (preview + post-cook error check) when the bridge is reachable. Use when validating/QA-ing/testing tdmcp tools, checking a feature actually cooks in TD, verifying CLI matches a tool, or gating a release.

Available today. Use it from your connected AI after setup.

Connect ahel once, and every AI you use reads what you have installed.

Then ask your AI: use the td-feature-qa — verify it works, not just exists skill

What this skill tells your AI

The instructions your AI receives, as published by pantani/tdmcp in .agents/skills/td-feature-qa/SKILL.md and read by ahel’s review.

Most defects here live at boundaries, and a tool that returns success can still cook to errors or a black frame. So: read both sides of every boundary together, and check errors after the network cooks, not just the create_* return flag. Run incrementally — validate each feature as it lands so an early boundary bug doesn't propagate.

Gates + suites — always run (offline, no TD needed)

  • npm run typecheck · npm run build · npm test
  • biome via ./node_modules/.bin/biome check . (NOT npm run lint — RTK proxy gives a false ESLint parse error)
  • npm run validate:recipes · npm run test:bridge (python3 -m unittest discover -s td/tests)

Cross-boundary checks — open both sides

BoundaryLeft (producer)Right (consumer)Compare
Tool ↔ CLItool's Zod inputSchemacommand in src/cli/agent.tsevery param reachable from CLI; types/defaults align; name maps to the right handler
Tool ↔ registryregister… exportlayer*/index.ts + tools/index.tsactually registered + aggregated, not just written
Tool ↔ docslive registrygenerated docs/reference/tools.mdregenerates and includes the new tool
…Impl ↔ testreal return / isError shapemsw test assertionstest exercises the actual shape, not a cast-away generic
Code ↔ TDoperator types createdwhat this build can createoptype exists + is createable (dir(td) suffix-match over-counts; ~22 names not createable; KB lags ~14 ops)
Bridge ↔ clienttd/ endpoint/payloadtouchDesignerClient.ts + validators.ts enveloperesponse shape matches the Zod validator

Live TD validation — when the bridge is up

Policy: offline gates always; live when available. Call get_td_info first.

  • Bridge up: build the feature through the agent CLI against the live bridge, capture get_preview, and check get_td_node_errors after it cooks.
  • Bridge offline: run offline gates, mark live validation UNVERIFIED — pending bridge in the report. Do not fail the pipeline for a missing TD.

Before any live mutation, record the exact disposable PID/project/port and confirm the artist PID owns none of those resources. Do not probe the app binary with guessed flags and do not use Accessibility/menu/Textport automation when multiple TD processes are open. After Python bridge edits, restart only the disposable runtime, verify the loaded module paths and confirm arbitrary exec is disabled before calling product routes.

Live gotchas to rule out before declaring a bug:

  • Silent failures: a Level TOP has no gain (it's brightness1); no cross-container wires (Select TOP).
  • Paused timeline: time-dependent chains (motion / frame-diff / feedback / beat) read 0 when op('/').time.play is false — check it before concluding a reactive chain is dead.
  • Staleness: a connected mcp__tdmcp__* runs the old build until restarted; editing td/ doesn't reload the running bridge (reload_bridge / restart) — suspect stale modules before "fixing" correct code.
  • GLSL: needs out vec4 fragColor + a self-supplied time uniform.
  • Device sources can hang TD on a macOS permission modal — validate the synthetic/file source first.

Output

A report at _workspace/04_qa_<feature|batch>.md with three explicit buckets — PASS, FAIL (file:line + concrete fix + owning agent), UNVERIFIED (what wasn't checked + why, e.g. bridge offline). Never silently skip a check; list it as UNVERIFIED.

Fix loop

  • Send each defect immediately to its owner (td-builder for handler/schema/test, td-integrator for wiring/CLI/docs); boundary bugs go to both. Re-validate after each fix.
  • Cap at ~2–3 rounds per feature; if still failing, report a blocker with full findings instead of looping.
  • If a gate fails due to a concurrent agent's unrelated in-flight WIP, say so and validate your slice in isolation (vitest run <yourfile>).

Signals

GitHub stars
41
Forks
9
Last commit
Aug 2026
Advanced
Catalog kind
skill
Gateway key
td-feature-qa
Source
github.com/pantani/tdmcp