@thinkai/tai-api-contract 2.61.0 → 2.63.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,7 +1,7 @@
1
1
  openapi: 3.0.3
2
2
  info:
3
3
  title: ThinkAI API
4
- version: 2.61.0
4
+ version: 2.63.0
5
5
  description: >
6
6
  Contract surface for the AI Driven SDLC backend used by ThinkAI.
7
7
  Workspace-scoped routes use `/workspaces/{workspaceId}/...`.
@@ -54,6 +54,8 @@ tags:
54
54
  description: Agentic Foundation pillars (epic #278); reads stored repository readiness snapshots
55
55
  - name: YourAiJourney
56
56
  description: Your AI Journey dashboard aggregators (epic #267); composes readiness, metrics, and AI-spend data for the /dashboard page
57
+ - name: SdlcInsights
58
+ description: SDLC Engineering Health insights — DORA, CI, collaboration, security, governance, and operational metrics for `/insights/sdlc/overview`.
57
59
  - name: WorkspaceActivity
58
60
  description: Workspace-wide lifecycle activity log — repo add/remove/re-add and integration lifecycle events (issue #515).
59
61
  - name: PlatformAdmin
@@ -2610,6 +2612,115 @@ paths:
2610
2612
  "404":
2611
2613
  description: Workspace does not exist or malformed workspaceId
2612
2614
 
2615
+ /workspaces/{workspaceId}/insights/sdlc/overview:
2616
+ get:
2617
+ tags: [SdlcInsights]
2618
+ summary: SDLC insights — Engineering Health overview
2619
+ description: >
2620
+ Engineering Health dashboard for `/insights/sdlc/overview`. Returns precomputed
2621
+ DORA, CI, collaboration, security, governance, and operational metrics aggregated
2622
+ at calendar-day granularity for the selected window. Filter params mirror other
2623
+ Measure insights routes plus optional `repoIds` scope.
2624
+ operationId: getSdlcInsightsOverview
2625
+ parameters:
2626
+ - $ref: "#/components/parameters/WorkspaceId"
2627
+ - $ref: "#/components/parameters/InsightsSdlcRangeId"
2628
+ - $ref: "#/components/parameters/InsightsDepartmentFilter"
2629
+ - name: team
2630
+ in: query
2631
+ description: Team name filter; send `All teams` to include every team.
2632
+ schema:
2633
+ type: string
2634
+ default: All teams
2635
+ - name: repoIds
2636
+ in: query
2637
+ description: Comma-separated internal repo ids; omit or empty for all repos.
2638
+ schema:
2639
+ type: string
2640
+ responses:
2641
+ "200":
2642
+ description: Engineering Health overview payload
2643
+ content:
2644
+ application/json:
2645
+ schema:
2646
+ $ref: "#/components/schemas/SdlcOverviewDto"
2647
+ "400":
2648
+ description: Invalid query parameters
2649
+ content:
2650
+ application/json:
2651
+ schema:
2652
+ type: object
2653
+ required: [error]
2654
+ properties:
2655
+ error: { type: string, example: invalid_query }
2656
+ "401":
2657
+ $ref: "#/components/responses/Unauthorized"
2658
+ "403":
2659
+ $ref: "#/components/responses/Forbidden"
2660
+ "404":
2661
+ description: Workspace does not exist or malformed workspaceId
2662
+
2663
+ /workspaces/{workspaceId}/insights/sdlc/drilldown/{metricId}:
2664
+ get:
2665
+ tags: [SdlcInsights]
2666
+ summary: SDLC insights — metric drill-down entities
2667
+ description: >
2668
+ Paginated entity list for a single Engineering Health metric (failed workflow runs,
2669
+ PRs, alerts, etc.). Available only when the overview marks `drilldownAvailable: true`.
2670
+ operationId: getSdlcInsightsDrilldown
2671
+ parameters:
2672
+ - $ref: "#/components/parameters/WorkspaceId"
2673
+ - name: metricId
2674
+ in: path
2675
+ required: true
2676
+ schema:
2677
+ $ref: "#/components/schemas/SdlcMetricId"
2678
+ - $ref: "#/components/parameters/InsightsSdlcRangeId"
2679
+ - $ref: "#/components/parameters/InsightsDepartmentFilter"
2680
+ - name: team
2681
+ in: query
2682
+ schema:
2683
+ type: string
2684
+ default: All teams
2685
+ - name: repoIds
2686
+ in: query
2687
+ schema:
2688
+ type: string
2689
+ - name: cursor
2690
+ in: query
2691
+ description: Opaque pagination cursor from a prior response.
2692
+ schema:
2693
+ type: string
2694
+ - name: limit
2695
+ in: query
2696
+ schema:
2697
+ type: integer
2698
+ minimum: 1
2699
+ maximum: 100
2700
+ default: 25
2701
+ responses:
2702
+ "200":
2703
+ description: Drill-down page
2704
+ content:
2705
+ application/json:
2706
+ schema:
2707
+ $ref: "#/components/schemas/SdlcDrilldownDto"
2708
+ "400":
2709
+ description: Invalid query parameters
2710
+ content:
2711
+ application/json:
2712
+ schema:
2713
+ type: object
2714
+ required: [error]
2715
+ properties:
2716
+ error: { type: string, example: invalid_query }
2717
+ "401":
2718
+ $ref: "#/components/responses/Unauthorized"
2719
+ "403":
2720
+ $ref: "#/components/responses/Forbidden"
2721
+ "404":
2722
+ description: Workspace or metric not found
2723
+
2613
2724
  /workspaces/{workspaceId}/integrations/ai-tool/{provider}/members:
2614
2725
  get:
2615
2726
  tags: [Workspace]
@@ -3008,6 +3119,9 @@ paths:
3008
3119
  operationId: postGithubInstallUrl
3009
3120
  description: >
3010
3121
  Creates a GitHub App installation URL scoped to the workspace and caller.
3122
+ Default intent `connect` installs ThinkAI Platform Insights (read).
3123
+ Intent `enable_fixes` installs ThinkAI Platform Automations (write) for the Insights
3124
+ installation identified by `installationId`.
3011
3125
  Body is optional; when omitted, defaults to `/onboarding/integrations` return path.
3012
3126
  Optional `pickerSession` (from user OAuth org picker) recovers `returnPath` from the server-side picker snapshot when the multi-hop authorize→install flow should return to the page where OAuth started.
3013
3127
  security:
@@ -3043,6 +3157,91 @@ paths:
3043
3157
  application/json:
3044
3158
  schema:
3045
3159
  $ref: "#/components/schemas/ErrorMessageDto"
3160
+ "503":
3161
+ description: Requested GitHub App is not configured
3162
+ content:
3163
+ application/json:
3164
+ schema:
3165
+ $ref: "#/components/schemas/ErrorMessageDto"
3166
+
3167
+ /workspaces/{workspaceId}/integrations/github/installations/{installationId}/automated-fixes/enable:
3168
+ post:
3169
+ tags: [Integrations]
3170
+ summary: Enable automated fixes for a GitHub installation
3171
+ operationId: postGithubAutomatedFixesEnable
3172
+ description: >
3173
+ Workspace-level enable for automated fixes on an Insights (read) installation.
3174
+ If an Automations (write) installation is already linked, flips `automatedFixesEnabled`
3175
+ without reinstalling. Otherwise returns `outcome: needs_install` so the client can
3176
+ call install-url with intent=enable_fixes.
3177
+ security:
3178
+ - bearerAuth: []
3179
+ parameters:
3180
+ - $ref: "#/components/parameters/WorkspaceId"
3181
+ - name: installationId
3182
+ in: path
3183
+ required: true
3184
+ schema:
3185
+ type: string
3186
+ minLength: 1
3187
+ maxLength: 64
3188
+ responses:
3189
+ "200":
3190
+ description: Enable result
3191
+ content:
3192
+ application/json:
3193
+ schema:
3194
+ $ref: "#/components/schemas/GithubAutomatedFixesEnableResponseDto"
3195
+ "401":
3196
+ $ref: "#/components/responses/Unauthorized"
3197
+ "403":
3198
+ $ref: "#/components/responses/Forbidden"
3199
+ "404":
3200
+ description: Workspace or installation not found
3201
+ content:
3202
+ application/json:
3203
+ schema:
3204
+ $ref: "#/components/schemas/ErrorMessageDto"
3205
+ "503":
3206
+ description: Automations GitHub App not configured
3207
+ content:
3208
+ application/json:
3209
+ schema:
3210
+ $ref: "#/components/schemas/ErrorMessageDto"
3211
+
3212
+ /workspaces/{workspaceId}/integrations/github/installations/{installationId}/automated-fixes:
3213
+ delete:
3214
+ tags: [Integrations]
3215
+ summary: Disable automated fixes for a GitHub installation
3216
+ operationId: deleteGithubAutomatedFixes
3217
+ description: >
3218
+ Workspace-level disable. Clears `automatedFixesEnabled` but keeps the linked Automations
3219
+ write installation id so re-enable does not require reinstall. Does not uninstall the
3220
+ Automations app from GitHub.
3221
+ security:
3222
+ - bearerAuth: []
3223
+ parameters:
3224
+ - $ref: "#/components/parameters/WorkspaceId"
3225
+ - name: installationId
3226
+ in: path
3227
+ required: true
3228
+ schema:
3229
+ type: string
3230
+ minLength: 1
3231
+ maxLength: 64
3232
+ responses:
3233
+ "204":
3234
+ description: Automated fixes disabled (or already disabled)
3235
+ "401":
3236
+ $ref: "#/components/responses/Unauthorized"
3237
+ "403":
3238
+ $ref: "#/components/responses/Forbidden"
3239
+ "404":
3240
+ description: Workspace or installation not found
3241
+ content:
3242
+ application/json:
3243
+ schema:
3244
+ $ref: "#/components/schemas/ErrorMessageDto"
3046
3245
 
3047
3246
  /workspaces/{workspaceId}/integrations/github/user-authorize-url:
3048
3247
  post:
@@ -5609,6 +5808,31 @@ paths:
5609
5808
  application/json:
5610
5809
  schema:
5611
5810
  $ref: "#/components/schemas/ErrorMessageDto"
5811
+ "422":
5812
+ description: GitHub installation lacks write permissions required for automated fix PRs
5813
+ content:
5814
+ application/json:
5815
+ schema:
5816
+ $ref: "#/components/schemas/GithubWritePermissionsRequiredErrorDto"
5817
+ examples:
5818
+ write_required:
5819
+ value:
5820
+ error: github_write_permissions_required
5821
+ missingPermissions:
5822
+ - name: contents
5823
+ required: write
5824
+ granted: read
5825
+ - name: pull_requests
5826
+ required: write
5827
+ granted: read
5828
+ manageUrl: https://github.com/settings/installations/12345
5829
+ writeUpgradeMessage: "Automated fixes need write access to your repositories: Contents (Read and write) and Pull requests (Read and write). Fixes open pull requests you review — nothing is merged automatically. Approve the update on GitHub to enable fix PRs."
5830
+ "503":
5831
+ description: GitHub installation permissions could not be verified
5832
+ content:
5833
+ application/json:
5834
+ schema:
5835
+ $ref: "#/components/schemas/GithubPermissionsCheckFailedErrorDto"
5612
5836
 
5613
5837
  /workspaces/{workspaceId}/readiness/fixes/{fixId}/retrigger:
5614
5838
  post:
@@ -5652,6 +5876,18 @@ paths:
5652
5876
  value:
5653
5877
  error: Fix is currently generating and cannot be superseded
5654
5878
  code: fix_generating
5879
+ "422":
5880
+ description: GitHub installation lacks write permissions required for automated fix PRs
5881
+ content:
5882
+ application/json:
5883
+ schema:
5884
+ $ref: "#/components/schemas/GithubWritePermissionsRequiredErrorDto"
5885
+ "503":
5886
+ description: GitHub installation permissions could not be verified
5887
+ content:
5888
+ application/json:
5889
+ schema:
5890
+ $ref: "#/components/schemas/GithubPermissionsCheckFailedErrorDto"
5655
5891
 
5656
5892
  /workspaces/{workspaceId}/cursor/platform-key-consent:
5657
5893
  put:
@@ -6290,6 +6526,37 @@ paths:
6290
6526
 
6291
6527
  # ── Your AI Journey (/dashboard) — epic #267 ─────────────────────────────
6292
6528
 
6529
+ /workspaces/{workspaceId}/your-ai-journey/hero:
6530
+ get:
6531
+ tags: [YourAiJourney]
6532
+ summary: First-paint hero payload for the /dashboard page
6533
+ description: >
6534
+ Returns analytics and productivity in one response so the dashboard hero can
6535
+ paint with a single RTT (auth + membership checked once). Nested payloads match
6536
+ the dedicated analytics and productivity routes and reuse those routes' 60s
6537
+ caches (there is no separate hero-level cache). `generatedAt` on the hero
6538
+ envelope and both nested payloads is set to the same assembly timestamp.
6539
+ operationId: getYourAiJourneyHero
6540
+ parameters:
6541
+ - $ref: "#/components/parameters/WorkspaceId"
6542
+ responses:
6543
+ "200":
6544
+ description: Hero bootstrap payload
6545
+ content:
6546
+ application/json:
6547
+ schema:
6548
+ $ref: "#/components/schemas/YourAiJourneyHeroDto"
6549
+ "401":
6550
+ $ref: "#/components/responses/Unauthorized"
6551
+ "403":
6552
+ $ref: "#/components/responses/Forbidden"
6553
+ "404":
6554
+ description: Workspace does not exist
6555
+ content:
6556
+ application/json:
6557
+ schema:
6558
+ $ref: "#/components/schemas/ErrorMessageDto"
6559
+
6293
6560
  /workspaces/{workspaceId}/your-ai-journey/analytics:
6294
6561
  get:
6295
6562
  tags: [YourAiJourney]
@@ -6929,6 +7196,16 @@ components:
6929
7196
  schema:
6930
7197
  type: string
6931
7198
  format: date
7199
+ InsightsSdlcRangeId:
7200
+ name: rangeId
7201
+ in: query
7202
+ description: >
7203
+ Day-level Measure window. Presets: `7d`, `30d`, `90d`, `180d`. Custom inclusive
7204
+ calendar range: `cr:YYYY-MM-DD:YYYY-MM-DD` (max span 180 days).
7205
+ schema:
7206
+ type: string
7207
+ default: 30d
7208
+ example: 30d
6932
7209
  InsightsDepartmentFilter:
6933
7210
  name: department
6934
7211
  in: query
@@ -10723,9 +11000,50 @@ components:
10723
11000
  nullable: true
10724
11001
  description: Null when the installation has not granted this permission.
10725
11002
 
11003
+ GithubWritePermissionsRequiredErrorDto:
11004
+ type: object
11005
+ additionalProperties: false
11006
+ required: [error, missingPermissions]
11007
+ properties:
11008
+ error:
11009
+ type: string
11010
+ enum: [github_write_permissions_required]
11011
+ missingPermissions:
11012
+ type: array
11013
+ items:
11014
+ $ref: "#/components/schemas/GithubMissingPermissionDto"
11015
+ manageUrl:
11016
+ type: string
11017
+ nullable: true
11018
+ description: GitHub installation settings URL to approve write permissions.
11019
+ writeUpgradeMessage:
11020
+ type: string
11021
+ nullable: true
11022
+ description: Human-readable summary of the write permission upgrade.
11023
+
11024
+ GithubPermissionsCheckFailedErrorDto:
11025
+ type: object
11026
+ additionalProperties: false
11027
+ required: [error]
11028
+ properties:
11029
+ error:
11030
+ type: string
11031
+ enum: [github_permissions_check_failed]
11032
+ description: GitHub installation permissions could not be verified (transient upstream failure).
11033
+
10726
11034
  GithubInstallationSummaryDto:
10727
11035
  type: object
10728
- required: [installationId, account, repos, permissionsUpgradeRequired]
11036
+ required:
11037
+ - installationId
11038
+ - account
11039
+ - repos
11040
+ - permissionsUpgradeRequired
11041
+ - corePermissionsOk
11042
+ - writePermissionsOk
11043
+ - writePermissionsUpgradeRequired
11044
+ - automatedFixesEnabled
11045
+ - writeAppInstalled
11046
+ - canEnableAutomatedFixes
10729
11047
  properties:
10730
11048
  installationId:
10731
11049
  type: string
@@ -10747,16 +11065,61 @@ components:
10747
11065
  permissionsUpgradeRequired:
10748
11066
  type: boolean
10749
11067
  description: >
10750
- True when this installation's granted permissions are below what the ThinkAI GitHub App
10751
- currently requests.
11068
+ True when this installation lacks core read permissions required for connect and analysis.
11069
+ Alias for `!corePermissionsOk`.
11070
+ corePermissionsOk:
11071
+ type: boolean
11072
+ description: >
11073
+ True when installation grants read permissions for repository analysis (contents, metadata,
11074
+ pull requests, and members for org installs).
11075
+ writePermissionsOk:
11076
+ type: boolean
11077
+ description: >
11078
+ True when automated fixes are enabled and the linked Automations (write) installation
11079
+ grants write permissions required for fix PRs.
11080
+ writePermissionsUpgradeRequired:
11081
+ type: boolean
11082
+ description: Alias for `!writePermissionsOk`.
10752
11083
  missingPermissions:
10753
11084
  type: array
10754
11085
  items:
10755
11086
  $ref: "#/components/schemas/GithubMissingPermissionDto"
11087
+ description: Core read permissions still needed for connect and analysis.
11088
+ missingWritePermissions:
11089
+ type: array
11090
+ items:
11091
+ $ref: "#/components/schemas/GithubMissingPermissionDto"
11092
+ description: Write permissions still needed for automated fix PRs.
10756
11093
  upgradeMessage:
10757
11094
  type: string
10758
11095
  nullable: true
10759
- description: Human-readable summary for UI when permissionsUpgradeRequired is true.
11096
+ description: Human-readable summary for UI when core permissions are missing.
11097
+ writeUpgradeMessage:
11098
+ type: string
11099
+ nullable: true
11100
+ description: Human-readable summary for UI when write permissions are missing.
11101
+ automatedFixesEnabled:
11102
+ type: boolean
11103
+ description: >
11104
+ True when this workspace has enabled automated fixes for this Insights (read)
11105
+ installation and linked a ThinkAI Platform Automations (write) installation.
11106
+ writeAppInstalled:
11107
+ type: boolean
11108
+ description: True when an Automations (write) GitHub App installation is linked.
11109
+ writeInstallationId:
11110
+ type: string
11111
+ nullable: true
11112
+ description: GitHub installation id for the Automations (write) app, when linked.
11113
+ writeManageUrl:
11114
+ type: string
11115
+ format: uri
11116
+ nullable: true
11117
+ description: GitHub settings URL for the Automations (write) installation.
11118
+ canEnableAutomatedFixes:
11119
+ type: boolean
11120
+ description: >
11121
+ True when the Automations app is configured and automated fixes are not yet
11122
+ enabled for this installation (UI may show Enable automated fixes).
10760
11123
 
10761
11124
  GithubPendingApprovalDto:
10762
11125
  type: object
@@ -11041,7 +11404,13 @@ components:
11041
11404
 
11042
11405
  GithubInstallationStatusDto:
11043
11406
  type: object
11044
- required: [installed, installations, permissionsUpgradeRequired]
11407
+ required:
11408
+ - installed
11409
+ - installations
11410
+ - permissionsUpgradeRequired
11411
+ - corePermissionsOk
11412
+ - writePermissionsOk
11413
+ - writePermissionsUpgradeRequired
11045
11414
  properties:
11046
11415
  installed:
11047
11416
  type: boolean
@@ -11051,7 +11420,25 @@ components:
11051
11420
  $ref: "#/components/schemas/GithubInstallationSummaryDto"
11052
11421
  permissionsUpgradeRequired:
11053
11422
  type: boolean
11054
- description: True if any connected installation is under-permissioned.
11423
+ description: True if any connected installation lacks core read permissions. Alias for `!corePermissionsOk`.
11424
+ corePermissionsOk:
11425
+ type: boolean
11426
+ description: True when every connected installation grants core read permissions.
11427
+ writePermissionsOk:
11428
+ type: boolean
11429
+ description: True when every connected installation grants write permissions for automated fixes.
11430
+ writePermissionsUpgradeRequired:
11431
+ type: boolean
11432
+ description: True when any connected installation lacks write permissions for automated fixes.
11433
+ missingWritePermissions:
11434
+ type: array
11435
+ items:
11436
+ $ref: "#/components/schemas/GithubMissingPermissionDto"
11437
+ description: Aggregated write permissions missing on installations that lack write access.
11438
+ writeUpgradeMessage:
11439
+ type: string
11440
+ nullable: true
11441
+ description: Human-readable summary when write permissions are missing.
11055
11442
  pendingApproval:
11056
11443
  nullable: true
11057
11444
  allOf:
@@ -11127,6 +11514,17 @@ components:
11127
11514
  format: uri
11128
11515
  maxLength: 256
11129
11516
  description: SPA origin to redirect back to after OAuth; must match server spaOrigins allowlist.
11517
+ intent:
11518
+ type: string
11519
+ enum: [connect, enable_fixes]
11520
+ description: >
11521
+ connect installs ThinkAI Platform Insights (read). enable_fixes installs ThinkAI Platform
11522
+ Automations (write) for the Insights installation identified by installationId.
11523
+ installationId:
11524
+ type: string
11525
+ minLength: 1
11526
+ maxLength: 64
11527
+ description: Insights (read) installation id required when intent is enable_fixes.
11130
11528
 
11131
11529
  GithubInstallUrlResponseDto:
11132
11530
  type: object
@@ -11142,6 +11540,22 @@ components:
11142
11540
  minLength: 16
11143
11541
  maxLength: 128
11144
11542
 
11543
+ GithubAutomatedFixesEnableResponseDto:
11544
+ type: object
11545
+ additionalProperties: false
11546
+ required: [outcome]
11547
+ properties:
11548
+ outcome:
11549
+ type: string
11550
+ enum: [enabled, needs_install]
11551
+ description: >
11552
+ enabled — write app already linked and flag flipped; needs_install — client should
11553
+ call install-url with intent=enable_fixes.
11554
+ status:
11555
+ allOf:
11556
+ - $ref: "#/components/schemas/GithubInstallationStatusDto"
11557
+ description: Present when outcome is enabled.
11558
+
11145
11559
  GithubUserAuthorizeUrlRequestDto:
11146
11560
  type: object
11147
11561
  additionalProperties: false
@@ -13183,6 +13597,24 @@ components:
13183
13597
  totalFixedIssues:
13184
13598
  type: integer
13185
13599
 
13600
+ YourAiJourneyHeroDto:
13601
+ type: object
13602
+ required: [workspaceId, generatedAt, analytics, productivity]
13603
+ properties:
13604
+ workspaceId:
13605
+ type: string
13606
+ format: uuid
13607
+ generatedAt:
13608
+ type: string
13609
+ format: date-time
13610
+ description: >
13611
+ Assembly timestamp for this hero response; also written onto
13612
+ analytics.generatedAt and productivity.generatedAt so all three match.
13613
+ analytics:
13614
+ $ref: "#/components/schemas/YourAiJourneyAnalyticsDto"
13615
+ productivity:
13616
+ $ref: "#/components/schemas/DashboardProductivityDto"
13617
+
13186
13618
  YourAiJourneyAnalyticsDto:
13187
13619
  type: object
13188
13620
  required: [workspaceId, generatedAt, windowStart, windowEnd, journey, readiness, prSignals]
@@ -13874,3 +14306,200 @@ components:
13874
14306
  type: string
13875
14307
  format: date-time
13876
14308
  description: Timestamp of the most recent contributing run (UTC).
14309
+
14310
+ SdlcModuleId:
14311
+ type: string
14312
+ enum:
14313
+ - dora
14314
+ - ci-pipeline
14315
+ - collaboration-pr
14316
+ - security-risk
14317
+ - governance-architecture
14318
+ - financial-operational
14319
+
14320
+ SdlcMetricId:
14321
+ type: string
14322
+ enum:
14323
+ - dora-deployment-frequency
14324
+ - dora-lead-time
14325
+ - dora-cfr
14326
+ - dora-mttr
14327
+ - ci-success-rate
14328
+ - ci-duration-p50-p95
14329
+ - ci-flakiness
14330
+ - ci-queue-wait
14331
+ - ci-cache-hit
14332
+ - pr-review-time
14333
+ - pr-bus-factor
14334
+ - pr-size
14335
+ - pr-abandonment
14336
+ - pr-review-depth
14337
+ - pr-draft-duration
14338
+ - pr-merge-conflicts
14339
+ - pr-commit-density
14340
+ - sec-dependabot-backlog
14341
+ - sec-vuln-mttr
14342
+ - sec-secret-scanning
14343
+ - sec-self-approvals
14344
+ - sec-unreviewed-merge
14345
+ - gov-branch-protection
14346
+ - gov-stale-branches
14347
+ - gov-orphaned-repos
14348
+ - gov-readme-health
14349
+ - gov-codeowners
14350
+ - gov-issue-pr-linkage
14351
+ - fin-gha-minutes
14352
+ - fin-copilot-utilization
14353
+ - fin-org-inactivity
14354
+ - fin-env-drift
14355
+ - fin-release-cadence
14356
+ - fin-api-rate-limit
14357
+
14358
+ SdlcMetricDataStatus:
14359
+ type: string
14360
+ enum: [live, preview, unavailable]
14361
+
14362
+ SdlcMetricHealthStatus:
14363
+ type: string
14364
+ enum: [healthy, warning, critical, unknown]
14365
+
14366
+ SdlcBenchmarkBand:
14367
+ type: string
14368
+ enum: [elite, high, medium, low]
14369
+
14370
+ SdlcMetricTrendDto:
14371
+ type: object
14372
+ required: [direction]
14373
+ properties:
14374
+ direction:
14375
+ type: string
14376
+ enum: [up, down, flat]
14377
+ deltaPercent:
14378
+ type: number
14379
+
14380
+ SdlcDailySeriesPointDto:
14381
+ type: object
14382
+ required: [date, value]
14383
+ properties:
14384
+ date:
14385
+ type: string
14386
+ format: date
14387
+ description: Inclusive ISO calendar day (UTC).
14388
+ value:
14389
+ type: number
14390
+
14391
+ SdlcMetricDto:
14392
+ type: object
14393
+ required: [id, name, dataStatus, healthStatus, value, drilldownAvailable]
14394
+ properties:
14395
+ id:
14396
+ $ref: "#/components/schemas/SdlcMetricId"
14397
+ name:
14398
+ type: string
14399
+ dataStatus:
14400
+ $ref: "#/components/schemas/SdlcMetricDataStatus"
14401
+ healthStatus:
14402
+ $ref: "#/components/schemas/SdlcMetricHealthStatus"
14403
+ value:
14404
+ oneOf:
14405
+ - type: number
14406
+ - type: string
14407
+ nullable: true
14408
+ unit:
14409
+ type: string
14410
+ secondaryValue:
14411
+ oneOf:
14412
+ - type: number
14413
+ - type: string
14414
+ nullable: true
14415
+ secondaryLabel:
14416
+ type: string
14417
+ trend:
14418
+ $ref: "#/components/schemas/SdlcMetricTrendDto"
14419
+ benchmarkBand:
14420
+ $ref: "#/components/schemas/SdlcBenchmarkBand"
14421
+ drilldownAvailable:
14422
+ type: boolean
14423
+ dailySeries:
14424
+ type: array
14425
+ items:
14426
+ $ref: "#/components/schemas/SdlcDailySeriesPointDto"
14427
+ unavailableReason:
14428
+ type: string
14429
+
14430
+ SdlcModuleDto:
14431
+ type: object
14432
+ required: [id, name, metrics]
14433
+ properties:
14434
+ id:
14435
+ $ref: "#/components/schemas/SdlcModuleId"
14436
+ name:
14437
+ type: string
14438
+ metrics:
14439
+ type: array
14440
+ items:
14441
+ $ref: "#/components/schemas/SdlcMetricDto"
14442
+
14443
+ SdlcOverviewDto:
14444
+ type: object
14445
+ required: [rangeId, from, to, department, team, repoIds, asOf, modules]
14446
+ properties:
14447
+ rangeId:
14448
+ type: string
14449
+ from:
14450
+ type: string
14451
+ format: date
14452
+ to:
14453
+ type: string
14454
+ format: date
14455
+ department:
14456
+ type: string
14457
+ team:
14458
+ type: string
14459
+ repoIds:
14460
+ type: array
14461
+ items:
14462
+ type: string
14463
+ asOf:
14464
+ type: string
14465
+ format: date-time
14466
+ modules:
14467
+ type: array
14468
+ items:
14469
+ $ref: "#/components/schemas/SdlcModuleDto"
14470
+
14471
+ SdlcDrilldownItemDto:
14472
+ type: object
14473
+ required: [id, title]
14474
+ properties:
14475
+ id:
14476
+ type: string
14477
+ title:
14478
+ type: string
14479
+ subtitle:
14480
+ type: string
14481
+ url:
14482
+ type: string
14483
+ format: uri
14484
+ occurredAt:
14485
+ type: string
14486
+ format: date-time
14487
+ metadata:
14488
+ type: object
14489
+ additionalProperties:
14490
+ oneOf:
14491
+ - type: string
14492
+ - type: number
14493
+
14494
+ SdlcDrilldownDto:
14495
+ type: object
14496
+ required: [metricId, items]
14497
+ properties:
14498
+ metricId:
14499
+ $ref: "#/components/schemas/SdlcMetricId"
14500
+ items:
14501
+ type: array
14502
+ items:
14503
+ $ref: "#/components/schemas/SdlcDrilldownItemDto"
14504
+ nextCursor:
14505
+ type: string