@cat-factory/contracts 0.279.0 → 0.281.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/routes/index.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,+EAA+E;AAC/E,oDAAoD;AACpD,cAAc,cAAc,CAAA;AAC5B,cAAc,eAAe,CAAA;AAC7B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,eAAe,CAAA;AAC7B,cAAc,WAAW,CAAA;AACzB,cAAc,YAAY,CAAA;AAC1B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,cAAc,CAAA;AAC5B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,mBAAmB,CAAA;AACjC,cAAc,8BAA8B,CAAA;AAC5C,cAAc,gBAAgB,CAAA;AAC9B,cAAc,oBAAoB,CAAA;AAClC,cAAc,eAAe,CAAA;AAC7B,cAAc,mBAAmB,CAAA;AACjC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,YAAY,CAAA;AAC1B,cAAc,eAAe,CAAA;AAC7B,cAAc,uBAAuB,CAAA;AACrC,cAAc,oBAAoB,CAAA;AAClC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA;AAC3B,cAAc,UAAU,CAAA;AACxB,cAAc,mBAAmB,CAAA;AACjC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,qBAAqB,CAAA;AACnC,cAAc,0BAA0B,CAAA;AACxC,cAAc,aAAa,CAAA;AAC3B,cAAc,kBAAkB,CAAA;AAChC,cAAc,oBAAoB,CAAA;AAClC,cAAc,YAAY,CAAA;AAC1B,cAAc,uBAAuB,CAAA;AACrC,cAAc,oBAAoB,CAAA;AAClC,cAAc,oBAAoB,CAAA;AAClC,cAAc,qBAAqB,CAAA;AACnC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,oBAAoB,CAAA;AAClC,cAAc,aAAa,CAAA;AAC3B,cAAc,oBAAoB,CAAA;AAClC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,yBAAyB,CAAA;AACvC,cAAc,6BAA6B,CAAA;AAC3C,cAAc,gBAAgB,CAAA;AAC9B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,cAAc,CAAA;AAC5B,cAAc,uBAAuB,CAAA;AACrC,cAAc,wBAAwB,CAAA;AACtC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,mBAAmB,CAAA;AACjC,cAAc,sBAAsB,CAAA;AACpC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,gBAAgB,CAAA;AAC9B,cAAc,uBAAuB,CAAA;AACrC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,gBAAgB,CAAA;AAC9B,cAAc,cAAc,CAAA;AAC5B,cAAc,mBAAmB,CAAA;AACjC,cAAc,cAAc,CAAA;AAC5B,cAAc,cAAc,CAAA;AAC5B,cAAc,gCAAgC,CAAA;AAC9C,cAAc,eAAe,CAAA;AAC7B,cAAc,mBAAmB,CAAA;AACjC,cAAc,6BAA6B,CAAA;AAC3C,cAAc,mBAAmB,CAAA;AACjC,cAAc,wBAAwB,CAAA;AACtC,cAAc,YAAY,CAAA;AAC1B,cAAc,WAAW,CAAA;AACzB,cAAc,YAAY,CAAA;AAC1B,cAAc,eAAe,CAAA;AAC7B,cAAc,cAAc,CAAA;AAC5B,cAAc,kBAAkB,CAAA;AAChC,cAAc,eAAe,CAAA;AAC7B,cAAc,oBAAoB,CAAA;AAClC,cAAc,yBAAyB,CAAA;AACvC,cAAc,wBAAwB,CAAA;AACtC,cAAc,yBAAyB,CAAA;AACvC,cAAc,iBAAiB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/routes/index.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,+EAA+E;AAC/E,oDAAoD;AACpD,cAAc,cAAc,CAAA;AAC5B,cAAc,eAAe,CAAA;AAC7B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,eAAe,CAAA;AAC7B,cAAc,WAAW,CAAA;AACzB,cAAc,YAAY,CAAA;AAC1B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,cAAc,CAAA;AAC5B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,mBAAmB,CAAA;AACjC,cAAc,8BAA8B,CAAA;AAC5C,cAAc,gBAAgB,CAAA;AAC9B,cAAc,oBAAoB,CAAA;AAClC,cAAc,eAAe,CAAA;AAC7B,cAAc,mBAAmB,CAAA;AACjC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,YAAY,CAAA;AAC1B,cAAc,eAAe,CAAA;AAC7B,cAAc,uBAAuB,CAAA;AACrC,cAAc,oBAAoB,CAAA;AAClC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA;AAC3B,cAAc,UAAU,CAAA;AACxB,cAAc,mBAAmB,CAAA;AACjC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,qBAAqB,CAAA;AACnC,cAAc,0BAA0B,CAAA;AACxC,cAAc,aAAa,CAAA;AAC3B,cAAc,kBAAkB,CAAA;AAChC,cAAc,oBAAoB,CAAA;AAClC,cAAc,YAAY,CAAA;AAC1B,cAAc,uBAAuB,CAAA;AACrC,cAAc,oBAAoB,CAAA;AAClC,cAAc,oBAAoB,CAAA;AAClC,cAAc,qBAAqB,CAAA;AACnC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,oBAAoB,CAAA;AAClC,cAAc,aAAa,CAAA;AAC3B,cAAc,oBAAoB,CAAA;AAClC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,yBAAyB,CAAA;AACvC,cAAc,6BAA6B,CAAA;AAC3C,cAAc,gBAAgB,CAAA;AAC9B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,cAAc,CAAA;AAC5B,cAAc,uBAAuB,CAAA;AACrC,cAAc,wBAAwB,CAAA;AACtC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,mBAAmB,CAAA;AACjC,cAAc,sBAAsB,CAAA;AACpC,cAAc,kBAAkB,CAAA;AAChC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,gBAAgB,CAAA;AAC9B,cAAc,uBAAuB,CAAA;AACrC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,gBAAgB,CAAA;AAC9B,cAAc,cAAc,CAAA;AAC5B,cAAc,mBAAmB,CAAA;AACjC,cAAc,cAAc,CAAA;AAC5B,cAAc,cAAc,CAAA;AAC5B,cAAc,gCAAgC,CAAA;AAC9C,cAAc,eAAe,CAAA;AAC7B,cAAc,mBAAmB,CAAA;AACjC,cAAc,6BAA6B,CAAA;AAC3C,cAAc,mBAAmB,CAAA;AACjC,cAAc,wBAAwB,CAAA;AACtC,cAAc,YAAY,CAAA;AAC1B,cAAc,WAAW,CAAA;AACzB,cAAc,YAAY,CAAA;AAC1B,cAAc,eAAe,CAAA;AAC7B,cAAc,cAAc,CAAA;AAC5B,cAAc,kBAAkB,CAAA;AAChC,cAAc,eAAe,CAAA;AAC7B,cAAc,oBAAoB,CAAA;AAClC,cAAc,yBAAyB,CAAA;AACvC,cAAc,wBAAwB,CAAA;AACtC,cAAc,yBAAyB,CAAA;AACvC,cAAc,iBAAiB,CAAA"}
@@ -103,7 +103,7 @@ export declare const listPipelinesContract: {
103
103
  readonly version: v.OptionalSchema<v.NumberSchema<undefined>, undefined>;
104
104
  readonly public: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
105
105
  readonly availability: v.OptionalSchema<v.UnionSchema<[v.LiteralSchema<"one-off", undefined>, v.LiteralSchema<"recurring", undefined>, v.LiteralSchema<"both", undefined>], undefined>, undefined>;
106
- readonly purpose: v.OptionalSchema<v.PicklistSchema<readonly ["build", "document", "review", "research", "planning"], undefined>, undefined>;
106
+ readonly purpose: v.PicklistSchema<readonly ["build", "document", "review", "research", "planning"], undefined>;
107
107
  }, undefined>, undefined>;
