@llm4ts/flow 0.18.0 → 0.18.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/Pack.d.ts CHANGED
@@ -33,6 +33,12 @@ export interface Pack {
33
33
  readonly lenses: ReadonlyArray<Reviewer>;
34
34
  readonly lessons: string | undefined;
35
35
  readonly programFiles: string | undefined;
36
+ /**
37
+ * The schema every program spec must embed, validated deterministically
38
+ * by the extraction gate: `pagespec` (a ```json pagespec block decodable
39
+ * as `PageSpec`) is the only one today; absent means prose-only specs.
40
+ */
41
+ readonly specSchema: string | undefined;
36
42
  readonly dir: string;
37
43
  readonly gate: (name: string) => ReadonlyArray<string> | undefined;
38
44
  readonly prompt: (name: string) => string | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"Pack.d.ts","sourceRoot":"","sources":["../src/Pack.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAC/C,OAAO,EAAiB,KAAK,QAAQ,EAAE,MAAM,eAAe,CAAA;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAC9C,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAEpE,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAEvD,eAAO,MAAM,kBAAkB,8DAAsD,CAAA;AACrF,MAAM,MAAM,kBAAkB,GAAG,OAAO,kBAAkB,CAAC,IAAI,CAAA;;;;;AAE/D,qBAAa,gBAAiB,SAAQ,qBAGpC;CAAG;AAEL,MAAM,WAAW,IAAI;IACnB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAA;IACrC,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAAA;IAIpC,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAAA;IACpC,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAA;IACrC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;IAC/D,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,SAAS,CAAA;IAClD,QAAQ,CAAC,WAAW,EAAE,gBAAgB,CAAA;IACtC,QAAQ,CAAC,eAAe,EAAE,aAAa,CAAC,SAAS,CAAC,CAAA;IAClD,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC,YAAY,CAAC,CAAA;IAC9C,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,YAAY,CAAC,CAAA;IAC5C,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;IAClD,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAA;IACxC,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAAA;IAIpC,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,SAAS,CAAA;IACzC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,aAAa,CAAC,MAAM,CAAC,GAAG,SAAS,CAAA;IAClE,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAA;IAIrD,QAAQ,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,CAAA;CAC/C;AA0HD,eAAO,MAAM,QAAQ,+GAgFnB,CAAA;AAEF,eAAO,MAAM,gBAAgB,GAC3B,WAAW,cAAc,EACzB,WAAW,MAAM,EACjB,QAAQ,MAAM,KACb,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,cAAc,CACgC,CAAA"}
1
+ {"version":3,"file":"Pack.d.ts","sourceRoot":"","sources":["../src/Pack.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAC/C,OAAO,EAAiB,KAAK,QAAQ,EAAE,MAAM,eAAe,CAAA;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAC9C,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAEpE,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAEvD,eAAO,MAAM,kBAAkB,8DAAsD,CAAA;AACrF,MAAM,MAAM,kBAAkB,GAAG,OAAO,kBAAkB,CAAC,IAAI,CAAA;;;;;AAE/D,qBAAa,gBAAiB,SAAQ,qBAGpC;CAAG;AAEL,MAAM,WAAW,IAAI;IACnB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAA;IACrC,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAAA;IAIpC,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAAA;IACpC,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAA;IACrC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;IAC/D,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,SAAS,CAAA;IAClD,QAAQ,CAAC,WAAW,EAAE,gBAAgB,CAAA;IACtC,QAAQ,CAAC,eAAe,EAAE,aAAa,CAAC,SAAS,CAAC,CAAA;IAClD,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC,YAAY,CAAC,CAAA;IAC9C,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,YAAY,CAAC,CAAA;IAC5C,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;IAClD,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAA;IACxC,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAAA;IAIpC,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,SAAS,CAAA;IACzC;;;;OAIG;IACH,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,CAAA;IACvC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,aAAa,CAAC,MAAM,CAAC,GAAG,SAAS,CAAA;IAClE,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAA;IAIrD,QAAQ,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,CAAA;CAC/C;AA0HD,eAAO,MAAM,QAAQ,+GAuFnB,CAAA;AAEF,eAAO,MAAM,gBAAgB,GAC3B,WAAW,cAAc,EACzB,WAAW,MAAM,EACjB,QAAQ,MAAM,KACb,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,cAAc,CACgC,CAAA"}
package/dist/Pack.js CHANGED
@@ -128,6 +128,12 @@ export const loadPack = Effect.fn("@llm4ts/flow/Pack.load")(function* (workspace
128
128
  message: `pack manifest 'programFiles:' is not a valid regex template: ${programFiles}`
129
129
  });
130
130
  }
131
+ const specSchema = fields["spec-schema"];
132
+ if (specSchema !== undefined && specSchema !== "pagespec") {
133
+ return yield* PlanParseError.make({
134
+ message: `pack manifest 'spec-schema:' must be 'pagespec' when set, got: ${specSchema}`
135
+ });
136
+ }
131
137
  const exclude = fields.exclude;
132
138
  if (exclude !== undefined && !isValidRegExp(exclude)) {
133
139
  return yield* PlanParseError.make({
@@ -159,6 +165,7 @@ export const loadPack = Effect.fn("@llm4ts/flow/Pack.load")(function* (workspace
159
165
  lenses,
160
166
  lessons: lessons === undefined || lessons.length === 0 ? undefined : lessons,
161
167
  programFiles,
168
+ specSchema,
162
169
  dir: directory,
163
170
  gate: (name) => gates[name],
164
171
  prompt: (name) => prompts[name],
package/dist/Pack.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"Pack.js","sourceRoot":"","sources":["../src/Pack.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Pack.js","sourceRoot":"","sources":["../src/Pack.ts"],"names":[],"mappings":"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"}
@@ -42,6 +42,8 @@ declare const PageDto_base: Schema.Class<PageDto, Schema.Struct<{
42
42
  }>, {}>;
43
43
  export declare class PageDto extends PageDto_base {
44
44
  }
45
+ export declare const ResponseShape: Schema.Literals<readonly ["single", "list"]>;
46
+ export type ResponseShape = typeof ResponseShape.Type;
45
47
  declare const PageApiCall_base: Schema.Class<PageApiCall, Schema.Struct<{
46
48
  /** Domain operation id, e.g. `listAccounts` — becomes the OpenAPI operationId. */
47
49
  readonly operation: Schema.String;
@@ -50,7 +52,15 @@ declare const PageApiCall_base: Schema.Class<PageApiCall, Schema.Struct<{
50
52
  /** The ESB service behind the legacy endpoint, when known. */
51
53
  readonly esbService: Schema.optionalKey<Schema.String>;
52
54
  readonly request: Schema.withDecodingDefaultKey<Schema.withConstructorDefault<Schema.$Array<typeof FieldMapping>>, never>;
55
+ /**
56
+ * The response's fields when it is an ad-hoc object. A response that is
57
+ * one of the page's DTOs names it with `responseDto` instead — the
58
+ * `domainName` of an entry in `dtos` — and `responseShape` says whether
59
+ * the endpoint returns one of them or a list; a table screen is a list.
60
+ */
53
61
  readonly response: Schema.withDecodingDefaultKey<Schema.withConstructorDefault<Schema.$Array<typeof FieldMapping>>, never>;
62
+ readonly responseDto: Schema.optionalKey<Schema.String>;
63
+ readonly responseShape: Schema.withDecodingDefaultKey<Schema.withConstructorDefault<Schema.Literals<readonly ["single", "list"]>>, never>;
54
64
  }>, {}>;
55
65
  export declare class PageApiCall extends PageApiCall_base {
56
66
  }
@@ -79,6 +89,12 @@ declare const PageSpec_base: Schema.Class<PageSpec, Schema.Struct<{
79
89
  }>, {}>;
80
90
  export declare class PageSpec extends PageSpec_base {
81
91
  }
92
+ /**
93
+ * The block's shape in one paragraph, for the finding an undecodable block
94
+ * raises: the analyst that wrote its own richer shape is told exactly which
95
+ * keys the decoder accepts instead of only where decoding stopped.
96
+ */
97
+ export declare const pageSpecShapeHint: string;
82
98
  /** The fence info string marking a page-spec block inside spec markdown. */
83
99
  export declare const pageSpecFenceInfo = "json pagespec";
84
100
  /** The raw JSON of the first ```json pagespec fenced block, if any. */
@@ -1 +1 @@
1
- {"version":3,"file":"PageSpec.d.ts","sourceRoot":"","sources":["../src/PageSpec.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAS/C,eAAO,MAAM,eAAe,IAAI,CAAA;AAEhC,eAAO,MAAM,cAAc,wDAAgD,CAAA;AAC3E,MAAM,MAAM,cAAc,GAAG,OAAO,cAAc,CAAC,IAAI,CAAA;;;;;;AAIvD,qBAAa,cAAe,SAAQ,mBAIlC;CAAG;;;;;;;;AAIL,qBAAa,aAAc,SAAQ,kBAYjC;CAAG;;;;;;AAEL,qBAAa,QAAS,SAAQ,aAI5B;CAAG;;;;;;AAEL,iFAAiF;AACjF,qBAAa,YAAa,SAAQ,iBAIhC;CAAG;;;;;;AAIL,qBAAa,OAAQ,SAAQ,YAI3B;CAAG;;IAGH,kFAAkF;;;;IAIlF,8DAA8D;;;;;AALhE,qBAAa,WAAY,SAAQ,gBAe/B;CAAG;;;;IAWH,6EAA6E;;;AAT/E,qBAAa,cAAe,SAAQ,mBAclC;CAAG;AAEL,eAAO,MAAM,cAAc,qDAA6C,CAAA;AACxE,MAAM,MAAM,cAAc,GAAG,OAAO,cAAc,CAAC,IAAI,CAAA;;IAOrD,0EAA0E;;;;;;;;;;;;AAD5E,qBAAa,QAAS,SAAQ,aA8B5B;CAAG;AAEL,4EAA4E;AAC5E,eAAO,MAAM,iBAAiB,kBAAkB,CAAA;AAIhD,uEAAuE;AACvE,eAAO,MAAM,aAAa,GAAI,UAAU,MAAM,KAAG,MAAM,GAAG,SACxB,CAAA;AAElC;;;;GAIG;AACH,eAAO,MAAM,aAAa,sEAgBxB,CAAA;AAEF,0FAA0F;AAC1F,eAAO,MAAM,mBAAmB,kEAW9B,CAAA;AAsCF;;;;;GAKG;AACH,eAAO,MAAM,UAAU,GAAI,MAAM,QAAQ,KAAG,MAsF3C,CAAA;AAED,6EAA6E;AAC7E,eAAO,MAAM,cAAc,GAAI,MAAM,QAAQ,KAAG,MA2C/C,CAAA"}
1
+ {"version":3,"file":"PageSpec.d.ts","sourceRoot":"","sources":["../src/PageSpec.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAS/C,eAAO,MAAM,eAAe,IAAI,CAAA;AAEhC,eAAO,MAAM,cAAc,wDAAgD,CAAA;AAC3E,MAAM,MAAM,cAAc,GAAG,OAAO,cAAc,CAAC,IAAI,CAAA;;;;;;AAIvD,qBAAa,cAAe,SAAQ,mBAIlC;CAAG;;;;;;;;AAIL,qBAAa,aAAc,SAAQ,kBAYjC;CAAG;;;;;;AAEL,qBAAa,QAAS,SAAQ,aAI5B;CAAG;;;;;;AAEL,iFAAiF;AACjF,qBAAa,YAAa,SAAQ,iBAIhC;CAAG;;;;;;AAIL,qBAAa,OAAQ,SAAQ,YAI3B;CAAG;AAEL,eAAO,MAAM,aAAa,8CAAsC,CAAA;AAChE,MAAM,MAAM,aAAa,GAAG,OAAO,aAAa,CAAC,IAAI,CAAA;;IAGnD,kFAAkF;;;;IAIlF,8DAA8D;;;IAM9D;;;;;OAKG;;;;;AAhBL,qBAAa,WAAY,SAAQ,gBA0B/B;CAAG;;;;IAWH,6EAA6E;;;AAT/E,qBAAa,cAAe,SAAQ,mBAclC;CAAG;AAEL,eAAO,MAAM,cAAc,qDAA6C,CAAA;AACxE,MAAM,MAAM,cAAc,GAAG,OAAO,cAAc,CAAC,IAAI,CAAA;;IAOrD,0EAA0E;;;;;;;;;;;;AAD5E,qBAAa,QAAS,SAAQ,aA8B5B;CAAG;AAEL;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,QAO8C,CAAA;AAE5E,4EAA4E;AAC5E,eAAO,MAAM,iBAAiB,kBAAkB,CAAA;AAIhD,uEAAuE;AACvE,eAAO,MAAM,aAAa,GAAI,UAAU,MAAM,KAAG,MAAM,GAAG,SACxB,CAAA;AAElC;;;;GAIG;AACH,eAAO,MAAM,aAAa,sEAgBxB,CAAA;AAEF,0FAA0F;AAC1F,eAAO,MAAM,mBAAmB,kEAW9B,CAAA;AAyCF;;;;;GAKG;AACH,eAAO,MAAM,UAAU,GAAI,MAAM,QAAQ,KAAG,MAuI3C,CAAA;AAED,6EAA6E;AAC7E,eAAO,MAAM,cAAc,GAAI,MAAM,QAAQ,KAAG,MA+C/C,CAAA"}
package/dist/PageSpec.js CHANGED
@@ -45,6 +45,7 @@ export class PageDto extends Schema.Class("PageDto")({
45
45
  fields: Schema.Array(FieldMapping)
46
46
  }) {
47
47
  }
48
+ export const ResponseShape = Schema.Literals(["single", "list"]);
48
49
  export class PageApiCall extends Schema.Class("PageApiCall")({
49
50
  /** Domain operation id, e.g. `listAccounts` — becomes the OpenAPI operationId. */
50
51
  operation: Schema.String,
@@ -53,7 +54,15 @@ export class PageApiCall extends Schema.Class("PageApiCall")({
53
54
  /** The ESB service behind the legacy endpoint, when known. */
54
55
  esbService: Schema.optionalKey(Schema.String),
55
56
  request: Schema.Array(FieldMapping).pipe(Schema.withConstructorDefault(Effect.succeed(emptyMappings)), Schema.withDecodingDefaultKey(Effect.succeed(emptyMappings))),
56
- response: Schema.Array(FieldMapping).pipe(Schema.withConstructorDefault(Effect.succeed(emptyMappings)), Schema.withDecodingDefaultKey(Effect.succeed(emptyMappings)))
57
+ /**
58
+ * The response's fields when it is an ad-hoc object. A response that is
59
+ * one of the page's DTOs names it with `responseDto` instead — the
60
+ * `domainName` of an entry in `dtos` — and `responseShape` says whether
61
+ * the endpoint returns one of them or a list; a table screen is a list.
62
+ */
63
+ response: Schema.Array(FieldMapping).pipe(Schema.withConstructorDefault(Effect.succeed(emptyMappings)), Schema.withDecodingDefaultKey(Effect.succeed(emptyMappings))),
64
+ responseDto: Schema.optionalKey(Schema.String),
65
+ responseShape: ResponseShape.pipe(Schema.withConstructorDefault(Effect.succeed("single")), Schema.withDecodingDefaultKey(Effect.succeed("single")))
57
66
  }) {
58
67
  }
59
68
  export class PageNavigation extends Schema.Class("PageNavigation")({
@@ -81,6 +90,18 @@ export class PageSpec extends Schema.Class("PageSpec")({
81
90
  openQuestions: Schema.Array(Schema.String).pipe(Schema.withConstructorDefault(Effect.succeed(emptyStrings)), Schema.withDecodingDefaultKey(Effect.succeed(emptyStrings)))
82
91
  }) {
83
92
  }
93
+ /**
94
+ * The block's shape in one paragraph, for the finding an undecodable block
95
+ * raises: the analyst that wrote its own richer shape is told exactly which
96
+ * keys the decoder accepts instead of only where decoding stopped.
97
+ */
98
+ export const pageSpecShapeHint = "The block must be exactly: { page, route, title, complexity: low|medium|high, " +
99
+ "forms: [{ name, action, fields: [{ name, label, type, required?, validations: [{ rule, message?, enforcedAt: client|server|both }] }] }], " +
100
+ "dtos: [{ legacyName, domainName, fields: [{ legacyName, domainName, type }] }], " +
101
+ "apiCalls: [{ operation, method, path, esbService (the ESB service the legacy call goes through — omit only when there is none), request: [{ legacyName, domainName, type }], response: [{ legacyName, domainName, type }] for an ad-hoc object, or responseDto: <domainName of one of the dtos> with responseShape: single|list when the endpoint returns that DTO or a list of it (a table screen is a list) }], " +
102
+ "navigation: { inbound: [string], outbound: [string], steps: [string] }, sessionState: [string], openQuestions: [string] }. " +
103
+ "No other keys (no id, url, queryParams, esbCall, trigger, serverController); every apiCalls entry is an object with operation/method/path; " +
104
+ "put anything that does not fit into the prose sections or openQuestions.";
84
105
  /** The fence info string marking a page-spec block inside spec markdown. */
85
106
  export const pageSpecFenceInfo = "json pagespec";
86
107
  const fencePattern = /```json[ \t]+pagespec[ \t]*\r?\n([\s\S]*?)\r?\n[ \t]*```/;
@@ -127,6 +148,7 @@ const openApiType = (type) => {
127
148
  };
128
149
  const yamlText = (value) => JSON.stringify(value);
129
150
  const schemaName = (operation, side) => `${operation.charAt(0).toUpperCase()}${operation.slice(1)}${side}`;
151
+ const dtoSchemaName = (domainName) => domainName.replace(/[^A-Za-z0-9]+/g, "") || "Dto";
130
152
  const propertyLines = (fields, indent) => fields.flatMap((field) => {
131
153
  const mapped = openApiType(field.type);
132
154
  return [
@@ -162,13 +184,32 @@ export const openApiFor = (spec) => {
162
184
  lines[lines.length - 1] = "paths: {}";
163
185
  }
164
186
  for (const [path, calls] of paths) {
165
- lines.push(` ${path}:`);
166
- for (const call of [...calls].sort((a, b) => a.method.localeCompare(b.method))) {
187
+ lines.push(` ${path.startsWith("/") ? path : `/${path}`}:`);
188
+ // One operation per method: an OpenAPI path item cannot repeat a method,
189
+ // so calls that share one (a page load and its JSON refresh on the same
190
+ // GET) collapse into the first, which names the variants it stands for.
191
+ const byMethod = new Map();
192
+ for (const call of calls) {
167
193
  const method = call.method.toLowerCase();
194
+ byMethod.set(method, [...(byMethod.get(method) ?? []), call]);
195
+ }
196
+ for (const [method, variants] of [...byMethod.entries()].sort(([a], [b]) => a.localeCompare(b))) {
197
+ const call = variants[0];
168
198
  lines.push(` ${method}:`);
169
199
  lines.push(` operationId: ${call.operation}`);
170
- if (call.esbService !== undefined) {
171
- lines.push(` description: ${yamlText(`backed by ESB service ${call.esbService}`)}`);
200
+ const notes = [
201
+ ...(call.esbService === undefined ? [] : [`backed by ESB service ${call.esbService}`]),
202
+ ...(variants.length > 1
203
+ ? [
204
+ `also serves: ${variants
205
+ .slice(1)
206
+ .map((variant) => variant.operation)
207
+ .join(", ")}`
208
+ ]
209
+ : [])
210
+ ];
211
+ if (notes.length > 0) {
212
+ lines.push(` description: ${yamlText(notes.join("; "))}`);
172
213
  }
173
214
  if (call.request.length > 0 && method === "get") {
174
215
  lines.push(" parameters:");
@@ -194,13 +235,37 @@ export const openApiFor = (spec) => {
194
235
  lines.push(" content:");
195
236
  lines.push(" application/json:");
196
237
  lines.push(" schema:");
197
- lines.push(` $ref: "#/components/schemas/${schemaName(call.operation, "Response")}"`);
238
+ const responseRef = `"#/components/schemas/${call.responseDto === undefined
239
+ ? schemaName(call.operation, "Response")
240
+ : dtoSchemaName(call.responseDto)}"`;
241
+ if (call.responseShape === "list") {
242
+ lines.push(" type: array");
243
+ lines.push(" items:");
244
+ lines.push(` $ref: ${responseRef}`);
245
+ }
246
+ else {
247
+ lines.push(` $ref: ${responseRef}`);
248
+ }
198
249
  }
199
250
  }
200
251
  lines.push("components:");
201
252
  lines.push(" schemas:");
202
253
  const schemaCalls = [...spec.apiCalls].sort((a, b) => a.operation.localeCompare(b.operation));
203
254
  let wroteSchema = false;
255
+ // Every DTO a response names becomes a component the calls reference —
256
+ // one schema per domain entity, shared by every endpoint returning it.
257
+ const referencedDtos = new Set(spec.apiCalls.flatMap((call) => (call.responseDto === undefined ? [] : [call.responseDto])));
258
+ for (const dto of [...spec.dtos].sort((a, b) => a.domainName.localeCompare(b.domainName))) {
259
+ if (!referencedDtos.has(dto.domainName)) {
260
+ continue;
261
+ }
262
+ wroteSchema = true;
263
+ lines.push(` ${dtoSchemaName(dto.domainName)}:`);
264
+ lines.push(" type: object");
265
+ lines.push(` description: ${yamlText(`legacy: ${dto.legacyName}`)}`);
266
+ lines.push(" properties:");
267
+ lines.push(...propertyLines(dto.fields, " "));
268
+ }
204
269
  for (const call of schemaCalls) {
205
270
  for (const [side, fields] of [
206
271
  ["Request", call.request],
@@ -209,6 +274,9 @@ export const openApiFor = (spec) => {
209
274
  if (side === "Request" && (fields.length === 0 || call.method.toLowerCase() === "get")) {
210
275
  continue;
211
276
  }
277
+ if (side === "Response" && call.responseDto !== undefined) {
278
+ continue;
279
+ }
212
280
  wroteSchema = true;
213
281
  lines.push(` ${schemaName(call.operation, side)}:`);
214
282
  lines.push(" type: object");
@@ -249,7 +317,10 @@ export const renderPageSpec = (spec) => {
249
317
  lines.push("", "## API calls");
250
318
  for (const call of spec.apiCalls) {
251
319
  const esb = call.esbService === undefined ? "" : ` — ESB ${call.esbService}`;
252
- lines.push(`- ${call.operation}: ${call.method} ${call.path}${esb}`);
320
+ const returns = call.responseDto === undefined
321
+ ? ""
322
+ : ` → ${call.responseShape === "list" ? `list of ${call.responseDto}` : call.responseDto}`;
323
+ lines.push(`- ${call.operation}: ${call.method} ${call.path}${esb}${returns}`);
253
324
  }
254
325
  }
255
326
  if (spec.dtos.length > 0) {
@@ -1 +1 @@
1
- {"version":3,"file":"PageSpec.js","sourceRoot":"","sources":["../src/PageSpec.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"PageSpec.js","sourceRoot":"","sources":["../src/PageSpec.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import * as Effect from "effect/Effect";
2
2
  import * as Schema from "effect/Schema";
3
- import { ReviewResult } from "./Review.ts";
3
+ import { ReviewIssue, ReviewResult } from "./Review.ts";
4
4
  import type { WorkspaceError, WorkspaceShape } from "./Workspace.ts";
5
5
  declare const CoverageRule_base: Schema.Class<CoverageRule, Schema.Struct<{
6
6
  readonly name: Schema.String;
@@ -15,8 +15,48 @@ export declare class CoverageRule extends CoverageRule_base {
15
15
  * candidate units, not every file that shares the tree with them.
16
16
  */
17
17
  export declare const matchingFiles: (workspace: WorkspaceShape, regex: string, exclude?: string) => Effect.Effect<ReadonlyArray<string>, WorkspaceError>;
18
+ /** A unit a coverage rule captured, with every file it was captured from. */
19
+ export interface CapturedUnit {
20
+ readonly rule: string;
21
+ readonly unit: string;
22
+ readonly paths: ReadonlyArray<string>;
23
+ }
24
+ /**
25
+ * Every unit each rule captures across the workspace, in first-seen order
26
+ * per rule, each with the files it was found in — the provenance a
27
+ * wave-scoped gate needs to tell a unit of this wave from one of another.
28
+ */
29
+ export declare const capturedUnits: (workspace: WorkspaceShape, rules: readonly CoverageRule[]) => Effect.Effect<readonly CapturedUnit[], WorkspaceError, never>;
18
30
  export declare const coverageUnits: (workspace: WorkspaceShape, rules: readonly CoverageRule[]) => Effect.Effect<Readonly<Record<string, readonly string[]>>, WorkspaceError, never>;
19
- export declare const coverage: (workspace: WorkspaceShape, rules: readonly CoverageRule[], traceability: string) => Effect.Effect<ReviewResult, WorkspaceError, never>;
31
+ export interface CoverageOptions {
32
+ /**
33
+ * Restricts the gate to units captured from at least one file this
34
+ * predicate accepts. A wave-scoped extraction passes the wave's program
35
+ * files here: a unit that lives only in another wave's sources (or in an
36
+ * estate-wide descriptor such as web.xml) is reported in `outOfScope`
37
+ * rather than failing this wave's gate. Absent: every unit gates.
38
+ */
39
+ readonly inScope?: (path: string) => boolean;
40
+ }
41
+ export interface CoverageReport {
42
+ readonly result: ReviewResult;
43
+ /** Uncovered units the scope excluded from the gate, as `rule: unit`. */
44
+ readonly outOfScope: ReadonlyArray<string>;
45
+ }
46
+ /** Coverage with the scope split: what gates, and what was left to a later wave. */
47
+ export declare const coverageReport: (workspace: WorkspaceShape, rules: readonly CoverageRule[], traceability: string, options?: CoverageOptions | undefined) => Effect.Effect<CoverageReport, WorkspaceError, never>;
48
+ export declare const coverage: (workspace: WorkspaceShape, rules: readonly CoverageRule[], traceability: string, options?: CoverageOptions | undefined) => Effect.Effect<ReviewResult, WorkspaceError, never>;
20
49
  export declare const features: (workspace: WorkspaceShape, directory: string) => Effect.Effect<ReviewResult, WorkspaceError, never>;
50
+ /**
51
+ * Deterministic schema check of the specs a pack declares `spec-schema:`
52
+ * for: each program's spec must embed a block the schema decodes. A failure
53
+ * is a per-program Critical finding (titled like a judge finding, so the
54
+ * extraction gate's fix turn repairs that program), never a guess in a
55
+ * later phase — convert-page would otherwise be the first to notice.
56
+ */
57
+ export declare const specSchemaIssues: (schema: string | undefined, specs: readonly {
58
+ readonly name: string;
59
+ readonly markdown: string | undefined;
60
+ }[]) => Effect.Effect<readonly ReviewIssue[], never, never>;
21
61
  export {};
22
62
  //# sourceMappingURL=SpecChecks.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"SpecChecks.d.ts","sourceRoot":"","sources":["../src/SpecChecks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,EAAe,YAAY,EAAE,MAAM,aAAa,CAAA;AACvD,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;;;;;;AAEpE,qBAAa,YAAa,SAAQ,iBAIhC;CAAG;AAcL;;;;GAIG;AACH,eAAO,MAAM,aAAa,GACxB,WAAW,cAAc,EACzB,OAAO,MAAM,EACb,UAAU,MAAM,KACf,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,cAAc,CAMH,CAAA;AAEnD,eAAO,MAAM,aAAa,kJAuBxB,CAAA;AAEF,eAAO,MAAM,QAAQ,yIAyBnB,CAAA;AA2BF,eAAO,MAAM,QAAQ,sGA+BnB,CAAA"}
1
+ {"version":3,"file":"SpecChecks.d.ts","sourceRoot":"","sources":["../src/SpecChecks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAEvC,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AACvD,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;;;;;;AAEpE,qBAAa,YAAa,SAAQ,iBAIhC;CAAG;AAcL;;;;GAIG;AACH,eAAO,MAAM,aAAa,GACxB,WAAW,cAAc,EACzB,OAAO,MAAM,EACb,UAAU,MAAM,KACf,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,cAAc,CAMH,CAAA;AAEnD,6EAA6E;AAC7E,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,MAAM,CAAC,CAAA;CACtC;AAED;;;;GAIG;AACH,eAAO,MAAM,aAAa,8HAwBxB,CAAA;AAEF,eAAO,MAAM,aAAa,kJAYxB,CAAA;AAEF,MAAM,WAAW,eAAe;IAC9B;;;;;;OAMG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAA;CAC7C;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAA;IAC7B,yEAAyE;IACzE,QAAQ,CAAC,UAAU,EAAE,aAAa,CAAC,MAAM,CAAC,CAAA;CAC3C;AAUD,oFAAoF;AACpF,eAAO,MAAM,cAAc,kLA0BzB,CAAA;AAEF,eAAO,MAAM,QAAQ,gLAOnB,CAAA;AA2BF,eAAO,MAAM,QAAQ,sGA+BnB,CAAA;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,gBAAgB;mBAEW,MAAM;uBAAqB,MAAM,GAAG,SAAS;2DAyBnF,CAAA"}
@@ -1,5 +1,6 @@
1
1
  import * as Effect from "effect/Effect";
2
2
  import * as Schema from "effect/Schema";
3
+ import { pageSpecShapeHint, parsePageSpec } from "./PageSpec.js";
3
4
  import { ReviewIssue, ReviewResult } from "./Review.js";
4
5
  export class CoverageRule extends Schema.Class("CoverageRule")({
5
6
  name: Schema.String,
@@ -26,43 +27,75 @@ export const matchingFiles = (workspace, regex, exclude) => workspace
26
27
  ...(exclude === undefined ? {} : { excluding: new RegExp(exclude) })
27
28
  })
28
29
  .pipe(Effect.map((paths) => [...paths].sort()));
29
- export const coverageUnits = Effect.fn("@llm4ts/flow/SpecChecks.coverageUnits")(function* (workspace, rules) {
30
+ /**
31
+ * Every unit each rule captures across the workspace, in first-seen order
32
+ * per rule, each with the files it was found in — the provenance a
33
+ * wave-scoped gate needs to tell a unit of this wave from one of another.
34
+ */
35
+ export const capturedUnits = Effect.fn("@llm4ts/flow/SpecChecks.capturedUnits")(function* (workspace, rules) {
30
36
  const paths = yield* workspace.discover();
31
- const result = {};
37
+ const result = [];
32
38
  for (const rule of rules) {
33
39
  const filePattern = new RegExp(rule.files);
34
40
  const unitPattern = new RegExp(rule.unit);
35
- const units = [];
36
41
  for (const path of paths.filter((path) => filePattern.test(path))) {
37
42
  const contents = yield* workspace.read(path);
38
43
  for (const line of contents.split(/\r?\n/)) {
39
44
  for (const unit of capture(unitPattern, line)) {
40
- if (!units.includes(unit)) {
41
- units.push(unit);
45
+ const existing = result.find((entry) => entry.rule === rule.name && entry.unit === unit);
46
+ if (existing === undefined) {
47
+ result.push({ rule: rule.name, unit, paths: [path] });
48
+ }
49
+ else if (!existing.paths.includes(path)) {
50
+ existing.paths.push(path);
42
51
  }
43
52
  }
44
53
  }
45
54
  }
46
- result[rule.name] = units;
47
55
  }
48
56
  return result;
49
57
  });
50
- export const coverage = Effect.fn("@llm4ts/flow/SpecChecks.coverage")(function* (workspace, rules, traceability) {
51
- const units = yield* coverageUnits(workspace, rules);
52
- const issues = rules.flatMap((rule) => (units[rule.name] ?? []).flatMap((unit) => traceability.includes(unit)
53
- ? []
54
- : [
55
- ReviewIssue.make({
56
- severity: "Critical",
57
- title: `uncovered ${rule.name}: ${unit}`,
58
- description: `'${unit}' exists in the legacy source but does not ` +
59
- "appear in the traceability matrix."
60
- })
61
- ]));
62
- return ReviewResult.make({
63
- issues,
64
- summary: issues.length === 0 ? "coverage complete" : `${issues.length} unit(s) uncovered`
65
- });
58
+ export const coverageUnits = Effect.fn("@llm4ts/flow/SpecChecks.coverageUnits")(function* (workspace, rules) {
59
+ const captured = yield* capturedUnits(workspace, rules);
60
+ const result = {};
61
+ for (const rule of rules) {
62
+ result[rule.name] = captured
63
+ .filter((entry) => entry.rule === rule.name)
64
+ .map((entry) => entry.unit);
65
+ }
66
+ return result;
67
+ });
68
+ const uncoveredIssue = (rule, unit) => ReviewIssue.make({
69
+ severity: "Critical",
70
+ title: `uncovered ${rule}: ${unit}`,
71
+ description: `'${unit}' exists in the legacy source but does not ` + "appear in the traceability matrix."
72
+ });
73
+ /** Coverage with the scope split: what gates, and what was left to a later wave. */
74
+ export const coverageReport = Effect.fn("@llm4ts/flow/SpecChecks.coverageReport")(function* (workspace, rules, traceability, options = {}) {
75
+ const captured = yield* capturedUnits(workspace, rules);
76
+ const issues = [];
77
+ const outOfScope = [];
78
+ for (const entry of captured) {
79
+ if (traceability.includes(entry.unit)) {
80
+ continue;
81
+ }
82
+ if (options.inScope === undefined || entry.paths.some(options.inScope)) {
83
+ issues.push(uncoveredIssue(entry.rule, entry.unit));
84
+ }
85
+ else {
86
+ outOfScope.push(`${entry.rule}: ${entry.unit}`);
87
+ }
88
+ }
89
+ return {
90
+ result: ReviewResult.make({
91
+ issues,
92
+ summary: issues.length === 0 ? "coverage complete" : `${issues.length} unit(s) uncovered`
93
+ }),
94
+ outOfScope
95
+ };
96
+ });
97
+ export const coverage = Effect.fn("@llm4ts/flow/SpecChecks.coverage")(function* (workspace, rules, traceability, options = {}) {
98
+ return (yield* coverageReport(workspace, rules, traceability, options)).result;
66
99
  });
67
100
  const featureIssue = (path, contents) => {
68
101
  const lines = contents.split(/\r?\n/).map((line) => line.trim());
@@ -111,4 +144,30 @@ export const features = Effect.fn("@llm4ts/flow/SpecChecks.features")(function*
111
144
  summary: issues.length === 0 ? "features well-formed" : `${issues.length} malformed`
112
145
  });
113
146
  });
147
+ /**
148
+ * Deterministic schema check of the specs a pack declares `spec-schema:`
149
+ * for: each program's spec must embed a block the schema decodes. A failure
150
+ * is a per-program Critical finding (titled like a judge finding, so the
151
+ * extraction gate's fix turn repairs that program), never a guess in a
152
+ * later phase — convert-page would otherwise be the first to notice.
153
+ */
154
+ export const specSchemaIssues = Effect.fn("@llm4ts/flow/SpecChecks.specSchemaIssues")(function* (schema, specs) {
155
+ if (schema !== "pagespec") {
156
+ return [];
157
+ }
158
+ const issues = [];
159
+ for (const spec of specs) {
160
+ const problem = spec.markdown === undefined
161
+ ? "spec file is missing"
162
+ : yield* parsePageSpec(spec.markdown).pipe(Effect.map(() => undefined), Effect.catch((error) => Effect.succeed(error.message)));
163
+ if (problem !== undefined) {
164
+ issues.push(ReviewIssue.make({
165
+ severity: "Critical",
166
+ title: `judge[${spec.name}]: invalid pagespec block`,
167
+ description: `${problem}. ${pageSpecShapeHint}`
168
+ }));
169
+ }
170
+ }
171
+ return issues;
172
+ });
114
173
  //# sourceMappingURL=SpecChecks.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SpecChecks.js","sourceRoot":"","sources":["../src/SpecChecks.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SpecChecks.js","sourceRoot":"","sources":["../src/SpecChecks.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@llm4ts/flow",
3
- "version": "0.18.0",
3
+ "version": "0.18.1",
4
4
  "description": "Effect-native LLM workflow, persistence, review, and repository automation",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -91,7 +91,7 @@
91
91
  "typescript"
92
92
  ],
93
93
  "dependencies": {
94
- "@llm4ts/core": "0.18.0"
94
+ "@llm4ts/core": "0.18.1"
95
95
  },
96
96
  "peerDependencies": {
97
97
  "effect": "4.0.0-beta.102"
package/src/Pack.ts CHANGED
@@ -41,6 +41,12 @@ export interface Pack {
41
41
  // paths), `<NAME>` substituted with the program name. The seam that makes
42
42
  // per-program judging possible.
43
43
  readonly programFiles: string | undefined
44
+ /**
45
+ * The schema every program spec must embed, validated deterministically
46
+ * by the extraction gate: `pagespec` (a ```json pagespec block decodable
47
+ * as `PageSpec`) is the only one today; absent means prose-only specs.
48
+ */
49
+ readonly specSchema: string | undefined
44
50
  readonly dir: string
45
51
  readonly gate: (name: string) => ReadonlyArray<string> | undefined
46
52
  readonly prompt: (name: string) => string | undefined
@@ -206,6 +212,12 @@ export const loadPack = Effect.fn("@llm4ts/flow/Pack.load")(function* (
206
212
  message: `pack manifest 'programFiles:' is not a valid regex template: ${programFiles}`
207
213
  })
208
214
  }
215
+ const specSchema = fields["spec-schema"]
216
+ if (specSchema !== undefined && specSchema !== "pagespec") {
217
+ return yield* PlanParseError.make({
218
+ message: `pack manifest 'spec-schema:' must be 'pagespec' when set, got: ${specSchema}`
219
+ })
220
+ }
209
221
  const exclude = fields.exclude
210
222
  if (exclude !== undefined && !isValidRegExp(exclude)) {
211
223
  return yield* PlanParseError.make({
@@ -239,6 +251,7 @@ export const loadPack = Effect.fn("@llm4ts/flow/Pack.load")(function* (
239
251
  lenses,
240
252
  lessons: lessons === undefined || lessons.length === 0 ? undefined : lessons,
241
253
  programFiles,
254
+ specSchema,
242
255
  dir: directory,
243
256
  gate: (name) => gates[name],
244
257
  prompt: (name) => prompts[name],
package/src/PageSpec.ts CHANGED
@@ -59,6 +59,9 @@ export class PageDto extends Schema.Class<PageDto>("PageDto")({
59
59
  fields: Schema.Array(FieldMapping)
60
60
  }) {}
61
61
 
62
+ export const ResponseShape = Schema.Literals(["single", "list"])
63
+ export type ResponseShape = typeof ResponseShape.Type
64
+
62
65
  export class PageApiCall extends Schema.Class<PageApiCall>("PageApiCall")({
63
66
  /** Domain operation id, e.g. `listAccounts` — becomes the OpenAPI operationId. */
64
67
  operation: Schema.String,
@@ -70,9 +73,20 @@ export class PageApiCall extends Schema.Class<PageApiCall>("PageApiCall")({
70
73
  Schema.withConstructorDefault(Effect.succeed(emptyMappings)),
71
74
  Schema.withDecodingDefaultKey(Effect.succeed(emptyMappings))
72
75
  ),
76
+ /**
77
+ * The response's fields when it is an ad-hoc object. A response that is
78
+ * one of the page's DTOs names it with `responseDto` instead — the
79
+ * `domainName` of an entry in `dtos` — and `responseShape` says whether
80
+ * the endpoint returns one of them or a list; a table screen is a list.
81
+ */
73
82
  response: Schema.Array(FieldMapping).pipe(
74
83
  Schema.withConstructorDefault(Effect.succeed(emptyMappings)),
75
84
  Schema.withDecodingDefaultKey(Effect.succeed(emptyMappings))
85
+ ),
86
+ responseDto: Schema.optionalKey(Schema.String),
87
+ responseShape: ResponseShape.pipe(
88
+ Schema.withConstructorDefault(Effect.succeed("single" as const)),
89
+ Schema.withDecodingDefaultKey(Effect.succeed("single" as const))
76
90
  )
77
91
  }) {}
78
92
 
@@ -131,6 +145,20 @@ export class PageSpec extends Schema.Class<PageSpec>("PageSpec")({
131
145
  )
132
146
  }) {}
133
147
 
148
+ /**
149
+ * The block's shape in one paragraph, for the finding an undecodable block
150
+ * raises: the analyst that wrote its own richer shape is told exactly which
151
+ * keys the decoder accepts instead of only where decoding stopped.
152
+ */
153
+ export const pageSpecShapeHint =
154
+ "The block must be exactly: { page, route, title, complexity: low|medium|high, " +
155
+ "forms: [{ name, action, fields: [{ name, label, type, required?, validations: [{ rule, message?, enforcedAt: client|server|both }] }] }], " +
156
+ "dtos: [{ legacyName, domainName, fields: [{ legacyName, domainName, type }] }], " +
157
+ "apiCalls: [{ operation, method, path, esbService (the ESB service the legacy call goes through — omit only when there is none), request: [{ legacyName, domainName, type }], response: [{ legacyName, domainName, type }] for an ad-hoc object, or responseDto: <domainName of one of the dtos> with responseShape: single|list when the endpoint returns that DTO or a list of it (a table screen is a list) }], " +
158
+ "navigation: { inbound: [string], outbound: [string], steps: [string] }, sessionState: [string], openQuestions: [string] }. " +
159
+ "No other keys (no id, url, queryParams, esbCall, trigger, serverController); every apiCalls entry is an object with operation/method/path; " +
160
+ "put anything that does not fit into the prose sections or openQuestions."
161
+
134
162
  /** The fence info string marking a page-spec block inside spec markdown. */
135
163
  export const pageSpecFenceInfo = "json pagespec"
136
164
 
@@ -199,6 +227,9 @@ const yamlText = (value: string): string => JSON.stringify(value)
199
227
  const schemaName = (operation: string, side: "Request" | "Response"): string =>
200
228
  `${operation.charAt(0).toUpperCase()}${operation.slice(1)}${side}`
201
229
 
230
+ const dtoSchemaName = (domainName: string): string =>
231
+ domainName.replace(/[^A-Za-z0-9]+/g, "") || "Dto"
232
+
202
233
  const propertyLines = (
203
234
  fields: ReadonlyArray<FieldMapping>,
204
235
  indent: string
@@ -239,13 +270,34 @@ export const openApiFor = (spec: PageSpec): string => {
239
270
  lines[lines.length - 1] = "paths: {}"
240
271
  }
241
272
  for (const [path, calls] of paths) {
242
- lines.push(` ${path}:`)
243
- for (const call of [...calls].sort((a, b) => a.method.localeCompare(b.method))) {
273
+ lines.push(` ${path.startsWith("/") ? path : `/${path}`}:`)
274
+ // One operation per method: an OpenAPI path item cannot repeat a method,
275
+ // so calls that share one (a page load and its JSON refresh on the same
276
+ // GET) collapse into the first, which names the variants it stands for.
277
+ const byMethod = new Map<string, Array<PageApiCall>>()
278
+ for (const call of calls) {
244
279
  const method = call.method.toLowerCase()
280
+ byMethod.set(method, [...(byMethod.get(method) ?? []), call])
281
+ }
282
+ for (const [method, variants] of [...byMethod.entries()].sort(([a], [b]) =>
283
+ a.localeCompare(b)
284
+ )) {
285
+ const call = variants[0]!
245
286
  lines.push(` ${method}:`)
246
287
  lines.push(` operationId: ${call.operation}`)
247
- if (call.esbService !== undefined) {
248
- lines.push(` description: ${yamlText(`backed by ESB service ${call.esbService}`)}`)
288
+ const notes = [
289
+ ...(call.esbService === undefined ? [] : [`backed by ESB service ${call.esbService}`]),
290
+ ...(variants.length > 1
291
+ ? [
292
+ `also serves: ${variants
293
+ .slice(1)
294
+ .map((variant) => variant.operation)
295
+ .join(", ")}`
296
+ ]
297
+ : [])
298
+ ]
299
+ if (notes.length > 0) {
300
+ lines.push(` description: ${yamlText(notes.join("; "))}`)
249
301
  }
250
302
  if (call.request.length > 0 && method === "get") {
251
303
  lines.push(" parameters:")
@@ -273,15 +325,40 @@ export const openApiFor = (spec: PageSpec): string => {
273
325
  lines.push(" content:")
274
326
  lines.push(" application/json:")
275
327
  lines.push(" schema:")
276
- lines.push(
277
- ` $ref: "#/components/schemas/${schemaName(call.operation, "Response")}"`
278
- )
328
+ const responseRef = `"#/components/schemas/${
329
+ call.responseDto === undefined
330
+ ? schemaName(call.operation, "Response")
331
+ : dtoSchemaName(call.responseDto)
332
+ }"`
333
+ if (call.responseShape === "list") {
334
+ lines.push(" type: array")
335
+ lines.push(" items:")
336
+ lines.push(` $ref: ${responseRef}`)
337
+ } else {
338
+ lines.push(` $ref: ${responseRef}`)
339
+ }
279
340
  }
280
341
  }
281
342
  lines.push("components:")
282
343
  lines.push(" schemas:")
283
344
  const schemaCalls = [...spec.apiCalls].sort((a, b) => a.operation.localeCompare(b.operation))
284
345
  let wroteSchema = false
346
+ // Every DTO a response names becomes a component the calls reference —
347
+ // one schema per domain entity, shared by every endpoint returning it.
348
+ const referencedDtos = new Set(
349
+ spec.apiCalls.flatMap((call) => (call.responseDto === undefined ? [] : [call.responseDto]))
350
+ )
351
+ for (const dto of [...spec.dtos].sort((a, b) => a.domainName.localeCompare(b.domainName))) {
352
+ if (!referencedDtos.has(dto.domainName)) {
353
+ continue
354
+ }
355
+ wroteSchema = true
356
+ lines.push(` ${dtoSchemaName(dto.domainName)}:`)
357
+ lines.push(" type: object")
358
+ lines.push(` description: ${yamlText(`legacy: ${dto.legacyName}`)}`)
359
+ lines.push(" properties:")
360
+ lines.push(...propertyLines(dto.fields, " "))
361
+ }
285
362
  for (const call of schemaCalls) {
286
363
  for (const [side, fields] of [
287
364
  ["Request", call.request],
@@ -290,6 +367,9 @@ export const openApiFor = (spec: PageSpec): string => {
290
367
  if (side === "Request" && (fields.length === 0 || call.method.toLowerCase() === "get")) {
291
368
  continue
292
369
  }
370
+ if (side === "Response" && call.responseDto !== undefined) {
371
+ continue
372
+ }
293
373
  wroteSchema = true
294
374
  lines.push(` ${schemaName(call.operation, side)}:`)
295
375
  lines.push(" type: object")
@@ -332,7 +412,11 @@ export const renderPageSpec = (spec: PageSpec): string => {
332
412
  lines.push("", "## API calls")
333
413
  for (const call of spec.apiCalls) {
334
414
  const esb = call.esbService === undefined ? "" : ` — ESB ${call.esbService}`
335
- lines.push(`- ${call.operation}: ${call.method} ${call.path}${esb}`)
415
+ const returns =
416
+ call.responseDto === undefined
417
+ ? ""
418
+ : ` → ${call.responseShape === "list" ? `list of ${call.responseDto}` : call.responseDto}`
419
+ lines.push(`- ${call.operation}: ${call.method} ${call.path}${esb}${returns}`)
336
420
  }
337
421
  }
338
422
  if (spec.dtos.length > 0) {
package/src/SpecChecks.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  import * as Effect from "effect/Effect"
2
2
  import * as Schema from "effect/Schema"
3
+ import { pageSpecShapeHint, parsePageSpec } from "./PageSpec.ts"
3
4
  import { ReviewIssue, ReviewResult } from "./Review.ts"
4
5
  import type { WorkspaceError, WorkspaceShape } from "./Workspace.ts"
5
6
 
@@ -38,56 +39,119 @@ export const matchingFiles = (
38
39
  })
39
40
  .pipe(Effect.map((paths) => [...paths].sort()))
40
41
 
41
- export const coverageUnits = Effect.fn("@llm4ts/flow/SpecChecks.coverageUnits")(function* (
42
+ /** A unit a coverage rule captured, with every file it was captured from. */
43
+ export interface CapturedUnit {
44
+ readonly rule: string
45
+ readonly unit: string
46
+ readonly paths: ReadonlyArray<string>
47
+ }
48
+
49
+ /**
50
+ * Every unit each rule captures across the workspace, in first-seen order
51
+ * per rule, each with the files it was found in — the provenance a
52
+ * wave-scoped gate needs to tell a unit of this wave from one of another.
53
+ */
54
+ export const capturedUnits = Effect.fn("@llm4ts/flow/SpecChecks.capturedUnits")(function* (
42
55
  workspace: WorkspaceShape,
43
56
  rules: ReadonlyArray<CoverageRule>
44
- ): Effect.fn.Return<Readonly<Record<string, ReadonlyArray<string>>>, WorkspaceError> {
57
+ ): Effect.fn.Return<ReadonlyArray<CapturedUnit>, WorkspaceError> {
45
58
  const paths = yield* workspace.discover()
46
- const result: Record<string, ReadonlyArray<string>> = {}
59
+ const result: Array<{ rule: string; unit: string; paths: Array<string> }> = []
47
60
  for (const rule of rules) {
48
61
  const filePattern = new RegExp(rule.files)
49
62
  const unitPattern = new RegExp(rule.unit)
50
- const units: Array<string> = []
51
63
  for (const path of paths.filter((path) => filePattern.test(path))) {
52
64
  const contents = yield* workspace.read(path)
53
65
  for (const line of contents.split(/\r?\n/)) {
54
66
  for (const unit of capture(unitPattern, line)) {
55
- if (!units.includes(unit)) {
56
- units.push(unit)
67
+ const existing = result.find((entry) => entry.rule === rule.name && entry.unit === unit)
68
+ if (existing === undefined) {
69
+ result.push({ rule: rule.name, unit, paths: [path] })
70
+ } else if (!existing.paths.includes(path)) {
71
+ existing.paths.push(path)
57
72
  }
58
73
  }
59
74
  }
60
75
  }
61
- result[rule.name] = units
62
76
  }
63
77
  return result
64
78
  })
65
79
 
80
+ export const coverageUnits = Effect.fn("@llm4ts/flow/SpecChecks.coverageUnits")(function* (
81
+ workspace: WorkspaceShape,
82
+ rules: ReadonlyArray<CoverageRule>
83
+ ): Effect.fn.Return<Readonly<Record<string, ReadonlyArray<string>>>, WorkspaceError> {
84
+ const captured = yield* capturedUnits(workspace, rules)
85
+ const result: Record<string, ReadonlyArray<string>> = {}
86
+ for (const rule of rules) {
87
+ result[rule.name] = captured
88
+ .filter((entry) => entry.rule === rule.name)
89
+ .map((entry) => entry.unit)
90
+ }
91
+ return result
92
+ })
93
+
94
+ export interface CoverageOptions {
95
+ /**
96
+ * Restricts the gate to units captured from at least one file this
97
+ * predicate accepts. A wave-scoped extraction passes the wave's program
98
+ * files here: a unit that lives only in another wave's sources (or in an
99
+ * estate-wide descriptor such as web.xml) is reported in `outOfScope`
100
+ * rather than failing this wave's gate. Absent: every unit gates.
101
+ */
102
+ readonly inScope?: (path: string) => boolean
103
+ }
104
+
105
+ export interface CoverageReport {
106
+ readonly result: ReviewResult
107
+ /** Uncovered units the scope excluded from the gate, as `rule: unit`. */
108
+ readonly outOfScope: ReadonlyArray<string>
109
+ }
110
+
111
+ const uncoveredIssue = (rule: string, unit: string): ReviewIssue =>
112
+ ReviewIssue.make({
113
+ severity: "Critical",
114
+ title: `uncovered ${rule}: ${unit}`,
115
+ description:
116
+ `'${unit}' exists in the legacy source but does not ` + "appear in the traceability matrix."
117
+ })
118
+
119
+ /** Coverage with the scope split: what gates, and what was left to a later wave. */
120
+ export const coverageReport = Effect.fn("@llm4ts/flow/SpecChecks.coverageReport")(function* (
121
+ workspace: WorkspaceShape,
122
+ rules: ReadonlyArray<CoverageRule>,
123
+ traceability: string,
124
+ options: CoverageOptions = {}
125
+ ): Effect.fn.Return<CoverageReport, WorkspaceError> {
126
+ const captured = yield* capturedUnits(workspace, rules)
127
+ const issues: Array<ReviewIssue> = []
128
+ const outOfScope: Array<string> = []
129
+ for (const entry of captured) {
130
+ if (traceability.includes(entry.unit)) {
131
+ continue
132
+ }
133
+ if (options.inScope === undefined || entry.paths.some(options.inScope)) {
134
+ issues.push(uncoveredIssue(entry.rule, entry.unit))
135
+ } else {
136
+ outOfScope.push(`${entry.rule}: ${entry.unit}`)
137
+ }
138
+ }
139
+ return {
140
+ result: ReviewResult.make({
141
+ issues,
142
+ summary: issues.length === 0 ? "coverage complete" : `${issues.length} unit(s) uncovered`
143
+ }),
144
+ outOfScope
145
+ }
146
+ })
147
+
66
148
  export const coverage = Effect.fn("@llm4ts/flow/SpecChecks.coverage")(function* (
67
149
  workspace: WorkspaceShape,
68
150
  rules: ReadonlyArray<CoverageRule>,
69
- traceability: string
151
+ traceability: string,
152
+ options: CoverageOptions = {}
70
153
  ): Effect.fn.Return<ReviewResult, WorkspaceError> {
71
- const units = yield* coverageUnits(workspace, rules)
72
- const issues = rules.flatMap((rule) =>
73
- (units[rule.name] ?? []).flatMap((unit) =>
74
- traceability.includes(unit)
75
- ? []
76
- : [
77
- ReviewIssue.make({
78
- severity: "Critical",
79
- title: `uncovered ${rule.name}: ${unit}`,
80
- description:
81
- `'${unit}' exists in the legacy source but does not ` +
82
- "appear in the traceability matrix."
83
- })
84
- ]
85
- )
86
- )
87
- return ReviewResult.make({
88
- issues,
89
- summary: issues.length === 0 ? "coverage complete" : `${issues.length} unit(s) uncovered`
90
- })
154
+ return (yield* coverageReport(workspace, rules, traceability, options)).result
91
155
  })
92
156
 
93
157
  const featureIssue = (path: string, contents: string): ReviewIssue | undefined => {
@@ -147,3 +211,39 @@ export const features = Effect.fn("@llm4ts/flow/SpecChecks.features")(function*
147
211
  summary: issues.length === 0 ? "features well-formed" : `${issues.length} malformed`
148
212
  })
149
213
  })
214
+
215
+ /**
216
+ * Deterministic schema check of the specs a pack declares `spec-schema:`
217
+ * for: each program's spec must embed a block the schema decodes. A failure
218
+ * is a per-program Critical finding (titled like a judge finding, so the
219
+ * extraction gate's fix turn repairs that program), never a guess in a
220
+ * later phase — convert-page would otherwise be the first to notice.
221
+ */
222
+ export const specSchemaIssues = Effect.fn("@llm4ts/flow/SpecChecks.specSchemaIssues")(function* (
223
+ schema: string | undefined,
224
+ specs: ReadonlyArray<{ readonly name: string; readonly markdown: string | undefined }>
225
+ ): Effect.fn.Return<ReadonlyArray<ReviewIssue>, never> {
226
+ if (schema !== "pagespec") {
227
+ return []
228
+ }
229
+ const issues: Array<ReviewIssue> = []
230
+ for (const spec of specs) {
231
+ const problem =
232
+ spec.markdown === undefined
233
+ ? "spec file is missing"
234
+ : yield* parsePageSpec(spec.markdown).pipe(
235
+ Effect.map(() => undefined),
236
+ Effect.catch((error) => Effect.succeed(error.message))
237
+ )
238
+ if (problem !== undefined) {
239
+ issues.push(
240
+ ReviewIssue.make({
241
+ severity: "Critical",
242
+ title: `judge[${spec.name}]: invalid pagespec block`,
243
+ description: `${problem}. ${pageSpecShapeHint}`
244
+ })
245
+ )
246
+ }
247
+ }
248
+ return issues
249
+ })