@cesar-richard/git-connector-sdk 4.11.0 → 4.12.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.
Files changed (2) hide show
  1. package/dist/schema.d.ts +454 -0
  2. package/package.json +1 -1
package/dist/schema.d.ts CHANGED
@@ -148,6 +148,22 @@ export interface paths {
148
148
  patch: operations["patchV1ApplicationsBySlugDelivery-rules"];
149
149
  trace?: never;
150
150
  };
151
+ "/v1/projects/{source}/{projectKey}/workflow-rules": {
152
+ parameters: {
153
+ query?: never;
154
+ header?: never;
155
+ path?: never;
156
+ cookie?: never;
157
+ };
158
+ get: operations["getV1ProjectsBySourceByProjectKeyWorkflow-rules"];
159
+ put: operations["putV1ProjectsBySourceByProjectKeyWorkflow-rules"];
160
+ post?: never;
161
+ delete?: never;
162
+ options?: never;
163
+ head?: never;
164
+ patch?: never;
165
+ trace?: never;
166
+ };
151
167
  "/v1/projects": {
152
168
  parameters: {
153
169
  query?: never;
@@ -2077,6 +2093,16 @@ export interface components {
2077
2093
  severity: string | null;
2078
2094
  /** @description Slugs of the applications (see /v1/applications) that claim this item. A code-repo item (PR/MR) is claimed by the application that declares its repo; an issue is claimed by label match (declared `issueLabels`) OR by being referenced through a CONFIRMED link from a PR/MR in one of the application's code repos OR by being hosted in one of those code repos itself (the GitHub shape where the code repo is also the tracker) — the signals are a union, so the array can hold more than one slug. ORDER IS SIGNIFICANT: the array is sorted by DECREASING attachment-signal strength — a `label` claim first, then a `link` claim, then a `code_repo` claim, the order declared in the application config breaking ties at equal strength — and the FIRST slug is the application whose delivery rules govern this issue (its own rules per field, falling back to the tracker's field by field — see GET /v1/applications/{slug}/delivery-rules). A hand-placed scoped label is an assertion of ownership; an issue merely living in a code repo is an organisational coincidence, so the former governs. Empty array when the item is not attached to any application, in which case the tracker's rules govern. */
2079
2095
  applications: string[];
2096
+ /** @description This issue's position in the delivery flow, computed server-side from the tracker's configured workflow rules (see GET|PUT /v1/projects/{source}/{projectKey}/workflow-rules) so clients stop each recomputing it. Closure is the first stage of the cascade and fires independently of any configuration — a closed issue always returns `origin: 'closed'`, even with zero rules configured for its tracker. Absent any OTHER matching configuration, `origin` falls back to `signals` rather than erroring. */
2097
+ workflow: {
2098
+ state: "todo" | "doing" | "review" | "delivered" | "blocked" | "done";
2099
+ /** @description The label (as matched) or native status string that produced `state`, when `origin` is `label` or `status`. `null` when `origin` is `closed` or `signals`. */
2100
+ stage: string | null;
2101
+ /** @description Which stage of the cascade decided `state`: the issue being closed, a matched native-status rule, a matched label rule, or the signals fallback read off linked PR/MR activity. `status` is configured but not yet ingested — reading GitLab's native work-item status and a named field on a GitHub Project v2 are both deferred for want of live credentials, so `_gc.nativeStatus` has no writer today and `origin` cannot currently come back as `status`; a declared `statusSource` is forward-looking configuration for when that ingestion lands. */
2102
+ origin: "closed" | "status" | "label" | "signals";
2103
+ /** @description When the current state began. `null` means the underlying source said nothing — never a default — and this can happen on EVERY origin, not just `status`/`signals`: for `origin: 'closed'` it is the payload's `closed_at`, which can be absent; for `origin: 'label'` it comes from the label history (`_gc.statusHistory`), and GitHub issues carry no `_gc` at all (only `providers/gitlab.ts` writes it), so every GitHub issue resolved by a label rule returns `stateSince: null` — plus roughly 7% of GitLab issues whose activity predates history tracking. A consumer building a "depuis N jours" display should treat `null` as missing data, not as a bug. */
2104
+ stateSince: string | null;
2105
+ };
2080
2106
  iteration: {
2081
2107
  id: string | number;
2082
2108
  title: string;
@@ -2314,6 +2340,16 @@ export interface components {
2314
2340
  severity: string | null;
2315
2341
  /** @description Slugs of the applications (see /v1/applications) that claim this item. A code-repo item (PR/MR) is claimed by the application that declares its repo; an issue is claimed by label match (declared `issueLabels`) OR by being referenced through a CONFIRMED link from a PR/MR in one of the application's code repos OR by being hosted in one of those code repos itself (the GitHub shape where the code repo is also the tracker) — the signals are a union, so the array can hold more than one slug. ORDER IS SIGNIFICANT: the array is sorted by DECREASING attachment-signal strength — a `label` claim first, then a `link` claim, then a `code_repo` claim, the order declared in the application config breaking ties at equal strength — and the FIRST slug is the application whose delivery rules govern this issue (its own rules per field, falling back to the tracker's field by field — see GET /v1/applications/{slug}/delivery-rules). A hand-placed scoped label is an assertion of ownership; an issue merely living in a code repo is an organisational coincidence, so the former governs. Empty array when the item is not attached to any application, in which case the tracker's rules govern. */
2316
2342
  applications: string[];
2343
+ /** @description This issue's position in the delivery flow, computed server-side from the tracker's configured workflow rules (see GET|PUT /v1/projects/{source}/{projectKey}/workflow-rules) so clients stop each recomputing it. Closure is the first stage of the cascade and fires independently of any configuration — a closed issue always returns `origin: 'closed'`, even with zero rules configured for its tracker. Absent any OTHER matching configuration, `origin` falls back to `signals` rather than erroring. */
2344
+ workflow: {
2345
+ state: "todo" | "doing" | "review" | "delivered" | "blocked" | "done";
2346
+ /** @description The label (as matched) or native status string that produced `state`, when `origin` is `label` or `status`. `null` when `origin` is `closed` or `signals`. */
2347
+ stage: string | null;
2348
+ /** @description Which stage of the cascade decided `state`: the issue being closed, a matched native-status rule, a matched label rule, or the signals fallback read off linked PR/MR activity. `status` is configured but not yet ingested — reading GitLab's native work-item status and a named field on a GitHub Project v2 are both deferred for want of live credentials, so `_gc.nativeStatus` has no writer today and `origin` cannot currently come back as `status`; a declared `statusSource` is forward-looking configuration for when that ingestion lands. */
2349
+ origin: "closed" | "status" | "label" | "signals";
2350
+ /** @description When the current state began. `null` means the underlying source said nothing — never a default — and this can happen on EVERY origin, not just `status`/`signals`: for `origin: 'closed'` it is the payload's `closed_at`, which can be absent; for `origin: 'label'` it comes from the label history (`_gc.statusHistory`), and GitHub issues carry no `_gc` at all (only `providers/gitlab.ts` writes it), so every GitHub issue resolved by a label rule returns `stateSince: null` — plus roughly 7% of GitLab issues whose activity predates history tracking. A consumer building a "depuis N jours" display should treat `null` as missing data, not as a bug. */
2351
+ stateSince: string | null;
2352
+ };
2317
2353
  iteration: {
2318
2354
  id: string | number;
2319
2355
  title: string;
@@ -2494,6 +2530,76 @@ export interface components {
2494
2530
  limit: string | number;
2495
2531
  offset?: string | number;
2496
2532
  };
2533
+ WorkflowLabelRule: {
2534
+ /** @description Label prefix, matched case-insensitively against the part of the label name before any parenthesis (so a WIP limit like `=::Doing (3)` still matches `=::Doing`). */
2535
+ prefix: string;
2536
+ state: "todo" | "doing" | "review" | "delivered" | "blocked" | "done";
2537
+ };
2538
+ WorkflowRulesPut: {
2539
+ labelRules: {
2540
+ /** @description Label prefix, matched case-insensitively against the part of the label name before any parenthesis (so a WIP limit like `=::Doing (3)` still matches `=::Doing`). */
2541
+ prefix: string;
2542
+ state: "todo" | "doing" | "review" | "delivered" | "blocked" | "done";
2543
+ }[];
2544
+ /** @description Where ingestion WOULD read the issue's native status from — GitLab's own status field, or a named field on a numbered GitHub Project. `null` means no native status is read and the calculation falls through to labels/signals. Configured but not yet ingested: reading GitLab's native work-item status and a named GitHub Project v2 field are both deferred (no live credentials yet), so `_gc.nativeStatus` has no writer today regardless of what is declared here — a non-null `statusSource` is forward-looking configuration for when that ingestion lands, not a live data path. This is NOT read by the calculation itself (`WorkflowRules` in `workflow/computeState.ts` carries no `statusSource`): it is an ingestion concern, stored here only because the config screen edits both together. */
2545
+ statusSource: {
2546
+ /** @constant */
2547
+ kind: "gitlab-native";
2548
+ } | {
2549
+ /** @constant */
2550
+ kind: "github-project";
2551
+ projectNumber: string | number;
2552
+ fieldName: string;
2553
+ } | null;
2554
+ statusRules: {
2555
+ /** @description Matched EXACTLY against the tracker-native status resolved via `statusSource` — no prefix matching, because a structured field carries no WIP-limit suffix to strip. */
2556
+ value: string;
2557
+ state: "todo" | "doing" | "review" | "delivered" | "blocked" | "done";
2558
+ }[];
2559
+ flowFamilies: string[];
2560
+ };
2561
+ WorkflowRulesRow: {
2562
+ source: "github" | "gitlab";
2563
+ projectKey: string;
2564
+ labelRules: {
2565
+ /** @description Label prefix, matched case-insensitively against the part of the label name before any parenthesis (so a WIP limit like `=::Doing (3)` still matches `=::Doing`). */
2566
+ prefix: string;
2567
+ state: "todo" | "doing" | "review" | "delivered" | "blocked" | "done";
2568
+ }[];
2569
+ /** @description Where ingestion WOULD read the issue's native status from — GitLab's own status field, or a named field on a numbered GitHub Project. `null` means no native status is read and the calculation falls through to labels/signals. Configured but not yet ingested: reading GitLab's native work-item status and a named GitHub Project v2 field are both deferred (no live credentials yet), so `_gc.nativeStatus` has no writer today regardless of what is declared here — a non-null `statusSource` is forward-looking configuration for when that ingestion lands, not a live data path. This is NOT read by the calculation itself (`WorkflowRules` in `workflow/computeState.ts` carries no `statusSource`): it is an ingestion concern, stored here only because the config screen edits both together. */
2570
+ statusSource: {
2571
+ /** @constant */
2572
+ kind: "gitlab-native";
2573
+ } | {
2574
+ /** @constant */
2575
+ kind: "github-project";
2576
+ projectNumber: string | number;
2577
+ fieldName: string;
2578
+ } | null;
2579
+ statusRules: {
2580
+ /** @description Matched EXACTLY against the tracker-native status resolved via `statusSource` — no prefix matching, because a structured field carries no WIP-limit suffix to strip. */
2581
+ value: string;
2582
+ state: "todo" | "doing" | "review" | "delivered" | "blocked" | "done";
2583
+ }[];
2584
+ /** @description Label prefixes considered part of the workflow's flow, e.g. a whole column family like `=::`. Without this declaration, a label that is simply not part of the flow (unrelated to workflow state) cannot be told apart from a flow label whose column was renamed and is no longer covered by any `labelRules` — both would just be silently ignored. Declaring the family lets the calculation tell the two apart internally, but that distinction is NOT exposed on any `/v1` response (no `unmatchedFlowLabels` field exists in this API) — it is config-screen information only, surfaced live on the per-tracker workflow-rules editor (`WorkflowRulesCard`) as the list of flow labels no rule currently covers. */
2585
+ flowFamilies: string[];
2586
+ };
2587
+ WorkflowState: "todo" | "doing" | "review" | "delivered" | "blocked" | "done";
2588
+ WorkflowStatusRule: {
2589
+ /** @description Matched EXACTLY against the tracker-native status resolved via `statusSource` — no prefix matching, because a structured field carries no WIP-limit suffix to strip. */
2590
+ value: string;
2591
+ state: "todo" | "doing" | "review" | "delivered" | "blocked" | "done";
2592
+ };
2593
+ /** @description Where ingestion WOULD read the issue's native status from — GitLab's own status field, or a named field on a numbered GitHub Project. `null` means no native status is read and the calculation falls through to labels/signals. Configured but not yet ingested: reading GitLab's native work-item status and a named GitHub Project v2 field are both deferred (no live credentials yet), so `_gc.nativeStatus` has no writer today regardless of what is declared here — a non-null `statusSource` is forward-looking configuration for when that ingestion lands, not a live data path. This is NOT read by the calculation itself (`WorkflowRules` in `workflow/computeState.ts` carries no `statusSource`): it is an ingestion concern, stored here only because the config screen edits both together. */
2594
+ WorkflowStatusSource: {
2595
+ /** @constant */
2596
+ kind: "gitlab-native";
2597
+ } | {
2598
+ /** @constant */
2599
+ kind: "github-project";
2600
+ projectNumber: string | number;
2601
+ fieldName: string;
2602
+ } | null;
2497
2603
  };
2498
2604
  responses: never;
2499
2605
  parameters: never;
@@ -2509,6 +2615,8 @@ export interface operations {
2509
2615
  /** @description Filter by iteration. Values: 'current' (the GitLab native iteration in state="current", typically a 2-week sprint — NOT a calendar month), 'none' (work items without any iteration), or a numeric iteration id. For calendar-based filtering (monthly CRA, etc.), use updatedSince + updatedBefore. */
2510
2616
  iteration?: string;
2511
2617
  state?: string;
2618
+ /** @description Filters issues by their COMPUTED workflow state (WorkItem.workflow.state: 'todo'|'doing'|'review'|'delivered'|'blocked'|'done') — a different axis from `state` above (issue lifecycle), never folded into it, and the two compose freely (e.g. state=open&workflowState=blocked asks for open issues currently blocked). `workflow.state` is computed by `composeWorkItem` AFTER composition (labels, statusHistory and linked PR/MR signals all feed it), so this switches the request to the EXHAUSTIVE evaluation path (like ?application=) and `total` describes the truly filtered set, never a pre-filter SQL COUNT(*) — the defect #72 shipped on /v1/deliverables. `state` keeps its own default ('open') with no implicit change: `?workflowState=done` alone answers 'open issues whose computed workflow state is done' (work finished on the board but never closed) — pass state=all explicitly to include closed issues too. */
2619
+ workflowState?: "todo" | "doing" | "review" | "delivered" | "blocked" | "done";
2512
2620
  source?: string;
2513
2621
  projectKey?: string;
2514
2622
  assignee?: string;
@@ -2606,6 +2714,16 @@ export interface operations {
2606
2714
  severity: string | null;
2607
2715
  /** @description Slugs of the applications (see /v1/applications) that claim this item. A code-repo item (PR/MR) is claimed by the application that declares its repo; an issue is claimed by label match (declared `issueLabels`) OR by being referenced through a CONFIRMED link from a PR/MR in one of the application's code repos OR by being hosted in one of those code repos itself (the GitHub shape where the code repo is also the tracker) — the signals are a union, so the array can hold more than one slug. ORDER IS SIGNIFICANT: the array is sorted by DECREASING attachment-signal strength — a `label` claim first, then a `link` claim, then a `code_repo` claim, the order declared in the application config breaking ties at equal strength — and the FIRST slug is the application whose delivery rules govern this issue (its own rules per field, falling back to the tracker's field by field — see GET /v1/applications/{slug}/delivery-rules). A hand-placed scoped label is an assertion of ownership; an issue merely living in a code repo is an organisational coincidence, so the former governs. Empty array when the item is not attached to any application, in which case the tracker's rules govern. */
2608
2716
  applications: string[];
2717
+ /** @description This issue's position in the delivery flow, computed server-side from the tracker's configured workflow rules (see GET|PUT /v1/projects/{source}/{projectKey}/workflow-rules) so clients stop each recomputing it. Closure is the first stage of the cascade and fires independently of any configuration — a closed issue always returns `origin: 'closed'`, even with zero rules configured for its tracker. Absent any OTHER matching configuration, `origin` falls back to `signals` rather than erroring. */
2718
+ workflow: {
2719
+ state: "todo" | "doing" | "review" | "delivered" | "blocked" | "done";
2720
+ /** @description The label (as matched) or native status string that produced `state`, when `origin` is `label` or `status`. `null` when `origin` is `closed` or `signals`. */
2721
+ stage: string | null;
2722
+ /** @description Which stage of the cascade decided `state`: the issue being closed, a matched native-status rule, a matched label rule, or the signals fallback read off linked PR/MR activity. `status` is configured but not yet ingested — reading GitLab's native work-item status and a named field on a GitHub Project v2 are both deferred for want of live credentials, so `_gc.nativeStatus` has no writer today and `origin` cannot currently come back as `status`; a declared `statusSource` is forward-looking configuration for when that ingestion lands. */
2723
+ origin: "closed" | "status" | "label" | "signals";
2724
+ /** @description When the current state began. `null` means the underlying source said nothing — never a default — and this can happen on EVERY origin, not just `status`/`signals`: for `origin: 'closed'` it is the payload's `closed_at`, which can be absent; for `origin: 'label'` it comes from the label history (`_gc.statusHistory`), and GitHub issues carry no `_gc` at all (only `providers/gitlab.ts` writes it), so every GitHub issue resolved by a label rule returns `stateSince: null` — plus roughly 7% of GitLab issues whose activity predates history tracking. A consumer building a "depuis N jours" display should treat `null` as missing data, not as a bug. */
2725
+ stateSince: string | null;
2726
+ };
2609
2727
  iteration: {
2610
2728
  id: string | number;
2611
2729
  title: string;
@@ -2847,6 +2965,16 @@ export interface operations {
2847
2965
  severity: string | null;
2848
2966
  /** @description Slugs of the applications (see /v1/applications) that claim this item. A code-repo item (PR/MR) is claimed by the application that declares its repo; an issue is claimed by label match (declared `issueLabels`) OR by being referenced through a CONFIRMED link from a PR/MR in one of the application's code repos OR by being hosted in one of those code repos itself (the GitHub shape where the code repo is also the tracker) — the signals are a union, so the array can hold more than one slug. ORDER IS SIGNIFICANT: the array is sorted by DECREASING attachment-signal strength — a `label` claim first, then a `link` claim, then a `code_repo` claim, the order declared in the application config breaking ties at equal strength — and the FIRST slug is the application whose delivery rules govern this issue (its own rules per field, falling back to the tracker's field by field — see GET /v1/applications/{slug}/delivery-rules). A hand-placed scoped label is an assertion of ownership; an issue merely living in a code repo is an organisational coincidence, so the former governs. Empty array when the item is not attached to any application, in which case the tracker's rules govern. */
2849
2967
  applications: string[];
2968
+ /** @description This issue's position in the delivery flow, computed server-side from the tracker's configured workflow rules (see GET|PUT /v1/projects/{source}/{projectKey}/workflow-rules) so clients stop each recomputing it. Closure is the first stage of the cascade and fires independently of any configuration — a closed issue always returns `origin: 'closed'`, even with zero rules configured for its tracker. Absent any OTHER matching configuration, `origin` falls back to `signals` rather than erroring. */
2969
+ workflow: {
2970
+ state: "todo" | "doing" | "review" | "delivered" | "blocked" | "done";
2971
+ /** @description The label (as matched) or native status string that produced `state`, when `origin` is `label` or `status`. `null` when `origin` is `closed` or `signals`. */
2972
+ stage: string | null;
2973
+ /** @description Which stage of the cascade decided `state`: the issue being closed, a matched native-status rule, a matched label rule, or the signals fallback read off linked PR/MR activity. `status` is configured but not yet ingested — reading GitLab's native work-item status and a named field on a GitHub Project v2 are both deferred for want of live credentials, so `_gc.nativeStatus` has no writer today and `origin` cannot currently come back as `status`; a declared `statusSource` is forward-looking configuration for when that ingestion lands. */
2974
+ origin: "closed" | "status" | "label" | "signals";
2975
+ /** @description When the current state began. `null` means the underlying source said nothing — never a default — and this can happen on EVERY origin, not just `status`/`signals`: for `origin: 'closed'` it is the payload's `closed_at`, which can be absent; for `origin: 'label'` it comes from the label history (`_gc.statusHistory`), and GitHub issues carry no `_gc` at all (only `providers/gitlab.ts` writes it), so every GitHub issue resolved by a label rule returns `stateSince: null` — plus roughly 7% of GitLab issues whose activity predates history tracking. A consumer building a "depuis N jours" display should treat `null` as missing data, not as a bug. */
2976
+ stateSince: string | null;
2977
+ };
2850
2978
  iteration: {
2851
2979
  id: string | number;
2852
2980
  title: string;
@@ -3088,6 +3216,16 @@ export interface operations {
3088
3216
  severity: string | null;
3089
3217
  /** @description Slugs of the applications (see /v1/applications) that claim this item. A code-repo item (PR/MR) is claimed by the application that declares its repo; an issue is claimed by label match (declared `issueLabels`) OR by being referenced through a CONFIRMED link from a PR/MR in one of the application's code repos OR by being hosted in one of those code repos itself (the GitHub shape where the code repo is also the tracker) — the signals are a union, so the array can hold more than one slug. ORDER IS SIGNIFICANT: the array is sorted by DECREASING attachment-signal strength — a `label` claim first, then a `link` claim, then a `code_repo` claim, the order declared in the application config breaking ties at equal strength — and the FIRST slug is the application whose delivery rules govern this issue (its own rules per field, falling back to the tracker's field by field — see GET /v1/applications/{slug}/delivery-rules). A hand-placed scoped label is an assertion of ownership; an issue merely living in a code repo is an organisational coincidence, so the former governs. Empty array when the item is not attached to any application, in which case the tracker's rules govern. */
3090
3218
  applications: string[];
3219
+ /** @description This issue's position in the delivery flow, computed server-side from the tracker's configured workflow rules (see GET|PUT /v1/projects/{source}/{projectKey}/workflow-rules) so clients stop each recomputing it. Closure is the first stage of the cascade and fires independently of any configuration — a closed issue always returns `origin: 'closed'`, even with zero rules configured for its tracker. Absent any OTHER matching configuration, `origin` falls back to `signals` rather than erroring. */
3220
+ workflow: {
3221
+ state: "todo" | "doing" | "review" | "delivered" | "blocked" | "done";
3222
+ /** @description The label (as matched) or native status string that produced `state`, when `origin` is `label` or `status`. `null` when `origin` is `closed` or `signals`. */
3223
+ stage: string | null;
3224
+ /** @description Which stage of the cascade decided `state`: the issue being closed, a matched native-status rule, a matched label rule, or the signals fallback read off linked PR/MR activity. `status` is configured but not yet ingested — reading GitLab's native work-item status and a named field on a GitHub Project v2 are both deferred for want of live credentials, so `_gc.nativeStatus` has no writer today and `origin` cannot currently come back as `status`; a declared `statusSource` is forward-looking configuration for when that ingestion lands. */
3225
+ origin: "closed" | "status" | "label" | "signals";
3226
+ /** @description When the current state began. `null` means the underlying source said nothing — never a default — and this can happen on EVERY origin, not just `status`/`signals`: for `origin: 'closed'` it is the payload's `closed_at`, which can be absent; for `origin: 'label'` it comes from the label history (`_gc.statusHistory`), and GitHub issues carry no `_gc` at all (only `providers/gitlab.ts` writes it), so every GitHub issue resolved by a label rule returns `stateSince: null` — plus roughly 7% of GitLab issues whose activity predates history tracking. A consumer building a "depuis N jours" display should treat `null` as missing data, not as a bug. */
3227
+ stateSince: string | null;
3228
+ };
3091
3229
  iteration: {
3092
3230
  id: string | number;
3093
3231
  title: string;
@@ -3385,6 +3523,16 @@ export interface operations {
3385
3523
  severity: string | null;
3386
3524
  /** @description Slugs of the applications (see /v1/applications) that claim this item. A code-repo item (PR/MR) is claimed by the application that declares its repo; an issue is claimed by label match (declared `issueLabels`) OR by being referenced through a CONFIRMED link from a PR/MR in one of the application's code repos OR by being hosted in one of those code repos itself (the GitHub shape where the code repo is also the tracker) — the signals are a union, so the array can hold more than one slug. ORDER IS SIGNIFICANT: the array is sorted by DECREASING attachment-signal strength — a `label` claim first, then a `link` claim, then a `code_repo` claim, the order declared in the application config breaking ties at equal strength — and the FIRST slug is the application whose delivery rules govern this issue (its own rules per field, falling back to the tracker's field by field — see GET /v1/applications/{slug}/delivery-rules). A hand-placed scoped label is an assertion of ownership; an issue merely living in a code repo is an organisational coincidence, so the former governs. Empty array when the item is not attached to any application, in which case the tracker's rules govern. */
3387
3525
  applications: string[];
3526
+ /** @description This issue's position in the delivery flow, computed server-side from the tracker's configured workflow rules (see GET|PUT /v1/projects/{source}/{projectKey}/workflow-rules) so clients stop each recomputing it. Closure is the first stage of the cascade and fires independently of any configuration — a closed issue always returns `origin: 'closed'`, even with zero rules configured for its tracker. Absent any OTHER matching configuration, `origin` falls back to `signals` rather than erroring. */
3527
+ workflow: {
3528
+ state: "todo" | "doing" | "review" | "delivered" | "blocked" | "done";
3529
+ /** @description The label (as matched) or native status string that produced `state`, when `origin` is `label` or `status`. `null` when `origin` is `closed` or `signals`. */
3530
+ stage: string | null;
3531
+ /** @description Which stage of the cascade decided `state`: the issue being closed, a matched native-status rule, a matched label rule, or the signals fallback read off linked PR/MR activity. `status` is configured but not yet ingested — reading GitLab's native work-item status and a named field on a GitHub Project v2 are both deferred for want of live credentials, so `_gc.nativeStatus` has no writer today and `origin` cannot currently come back as `status`; a declared `statusSource` is forward-looking configuration for when that ingestion lands. */
3532
+ origin: "closed" | "status" | "label" | "signals";
3533
+ /** @description When the current state began. `null` means the underlying source said nothing — never a default — and this can happen on EVERY origin, not just `status`/`signals`: for `origin: 'closed'` it is the payload's `closed_at`, which can be absent; for `origin: 'label'` it comes from the label history (`_gc.statusHistory`), and GitHub issues carry no `_gc` at all (only `providers/gitlab.ts` writes it), so every GitHub issue resolved by a label rule returns `stateSince: null` — plus roughly 7% of GitLab issues whose activity predates history tracking. A consumer building a "depuis N jours" display should treat `null` as missing data, not as a bug. */
3534
+ stateSince: string | null;
3535
+ };
3388
3536
  iteration: {
3389
3537
  id: string | number;
3390
3538
  title: string;
@@ -3621,6 +3769,16 @@ export interface operations {
3621
3769
  severity: string | null;
3622
3770
  /** @description Slugs of the applications (see /v1/applications) that claim this item. A code-repo item (PR/MR) is claimed by the application that declares its repo; an issue is claimed by label match (declared `issueLabels`) OR by being referenced through a CONFIRMED link from a PR/MR in one of the application's code repos OR by being hosted in one of those code repos itself (the GitHub shape where the code repo is also the tracker) — the signals are a union, so the array can hold more than one slug. ORDER IS SIGNIFICANT: the array is sorted by DECREASING attachment-signal strength — a `label` claim first, then a `link` claim, then a `code_repo` claim, the order declared in the application config breaking ties at equal strength — and the FIRST slug is the application whose delivery rules govern this issue (its own rules per field, falling back to the tracker's field by field — see GET /v1/applications/{slug}/delivery-rules). A hand-placed scoped label is an assertion of ownership; an issue merely living in a code repo is an organisational coincidence, so the former governs. Empty array when the item is not attached to any application, in which case the tracker's rules govern. */
3623
3771
  applications: string[];
3772
+ /** @description This issue's position in the delivery flow, computed server-side from the tracker's configured workflow rules (see GET|PUT /v1/projects/{source}/{projectKey}/workflow-rules) so clients stop each recomputing it. Closure is the first stage of the cascade and fires independently of any configuration — a closed issue always returns `origin: 'closed'`, even with zero rules configured for its tracker. Absent any OTHER matching configuration, `origin` falls back to `signals` rather than erroring. */
3773
+ workflow: {
3774
+ state: "todo" | "doing" | "review" | "delivered" | "blocked" | "done";
3775
+ /** @description The label (as matched) or native status string that produced `state`, when `origin` is `label` or `status`. `null` when `origin` is `closed` or `signals`. */
3776
+ stage: string | null;
3777
+ /** @description Which stage of the cascade decided `state`: the issue being closed, a matched native-status rule, a matched label rule, or the signals fallback read off linked PR/MR activity. `status` is configured but not yet ingested — reading GitLab's native work-item status and a named field on a GitHub Project v2 are both deferred for want of live credentials, so `_gc.nativeStatus` has no writer today and `origin` cannot currently come back as `status`; a declared `statusSource` is forward-looking configuration for when that ingestion lands. */
3778
+ origin: "closed" | "status" | "label" | "signals";
3779
+ /** @description When the current state began. `null` means the underlying source said nothing — never a default — and this can happen on EVERY origin, not just `status`/`signals`: for `origin: 'closed'` it is the payload's `closed_at`, which can be absent; for `origin: 'label'` it comes from the label history (`_gc.statusHistory`), and GitHub issues carry no `_gc` at all (only `providers/gitlab.ts` writes it), so every GitHub issue resolved by a label rule returns `stateSince: null` — plus roughly 7% of GitLab issues whose activity predates history tracking. A consumer building a "depuis N jours" display should treat `null` as missing data, not as a bug. */
3780
+ stateSince: string | null;
3781
+ };
3624
3782
  iteration: {
3625
3783
  id: string | number;
3626
3784
  title: string;
@@ -3857,6 +4015,16 @@ export interface operations {
3857
4015
  severity: string | null;
3858
4016
  /** @description Slugs of the applications (see /v1/applications) that claim this item. A code-repo item (PR/MR) is claimed by the application that declares its repo; an issue is claimed by label match (declared `issueLabels`) OR by being referenced through a CONFIRMED link from a PR/MR in one of the application's code repos OR by being hosted in one of those code repos itself (the GitHub shape where the code repo is also the tracker) — the signals are a union, so the array can hold more than one slug. ORDER IS SIGNIFICANT: the array is sorted by DECREASING attachment-signal strength — a `label` claim first, then a `link` claim, then a `code_repo` claim, the order declared in the application config breaking ties at equal strength — and the FIRST slug is the application whose delivery rules govern this issue (its own rules per field, falling back to the tracker's field by field — see GET /v1/applications/{slug}/delivery-rules). A hand-placed scoped label is an assertion of ownership; an issue merely living in a code repo is an organisational coincidence, so the former governs. Empty array when the item is not attached to any application, in which case the tracker's rules govern. */
3859
4017
  applications: string[];
4018
+ /** @description This issue's position in the delivery flow, computed server-side from the tracker's configured workflow rules (see GET|PUT /v1/projects/{source}/{projectKey}/workflow-rules) so clients stop each recomputing it. Closure is the first stage of the cascade and fires independently of any configuration — a closed issue always returns `origin: 'closed'`, even with zero rules configured for its tracker. Absent any OTHER matching configuration, `origin` falls back to `signals` rather than erroring. */
4019
+ workflow: {
4020
+ state: "todo" | "doing" | "review" | "delivered" | "blocked" | "done";
4021
+ /** @description The label (as matched) or native status string that produced `state`, when `origin` is `label` or `status`. `null` when `origin` is `closed` or `signals`. */
4022
+ stage: string | null;
4023
+ /** @description Which stage of the cascade decided `state`: the issue being closed, a matched native-status rule, a matched label rule, or the signals fallback read off linked PR/MR activity. `status` is configured but not yet ingested — reading GitLab's native work-item status and a named field on a GitHub Project v2 are both deferred for want of live credentials, so `_gc.nativeStatus` has no writer today and `origin` cannot currently come back as `status`; a declared `statusSource` is forward-looking configuration for when that ingestion lands. */
4024
+ origin: "closed" | "status" | "label" | "signals";
4025
+ /** @description When the current state began. `null` means the underlying source said nothing — never a default — and this can happen on EVERY origin, not just `status`/`signals`: for `origin: 'closed'` it is the payload's `closed_at`, which can be absent; for `origin: 'label'` it comes from the label history (`_gc.statusHistory`), and GitHub issues carry no `_gc` at all (only `providers/gitlab.ts` writes it), so every GitHub issue resolved by a label rule returns `stateSince: null` — plus roughly 7% of GitLab issues whose activity predates history tracking. A consumer building a "depuis N jours" display should treat `null` as missing data, not as a bug. */
4026
+ stateSince: string | null;
4027
+ };
3860
4028
  iteration: {
3861
4029
  id: string | number;
3862
4030
  title: string;
@@ -6468,6 +6636,292 @@ export interface operations {
6468
6636
  };
6469
6637
  };
6470
6638
  };
6639
+ "getV1ProjectsBySourceByProjectKeyWorkflow-rules": {
6640
+ parameters: {
6641
+ query?: never;
6642
+ header?: never;
6643
+ path: {
6644
+ source: string;
6645
+ projectKey: string;
6646
+ };
6647
+ cookie?: never;
6648
+ };
6649
+ requestBody?: never;
6650
+ responses: {
6651
+ 200: {
6652
+ headers: {
6653
+ [name: string]: unknown;
6654
+ };
6655
+ content: {
6656
+ "application/json": {
6657
+ source: "github" | "gitlab";
6658
+ projectKey: string;
6659
+ labelRules: {
6660
+ /** @description Label prefix, matched case-insensitively against the part of the label name before any parenthesis (so a WIP limit like `=::Doing (3)` still matches `=::Doing`). */
6661
+ prefix: string;
6662
+ state: "todo" | "doing" | "review" | "delivered" | "blocked" | "done";
6663
+ }[];
6664
+ /** @description Where ingestion WOULD read the issue's native status from — GitLab's own status field, or a named field on a numbered GitHub Project. `null` means no native status is read and the calculation falls through to labels/signals. Configured but not yet ingested: reading GitLab's native work-item status and a named GitHub Project v2 field are both deferred (no live credentials yet), so `_gc.nativeStatus` has no writer today regardless of what is declared here — a non-null `statusSource` is forward-looking configuration for when that ingestion lands, not a live data path. This is NOT read by the calculation itself (`WorkflowRules` in `workflow/computeState.ts` carries no `statusSource`): it is an ingestion concern, stored here only because the config screen edits both together. */
6665
+ statusSource: {
6666
+ /** @constant */
6667
+ kind: "gitlab-native";
6668
+ } | {
6669
+ /** @constant */
6670
+ kind: "github-project";
6671
+ projectNumber: string | number;
6672
+ fieldName: string;
6673
+ } | null;
6674
+ statusRules: {
6675
+ /** @description Matched EXACTLY against the tracker-native status resolved via `statusSource` — no prefix matching, because a structured field carries no WIP-limit suffix to strip. */
6676
+ value: string;
6677
+ state: "todo" | "doing" | "review" | "delivered" | "blocked" | "done";
6678
+ }[];
6679
+ /** @description Label prefixes considered part of the workflow's flow, e.g. a whole column family like `=::`. Without this declaration, a label that is simply not part of the flow (unrelated to workflow state) cannot be told apart from a flow label whose column was renamed and is no longer covered by any `labelRules` — both would just be silently ignored. Declaring the family lets the calculation tell the two apart internally, but that distinction is NOT exposed on any `/v1` response (no `unmatchedFlowLabels` field exists in this API) — it is config-screen information only, surfaced live on the per-tracker workflow-rules editor (`WorkflowRulesCard`) as the list of flow labels no rule currently covers. */
6680
+ flowFamilies: string[];
6681
+ };
6682
+ "multipart/form-data": {
6683
+ source: "github" | "gitlab";
6684
+ projectKey: string;
6685
+ labelRules: {
6686
+ /** @description Label prefix, matched case-insensitively against the part of the label name before any parenthesis (so a WIP limit like `=::Doing (3)` still matches `=::Doing`). */
6687
+ prefix: string;
6688
+ state: "todo" | "doing" | "review" | "delivered" | "blocked" | "done";
6689
+ }[];
6690
+ /** @description Where ingestion WOULD read the issue's native status from — GitLab's own status field, or a named field on a numbered GitHub Project. `null` means no native status is read and the calculation falls through to labels/signals. Configured but not yet ingested: reading GitLab's native work-item status and a named GitHub Project v2 field are both deferred (no live credentials yet), so `_gc.nativeStatus` has no writer today regardless of what is declared here — a non-null `statusSource` is forward-looking configuration for when that ingestion lands, not a live data path. This is NOT read by the calculation itself (`WorkflowRules` in `workflow/computeState.ts` carries no `statusSource`): it is an ingestion concern, stored here only because the config screen edits both together. */
6691
+ statusSource: {
6692
+ /** @constant */
6693
+ kind: "gitlab-native";
6694
+ } | {
6695
+ /** @constant */
6696
+ kind: "github-project";
6697
+ projectNumber: string | number;
6698
+ fieldName: string;
6699
+ } | null;
6700
+ statusRules: {
6701
+ /** @description Matched EXACTLY against the tracker-native status resolved via `statusSource` — no prefix matching, because a structured field carries no WIP-limit suffix to strip. */
6702
+ value: string;
6703
+ state: "todo" | "doing" | "review" | "delivered" | "blocked" | "done";
6704
+ }[];
6705
+ /** @description Label prefixes considered part of the workflow's flow, e.g. a whole column family like `=::`. Without this declaration, a label that is simply not part of the flow (unrelated to workflow state) cannot be told apart from a flow label whose column was renamed and is no longer covered by any `labelRules` — both would just be silently ignored. Declaring the family lets the calculation tell the two apart internally, but that distinction is NOT exposed on any `/v1` response (no `unmatchedFlowLabels` field exists in this API) — it is config-screen information only, surfaced live on the per-tracker workflow-rules editor (`WorkflowRulesCard`) as the list of flow labels no rule currently covers. */
6706
+ flowFamilies: string[];
6707
+ };
6708
+ "text/plain": {
6709
+ source: "github" | "gitlab";
6710
+ projectKey: string;
6711
+ labelRules: {
6712
+ /** @description Label prefix, matched case-insensitively against the part of the label name before any parenthesis (so a WIP limit like `=::Doing (3)` still matches `=::Doing`). */
6713
+ prefix: string;
6714
+ state: "todo" | "doing" | "review" | "delivered" | "blocked" | "done";
6715
+ }[];
6716
+ /** @description Where ingestion WOULD read the issue's native status from — GitLab's own status field, or a named field on a numbered GitHub Project. `null` means no native status is read and the calculation falls through to labels/signals. Configured but not yet ingested: reading GitLab's native work-item status and a named GitHub Project v2 field are both deferred (no live credentials yet), so `_gc.nativeStatus` has no writer today regardless of what is declared here — a non-null `statusSource` is forward-looking configuration for when that ingestion lands, not a live data path. This is NOT read by the calculation itself (`WorkflowRules` in `workflow/computeState.ts` carries no `statusSource`): it is an ingestion concern, stored here only because the config screen edits both together. */
6717
+ statusSource: {
6718
+ /** @constant */
6719
+ kind: "gitlab-native";
6720
+ } | {
6721
+ /** @constant */
6722
+ kind: "github-project";
6723
+ projectNumber: string | number;
6724
+ fieldName: string;
6725
+ } | null;
6726
+ statusRules: {
6727
+ /** @description Matched EXACTLY against the tracker-native status resolved via `statusSource` — no prefix matching, because a structured field carries no WIP-limit suffix to strip. */
6728
+ value: string;
6729
+ state: "todo" | "doing" | "review" | "delivered" | "blocked" | "done";
6730
+ }[];
6731
+ /** @description Label prefixes considered part of the workflow's flow, e.g. a whole column family like `=::`. Without this declaration, a label that is simply not part of the flow (unrelated to workflow state) cannot be told apart from a flow label whose column was renamed and is no longer covered by any `labelRules` — both would just be silently ignored. Declaring the family lets the calculation tell the two apart internally, but that distinction is NOT exposed on any `/v1` response (no `unmatchedFlowLabels` field exists in this API) — it is config-screen information only, surfaced live on the per-tracker workflow-rules editor (`WorkflowRulesCard`) as the list of flow labels no rule currently covers. */
6732
+ flowFamilies: string[];
6733
+ };
6734
+ };
6735
+ };
6736
+ };
6737
+ };
6738
+ "putV1ProjectsBySourceByProjectKeyWorkflow-rules": {
6739
+ parameters: {
6740
+ query?: never;
6741
+ header?: never;
6742
+ path: {
6743
+ source: string;
6744
+ projectKey: string;
6745
+ };
6746
+ cookie?: never;
6747
+ };
6748
+ requestBody: {
6749
+ content: {
6750
+ "application/json": {
6751
+ labelRules: {
6752
+ /** @description Label prefix, matched case-insensitively against the part of the label name before any parenthesis (so a WIP limit like `=::Doing (3)` still matches `=::Doing`). */
6753
+ prefix: string;
6754
+ state: "todo" | "doing" | "review" | "delivered" | "blocked" | "done";
6755
+ }[];
6756
+ /** @description Where ingestion WOULD read the issue's native status from — GitLab's own status field, or a named field on a numbered GitHub Project. `null` means no native status is read and the calculation falls through to labels/signals. Configured but not yet ingested: reading GitLab's native work-item status and a named GitHub Project v2 field are both deferred (no live credentials yet), so `_gc.nativeStatus` has no writer today regardless of what is declared here — a non-null `statusSource` is forward-looking configuration for when that ingestion lands, not a live data path. This is NOT read by the calculation itself (`WorkflowRules` in `workflow/computeState.ts` carries no `statusSource`): it is an ingestion concern, stored here only because the config screen edits both together. */
6757
+ statusSource: {
6758
+ /** @constant */
6759
+ kind: "gitlab-native";
6760
+ } | {
6761
+ /** @constant */
6762
+ kind: "github-project";
6763
+ projectNumber: string | number;
6764
+ fieldName: string;
6765
+ } | null;
6766
+ statusRules: {
6767
+ /** @description Matched EXACTLY against the tracker-native status resolved via `statusSource` — no prefix matching, because a structured field carries no WIP-limit suffix to strip. */
6768
+ value: string;
6769
+ state: "todo" | "doing" | "review" | "delivered" | "blocked" | "done";
6770
+ }[];
6771
+ flowFamilies: string[];
6772
+ };
6773
+ "multipart/form-data": {
6774
+ labelRules: {
6775
+ /** @description Label prefix, matched case-insensitively against the part of the label name before any parenthesis (so a WIP limit like `=::Doing (3)` still matches `=::Doing`). */
6776
+ prefix: string;
6777
+ state: "todo" | "doing" | "review" | "delivered" | "blocked" | "done";
6778
+ }[];
6779
+ /** @description Where ingestion WOULD read the issue's native status from — GitLab's own status field, or a named field on a numbered GitHub Project. `null` means no native status is read and the calculation falls through to labels/signals. Configured but not yet ingested: reading GitLab's native work-item status and a named GitHub Project v2 field are both deferred (no live credentials yet), so `_gc.nativeStatus` has no writer today regardless of what is declared here — a non-null `statusSource` is forward-looking configuration for when that ingestion lands, not a live data path. This is NOT read by the calculation itself (`WorkflowRules` in `workflow/computeState.ts` carries no `statusSource`): it is an ingestion concern, stored here only because the config screen edits both together. */
6780
+ statusSource: {
6781
+ /** @constant */
6782
+ kind: "gitlab-native";
6783
+ } | {
6784
+ /** @constant */
6785
+ kind: "github-project";
6786
+ projectNumber: string | number;
6787
+ fieldName: string;
6788
+ } | null;
6789
+ statusRules: {
6790
+ /** @description Matched EXACTLY against the tracker-native status resolved via `statusSource` — no prefix matching, because a structured field carries no WIP-limit suffix to strip. */
6791
+ value: string;
6792
+ state: "todo" | "doing" | "review" | "delivered" | "blocked" | "done";
6793
+ }[];
6794
+ flowFamilies: string[];
6795
+ };
6796
+ "text/plain": {
6797
+ labelRules: {
6798
+ /** @description Label prefix, matched case-insensitively against the part of the label name before any parenthesis (so a WIP limit like `=::Doing (3)` still matches `=::Doing`). */
6799
+ prefix: string;
6800
+ state: "todo" | "doing" | "review" | "delivered" | "blocked" | "done";
6801
+ }[];
6802
+ /** @description Where ingestion WOULD read the issue's native status from — GitLab's own status field, or a named field on a numbered GitHub Project. `null` means no native status is read and the calculation falls through to labels/signals. Configured but not yet ingested: reading GitLab's native work-item status and a named GitHub Project v2 field are both deferred (no live credentials yet), so `_gc.nativeStatus` has no writer today regardless of what is declared here — a non-null `statusSource` is forward-looking configuration for when that ingestion lands, not a live data path. This is NOT read by the calculation itself (`WorkflowRules` in `workflow/computeState.ts` carries no `statusSource`): it is an ingestion concern, stored here only because the config screen edits both together. */
6803
+ statusSource: {
6804
+ /** @constant */
6805
+ kind: "gitlab-native";
6806
+ } | {
6807
+ /** @constant */
6808
+ kind: "github-project";
6809
+ projectNumber: string | number;
6810
+ fieldName: string;
6811
+ } | null;
6812
+ statusRules: {
6813
+ /** @description Matched EXACTLY against the tracker-native status resolved via `statusSource` — no prefix matching, because a structured field carries no WIP-limit suffix to strip. */
6814
+ value: string;
6815
+ state: "todo" | "doing" | "review" | "delivered" | "blocked" | "done";
6816
+ }[];
6817
+ flowFamilies: string[];
6818
+ };
6819
+ };
6820
+ };
6821
+ responses: {
6822
+ 200: {
6823
+ headers: {
6824
+ [name: string]: unknown;
6825
+ };
6826
+ content: {
6827
+ "application/json": {
6828
+ source: "github" | "gitlab";
6829
+ projectKey: string;
6830
+ labelRules: {
6831
+ /** @description Label prefix, matched case-insensitively against the part of the label name before any parenthesis (so a WIP limit like `=::Doing (3)` still matches `=::Doing`). */
6832
+ prefix: string;
6833
+ state: "todo" | "doing" | "review" | "delivered" | "blocked" | "done";
6834
+ }[];
6835
+ /** @description Where ingestion WOULD read the issue's native status from — GitLab's own status field, or a named field on a numbered GitHub Project. `null` means no native status is read and the calculation falls through to labels/signals. Configured but not yet ingested: reading GitLab's native work-item status and a named GitHub Project v2 field are both deferred (no live credentials yet), so `_gc.nativeStatus` has no writer today regardless of what is declared here — a non-null `statusSource` is forward-looking configuration for when that ingestion lands, not a live data path. This is NOT read by the calculation itself (`WorkflowRules` in `workflow/computeState.ts` carries no `statusSource`): it is an ingestion concern, stored here only because the config screen edits both together. */
6836
+ statusSource: {
6837
+ /** @constant */
6838
+ kind: "gitlab-native";
6839
+ } | {
6840
+ /** @constant */
6841
+ kind: "github-project";
6842
+ projectNumber: string | number;
6843
+ fieldName: string;
6844
+ } | null;
6845
+ statusRules: {
6846
+ /** @description Matched EXACTLY against the tracker-native status resolved via `statusSource` — no prefix matching, because a structured field carries no WIP-limit suffix to strip. */
6847
+ value: string;
6848
+ state: "todo" | "doing" | "review" | "delivered" | "blocked" | "done";
6849
+ }[];
6850
+ /** @description Label prefixes considered part of the workflow's flow, e.g. a whole column family like `=::`. Without this declaration, a label that is simply not part of the flow (unrelated to workflow state) cannot be told apart from a flow label whose column was renamed and is no longer covered by any `labelRules` — both would just be silently ignored. Declaring the family lets the calculation tell the two apart internally, but that distinction is NOT exposed on any `/v1` response (no `unmatchedFlowLabels` field exists in this API) — it is config-screen information only, surfaced live on the per-tracker workflow-rules editor (`WorkflowRulesCard`) as the list of flow labels no rule currently covers. */
6851
+ flowFamilies: string[];
6852
+ };
6853
+ "multipart/form-data": {
6854
+ source: "github" | "gitlab";
6855
+ projectKey: string;
6856
+ labelRules: {
6857
+ /** @description Label prefix, matched case-insensitively against the part of the label name before any parenthesis (so a WIP limit like `=::Doing (3)` still matches `=::Doing`). */
6858
+ prefix: string;
6859
+ state: "todo" | "doing" | "review" | "delivered" | "blocked" | "done";
6860
+ }[];
6861
+ /** @description Where ingestion WOULD read the issue's native status from — GitLab's own status field, or a named field on a numbered GitHub Project. `null` means no native status is read and the calculation falls through to labels/signals. Configured but not yet ingested: reading GitLab's native work-item status and a named GitHub Project v2 field are both deferred (no live credentials yet), so `_gc.nativeStatus` has no writer today regardless of what is declared here — a non-null `statusSource` is forward-looking configuration for when that ingestion lands, not a live data path. This is NOT read by the calculation itself (`WorkflowRules` in `workflow/computeState.ts` carries no `statusSource`): it is an ingestion concern, stored here only because the config screen edits both together. */
6862
+ statusSource: {
6863
+ /** @constant */
6864
+ kind: "gitlab-native";
6865
+ } | {
6866
+ /** @constant */
6867
+ kind: "github-project";
6868
+ projectNumber: string | number;
6869
+ fieldName: string;
6870
+ } | null;
6871
+ statusRules: {
6872
+ /** @description Matched EXACTLY against the tracker-native status resolved via `statusSource` — no prefix matching, because a structured field carries no WIP-limit suffix to strip. */
6873
+ value: string;
6874
+ state: "todo" | "doing" | "review" | "delivered" | "blocked" | "done";
6875
+ }[];
6876
+ /** @description Label prefixes considered part of the workflow's flow, e.g. a whole column family like `=::`. Without this declaration, a label that is simply not part of the flow (unrelated to workflow state) cannot be told apart from a flow label whose column was renamed and is no longer covered by any `labelRules` — both would just be silently ignored. Declaring the family lets the calculation tell the two apart internally, but that distinction is NOT exposed on any `/v1` response (no `unmatchedFlowLabels` field exists in this API) — it is config-screen information only, surfaced live on the per-tracker workflow-rules editor (`WorkflowRulesCard`) as the list of flow labels no rule currently covers. */
6877
+ flowFamilies: string[];
6878
+ };
6879
+ "text/plain": {
6880
+ source: "github" | "gitlab";
6881
+ projectKey: string;
6882
+ labelRules: {
6883
+ /** @description Label prefix, matched case-insensitively against the part of the label name before any parenthesis (so a WIP limit like `=::Doing (3)` still matches `=::Doing`). */
6884
+ prefix: string;
6885
+ state: "todo" | "doing" | "review" | "delivered" | "blocked" | "done";
6886
+ }[];
6887
+ /** @description Where ingestion WOULD read the issue's native status from — GitLab's own status field, or a named field on a numbered GitHub Project. `null` means no native status is read and the calculation falls through to labels/signals. Configured but not yet ingested: reading GitLab's native work-item status and a named GitHub Project v2 field are both deferred (no live credentials yet), so `_gc.nativeStatus` has no writer today regardless of what is declared here — a non-null `statusSource` is forward-looking configuration for when that ingestion lands, not a live data path. This is NOT read by the calculation itself (`WorkflowRules` in `workflow/computeState.ts` carries no `statusSource`): it is an ingestion concern, stored here only because the config screen edits both together. */
6888
+ statusSource: {
6889
+ /** @constant */
6890
+ kind: "gitlab-native";
6891
+ } | {
6892
+ /** @constant */
6893
+ kind: "github-project";
6894
+ projectNumber: string | number;
6895
+ fieldName: string;
6896
+ } | null;
6897
+ statusRules: {
6898
+ /** @description Matched EXACTLY against the tracker-native status resolved via `statusSource` — no prefix matching, because a structured field carries no WIP-limit suffix to strip. */
6899
+ value: string;
6900
+ state: "todo" | "doing" | "review" | "delivered" | "blocked" | "done";
6901
+ }[];
6902
+ /** @description Label prefixes considered part of the workflow's flow, e.g. a whole column family like `=::`. Without this declaration, a label that is simply not part of the flow (unrelated to workflow state) cannot be told apart from a flow label whose column was renamed and is no longer covered by any `labelRules` — both would just be silently ignored. Declaring the family lets the calculation tell the two apart internally, but that distinction is NOT exposed on any `/v1` response (no `unmatchedFlowLabels` field exists in this API) — it is config-screen information only, surfaced live on the per-tracker workflow-rules editor (`WorkflowRulesCard`) as the list of flow labels no rule currently covers. */
6903
+ flowFamilies: string[];
6904
+ };
6905
+ };
6906
+ };
6907
+ 400: {
6908
+ headers: {
6909
+ [name: string]: unknown;
6910
+ };
6911
+ content: {
6912
+ "application/json": {
6913
+ error: string;
6914
+ };
6915
+ "multipart/form-data": {
6916
+ error: string;
6917
+ };
6918
+ "text/plain": {
6919
+ error: string;
6920
+ };
6921
+ };
6922
+ };
6923
+ };
6924
+ };
6471
6925
  getV1Projects: {
6472
6926
  parameters: {
6473
6927
  query?: never;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cesar-richard/git-connector-sdk",
3
- "version": "4.11.0",
3
+ "version": "4.12.0",
4
4
  "description": "TypeScript SDK for the git-connector v1 API (work items + iterations aggregated from GitHub/GitLab). Version published on npm tracks server releases.",
5
5
  "license": "MIT",
6
6
  "repository": {