108
108
  };
109
109
  };
@@ -182,7 +182,7 @@ export declare const createPipelineContract: {
182
182
  }, undefined>, undefined>, undefined>, undefined>;
183
183
  readonly labels: v.OptionalSchema<v.ArraySchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 40, undefined>]>, undefined>, undefined>;
184
184
  readonly availability: v.OptionalSchema<v.UnionSchema<[v.LiteralSchema<"one-off", undefined>, v.LiteralSchema<"recurring", undefined>, v.LiteralSchema<"both", undefined>], undefined>, undefined>;
185
- readonly purpose: v.OptionalSchema<v.PicklistSchema<readonly ["build", "document", "review", "research", "planning"], undefined>, undefined>;
185
+ readonly purpose: v.PicklistSchema<readonly ["build", "document", "review", "research", "planning"], undefined>;
186
186
  }, undefined>;
187
187
  readonly responsesByStatusCode: {
188
188
  readonly '4xx': v.ObjectSchema<{
@@ -284,7 +284,7 @@ export declare const createPipelineContract: {
284
284
  readonly version: v.OptionalSchema<v.NumberSchema<undefined>, undefined>;
285
285
  readonly public: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
286
286
  readonly availability: v.OptionalSchema<v.UnionSchema<[v.LiteralSchema<"one-off", undefined>, v.LiteralSchema<"recurring", undefined>, v.LiteralSchema<"both", undefined>], undefined>, undefined>;
287
- readonly purpose: v.OptionalSchema<v.PicklistSchema<readonly ["build", "document", "review", "research", "planning"], undefined>, undefined>;
287
+ readonly purpose: v.PicklistSchema<readonly ["build", "document", "review", "research", "planning"], undefined>;
288
288
  }, undefined>;
289
289
  };
290
290
  };
@@ -399,7 +399,7 @@ export declare const clonePipelineContract: {
399
399
  readonly version: v.OptionalSchema<v.NumberSchema<undefined>, undefined>;
400
400
  readonly public: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
401
401
  readonly availability: v.OptionalSchema<v.UnionSchema<[v.LiteralSchema<"one-off", undefined>, v.LiteralSchema<"recurring", undefined>, v.LiteralSchema<"both", undefined>], undefined>, undefined>;
402
- readonly purpose: v.OptionalSchema<v.PicklistSchema<readonly ["build", "document", "review", "research", "planning"], undefined>, undefined>;
402
+ readonly purpose: v.PicklistSchema<readonly ["build", "document", "review", "research", "planning"], undefined>;
403
403
  }, undefined>;
404
404
  };
405
405
  };
@@ -512,7 +512,7 @@ export declare const reseedPipelineContract: {
512
512
  readonly version: v.OptionalSchema<v.NumberSchema<undefined>, undefined>;
513
513
  readonly public: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
514
514
  readonly availability: v.OptionalSchema<v.UnionSchema<[v.LiteralSchema<"one-off", undefined>, v.LiteralSchema<"recurring", undefined>, v.LiteralSchema<"both", undefined>], undefined>, undefined>;
515
- readonly purpose: v.OptionalSchema<v.PicklistSchema<readonly ["build", "document", "review", "research", "planning"], undefined>, undefined>;
515
+ readonly purpose: v.PicklistSchema<readonly ["build", "document", "review", "research", "planning"], undefined>;
516
516
  }, undefined>;
517
517
  };
518
518
  };
@@ -698,7 +698,7 @@ export declare const updatePipelineContract: {
698
698
  readonly version: v.OptionalSchema<v.NumberSchema<undefined>, undefined>;
699
699
  readonly public: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
700
700
  readonly availability: v.OptionalSchema<v.UnionSchema<[v.LiteralSchema<"one-off", undefined>, v.LiteralSchema<"recurring", undefined>, v.LiteralSchema<"both", undefined>], undefined>, undefined>;
701
- readonly purpose: v.OptionalSchema<v.PicklistSchema<readonly ["build", "document", "review", "research", "planning"], undefined>, undefined>;
701
+ readonly purpose: v.PicklistSchema<readonly ["build", "document", "review", "research", "planning"], undefined>;
702
702
  }, undefined>;
703
703
  };
704
704
  };
@@ -814,7 +814,7 @@ export declare const organizePipelineContract: {
814
814
  readonly version: v.OptionalSchema<v.NumberSchema<undefined>, undefined>;
815
815
  readonly public: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
816
816
  readonly availability: v.OptionalSchema<v.UnionSchema<[v.LiteralSchema<"one-off", undefined>, v.LiteralSchema<"recurring", undefined>, v.LiteralSchema<"both", undefined>], undefined>, undefined>;
817
- readonly purpose: v.OptionalSchema<v.PicklistSchema<readonly ["build", "document", "review", "research", "planning"], undefined>, undefined>;
817
+ readonly purpose: v.PicklistSchema<readonly ["build", "document", "review", "research", "planning"], undefined>;
818
818
  }, undefined>;
819
819
  };
820
820
  };
