@thinkai/tai-api-contract 2.199.0 → 2.201.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.
- package/dist/generated/openapi.d.ts +176 -4
- package/dist/generated/openapi.d.ts.map +1 -1
- package/dist/index.d.ts +44 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/openapi/openapi.yaml +285 -8
- package/openapi/x-test-status-map.json +10 -0
- package/package.json +3 -3
- package/src/generated/openapi.ts +176 -4
- package/src/index.ts +55 -1
|
@@ -281,6 +281,16 @@
|
|
|
281
281
|
"method": "PUT",
|
|
282
282
|
"path": "/workspaces/{workspaceId}/productivity-targets"
|
|
283
283
|
},
|
|
284
|
+
"getWorkspaceDimensionTargets": {
|
|
285
|
+
"status": "implemented",
|
|
286
|
+
"method": "GET",
|
|
287
|
+
"path": "/workspaces/{workspaceId}/agentic-foundation/dimension-targets"
|
|
288
|
+
},
|
|
289
|
+
"putWorkspaceDimensionTargets": {
|
|
290
|
+
"status": "implemented",
|
|
291
|
+
"method": "PUT",
|
|
292
|
+
"path": "/workspaces/{workspaceId}/agentic-foundation/dimension-targets"
|
|
293
|
+
},
|
|
284
294
|
"putTenantSources": {
|
|
285
295
|
"status": "implemented",
|
|
286
296
|
"method": "PUT",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@thinkai/tai-api-contract",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.201.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -20,8 +20,8 @@
|
|
|
20
20
|
},
|
|
21
21
|
"devDependencies": {
|
|
22
22
|
"@stoplight/spectral-cli": "^6.17.0",
|
|
23
|
-
"@types/node": "^26.6.
|
|
24
|
-
"jsonpath-plus": "^11.2.
|
|
23
|
+
"@types/node": "^26.6.6",
|
|
24
|
+
"jsonpath-plus": "^11.2.2",
|
|
25
25
|
"openapi-typescript": "^7.13.0",
|
|
26
26
|
"typescript": "~6.0.3"
|
|
27
27
|
},
|
package/src/generated/openapi.ts
CHANGED
|
@@ -943,6 +943,30 @@ export interface paths {
|
|
|
943
943
|
patch?: never;
|
|
944
944
|
trace?: never;
|
|
945
945
|
};
|
|
946
|
+
"/workspaces/{workspaceId}/agentic-foundation/dimension-targets": {
|
|
947
|
+
parameters: {
|
|
948
|
+
query?: never;
|
|
949
|
+
header?: never;
|
|
950
|
+
path?: never;
|
|
951
|
+
cookie?: never;
|
|
952
|
+
};
|
|
953
|
+
/**
|
|
954
|
+
* Get Agentic Foundation dimension targets
|
|
955
|
+
* @description Workspace target percent per readiness dimension, plus optional per-repository overrides. Omitted targets mean 100. A repository override may disable scoring for a dimension and set its own target. Empty object means every dimension is scored at 100. Member-level read access.
|
|
956
|
+
*/
|
|
957
|
+
get: operations["getWorkspaceDimensionTargets"];
|
|
958
|
+
/**
|
|
959
|
+
* Set Agentic Foundation dimension targets
|
|
960
|
+
* @description Full-replace workspace dimension targets and repository overrides. Omit a target or send 100 to keep the default. `PUT {}` or `null` clears overrides so every dimension is scored at 100. Repository ids must be in Agentic Foundation scan scope. Requires workspace **admin**.
|
|
961
|
+
*/
|
|
962
|
+
put: operations["putWorkspaceDimensionTargets"];
|
|
963
|
+
post?: never;
|
|
964
|
+
delete?: never;
|
|
965
|
+
options?: never;
|
|
966
|
+
head?: never;
|
|
967
|
+
patch?: never;
|
|
968
|
+
trace?: never;
|
|
969
|
+
};
|
|
946
970
|
"/workspaces/{workspaceId}/sources": {
|
|
947
971
|
parameters: {
|
|
948
972
|
query?: never;
|
|
@@ -5216,7 +5240,7 @@ export interface paths {
|
|
|
5216
5240
|
};
|
|
5217
5241
|
/**
|
|
5218
5242
|
* Ingest / backfill data coverage
|
|
5219
|
-
* @description Read-only snapshot of historical ingest coverage for connected pipelines (productivity GitHub, AI usage/spend per provider, SDLC components, monitoring, HRIS). Aggregates existing watermarks and stored day/week evidence — does not trigger ingest or refresh. Every pipeline includes always-present `dataTrust` (`status` + `verificationMethod`) as a unified trust summary derived from existing coverage signals (stale, gaps, productivity `verificationStatus`, AI `spendReconciliationStatus`, pipeline `status`). It does not replace Source verified, Spend matched, or Backfill complete fields. Productivity detail may include `selfHeal` (latest depth scan and week reconcile) read from stored activity rows; this GET does not run a scan. `selfHeal` is null when neither event exists. AI usage detail includes spend reconciliation (`spendReconciliationStatus`, `spendDataQuality`, provider and stored cent totals, `spendReconcileCheckedAt`) read from the refresh-status snapshot. This GET does not call Cursor or Claude. Productivity, HR, monitoring, and SDLC pipelines omit those fields. `nextScheduledAt` is the scheduled poll instant for `ai_usage`, `hris`, and `monitoring`. It is null for productivity and SDLC, when that sync worker is disabled, or when there has been no attempt (`hris`/`monitoring` use last status `never`). For `hris` and `monitoring`, the value is the next PHASE2 daily UTC cron after now (`15 2` / `30 2`, not lastAttempt plus interval) and is therefore in the future when set. For `ai_usage`, it is the next weekly workspace slot and a past instant means that poll is overdue; it is not moved forward to now and is not an ETA. Monitoring `sync` copies stored `issueCount`, `deploymentCount`, and `eventCount` (null when unset). HRIS leaves those three null. Requires workspace membership. Disconnected sources are omitted. Insights / Measure / Engineering Health response DTOs do not include `dataTrust`.
|
|
5243
|
+
* @description Read-only snapshot of historical ingest coverage for connected pipelines (productivity GitHub/Bitbucket, AI usage/spend per provider, SDLC components, monitoring, HRIS, Jira, PagerDuty). Aggregates existing watermarks and stored day/week evidence — does not trigger ingest or refresh. Every pipeline includes always-present `dataTrust` (`status` + `verificationMethod`) as a unified trust summary derived from existing coverage signals (stale, gaps, productivity `verificationStatus`, AI `spendReconciliationStatus`, optional pipeline `sourceReconcile`, pipeline `status`). It does not replace Source verified, Spend matched, or Backfill complete fields. Optional `sourceReconcile` generalizes Source verified (count/checksum vs provider) for L2 reconcilers; omit/null when no scheduled reconcile snapshot exists. Productivity detail may include `selfHeal` (latest depth scan and week reconcile) read from stored activity rows; this GET does not run a scan. `selfHeal` is null when neither event exists. AI usage detail includes spend reconciliation (`spendReconciliationStatus`, `spendDataQuality`, provider and stored cent totals, `spendReconcileCheckedAt`) read from the refresh-status snapshot. This GET does not call Cursor or Claude. Productivity, HR, monitoring, and SDLC pipelines omit those spend fields. `nextScheduledAt` is the scheduled poll instant for `ai_usage`, `hris`, and `monitoring`. It is null for productivity and SDLC, when that sync worker is disabled, or when there has been no attempt (`hris`/`monitoring` use last status `never`). For `hris` and `monitoring`, the value is the next PHASE2 daily UTC cron after now (`15 2` / `30 2`, not lastAttempt plus interval) and is therefore in the future when set. For `ai_usage`, it is the next weekly workspace slot and a past instant means that poll is overdue; it is not moved forward to now and is not an ETA. Monitoring `sync` copies stored `issueCount`, `deploymentCount`, and `eventCount` (null when unset). HRIS leaves those three null. Requires workspace membership. Disconnected sources are omitted. Insights / Measure / Engineering Health response DTOs do not include `dataTrust`.
|
|
5220
5244
|
*/
|
|
5221
5245
|
get: operations["getWorkspaceIngestCoverage"];
|
|
5222
5246
|
put?: never;
|
|
@@ -6516,6 +6540,31 @@ export interface components {
|
|
|
6516
6540
|
/** @description Ceiling — stay at or below this many CI failures per engineer per week. `0` is valid. */
|
|
6517
6541
|
ciFailuresPerEngineerPerWeek?: number | null;
|
|
6518
6542
|
};
|
|
6543
|
+
/** @description Omitted dimension means a target of 100. Values of 100 are not stored. */
|
|
6544
|
+
DimensionTargetPercentsDto: {
|
|
6545
|
+
"ai-agent-readiness"?: number | null;
|
|
6546
|
+
"token-efficiency"?: number | null;
|
|
6547
|
+
"repo-hygiene"?: number | null;
|
|
6548
|
+
"stack-quality"?: number | null;
|
|
6549
|
+
"tests-qa"?: number | null;
|
|
6550
|
+
observability?: number | null;
|
|
6551
|
+
"api-contracts"?: number | null;
|
|
6552
|
+
"platform-governance"?: number | null;
|
|
6553
|
+
delivery?: number | null;
|
|
6554
|
+
};
|
|
6555
|
+
DimensionTargetsRepoOverrideDto: {
|
|
6556
|
+
/** @description Dimensions left out of this repository's score. */
|
|
6557
|
+
disabledDimensions?: components["schemas"]["ReadinessDimensionId"][];
|
|
6558
|
+
targets?: components["schemas"]["DimensionTargetPercentsDto"];
|
|
6559
|
+
};
|
|
6560
|
+
/** @description Agentic Foundation dimension targets. Empty object means every dimension is scored and the target is 100. */
|
|
6561
|
+
DimensionTargetsDto: {
|
|
6562
|
+
targets?: components["schemas"]["DimensionTargetPercentsDto"];
|
|
6563
|
+
/** @description Keys are in-scope repository ids. */
|
|
6564
|
+
repoOverrides?: {
|
|
6565
|
+
[key: string]: components["schemas"]["DimensionTargetsRepoOverrideDto"];
|
|
6566
|
+
};
|
|
6567
|
+
};
|
|
6519
6568
|
AiEmailAliasEntryDto: {
|
|
6520
6569
|
/**
|
|
6521
6570
|
* Format: email
|
|
@@ -10813,6 +10862,36 @@ export interface components {
|
|
|
10813
10862
|
/** @description Monitoring meta event count. Null for HRIS and when the stored count is unset. */
|
|
10814
10863
|
eventCount?: number | null;
|
|
10815
10864
|
};
|
|
10865
|
+
/**
|
|
10866
|
+
* @description Pipeline-level source reconcile outcome (L2). Same values as productivity Source verified, plus `not_applicable` when the provider has no countable or checksum reconcile surface.
|
|
10867
|
+
* @enum {string}
|
|
10868
|
+
*/
|
|
10869
|
+
IngestCoverageSourceReconcileStatus: "unverified" | "verified" | "below_target" | "insufficient_sample" | "stale" | "not_applicable";
|
|
10870
|
+
/**
|
|
10871
|
+
* @description Which L2 reconcile check produced `sourceReconcile.verificationStatus`. Prefer `source_count` or `checksum` when mapping into `dataTrust.verificationMethod`.
|
|
10872
|
+
* @enum {string}
|
|
10873
|
+
*/
|
|
10874
|
+
IngestCoverageSourceReconcileMethod: "source_count" | "checksum" | "none";
|
|
10875
|
+
/** @description Generalized Source verified / reconcile snapshot on a coverage pipeline. Optional until a scheduled reconciler writes a row. Does not replace nested productivity verify fields or AI spend reconcile. */
|
|
10876
|
+
IngestCoverageSourceReconcileDto: {
|
|
10877
|
+
verificationStatus: components["schemas"]["IngestCoverageSourceReconcileStatus"];
|
|
10878
|
+
/** @description Minimum provider-vs-stored capture for a count reconcile (0–100, up to two decimals). Null when the check is checksum-only, thin, not applicable, or no sample exists. */
|
|
10879
|
+
sourceCapturePercent: number | null;
|
|
10880
|
+
verificationMethod: components["schemas"]["IngestCoverageSourceReconcileMethod"];
|
|
10881
|
+
/**
|
|
10882
|
+
* Format: date-time
|
|
10883
|
+
* @description When the snapshot was written. Null when unverified with no row.
|
|
10884
|
+
*/
|
|
10885
|
+
checkedAt: string | null;
|
|
10886
|
+
/** @description Provider-side count for the reconcile window. Null when unset or N/A. */
|
|
10887
|
+
providerCount: number | null;
|
|
10888
|
+
/** @description Stored platform count for the reconcile window. Null when unset or N/A. */
|
|
10889
|
+
storedCount: number | null;
|
|
10890
|
+
/** @description Provider-side checksum (opaque). Null when method is not checksum. */
|
|
10891
|
+
providerChecksum: string | null;
|
|
10892
|
+
/** @description Stored platform checksum (opaque). Null when method is not checksum. */
|
|
10893
|
+
storedChecksum: string | null;
|
|
10894
|
+
};
|
|
10816
10895
|
/**
|
|
10817
10896
|
* @description Unified data-trust summary for one ingest-coverage pipeline. Derived from existing coverage signals; does not rename Source verified, Spend matched, or Backfill complete.
|
|
10818
10897
|
* @enum {string}
|
|
@@ -10846,7 +10925,7 @@ export interface components {
|
|
|
10846
10925
|
IngestCoveragePipelineDto: {
|
|
10847
10926
|
id: string;
|
|
10848
10927
|
/** @enum {string} */
|
|
10849
|
-
kind: "productivity_github" | "ai_usage" | "sdlc_github" | "monitoring" | "hris";
|
|
10928
|
+
kind: "productivity_github" | "productivity_bitbucket" | "ai_usage" | "sdlc_github" | "monitoring" | "hris" | "jira" | "pagerduty";
|
|
10850
10929
|
provider?: string | null;
|
|
10851
10930
|
/** @enum {string} */
|
|
10852
10931
|
status: "not_started" | "backfilling" | "incremental" | "complete" | "failed" | "in_progress";
|
|
@@ -10879,6 +10958,8 @@ export interface components {
|
|
|
10879
10958
|
ai?: components["schemas"]["IngestCoverageAiDetailDto"];
|
|
10880
10959
|
sdlc?: components["schemas"]["IngestCoverageSdlcDetailDto"];
|
|
10881
10960
|
sync?: components["schemas"]["IngestCoverageSyncDetailDto"];
|
|
10961
|
+
/** @description Optional L2 source-reconcile snapshot (count / checksum vs provider API). Null when no scheduled reconcile has written a row for this pipeline. Does not replace nested productivity verify fields or AI spend reconcile. */
|
|
10962
|
+
sourceReconcile?: components["schemas"]["IngestCoverageSourceReconcileDto"] | null;
|
|
10882
10963
|
dataTrust: components["schemas"]["DataTrustDto"];
|
|
10883
10964
|
};
|
|
10884
10965
|
IngestCoverageDto: {
|
|
@@ -10890,7 +10971,7 @@ export interface components {
|
|
|
10890
10971
|
/** Format: uuid */
|
|
10891
10972
|
runId: string;
|
|
10892
10973
|
/** @enum {string} */
|
|
10893
|
-
kind: "productivity_github" | "ai_usage" | "sdlc_github" | "monitoring" | "hris";
|
|
10974
|
+
kind: "productivity_github" | "productivity_bitbucket" | "ai_usage" | "sdlc_github" | "monitoring" | "hris" | "jira" | "pagerduty";
|
|
10894
10975
|
/** Format: date-time */
|
|
10895
10976
|
startedAt: string;
|
|
10896
10977
|
/** Format: date-time */
|
|
@@ -13284,6 +13365,9 @@ export type AiModelPolicyConfigDto = components['schemas']['AiModelPolicyConfigD
|
|
|
13284
13365
|
export type AiModelPolicyPersonOverrideDto = components['schemas']['AiModelPolicyPersonOverrideDto'];
|
|
13285
13366
|
export type AiModelPolicyDto = components['schemas']['AiModelPolicyDto'];
|
|
13286
13367
|
export type ProductivityTargetsDto = components['schemas']['ProductivityTargetsDto'];
|
|
13368
|
+
export type DimensionTargetPercentsDto = components['schemas']['DimensionTargetPercentsDto'];
|
|
13369
|
+
export type DimensionTargetsRepoOverrideDto = components['schemas']['DimensionTargetsRepoOverrideDto'];
|
|
13370
|
+
export type DimensionTargetsDto = components['schemas']['DimensionTargetsDto'];
|
|
13287
13371
|
export type AiEmailAliasEntryDto = components['schemas']['AiEmailAliasEntryDto'];
|
|
13288
13372
|
export type AiEmailAliasesDto = components['schemas']['AiEmailAliasesDto'];
|
|
13289
13373
|
export type TestConnectionResponseDto = components['schemas']['TestConnectionResponseDto'];
|
|
@@ -13644,6 +13728,9 @@ export type IngestCoverageAiDetailDto = components['schemas']['IngestCoverageAiD
|
|
|
13644
13728
|
export type IngestCoverageSdlcComponentDto = components['schemas']['IngestCoverageSdlcComponentDto'];
|
|
13645
13729
|
export type IngestCoverageSdlcDetailDto = components['schemas']['IngestCoverageSdlcDetailDto'];
|
|
13646
13730
|
export type IngestCoverageSyncDetailDto = components['schemas']['IngestCoverageSyncDetailDto'];
|
|
13731
|
+
export type IngestCoverageSourceReconcileStatus = components['schemas']['IngestCoverageSourceReconcileStatus'];
|
|
13732
|
+
export type IngestCoverageSourceReconcileMethod = components['schemas']['IngestCoverageSourceReconcileMethod'];
|
|
13733
|
+
export type IngestCoverageSourceReconcileDto = components['schemas']['IngestCoverageSourceReconcileDto'];
|
|
13647
13734
|
export type DataTrustStatus = components['schemas']['DataTrustStatus'];
|
|
13648
13735
|
export type DataTrustVerificationMethod = components['schemas']['DataTrustVerificationMethod'];
|
|
13649
13736
|
export type DataTrustDto = components['schemas']['DataTrustDto'];
|
|
@@ -16836,6 +16923,91 @@ export interface operations {
|
|
|
16836
16923
|
};
|
|
16837
16924
|
};
|
|
16838
16925
|
};
|
|
16926
|
+
getWorkspaceDimensionTargets: {
|
|
16927
|
+
parameters: {
|
|
16928
|
+
query?: never;
|
|
16929
|
+
header?: never;
|
|
16930
|
+
path: {
|
|
16931
|
+
workspaceId: components["parameters"]["WorkspaceId"];
|
|
16932
|
+
};
|
|
16933
|
+
cookie?: never;
|
|
16934
|
+
};
|
|
16935
|
+
requestBody?: never;
|
|
16936
|
+
responses: {
|
|
16937
|
+
/** @description Current targets (may be empty) */
|
|
16938
|
+
200: {
|
|
16939
|
+
headers: {
|
|
16940
|
+
[name: string]: unknown;
|
|
16941
|
+
};
|
|
16942
|
+
content: {
|
|
16943
|
+
"application/json": components["schemas"]["DimensionTargetsDto"];
|
|
16944
|
+
};
|
|
16945
|
+
};
|
|
16946
|
+
401: components["responses"]["Unauthorized"];
|
|
16947
|
+
403: components["responses"]["Forbidden"];
|
|
16948
|
+
/** @description Workspace does not exist or malformed workspaceId */
|
|
16949
|
+
404: {
|
|
16950
|
+
headers: {
|
|
16951
|
+
[name: string]: unknown;
|
|
16952
|
+
};
|
|
16953
|
+
content: {
|
|
16954
|
+
"application/json": components["schemas"]["ErrorMessageDto"];
|
|
16955
|
+
};
|
|
16956
|
+
};
|
|
16957
|
+
};
|
|
16958
|
+
};
|
|
16959
|
+
putWorkspaceDimensionTargets: {
|
|
16960
|
+
parameters: {
|
|
16961
|
+
query?: never;
|
|
16962
|
+
header?: never;
|
|
16963
|
+
path: {
|
|
16964
|
+
workspaceId: components["parameters"]["WorkspaceId"];
|
|
16965
|
+
};
|
|
16966
|
+
cookie?: never;
|
|
16967
|
+
};
|
|
16968
|
+
requestBody: {
|
|
16969
|
+
content: {
|
|
16970
|
+
"application/json": components["schemas"]["DimensionTargetsDto"];
|
|
16971
|
+
};
|
|
16972
|
+
};
|
|
16973
|
+
responses: {
|
|
16974
|
+
/** @description Targets persisted (or cleared). */
|
|
16975
|
+
204: {
|
|
16976
|
+
headers: {
|
|
16977
|
+
[name: string]: unknown;
|
|
16978
|
+
};
|
|
16979
|
+
content?: never;
|
|
16980
|
+
};
|
|
16981
|
+
/** @description Invalid payload or repository is not in scan scope */
|
|
16982
|
+
400: {
|
|
16983
|
+
headers: {
|
|
16984
|
+
[name: string]: unknown;
|
|
16985
|
+
};
|
|
16986
|
+
content: {
|
|
16987
|
+
"application/json": components["schemas"]["ErrorMessageDto"];
|
|
16988
|
+
};
|
|
16989
|
+
};
|
|
16990
|
+
401: components["responses"]["Unauthorized"];
|
|
16991
|
+
/** @description Forbidden — workspace admin required */
|
|
16992
|
+
403: {
|
|
16993
|
+
headers: {
|
|
16994
|
+
[name: string]: unknown;
|
|
16995
|
+
};
|
|
16996
|
+
content: {
|
|
16997
|
+
"application/json": components["schemas"]["ErrorMessageDto"];
|
|
16998
|
+
};
|
|
16999
|
+
};
|
|
17000
|
+
/** @description Workspace does not exist or malformed workspaceId */
|
|
17001
|
+
404: {
|
|
17002
|
+
headers: {
|
|
17003
|
+
[name: string]: unknown;
|
|
17004
|
+
};
|
|
17005
|
+
content: {
|
|
17006
|
+
"application/json": components["schemas"]["ErrorMessageDto"];
|
|
17007
|
+
};
|
|
17008
|
+
};
|
|
17009
|
+
};
|
|
17010
|
+
};
|
|
16839
17011
|
putTenantSources: {
|
|
16840
17012
|
parameters: {
|
|
16841
17013
|
query?: never;
|
|
@@ -28104,7 +28276,7 @@ export interface operations {
|
|
|
28104
28276
|
parameters: {
|
|
28105
28277
|
query?: {
|
|
28106
28278
|
/** @description Coverage pipeline kind. Omit to list every kind stored for the workspace. */
|
|
28107
|
-
kind?: "productivity_github" | "ai_usage" | "sdlc_github" | "monitoring" | "hris";
|
|
28279
|
+
kind?: "productivity_github" | "productivity_bitbucket" | "ai_usage" | "sdlc_github" | "monitoring" | "hris" | "jira" | "pagerduty";
|
|
28108
28280
|
/** @description Page size. Default 20. Values above 100 are rejected. */
|
|
28109
28281
|
limit?: number;
|
|
28110
28282
|
};
|
package/src/index.ts
CHANGED
|
@@ -1457,6 +1457,47 @@ export interface IngestCoverageProductivitySelfHealDto {
|
|
|
1457
1457
|
export type IngestCoverageVerificationStatus =
|
|
1458
1458
|
"unverified" | "verified" | "below_target" | "insufficient_sample" | "stale";
|
|
1459
1459
|
|
|
1460
|
+
/**
|
|
1461
|
+
* Pipeline-level source reconcile outcome (L2).
|
|
1462
|
+
* Reuses the productivity Source verified statuses and adds `not_applicable`
|
|
1463
|
+
* when a connected provider exposes no countable/checksum reconcile surface.
|
|
1464
|
+
*/
|
|
1465
|
+
export type IngestCoverageSourceReconcileStatus =
|
|
1466
|
+
IngestCoverageVerificationStatus | "not_applicable";
|
|
1467
|
+
|
|
1468
|
+
/**
|
|
1469
|
+
* Which L2 reconcile check produced `sourceReconcile.verificationStatus`.
|
|
1470
|
+
* Maps into L1 `dataTrust.verificationMethod` (`source_count` / `checksum`).
|
|
1471
|
+
*/
|
|
1472
|
+
export type IngestCoverageSourceReconcileMethod = "source_count" | "checksum" | "none";
|
|
1473
|
+
|
|
1474
|
+
/**
|
|
1475
|
+
* Generalized Source verified / reconcile snapshot on a coverage pipeline.
|
|
1476
|
+
* Optional until a scheduled reconciler has written a row. Productivity GitHub
|
|
1477
|
+
* keeps nested `productivity.verificationStatus` / `sourceCapturePercent`;
|
|
1478
|
+
* AI spend stays on `ai.spendReconciliationStatus`.
|
|
1479
|
+
*/
|
|
1480
|
+
export interface IngestCoverageSourceReconcileDto {
|
|
1481
|
+
verificationStatus: IngestCoverageSourceReconcileStatus;
|
|
1482
|
+
/**
|
|
1483
|
+
* Minimum provider-vs-stored capture for a count reconcile (0–100, up to two
|
|
1484
|
+
* decimals). Null when the check is checksum-only, thin, not applicable, or
|
|
1485
|
+
* no sample exists.
|
|
1486
|
+
*/
|
|
1487
|
+
sourceCapturePercent: number | null;
|
|
1488
|
+
verificationMethod: IngestCoverageSourceReconcileMethod;
|
|
1489
|
+
/** When the snapshot was written. Null when status is unverified with no row. */
|
|
1490
|
+
checkedAt: string | null;
|
|
1491
|
+
/** Provider-side count for the reconcile window. Null when unset or N/A. */
|
|
1492
|
+
providerCount: number | null;
|
|
1493
|
+
/** Stored platform count for the reconcile window. Null when unset or N/A. */
|
|
1494
|
+
storedCount: number | null;
|
|
1495
|
+
/** Provider-side checksum (opaque). Null when method is not checksum. */
|
|
1496
|
+
providerChecksum: string | null;
|
|
1497
|
+
/** Stored platform checksum (opaque). Null when method is not checksum. */
|
|
1498
|
+
storedChecksum: string | null;
|
|
1499
|
+
}
|
|
1500
|
+
|
|
1460
1501
|
export interface IngestCoverageProductivityDetailDto {
|
|
1461
1502
|
phase?: "recent" | "historical" | "complete" | null;
|
|
1462
1503
|
historicalWeekStart?: string | null;
|
|
@@ -1564,7 +1605,14 @@ export interface IngestCoverageSyncDetailDto {
|
|
|
1564
1605
|
}
|
|
1565
1606
|
|
|
1566
1607
|
export type IngestCoveragePipelineKind =
|
|
1567
|
-
|
|
1608
|
+
| "productivity_github"
|
|
1609
|
+
| "productivity_bitbucket"
|
|
1610
|
+
| "ai_usage"
|
|
1611
|
+
| "sdlc_github"
|
|
1612
|
+
| "monitoring"
|
|
1613
|
+
| "hris"
|
|
1614
|
+
| "jira"
|
|
1615
|
+
| "pagerduty";
|
|
1568
1616
|
|
|
1569
1617
|
export type IngestCoveragePipelineStatus =
|
|
1570
1618
|
"not_started" | "backfilling" | "incremental" | "complete" | "failed" | "in_progress";
|
|
@@ -1628,6 +1676,12 @@ export interface IngestCoveragePipelineDto {
|
|
|
1628
1676
|
ai?: IngestCoverageAiDetailDto;
|
|
1629
1677
|
sdlc?: IngestCoverageSdlcDetailDto;
|
|
1630
1678
|
sync?: IngestCoverageSyncDetailDto;
|
|
1679
|
+
/**
|
|
1680
|
+
* Optional L2 source-reconcile snapshot (count / checksum vs provider API).
|
|
1681
|
+
* Null/omit when no scheduled reconcile has written a row for this pipeline.
|
|
1682
|
+
* Does not replace nested productivity verify fields or AI spend reconcile.
|
|
1683
|
+
*/
|
|
1684
|
+
sourceReconcile?: IngestCoverageSourceReconcileDto | null;
|
|
1631
1685
|
/**
|
|
1632
1686
|
* Always present. Unified Data trust summary for this pipeline.
|
|
1633
1687
|
* Additive to Source verified / Spend matched / Backfill complete.
|