# Reflection: DDL CONSTRAINT Leakage into TypeScript Interfaces

> Date: 2026-06-05 | Severity: P0 | Recurrence: 1

## Context
Backend Builder Agent (SF-04) — `schema.ts` 生成时 DDL PRIMARY KEY / FOREIGN KEY / CONSTRAINT 行被当作数据列，泄露进 TypeScript interface 定义。

Example: `"PRIMARY KEY (id)"` → parsed as column `PRIMARY` with type `KEY`, `FOREIGN KEY (user_id) REFERENCES users(id)` → parsed as column `FOREIGN` etc.

## Root Cause
DDL parser 没有区分 "column definition" 行和 "constraint" 行。`CREATE TABLE` 语句中的 CONSTRAINT 子句以特殊关键字开头（PRIMARY KEY, FOREIGN KEY, UNIQUE, CHECK），不应被解析为列定义。

## Fix
Added `isConstraintLine()` check before parsing each line as a column. Lines starting with `PRIMARY KEY`, `FOREIGN KEY`, `UNIQUE (`, `CHECK (` are skipped in column parsing.

## Pattern Class
**DDL-to-Code Mapping Error** — SQL DDL 的多层结构（column/constraint/index）被扁平化为单一映射时丢失语义。

## Future Trigger
- Any SQL schema → code generation
- Any DDL parser
- Any ORM code generator

## Checklist
- [ ] DDL 解析器必须有 column / constraint / index 三层分离
- [ ] Constraint 行识别：PRIMARY KEY, FOREIGN KEY, UNIQUE (, CHECK (
- [ ] 生成后验证：interface 字段数 ≤ 表列数（不含约束行）
- [ ] 跑 benchmark 验证所有领域 schema 生成正确

## Recurrence Count
1