@@ -0,0 +1,110 @@
1
+ /**
2
+ * The service's in-repo specification: the structured requirement tree, the rendered Gherkin, and
3
+ * the ref + commit both were read at.
4
+ *
5
+ * `read` scope, like every other discovery and evidence read here. It is a read of what the
6
+ * service is committed to honouring, and an integration reviewing a run's outcome must be able to
7
+ * see the criteria it was scored against without holding a key that could also merge a pull
8
+ * request.
9
+ *
10
+ * Read-only by design, not by omission: see the note at the top of `../public-spec.ts`.
11
+ */
12
+ export declare const getPublicServiceSpecContract: {
13
+ readonly method: "get";
14
+ readonly requestPathParamsSchema: import("valibot").ObjectSchema<{
15
+ serviceId: import("valibot").StringSchema<undefined>;
16
+ }, undefined> & import("@toad-contracts/core").StandardObjectKeysV1<unknown, unknown>;
17
+ readonly pathResolver: ({ serviceId }: {
18
+ serviceId: string;
19
+ }) => string;
20
+ readonly responsesByStatusCode: {
21
+ readonly '4xx': import("valibot").ObjectSchema<{
22
+ readonly error: import("valibot").ObjectSchema<{
23
+ readonly code: import("valibot").StringSchema<undefined>;
24
+ readonly message: import("valibot").StringSchema<undefined>;
25
+ readonly details: import("valibot").OptionalSchema<import("valibot").UnknownSchema, undefined>;
26
+ readonly issues: import("valibot").OptionalSchema<import("valibot").ArraySchema<import("valibot").ObjectSchema<{
27
+ readonly path: import("valibot").OptionalSchema<import("valibot").StringSchema<undefined>, undefined>;
28
+ readonly message: import("valibot").StringSchema<undefined>;
29
+ }, undefined>, undefined>, undefined>;
30
+ }, undefined>;
31
+ }, undefined>;
32
+ readonly '5xx': import("valibot").ObjectSchema<{
33
+ readonly error: import("valibot").ObjectSchema<{
34
+ readonly code: import("valibot").StringSchema<undefined>;
35
+ readonly message: import("valibot").StringSchema<undefined>;
36
+ readonly details: import("valibot").OptionalSchema<import("valibot").UnknownSchema, undefined>;
37
+ readonly issues: import("valibot").OptionalSchema<import("valibot").ArraySchema<import("valibot").ObjectSchema<{
38
+ readonly path: import("valibot").OptionalSchema<import("valibot").StringSchema<undefined>, undefined>;
39
+ readonly message: import("valibot").StringSchema<undefined>;
40
+ }, undefined>, undefined>, undefined>;
41
+ }, undefined>;
42
+ }, undefined>;
43
+ readonly 200: import("valibot").ObjectSchema<{
44
+ readonly serviceId: import("valibot").StringSchema<undefined>;
45
+ readonly anchor: import("valibot").PicklistSchema<["present", "absent", "unparsed"], undefined>;
46
+ readonly spec: import("valibot").NullableSchema<import("valibot").ObjectSchema<{
47
+ readonly summary: import("valibot").OptionalSchema<import("valibot").SchemaWithPipe<readonly [import("valibot").StringSchema<undefined>, import("valibot").MaxLengthAction<string, 2000, undefined>]>, "">;
48
+ readonly modules: import("valibot").OptionalSchema<import("valibot").ArraySchema<import("valibot").ObjectSchema<{
49
+ readonly name: import("valibot").SchemaWithPipe<readonly [import("valibot").StringSchema<undefined>, import("valibot").TrimAction, import("valibot").MinLengthAction<string, 1, undefined>, import("valibot").MaxLengthAction<string, 120, undefined>]>;
50
+ readonly summary: import("valibot").OptionalSchema<import("valibot").SchemaWithPipe<readonly [import("valibot").StringSchema<undefined>, import("valibot").MaxLengthAction<string, 2000, undefined>]>, "">;
51
+ readonly groups: import("valibot").OptionalSchema<import("valibot").ArraySchema<import("valibot").ObjectSchema<{
52
+ readonly name: import("valibot").SchemaWithPipe<readonly [import("valibot").StringSchema<undefined>, import("valibot").TrimAction, import("valibot").MinLengthAction<string, 1, undefined>, import("valibot").MaxLengthAction<string, 120, undefined>]>;
53
+ readonly summary: import("valibot").OptionalSchema<import("valibot").SchemaWithPipe<readonly [import("valibot").StringSchema<undefined>, import("valibot").MaxLengthAction<string, 2000, undefined>]>, "">;
54
+ readonly requirements: import("valibot").OptionalSchema<import("valibot").ArraySchema<import("valibot").ObjectSchema<{
55
+ readonly id: import("valibot").SchemaWithPipe<readonly [import("valibot").StringSchema<undefined>, import("valibot").TrimAction, import("valibot").MinLengthAction<string, 1, undefined>, import("valibot").MaxLengthAction<string, 200, undefined>]>;
56
+ readonly title: import("valibot").SchemaWithPipe<readonly [import("valibot").StringSchema<undefined>, import("valibot").TrimAction, import("valibot").MinLengthAction<string, 1, undefined>, import("valibot").MaxLengthAction<string, 120, undefined>]>;
57
+ readonly statement: import("valibot").SchemaWithPipe<readonly [import("valibot").StringSchema<undefined>, import("valibot").TrimAction, import("valibot").MinLengthAction<string, 1, undefined>, import("valibot").MaxLengthAction<string, 4000, undefined>]>;
58
+ readonly kind: import("valibot").PicklistSchema<["functional", "nonfunctional", "constraint"], undefined>;
59
+ readonly priority: import("valibot").PicklistSchema<["must", "should", "could"], undefined>;
60
+ readonly state: import("valibot").OptionalSchema<import("valibot").PicklistSchema<["aspirational", "established"], undefined>, "aspirational">;
61
+ readonly sourceBlockIds: import("valibot").OptionalSchema<import("valibot").ArraySchema<import("valibot").SchemaWithPipe<readonly [import("valibot").StringSchema<undefined>, import("valibot").TrimAction, import("valibot").MinLengthAction<string, 1, undefined>, import("valibot").MaxLengthAction<string, 200, undefined>]>, undefined>, readonly []>;
62
+ readonly acceptance: import("valibot").OptionalSchema<import("valibot").ArraySchema<import("valibot").ObjectSchema<{
63
+ readonly id: import("valibot").SchemaWithPipe<readonly [import("valibot").StringSchema<undefined>, import("valibot").TrimAction, import("valibot").MinLengthAction<string, 1, undefined>, import("valibot").MaxLengthAction<string, 200, undefined>]>;
64
+ readonly given: import("valibot").SchemaWithPipe<readonly [import("valibot").StringSchema<undefined>, import("valibot").MaxLengthAction<string, 2000, undefined>]>;
65
+ readonly when: import("valibot").SchemaWithPipe<readonly [import("valibot").StringSchema<undefined>, import("valibot").MaxLengthAction<string, 2000, undefined>]>;
66
+ readonly outcome: import("valibot").SchemaWithPipe<readonly [import("valibot").StringSchema<undefined>, import("valibot").MaxLengthAction<string, 2000, undefined>]>;
67
+ }, undefined>, undefined>, readonly []>;
68
+ }, undefined>, undefined>, readonly []>;
69
+ readonly rules: import("valibot").OptionalSchema<import("valibot").ArraySchema<import("valibot").ObjectSchema<{
70
+ readonly id: import("valibot").SchemaWithPipe<readonly [import("valibot").StringSchema<undefined>, import("valibot").TrimAction, import("valibot").MinLengthAction<string, 1, undefined>, import("valibot").MaxLengthAction<string, 200, undefined>]>;
71
+ readonly rule: import("valibot").SchemaWithPipe<readonly [import("valibot").StringSchema<undefined>, import("valibot").TrimAction, import("valibot").MinLengthAction<string, 1, undefined>, import("valibot").MaxLengthAction<string, 4000, undefined>]>;
72
+ readonly rationale: import("valibot").OptionalSchema<import("valibot").SchemaWithPipe<readonly [import("valibot").StringSchema<undefined>, import("valibot").MaxLengthAction<string, 2000, undefined>]>, "">;
73
+ readonly sourceBlockIds: import("valibot").OptionalSchema<import("valibot").ArraySchema<import("valibot").SchemaWithPipe<readonly [import("valibot").StringSchema<undefined>, import("valibot").TrimAction, import("valibot").MinLengthAction<string, 1, undefined>, import("valibot").MaxLengthAction<string, 200, undefined>]>, undefined>, readonly []>;
74
+ }, undefined>, undefined>, readonly []>;
75
+ }, undefined>, undefined>, readonly []>;
76
+ }, undefined>, undefined>, readonly []>;
77
+ readonly service: import("valibot").OptionalSchema<import("valibot").SchemaWithPipe<readonly [import("valibot").StringSchema<undefined>, import("valibot").TrimAction, import("valibot").MaxLengthAction<string, 120, undefined>]>, "">;
78
+ }, undefined>, undefined>;
79
+ readonly features: import("valibot").ArraySchema<import("valibot").ObjectSchema<{
80
+ readonly module: import("valibot").StringSchema<undefined>;
81
+ readonly group: import("valibot").StringSchema<undefined>;
82
+ readonly path: import("valibot").StringSchema<undefined>;
83
+ readonly content: import("valibot").StringSchema<undefined>;
84
+ readonly chars: import("valibot").NumberSchema<undefined>;
85
+ readonly totalChars: import("valibot").NumberSchema<undefined>;
86
+ readonly truncated: import("valibot").BooleanSchema<undefined>;
87
+ }, undefined>, undefined>;
88
+ readonly provenance: import("valibot").ObjectSchema<{
89
+ readonly provider: import("valibot").PicklistSchema<["github", "gitlab"], undefined>;
90
+ readonly owner: import("valibot").StringSchema<undefined>;
91
+ readonly repo: import("valibot").StringSchema<undefined>;
92
+ readonly ref: import("valibot").StringSchema<undefined>;
93
+ readonly commit: import("valibot").NullableSchema<import("valibot").StringSchema<undefined>, undefined>;
94
+ }, undefined>;
95
+ readonly issues: import("valibot").ArraySchema<import("valibot").ObjectSchema<{
96
+ readonly path: import("valibot").StringSchema<undefined>;
97
+ readonly kind: import("valibot").PicklistSchema<["read_failed", "unparsed", "partial", "unread"], undefined>;
98
+ readonly dropped: import("valibot").OptionalSchema<import("valibot").NullableSchema<import("valibot").NumberSchema<undefined>, undefined>, 0>;
99
+ }, undefined>, undefined>;
100
+ readonly truncations: import("valibot").ArraySchema<import("valibot").ObjectSchema<{
101
+ readonly section: import("valibot").PicklistSchema<["requirements", "rules", "acceptance", "features", "issues"], undefined>;
102
+ readonly shown: import("valibot").NumberSchema<undefined>;
103
+ readonly total: import("valibot").NumberSchema<undefined>;
104
+ }, undefined>, undefined>;
105
+ }, undefined>;
106
+ };
107
+ } & {
108
+ readonly minScope: "read";
109
+ };
110
+ //# sourceMappingURL=public-spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"public-spec.d.ts","sourceRoot":"","sources":["../../src/routes/public-spec.ts"],"names":[],"mappings":"AAeA;;;;;;;;;;GAUG;AACH,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAQxC,CAAA"}
@@ -0,0 +1,31 @@
1
+ import { defineApiContract } from '@toad-contracts/valibot';
2
+ import { publicServiceSpecSchema } from '../public-spec.js';
3
+ import { errorResponses, singleStringParam, withMinScope } from './_shared.js';
4
+ // ---------------------------------------------------------------------------
5
+ // The public SPEC read: absolute `/api/v1` path, authenticated in-controller by a public-API key.
6
+ // The wire shape and the reasoning behind it live in `../public-spec.ts`; the honesty contract the
7
+ // controller implements (four outcomes, never folded) is in `PublicSpecController`.
8
+ //
9
+ // Addressed under `/api/v1/services/:serviceId/*`, beside `…/tasks`, because a spec is a fact about
10
+ // a SERVICE. The `serviceId` is the board service-frame id every other endpoint on this surface
11
+ // already uses, and it resolves through the same board read, so a key can only ever name a service
12
+ // of its own workspace.
13
+ // ---------------------------------------------------------------------------
14
+ /**
15
+ * The service's in-repo specification: the structured requirement tree, the rendered Gherkin, and
16
+ * the ref + commit both were read at.
17
+ *
18
+ * `read` scope, like every other discovery and evidence read here. It is a read of what the
19
+ * service is committed to honouring, and an integration reviewing a run's outcome must be able to
20
+ * see the criteria it was scored against without holding a key that could also merge a pull
21
+ * request.
22
+ *
23
+ * Read-only by design, not by omission: see the note at the top of `../public-spec.ts`.
24
+ */
25
+ export const getPublicServiceSpecContract = withMinScope('read', defineApiContract({
26
+ method: 'get',
27
+ requestPathParamsSchema: singleStringParam('serviceId'),
28
+ pathResolver: ({ serviceId }) => `/api/v1/services/${serviceId}/spec`,
29
+ responsesByStatusCode: { 200: publicServiceSpecSchema, ...errorResponses },
30
+ }));
31
+ //# sourceMappingURL=public-spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"public-spec.js","sourceRoot":"","sources":["../../src/routes/public-spec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAA;AAC3D,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAA;AAC3D,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAE9E,8EAA8E;AAC9E,kGAAkG;AAClG,mGAAmG;AACnG,oFAAoF;AACpF,EAAE;AACF,oGAAoG;AACpG,gGAAgG;AAChG,mGAAmG;AACnG,wBAAwB;AACxB,8EAA8E;AAE9E;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAG,YAAY,CACtD,MAAM,EACN,iBAAiB,CAAC;IAChB,MAAM,EAAE,KAAK;IACb,uBAAuB,EAAE,iBAAiB,CAAC,WAAW,CAAC;IACvD,YAAY,EAAE,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,oBAAoB,SAAS,OAAO;IACrE,qBAAqB,EAAE,EAAE,GAAG,EAAE,uBAAuB,EAAE,GAAG,cAAc,EAAE;CAC3E,CAAC,CACH,CAAA"}
@@ -32,7 +32,6 @@ export declare const getServiceSpecContract: {
32
32
  readonly 200: import("valibot").ObjectSchema<{
33
33
  readonly present: import("valibot").BooleanSchema<undefined>;
34
34
  readonly spec: import("valibot").NullableSchema<import("valibot").ObjectSchema<{
35
- readonly service: import("valibot").SchemaWithPipe<readonly [import("valibot").StringSchema<undefined>, import("valibot").TrimAction, import("valibot").MinLengthAction<string, 1, undefined>, import("valibot").MaxLengthAction<string, 120, undefined>]>;
36
35
  readonly summary: import("valibot").OptionalSchema<import("valibot").SchemaWithPipe<readonly [import("valibot").StringSchema<undefined>, import("valibot").MaxLengthAction<string, 2000, undefined>]>, "">;
37
36
  readonly modules: import("valibot").OptionalSchema<import("valibot").ArraySchema<import("valibot").ObjectSchema<{
38
37
  readonly name: import("valibot").SchemaWithPipe<readonly [import("valibot").StringSchema<undefined>, import("valibot").TrimAction, import("valibot").MinLengthAction<string, 1, undefined>, import("valibot").MaxLengthAction<string, 120, undefined>]>;
@@ -63,6 +62,7 @@ export declare const getServiceSpecContract: {
63
62
  }, undefined>, undefined>, readonly []>;
64
63
  }, undefined>, undefined>, readonly []>;
65
64
  }, undefined>, undefined>, readonly []>;
65
+ readonly service: import("valibot").OptionalSchema<import("valibot").SchemaWithPipe<readonly [import("valibot").StringSchema<undefined>, import("valibot").TrimAction, import("valibot").MaxLengthAction<string, 120, undefined>]>, "">;
66
66
  }, undefined>, undefined>;
67
67
  readonly features: import("valibot").ArraySchema<import("valibot").ObjectSchema<{
68
68
  readonly module: import("valibot").StringSchema<undefined>;
@@ -70,6 +70,14 @@ export declare const getServiceSpecContract: {
70
70
  readonly path: import("valibot").StringSchema<undefined>;
71
71
  readonly content: import("valibot").StringSchema<undefined>;
72
72
  }, undefined>, undefined>;
73
+ readonly diagnostics: import("valibot").OptionalSchema<import("valibot").ObjectSchema<{
74
+ readonly anchor: import("valibot").PicklistSchema<["present", "absent", "read_failed", "unparsed"], undefined>;
75
+ readonly issues: import("valibot").ArraySchema<import("valibot").ObjectSchema<{
76
+ readonly path: import("valibot").StringSchema<undefined>;
77
+ readonly kind: import("valibot").PicklistSchema<["read_failed", "unparsed", "partial", "unread"], undefined>;
78
+ readonly dropped: import("valibot").OptionalSchema<import("valibot").NullableSchema<import("valibot").NumberSchema<undefined>, undefined>, 0>;
79
+ }, undefined>, undefined>;
80
+ }, undefined>, undefined>;
73
81
  }, undefined>;
74
82
  };
