@qontinui/shared-types 0.6.0 → 0.8.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 (36) hide show
  1. package/dist/ui-bridge-ir.d.cts +47 -1
  2. package/dist/ui-bridge-ir.d.ts +47 -1
  3. package/package.json +1 -1
  4. package/src/generated/ActionResponse.d.ts +19 -0
  5. package/src/generated/ApiStyle.d.ts +11 -0
  6. package/src/generated/ArchitectureProfile.d.ts +25 -0
  7. package/src/generated/AssumptionEntry.d.ts +32 -0
  8. package/src/generated/AuthModel.d.ts +24 -0
  9. package/src/generated/AuthRole.d.ts +20 -0
  10. package/src/generated/BackendProfile.d.ts +33 -0
  11. package/src/generated/CompletenessVerdict.d.ts +85 -0
  12. package/src/generated/CoverageGap.d.ts +30 -0
  13. package/src/generated/EnforcementProfile.d.ts +23 -0
  14. package/src/generated/Entity.d.ts +30 -0
  15. package/src/generated/EntityField.d.ts +29 -0
  16. package/src/generated/FunctionalSpec.d.ts +76 -0
  17. package/src/generated/GapReason.d.ts +12 -0
  18. package/src/generated/IrPageSpec.d.ts +6 -0
  19. package/src/generated/LoopPhase.d.ts +3 -0
  20. package/src/generated/Operation.d.ts +37 -0
  21. package/src/generated/OperationEffect.d.ts +24 -0
  22. package/src/generated/OperationInput.d.ts +25 -0
  23. package/src/generated/Profile.d.ts +37 -0
  24. package/src/generated/ProvenanceMix.d.ts +18 -0
  25. package/src/generated/Relationship.d.ts +26 -0
  26. package/src/generated/SectionVerdict.d.ts +35 -0
  27. package/src/generated/SpecProvenance.d.ts +21 -0
  28. package/src/generated/SpecSection.d.ts +11 -0
  29. package/src/generated/SpecTarget.d.ts +21 -0
  30. package/src/generated/UiBridgeHttpErrorEnvelope.d.ts +47 -0
  31. package/src/generated/UiBridgeHttpHealthAppInfo.d.ts +36 -0
  32. package/src/generated/UiBridgeHttpHealthData.d.ts +30 -0
  33. package/src/generated/UiBridgeHttpHealthEnvelope.d.ts +44 -0
  34. package/src/generated/ValidationRule.d.ts +22 -0
  35. package/src/generated/index.ts +28 -0
  36. package/src/ui-bridge-ir/document.ts +35 -0
@@ -477,7 +477,53 @@ interface IRDocument {
477
477
  synthesizedGroups?: IRGroup[];
478
478
  /** ID of the initial/starting state, if applicable. */
479
479
  initialState?: string;
480
+ /** Per-page API-contract assertions evaluated by the Spec CI harness. */
481
+ apiAssertions?: IRApiCheck[];
480
482
  }
483
+ /**
484
+ * A single API-contract check: issue a request, validate the response.
485
+ */
486
+ interface IRApiCheck {
487
+ id: string;
488
+ description?: string;
489
+ request: {
490
+ method: string;
491
+ path: string;
492
+ headers?: Record<string, string>;
493
+ body?: unknown;
494
+ };
495
+ effect?: "read" | "write" | "destructive";
496
+ assertions: IRApiAssertion[];
497
+ }
498
+ /**
499
+ * API assertion: either a value-level assertion (status_code, json_path, etc.)
500
+ * or a schema-conformance assertion (conforms_to -- Phase 2 placeholder).
501
+ */
502
+ type IRApiAssertion = {
503
+ type: "status_code";
504
+ expected: unknown;
505
+ operator?: string;
506
+ } | {
507
+ type: "json_path";
508
+ jsonPath: string;
509
+ expected: unknown;
510
+ operator?: string;
511
+ } | {
512
+ type: "header";
513
+ headerName: string;
514
+ expected: unknown;
515
+ operator?: string;
516
+ } | {
517
+ type: "body_contains";
518
+ expected: unknown;
519
+ } | {
520
+ type: "response_time";
521
+ expected: unknown;
522
+ operator?: string;
523
+ } | {
524
+ type: "conforms_to";
525
+ schema: string;
526
+ };
481
527
 
482
528
  /**
483
529
  * IR -> WorkflowConfig adapter.
@@ -978,4 +1024,4 @@ interface ProjectLegacyToIROptions {
978
1024
  */
979
1025
  declare function projectLegacyToIR(legacy: LegacySpec, opts?: ProjectLegacyToIROptions): IRDocument;
980
1026
 
981
- export { type AdaptedState, type AdaptedTransition, type AdaptedTransitionAction, type AdaptedWaitAfter, type AdaptedWorkflowConfig, type IRAcceptDriftPolicy, type IRAssertion, type IRAssertionTarget, type IRCrossRef, type IRDocument, type IREffect, type IRElementCriteria, type IRGroup, type IRMetadata, type IRPairingAxis, type IRPairingPolicy, type IRProvenance, type IRState, type IRStateCondition, type IRTransition, type IRTransitionAction, type IRVersion, type IRVisualRef, type IRWaitSpec, type LegacyAssertion, type LegacyAssertionTarget, type LegacyCriteria, type LegacyGroup, type LegacyMetadata, type LegacyProcessStep, type LegacySpec, type LegacyStateMachine, type LegacyStateMachineState, type LegacyTransition, type ProjectLegacyToIROptions, adaptIRDocumentToWorkflowConfig, adaptIRState, adaptIRTransition, adaptIRTransitionAction, projectIRToBundledPage, projectLegacyToIR, projectionVersion };
1027
+ export { type AdaptedState, type AdaptedTransition, type AdaptedTransitionAction, type AdaptedWaitAfter, type AdaptedWorkflowConfig, type IRAcceptDriftPolicy, type IRApiAssertion, type IRApiCheck, type IRAssertion, type IRAssertionTarget, type IRCrossRef, type IRDocument, type IREffect, type IRElementCriteria, type IRGroup, type IRMetadata, type IRPairingAxis, type IRPairingPolicy, type IRProvenance, type IRState, type IRStateCondition, type IRTransition, type IRTransitionAction, type IRVersion, type IRVisualRef, type IRWaitSpec, type LegacyAssertion, type LegacyAssertionTarget, type LegacyCriteria, type LegacyGroup, type LegacyMetadata, type LegacyProcessStep, type LegacySpec, type LegacyStateMachine, type LegacyStateMachineState, type LegacyTransition, type ProjectLegacyToIROptions, adaptIRDocumentToWorkflowConfig, adaptIRState, adaptIRTransition, adaptIRTransitionAction, projectIRToBundledPage, projectLegacyToIR, projectionVersion };
@@ -477,7 +477,53 @@ interface IRDocument {
477
477
  synthesizedGroups?: IRGroup[];
478
478
  /** ID of the initial/starting state, if applicable. */
479
479
  initialState?: string;
480
+ /** Per-page API-contract assertions evaluated by the Spec CI harness. */
481
+ apiAssertions?: IRApiCheck[];
480
482
  }
