51 lines
2.5 KiB
JSON
51 lines
2.5 KiB
JSON
{
|
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
"type": "object",
|
|
"required": ["surfaces", "risk", "required-capabilities"],
|
|
"properties": {
|
|
"surfaces": {
|
|
"type": "object",
|
|
"required": ["ui", "public-api", "persistence", "infrastructure"],
|
|
"properties": {
|
|
"ui": {"type": "boolean"}, "public-api": {"type": "boolean"},
|
|
"persistence": {"type": "boolean"}, "infrastructure": {"type": "boolean"}
|
|
}
|
|
},
|
|
"risk": {
|
|
"type": "object",
|
|
"required": ["security-bearing", "data-migration", "external-side-effect", "risk-level", "reversibility", "blast-radius", "privacy", "regulatory", "slo-impact"],
|
|
"properties": {
|
|
"security-bearing": {"type": "boolean"}, "data-migration": {"type": "boolean"},
|
|
"external-side-effect": {"type": "boolean"},
|
|
"risk-level": {"enum": ["Low", "Med", "High", "Critical"]},
|
|
"reversibility": {"enum": ["two-way-door", "one-way-door"]},
|
|
"blast-radius": {"enum": ["single-role", "cross-team", "production-customer-revenue"]},
|
|
"privacy": {"type": "boolean"}, "regulatory": {"type": "boolean"},
|
|
"slo-impact": {"type": "boolean"}, "pii": {"type": "boolean"},
|
|
"data-residency": {"type": "boolean"}, "customer-impact": {"type": "boolean"},
|
|
"revenue-impact": {"type": "boolean"}
|
|
}
|
|
},
|
|
"required-capabilities": {"type": "array", "minItems": 1, "items": {"type": "string"}},
|
|
"surface-archetype": {
|
|
"enum": ["internal-tool", "public-website", "product-application", "interactive-learning", "developer-platform", "commerce", "content-publication", "hybrid"],
|
|
"description": "UI 경험의 구조적 유형. public-website와 interactive-learning은 experience-foundation 선행 게이트를 강제한다."
|
|
},
|
|
"experience-change": {
|
|
"enum": ["none", "incremental", "new-product", "major-redesign"],
|
|
"description": "new-product 또는 major-redesign는 experience-foundation 선행 게이트를 강제한다."
|
|
},
|
|
"product-feature": {"type": "boolean"},
|
|
"context-scope": {
|
|
"enum": ["project", "company"],
|
|
"description": "project permits scoped delivery against an existing repository without asserting company facts; company requires provisional/operating company context."
|
|
}
|
|
},
|
|
"allOf": [
|
|
{
|
|
"if": {"properties": {"context-scope": {"const": "project"}}, "required": ["context-scope"]},
|
|
"then": {"properties": {"product-feature": {"const": true}}, "required": ["product-feature"]}
|
|
}
|
|
]
|
|
}
|