75
83
  };
@@ -116,7 +124,6 @@ export declare const getRunSpecContract: {
116
124
  readonly 200: import("valibot").ObjectSchema<{
117
125
  readonly present: import("valibot").BooleanSchema<undefined>;
118
126
  readonly spec: import("valibot").NullableSchema<import("valibot").ObjectSchema<{
119
- readonly service: import("valibot").SchemaWithPipe<readonly [import("valibot").StringSchema<undefined>, import("valibot").TrimAction, import("valibot").MinLengthAction<string, 1, undefined>, import("valibot").MaxLengthAction<string, 120, undefined>]>;
120
127
  readonly summary: import("valibot").OptionalSchema<import("valibot").SchemaWithPipe<readonly [import("valibot").StringSchema<undefined>, import("valibot").MaxLengthAction<string, 2000, undefined>]>, "">;
121
128
  readonly modules: import("valibot").OptionalSchema<import("valibot").ArraySchema<import("valibot").ObjectSchema<{
122
129
  readonly name: import("valibot").SchemaWithPipe<readonly [import("valibot").StringSchema<undefined>, import("valibot").TrimAction, import("valibot").MinLengthAction<string, 1, undefined>, import("valibot").MaxLengthAction<string, 120, undefined>]>;
@@ -147,6 +154,7 @@ export declare const getRunSpecContract: {
147
154
  }, undefined>, undefined>, readonly []>;
148
155
  }, undefined>, undefined>, readonly []>;
149
156
  }, undefined>, undefined>, readonly []>;
157
+ readonly service: import("valibot").OptionalSchema<import("valibot").SchemaWithPipe<readonly [import("valibot").StringSchema<undefined>, import("valibot").TrimAction, import("valibot").MaxLengthAction<string, 120, undefined>]>, "">;
150
158
  }, undefined>, undefined>;
151
159
  readonly features: import("valibot").ArraySchema<import("valibot").ObjectSchema<{
152
160
  readonly module: import("valibot").StringSchema<undefined>;
@@ -154,6 +162,14 @@ export declare const getRunSpecContract: {
154
162
  readonly path: import("valibot").StringSchema<undefined>;
155
163
  readonly content: import("valibot").StringSchema<undefined>;
156
164
  }, undefined>, undefined>;
165
+ readonly diagnostics: import("valibot").OptionalSchema<import("valibot").ObjectSchema<{
166
+ readonly anchor: import("valibot").PicklistSchema<["present", "absent", "read_failed", "unparsed"], undefined>;
167
+ readonly issues: import("valibot").ArraySchema<import("valibot").ObjectSchema<{
168
+ readonly path: import("valibot").StringSchema<undefined>;
169
+ readonly kind: import("valibot").PicklistSchema<["read_failed", "unparsed", "partial", "unread"], undefined>;
170
+ readonly dropped: import("valibot").OptionalSchema<import("valibot").NullableSchema<import("valibot").NumberSchema<undefined>, undefined>, 0>;
171
+ }, undefined>, undefined>;
172
+ }, undefined>, undefined>;
157
173
  }, undefined>;
158
174
  };