483
+ /**
484
+ * A single API-contract check: issue a request, validate the response.
485
+ */
486
+ interface IRApiCheck {
487
+ id: string;
488
+ description?: string;
489
+ request: {
490
+ method: string;
491
+ path: string;
492
+ headers?: Record<string, string>;
493
+ body?: unknown;
494
+ };
495
+ effect?: "read" | "write" | "destructive";
496
+ assertions: IRApiAssertion[];
497
+ }
498
+ /**
499
+ * API assertion: either a value-level assertion (status_code, json_path, etc.)
500
+ * or a schema-conformance assertion (conforms_to -- Phase 2 placeholder).
501
+ */
502
+ type IRApiAssertion = {
503
+ type: "status_code";
504
+ expected: unknown;
505
+ operator?: string;
506
+ } | {
507
+ type: "json_path";
508
+ jsonPath: string;
509
+ expected: unknown;
510
+ operator?: string;
511
+ } | {
512
+ type: "header";
513
+ headerName: string;
514
+ expected: unknown;
515
+ operator?: string;
516
+ } | {
517
+ type: "body_contains";
518
+ expected: unknown;
519
+ } | {
520
+ type: "response_time";
521
+ expected: unknown;
522
+ operator?: string;
523
+ } | {
524
+ type: "conforms_to";
525
+ schema: string;
526
+ };
481
527
 
482
528
  /**
483
529
  * IR -> WorkflowConfig adapter.
@@ -978,4 +1024,4 @@ interface ProjectLegacyToIROptions {
978
1024
  */
979
1025
  declare function projectLegacyToIR(legacy: LegacySpec, opts?: ProjectLegacyToIROptions): IRDocument;
980
1026
 
