build-verifiable-features

Declares NestJS decorators and OpenAPI extensions so a runtime probe can verify API features.

Updated Apr 7, 2026
One-click install
npx skills add https://github.com/hontauadrian/sfx-app-empty-test --skill build-verifiable-features-hontauadrian
Or copy as Structured Prompt for Agent▼
Please help me install this Agent Skill.
Skill: build-verifiable-features
Source: https://github.com/hontauadrian/sfx-app-empty-test/tree/main/.overstory/claude-profiles/reviewer/skills/build-verifiable-features
Command: npx skills add https://github.com/hontauadrian/sfx-app-empty-test --skill build-verifiable-features-hontauadrian

SYSTEM DOCUMENTATION & REQUIREMENTS

💡 This Skill includes references (resource) components.

What problem does it solve? Runtime verification probes cannot infer API behavior from code heuristics, so undeclared features cause probe failures like RESOURCE_CAPTURE_UNDECLARED, ZOD_CONTRACT_UNDETECTED_FOR_STATUS_REACH, and silent coverage gaps. This Skill teaches the exact decorator and OpenAPI extension declarations the probe reads to verify endpoints automatically. ## Core Features & Use Cases - Chain capture declarations: Apply @ResourceCaptures and @BodyResourceRefs so the probe can chain POST-created resource IDs into sibling GET/PATCH/DELETE routes and pre-create foreign records referenced in request bodies. - Reflection workaround patterns: Add explicit @ApiProperty({ type: ... }) and @Inject(Token) declarations that survive tsx + esbuild's missing reflect-metadata emission. - Feature sub-skill routing: Route auth, CSRF, cookies, ETag, error shapes, pagination, and other feature types to their dedicated declaration recipes with DIAG-to-fix reference tables. - Use Case: When pnpm probe:smoke emits RESOURCE_CAPTURE_PATHPARAM_UNDECLARED on a nested /teams/:teamId/members route, add the additive pathParam alias tuple to the parent POST handler and re-run the probe to green. ## Quick Start Invoke this skill whenever pnpm probe:smoke reports an UNDECLARED diagnostic or before writing a chainable POST handler, then apply the matching decorator declarations and re-run the probe.

Frequently Asked Questions about build-verifiable-features

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I fix RESOURCE_CAPTURE_UNDECLARED in probe output?▼

Add @ResourceCaptures to the chainable POST handler with fromPath (JSONPath to the response ID), resource (semantic name), and pathParam (the sibling route's :param name). If nested children use a different placeholder like :teamId, add a second additive tuple with the same fromPath and resource.

Why does @ApiProperty fail with a circular dependency error under tsx?▼

The circular dependency error is misleading; the real cause is esbuild not emitting design:type reflect-metadata under tsx. Fix it by declaring explicit type: on every @ApiProperty, using lazy resolvers like type: () => [TreeDto] for self-referencing DTOs.

When should I use @BodyResourceRefs instead of @ResourceCaptures?▼

Use @ResourceCaptures when your response produces an ID consumed by sibling route path params. Use @BodyResourceRefs when a request body field references a foreign record that must already exist, so the probe pre-creates it via the declared creator endpoint.

Why does NestJS constructor injection return undefined under tsx?▼

esbuild does not emit design:paramtypes metadata, so NestJS cannot resolve constructor injection targets. Decorate every constructor parameter of type Service, Strategy, or Repository with @Inject(Token) to make injection explicit.

Can I silence probe failures by adding routes to overlay.ignore?▼

No. Adding routes your code introduced to overlay.ignore[] is a banned anti-pattern enforced by hooks. The ignore list is only for framework internals; fix the missing declaration the DIAG names instead.

What does CHAIN_AUTH_UNRESOLVABLE mean in probe output?▼

It means a child endpoint declares x-requires-parent-role but the parent's create endpoint does not grant a covering role via x-on-create-grant-role. Declare both extensions so the chain emitter can thread auth, or the chain flow is not emitted.