159
175
  };
@@ -1 +1 @@
1
- {"version":3,"file":"spec.d.ts","sourceRoot":"","sources":["../../src/routes/spec.ts"],"names":[],"mappings":"AAWA,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAKjC,CAAA;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAK7B,CAAA"}
1
+ {"version":3,"file":"spec.d.ts","sourceRoot":"","sources":["../../src/routes/spec.ts"],"names":[],"mappings":"AAWA,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAKjC,CAAA;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAK7B,CAAA"}
@@ -541,7 +541,7 @@ export declare const createWorkspaceContract: {
541
541
  readonly version: v.OptionalSchema<v.NumberSchema<undefined>, undefined>;
542
542
  readonly public: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
543
543
  readonly availability: v.OptionalSchema<v.UnionSchema<[v.LiteralSchema<"one-off", undefined>, v.LiteralSchema<"recurring", undefined>, v.LiteralSchema<"both", undefined>], undefined>, undefined>;
544
- readonly purpose: v.OptionalSchema<v.PicklistSchema<readonly ["build", "document", "review", "research", "planning"], undefined>, undefined>;
544
+ readonly purpose: v.PicklistSchema<readonly ["build", "document", "review", "research", "planning"], undefined>;
545
545
  }, undefined>, undefined>;
546
546
  readonly executions: v.ArraySchema<v.ObjectSchema<{
547
547
  readonly id: v.StringSchema<undefined>;
@@ -3992,7 +3992,7 @@ export declare const getWorkspaceContract: {
3992
3992
  readonly version: v.OptionalSchema<v.NumberSchema<undefined>, undefined>;
3993
3993
  readonly public: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
3994
3994
  readonly availability: v.OptionalSchema<v.UnionSchema<[v.LiteralSchema<"one-off", undefined>, v.LiteralSchema<"recurring", undefined>, v.LiteralSchema<"both", undefined>], undefined>, undefined>;
3995
- readonly purpose: v.OptionalSchema<v.PicklistSchema<readonly ["build", "document", "review", "research", "planning"], undefined>, undefined>;
3995
+ readonly purpose: v.PicklistSchema<readonly ["build", "document", "review", "research", "planning"], undefined>;
3996
3996
  }, undefined>, undefined>;
3997
3997
  readonly executions: v.ArraySchema<v.ObjectSchema<{
3998
3998
  readonly id: v.StringSchema<undefined>;
@@ -479,7 +479,7 @@ export declare const workspaceSnapshotSchema: v.ObjectSchema<{
479
479
  readonly version: v.OptionalSchema<v.NumberSchema<undefined>, undefined>;
480
480
  readonly public: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
481
481
  readonly availability: v.OptionalSchema<v.UnionSchema<[v.LiteralSchema<"one-off", undefined>, v.LiteralSchema<"recurring", undefined>, v.LiteralSchema<"both", undefined>], undefined>, undefined>;
482
- readonly purpose: v.OptionalSchema<v.PicklistSchema<readonly ["build", "document", "review", "research", "planning"], undefined>, undefined>;
482
+ readonly purpose: v.PicklistSchema<readonly ["build", "document", "review", "research", "planning"], undefined>;
483
483
  }, undefined>, undefined>;
484
484
  readonly executions: v.ArraySchema<v.ObjectSchema<{
485
485
  readonly id: v.StringSchema<undefined>;
package/dist/spec.d.ts CHANGED
@@ -1,4 +1,12 @@
1
1
  import * as v from 'valibot';
2
+ /**
3
+ * The two length bounds a READER has to honour to produce a parseable doc, exported so the
4
+ * reassembly clamps to the same numbers the schema enforces instead of restating them. A reader
5
+ * that clamps to its own constant passes its own tests and serves a `200` that fails the published
6
+ * schema the moment either number moves.
7
+ */
8
+ export declare const SPEC_NAME_MAX = 120;
9
+ export declare const SPEC_SUMMARY_MAX = 2000;
2
10
  /** MoSCoW priority — how essential a requirement is. */
3
11
  export declare const requirementPrioritySchema: v.PicklistSchema<["must", "should", "could"], undefined>;
4
12
  export type RequirementPriority = v.InferOutput<typeof requirementPrioritySchema>;
@@ -229,6 +237,71 @@ export declare const specDocSchema: v.ObjectSchema<{
229
237
  }, undefined>, undefined>, readonly []>;
230
238
  }, undefined>;
231
239
  export type SpecDoc = v.InferOutput<typeof specDocSchema>;
240
+ /**
241
+ * The same document as a READER reassembles it, as opposed to as a producer must author it.
242
+ *
243
+ * Derived from {@link specDocSchema} rather than restated, so the two cannot drift, with exactly
244
+ * one field relaxed: `service` may be the empty string. The anchor (`spec/service.json`) is a file
245
+ * in somebody's repository and can be half-written, so a read has to be able to say "this spec
246
+ * names no service" (every consumer falls back to the board frame's own title). The STRICT schema
247
+ * stays the ingestion boundary `parseSpecDoc` guards, so nothing can AUTHOR a nameless spec; this
248
+ * one exists because refusing to describe one that already exists is the worse answer.
249
+ *
250
+ * Both infer the same TypeScript type. The difference is entirely in what each will PARSE, which
251
+ * is the difference that matters: a view typed `SpecDoc` while carrying `service: ''` is a value
252
+ * that fails the schema its own type names, and on `/api/v1` that is a published contract the
253
+ * response violates.
254
+ */
255
+ export declare const readSpecDocSchema: v.ObjectSchema<{
256
+ /** One-paragraph product intent for the service overall. */
257
+ readonly summary: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MaxLengthAction<string, 2000, undefined>]>, "">;
258
+ /** Modules (domains), each grouping its feature groups; the two-level taxonomy. */
259
+ readonly modules: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
260
+ readonly name: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 120, undefined>]>;
261
+ readonly summary: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MaxLengthAction<string, 2000, undefined>]>, "">;
262
+ readonly groups: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
263
+ readonly name: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 120, undefined>]>;
264
+ readonly summary: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MaxLengthAction<string, 2000, undefined>]>, "">;
265
+ readonly requirements: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
266
+ /** Stable slug, e.g. `req-login-rate-limit`. */
267
+ readonly id: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 200, undefined>]>;
268
+ /** Short headline. */
269
+ readonly title: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 120, undefined>]>;
270
+ /** The requirement itself, as `The system SHALL …` prose. */
271
+ readonly statement: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 4000, undefined>]>;
272
+ readonly kind: v.PicklistSchema<["functional", "nonfunctional", "constraint"], undefined>;
273
+ readonly priority: v.PicklistSchema<["must", "should", "could"], undefined>;
274
+ /**
275
+ * Whether the service is already known to honour this requirement. Defaults to
276
+ * `aspirational` — a requirement nobody has observed to hold is not standing behaviour, and
277
+ * a spec written before the code is the normal case rather than the exceptional one. See
278
+ * {@link requirementStateSchema}.
279
+ */
280
+ readonly state: v.OptionalSchema<v.PicklistSchema<["aspirational", "established"], undefined>, "aspirational">;
281
+ /** Ids of the board task/block(s) this requirement was aggregated from (provenance). */
282
+ readonly sourceBlockIds: v.OptionalSchema<v.ArraySchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 200, undefined>]>, undefined>, readonly []>;
283
+ /** Structured acceptance criteria → the seed for this requirement's Gherkin scenarios. */
284
+ readonly acceptance: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
285
+ readonly id: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 200, undefined>]>;
286
+ readonly given: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MaxLengthAction<string, 2000, undefined>]>;
287
+ readonly when: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MaxLengthAction<string, 2000, undefined>]>;
288
+ readonly outcome: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MaxLengthAction<string, 2000, undefined>]>;
289
+ }, undefined>, undefined>, readonly []>;
290
+ }, undefined>, undefined>, readonly []>;
291
+ /** Domain rules / invariants scoped to this feature (rendered into its `<group>.md`). */
292
+ readonly rules: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
293
+ readonly id: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 200, undefined>]>;
294
+ /** The invariant, e.g. `An order may never have a negative total.` */
295
+ readonly rule: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 4000, undefined>]>;
296
+ /** Why the rule exists (optional). */
297
+ readonly rationale: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MaxLengthAction<string, 2000, undefined>]>, "">;
298
+ readonly sourceBlockIds: v.OptionalSchema<v.ArraySchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 200, undefined>]>, undefined>, readonly []>;
299
+ }, undefined>, undefined>, readonly []>;
300
+ }, undefined>, undefined>, readonly []>;
301
+ }, undefined>, undefined>, readonly []>;
302
+ readonly service: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MaxLengthAction<string, 120, undefined>]>, "">;
303
+ }, undefined>;
304
+ export type ReadSpecDoc = v.InferOutput<typeof readSpecDocSchema>;
232
305
  /** Folder, relative to the repo root, that holds the persisted spec. */