981
- export { type AdaptedState, type AdaptedTransition, type AdaptedTransitionAction, type AdaptedWaitAfter, type AdaptedWorkflowConfig, type IRAcceptDriftPolicy, type IRAssertion, type IRAssertionTarget, type IRCrossRef, type IRDocument, type IREffect, type IRElementCriteria, type IRGroup, type IRMetadata, type IRPairingAxis, type IRPairingPolicy, type IRProvenance, type IRState, type IRStateCondition, type IRTransition, type IRTransitionAction, type IRVersion, type IRVisualRef, type IRWaitSpec, type LegacyAssertion, type LegacyAssertionTarget, type LegacyCriteria, type LegacyGroup, type LegacyMetadata, type LegacyProcessStep, type LegacySpec, type LegacyStateMachine, type LegacyStateMachineState, type LegacyTransition, type ProjectLegacyToIROptions, adaptIRDocumentToWorkflowConfig, adaptIRState, adaptIRTransition, adaptIRTransitionAction, projectIRToBundledPage, projectLegacyToIR, projectionVersion };
1027
+ export { type AdaptedState, type AdaptedTransition, type AdaptedTransitionAction, type AdaptedWaitAfter, type AdaptedWorkflowConfig, type IRAcceptDriftPolicy, type IRApiAssertion, type IRApiCheck, type IRAssertion, type IRAssertionTarget, type IRCrossRef, type IRDocument, type IREffect, type IRElementCriteria, type IRGroup, type IRMetadata, type IRPairingAxis, type IRPairingPolicy, type IRProvenance, type IRState, type IRStateCondition, type IRTransition, type IRTransitionAction, type IRVersion, type IRVisualRef, type IRWaitSpec, type LegacyAssertion, type LegacyAssertionTarget, type LegacyCriteria, type LegacyGroup, type LegacyMetadata, type LegacyProcessStep, type LegacySpec, type LegacyStateMachine, type LegacyStateMachineState, type LegacyTransition, type ProjectLegacyToIROptions, adaptIRDocumentToWorkflowConfig, adaptIRState, adaptIRTransition, adaptIRTransitionAction, projectIRToBundledPage, projectLegacyToIR, projectionVersion };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@qontinui/shared-types",
3
- "version": "0.6.0",
3
+ "version": "0.8.0",
4
4
  "description": "Shared TypeScript types for the Qontinui ecosystem",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -16,6 +16,25 @@ export interface ActionResponse {
16
16
  * Time taken to execute the action in milliseconds.
17
17
  */
18
18
  durationMs: number;
19
+ /**
20
+ * D3 effect-calculus verification: the predicted-vs-observed outcome for
21
+ * this action, present only when a handler effect signature resolved for
22
+ * the `(action, element)` (opt-in; absent otherwise).
23
+ *
24
+ * Carried as an opaque JSON object on the wire, deliberately matching the
25
+ * established lean-wire / rich-SDK split (the SDK's `EffectVerification`
26
+ * has a richer shape than any consumer needs to type). The runner
27
+ * deserializes the sub-shape it asserts on (`outcome` / `cause` /
28
+ * `containment` / `durationMs`) with its own local struct in the
29
+ * `effect_check` step handler, and relays the rest into `result_json`. See
30
+ * `ui-bridge/.../control/effect-types.ts` for the SDK-side producer. Kept
31
+ * opaque here so the nested effect types need no top-level codegen
32
+ * registration (which would couple this crate's bindings to a runner
33
+ * `schema_export.rs` change).
34
+ */
35
+ effectVerification?: {
36
+ [k: string]: unknown;
37
+ };
19
38
  /**
20
39
  * Updated element state after the action (if applicable).
21
40
  */
@@ -0,0 +1,11 @@
1
+ /* eslint-disable */
2
+ /**
3
+ * This file was automatically generated.
4
+ * DO NOT MODIFY IT BY HAND. Regenerate with `just generate-types` or
5
+ * `qontinui-runner/src-tauri/scripts/generate_types.sh`.
6
+ */
7
+
8
+ /**
9
+ * API style the generated backend exposes.
10
+ */
11
+ export type ApiStyle = "rest" | "graphql";
@@ -0,0 +1,25 @@
1
+ /* eslint-disable */
2
+ /**
3
+ * This file was automatically generated.
4
+ * DO NOT MODIFY IT BY HAND. Regenerate with `just generate-types` or
5
+ * `qontinui-runner/src-tauri/scripts/generate_types.sh`.
6
+ */
7
+
8
+ /**
9
+ * Architectural shape + testing bar the generators must hold to.
10
+ */
11
+ export interface ArchitectureProfile {
12
+ /**
13
+ * Minimum line/branch coverage percentage the generated tests must reach.
14
+ */
15
+ minCoveragePct?: number | null;
16
+ /**
17
+ * e.g. `"layered"`, `"hexagonal"`, `"mvc"`.
18
+ */
19
+ pattern: string;
20
+ /**
21
+ * e.g. `"unit"`, `"unit+integration"`, `"unit+integration+e2e"`.
22
+ */
23
+ testingBar?: string | null;
24
+ [k: string]: unknown;
25
+ }
@@ -0,0 +1,32 @@
1
+ /* eslint-disable */
2
+ /**
3
+ * This file was automatically generated.
4
+ * DO NOT MODIFY IT BY HAND. Regenerate with `just generate-types` or
5
+ * `qontinui-runner/src-tauri/scripts/generate_types.sh`.
6
+ */
7
+
8
+ /**
9
+ * One collated assumption — a node whose provenance is `Assumed`. The operator
10
+ * reviews/overrides these directly (v0 override surface = a file edit of this
11
+ * ledger).
12
+ */
13
+ export interface AssumptionEntry {
14
+ /**
15
+ * The best-practice default the generator applied.
16
+ */
17
+ defaultApplied: string;
18
+ /**
19
+ * Optional free-form operator note (e.g. an override rationale).
20
+ */
21
+ note?: string | null;
22
+ /**
23
+ * Whether the operator may override this fill. Defaults to `true`.
24
+ */
25
+ overridable: boolean;
26
+ /**
27
+ * Dotted ref into the spec the assumption belongs to, e.g.
28
+ * `"operations.createInvoice.effect"`.
29
+ */
30
+ ref: string;
31
+ [k: string]: unknown;
32
+ }
@@ -0,0 +1,24 @@
1
+ /* eslint-disable */
2
+ /**
3
+ * This file was automatically generated.
4
+ * DO NOT MODIFY IT BY HAND. Regenerate with `just generate-types` or
5
+ * `qontinui-runner/src-tauri/scripts/generate_types.sh`.
6
+ */
7
+
8
+ import type { AuthRole } from './AuthRole';
9
+ import type { SpecProvenance } from './SpecProvenance';
10
+
11
+ /**
12
+ * The auth / permission model inferred from login flows + gated routes.
13
+ */
14
+ export interface AuthModel {
15
+ confidence: SpecProvenance;
16
+ credibility?: number | null;
17
+ /**
18
+ * `"none"`, `"session"`, `"jwt"`, `"oauth"`, `"basic"`, …
19
+ */
20
+ model: string;
21
+ provenance?: string | null;
22
+ roles?: AuthRole[];
23
+ [k: string]: unknown;
24
+ }
@@ -0,0 +1,20 @@
1
+ /* eslint-disable */
2
+ /**
3
+ * This file was automatically generated.
4
+ * DO NOT MODIFY IT BY HAND. Regenerate with `just generate-types` or
5
+ * `qontinui-runner/src-tauri/scripts/generate_types.sh`.
6
+ */
7
+
8
+ import type { SpecProvenance } from './SpecProvenance';
9
+
10
+ /**
11
+ * A role surfaced by the auth model (e.g. inferred from nav items only some
12
+ * sessions see).
13
+ */
14
+ export interface AuthRole {
15
+ confidence: SpecProvenance;
16
+ credibility?: number | null;
17
+ name: string;
18
+ provenance?: string | null;
19
+ [k: string]: unknown;
20
+ }
@@ -0,0 +1,33 @@
1
+ /* eslint-disable */
2
+ /**
3
+ * This file was automatically generated.
4
+ * DO NOT MODIFY IT BY HAND. Regenerate with `just generate-types` or
5
+ * `qontinui-runner/src-tauri/scripts/generate_types.sh`.
6
+ */
7
+
8
+ import type { ApiStyle } from './ApiStyle';
9
+
10
+ /**
11
+ * Target backend stack.
12
+ */
13
+ export interface BackendProfile {
14
+ apiStyle: ApiStyle;
15
+ /**
16
+ * Backend auth strategy (e.g. `"jwt"`, `"session"`). Free-form; `None` lets
17
+ * the generator default from the spec's observed [`crate::functional_spec::AuthModel`].
18
+ */
19
+ auth?: string | null;
20
+ /**
21
+ * e.g. `"postgres"`, `"sqlite"`, `"mongodb"`.
22
+ */
23
+ datastore: string;
24
+ /**
25
+ * e.g. `"fastapi"`, `"express"`, `"axum"`.
26
+ */
27
+ framework: string;
28
+ /**
29
+ * e.g. `"python"`, `"typescript"`, `"rust"`, `"go"`.
30
+ */
31
+ language: string;
32
+ [k: string]: unknown;
33
+ }
@@ -0,0 +1,85 @@
1
+ /* eslint-disable */
2
+ /**
3
+ * This file was automatically generated.
4
+ * DO NOT MODIFY IT BY HAND. Regenerate with `just generate-types` or
5
+ * `qontinui-runner/src-tauri/scripts/generate_types.sh`.
6
+ */
7
+
8
+ import type { AssertionMiss } from './AssertionMiss';
9
+ import type { AssertionOutcome } from './AssertionOutcome';
10
+ import type { AssertionResult } from './AssertionResult';
11
+ import type { AssertionSeverityCounts } from './AssertionSeverityCounts';
12
+ import type { BridgeFingerprint } from './BridgeFingerprint';
13
+ import type { CandidateMiss } from './CandidateMiss';
14
+ import type { CoverageGap } from './CoverageGap';
15
+ import type { FieldDiff } from './FieldDiff';
16
+ import type { GapReason } from './GapReason';
17
+ import type { MatchOutcome } from './MatchOutcome';
18
+ import type { MatchedElement } from './MatchedElement';
19
+ import type { MissReason } from './MissReason';
20
+ import type { ProvenanceMix } from './ProvenanceMix';
21
+ import type { RecommendedState } from './RecommendedState';
22
+ import type { SectionVerdict } from './SectionVerdict';
23
+ import type { SpecCheckConfidence } from './SpecCheckConfidence';
24
+ import type { SpecCheckResult } from './SpecCheckResult';
25
+ import type { SpecCheckSummary } from './SpecCheckSummary';
26
+ import type { SpecProvenance } from './SpecProvenance';
27
+ import type { SpecSection } from './SpecSection';
28
+ import type { StateMatchResult } from './StateMatchResult';
29
+
30
+ /**
31
+ * The output of the test-phase verify subtask: how completely a generated
32
+ * app+backend covers the source-observed Functional Spec.
33
+ *
34
+ * Serializes as an A2A `DataPart` in `completion_reports.artifacts`. Durable,
35
+ * fully re-derivable — the reconciler re-reads it each tick.
36
+ *
37
+ * Does not derive `PartialEq`: the embedded [`crate::spec_check::SpecCheckResult`]
38
+ * does not implement it. Compare verdicts by their serialized JSON when needed.
39
+ */
40
+ export interface CompletenessVerdict {
41
+ /**
42
+ * Fraction of `Assumed` nodes the generator filled ∈ [0,1] — reported
43
+ * **separately**, never folded into `coverage`.
44
+ */
45
+ assumedFillRate: number;
46
+ /**
47
+ * Overall coverage ∈ [0,1] of `Observed` + `Inferred` nodes confirmed
48
+ * present-and-behaving. The headline number. (Shared `DriftVerdict` key.)
49
+ */
50
+ coverage: number;
51
+ /**
52
+ * Mean credibility of `Inferred` nodes ∈ [0,1]. (Shared `DriftVerdict` key.)
53
+ */
54
+ credibility: number;
55
+ /**
56
+ * ISO-8601 UTC timestamp the verdict was computed.
57
+ */
58
+ evaluatedAt: string;
59
+ /**
60
+ * The gap work-list — uncovered `Observed`/`Inferred` nodes the reconciler
61
+ * re-dispatches generation for.
62
+ */
63
+ gaps?: CoverageGap[];
64
+ provenanceMix: ProvenanceMix;
65
+ /**
66
+ * Per-section breakdown.
67
+ */
68
+ sections?: SectionVerdict[];
69
+ /**
70
+ * The `spec_version` of the [`crate::functional_spec::FunctionalSpec`] this
71
+ * verdict scores.
72
+ */
73
+ specVersion: string;
74
+ /**
75
+ * Freshness of the binding observation when answered from a cached fallback;
76
+ * `None` on a fresh live answer. (Shared `DriftVerdict` key.)
77
+ */
78
+ stalenessSeconds?: number | null;
79
+ /**
80
+ * Embedded Spec-Check result for the `ui_states` / `navigation` dimension —
81
+ * reused, not recomputed. `None` when the UI dimension was not evaluated.
82
+ */
83
+ uiStatesSpecCheck?: SpecCheckResult | null;
84
+ [k: string]: unknown;
85
+ }
@@ -0,0 +1,30 @@
1
+ /* eslint-disable */
2
+ /**
3
+ * This file was automatically generated.
4
+ * DO NOT MODIFY IT BY HAND. Regenerate with `just generate-types` or
5
+ * `qontinui-runner/src-tauri/scripts/generate_types.sh`.
6
+ */
7
+
8
+ import type { GapReason } from './GapReason';
9
+ import type { SpecProvenance } from './SpecProvenance';
10
+ import type { SpecSection } from './SpecSection';
11
+
12
+ /**
13
+ * One uncovered `Observed`/`Inferred` node — a work-list item the orchestration
14
+ * reconciler re-dispatches generation for.
15
+ */
16
+ export interface CoverageGap {
17
+ /**
18
+ * Free-form diagnostic detail (e.g. the verifier's near-miss explanation).
19
+ */
20
+ detail?: string | null;
21
+ nodeProvenance: SpecProvenance;
22
+ reason: GapReason;
23
+ /**
24
+ * Dotted ref into the spec, e.g. `"entities.Invoice.fields.amount"` or
25
+ * `"operations.createInvoice"`.
26
+ */
27
+ ref: string;
28
+ section: SpecSection;
29
+ [k: string]: unknown;
30
+ }
@@ -0,0 +1,23 @@
1
+ /* eslint-disable */
2
+ /**
3
+ * This file was automatically generated.
4
+ * DO NOT MODIFY IT BY HAND. Regenerate with `just generate-types` or
5
+ * `qontinui-runner/src-tauri/scripts/generate_types.sh`.
6
+ */
7
+
8
+ /**
9
+ * How the generation loop enforces quality — names existing claude-config skills
10
+ * to run and which of them are hard blockers.
11
+ */
12
+ export interface EnforcementProfile {
13
+ /**
14
+ * Which categories block the loop on failure (e.g. `["security"]`). A skill
15
+ * in `run` but not `block_on` is advisory.
16
+ */
17
+ blockOn?: string[];
18
+ /**
19
+ * Skills to run on generated code (e.g. `["code-reviewer", "security-scan"]`).
20
+ */
21
+ run?: string[];
22
+ [k: string]: unknown;
23
+ }
@@ -0,0 +1,30 @@
1
+ /* eslint-disable */
2
+ /**
3
+ * This file was automatically generated.
4
+ * DO NOT MODIFY IT BY HAND. Regenerate with `just generate-types` or
5
+ * `qontinui-runner/src-tauri/scripts/generate_types.sh`.
6
+ */
7
+
8
+ import type { EntityField } from './EntityField';
9
+ import type { Relationship } from './Relationship';
10
+ import type { SpecProvenance } from './SpecProvenance';
11
+
12
+ /**
13
+ * A domain entity inferred from rendered data shapes.
14
+ */
15
+ export interface Entity {
16
+ confidence: SpecProvenance;
17
+ /**
18
+ * Optional deduction strength ∈ [0,1]. Present only on `Inferred` nodes;
19
+ * meaningless (and omitted) on `Observed` / `Assumed`.
20
+ */
21
+ credibility?: number | null;
22
+ fields?: EntityField[];
23
+ name: string;
24
+ /**
25
+ * Free-form evidence string (e.g. `"detail view + list view both render it"`).
26
+ */
27
+ provenance?: string | null;
28
+ relationships?: Relationship[];
29
+ [k: string]: unknown;
30
+ }
@@ -0,0 +1,29 @@
1
+ /* eslint-disable */
2
+ /**
3
+ * This file was automatically generated.
4
+ * DO NOT MODIFY IT BY HAND. Regenerate with `just generate-types` or
5
+ * `qontinui-runner/src-tauri/scripts/generate_types.sh`.
6
+ */
7
+
8
+ import type { SpecProvenance } from './SpecProvenance';
9
+
10
+ /**
11
+ * A field of an [`Entity`].
12
+ */
13
+ export interface EntityField {
14
+ confidence: SpecProvenance;
15
+ credibility?: number | null;
16
+ name: string;
17
+ provenance?: string | null;
18
+ /**
19
+ * Coarse semantic type: `"string"`, `"money"`, `"enum"`, `"date"`,
20
+ * `"bool"`, `"number"`, `"reference"`, … Free-form so comprehension can
21
+ * introduce new types without a schema bump.
22
+ */
23
+ type: string;
24
+ /**
25
+ * Enumerated values when `field_type == "enum"`.
26
+ */
27
+ values?: string[];
28
+ [k: string]: unknown;
29
+ }
@@ -0,0 +1,76 @@
1
+ /* eslint-disable */
2
+ /**
3
+ * This file was automatically generated.
4
+ * DO NOT MODIFY IT BY HAND. Regenerate with `just generate-types` or
5
+ * `qontinui-runner/src-tauri/scripts/generate_types.sh`.
6
+ */
7
+
8
+ import type { AssumptionEntry } from './AssumptionEntry';
9
+ import type { AuthModel } from './AuthModel';
10
+ import type { AuthRole } from './AuthRole';
11
+ import type { Entity } from './Entity';
12
+ import type { EntityField } from './EntityField';
13
+ import type { IrAssertion } from './IrAssertion';
14
+ import type { IrAssertionTarget } from './IrAssertionTarget';
15
+ import type { IrCrossRef } from './IrCrossRef';
16
+ import type { IrElementCriteria } from './IrElementCriteria';
17
+ import type { IrMetadata } from './IrMetadata';
18
+ import type { IrProvenance } from './IrProvenance';
19
+ import type { IrState } from './IrState';
20
+ import type { IrStateCondition } from './IrStateCondition';
21
+ import type { IrTransition } from './IrTransition';
22
+ import type { IrTransitionAction } from './IrTransitionAction';
23
+ import type { IrWaitSpec } from './IrWaitSpec';
24
+ import type { Operation } from './Operation';
25
+ import type { OperationEffect } from './OperationEffect';
26
+ import type { OperationInput } from './OperationInput';
27
+ import type { ProposalStatus } from './ProposalStatus';
28
+ import type { Relationship } from './Relationship';
29
+ import type { SpecProvenance } from './SpecProvenance';
30
+ import type { SpecTarget } from './SpecTarget';
31
+ import type { ValidationRule } from './ValidationRule';
32
+
33
+ /**
34
+ * The v0 Functional Spec. Five sections, each node confidence- and
35
+ * provenance-tagged. Serializes as an A2A `DataPart` inside a worker's
36
+ * `completion_reports.artifacts`; it is the durable, fully re-derivable
37
+ * hand-off artifact between conductor ticks (orchestration handoff contract §6).
38
+ */
39
+ export interface FunctionalSpec {
40
+ /**
41
+ * Section (5) ASSUMPTIONS LEDGER — every node with provenance `Assumed`, collated so
42
+ * the operator can review/override the generator's best-practice fills. For
43
+ * v0 the override surface is a direct edit of this ledger (`overridable`).
44
+ */
45
+ assumptions?: AssumptionEntry[];
46
+ /**
47
+ * Section (4) AUTH / PERMISSION MODEL — from login flows + gated routes.
48
+ */
49
+ auth?: AuthModel | null;
50
+ /**
51
+ * Section (1) DOMAIN — entities + relationships inferred from rendered data shapes.
52
+ */
53
+ entities?: Entity[];
54
+ /**
55
+ * Section (3b) NAVIGATION — the exact `crate::ir::IrTransition` values
56
+ * `IrPageSpec.transitions` carries. Reused (not re-declared) so app-gen's
57
+ * emitted IR re-parses to the identical spec subset.
58
+ */
59
+ navigation?: IrTransition[];
60
+ /**
61
+ * Section (2) CAPABILITIES — operations the frontend exposes. Existence is
62
+ * high-confidence; server-side effect is low-confidence by construction.
63
+ */
64
+ operations?: Operation[];
65
+ /**
66
+ * Schema version. Currently always `"0"`. Additive-only until `"1"`.
67
+ */
68
+ specVersion: string;
69
+ target: SpecTarget;
70
+ /**
71
+ * Section (3a) UI STATES — a literal superset of the UI Bridge IR. These are the
72
+ * exact `crate::ir::IrState` values `IrPageSpec.states` carries.
73
+ */
74
+ uiStates?: IrState[];
75
+ [k: string]: unknown;
76
+ }
@@ -0,0 +1,12 @@
1
+ /* eslint-disable */
2
+ /**
3
+ * This file was automatically generated.
4
+ * DO NOT MODIFY IT BY HAND. Regenerate with `just generate-types` or
5
+ * `qontinui-runner/src-tauri/scripts/generate_types.sh`.
6
+ */
7
+
8
+ /**
9
+ * Why an `Observed`/`Inferred` node is not covered in the generated app.
10
+ * (`Assumed` nodes never produce a gap — they are reported via the fill rate.)
11
+ */
12
+ export type GapReason = "not_generated" | "behavior_mismatch" | "unverifiable";
@@ -27,6 +27,12 @@ import type { ProposalStatus } from './ProposalStatus';
27
27
  * surface — the projection layer derives the runtime `LegacySpec` from this.
28
28
  */
29
29
  export interface IrPageSpec {
30
+ /**
31
+ * Per-page API-contract assertions evaluated by the Spec CI harness.
32
+ * Phase 1: value-level assertions (status_code, json_path, header,
33
+ * body_contains, response_time). Phase 2 will add schema conformance.
34
+ */
35
+ apiAssertions?: IrApiCheck[] | null;
30
36
  description?: string | null;
31
37
  id: string;
32
38
  initialState?: string | null;
@@ -21,6 +21,9 @@ export type LoopPhase =
21
21
  | "waiting_for_runner"
22
22
  | "stall_detecting"
23
23
  | "planning"
24
+ | "dispatching_worker"
25
+ | "reconciling"
26
+ | "elaborating"
24
27
  | "complete"
25
28
  | "stopped"
26
29
  | "error";
@@ -0,0 +1,37 @@
1
+ /* eslint-disable */
2
+ /**
3
+ * This file was automatically generated.
4
+ * DO NOT MODIFY IT BY HAND. Regenerate with `just generate-types` or
5
+ * `qontinui-runner/src-tauri/scripts/generate_types.sh`.
6
+ */
7
+
8
+ import type { OperationEffect } from './OperationEffect';
9
+ import type { OperationInput } from './OperationInput';
10
+ import type { SpecProvenance } from './SpecProvenance';
11
+ import type { ValidationRule } from './ValidationRule';
12
+
13
+ /**
14
+ * An operation the frontend exposes. Existence (`confidence`) is typically
15
+ * `Observed`; the server-side [`OperationEffect`] is `Assumed` by construction
16
+ * (the frontend cannot reveal what persists server-side).
17
+ */
18
+ export interface Operation {
19
+ confidence: SpecProvenance;
20
+ credibility?: number | null;
21
+ /**
22
+ * The (largely assumed) server-side effect.
23
+ */
24
+ effect?: OperationEffect | null;
25
+ /**
26
+ * Target entity, when the operation acts on one.
27
+ */
28
+ entity?: string | null;
29
+ inputs?: OperationInput[];
30
+ name: string;
31
+ provenance?: string | null;
32
+ /**
33
+ * `"create"`, `"read"`, `"update"`, `"delete"`, `"custom"`.
34
+ */
35
+ verb: string;
36
+ [k: string]: unknown;
37
+ }
@@ -0,0 +1,24 @@
1
+ /* eslint-disable */
2
+ /**
3
+ * This file was automatically generated.
4
+ * DO NOT MODIFY IT BY HAND. Regenerate with `just generate-types` or
5
+ * `qontinui-runner/src-tauri/scripts/generate_types.sh`.
6
+ */
7
+
8
+ import type { SpecProvenance } from './SpecProvenance';
9
+
10
+ /**
11
+ * The server-side effect of an [`Operation`]. `Assumed` by construction; the
12
+ * `assumption` field records the best-practice default the generator applied.
13
+ */
14
+ export interface OperationEffect {
15
+ /**
16
+ * The best-practice default applied when `confidence == Assumed`
17
+ * (e.g. `"persists + returns created row (REST 201 default)"`).
18
+ */
19
+ assumption?: string | null;
20
+ confidence: SpecProvenance;
21
+ credibility?: number | null;
22
+ provenance?: string | null;
23
+ [k: string]: unknown;
24
+ }
@@ -0,0 +1,25 @@
1
+ /* eslint-disable */
2
+ /**
3
+ * This file was automatically generated.
4
+ * DO NOT MODIFY IT BY HAND. Regenerate with `just generate-types` or
5
+ * `qontinui-runner/src-tauri/scripts/generate_types.sh`.
6
+ */
7
+
8
+ import type { SpecProvenance } from './SpecProvenance';
9
+ import type { ValidationRule } from './ValidationRule';
10
+
11
+ /**
12
+ * One input of an [`Operation`].
13
+ */
14
+ export interface OperationInput {
15
+ /**
16
+ * Field name (usually maps to an [`EntityField::name`]).
17
+ */
18
+ field: string;
19
+ required: boolean;
20
+ /**
21
+ * Client-side validation rule observed on the input, when any.
22
+ */
23
+ validation?: ValidationRule | null;
24
+ [k: string]: unknown;
25
+ }
@@ -0,0 +1,37 @@
1
+ /* eslint-disable */
2
+ /**
3
+ * This file was automatically generated.
4
+ * DO NOT MODIFY IT BY HAND. Regenerate with `just generate-types` or
5
+ * `qontinui-runner/src-tauri/scripts/generate_types.sh`.
6
+ */
7
+
8
+ import type { ApiStyle } from './ApiStyle';
9
+ import type { ArchitectureProfile } from './ArchitectureProfile';
10
+ import type { BackendProfile } from './BackendProfile';
11
+ import type { EnforcementProfile } from './EnforcementProfile';
12
+
13
+ /**
14
+ * The top-level Priorities Profile.
15
+ */
16
+ export interface Profile {
17
+ architecture: ArchitectureProfile;
18
+ backend: BackendProfile;
19
+ /**
20
+ * Naming / mapping conventions, as free-form `key -> value` pairs (e.g.
21
+ * `"naming" -> "snake_case"`, `"entityToTable" -> "pluralize"`). A `BTreeMap`
22
+ * so JSON serialization is deterministic. Open-ended by design so a profile
23
+ * can express conventions the schema didn't anticipate.
24
+ */
25
+ conventions?: {
26
+ [k: string]: string;
27
+ };
28
+ /**
29
+ * How the generation loop enforces quality.
30
+ */
31
+ enforcement?: EnforcementProfile | null;
32
+ /**
33
+ * Schema version. Currently always `"0"`. Additive-only until `"1"`.
34
+ */
35
+ profileVersion: string;
36
+ [k: string]: unknown;
37
+ }
@@ -0,0 +1,18 @@
1
+ /* eslint-disable */
2
+ /**
3
+ * This file was automatically generated.
4
+ * DO NOT MODIFY IT BY HAND. Regenerate with `just generate-types` or
5
+ * `qontinui-runner/src-tauri/scripts/generate_types.sh`.
6
+ */
7
+
8
+ /**
9
+ * Count of nodes by provenance, within a section or overall. The
10
+ * `observed + inferred` sum is the coverage denominator; `assumed` is tracked
11
+ * separately for the assumption-fill rate.
12
+ */
13
+ export interface ProvenanceMix {
14
+ assumed: number;
15
+ inferred: number;
16
+ observed: number;
17
+ [k: string]: unknown;
18
+ }
@@ -0,0 +1,26 @@
1
+ /* eslint-disable */
2
+ /**
3
+ * This file was automatically generated.
4
+ * DO NOT MODIFY IT BY HAND. Regenerate with `just generate-types` or
5
+ * `qontinui-runner/src-tauri/scripts/generate_types.sh`.
6
+ */
7
+
8
+ import type { SpecProvenance } from './SpecProvenance';
9
+
10
+ /**
11
+ * A relationship from one entity to another.
12
+ */
13
+ export interface Relationship {
14
+ confidence: SpecProvenance;
15
+ credibility?: number | null;
16
+ /**
17
+ * `"one-to-one"`, `"one-to-many"`, `"many-to-one"`, `"many-to-many"`.
18
+ */
19
+ kind: string;
20
+ provenance?: string | null;
21
+ /**
22
+ * Target entity name.
23
+ */
24
+ to: string;
25
+ [k: string]: unknown;
26
+ }
@@ -0,0 +1,35 @@
1
+ /* eslint-disable */
2
+ /**
3
+ * This file was automatically generated.
4
+ * DO NOT MODIFY IT BY HAND. Regenerate with `just generate-types` or
5
+ * `qontinui-runner/src-tauri/scripts/generate_types.sh`.
6
+ */
7
+
8
+ import type { ProvenanceMix } from './ProvenanceMix';
9
+ import type { SpecSection } from './SpecSection';
10
+
11
+ /**
12
+ * Per-section coverage breakdown. Mirrors the overall-verdict shape so a consumer
13
+ * can render the same widget at either granularity.
14
+ */
15
+ export interface SectionVerdict {
16
+ /**
17
+ * Fraction of this section's `assumed` nodes the generator filled.
18
+ */
19
+ assumedFillRate: number;
20
+ /**
21
+ * `numerator / denominator` for this section (`1.0` when denominator is 0).
22
+ */
23
+ coverage: number;
24
+ /**
25
+ * Mean credibility of this section's `inferred` nodes (∈ [0,1]).
26
+ */
27
+ credibility: number;
28
+ provenanceMix: ProvenanceMix;
29
+ section: SpecSection;
30
+ /**
31
+ * Freshness of the binding observation, when answered from a cached fallback.
32
+ */
33
+ stalenessSeconds?: number | null;
34
+ [k: string]: unknown;
35
+ }
@@ -0,0 +1,21 @@
1
+ /* eslint-disable */
2
+ /**
3
+ * This file was automatically generated.
4
+ * DO NOT MODIFY IT BY HAND. Regenerate with `just generate-types` or
5
+ * `qontinui-runner/src-tauri/scripts/generate_types.sh`.
6
+ */
7
+
8
+ /**
9
+ * How a spec node was established, relative to what the frontend *reveals*.
10
+ *
11
+ * Named `SpecProvenance` (not `Confidence`) to stay distinct from the
12
+ * match-confidence axis `crate::spec_check::Confidence`
13
+ * (`high`/`medium`/`low`), which is orthogonal: that one scores how well an
14
+ * observed element matched an assertion; this one scores how the spec node
15
+ * itself was derived from observation.
16
+ *
17
+ * The three buckets keep the coverage accounting split crisp: the rubric's
18
+ * denominator is `Observed + Inferred`; `Assumed` is reported separately as
19
+ * an assumption-fill rate and never folded into the headline coverage number.
20
+ */
21
+ export type SpecProvenance = "observed" | "inferred" | "assumed";
@@ -0,0 +1,11 @@
1
+ /* eslint-disable */
2
+ /**
3
+ * This file was automatically generated.
4
+ * DO NOT MODIFY IT BY HAND. Regenerate with `just generate-types` or
5
+ * `qontinui-runner/src-tauri/scripts/generate_types.sh`.
6
+ */
7
+
8
+ /**
9
+ * The five scorable sections of a [`crate::functional_spec::FunctionalSpec`].
10
+ */
11
+ export type SpecSection = "entities" | "operations" | "uiStates" | "navigation" | "auth";
@@ -0,0 +1,21 @@
1
+ /* eslint-disable */
2
+ /**
3
+ * This file was automatically generated.
4
+ * DO NOT MODIFY IT BY HAND. Regenerate with `just generate-types` or
5
+ * `qontinui-runner/src-tauri/scripts/generate_types.sh`.
6
+ */
7
+
8
+ /**
9
+ * What was observed and when.
10
+ */
11
+ export interface SpecTarget {
12
+ /**
13
+ * ISO-8601 UTC timestamp; stamped post-run when the observation completed.
14
+ */
15
+ observedAt?: string | null;
16
+ /**
17
+ * The source website URL the spec was synthesized from.
18
+ */
19
+ sourceUrl: string;
20
+ [k: string]: unknown;
21
+ }
@@ -0,0 +1,47 @@
1
+ /* eslint-disable */
2
+ /**
3
+ * This file was automatically generated.
4
+ * DO NOT MODIFY IT BY HAND. Regenerate with `just generate-types` or
5
+ * `qontinui-runner/src-tauri/scripts/generate_types.sh`.
6
+ */
7
+
8
+ /**
9
+ * Canonical error envelope for the qontinui-web Next.js UI-Bridge proxy.
10
+ *
11
+ * The catch-all route at
12
+ * `qontinui-web/frontend/src/app/api/ui-bridge/[...path]/route.ts`
13
+ * short-circuits requests the SDK would otherwise 404 on — and the
14
+ * browser-required routes that can't respond without a live SDK client —
15
+ * to a structured HTTP 503 with this body
16
+ * (`route.ts::noBrowserResponse`):
17
+ *
18
+ * ```json
19
+ * { "success": false, "code": "NO_BROWSER_CONNECTED",
20
+ * "message": "<path> requires a browser SDK client" }
21
+ * ```
22
+ *
23
+ * Modeled as a *generic* error envelope rather than a one-off
24
+ * `NoBrowserConnected` type: the `{success:false, code, message}` shape is
25
+ * the canonical structured-error contract for the whole proxy surface (not
26
+ * just the no-browser path), so a single reusable type is the more
27
+ * scalable and cleaner home. `code` stays a free-form `String` — the
28
+ * discriminator set (currently just `NO_BROWSER_CONNECTED`) is expected to
29
+ * grow, and pinning it to an enum here would force a schemas release on every
30
+ * new proxy error code. `success` is always `false` on this envelope (the
31
+ * success path uses [`UiBridgeHttpHealthEnvelope`] / the SDK's own envelopes).
32
+ */
33
+ export interface UiBridgeHttpErrorEnvelope {
34
+ /**
35
+ * Machine-readable error discriminator (e.g. `"NO_BROWSER_CONNECTED"`).
36
+ */
37
+ code: string;
38
+ /**
39
+ * Human-readable explanation (e.g. `"<path> requires a browser SDK client"`).
40
+ */
41
+ message: string;
42
+ /**
43
+ * Always `false` — this envelope is only emitted on the error path.
44
+ */
45
+ success: boolean;
46
+ [k: string]: unknown;
47
+ }
@@ -0,0 +1,36 @@
1
+ /* eslint-disable */
2
+ /**
3
+ * This file was automatically generated.
4
+ * DO NOT MODIFY IT BY HAND. Regenerate with `just generate-types` or
5
+ * `qontinui-runner/src-tauri/scripts/generate_types.sh`.
6
+ */
7
+
8
+ /**
9
+ * UI-Bridge metadata block included in the health envelope for the app
10
+ * discovery scanner. Spread of `config.appInfo` plus a fixed `capabilities`
11
+ * list. Present only when the server is configured with `appInfo` (the
12
+ * qontinui-web proxy always is — `route.ts` sets `appId: "qontinui-web"`).
13
+ */
14
+ export interface UiBridgeHttpHealthAppInfo {
15
+ /**
16
+ * Stable app identifier (e.g. `"qontinui-web"`).
17
+ */
18
+ appId: string;
19
+ /**
20
+ * Human-readable app name.
21
+ */
22
+ appName: string;
23
+ /**
24
+ * App surface type (e.g. `"web"`).
25
+ */
26
+ appType: string;
27
+ /**
28
+ * Advertised UI-Bridge capabilities (e.g. `["control","renderLog","debug"]`).
29
+ */
30
+ capabilities: string[];
31
+ /**
32
+ * UI framework (e.g. `"nextjs"`).
33
+ */
34
+ framework: string;
35
+ [k: string]: unknown;
36
+ }
@@ -0,0 +1,30 @@
1
+ /* eslint-disable */
2
+ /**
3
+ * This file was automatically generated.
4
+ * DO NOT MODIFY IT BY HAND. Regenerate with `just generate-types` or
5
+ * `qontinui-runner/src-tauri/scripts/generate_types.sh`.
6
+ */
7
+
8
+ /**
9
+ * Inner `data` payload of the UI-Bridge SDK HTTP health envelope.
10
+ *
11
+ * Emitted by the SDK's relay-transport handler for `GET /health`
12
+ * (`@qontinui/ui-bridge/server` `handleRelayRoute`, `nextjs.ts`): the
13
+ * `responsive` + `lastHeartbeat` fields plus a spread of the relay's
14
+ * `TransportDiagnostics`. Only `responsive` and `lastHeartbeat` are modeled
15
+ * explicitly here — the diagnostics spread (pendingCommandCount, connectedTabs,
16
+ * buildId, …) is intentionally left open (no `additionalProperties: false`,
17
+ * which schemars omits by default) so the diagnostics surface can evolve
18
+ * without a schemas release while the two stable health signals stay typed.
19
+ */
20
+ export interface UiBridgeHttpHealthData {
21
+ /**
22
+ * Max heartbeat timestamp (ms since epoch) across all tabs; `0` when none.
23
+ */
24
+ lastHeartbeat: number;
25
+ /**
26
+ * True when at least one connected tab has a fresh heartbeat.
27
+ */
28
+ responsive: boolean;
29
+ [k: string]: unknown;
30
+ }
@@ -0,0 +1,44 @@
1
+ /* eslint-disable */
2
+ /**
3
+ * This file was automatically generated.
4
+ * DO NOT MODIFY IT BY HAND. Regenerate with `just generate-types` or
5
+ * `qontinui-runner/src-tauri/scripts/generate_types.sh`.
6
+ */
7
+
8
+ import type { UiBridgeHttpHealthAppInfo } from './UiBridgeHttpHealthAppInfo';
9
+ import type { UiBridgeHttpHealthData } from './UiBridgeHttpHealthData';
10
+
11
+ /**
12
+ * Canonical success envelope for `GET /api/ui-bridge/health`.
13
+ *
14
+ * Distinct from [`UiBridgeResponseEnvelope`]: the HTTP health envelope has
15
+ * no `requestId` / `type`, and carries an app-discovery `uiBridge` block.
16
+ * Wire shape (`nextjs.ts::handleRelayRoute`):
17
+ *
18
+ * ```json
19
+ * { "success": true,
20
+ * "data": { "responsive": false, "lastHeartbeat": 0, ...diagnostics },
21
+ * "timestamp": 1713200000000,
22
+ * "uiBridge": { "appId": "qontinui-web", ..., "capabilities": [...] } }
23
+ * ```
24
+ *
25
+ * `uiBridge` is optional (omitted when the server has no `appInfo`); the
26
+ * other three fields are always present.
27
+ */
28
+ export interface UiBridgeHttpHealthEnvelope {
29
+ data: UiBridgeHttpHealthData;
30
+ /**
31
+ * Always `true` on the health path.
32
+ */
33
+ success: boolean;
34
+ /**
35
+ * Server-side timestamp (ms since epoch) of when the response was produced.
36
+ */
37
+ timestamp: number;
38
+ /**
39
+ * App-discovery metadata; present only when the server is configured
40
+ * with `appInfo`.
41
+ */
42
+ uiBridge?: UiBridgeHttpHealthAppInfo | null;
43
+ [k: string]: unknown;
44
+ }
@@ -0,0 +1,22 @@
1
+ /* eslint-disable */
2
+ /**
3
+ * This file was automatically generated.
4
+ * DO NOT MODIFY IT BY HAND. Regenerate with `just generate-types` or
5
+ * `qontinui-runner/src-tauri/scripts/generate_types.sh`.
6
+ */
7
+
8
+ import type { SpecProvenance } from './SpecProvenance';
9
+
10
+ /**
11
+ * A client-side validation rule observed on an input.
12
+ */
13
+ export interface ValidationRule {
14
+ confidence: SpecProvenance;
15
+ credibility?: number | null;
16
+ provenance?: string | null;
17
+ /**
18
+ * The rule expression as observed (e.g. `"> 0"`, `"email"`, `"maxLength 80"`).
19
+ */
20
+ rule: string;
21
+ [k: string]: unknown;
22
+ }
@@ -25,17 +25,23 @@ export type { ApiAssertion } from './ApiAssertion';
25
25
  export type { ApiAssertionOperator } from './ApiAssertionOperator';
26
26
  export type { ApiAssertionType } from './ApiAssertionType';
27
27
  export type { ApiContentType } from './ApiContentType';
28
+ export type { ApiStyle } from './ApiStyle';
28
29
  export type { ApiVariableExtraction } from './ApiVariableExtraction';
29
30
  export type { App } from './App';
30
31
  export type { AppError } from './AppError';
31
32
  export type { AppEvent } from './AppEvent';
32
33
  export type { AppListResponse } from './AppListResponse';
34
+ export type { ArchitectureProfile } from './ArchitectureProfile';
33
35
  export type { AssertionMiss } from './AssertionMiss';
34
36
  export type { AssertionOutcome } from './AssertionOutcome';
35
37
  export type { AssertionResult } from './AssertionResult';
36
38
  export type { AssertionScope } from './AssertionScope';
37
39
  export type { AssertionSeverityCounts } from './AssertionSeverityCounts';
40
+ export type { AssumptionEntry } from './AssumptionEntry';
41
+ export type { AuthModel } from './AuthModel';
42
+ export type { AuthRole } from './AuthRole';
38
43
  export type { AvailableTransitionsResult } from './AvailableTransitionsResult';
44
+ export type { BackendProfile } from './BackendProfile';
39
45
  export type { BaseStepFields } from './BaseStepFields';
40
46
  export type { BatchComputeEmbeddingRequest } from './BatchComputeEmbeddingRequest';
41
47
  export type { BatchComputeEmbeddingResponse } from './BatchComputeEmbeddingResponse';
@@ -56,6 +62,7 @@ export type { CodeExecutionStep } from './CodeExecutionStep';
56
62
  export type { CommandMode } from './CommandMode';
57
63
  export type { CommandStep } from './CommandStep';
58
64
  export type { CommandStepPhase } from './CommandStepPhase';
65
+ export type { CompletenessVerdict } from './CompletenessVerdict';
59
66
  export type { ComponentActionInfo } from './ComponentActionInfo';
60
67
  export type { ComponentActionRequest } from './ComponentActionRequest';
61
68
  export type { ComputeEmbeddingRequest } from './ComputeEmbeddingRequest';
@@ -81,6 +88,7 @@ export type { Coordinates } from './Coordinates';
81
88
  export type { CostTrendDataPoint } from './CostTrendDataPoint';
82
89
  export type { CostTrendResponse } from './CostTrendResponse';
83
90
  export type { CoverageData } from './CoverageData';
91
+ export type { CoverageGap } from './CoverageGap';
84
92
  export type { CreateMcpCallInput } from './CreateMcpCallInput';
85
93
  export type { CreateMcpServerInput } from './CreateMcpServerInput';
86
94
  export type { CreateOlConfigRequest } from './CreateOlConfigRequest';
@@ -122,6 +130,9 @@ export type { EmbeddingListResponse } from './EmbeddingListResponse';
122
130
  export type { EmbeddingResultItem } from './EmbeddingResultItem';
123
131
  export type { EmbeddingResultsRequest } from './EmbeddingResultsRequest';
124
132
  export type { EmbeddingResultsResponse } from './EmbeddingResultsResponse';
133
+ export type { EnforcementProfile } from './EnforcementProfile';
134
+ export type { Entity } from './Entity';
135
+ export type { EntityField } from './EntityField';
125
136
  export type { ErrorType } from './ErrorType';
126
137
  export type { ExecutePlaybookStep } from './ExecutePlaybookStep';
127
138
  export type { ExecutionActionType } from './ExecutionActionType';
@@ -169,7 +180,9 @@ export type { FindingUserInput } from './FindingUserInput';
169
180
  export type { FindingsSummary } from './FindingsSummary';
170
181
  export type { FlowEvent } from './FlowEvent';
171
182
  export type { FullRunnerStep } from './FullRunnerStep';
183
+ export type { FunctionalSpec } from './FunctionalSpec';
172
184
  export type { GUIElementChunk } from './GUIElementChunk';
185
+ export type { GapReason } from './GapReason';
173
186
  export type { GateEvaluationResult } from './GateEvaluationResult';
174
187
  export type { GitOpListResponse } from './GitOpListResponse';
175
188
  export type { GitOpRecord } from './GitOpRecord';
@@ -259,6 +272,9 @@ export type { NodeStatus } from './NodeStatus';
259
272
  export type { NodeType } from './NodeType';
260
273
  export type { OcrEngine } from './OcrEngine';
261
274
  export type { OlConfig } from './OlConfig';
275
+ export type { Operation } from './Operation';
276
+ export type { OperationEffect } from './OperationEffect';
277
+ export type { OperationInput } from './OperationInput';
262
278
  export type { OrchestrationLoopConfig } from './OrchestrationLoopConfig';
263
279
  export type { OrchestrationLoopStatus } from './OrchestrationLoopStatus';
264
280
  export type { Outcome } from './Outcome';
@@ -283,9 +299,11 @@ export type { PollingConfig } from './PollingConfig';
283
299
  export type { ProcessConfig } from './ProcessConfig';
284
300
  export type { ProcessState } from './ProcessState';
285
301
  export type { ProcessStatus } from './ProcessStatus';
302
+ export type { Profile } from './Profile';
286
303
  export type { PromptStep } from './PromptStep';
287
304
  export type { PromptStepPhase } from './PromptStepPhase';
288
305
  export type { ProposalStatus } from './ProposalStatus';
306
+ export type { ProvenanceMix } from './ProvenanceMix';
289
307
  export type { RAGDashboardStats } from './RAGDashboardStats';
290
308
  export type { RagCompletionEvent } from './RagCompletionEvent';
291
309
  export type { RagProcessingStatus } from './RagProcessingStatus';
@@ -297,6 +315,7 @@ export type { RecordGitOpRequest } from './RecordGitOpRequest';
297
315
  export type { ReflectionFixOutput } from './ReflectionFixOutput';
298
316
  export type { Region } from './Region';
299
317
  export type { RegisterAppRequest } from './RegisterAppRequest';
318
+ export type { Relationship } from './Relationship';
300
319
  export type { RepositoryInactiveCondition } from './RepositoryInactiveCondition';
301
320
  export type { RepositoryWatch } from './RepositoryWatch';
302
321
  export type { ResolvedInitialStates } from './ResolvedInitialStates';
@@ -340,6 +359,7 @@ export type { ScrollDirection } from './ScrollDirection';
340
359
  export type { SearchOptions } from './SearchOptions';
341
360
  export type { SearchResultItem } from './SearchResultItem';
342
361
  export type { SearchStrategy } from './SearchStrategy';
362
+ export type { SectionVerdict } from './SectionVerdict';
343
363
  export type { SemanticSearchRequest } from './SemanticSearchRequest';
344
364
  export type { SemanticSearchResponse } from './SemanticSearchResponse';
345
365
  export type { SpecApiEvent } from './SpecApiEvent';
@@ -348,6 +368,9 @@ export type { SpecCheckPolicy } from './SpecCheckPolicy';
348
368
  export type { SpecCheckResult } from './SpecCheckResult';
349
369
  export type { SpecCheckStepConfig } from './SpecCheckStepConfig';
350
370
  export type { SpecCheckSummary } from './SpecCheckSummary';
371
+ export type { SpecProvenance } from './SpecProvenance';
372
+ export type { SpecSection } from './SpecSection';
373
+ export type { SpecTarget } from './SpecTarget';
351
374
  export type { SpecValidation } from './SpecValidation';
352
375
  export type { StageCondition } from './StageCondition';
353
376
  export type { StageInput } from './StageInput';
@@ -445,6 +468,10 @@ export type { UiBridgeAction } from './UiBridgeAction';
445
468
  export type { UiBridgeAssertType } from './UiBridgeAssertType';
446
469
  export type { UiBridgeComparisonMode } from './UiBridgeComparisonMode';
447
470
  export type { UiBridgeDesignAuditStep } from './UiBridgeDesignAuditStep';
471
+ export type { UiBridgeHttpErrorEnvelope } from './UiBridgeHttpErrorEnvelope';
472
+ export type { UiBridgeHttpHealthAppInfo } from './UiBridgeHttpHealthAppInfo';
473
+ export type { UiBridgeHttpHealthData } from './UiBridgeHttpHealthData';
474
+ export type { UiBridgeHttpHealthEnvelope } from './UiBridgeHttpHealthEnvelope';
448
475
  export type { UiBridgeRequestEnvelope } from './UiBridgeRequestEnvelope';
449
476
  export type { UiBridgeResponseEnvelope } from './UiBridgeResponseEnvelope';
450
477
  export type { UiBridgeSeverity } from './UiBridgeSeverity';
@@ -459,6 +486,7 @@ export type { UpdateOlConfigRequest } from './UpdateOlConfigRequest';
459
486
  export type { UpdateScheduledTaskRequest } from './UpdateScheduledTaskRequest';
460
487
  export type { ValidateConfigRequest } from './ValidateConfigRequest';
461
488
  export type { ValidateConfigResponse } from './ValidateConfigResponse';
489
+ export type { ValidationRule } from './ValidationRule';
462
490
  export type { VectorSearchResult } from './VectorSearchResult';
463
491
  export type { VerificationAgentContext } from './VerificationAgentContext';
464
492
  export type { VerificationCategoryKind } from './VerificationCategoryKind';
@@ -111,4 +111,39 @@ export interface IRDocument {
111
111
 
112
112
  /** ID of the initial/starting state, if applicable. */
113
113
  initialState?: string;
114
+
115
+ /** Per-page API-contract assertions evaluated by the Spec CI harness. */
116
+ apiAssertions?: IRApiCheck[];
114
117
  }
118
+
119
+ // ---------------------------------------------------------------------------
120
+ // API-contract checks (Spec CI harness)
121
+ // ---------------------------------------------------------------------------
122
+
123
+ /**
124
+ * A single API-contract check: issue a request, validate the response.
125
+ */
126
+ export interface IRApiCheck {
127
+ id: string;
128
+ description?: string;
129
+ request: {
130
+ method: string;
131
+ path: string;
132
+ headers?: Record<string, string>;
133
+ body?: unknown;
134
+ };
135
+ effect?: "read" | "write" | "destructive";
136
+ assertions: IRApiAssertion[];
137
+ }
138
+
139
+ /**
140
+ * API assertion: either a value-level assertion (status_code, json_path, etc.)
141
+ * or a schema-conformance assertion (conforms_to -- Phase 2 placeholder).
142
+ */
143
+ export type IRApiAssertion =
144
+ | { type: "status_code"; expected: unknown; operator?: string }
145
+ | { type: "json_path"; jsonPath: string; expected: unknown; operator?: string }
146
+ | { type: "header"; headerName: string; expected: unknown; operator?: string }
147
+ | { type: "body_contains"; expected: unknown }
148
+ | { type: "response_time"; expected: unknown; operator?: string }
149
+ | { type: "conforms_to"; schema: string };