diff --git a/src/lib/openapi/spec/export-result-schema.ts b/src/lib/openapi/spec/export-result-schema.ts index 9b0c744539..b6389ee43b 100644 --- a/src/lib/openapi/spec/export-result-schema.ts +++ b/src/lib/openapi/spec/export-result-schema.ts @@ -18,6 +18,7 @@ import { releasePlanMilestoneSchema } from './release-plan-milestone-schema.js'; import { releasePlanMilestoneStrategySchema } from './release-plan-milestone-strategy-schema.js'; import { createFeatureStrategySchema } from './create-feature-strategy-schema.js'; import { createStrategyVariantSchema } from './create-strategy-variant-schema.js'; +import { transitionConditionSchema } from './transition-condition-schema.js'; import { dependentFeatureSchema } from './dependent-feature-schema.js'; import { tagSchema } from './tag-schema.js'; import { featureLinksSchema } from './feature-links-schema.js'; @@ -217,6 +218,7 @@ export const exportResultSchema = { releasePlanMilestoneStrategySchema, createFeatureStrategySchema, createStrategyVariantSchema, + transitionConditionSchema, }, }, } as const; diff --git a/src/lib/openapi/spec/feature-environment-schema.ts b/src/lib/openapi/spec/feature-environment-schema.ts index eefc2ea666..b735c53244 100644 --- a/src/lib/openapi/spec/feature-environment-schema.ts +++ b/src/lib/openapi/spec/feature-environment-schema.ts @@ -9,6 +9,7 @@ import { releasePlanMilestoneSchema } from './release-plan-milestone-schema.js'; import { releasePlanMilestoneStrategySchema } from './release-plan-milestone-strategy-schema.js'; import { createFeatureStrategySchema } from './create-feature-strategy-schema.js'; import { createStrategyVariantSchema } from './create-strategy-variant-schema.js'; +import { transitionConditionSchema } from './transition-condition-schema.js'; export const featureEnvironmentSchema = { $id: '#/components/schemas/featureEnvironmentSchema', @@ -132,6 +133,7 @@ export const featureEnvironmentSchema = { releasePlanMilestoneStrategySchema, createFeatureStrategySchema, createStrategyVariantSchema, + transitionConditionSchema, }, }, } as const; diff --git a/src/lib/openapi/spec/feature-schema.ts b/src/lib/openapi/spec/feature-schema.ts index 5c8f2939fa..93442886a0 100644 --- a/src/lib/openapi/spec/feature-schema.ts +++ b/src/lib/openapi/spec/feature-schema.ts @@ -12,6 +12,7 @@ import { releasePlanMilestoneSchema } from './release-plan-milestone-schema.js'; import { releasePlanMilestoneStrategySchema } from './release-plan-milestone-strategy-schema.js'; import { createFeatureStrategySchema } from './create-feature-strategy-schema.js'; import { createStrategyVariantSchema } from './create-strategy-variant-schema.js'; +import { transitionConditionSchema } from './transition-condition-schema.js'; export const featureSchema = { $id: '#/components/schemas/featureSchema', @@ -298,6 +299,7 @@ export const featureSchema = { releasePlanMilestoneStrategySchema, createFeatureStrategySchema, createStrategyVariantSchema, + transitionConditionSchema, }, }, } as const; diff --git a/src/lib/openapi/spec/feature-search-environment-schema.ts b/src/lib/openapi/spec/feature-search-environment-schema.ts index 431f9dcb4e..d1a2d3484d 100644 --- a/src/lib/openapi/spec/feature-search-environment-schema.ts +++ b/src/lib/openapi/spec/feature-search-environment-schema.ts @@ -10,6 +10,7 @@ import { releasePlanMilestoneSchema } from './release-plan-milestone-schema.js'; import { releasePlanMilestoneStrategySchema } from './release-plan-milestone-strategy-schema.js'; import { createFeatureStrategySchema } from './create-feature-strategy-schema.js'; import { createStrategyVariantSchema } from './create-strategy-variant-schema.js'; +import { transitionConditionSchema } from './transition-condition-schema.js'; export const featureSearchEnvironmentSchema = { $id: '#/components/schemas/featureSearchEnvironmentSchema', @@ -45,6 +46,7 @@ export const featureSearchEnvironmentSchema = { releasePlanSchema, releasePlanMilestoneSchema, releasePlanMilestoneStrategySchema, + transitionConditionSchema, createFeatureStrategySchema, createStrategyVariantSchema, }, diff --git a/src/lib/openapi/spec/health-overview-schema.ts b/src/lib/openapi/spec/health-overview-schema.ts index d88232648f..1068aecc29 100644 --- a/src/lib/openapi/spec/health-overview-schema.ts +++ b/src/lib/openapi/spec/health-overview-schema.ts @@ -13,6 +13,7 @@ import { projectEnvironmentSchema } from './project-environment-schema.js'; import { releasePlanSchema } from './release-plan-schema.js'; import { releasePlanMilestoneSchema } from './release-plan-milestone-schema.js'; import { releasePlanMilestoneStrategySchema } from './release-plan-milestone-strategy-schema.js'; +import { transitionConditionSchema } from './transition-condition-schema.js'; import { createStrategyVariantSchema } from './create-strategy-variant-schema.js'; import { strategyVariantSchema } from './strategy-variant-schema.js'; import { createFeatureNamingPatternSchema } from './create-feature-naming-pattern-schema.js'; @@ -150,6 +151,7 @@ export const healthOverviewSchema = { releasePlanSchema, releasePlanMilestoneSchema, releasePlanMilestoneStrategySchema, + transitionConditionSchema, strategyVariantSchema, variantSchema, projectStatsSchema, diff --git a/src/lib/openapi/spec/import-toggles-schema.ts b/src/lib/openapi/spec/import-toggles-schema.ts index f545a0174f..4db59e612c 100644 --- a/src/lib/openapi/spec/import-toggles-schema.ts +++ b/src/lib/openapi/spec/import-toggles-schema.ts @@ -18,6 +18,7 @@ import { releasePlanMilestoneSchema } from './release-plan-milestone-schema.js'; import { releasePlanMilestoneStrategySchema } from './release-plan-milestone-strategy-schema.js'; import { createFeatureStrategySchema } from './create-feature-strategy-schema.js'; import { createStrategyVariantSchema } from './create-strategy-variant-schema.js'; +import { transitionConditionSchema } from './transition-condition-schema.js'; import { strategyVariantSchema } from './strategy-variant-schema.js'; import { featureDependenciesSchema } from './feature-dependencies-schema.js'; import { dependentFeatureSchema } from './dependent-feature-schema.js'; @@ -63,6 +64,7 @@ export const importTogglesSchema = { releasePlanMilestoneStrategySchema, createFeatureStrategySchema, createStrategyVariantSchema, + transitionConditionSchema, variantsSchema, variantSchema, overrideSchema, diff --git a/src/lib/openapi/spec/index.ts b/src/lib/openapi/spec/index.ts index 7e41d833a3..b7d69c8ee2 100644 --- a/src/lib/openapi/spec/index.ts +++ b/src/lib/openapi/spec/index.ts @@ -205,6 +205,7 @@ export * from './telemetry-settings-schema.js'; export * from './toggle-maintenance-schema.js'; export * from './token-string-list-schema.js'; export * from './token-user-schema.js'; +export * from './transition-condition-schema.js'; export * from './ui-config-schema.js'; export * from './unknown-flag-schema.js'; export * from './unknown-flags-response-schema.js'; diff --git a/src/lib/openapi/spec/project-overview-schema.ts b/src/lib/openapi/spec/project-overview-schema.ts index b38504fff3..c821b3b6d7 100644 --- a/src/lib/openapi/spec/project-overview-schema.ts +++ b/src/lib/openapi/spec/project-overview-schema.ts @@ -18,6 +18,7 @@ import { projectLinkTemplateSchema } from './project-link-template-schema.js'; import { releasePlanSchema } from './release-plan-schema.js'; import { releasePlanMilestoneSchema } from './release-plan-milestone-schema.js'; import { releasePlanMilestoneStrategySchema } from './release-plan-milestone-strategy-schema.js'; +import { transitionConditionSchema } from './transition-condition-schema.js'; export const projectOverviewSchema = { $id: '#/components/schemas/projectOverviewSchema', @@ -208,6 +209,7 @@ export const projectOverviewSchema = { releasePlanSchema, releasePlanMilestoneSchema, releasePlanMilestoneStrategySchema, + transitionConditionSchema, projectStatsSchema, createFeatureNamingPatternSchema, featureTypeCountSchema, diff --git a/src/lib/openapi/spec/release-plan-milestone-schema.ts b/src/lib/openapi/spec/release-plan-milestone-schema.ts index f5e08c34b9..3e38249eb0 100644 --- a/src/lib/openapi/spec/release-plan-milestone-schema.ts +++ b/src/lib/openapi/spec/release-plan-milestone-schema.ts @@ -4,6 +4,7 @@ import { createFeatureStrategySchema } from './create-feature-strategy-schema.js import { parametersSchema } from './parameters-schema.js'; import { constraintSchema } from './constraint-schema.js'; import { createStrategyVariantSchema } from './create-strategy-variant-schema.js'; +import { transitionConditionSchema } from './transition-condition-schema.js'; export const releasePlanMilestoneSchema = { $id: '#/components/schemas/releasePlanMilestoneSchema', @@ -43,11 +44,8 @@ export const releasePlanMilestoneSchema = { nullable: true, }, transitionCondition: { - type: 'object', - description: - 'The transition condition for the next automated milestone progression.', - additionalProperties: true, - nullable: true, + description: 'The condition configuration for the transition', + $ref: '#/components/schemas/transitionConditionSchema', }, progressionExecutedAt: { type: 'string', @@ -73,6 +71,7 @@ export const releasePlanMilestoneSchema = { parametersSchema, constraintSchema, createStrategyVariantSchema, + transitionConditionSchema, }, }, } as const; diff --git a/src/lib/openapi/spec/transition-condition-schema.ts b/src/lib/openapi/spec/transition-condition-schema.ts new file mode 100644 index 0000000000..1cb016534d --- /dev/null +++ b/src/lib/openapi/spec/transition-condition-schema.ts @@ -0,0 +1,21 @@ +import type { FromSchema } from 'json-schema-to-ts'; + +export const transitionConditionSchema = { + $id: '#/components/schemas/transitionConditionSchema', + type: 'object', + additionalProperties: false, + required: ['intervalMinutes'], + description: 'A transition condition for milestone progression', + properties: { + intervalMinutes: { + type: 'number', + description: 'The interval in minutes before transitioning', + example: 30, + }, + }, + components: {}, +} as const; + +export type TransitionConditionSchema = FromSchema< + typeof transitionConditionSchema +>;