233
306
  export declare const SPEC_DIR = "spec";
234
307
  /** Tiny file carrying only the service name + one-paragraph summary. */
@@ -251,6 +324,72 @@ export declare const specFeatureFileSchema: v.ObjectSchema<{
251
324
  readonly content: v.StringSchema<undefined>;
252
325
  }, undefined>;
253
326
  export type SpecFeatureFile = v.InferOutput<typeof specFeatureFileSchema>;
327
+ /**
328
+ * What became of ONE file the reader touched. The reader is deliberately total and salvaging
329
+ * (a flaky read or a malformed shard degrades to a partial tree rather than a thrown error), and
330
+ * a salvage that reports nothing is indistinguishable from a repo that genuinely holds less:
331
+ *
332
+ * - `read_failed`: the provider answered with something other than "absent" (rate limit, 5xx,
333
+ * a permission the installation lost). The file may well exist; we cannot say.
334
+ * - `unparsed`: the file was read and NOTHING could be recovered from it (unreadable JSON,
335
+ * or a shard whose own identity is missing), so its whole subtree is missing from the view.
336
+ * - `partial`: the file was read and salvaged item by item; `dropped` says how many
337
+ * requirements/rules failed validation and are therefore absent from an otherwise valid group.
338
+ * - `unread`: the pass ran out of its read budget before reaching this path, so it was never
339
+ * fetched. `dropped` counts the files left unread. Reported against the `spec` root, once per
340
+ * pass: a per-file row would make the budget's own report the largest thing in the response.
341
+ */
342
+ export declare const specReadIssueKindSchema: v.PicklistSchema<["read_failed", "unparsed", "partial", "unread"], undefined>;
343
+ export type SpecReadIssueKind = v.InferOutput<typeof specReadIssueKindSchema>;
344
+ /** One file the reader could not fully account for, named rather than silently dropped. */
345
+ export declare const specReadIssueSchema: v.ObjectSchema<{
346
+ /** Repo-relative path of the file (or directory, for a failed listing). */
347
+ readonly path: v.StringSchema<undefined>;
348
+ readonly kind: v.PicklistSchema<["read_failed", "unparsed", "partial", "unread"], undefined>;
349
+ /**
350
+ * How much this row cost the tree: items lost from a `partial` file, files left unread by an
351
+ * exhausted budget, 0 on the kinds that lose nothing countable.
352
+ *
353
+ * NULL means content was lost here and NO count describes it. A salvage reaches that state
354
+ * honestly: a shard whose `requirements` is an object rather than a list has requirements that
355
+ * are structurally unreadable, so there is nothing to count, and answering `0` would report the
356
+ * rebuilt group as a complete one that simply declares nothing. An unknown loss and no loss are
357
+ * different facts, and only a distinct value states the first.
358
+ */
359
+ readonly dropped: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, 0>;
360
+ }, undefined>;
361
+ export type SpecReadIssue = v.InferOutput<typeof specReadIssueSchema>;
362
+ /**
363
+ * How the PRESENCE ANCHOR (`spec/service.json`) resolved. Four states rather than the boolean
364
+ * `present` beside it, because three of them produce the same empty tree and demand different
365
+ * reactions: a branch with no spec is a normal answer, a provider outage is a retry, and a corrupt
366
+ * anchor is a repo somebody has to fix. Collapsing them is how "this service has no requirements"
367
+ * comes to be reported during every VCS incident.
368
+ */
369
+ export declare const specAnchorStateSchema: v.PicklistSchema<["present", "absent", "read_failed", "unparsed"], undefined>;
370
+ export type SpecAnchorState = v.InferOutput<typeof specAnchorStateSchema>;
371
+ /** What the reader could and could not account for on this pass. */
372
+ export declare const specReadDiagnosticsSchema: v.ObjectSchema<{
373
+ readonly anchor: v.PicklistSchema<["present", "absent", "read_failed", "unparsed"], undefined>;
374
+ /** Every file the pass could not fully account for. Empty on a clean read. */
375
+ readonly issues: v.ArraySchema<v.ObjectSchema<{
376
+ /** Repo-relative path of the file (or directory, for a failed listing). */
377
+ readonly path: v.StringSchema<undefined>;
378
+ readonly kind: v.PicklistSchema<["read_failed", "unparsed", "partial", "unread"], undefined>;
379
+ /**
380
+ * How much this row cost the tree: items lost from a `partial` file, files left unread by an
381
+ * exhausted budget, 0 on the kinds that lose nothing countable.
382
+ *
383
+ * NULL means content was lost here and NO count describes it. A salvage reaches that state
384
+ * honestly: a shard whose `requirements` is an object rather than a list has requirements that
385
+ * are structurally unreadable, so there is nothing to count, and answering `0` would report the
386
+ * rebuilt group as a complete one that simply declares nothing. An unknown loss and no loss are
387
+ * different facts, and only a distinct value states the first.
388
+ */
389
+ readonly dropped: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, 0>;
390
+ }, undefined>, undefined>;
391
+ }, undefined>;
392
+ export type SpecReadDiagnostics = v.InferOutput<typeof specReadDiagnosticsSchema>;
254
393
  /**
255
394
  * The service-spec view served to the SPA: the reassembled prescriptive spec tree read
256
395
  * from the service repo's default branch, plus its rendered Gherkin feature files.
@@ -260,10 +399,13 @@ export type SpecFeatureFile = v.InferOutput<typeof specFeatureFileSchema>;
260
399
  export declare const serviceSpecViewSchema: v.ObjectSchema<{
261
400
  /** Whether a spec exists on the service repo's default branch (a `spec/service.json`). */
