init: company-haness 설계
This commit is contained in:
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"type": "object",
|
||||
"required": ["basis-artifact-id", "basis-artifact-sha256", "criteria"],
|
||||
"properties": {
|
||||
"basis-artifact-id": {"type": "string", "minLength": 1},
|
||||
"basis-artifact-sha256": {"type": "string", "pattern": "^[0-9a-f]{64}$"},
|
||||
"criteria": {
|
||||
"type": "array", "minItems": 1,
|
||||
"items": {
|
||||
"type": "object",
|
||||
"required": ["criterion-id", "preconditions", "input", "expected-result", "risk-level", "verification-method"],
|
||||
"properties": {
|
||||
"criterion-id": {"type": "string", "minLength": 1},
|
||||
"preconditions": {"type": "array"},
|
||||
"input": {"type": "object"},
|
||||
"expected-result": {"type": "string", "minLength": 1},
|
||||
"risk-level": {"enum": ["Low", "Med", "High", "Critical"]},
|
||||
"verification-method": {"enum": ["automated-test", "experiment", "manual-review", "inspection"]}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,65 @@
|
||||
{
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"$id": "acceptance-event.schema.json",
|
||||
"title": "acceptance / supersession event (P1-G #14)",
|
||||
"description": "append-only 원장 <state_dir>/acceptance-events.jsonl 의 한 줄(JSON). 리포트는 불변 스냅샷이고, 리뷰 결정(수락/변경요청/차단)과 대체(supersede)는 리포트를 수정하는 대신 이 이벤트로 append 된다. acceptance_log.py 가 기록/질의한다. additionalProperties 허용(향후 확장).",
|
||||
"type": "object",
|
||||
"required": ["acceptance-event-id", "report-id", "decision", "effective-at"],
|
||||
"properties": {
|
||||
"acceptance-event-id": {
|
||||
"type": "string",
|
||||
"description": "이벤트 고유 id (예: ae-<UTCstamp>-<hex>)."
|
||||
},
|
||||
"report-id": {
|
||||
"type": "string",
|
||||
"description": "이 결정의 대상 report-id(불변 스냅샷)."
|
||||
},
|
||||
"decision": {
|
||||
"type": "string",
|
||||
"enum": ["accepted", "changes-requested", "blocked"],
|
||||
"description": "리뷰 결정. review-output 이 emit 한다."
|
||||
},
|
||||
"accepted-report-id": {
|
||||
"type": "string",
|
||||
"description": "decision=accepted 일 때 수락된 report-id(기본 = report-id)."
|
||||
},
|
||||
"rejected-report-id": {
|
||||
"type": "string",
|
||||
"description": "decision=changes-requested|blocked 일 때 거부된 report-id(기본 = report-id)."
|
||||
},
|
||||
"supersedes-report-id": {
|
||||
"type": "string",
|
||||
"description": "이 결정이 대체하는 이전 report-id(계보). report_tags 가 이 대상들을 기본 제외한다."
|
||||
},
|
||||
"workflow-id": {
|
||||
"type": "string",
|
||||
"description": "질의 필터용(‘이 workflow 의 최신 수락 리포트?’)."
|
||||
},
|
||||
"role-id": {
|
||||
"type": "string",
|
||||
"description": "질의 필터용(‘이 role 의 최신 수락 리포트?’)."
|
||||
},
|
||||
"effective-at": {
|
||||
"type": "string",
|
||||
"description": "이벤트 발효 UTC 시각(예: 2026-07-10T12:00:00Z)."
|
||||
},
|
||||
"report-sha256": {
|
||||
"type": "string",
|
||||
"description": "선택. 수락 대상 report 파일의 sha256 — venture-decision human-gate 위조·재사용 방지 바인딩(P1 §9.4)."
|
||||
},
|
||||
"artifact-sha256": {
|
||||
"type": "string",
|
||||
"description": "결정 대상 immutable artifact revision의 sha256."
|
||||
},
|
||||
"artifact-kind": {"type": "string"},
|
||||
"producer-role-id": {"type": "string"},
|
||||
"reviewer": {
|
||||
"type": "object",
|
||||
"required": ["actor-id", "role-id"]
|
||||
},
|
||||
"authorization": {
|
||||
"type": "object",
|
||||
"required": ["expected-reviewer-capability", "producer-role-id", "self-review"]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"$schema": "http://json-schema.org/draft-07/schema#", "type": "object",
|
||||
"required": ["basis-artifact-id", "basis-artifact-sha256", "summary", "protocol", "version", "operations", "schemas", "errors", "compatibility"],
|
||||
"properties": {
|
||||
"basis-artifact-id": {"type": "string", "minLength": 1}, "basis-artifact-sha256": {"type": "string", "pattern": "^[0-9a-f]{64}$"},
|
||||
"summary": {"type": "string", "minLength": 1}, "protocol": {"type": "string", "minLength": 1}, "version": {"type": "string", "minLength": 1},
|
||||
"operations": {"type": "array", "minItems": 1}, "schemas": {"type": "object", "minProperties": 1},
|
||||
"errors": {"type": "array", "minItems": 1}, "compatibility": {"type": "object", "minProperties": 1}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"$schema": "http://json-schema.org/draft-07/schema#", "type": "object",
|
||||
"required": ["basis-artifact-id", "basis-artifact-sha256", "summary", "resources", "auth-model", "error-model", "versioning", "compatibility-assumptions"],
|
||||
"properties": {
|
||||
"basis-artifact-id": {"type": "string", "minLength": 1}, "basis-artifact-sha256": {"type": "string", "pattern": "^[0-9a-f]{64}$"},
|
||||
"summary": {"type": "string", "minLength": 1}, "resources": {"type": "array", "minItems": 1},
|
||||
"auth-model": {"type": "object", "minProperties": 1}, "error-model": {"type": "object", "minProperties": 1},
|
||||
"versioning": {"type": "object", "minProperties": 1}, "compatibility-assumptions": {"type": "array", "minItems": 1}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"$schema": "http://json-schema.org/draft-07/schema#", "type": "object",
|
||||
"required": ["parent-workflow-id", "child-workflow-id", "product-decision-id", "direction-input-brief-sha256", "selected-direction-ref", "selected-direction-sha256", "winner-prototype-ref", "winner-prototype-sha256", "visual-thesis", "interaction-model", "design-token-contract", "acceptance-receipt-ref"],
|
||||
"properties": {
|
||||
"parent-workflow-id": {"type": "string", "minLength": 1}, "child-workflow-id": {"type": "string", "minLength": 1},
|
||||
"product-decision-id": {"type": "string", "minLength": 1}, "direction-input-brief-sha256": {"type": "string", "pattern": "^[0-9a-f]{64}$"},
|
||||
"selected-direction-ref": {"type": "string", "minLength": 1}, "selected-direction-sha256": {"type": "string", "pattern": "^[0-9a-f]{64}$"},
|
||||
"winner-prototype-ref": {"type": "string", "minLength": 1}, "winner-prototype-sha256": {"type": "string", "pattern": "^[0-9a-f]{64}$"},
|
||||
"visual-thesis": {"type": "string", "minLength": 1}, "interaction-model": {"type": "object", "minProperties": 1},
|
||||
"design-token-contract": {"type": "object", "minProperties": 1}, "acceptance-receipt-ref": {"type": "string", "minLength": 1}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"type": "object",
|
||||
"required": ["source-contract", "schema-contract", "processing-semantics", "correctness", "performance", "recovery-tests", "lineage", "evidence-receipt-ids"],
|
||||
"properties": {
|
||||
"source-contract": {"type": "object", "required": ["owner", "version", "freshness-sla"]},
|
||||
"schema-contract": {"type": "object", "required": ["grain", "primary-key", "schema-version", "evolution-policy"]},
|
||||
"processing-semantics": {"type": "object", "required": ["delivery", "event-time", "watermark", "late-data-policy", "checkpointing"]},
|
||||
"correctness": {"type": "object", "required": ["dedup", "reconciliation", "replay"]},
|
||||
"performance": {"type": "object", "required": ["throughput", "latency", "cost-baseline"]},
|
||||
"recovery-tests": {"type": "array", "minItems": 1},
|
||||
"lineage": {"type": "array", "minItems": 1},
|
||||
"evidence-receipt-ids": {"type": "array", "minItems": 1, "items": {"type": "string"}}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"type": "object",
|
||||
"required": ["blocker", "resume-condition"],
|
||||
"properties": {"blocker": {}, "resume-condition": {}}
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"$id": "blocked.schema.json",
|
||||
"title": "blocked report — delta over report.schema.json",
|
||||
"description": "블로커 산출물. 무엇이 막았는지 blocker를 명시한다(사람 게이트/외부 의존 등).",
|
||||
"type": "object",
|
||||
"required": ["blocker", "resume-condition"],
|
||||
"properties": {
|
||||
"blocker": {},
|
||||
"resume-condition": {}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"$id": "build.schema.json",
|
||||
"title": "build report — delta over report.schema.json",
|
||||
"description": "구현 산출물. 실제 코드/구성 등 실물 산출물(primary-artifacts, report와 분리·실존)과 수행한 검증(verification-performed)을 명시한다. 보고서 몇 줄로 실물 코드를 대체하지 않는다(#9).",
|
||||
"type": "object",
|
||||
"required": ["primary-artifacts", "verification-performed"],
|
||||
"properties": {
|
||||
"primary-artifacts": {"type": "array"},
|
||||
"verification-performed": {},
|
||||
"implementation-summary": {"type": "string"}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"$schema": "http://json-schema.org/draft-07/schema#", "type": "object",
|
||||
"required": ["status", "company", "products", "operating-constraints", "assumptions", "evidence-refs"],
|
||||
"properties": {
|
||||
"status": {"enum": ["provisional", "operating"]}, "company": {"type": "object", "minProperties": 1},
|
||||
"products": {"type": "array", "minItems": 1}, "operating-constraints": {"type": "array"},
|
||||
"assumptions": {"type": "array"}, "evidence-refs": {"type": "array", "minItems": 1}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"$schema": "http://json-schema.org/draft-07/schema#", "type": "object",
|
||||
"required": ["left", "right", "dimensions", "findings", "verdict", "reviewer-role-id"],
|
||||
"properties": {
|
||||
"left": {"type": "object", "required": ["artifact-kind", "artifact-id", "artifact-sha256"]},
|
||||
"right": {"type": "object", "required": ["artifact-kind", "artifact-id", "artifact-sha256"]},
|
||||
"dimensions": {"type": "array", "minItems": 1}, "findings": {"type": "array"},
|
||||
"verdict": {"enum": ["Passed", "Failed"]}, "reviewer-role-id": {"type": "string", "minLength": 1}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,57 @@
|
||||
{
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"type": "object",
|
||||
"required": ["parent-workflow-id", "product-decision-id", "category", "target-job", "surface-archetype", "references", "synthesis", "no-copy-attestation"],
|
||||
"properties": {
|
||||
"parent-workflow-id": {"type": "string", "minLength": 1},
|
||||
"product-decision-id": {"type": "string", "minLength": 1},
|
||||
"category": {"type": "string", "minLength": 1},
|
||||
"target-job": {"type": "string", "minLength": 1},
|
||||
"surface-archetype": {"type": "string", "minLength": 1},
|
||||
"references": {
|
||||
"type": "array",
|
||||
"minItems": 5,
|
||||
"items": {
|
||||
"type": "object",
|
||||
"required": ["name", "class", "source-url", "captured-at", "screenshots", "flows", "information-architecture", "interaction-patterns", "content-strategy", "strengths", "weaknesses"],
|
||||
"properties": {
|
||||
"name": {"type": "string", "minLength": 1},
|
||||
"class": {"enum": ["direct", "adjacent", "substitute"]},
|
||||
"source-url": {"type": "string", "pattern": "^https?://"},
|
||||
"captured-at": {"type": "string", "format": "date-time"},
|
||||
"screenshots": {
|
||||
"type": "object",
|
||||
"required": ["desktop", "mobile"],
|
||||
"properties": {
|
||||
"desktop": {"$ref": "#/definitions/screenshotList"},
|
||||
"mobile": {"$ref": "#/definitions/screenshotList"}
|
||||
}
|
||||
},
|
||||
"flows": {"type": "array", "minItems": 1, "items": {"type": "object", "required": ["name", "steps"], "properties": {"name": {"type": "string", "minLength": 1}, "steps": {"type": "array", "minItems": 1}}}},
|
||||
"information-architecture": {"type": "object", "minProperties": 1},
|
||||
"interaction-patterns": {"type": "array", "minItems": 1},
|
||||
"content-strategy": {"type": "object", "minProperties": 1},
|
||||
"strengths": {"$ref": "#/definitions/evidenceClaims"},
|
||||
"weaknesses": {"$ref": "#/definitions/evidenceClaims"}
|
||||
}
|
||||
}
|
||||
},
|
||||
"synthesis": {
|
||||
"type": "object",
|
||||
"required": ["table-stakes", "adopt", "adapt", "avoid", "differentiation-opportunities", "unresolved-questions"],
|
||||
"properties": {
|
||||
"table-stakes": {"type": "array", "minItems": 1},
|
||||
"adopt": {"type": "array"},
|
||||
"adapt": {"type": "array"},
|
||||
"avoid": {"type": "array", "minItems": 1},
|
||||
"differentiation-opportunities": {"type": "array", "minItems": 1},
|
||||
"unresolved-questions": {"type": "array"}
|
||||
}
|
||||
},
|
||||
"no-copy-attestation": {"const": true}
|
||||
},
|
||||
"definitions": {
|
||||
"screenshotList": {"type": "array", "minItems": 1, "items": {"type": "object", "required": ["path", "sha256"], "properties": {"path": {"type": "string", "minLength": 1}, "sha256": {"type": "string", "pattern": "^[0-9a-f]{64}$"}}}},
|
||||
"evidenceClaims": {"type": "array", "minItems": 1, "items": {"type": "object", "required": ["claim", "evidence-refs"], "properties": {"claim": {"type": "string", "minLength": 1}, "evidence-refs": {"type": "array", "minItems": 1}}}}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
{
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"type": "object",
|
||||
"required": [
|
||||
"assigned-lens", "producer-run-id", "context-package-ref", "context-package-sha256",
|
||||
"competitors-and-substitutes", "current-alternatives", "strengths-weaknesses",
|
||||
"differentiation-hypotheses", "evidence-urls"
|
||||
],
|
||||
"properties": {
|
||||
"assigned-lens": {"const": "LENS-REVENUE"},
|
||||
"producer-run-id": {"type": "string", "minLength": 1},
|
||||
"context-package-ref": {"type": "string", "minLength": 1},
|
||||
"context-package-sha256": {"type": "string", "pattern": "^[0-9a-f]{64}$"},
|
||||
"competitors-and-substitutes": {
|
||||
"type": "array",
|
||||
"minItems": 2,
|
||||
"items": {
|
||||
"type": "object",
|
||||
"required": ["name", "type", "evidence-urls"],
|
||||
"properties": {
|
||||
"name": {"type": "string", "minLength": 1},
|
||||
"type": {"enum": ["competitor", "substitute"]},
|
||||
"evidence-urls": {"type": "array", "minItems": 1, "items": {"type": "string", "pattern": "^https?://"}}
|
||||
}
|
||||
}
|
||||
},
|
||||
"current-alternatives": {"type": "array", "minItems": 1},
|
||||
"strengths-weaknesses": {
|
||||
"type": "array",
|
||||
"minItems": 1,
|
||||
"items": {
|
||||
"type": "object",
|
||||
"required": ["subject", "strengths", "weaknesses"],
|
||||
"properties": {
|
||||
"subject": {"type": "string", "minLength": 1},
|
||||
"strengths": {"type": "array", "minItems": 1},
|
||||
"weaknesses": {"type": "array", "minItems": 1}
|
||||
}
|
||||
}
|
||||
},
|
||||
"differentiation-hypotheses": {"type": "array", "minItems": 1},
|
||||
"evidence-urls": {
|
||||
"type": "array", "minItems": 2, "uniqueItems": true,
|
||||
"items": {"type": "string", "pattern": "^https?://"}
|
||||
}
|
||||
},
|
||||
"allOf": [
|
||||
{"properties": {"competitors-and-substitutes": {"contains": {"type": "object", "properties": {"type": {"const": "competitor"}}, "required": ["type"]}}}},
|
||||
{"properties": {"competitors-and-substitutes": {"contains": {"type": "object", "properties": {"type": {"const": "substitute"}}, "required": ["type"]}}}}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
{
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"type": "object",
|
||||
"required": ["summary", "source-revision", "primary-artifacts", "acceptance-criteria-coverage", "verification-receipt-ids", "remaining-risks"],
|
||||
"properties": {
|
||||
"summary": {"type": "string", "minLength": 1},
|
||||
"source-revision": {
|
||||
"type": "object",
|
||||
"required": ["kind", "sha256"],
|
||||
"properties": {
|
||||
"kind": {"enum": ["git-tree", "workspace-tree", "source-bundle"]},
|
||||
"sha256": {"type": "string", "pattern": "^[0-9a-f]{64}$"}
|
||||
}
|
||||
},
|
||||
"primary-artifacts": {
|
||||
"type": "array", "minItems": 1,
|
||||
"items": {
|
||||
"type": "object",
|
||||
"required": ["path", "kind", "sha256"],
|
||||
"properties": {
|
||||
"path": {"type": "string", "minLength": 1},
|
||||
"kind": {"type": "string", "minLength": 1},
|
||||
"sha256": {"type": "string", "pattern": "^[0-9a-f]{64}$"}
|
||||
}
|
||||
}
|
||||
},
|
||||
"acceptance-criteria-coverage": {
|
||||
"type": "array", "minItems": 1,
|
||||
"items": {
|
||||
"type": "object",
|
||||
"required": ["criterion-id", "status", "evidence-receipt-ids"],
|
||||
"properties": {
|
||||
"criterion-id": {"type": "string", "minLength": 1},
|
||||
"status": {"enum": ["Passed", "Failed", "NotApplicable"]},
|
||||
"evidence-receipt-ids": {"type": "array", "minItems": 1, "items": {"type": "string", "minLength": 1}}
|
||||
}
|
||||
}
|
||||
},
|
||||
"verification-receipt-ids": {
|
||||
"type": "array", "minItems": 1, "uniqueItems": true,
|
||||
"items": {"type": "string", "minLength": 1}
|
||||
},
|
||||
"remaining-risks": {"type": "array"}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"$id": "completion.schema.json",
|
||||
"title": "completion report — delta over report.schema.json",
|
||||
"description": "완료 산출물. 실물 산출물(primary-artifacts, report와 분리·실존)과 수행한 검증(verification-performed)을 명시한다. output-artifacts는 사람이 읽는 요약 목록.",
|
||||
"type": "object",
|
||||
"required": ["primary-artifacts", "verification-performed"],
|
||||
"properties": {
|
||||
"primary-artifacts": {"type": "array"},
|
||||
"output-artifacts": {"type": "array"},
|
||||
"verification-performed": {}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"$schema": "http://json-schema.org/draft-07/schema#", "type": "object",
|
||||
"required": ["basis-artifact-id", "basis-artifact-sha256", "datasets", "schemas", "ownership", "quality-rules", "privacy", "versioning"],
|
||||
"properties": {
|
||||
"basis-artifact-id": {"type": "string", "minLength": 1}, "basis-artifact-sha256": {"type": "string", "pattern": "^[0-9a-f]{64}$"},
|
||||
"datasets": {"type": "array", "minItems": 1}, "schemas": {"type": "object", "minProperties": 1}, "ownership": {"type": "object", "minProperties": 1},
|
||||
"quality-rules": {"type": "array", "minItems": 1}, "privacy": {"type": "object", "minProperties": 1}, "versioning": {"type": "object", "minProperties": 1}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
{
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"type": "object",
|
||||
"required": ["basis-artifact-id", "basis-artifact-sha256", "conceptual", "logical", "physical", "ownership", "classification", "lineage", "retention", "compatibility", "data-quality-thresholds"],
|
||||
"properties": {
|
||||
"basis-artifact-id": {"type": "string", "minLength": 1},
|
||||
"basis-artifact-sha256": {"type": "string", "pattern": "^[0-9a-f]{64}$"},
|
||||
"conceptual": {"type": "object", "minProperties": 1},
|
||||
"logical": {"type": "object", "minProperties": 1},
|
||||
"physical": {"type": "object", "minProperties": 1},
|
||||
"ownership": {"type": "object", "minProperties": 1},
|
||||
"classification": {"type": "object", "required": ["pii", "sensitivity"], "properties": {"pii": {"type": "boolean"}, "sensitivity": {"enum": ["public", "internal", "confidential", "restricted"]}}},
|
||||
"lineage": {"type": "array", "minItems": 1},
|
||||
"retention": {"type": "object", "required": ["policy", "duration"]},
|
||||
"compatibility": {"type": "object", "required": ["schema-version", "evolution-policy"]},
|
||||
"data-quality-thresholds": {"type": "array", "minItems": 1}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"type": "object",
|
||||
"required": ["source-contract", "schema-contract", "correctness", "time-semantics", "lineage", "operations", "evidence-receipt-ids"],
|
||||
"properties": {
|
||||
"source-contract": {"type": "object", "required": ["owner", "version", "freshness-sla"]},
|
||||
"schema-contract": {"type": "object", "required": ["grain", "primary-key", "schema-version", "evolution-policy", "null-policy"]},
|
||||
"correctness": {"type": "object", "required": ["dedup-key", "idempotency", "reconciliation", "quality-thresholds"]},
|
||||
"time-semantics": {"type": "object", "required": ["event-time", "timezone", "late-data-policy", "backfill-policy"]},
|
||||
"lineage": {"type": "array", "minItems": 1},
|
||||
"operations": {"type": "object", "required": ["rollback", "retry", "alerting", "rpo", "rto"]},
|
||||
"evidence-receipt-ids": {"type": "array", "minItems": 1, "items": {"type": "string"}}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"type": "object",
|
||||
"required": ["mode", "tier", "candidate-families"],
|
||||
"properties": {
|
||||
"mode": {"enum": ["divergent", "converge"]},
|
||||
"tier": {"enum": ["light", "standard", "heavy"]},
|
||||
"candidate-families": {
|
||||
"type": "array",
|
||||
"minItems": 1,
|
||||
"uniqueItems": true,
|
||||
"items": {"type": "string", "pattern": "^FAM-[A-Z0-9-]+$"}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"$id": "decision.schema.json",
|
||||
"title": "decision report — delta over report.schema.json",
|
||||
"description": "의사결정 산출물. 권고안(recommendation)을 반드시 명시한다. 로더가 공통 스키마의 required/properties에 이 델타를 병합한다.",
|
||||
"type": "object",
|
||||
"required": ["recommendation"],
|
||||
"properties": {
|
||||
"recommendation": {"type": "string"},
|
||||
"decision-question": {"type": "string"},
|
||||
"options": {"type": "array"}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"type": "object",
|
||||
"required": ["engine", "screen-refs", "editable-source", "preview-url", "screenshots", "design-system-ref", "source-provenance", "verification"],
|
||||
"properties": {
|
||||
"engine": {"enum": ["local-html", "stitch", "figma", "v0", "framer"]},
|
||||
"screen-refs": {"type": "array", "minItems": 1},
|
||||
"editable-source": {"type": "object", "required": ["ref", "format"]},
|
||||
"preview-url": {"type": ["string", "null"]},
|
||||
"screenshots": {"type": "array", "minItems": 1},
|
||||
"design-system-ref": {"type": "object", "required": ["release-id", "release-ref", "release-sha256"]},
|
||||
"source-provenance": {"type": "array", "minItems": 1},
|
||||
"verification": {"type": "object", "required": ["status", "checks"], "properties": {"status": {"enum": ["Passed", "Failed"]}, "checks": {"type": "array", "minItems": 1}}}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"type": "object",
|
||||
"required": ["direction-cycle-id", "target-prototype-id", "target-prototype-sha256", "reviewer-role-id", "reviewer-run-id", "lens", "verdict", "findings"],
|
||||
"properties": {
|
||||
"direction-cycle-id": {"type": "string", "minLength": 1},
|
||||
"target-prototype-id": {"type": "string", "minLength": 1},
|
||||
"target-prototype-sha256": {"type": "string", "pattern": "^[0-9a-f]{64}$"},
|
||||
"reviewer-role-id": {"type": "string", "minLength": 1},
|
||||
"reviewer-run-id": {"type": "string", "minLength": 1},
|
||||
"lens": {"enum": ["product-fit", "usability", "distinctiveness", "visual-craft", "systematizability", "market-memorability", "implementability"]},
|
||||
"verdict": {"enum": ["pass", "revise", "blocking"]},
|
||||
"findings": {"type": "array"}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
{
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"type": "object",
|
||||
"required": ["direction-cycle-id", "target-prototype-id", "target-prototype-sha256", "reviews", "synthesis"],
|
||||
"properties": {
|
||||
"direction-cycle-id": {"type": "string", "minLength": 1},
|
||||
"target-prototype-id": {"type": "string", "minLength": 1},
|
||||
"target-prototype-sha256": {"type": "string", "pattern": "^[0-9a-f]{64}$"},
|
||||
"reviews": {
|
||||
"type": "array", "minItems": 7, "maxItems": 7,
|
||||
"items": {
|
||||
"type": "object",
|
||||
"required": ["report-id", "report-ref", "report-sha256", "lens", "reviewer-role-id", "reviewer-run-id", "verdict"]
|
||||
}
|
||||
},
|
||||
"synthesis": {
|
||||
"type": "object",
|
||||
"required": ["verdict", "role-id", "unresolved-dissent"],
|
||||
"properties": {
|
||||
"verdict": {"enum": ["pass", "minor-revision", "concept-flaw"]},
|
||||
"role-id": {"const": "DES-DIRECTOR"},
|
||||
"unresolved-dissent": {"type": "array"}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"type": "object",
|
||||
"required": ["release-id", "version", "state", "source-ref", "source-sha256", "principles-ref", "taste-profile-ref", "token-source-ref", "component-ids", "pattern-ids", "page-archetype-ids", "generated-artifacts"],
|
||||
"properties": {
|
||||
"release-id": {"type": "string", "minLength": 1},
|
||||
"version": {"type": "string", "pattern": "^[0-9]+\\.[0-9]+\\.[0-9]+$"},
|
||||
"state": {"enum": ["experimental", "candidate", "stable", "deprecated"]},
|
||||
"source-ref": {"type": "string", "minLength": 1},
|
||||
"source-sha256": {"type": "string", "pattern": "^[0-9a-f]{64}$"},
|
||||
"principles-ref": {"type": "string", "minLength": 1},
|
||||
"taste-profile-ref": {"type": "string", "minLength": 1},
|
||||
"token-source-ref": {"type": "string", "minLength": 1},
|
||||
"component-ids": {"type": "array"},
|
||||
"pattern-ids": {"type": "array"},
|
||||
"page-archetype-ids": {"type": "array"},
|
||||
"generated-artifacts": {"type": "array", "minItems": 5}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"$id": "design.schema.json",
|
||||
"title": "design report — delta over report.schema.json",
|
||||
"description": "설계 산출물. 내린 설계 결정(decisions)과 실물 설계 산출물(primary-artifacts: RFC/ADR·data-model·threat-model·api-contract 등, report와 분리·실존)을 명시한다.",
|
||||
"type": "object",
|
||||
"required": ["decisions", "primary-artifacts"],
|
||||
"properties": {
|
||||
"decisions": {},
|
||||
"primary-artifacts": {"type": "array"},
|
||||
"design-brief": {}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"type": "object",
|
||||
"required": ["recommendation", "selected-option-id", "evaluation-criteria", "option-evaluations", "tradeoffs", "dissent", "kill-criteria", "revisit-conditions", "evidence-refs"],
|
||||
"properties": {
|
||||
"recommendation": {"type": "string", "minLength": 1},
|
||||
"selected-option-id": {"type": ["string", "number"]},
|
||||
"evaluation-criteria": {"type": "array", "minItems": 2, "items": {"type": "string", "minLength": 1}},
|
||||
"option-evaluations": {
|
||||
"type": "array", "minItems": 2,
|
||||
"items": {"type": "object", "required": ["option-id", "scores", "evidence-refs"],
|
||||
"properties": {"option-id": {"type": ["string", "number"]}, "scores": {"type": "object", "minProperties": 1},
|
||||
"evidence-refs": {"type": "array", "minItems": 1}}}
|
||||
},
|
||||
"tradeoffs": {"type": "array", "minItems": 1},
|
||||
"dissent": {"type": "array"},
|
||||
"kill-criteria": {"type": "array", "minItems": 1},
|
||||
"revisit-conditions": {"type": "array", "minItems": 1},
|
||||
"evidence-refs": {"type": "array", "minItems": 1}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
{
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"type": "object",
|
||||
"required": ["parent-workflow-id", "product-decision-id", "benchmark-ref", "benchmark-sha256", "strategy-ref", "strategy-sha256", "experience-thesis", "target-users", "jobs-to-be-done", "value-proposition", "differentiation", "content-model", "page-inventory", "navigation-model", "message-hierarchy", "task-flows", "state-matrix", "responsive-priorities", "accessibility-intent", "success-metrics"],
|
||||
"properties": {
|
||||
"parent-workflow-id": {"type": "string", "minLength": 1},
|
||||
"product-decision-id": {"type": "string", "minLength": 1},
|
||||
"benchmark-ref": {"type": "string", "minLength": 1},
|
||||
"benchmark-sha256": {"type": "string", "pattern": "^[0-9a-f]{64}$"},
|
||||
"strategy-ref": {"type": "string", "minLength": 1},
|
||||
"strategy-sha256": {"type": "string", "pattern": "^[0-9a-f]{64}$"},
|
||||
"experience-thesis": {"type": "string", "minLength": 1},
|
||||
"target-users": {"type": "array", "minItems": 1},
|
||||
"jobs-to-be-done": {"type": "array", "minItems": 1},
|
||||
"value-proposition": {"type": "string", "minLength": 1},
|
||||
"differentiation": {"type": "array", "minItems": 1},
|
||||
"content-model": {"type": "object", "minProperties": 1},
|
||||
"page-inventory": {"type": "array", "minItems": 1},
|
||||
"navigation-model": {"type": "object", "minProperties": 1},
|
||||
"message-hierarchy": {"type": "array", "minItems": 1},
|
||||
"task-flows": {"type": "array", "minItems": 1},
|
||||
"state-matrix": {"type": "object", "required": ["default", "loading", "empty", "error", "partial", "completed"]},
|
||||
"responsive-priorities": {"type": "array", "minItems": 1},
|
||||
"accessibility-intent": {"type": "object", "minProperties": 1},
|
||||
"success-metrics": {"type": "array", "minItems": 1}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"type": "object",
|
||||
"required": ["parent-workflow-id", "product-decision-id", "strategy-ref", "strategy-sha256", "operating-model", "content-operations", "support-and-recovery", "constraints", "risks", "mitigations", "verdict"],
|
||||
"properties": {
|
||||
"parent-workflow-id": {"type": "string", "minLength": 1},
|
||||
"product-decision-id": {"type": "string", "minLength": 1},
|
||||
"strategy-ref": {"type": "string", "minLength": 1},
|
||||
"strategy-sha256": {"type": "string", "pattern": "^[0-9a-f]{64}$"},
|
||||
"operating-model": {"type": "object", "minProperties": 1},
|
||||
"content-operations": {"type": "object", "minProperties": 1},
|
||||
"support-and-recovery": {"type": "object", "minProperties": 1},
|
||||
"constraints": {"type": "array", "minItems": 1},
|
||||
"risks": {"type": "array"},
|
||||
"mitigations": {"type": "array"},
|
||||
"verdict": {"enum": ["feasible", "revise", "blocked"]}
|
||||
},
|
||||
"additionalProperties": true
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"type": "object",
|
||||
"required": ["parent-workflow-id", "product-decision-id", "benchmark-ref", "benchmark-sha256", "experience-thesis", "target-users", "jobs-to-be-done", "value-proposition", "differentiation", "message-hierarchy", "success-metrics", "decision"],
|
||||
"properties": {
|
||||
"parent-workflow-id": {"type": "string", "minLength": 1},
|
||||
"product-decision-id": {"type": "string", "minLength": 1},
|
||||
"benchmark-ref": {"type": "string", "minLength": 1},
|
||||
"benchmark-sha256": {"type": "string", "pattern": "^[0-9a-f]{64}$"},
|
||||
"experience-thesis": {"type": "string", "minLength": 1},
|
||||
"target-users": {"type": "array", "minItems": 1},
|
||||
"jobs-to-be-done": {"type": "array", "minItems": 1},
|
||||
"value-proposition": {"type": "string", "minLength": 1},
|
||||
"differentiation": {"type": "array", "minItems": 1},
|
||||
"message-hierarchy": {"type": "array", "minItems": 1},
|
||||
"success-metrics": {"type": "array", "minItems": 1},
|
||||
"decision": {"enum": ["proceed", "revise-benchmark", "stop"]}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
{
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"type": "object",
|
||||
"required": ["parent-workflow-id", "product-decision-id", "strategy-ref", "strategy-sha256", "architecture-fit", "delivery-sustainability", "constraints", "risks", "mitigations", "verdict"],
|
||||
"properties": {
|
||||
"parent-workflow-id": {"type": "string", "minLength": 1},
|
||||
"product-decision-id": {"type": "string", "minLength": 1},
|
||||
"strategy-ref": {"type": "string", "minLength": 1},
|
||||
"strategy-sha256": {"type": "string", "pattern": "^[0-9a-f]{64}$"},
|
||||
"architecture-fit": {"type": "object", "minProperties": 1},
|
||||
"delivery-sustainability": {"type": "object", "minProperties": 1},
|
||||
"constraints": {"type": "array", "minItems": 1},
|
||||
"risks": {"type": "array"},
|
||||
"mitigations": {"type": "array"},
|
||||
"verdict": {"enum": ["feasible", "revise", "blocked"]}
|
||||
},
|
||||
"additionalProperties": true
|
||||
}
|
||||
@@ -0,0 +1,53 @@
|
||||
{
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"type": "object",
|
||||
"required": ["experiment-id", "subject", "arm-id", "model-id", "request-sha256", "first-result-only", "revision-count-at-capture", "output-ref", "output-sha256", "screenshots", "evaluator-blinded", "metrics"],
|
||||
"properties": {
|
||||
"experiment-id": {"type": "string", "minLength": 1},
|
||||
"subject": {"type": "string", "minLength": 1},
|
||||
"arm-id": {"enum": ["A", "B"]},
|
||||
"model-id": {"type": "string", "minLength": 1},
|
||||
"request-sha256": {"type": "string", "pattern": "^[0-9a-f]{64}$"},
|
||||
"first-result-only": {"const": true},
|
||||
"revision-count-at-capture": {"const": 0},
|
||||
"output-ref": {"type": "string", "minLength": 1},
|
||||
"output-sha256": {"type": "string", "pattern": "^[0-9a-f]{64}$"},
|
||||
"screenshots": {
|
||||
"type": "object",
|
||||
"required": ["desktop", "mobile"],
|
||||
"properties": {
|
||||
"desktop": {"$ref": "#/definitions/fileEvidence"},
|
||||
"mobile": {"$ref": "#/definitions/fileEvidence"}
|
||||
}
|
||||
},
|
||||
"evaluator-blinded": {"const": true},
|
||||
"metrics": {
|
||||
"type": "object",
|
||||
"required": ["product-purpose-understood-in-5s", "primary-action-found", "information-hierarchy", "category-quality-parity", "visual-craft", "mobile-clarity", "design-system-consistency", "human-preference", "revision-count-to-acceptance", "tokens-to-acceptance"],
|
||||
"properties": {
|
||||
"product-purpose-understood-in-5s": {"type": "integer", "minimum": 1, "maximum": 5},
|
||||
"primary-action-found": {"type": "integer", "minimum": 1, "maximum": 5},
|
||||
"information-hierarchy": {"type": "integer", "minimum": 1, "maximum": 5},
|
||||
"category-quality-parity": {"type": "integer", "minimum": 1, "maximum": 5},
|
||||
"visual-craft": {"type": "integer", "minimum": 1, "maximum": 5},
|
||||
"mobile-clarity": {"type": "integer", "minimum": 1, "maximum": 5},
|
||||
"design-system-consistency": {"type": "integer", "minimum": 1, "maximum": 5},
|
||||
"human-preference": {"type": "integer", "minimum": 1, "maximum": 5},
|
||||
"revision-count-to-acceptance": {"type": "integer", "minimum": 0},
|
||||
"tokens-to-acceptance": {"type": "integer", "minimum": 0}
|
||||
},
|
||||
"additionalProperties": false
|
||||
}
|
||||
},
|
||||
"definitions": {
|
||||
"fileEvidence": {
|
||||
"type": "object",
|
||||
"required": ["path", "sha256"],
|
||||
"properties": {
|
||||
"path": {"type": "string", "minLength": 1},
|
||||
"sha256": {"type": "string", "pattern": "^[0-9a-f]{64}$"}
|
||||
}
|
||||
}
|
||||
},
|
||||
"additionalProperties": true
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"type": "object",
|
||||
"minProperties": 1
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
{
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"type": "object",
|
||||
"required": ["assigned-lens", "producer-run-id", "context-package-ref", "context-package-sha256", "findings", "evidence-urls"],
|
||||
"properties": {
|
||||
"assigned-lens": {"type": "string", "pattern": "^LENS-[A-Z0-9-]+$"},
|
||||
"producer-run-id": {"type": "string", "minLength": 1},
|
||||
"context-package-ref": {"type": "string", "minLength": 1},
|
||||
"context-package-sha256": {"type": "string", "pattern": "^[0-9a-f]{64}$"},
|
||||
"findings": {"type": "array", "minItems": 1},
|
||||
"evidence-urls": {
|
||||
"type": "array",
|
||||
"minItems": 1,
|
||||
"uniqueItems": true,
|
||||
"items": {"type": "string", "pattern": "^https?://"}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,68 @@
|
||||
{
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"type": "object",
|
||||
"required": ["problem-structure", "analysis-synthesis", "evidence", "options", "source-contributions", "lens-coverage"],
|
||||
"properties": {
|
||||
"problem-structure": {
|
||||
"type": "object",
|
||||
"minProperties": 1
|
||||
},
|
||||
"analysis-synthesis": {
|
||||
"type": "object",
|
||||
"minProperties": 1
|
||||
},
|
||||
"options": {"type": "array", "minItems": 2, "items": {
|
||||
"type": "object",
|
||||
"required": ["id", "problem", "tradeoffs", "evidence-refs"],
|
||||
"properties": {
|
||||
"id": {"type": ["string", "number"]},
|
||||
"problem": {"type": "string", "minLength": 1},
|
||||
"tradeoffs": {"type": "array", "minItems": 1},
|
||||
"evidence-refs": {"type": "array", "minItems": 1}
|
||||
}
|
||||
}},
|
||||
"evidence": {"type": "array", "minItems": 1},
|
||||
"source-contributions": {
|
||||
"type": "array",
|
||||
"minItems": 3,
|
||||
"items": {
|
||||
"type": "object",
|
||||
"required": [
|
||||
"report-id", "report-ref", "report-sha256", "producer-role-id",
|
||||
"context-package-ref", "context-package-sha256", "assigned-lens", "producer-run-id"
|
||||
],
|
||||
"properties": {
|
||||
"report-id": {"type": "string", "minLength": 1},
|
||||
"report-ref": {"type": "string", "minLength": 1},
|
||||
"report-sha256": {"type": "string", "pattern": "^[0-9a-f]{64}$"},
|
||||
"producer-role-id": {"type": "string", "minLength": 1},
|
||||
"context-package-ref": {"type": "string", "minLength": 1},
|
||||
"context-package-sha256": {"type": "string", "pattern": "^[0-9a-f]{64}$"},
|
||||
"assigned-lens": {"type": "string", "pattern": "^LENS-[A-Z0-9-]+$"},
|
||||
"producer-run-id": {"type": "string", "minLength": 1}
|
||||
}
|
||||
}
|
||||
},
|
||||
"lens-coverage": {
|
||||
"type": "object",
|
||||
"required": ["required-min", "covered", "contrarian-report-id"],
|
||||
"properties": {
|
||||
"required-min": {"oneOf": [{"type": "integer", "minimum": 1}, {"const": "all-relevant"}]},
|
||||
"covered": {
|
||||
"type": "array", "minItems": 1, "uniqueItems": true,
|
||||
"items": {"type": "string", "pattern": "^LENS-[A-Z0-9-]+$"}
|
||||
},
|
||||
"contrarian-report-id": {"type": ["string", "null"]}
|
||||
}
|
||||
},
|
||||
"competitive-market-grounding-ref": {
|
||||
"type": "object",
|
||||
"required": ["report-id", "report-ref", "report-sha256"],
|
||||
"properties": {
|
||||
"report-id": {"type": "string", "minLength": 1},
|
||||
"report-ref": {"type": "string", "minLength": 1},
|
||||
"report-sha256": {"type": "string", "pattern": "^[0-9a-f]{64}$"}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,106 @@
|
||||
{
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"title": "method-execution",
|
||||
"description": "P3-B: 계약 실행의 흔적(존재≠수행). active 계약·standard/heavy 보고서에서 required. step-results를 artifact/evidence/receipt로 증명.",
|
||||
"type": "object",
|
||||
"required": ["role-id", "method-id", "contract-sha256", "step-results"],
|
||||
"additionalProperties": true,
|
||||
"properties": {
|
||||
"role-id": {"type": "string"},
|
||||
"method-id": {"type": "string"},
|
||||
"contract-sha256": {"type": "string", "minLength": 64, "maxLength": 64},
|
||||
"capability-bindings": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"required": ["skill-id", "section-id", "section-sha256"],
|
||||
"properties": {
|
||||
"skill-id": {"type": "string"},
|
||||
"section-id": {"type": "string"},
|
||||
"section-sha256": {"type": "string"}
|
||||
}
|
||||
}
|
||||
},
|
||||
"step-results": {
|
||||
"type": "array",
|
||||
"minItems": 1,
|
||||
"items": {
|
||||
"type": "object",
|
||||
"required": ["step-id", "status"],
|
||||
"properties": {
|
||||
"step-id": {"type": "string"},
|
||||
"status": {"enum": ["completed", "skipped"]},
|
||||
"output-binding": {"enum": ["current-artifact", "trusted-artifact"]},
|
||||
"artifact-refs": {
|
||||
"type": "array",
|
||||
"items": {"type": "object", "required": ["report-id", "sha256"],
|
||||
"properties": {"report-id": {"type": "string"}, "sha256": {"type": "string"}}}
|
||||
},
|
||||
"evidence-refs": {
|
||||
"type": "array",
|
||||
"items": {"type": "object", "required": ["source-uri", "grade"],
|
||||
"properties": {"source-uri": {"type": "string"}, "grade": {"type": "string"}}}
|
||||
},
|
||||
"skip-rule-id": {"type": "string"},
|
||||
"reason": {"type": "string"}
|
||||
}
|
||||
}
|
||||
},
|
||||
"decisions": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"required": ["decision-id", "alternatives", "selected-option-id"],
|
||||
"properties": {
|
||||
"decision-id": {"type": "string"},
|
||||
"alternatives": {
|
||||
"type": "array", "minItems": 1,
|
||||
"items": {"type": "object", "required": ["option-id"],
|
||||
"properties": {"option-id": {"type": "string"},
|
||||
"evidence-refs": {"type": "array"}}}
|
||||
},
|
||||
"selected-option-id": {"type": "string"},
|
||||
"rejection-rationales": {"type": "object"}
|
||||
}
|
||||
}
|
||||
},
|
||||
"self-check-results": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "object", "required": ["step-id", "gate-id", "verdict", "evidence-refs"],
|
||||
"properties": {
|
||||
"step-id": {"type": "string"}, "gate-id": {"type": "string"},
|
||||
"verdict": {"enum": ["Passed", "Failed"]},
|
||||
"evidence-refs": {"type": "array", "minItems": 1}
|
||||
}
|
||||
}
|
||||
},
|
||||
"judgment-results": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "object", "required": ["step-id", "gate-id", "review-artifact-ref"],
|
||||
"properties": {
|
||||
"step-id": {"type": "string"}, "gate-id": {"type": "string"},
|
||||
"review-artifact-ref": {"type": "object", "required": ["report-id", "sha256"],
|
||||
"properties": {"report-id": {"type": "string"}, "sha256": {"type": "string", "pattern": "^[0-9a-f]{64}$"}}}
|
||||
}
|
||||
}
|
||||
},
|
||||
"handoffs": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"required": ["to-role", "artifact-refs"],
|
||||
"properties": {
|
||||
"to-role": {"type": "string"},
|
||||
"to-method": {"type": "string"},
|
||||
"artifact-refs": {
|
||||
"type": "array",
|
||||
"items": {"type": "object", "required": ["report-id", "sha256"],
|
||||
"properties": {"report-id": {"type": "string"}, "sha256": {"type": "string"}}}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"$schema": "http://json-schema.org/draft-07/schema#", "type": "object",
|
||||
"required": ["method-role-id", "method-id", "step-id", "gate-id", "criterion", "reviewed-artifact-id", "reviewed-artifact-sha256", "reviewer-role-id", "verdict", "findings"],
|
||||
"properties": {
|
||||
"method-role-id": {"type": "string", "minLength": 1}, "method-id": {"type": "string", "minLength": 1},
|
||||
"step-id": {"type": "string", "minLength": 1}, "gate-id": {"type": "string", "minLength": 1}, "criterion": {"type": "string", "minLength": 1},
|
||||
"reviewed-artifact-id": {"type": "string", "minLength": 1}, "reviewed-artifact-sha256": {"type": "string", "pattern": "^[0-9a-f]{64}$"},
|
||||
"reviewer-role-id": {"type": "string", "minLength": 1}, "verdict": {"enum": ["Passed", "Failed"]}, "findings": {"type": "array"}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
{
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"type": "object",
|
||||
"required": ["metric-contract", "dataset-snapshot", "analysis-run", "findings", "limitations"],
|
||||
"properties": {
|
||||
"metric-contract": {
|
||||
"type": "object",
|
||||
"required": ["metric-id", "version", "grain", "numerator", "denominator", "unit", "timezone", "observation-window", "source-fields"],
|
||||
"properties": {
|
||||
"metric-id": {"type": "string", "minLength": 1}, "version": {"type": "string", "minLength": 1},
|
||||
"grain": {"type": "string", "minLength": 1}, "numerator": {"type": "string", "minLength": 1},
|
||||
"denominator": {"type": "string", "minLength": 1}, "unit": {"type": "string", "minLength": 1},
|
||||
"timezone": {"type": "string", "minLength": 1}, "observation-window": {"type": "string", "minLength": 1},
|
||||
"source-fields": {"type": "array", "minItems": 1}
|
||||
}
|
||||
},
|
||||
"dataset-snapshot": {
|
||||
"type": "object",
|
||||
"required": ["snapshot-id", "path", "sha256", "schema-version", "row-count", "as-of", "classification"],
|
||||
"properties": {
|
||||
"snapshot-id": {"type": "string", "minLength": 1}, "path": {"type": "string", "minLength": 1},
|
||||
"sha256": {"type": "string", "pattern": "^[0-9a-f]{64}$"}, "schema-version": {"type": "string"},
|
||||
"row-count": {"type": "integer", "minimum": 1}, "as-of": {"type": "string", "minLength": 1},
|
||||
"classification": {"enum": ["public", "internal", "confidential", "restricted"]}
|
||||
}
|
||||
},
|
||||
"analysis-run": {
|
||||
"type": "object",
|
||||
"required": ["query-sha256", "environment", "result-sha256", "evidence-receipt-ids"],
|
||||
"properties": {
|
||||
"query-sha256": {"type": "string", "pattern": "^[0-9a-f]{64}$"},
|
||||
"environment": {"type": "string", "minLength": 1},
|
||||
"result-sha256": {"type": "string", "pattern": "^[0-9a-f]{64}$"},
|
||||
"evidence-receipt-ids": {"type": "array", "minItems": 1, "items": {"type": "string"}}
|
||||
}
|
||||
},
|
||||
"findings": {"type": "array", "minItems": 1},
|
||||
"limitations": {"type": "array"}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"$schema": "http://json-schema.org/draft-07/schema#", "type": "object",
|
||||
"required": ["basis-artifact-id", "basis-artifact-sha256", "phases", "rollback-plan", "validation-plan", "data-loss-tolerance", "cutover-criteria"],
|
||||
"properties": {
|
||||
"basis-artifact-id": {"type": "string", "minLength": 1}, "basis-artifact-sha256": {"type": "string", "pattern": "^[0-9a-f]{64}$"},
|
||||
"phases": {"type": "array", "minItems": 1}, "rollback-plan": {"type": "object", "minProperties": 1},
|
||||
"validation-plan": {"type": "array", "minItems": 1}, "data-loss-tolerance": {"type": "string", "minLength": 1},
|
||||
"cutover-criteria": {"type": "array", "minItems": 1}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
{
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"type": "object",
|
||||
"required": [
|
||||
"source-artifact-refs",
|
||||
"id",
|
||||
"problem-domain",
|
||||
"target-user",
|
||||
"triggering-event",
|
||||
"current-alternative",
|
||||
"why-now",
|
||||
"founder-fit"
|
||||
],
|
||||
"properties": {
|
||||
"source-artifact-refs": {
|
||||
"type": "array",
|
||||
"minItems": 1,
|
||||
"items": {
|
||||
"type": "object",
|
||||
"required": ["artifact-id", "artifact-sha256"],
|
||||
"properties": {
|
||||
"artifact-id": {"type": "string", "minLength": 1},
|
||||
"artifact-sha256": {"type": "string", "pattern": "^[0-9a-f]{64}$"}
|
||||
}
|
||||
}
|
||||
},
|
||||
"id": {"type": "string", "minLength": 1},
|
||||
"problem-domain": {"type": "string", "minLength": 1},
|
||||
"target-user": {"type": "string", "minLength": 1},
|
||||
"triggering-event": {"type": "string", "minLength": 1},
|
||||
"current-alternative": {"type": "string", "minLength": 1},
|
||||
"why-now": {"type": "string", "minLength": 1},
|
||||
"founder-fit": {"type": "string", "minLength": 1}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"$schema": "http://json-schema.org/draft-07/schema#", "type": "object",
|
||||
"required": ["basis-artifact-id", "basis-artifact-sha256", "source-artifact-refs", "summary", "architecture-boundaries", "quality-attributes", "decisions", "dependencies", "compatibility-assumptions"],
|
||||
"properties": {
|
||||
"basis-artifact-id": {"type": "string", "minLength": 1}, "basis-artifact-sha256": {"type": "string", "pattern": "^[0-9a-f]{64}$"},
|
||||
"source-artifact-refs": {
|
||||
"type": "array", "minItems": 1,
|
||||
"items": {
|
||||
"type": "object", "required": ["artifact-id", "artifact-sha256"],
|
||||
"properties": {
|
||||
"artifact-id": {"type": "string", "minLength": 1},
|
||||
"artifact-sha256": {"type": "string", "pattern": "^[0-9a-f]{64}$"}
|
||||
}
|
||||
}
|
||||
},
|
||||
"summary": {"type": "string", "minLength": 1}, "architecture-boundaries": {"type": "array", "minItems": 1},
|
||||
"quality-attributes": {"type": "array", "minItems": 1}, "decisions": {"type": "array", "minItems": 1},
|
||||
"dependencies": {"type": "array"}, "compatibility-assumptions": {"type": "array", "minItems": 1}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"$schema": "http://json-schema.org/draft-07/schema#", "type": "object",
|
||||
"required": ["basis-artifact-id", "basis-artifact-sha256", "problem", "outcomes", "non-goals", "user-stories", "success-metrics", "constraints"],
|
||||
"properties": {
|
||||
"basis-artifact-id": {"type": "string", "minLength": 1}, "basis-artifact-sha256": {"type": "string", "pattern": "^[0-9a-f]{64}$"},
|
||||
"problem": {"type": "string", "minLength": 1}, "outcomes": {"type": "array", "minItems": 1}, "non-goals": {"type": "array"},
|
||||
"user-stories": {"type": "array", "minItems": 1}, "success-metrics": {"type": "array", "minItems": 1}, "constraints": {"type": "array"}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,44 @@
|
||||
{
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"type": "object",
|
||||
"required": ["quality-gate", "blocker-open", "reviewed-artifact-id", "reviewed-artifact-sha256", "checks", "findings"],
|
||||
"properties": {
|
||||
"quality-gate": {"type": "object", "required": ["status"], "properties": {"status": {"enum": ["Passed", "Failed"]}}},
|
||||
"blocker-open": {"type": "boolean"},
|
||||
"reviewed-artifact-id": {"type": "string"},
|
||||
"reviewed-artifact-sha256": {"type": "string", "pattern": "^[0-9a-f]{64}$"},
|
||||
"checks": {
|
||||
"type": "array",
|
||||
"minItems": 1,
|
||||
"items": {
|
||||
"type": "object",
|
||||
"required": ["check-id", "category", "status", "evidence-receipt-ids"],
|
||||
"properties": {
|
||||
"check-id": {"type": "string", "minLength": 1},
|
||||
"category": {"enum": ["acceptance-criteria", "test", "security", "privacy", "data-quality", "reliability", "release-readiness"]},
|
||||
"status": {"enum": ["Passed", "Failed"]},
|
||||
"evidence-receipt-ids": {
|
||||
"type": "array", "minItems": 1, "uniqueItems": true,
|
||||
"items": {"type": "string", "minLength": 1}
|
||||
}
|
||||
},
|
||||
"additionalProperties": true
|
||||
}
|
||||
},
|
||||
"findings": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"required": ["finding-id", "severity", "blocking", "resolved", "summary"],
|
||||
"properties": {
|
||||
"finding-id": {"type": "string", "minLength": 1},
|
||||
"severity": {"enum": ["Critical", "High", "Medium", "Low"]},
|
||||
"blocking": {"type": "boolean"},
|
||||
"resolved": {"type": "boolean"},
|
||||
"summary": {"type": "string", "minLength": 1}
|
||||
},
|
||||
"additionalProperties": true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"type": "object",
|
||||
"required": ["release-decision", "unresolved-critical-risks", "reviewed-completion-artifact-id", "reviewed-completion-artifact-sha256", "reviewed-quality-event-id", "reviewed-quality-artifact-id", "reviewed-quality-artifact-sha256"],
|
||||
"properties": {
|
||||
"release-decision": {"type": "object", "required": ["status"], "properties": {"status": {"enum": ["Approved", "Held", "Rejected"]}}},
|
||||
"unresolved-critical-risks": {"type": "boolean"},
|
||||
"reviewed-completion-artifact-id": {"type": "string", "minLength": 1},
|
||||
"reviewed-completion-artifact-sha256": {"type": "string", "pattern": "^[0-9a-f]{64}$"},
|
||||
"reviewed-quality-event-id": {"type": "string", "minLength": 1},
|
||||
"reviewed-quality-artifact-id": {"type": "string", "minLength": 1},
|
||||
"reviewed-quality-artifact-sha256": {"type": "string", "pattern": "^[0-9a-f]{64}$"}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,95 @@
|
||||
{
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"$id": "report.schema.json",
|
||||
"title": "Org OS report — common report-header contract",
|
||||
"description": "모든 산출물이 공유하는 최소 구조. report-type가 있으면 <type>.schema.json 델타가 required/properties에 병합된다. 없거나 미지 유형이면 이 공통 스키마만 적용(sane default). additionalProperties는 허용(findings/storyline 등 자유 본문 필드).",
|
||||
"type": "object",
|
||||
"required": ["report-header", "report-type", "report-id", "workflow-id", "role-id"],
|
||||
"properties": {
|
||||
"report-type": {
|
||||
"description": "판별자(필수, P0-5). 신규 산출물은 workflow-artifact envelope를 사용한다. legacy 유형은 읽기 호환만 유지한다.",
|
||||
"type": "string"
|
||||
},
|
||||
"report-id": {
|
||||
"description": "보고서 자기식별자(필수, P0-3). new_report.py가 파일명 기반으로 발급. 소유·freshness 바인딩에 쓰인다.",
|
||||
"type": ["string", "number"]
|
||||
},
|
||||
"workflow-id": {
|
||||
"description": "이 보고서가 속한 워크플로 id(필수, P0-3). SubagentStop이 등록 레코드와 대조해 peer/stale 보고서 재사용을 차단한다.",
|
||||
"type": ["string", "number"]
|
||||
},
|
||||
"role-id": {
|
||||
"description": "이 보고서를 낸 역할 id(필수, P0-3). 등록 role과 일치해야 소유로 인정.",
|
||||
"type": ["string", "number"]
|
||||
},
|
||||
"created-at": {
|
||||
"description": "보고서 생성 시각(UTC). SubagentStop freshness 검사(등록 started_at 이후 생성)에 쓰인다.",
|
||||
"type": ["string", "number"]
|
||||
},
|
||||
"attempt-id": {
|
||||
"description": "P1-G(#14): 이 (workflow, role) 쌍에서 몇 번째 시도인가(1부터). 리포트는 불변 스냅샷이라 상태를 바꾸는 대신 새 시도를 새 스냅샷으로 남긴다. 선택 필드(옛 최소 리포트는 없어도 유효).",
|
||||
"type": ["integer", "string"]
|
||||
},
|
||||
"supersedes-report-id": {
|
||||
"description": "P1-G(#14): 이 스냅샷이 대체(supersede)하는 이전 report-id(계보 연결). 상태 변화 자체는 acceptance-events.jsonl(append-only)에 이벤트로 기록된다. 선택 필드.",
|
||||
"type": ["string", "null"]
|
||||
},
|
||||
"projection-version": {
|
||||
"description": "Bounded synthesis/read projection contract. New reports use version 1.",
|
||||
"type": "integer",
|
||||
"enum": [1]
|
||||
},
|
||||
"decision-summary": {
|
||||
"type": "object",
|
||||
"required": ["bottom-line", "recommendation", "decision-needed", "confidence"],
|
||||
"properties": {
|
||||
"bottom-line": {"type": "string"},
|
||||
"recommendation": {"type": "string"},
|
||||
"decision-needed": {"type": "boolean"},
|
||||
"confidence": {"type": "string", "enum": ["High", "Med", "Low"]}
|
||||
}
|
||||
},
|
||||
"evidence-index": {"type": "array"},
|
||||
"dissent": {"type": "array"},
|
||||
"open-risks": {"type": "array"},
|
||||
"artifact-refs": {"type": "array"},
|
||||
"primary-artifacts": {
|
||||
"description": "P1-D(#9): 보고서와 분리된 1급 실물 산출물 목록. 보고서는 이들의 envelope(경로+검증+리스크). design/spec/build/completion 유형에서 필수이며, 각 path는 실존해야 한다(validate_report가 대조).",
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"required": ["path", "kind", "verification"],
|
||||
"properties": {
|
||||
"path": {"type": "string", "description": "실물 산출물 파일 경로(실존해야 함)"},
|
||||
"kind": {"type": "string", "description": "rfc|adr|data-model|threat-model|api-contract|code|prd|design-doc|verification-record|…"},
|
||||
"sha": {"type": "string", "description": "(선택) 산출물 해시 — evidence-ledger receipt(C5)의 artifact_sha256과 교차검증"},
|
||||
"verification": {"description": "이 산출물을 무엇으로 검증했는가(command/test/review). E4/E5 주장은 receipt 필요."}
|
||||
}
|
||||
}
|
||||
},
|
||||
"report-header": {
|
||||
"type": "object",
|
||||
"required": ["bottom-line", "decision-needed", "confidence", "risks", "evidence"],
|
||||
"properties": {
|
||||
"bottom-line": {"type": "string"},
|
||||
"decision-needed": {
|
||||
"type": "object",
|
||||
"required": ["needed"],
|
||||
"properties": {
|
||||
"needed": {"type": "boolean"},
|
||||
"approver": {}
|
||||
}
|
||||
},
|
||||
"confidence": {
|
||||
"type": "object",
|
||||
"required": ["value"],
|
||||
"properties": {
|
||||
"value": {"type": "string"}
|
||||
}
|
||||
},
|
||||
"risks": {"type": "array"},
|
||||
"evidence": {"type": "array"}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"type": "object",
|
||||
"required": ["resume-condition-satisfied"],
|
||||
"properties": {"resume-condition-satisfied": {"const": true}}
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"$id": "review.schema.json",
|
||||
"title": "review report — delta over report.schema.json",
|
||||
"description": "리뷰 산출물. verdict(예: Accepted|Changes-Requested|Blocked|PASS|NEEDS_FIX)를 명시한다.",
|
||||
"type": "object",
|
||||
"required": ["verdict"],
|
||||
"properties": {
|
||||
"verdict": {"type": "string"},
|
||||
"findings": {"type": "array"}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"$id": "spec.schema.json",
|
||||
"title": "spec report — delta over report.schema.json",
|
||||
"description": "기능명세 산출물. PRD/api-contract/수용기준 등 실물 산출물(primary-artifacts, report와 분리·실존)과 수용기준(acceptance-criteria)을 명시한다. 보고서 몇 줄로 실물 명세를 대체하지 않는다(#9).",
|
||||
"type": "object",
|
||||
"required": ["primary-artifacts", "acceptance-criteria"],
|
||||
"properties": {
|
||||
"primary-artifacts": {"type": "array"},
|
||||
"acceptance-criteria": {"type": "array"}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"$schema": "http://json-schema.org/draft-07/schema#", "type": "object",
|
||||
"required": ["basis-artifact-id", "basis-artifact-sha256", "dfd", "trust-boundaries", "threats", "mitigations", "residual-risks"],
|
||||
"properties": {
|
||||
"basis-artifact-id": {"type": "string", "minLength": 1}, "basis-artifact-sha256": {"type": "string", "pattern": "^[0-9a-f]{64}$"},
|
||||
"dfd": {"type": "object", "minProperties": 1}, "trust-boundaries": {"type": "array", "minItems": 1},
|
||||
"threats": {"type": "array", "minItems": 1}, "mitigations": {"type": "array", "minItems": 1}, "residual-risks": {"type": "array"}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
{
|
||||
"$schema": "http://json-schema.org/draft-07/schema#", "type": "object",
|
||||
"required": ["basis-artifact-id", "basis-artifact-sha256", "user-flows", "screen-inventory", "state-matrix", "accessibility", "design-system-bindings", "visual-rationale"],
|
||||
"properties": {
|
||||
"basis-artifact-id": {"type": "string", "minLength": 1}, "basis-artifact-sha256": {"type": "string", "pattern": "^[0-9a-f]{64}$"},
|
||||
"user-flows": {"type": "array", "minItems": 1}, "screen-inventory": {"type": "array", "minItems": 1},
|
||||
"state-matrix": {"type": "array", "minItems": 1}, "accessibility": {"type": "object", "minProperties": 1},
|
||||
"design-system-bindings": {
|
||||
"type": "array", "minItems": 1,
|
||||
"items": {
|
||||
"anyOf": [
|
||||
{"type": "string", "minLength": 1},
|
||||
{"type": "object", "required": ["release-id", "release-ref", "release-sha256", "component-ids", "delta"], "properties": {
|
||||
"release-id": {"type": "string", "minLength": 1},
|
||||
"release-ref": {"type": "string", "minLength": 1},
|
||||
"release-sha256": {"type": "string", "pattern": "^[0-9a-f]{64}$"},
|
||||
"component-ids": {"type": "array"},
|
||||
"delta": {"type": "object", "required": ["tokens", "components"], "properties": {
|
||||
"tokens": {"type": "array"},
|
||||
"components": {"type": "array", "items": {"anyOf": [
|
||||
{"type": "string", "minLength": 1},
|
||||
{"type": "object", "required": ["id", "reason"], "properties": {
|
||||
"id": {"type": "string", "minLength": 1},
|
||||
"reason": {"type": "string", "minLength": 1}
|
||||
}}
|
||||
]}}
|
||||
}}
|
||||
}}
|
||||
]
|
||||
}
|
||||
}, "visual-rationale": {"type": "string", "minLength": 1}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,57 @@
|
||||
{
|
||||
"$schema": "http://json-schema.org/draft-07/schema#", "type": "object",
|
||||
"required": ["source-artifact-refs", "hypotheses", "experiments", "evidence", "option-evaluations", "kill-criteria", "recommendation"],
|
||||
"properties": {
|
||||
"source-artifact-refs": {
|
||||
"type": "array", "minItems": 2,
|
||||
"items": {
|
||||
"type": "object",
|
||||
"required": ["artifact-id", "artifact-sha256"],
|
||||
"properties": {
|
||||
"artifact-id": {"type": "string", "minLength": 1},
|
||||
"artifact-sha256": {"type": "string", "pattern": "^[0-9a-f]{64}$"}
|
||||
}
|
||||
}
|
||||
},
|
||||
"hypotheses": {"type": "array", "minItems": 1}, "experiments": {"type": "array", "minItems": 1},
|
||||
"evidence": {"type": "array", "minItems": 1},
|
||||
"option-evaluations": {
|
||||
"type": "array", "minItems": 2,
|
||||
"items": {
|
||||
"type": "object",
|
||||
"required": [
|
||||
"id", "customer", "painful-job", "current-alternative", "wedge",
|
||||
"monetization", "expected-price", "reachable-customers", "rough-revenue-ceiling",
|
||||
"acquisition-channel", "build-cost", "operation-cost", "founder-fit", "defensibility",
|
||||
"kill-criteria", "unresolved-assumptions", "validation-results"
|
||||
],
|
||||
"properties": {
|
||||
"id": {"type": "string", "minLength": 1},
|
||||
"kill-criteria": {"type": "array", "minItems": 1},
|
||||
"unresolved-assumptions": {"type": "array"},
|
||||
"validation-results": {
|
||||
"type": "array", "minItems": 9,
|
||||
"items": {
|
||||
"type": "object",
|
||||
"required": ["option-id", "gate", "verdict", "evidence", "dissent"],
|
||||
"properties": {
|
||||
"option-id": {"type": "string", "minLength": 1},
|
||||
"gate": {
|
||||
"enum": [
|
||||
"problem-intensity", "competition-alternatives", "willingness-to-pay",
|
||||
"revenue-unit-economics", "tech-feasibility-moat", "operability",
|
||||
"distribution", "founder-fit", "kill-criteria"
|
||||
]
|
||||
},
|
||||
"verdict": {"enum": ["pass", "fail", "unknown"]},
|
||||
"evidence": {"type": "array"},
|
||||
"dissent": {"type": "array"}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"kill-criteria": {"type": "array", "minItems": 1}, "recommendation": {"type": "string", "minLength": 1}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"$schema": "http://json-schema.org/draft-07/schema#", "type": "object",
|
||||
"required": ["scope", "work-items", "dependencies", "acceptance-criteria", "risks", "owners"],
|
||||
"properties": {
|
||||
"scope": {"type": "object", "minProperties": 1}, "work-items": {"type": "array", "minItems": 1},
|
||||
"dependencies": {"type": "array"}, "acceptance-criteria": {"type": "array", "minItems": 1},
|
||||
"risks": {"type": "array"}, "owners": {"type": "array", "minItems": 1}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"type": "object",
|
||||
"required": ["parent-workflow-id", "product-decision-id", "blueprint-ref", "blueprint-sha256", "screens", "validation", "art-direction-deferred"],
|
||||
"properties": {
|
||||
"parent-workflow-id": {"type": "string", "minLength": 1},
|
||||
"product-decision-id": {"type": "string", "minLength": 1},
|
||||
"blueprint-ref": {"type": "string", "minLength": 1},
|
||||
"blueprint-sha256": {"type": "string", "pattern": "^[0-9a-f]{64}$"},
|
||||
"screens": {"type": "array", "minItems": 1, "items": {"type": "object", "required": ["id", "purpose", "primary-action", "content-priority", "desktop", "mobile", "states"], "properties": {"id": {"type": "string", "minLength": 1}, "purpose": {"type": "string", "minLength": 1}, "primary-action": {"type": "string", "minLength": 1}, "content-priority": {"type": "array", "minItems": 1}, "desktop": {"type": "object", "minProperties": 1}, "mobile": {"type": "object", "minProperties": 1}, "states": {"type": "array", "minItems": 1}}}},
|
||||
"validation": {"type": "object", "required": ["information-scent", "task-completion", "cognitive-load", "responsive-hierarchy"]},
|
||||
"art-direction-deferred": {"const": true}
|
||||
},
|
||||
"not": {"anyOf": [{"required": ["color-palette"]}, {"required": ["typography"]}, {"required": ["shadows"]}, {"required": ["visual-metaphor"]}]}
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"$id": "work.schema.json",
|
||||
"title": "work report — delta over report.schema.json",
|
||||
"description": "작업 산출물. 무엇을 했는지 work-summary를 명시한다.",
|
||||
"type": "object",
|
||||
"required": ["work-summary"],
|
||||
"properties": {
|
||||
"work-summary": {"type": "string"},
|
||||
"next-actions": {"type": "array"}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"$id": "workflow-artifact.schema.json",
|
||||
"title": "Trusted workflow artifact envelope",
|
||||
"type": "object",
|
||||
"required": ["artifact-kind", "artifact-version", "identity", "payload"],
|
||||
"properties": {
|
||||
"report-type": {"const": "workflow-artifact"},
|
||||
"artifact-kind": {"type": "string", "minLength": 1},
|
||||
"artifact-version": {"type": ["integer", "string"]},
|
||||
"identity": {
|
||||
"type": "object",
|
||||
"required": ["artifact-id", "workflow-id", "stage", "producer-role-id"],
|
||||
"properties": {
|
||||
"artifact-id": {"type": ["string", "number"]},
|
||||
"workflow-id": {"type": ["string", "number"]},
|
||||
"stage": {"type": "string"},
|
||||
"producer-role-id": {"type": "string"}
|
||||
}
|
||||
},
|
||||
"payload": {"type": "object"}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,50 @@
|
||||
{
|
||||
"$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"]}
|
||||
}
|
||||
]
|
||||
}
|
||||
Reference in New Issue
Block a user