diff --git a/src/features/tech-log/contracts/studio/canonical-source.json b/src/features/tech-log/contracts/studio/canonical-source.json index 7ad0063..128290c 100644 --- a/src/features/tech-log/contracts/studio/canonical-source.json +++ b/src/features/tech-log/contracts/studio/canonical-source.json @@ -1,8 +1,8 @@ { "packageId": "@tech-log/studio-contract", "version": "3.0.0", - "digest": "sha256:25ed2e9f5b76bfeacf66e5a84ea8daf05979faa0b54e4980781f02115bbf0627", - "sourceRevision": "3e8a164", + "digest": "sha256:8ec2170ccdb27bd7ef29b46d732527987cf69d2c9818f7fe1943cb4d12b0dde4", + "sourceRevision": "d170392", "operationIds": [ "getStudioSession", "getStudioDashboard", diff --git a/src/features/tech-log/contracts/studio/generated.ts b/src/features/tech-log/contracts/studio/generated.ts index 423d857..d3f735a 100644 --- a/src/features/tech-log/contracts/studio/generated.ts +++ b/src/features/tech-log/contracts/studio/generated.ts @@ -588,7 +588,7 @@ export interface components { relations: components["schemas"]["RelationInput"][]; }; CaseInput: components["schemas"]["WorkingCopyInputBase"] & { - /** @constant */ + /** @enum {string} */ kind: "CASE"; problem: string; conclusion: string; @@ -608,7 +608,7 @@ export interface components { kind: "CASE"; }; ReferenceInput: components["schemas"]["WorkingCopyInputBase"] & { - /** @constant */ + /** @enum {string} */ kind: "REFERENCE"; purpose: string; rules: components["schemas"]["ReferenceRule"][]; @@ -625,7 +625,7 @@ export interface components { kind: "REFERENCE"; }; QuestionInput: components["schemas"]["WorkingCopyInputBase"] & { - /** @constant */ + /** @enum {string} */ kind: "QUESTION"; /** * @description Backend Inquiry lifecycle의 축약 view다. @@ -652,7 +652,7 @@ export interface components { kind: "QUESTION"; }; ProjectDecisionInput: components["schemas"]["WorkingCopyInputBase"] & { - /** @constant */ + /** @enum {string} */ kind: "PROJECT_DECISION"; /** * @description UI 용어다. Backend Domain의 `ACCEPTED`/`ADOPTED` 명칭이 다르면 @@ -687,7 +687,7 @@ export interface components { updatedAt: string; }; CaseWorkingCopy: components["schemas"]["WorkingCopyBase"] & { - /** @constant */ + /** @enum {string} */ kind: "CASE"; problem: string; conclusion: string; @@ -704,7 +704,7 @@ export interface components { kind: "CASE"; }; ReferenceWorkingCopy: components["schemas"]["WorkingCopyBase"] & { - /** @constant */ + /** @enum {string} */ kind: "REFERENCE"; purpose: string; rules: components["schemas"]["ReferenceRule"][]; @@ -721,7 +721,7 @@ export interface components { kind: "REFERENCE"; }; QuestionWorkingCopy: components["schemas"]["WorkingCopyBase"] & { - /** @constant */ + /** @enum {string} */ kind: "QUESTION"; /** @enum {string|null} */ questionStatus: "OPEN" | "RESOLVED" | null; @@ -740,7 +740,7 @@ export interface components { kind: "QUESTION"; }; ProjectDecisionWorkingCopy: components["schemas"]["WorkingCopyBase"] & { - /** @constant */ + /** @enum {string} */ kind: "PROJECT_DECISION"; /** @enum {string|null} */ decisionStatus: "PROPOSED" | "ADOPTED" | null; @@ -911,7 +911,7 @@ export interface components { }; Inline: components["schemas"]["InlineText"] | components["schemas"]["InlineEmphasis"] | components["schemas"]["InlineStrong"] | components["schemas"]["InlineCode"] | components["schemas"]["InlineLink"] | components["schemas"]["InlineStatus"]; InlineEmphasis: components["schemas"]["InlineContainer"] & { - /** @constant */ + /** @enum {string} */ type?: "EMPHASIS"; } & { /** @@ -921,7 +921,7 @@ export interface components { type: "EMPHASIS"; }; InlineStrong: components["schemas"]["InlineContainer"] & { - /** @constant */ + /** @enum {string} */ type?: "STRONG"; } & { /** @@ -966,7 +966,7 @@ export interface components { items: components["schemas"]["ListItem"][]; }; UnorderedListBlock: components["schemas"]["ListBlockBase"] & { - /** @constant */ + /** @enum {string} */ type?: "UNORDERED_LIST"; } & { /** @@ -976,7 +976,7 @@ export interface components { type: "UNORDERED_LIST"; }; OrderedListBlock: components["schemas"]["ListBlockBase"] & { - /** @constant */ + /** @enum {string} */ type?: "ORDERED_LIST"; } & { /** @@ -1074,7 +1074,7 @@ export interface components { }; CaseRenderBlock: components["schemas"]["HeadingBlock"] | components["schemas"]["ParagraphBlock"] | components["schemas"]["BlockquoteBlock"] | components["schemas"]["UnorderedListBlock"] | components["schemas"]["OrderedListBlock"] | components["schemas"]["CodeBlock"] | components["schemas"]["DataTableBlock"] | components["schemas"]["CalloutBlock"] | components["schemas"]["EvidenceFigureBlock"]; CasePublicRenderModel: components["schemas"]["PublicRenderModelBase"] & { - /** @constant */ + /** @enum {string} */ kind: "CASE"; problem: string; conclusion: string; @@ -1091,7 +1091,7 @@ export interface components { kind: "CASE"; }; ReferencePublicRenderModel: components["schemas"]["PublicRenderModelBase"] & { - /** @constant */ + /** @enum {string} */ kind: "REFERENCE"; purpose: string; rules: components["schemas"]["ReferenceRule"][]; @@ -1113,7 +1113,7 @@ export interface components { linkLabel: string; }; QuestionPublicRenderModel: components["schemas"]["PublicRenderModelBase"] & { - /** @constant */ + /** @enum {string} */ kind: "QUESTION"; /** * @description 공개 표현용 축약 상태다. Domain의 `INVESTIGATING`/`PAUSED`는 `OPEN`으로 표현된다. @@ -1135,7 +1135,7 @@ export interface components { kind: "QUESTION"; }; ProjectDecisionPublicRenderModel: components["schemas"]["PublicRenderModelBase"] & { - /** @constant */ + /** @enum {string} */ kind: "PROJECT_DECISION"; /** @enum {string} */ status: "PROPOSED" | "ADOPTED"; diff --git a/src/features/tech-log/contracts/studio/studio-api.openapi.yaml b/src/features/tech-log/contracts/studio/studio-api.openapi.yaml index 0f5b320..8cc18c2 100644 --- a/src/features/tech-log/contracts/studio/studio-api.openapi.yaml +++ b/src/features/tech-log/contracts/studio/studio-api.openapi.yaml @@ -928,7 +928,7 @@ components: - type: object required: [kind, problem, conclusion, environment, reproduction, lastVerifiedOn, bodyMarkdown] properties: - kind: { type: string, const: CASE } + kind: { type: string, enum: [CASE] } problem: { type: string, maxLength: 100000 } conclusion: { type: string, maxLength: 100000 } environment: { type: string, maxLength: 100000 } @@ -947,7 +947,7 @@ components: - type: object required: [kind, purpose, rules, applyWhen, exceptions, examples, verifiedOn] properties: - kind: { type: string, const: REFERENCE } + kind: { type: string, enum: [REFERENCE] } purpose: { type: string, maxLength: 100000 } rules: { type: array, maxItems: 50, items: { $ref: "#/components/schemas/ReferenceRule" } } applyWhen: { type: array, maxItems: 50, items: { $ref: "#/components/schemas/OrderedText" } } @@ -961,7 +961,7 @@ components: - type: object required: [kind, questionStatus, facts, assumptions, unknowns, constraints, options, nextValidation, resolution] properties: - kind: { type: string, const: QUESTION } + kind: { type: string, enum: [QUESTION] } questionStatus: type: [string, "null"] enum: [OPEN, RESOLVED, null] @@ -988,7 +988,7 @@ components: - type: object required: [kind, decisionStatus, decidedOn, statement, rationale, consequences] properties: - kind: { type: string, const: PROJECT_DECISION } + kind: { type: string, enum: [PROJECT_DECISION] } decisionStatus: type: [string, "null"] enum: [PROPOSED, ADOPTED, null] @@ -1035,7 +1035,7 @@ components: - type: object required: [kind, problem, conclusion, environment, reproduction, lastVerifiedOn, bodyMarkdown] properties: - kind: { type: string, const: CASE } + kind: { type: string, enum: [CASE] } problem: { type: string, maxLength: 100000 } conclusion: { type: string, maxLength: 100000 } environment: { type: string, maxLength: 100000 } @@ -1049,7 +1049,7 @@ components: - type: object required: [kind, purpose, rules, applyWhen, exceptions, examples, verifiedOn] properties: - kind: { type: string, const: REFERENCE } + kind: { type: string, enum: [REFERENCE] } purpose: { type: string, maxLength: 100000 } rules: { type: array, maxItems: 50, items: { $ref: "#/components/schemas/ReferenceRule" } } applyWhen: { type: array, maxItems: 50, items: { $ref: "#/components/schemas/OrderedText" } } @@ -1063,7 +1063,7 @@ components: - type: object required: [kind, questionStatus, facts, assumptions, unknowns, constraints, options, nextValidation, resolution] properties: - kind: { type: string, const: QUESTION } + kind: { type: string, enum: [QUESTION] } questionStatus: { type: [string, "null"], enum: [OPEN, RESOLVED, null] } facts: { type: array, maxItems: 50, items: { $ref: "#/components/schemas/OrderedText" } } assumptions: { type: array, maxItems: 50, items: { $ref: "#/components/schemas/OrderedText" } } @@ -1082,7 +1082,7 @@ components: - type: object required: [kind, decisionStatus, decidedOn, statement, rationale, consequences] properties: - kind: { type: string, const: PROJECT_DECISION } + kind: { type: string, enum: [PROJECT_DECISION] } decisionStatus: { type: [string, "null"], enum: [PROPOSED, ADOPTED, null] } decidedOn: { type: [string, "null"], format: date } statement: { type: string, maxLength: 100000 } @@ -1251,7 +1251,7 @@ components: additionalProperties: false required: [type, text] properties: - type: { type: string, const: TEXT } + type: { type: string, enum: [TEXT] } text: { type: string, minLength: 1, maxLength: 100000 } InlineContainer: type: object @@ -1264,14 +1264,14 @@ components: additionalProperties: false required: [type, code] properties: - type: { type: string, const: INLINE_CODE } + type: { type: string, enum: [INLINE_CODE] } code: { type: string, minLength: 1, maxLength: 100000 } InlineLink: type: object additionalProperties: false required: [type, label, href] properties: - type: { type: string, const: LINK } + type: { type: string, enum: [LINK] } label: { type: string, minLength: 1, maxLength: 100000 } href: { type: string, format: uri, maxLength: 2000 } InlineStatus: @@ -1279,7 +1279,7 @@ components: additionalProperties: false required: [type, label, tone] properties: - type: { type: string, const: STATUS } + type: { type: string, enum: [STATUS] } label: { type: string, minLength: 1, maxLength: 120 } tone: { type: string, enum: [warning, evidence, neutral] } Inline: @@ -1303,18 +1303,18 @@ components: unevaluatedProperties: false allOf: - { $ref: "#/components/schemas/InlineContainer" } - - { type: object, properties: { type: { type: string, const: EMPHASIS } } } + - { type: object, properties: { type: { type: string, enum: [EMPHASIS] } } } InlineStrong: unevaluatedProperties: false allOf: - { $ref: "#/components/schemas/InlineContainer" } - - { type: object, properties: { type: { type: string, const: STRONG } } } + - { type: object, properties: { type: { type: string, enum: [STRONG] } } } HeadingBlock: type: object additionalProperties: false required: [type, id, level, content] properties: - type: { type: string, const: HEADING } + type: { type: string, enum: [HEADING] } id: { type: string, minLength: 1, maxLength: 200 } level: { type: integer, minimum: 2, maximum: 4 } content: { type: array, maxItems: 1000, items: { $ref: "#/components/schemas/Inline" } } @@ -1323,14 +1323,14 @@ components: additionalProperties: false required: [type, content] properties: - type: { type: string, const: PARAGRAPH } + type: { type: string, enum: [PARAGRAPH] } content: { type: array, maxItems: 1000, items: { $ref: "#/components/schemas/Inline" } } BlockquoteBlock: type: object additionalProperties: false required: [type, content] properties: - type: { type: string, const: BLOCKQUOTE } + type: { type: string, enum: [BLOCKQUOTE] } content: { type: array, maxItems: 1000, items: { $ref: "#/components/schemas/Inline" } } ListItem: type: object @@ -1349,18 +1349,18 @@ components: unevaluatedProperties: false allOf: - { $ref: "#/components/schemas/ListBlockBase" } - - { type: object, properties: { type: { type: string, const: UNORDERED_LIST } } } + - { type: object, properties: { type: { type: string, enum: [UNORDERED_LIST] } } } OrderedListBlock: unevaluatedProperties: false allOf: - { $ref: "#/components/schemas/ListBlockBase" } - - { type: object, properties: { type: { type: string, const: ORDERED_LIST } } } + - { type: object, properties: { type: { type: string, enum: [ORDERED_LIST] } } } CodeBlock: type: object additionalProperties: false required: [type, code, language, label] properties: - type: { type: string, const: CODE_BLOCK } + type: { type: string, enum: [CODE_BLOCK] } code: { type: string, maxLength: 100000 } language: { type: [string, "null"], maxLength: 100 } label: { type: [string, "null"], maxLength: 200 } @@ -1391,7 +1391,7 @@ components: additionalProperties: false required: [type, id, caption, rowHeaderColumn, columns, rows] properties: - type: { type: string, const: DATA_TABLE } + type: { type: string, enum: [DATA_TABLE] } id: { type: string, minLength: 1, maxLength: 200 } caption: { type: string, maxLength: 1000 } rowHeaderColumn: { type: [integer, "null"], minimum: 1 } @@ -1402,7 +1402,7 @@ components: additionalProperties: false required: [type, tone, label, content] properties: - type: { type: string, const: CALLOUT } + type: { type: string, enum: [CALLOUT] } tone: { type: string, enum: [warning, info] } label: { type: string, maxLength: 200 } content: { type: array, maxItems: 1000, items: { $ref: "#/components/schemas/Inline" } } @@ -1425,7 +1425,7 @@ components: Asset decorative=true → alt="" 허용 ``` properties: - type: { type: string, const: EVIDENCE_FIGURE } + type: { type: string, enum: [EVIDENCE_FIGURE] } key: { type: string, minLength: 1, maxLength: 200 } alt: { type: string, maxLength: 1000 } caption: { type: string, maxLength: 1000 } @@ -1477,7 +1477,7 @@ components: - type: object required: [kind, problem, conclusion, environment, reproduction, lastVerifiedOn, bodyBlocks] properties: - kind: { type: string, const: CASE } + kind: { type: string, enum: [CASE] } problem: { type: string, minLength: 1, maxLength: 100000 } conclusion: { type: string, minLength: 1, maxLength: 100000 } environment: { type: string, maxLength: 100000 } @@ -1491,7 +1491,7 @@ components: - type: object required: [kind, purpose, rules, applyWhen, exceptions, examples, verifiedOn] properties: - kind: { type: string, const: REFERENCE } + kind: { type: string, enum: [REFERENCE] } purpose: { type: string, minLength: 1, maxLength: 100000 } rules: { type: array, minItems: 1, maxItems: 50, items: { $ref: "#/components/schemas/ReferenceRule" } } applyWhen: { type: array, minItems: 1, maxItems: 50, items: { $ref: "#/components/schemas/OrderedText" } } @@ -1513,7 +1513,7 @@ components: - type: object required: [kind, status, facts, assumptions, unknowns, constraints, options, nextValidation, resolution] properties: - kind: { type: string, const: QUESTION } + kind: { type: string, enum: [QUESTION] } status: type: string enum: [OPEN, RESOLVED] @@ -1535,7 +1535,7 @@ components: - type: object required: [kind, status, decidedOn, statement, rationale, consequences] properties: - kind: { type: string, const: PROJECT_DECISION } + kind: { type: string, enum: [PROJECT_DECISION] } status: { type: string, enum: [PROPOSED, ADOPTED] } decidedOn: { type: string, format: date } statement: { type: string, minLength: 1, maxLength: 100000 }