262
401
  readonly present: v.BooleanSchema<undefined>;
263
- /** The reassembled spec tree, or null when none is present. */
402
+ /**
403
+ * The reassembled spec tree, or null when none is present.
404
+ *
405
+ * {@link readSpecDocSchema}, not the strict authoring schema: this is what a READER got back
406
+ * out of a repository, and an anchor that names no service is a state a repository can be in.
407
+ */
264
408
  readonly spec: v.NullableSchema<v.ObjectSchema<{
265
- /** Service / frame name (defaults to the repo name). */
266
- readonly service: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 120, undefined>]>;
267
409
  /** One-paragraph product intent for the service overall. */
268
410
  readonly summary: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MaxLengthAction<string, 2000, undefined>]>, "">;
269
411
  /** Modules (domains), each grouping its feature groups; the two-level taxonomy. */
@@ -310,6 +452,7 @@ export declare const serviceSpecViewSchema: v.ObjectSchema<{
310
452
  }, undefined>, undefined>, readonly []>;
311
453
  }, undefined>, undefined>, readonly []>;
312
454
  }, undefined>, undefined>, readonly []>;
455
+ readonly service: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MaxLengthAction<string, 120, undefined>]>, "">;
313
456
  }, undefined>, undefined>;
314
457
  /** The rendered Gherkin feature files (empty when none present). The producer always
315
458
  * sends this field (`[]` when there are none), and the SPA dereferences it unguarded, so
@@ -324,6 +467,32 @@ export declare const serviceSpecViewSchema: v.ObjectSchema<{
324
467
  /** The raw Gherkin content. */
