zod-contract-gate
Defines Zod runtime schema validation patterns, interface boundaries, and contract safety rules for multi-agent architecture, IPC channels, and API endpoints.
- License 许可
- AGPL-3.0
- 最近更新
- 2026-11-14
- Stars
- ★ 25
- Forks
- 9
01 前言 Front Matter
- name
- zod-contract-gate
- owner
- contract-gate-engineer
- scope
- common
- status
- active
- version
- 1.0.3
- metadata
- { "type": "contract-safety", "triggers": [ "zod-contract-gate", "/zod-contract-gate", "zod contract validation", "schema contract gate", "runtime schema validation" ] }
- description
- Defines Zod runtime schema validation patterns, interface boundaries, and contract safety rules for multi-agent architecture, IPC channels, and API endpoints.
- l2_propagate
- true
- last_reviewed
- 1794441600000
- prerequisites
- Bun runtime, Zod library (^3.25 || ^4.0)
03 SKILL.md 正文
Skill: zod-contract-gate
Context
In multi-agent architectures and complex TypeScript applications, untyped or loosely typed data boundaries across IPC channels, agent payloads, configuration inputs, and internal APIs can cause silent data corruption or downstream runtime failures.
zod-contract-gate provides the standard specification and execution rules for enforcing runtime contract safety using Zod schemas at all boundary points.
Core Contract Safety Principles
- Boundary Validation First: Validate every incoming payload, configuration object, IPC message, and API request at the system boundary before processing.
- Explicit Schema Definitions: Define Zod schemas alongside TypeScript type definitions (
type T = z.infer<typeof TSchema>). - No Silent Swallowing: If validation fails, throw or return structured
ZodErrordiagnostics. Never silently substitute partial or corrupted default values. - Strict Schema Constraints: Use strict objects (
z.object({...}).strict()), non-empty strings, bounded arrays, and discriminated unions to enforce contract constraints.
Contract Safety Boundaries
| Boundary Type | Enforcement Target | Validation Mechanism | Fail Behavior |
|---|---|---|---|
| Agent IPC Messages | Inter-agent payloads & task parameters | AgentPayloadSchema.safeParse() |
Reject message with [CONTRACT_ERROR] diagnostic |
| API Endpoints | Request parameters & response DTOs | z.object({...}).parse() |
Exit with exit code 1 or return 400 Bad Request |
| Configuration Files | JSON / YAML settings & manifests |
ConfigSchema.parse() |
Halt initialization with field-level schema errors |
| CLI Arguments | Command options & environment variables | CLIOptionsSchema.safeParse() |
Print usage & exit code 1 |
Canonical Implementation Patterns
Pattern 1: Inter-Agent Payload Gate
import { z } from "zod";
export const AgentTaskPayloadSchema = z.object({
taskId: z.string().uuid(),
agentRole: z.enum(["pm", "architect", "code-writer", "designer", "security-monitor", "stack-setup", "test-runner"]),
action: z.string().min(1),
parameters: z.record(z.unknown()),
contextFiles: z.array(z.string()).default([]),
}).strict();
export type AgentTaskPayload = z.infer<typeof AgentTaskPayloadSchema>;
export function validateAgentPayload(input: unknown): AgentTaskPayload {
const result = AgentTaskPayloadSchema.safeParse(input);
if (!result.success) {
const issues = result.error.issues.map((i) => `${i.path.join(".")}: ${i.message}`).join("; ");
throw new Error(`[CONTRACT_ERROR] Invalid agent task payload: ${issues}`);
}
return result.data;
}
Pattern 2: API Contract Request/Response Gate
import { z } from "zod";
export const ServiceTicketRequestSchema = z.object({
ticketId: z.string().min(1),
serviceName: z.string().min(1),
priority: z.enum(["low", "medium", "high", "critical"]),
payload: z.object({
repoUrl: z.string().url(),
branch: z.string().default("main"),
}),
});
export type ServiceTicketRequest = z.infer<typeof ServiceTicketRequestSchema>;
export function processServiceTicket(rawRequest: unknown): ServiceTicketRequest {
const parsed = ServiceTicketRequestSchema.parse(rawRequest);
return parsed;
}
Pattern 3: Discriminated Union for State Transitions
import { z } from "zod";
export const EventSchema = z.discriminatedUnion("type", [
z.object({
type: z.literal("TASK_STARTED"),
taskId: z.string(),
timestamp: z.number(),
}),
z.object({
type: z.literal("TASK_COMPLETED"),
taskId: z.string(),
resultSummary: z.string(),
exitCode: z.number(),
}),
z.object({
type: z.literal("TASK_FAILED"),
taskId: z.string(),
errorMessage: z.string(),
}),
]);
export type SystemEvent = z.infer<typeof EventSchema>;
Quality Gate Checklist
Before completing feature implementation or submitting a pull request, verify:
- [ ] All exported interfaces and API parameters have corresponding Zod runtime schemas.
- [ ] No
anyor untypedunknowndata is passed through boundary functions without Zod parsing. - [ ] Error messages output precise Zod validation issues without truncating or swallowing stack trace diagnostics.
- [ ] Unit tests cover both valid payload parsing and expected validation error throwing for invalid schema inputs.
04 同仓库更多 Skills
discovery
暂无简介
x
暂无简介
root-skill
暂无简介
update-bun-packages
Scans, updates, and upgrades Bun dependencies and packages across the AI workspace (L0) or standalone project (L2/L3) while ensuring lockfile consistency, package.json version bumps, and security compliance. Use when: updating bun dependencies, upgrading packages to @latest, checking outdated packages in workspace or templates.
ui-ux-design-intelligence
Provides comprehensive UI/UX design capabilities including design system creation, component design, visual hierarchy, and user-centered design principles. Use when: building design systems, creating visual designs, designing UI components, or establishing design specifications.
translate
Translation helper for README and documentation files with diff preview and guidance