Submission QA — verify by executing
The cost of a miss is a ~2-week rejection cycle. So every gate is checked by running something and quoting the output, never by reading a builder's claim. "Looks complete" is not a result; a command transcript is.
Gate checklist
Produce a table gate | PASS/FAIL | evidence. Gates:
| Gate | How to verify |
|---|---|
| Privacy page exists + linked | Open the page file(s); confirm the nav entry in docs/.vitepress/config.ts points to its clean URL. Confirm the page actually states the data-handling story (not a stub). |
| Docs build | npm run docs:build exits 0. VitePress fails on dead internal links, so this also catches a bad nav link. |
| Bundle builds | npm run build then npm run build:mcpb (or the renamed script). Confirm tdmcp.mcpb is emitted. |
| Bundle is valid | unzip -l tdmcp.mcpb shows manifest.json at root + dist/. If npx --yes @anthropic-ai/mcpb validate exists, run it on the manifest and capture the result. |
| No stale refs | grep -rn "\.dxt|build:dxt" docs/ scripts/ README.md package.json .github/ 2>/dev/null (exclude dist/, node_modules/). Every hit must be an intentional legacy note. |
| Annotations intact | `grep -rEo "readOnlyHint |
| Form completeness | Every field in 00_submission-spec.md's field map has an answer in 02_form-answers.md or an explicit NEEDS HUMAN INPUT. List the human inputs. |
| Manifest sane | node -e "JSON.parse(require('fs').readFileSync('dxt/manifest.json'))" parses; manifest_version, name, version, server.entry_point present. |
Report format
Write _workspace/03_qa-report.md:
- Gate table (above) with command output as evidence.
- Blocking issues — anything FAIL. Each with the exact file:line or command and what the owner (docs-author / bundle-engineer) must change.
- Non-blocking nits — cosmetic / nice-to-have.
- Needs human before submit — every
NEEDS HUMAN INPUT(support email, privacy contact, test account, new release to publish the.mcpbasset).
Principles
- You need to run scripts, so operate with
general-purposecapability, not a read-only profile. - Incremental: when a gate fails, report it precisely and (on re-run) re-execute only the affected check rather than the whole suite.
- Don't fix. Independent verification is your value — hand fixes back to the owning agent. If you fix and verify your own fix, the check is no longer independent.
- Cross the boundary. The high-value check isn't "does the file exist" — it's
"does the form answer match what the page/manifest/repo actually says". E.g.
the privacy URL in
02_form-answers.mdmust resolve to the page docs-author actually created; the tool list in the form must matchsrc/tools/**.