325
468
  readonly content: v.StringSchema<undefined>;
326
469
  }, undefined>, undefined>;
470
+ /**
471
+ * What the READ itself could account for, as distinct from what the spec says. Optional
472
+ * because absent means "this producer diagnosed nothing", which is a different fact from a
473
+ * clean pass and is the honest answer for the callers that assemble a view by hand (a memo, a
474
+ * test fixture). `readServiceSpec` always sets it.
475
+ */
476
+ readonly diagnostics: v.OptionalSchema<v.ObjectSchema<{
477
+ readonly anchor: v.PicklistSchema<["present", "absent", "read_failed", "unparsed"], undefined>;
478
+ /** Every file the pass could not fully account for. Empty on a clean read. */
479
+ readonly issues: v.ArraySchema<v.ObjectSchema<{
480
+ /** Repo-relative path of the file (or directory, for a failed listing). */
481
+ readonly path: v.StringSchema<undefined>;
482
+ readonly kind: v.PicklistSchema<["read_failed", "unparsed", "partial", "unread"], undefined>;
483
+ /**
484
+ * How much this row cost the tree: items lost from a `partial` file, files left unread by an
485
+ * exhausted budget, 0 on the kinds that lose nothing countable.
486
+ *
487
+ * NULL means content was lost here and NO count describes it. A salvage reaches that state
488
+ * honestly: a shard whose `requirements` is an object rather than a list has requirements that
489
+ * are structurally unreadable, so there is nothing to count, and answering `0` would report the
490
+ * rebuilt group as a complete one that simply declares nothing. An unknown loss and no loss are
491
+ * different facts, and only a distinct value states the first.
492
+ */
493
+ readonly dropped: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, 0>;
494
+ }, undefined>, undefined>;
495
+ }, undefined>, undefined>;
327
496
  }, undefined>;
328
497
  export type ServiceSpecView = v.InferOutput<typeof serviceSpecViewSchema>;
329
498
  /** The canonical "no spec" view — GitHub not connected, or no spec on the default branch. */
@@ -1 +1 @@
1
- {"version":3,"file":"spec.d.ts","sourceRoot":"","sources":["../src/spec.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"spec.d.ts","sourceRoot":"","sources":["../src/spec.ts"],"names":[],"mappings":"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"}