VR-* Type Catalog
Verification Requirements (VR-) are checks with a specific expected output. Every claim that work is complete must be backed by a VR- check returning the expected result. Massu AI ships a catalog of built-in types plus two extension points — custom VR-* types and per-language command overrides — both declared in massu.config.yaml.
Built-in Catalog
Every built-in VR-* type, its command, and the expected output. Commands marked with <language> use the per-language override (see below) when present, falling back to the defaults listed here.
| Type | Command | Expected Output | Use When |
|---|---|---|---|
| VR-FILE | ls -la [path] | File listed with permissions | Claiming a file was created |
| VR-GREP | grep "[pattern]" [file] | Line number + matching content | Claiming code was added |
| VR-NEGATIVE | grep -rn "[old]" packages/core/src/ | No output / 0 matches | Claiming code was removed |
| VR-BUILD | npm run build (TS) / cargo build (RS) / go build ./... (GO) / etc. | Exit 0 | Claiming production-ready |
| VR-TYPE | npx tsc --noEmit (TS) / cargo check (RS) / python3 -m mypy . (PY) | 0 errors | Claiming type safety |
| VR-TEST | npm test (TS) / python3 -m pytest -q (PY) / cargo test (RS) | All tests pass, exit 0 | ALWAYS before claiming complete |
| VR-COUNT | grep -c "[pattern]" [file] | Exact expected count | Verifying all instances |
| VR-PATTERN | bash scripts/massu-pattern-scanner.sh | Exit 0 | Before every commit |
| VR-HOOK-BUILD | cd packages/core && npm run build:hooks | Exit 0 | After modifying hooks |
| VR-CONFIG | Parse massu.config.yaml via yaml.parse() | Valid object | After config changes |
| VR-TOOL-REG | grep tools.ts for definitions + handler | Both wired | After adding MCP tools |
| VR-BLAST-RADIUS | grep codebase for every reference to changed value | 0 uncategorized refs | Changing constants / config keys |
| VR-PLAN-COVERAGE | Item-by-item verification table | 100% items PASS | Before claiming plan complete |
| VR-PROTOCOL | Verify every protocol step was executed | All steps completed in order | After slash command |
| VR-SECURITY | bash scripts/massu-security-scanner.sh | Exit 0 | After security changes |
| VR-COVERAGE | bash scripts/massu-test-coverage.sh | Exit 0 | After adding / removing tests |
| VR-MIGRATION | bash scripts/massu-migration-validator.sh | Exit 0 | After migration changes |
| VR-SCHEMA-SYNC | Website Supabase schemas match | All migrations applied | After schema changes |
| VR-GENERIC | bash scripts/massu-generalization-scanner.sh | Exit 0 | After any file change |
| VR-PRODUCT | Data-flow trace + stub scan + user-journey walk | 0 stubs, real data flows | ALWAYS before claiming any user-facing feature complete |
Per-Language Command Override
Override the command that VR-TEST, VR-TYPE, VR-BUILD, VR-SYNTAX, or VR-LINT run for a specific language. Any key omitted falls back to the built-in default.
Declared under verification.<language> in massu.config.yaml:
verification:
python:
test: cd app && python3 -m pytest -q
type: cd app && python3 -m mypy .
syntax: cd app && python3 -m py_compile
lint: cd app && python3 -m ruff check .
typescript:
test: npm run test:unit
type: cd packages/core && npx tsc --noEmit
build: npm run build:prodMulti-Runtime Projects
When framework.type: multi, VR-* lookups are per-language. The "primary" language comes from framework.primary. Commands that are language-agnostic (VR-PATTERN, VR-SECURITY, VR-GENERIC) are unaffected.
framework:
type: multi
primary: python
languages:
python:
framework: fastapi
typescript:
framework: next
verification:
python:
test: cd api && python3 -m pytest -q
typescript:
test: cd web && npm testCustom VR-* Type Registration
Projects can register domain-specific verification types via verification_types in massu.config.yaml. The key is the type name (conventionally prefixed VR-); the value is a human-readable description. These surface in commands that enumerate the catalog.
verification_types:
"VR-IBKR-CONTRACT": "Interactive Brokers contract object resolves to a real security via the IBKR API"
"VR-POLICY": "All enforced policies in the UI are actually checked at runtime by policy-engine.ts"
"VR-RLS": "Every Supabase table referenced by the feature has a passing RLS policy test"Worked Example: VR-IBKR-CONTRACT
A trading-compliance project needs to verify that every IBKR contract object used in code resolves to a real security.
| Field | Value |
|---|---|
| Type name | VR-IBKR-CONTRACT |
| Description | Interactive Brokers contract object resolves to a real security via the IBKR API |
| Command | cd trading && python3 -m ibkr_contract_check src/strategies/ |
| Expected Output | "All contracts resolved" / exit 0 |
| Failure Mode | Contract not found / delisted symbol / ambiguous |
| Use When | After adding or modifying any strategy that references an IBKR contract |
Declared:
verification_types:
"VR-IBKR-CONTRACT": "Interactive Brokers contract object resolves to a real security via the IBKR API"Once registered, the custom type is recognized by /massu-verify enumeration and can be referenced in plan verification tables. The runner command is your responsibility — Massu does not execute custom VR-* types for you; it catalogs them so plans can cite them.
Where VR-* Runs
- Pre-commit (
/massu-commit) — VR-TYPE, VR-TEST, VR-PATTERN, VR-GENERIC, VR-SECURITY - Pre-push (
/massu-push) — adds VR-BUILD, VR-HOOK-BUILD, VR-COVERAGE - Plan loop (
/massu-loop) — VR-PLAN-COVERAGE, VR-PLAN-SPEC, VR-PROTOCOL - Verification sweep (
/massu-verify) — runs all built-in types + every custom type declared in config
Canonical Rules and VR Mapping
Every Canonical Rule (CR-) maps to a VR- type. See CLAUDE.md for the full rule list.
| Canonical Rule | VR Type |
|---|---|
| CR-1: Never claim state without proof | VR-* (any) |
| CR-2: Never assume file/module structure | VR-FILE, VR-GREP |
| CR-4: Verify removals with negative grep | VR-NEGATIVE |
| CR-7: ALL tests MUST pass before claiming complete | VR-TEST |
| CR-10: Blast radius analysis for value changes | VR-BLAST-RADIUS |
| CR-11: New MCP tools MUST be registered | VR-TOOL-REG |
| CR-12: Hooks MUST compile with esbuild | VR-HOOK-BUILD |
| CR-38: All shipped files must pass generalization scanner | VR-GENERIC |
| CR-39: "Complete" means product-ready for paying customers | VR-PRODUCT |
Related
auto-detection— howverification.<language>commands are chosen byVRCommandMapreference/config-reference— full YAML schema forverificationandverification_typesmigration/v1-to-v2— howverificationandverification_typesmove from v1 to v2