@bett3r-dev/blueprint-schema 1.8.0 → 1.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (182) hide show
  1. package/CHANGELOG.md +44 -0
  2. package/build/cjs/apply-design.d.ts.map +1 -1
  3. package/build/cjs/apply-design.js +11 -1
  4. package/build/cjs/apply-design.js.map +1 -1
  5. package/build/cjs/apply-overrides.d.ts.map +1 -1
  6. package/build/cjs/apply-overrides.js +18 -1
  7. package/build/cjs/apply-overrides.js.map +1 -1
  8. package/build/cjs/card-holds.d.ts +4 -0
  9. package/build/cjs/card-holds.d.ts.map +1 -0
  10. package/build/cjs/card-holds.js +51 -0
  11. package/build/cjs/card-holds.js.map +1 -0
  12. package/build/cjs/channel-link.d.ts +11 -0
  13. package/build/cjs/channel-link.d.ts.map +1 -0
  14. package/build/cjs/channel-link.js +39 -0
  15. package/build/cjs/channel-link.js.map +1 -0
  16. package/build/cjs/coverage-links.d.ts +1 -1
  17. package/build/cjs/coverage-links.d.ts.map +1 -1
  18. package/build/cjs/coverage-links.js +10 -3
  19. package/build/cjs/coverage-links.js.map +1 -1
  20. package/build/cjs/design.d.ts +38 -7
  21. package/build/cjs/design.d.ts.map +1 -1
  22. package/build/cjs/design.js +6 -4
  23. package/build/cjs/design.js.map +1 -1
  24. package/build/cjs/diagnostics.d.ts +12 -0
  25. package/build/cjs/diagnostics.d.ts.map +1 -1
  26. package/build/cjs/diagnostics.js.map +1 -1
  27. package/build/cjs/effective-design.d.ts +2 -2
  28. package/build/cjs/effective-design.d.ts.map +1 -1
  29. package/build/cjs/effective-design.js +30 -2
  30. package/build/cjs/effective-design.js.map +1 -1
  31. package/build/cjs/entry-points.d.ts.map +1 -1
  32. package/build/cjs/entry-points.js +3 -1
  33. package/build/cjs/entry-points.js.map +1 -1
  34. package/build/cjs/fork-scenarios.d.ts +3 -1
  35. package/build/cjs/fork-scenarios.d.ts.map +1 -1
  36. package/build/cjs/fork-scenarios.js +20 -5
  37. package/build/cjs/fork-scenarios.js.map +1 -1
  38. package/build/cjs/index.d.ts +6 -0
  39. package/build/cjs/index.d.ts.map +1 -1
  40. package/build/cjs/index.js +6 -0
  41. package/build/cjs/index.js.map +1 -1
  42. package/build/cjs/map-review-view.d.ts +29 -0
  43. package/build/cjs/map-review-view.d.ts.map +1 -0
  44. package/build/cjs/map-review-view.js +64 -0
  45. package/build/cjs/map-review-view.js.map +1 -0
  46. package/build/cjs/map-structure.d.ts +25 -1
  47. package/build/cjs/map-structure.d.ts.map +1 -1
  48. package/build/cjs/map-structure.js.map +1 -1
  49. package/build/cjs/map-vocabulary.d.ts +8 -1
  50. package/build/cjs/map-vocabulary.d.ts.map +1 -1
  51. package/build/cjs/map-vocabulary.js +15 -2
  52. package/build/cjs/map-vocabulary.js.map +1 -1
  53. package/build/cjs/nodes.d.ts +67 -0
  54. package/build/cjs/nodes.d.ts.map +1 -1
  55. package/build/cjs/nodes.js +8 -1
  56. package/build/cjs/nodes.js.map +1 -1
  57. package/build/cjs/overrides.d.ts +21 -0
  58. package/build/cjs/overrides.d.ts.map +1 -1
  59. package/build/cjs/overrides.js +53 -1
  60. package/build/cjs/overrides.js.map +1 -1
  61. package/build/cjs/reality-check.d.ts +19 -1
  62. package/build/cjs/reality-check.d.ts.map +1 -1
  63. package/build/cjs/reality-check.js +113 -6
  64. package/build/cjs/reality-check.js.map +1 -1
  65. package/build/cjs/scenario-test-level.d.ts +25 -0
  66. package/build/cjs/scenario-test-level.d.ts.map +1 -0
  67. package/build/cjs/scenario-test-level.js +43 -0
  68. package/build/cjs/scenario-test-level.js.map +1 -0
  69. package/build/cjs/session.d.ts +21 -2
  70. package/build/cjs/session.d.ts.map +1 -1
  71. package/build/cjs/session.js +3 -2
  72. package/build/cjs/session.js.map +1 -1
  73. package/build/cjs/spec.d.ts.map +1 -1
  74. package/build/cjs/spec.js +70 -13
  75. package/build/cjs/spec.js.map +1 -1
  76. package/build/cjs/step-elements.d.ts +27 -0
  77. package/build/cjs/step-elements.d.ts.map +1 -0
  78. package/build/cjs/step-elements.js +28 -0
  79. package/build/cjs/step-elements.js.map +1 -0
  80. package/build/cjs/tags.d.ts +26 -0
  81. package/build/cjs/tags.d.ts.map +1 -0
  82. package/build/cjs/tags.js +28 -0
  83. package/build/cjs/tags.js.map +1 -0
  84. package/build/cjs/topology.d.ts.map +1 -1
  85. package/build/cjs/topology.js +2 -0
  86. package/build/cjs/topology.js.map +1 -1
  87. package/build/cjs/validate-design.d.ts +1 -1
  88. package/build/cjs/validate-design.d.ts.map +1 -1
  89. package/build/cjs/validate-design.js +242 -10
  90. package/build/cjs/validate-design.js.map +1 -1
  91. package/build/esm/apply-design.d.ts.map +1 -1
  92. package/build/esm/apply-design.js +11 -1
  93. package/build/esm/apply-design.js.map +1 -1
  94. package/build/esm/apply-overrides.d.ts.map +1 -1
  95. package/build/esm/apply-overrides.js +18 -1
  96. package/build/esm/apply-overrides.js.map +1 -1
  97. package/build/esm/card-holds.d.ts +4 -0
  98. package/build/esm/card-holds.d.ts.map +1 -0
  99. package/build/esm/card-holds.js +48 -0
  100. package/build/esm/card-holds.js.map +1 -0
  101. package/build/esm/channel-link.d.ts +11 -0
  102. package/build/esm/channel-link.d.ts.map +1 -0
  103. package/build/esm/channel-link.js +34 -0
  104. package/build/esm/channel-link.js.map +1 -0
  105. package/build/esm/coverage-links.d.ts +1 -1
  106. package/build/esm/coverage-links.d.ts.map +1 -1
  107. package/build/esm/coverage-links.js +10 -3
  108. package/build/esm/coverage-links.js.map +1 -1
  109. package/build/esm/design.d.ts +38 -7
  110. package/build/esm/design.d.ts.map +1 -1
  111. package/build/esm/design.js +6 -4
  112. package/build/esm/design.js.map +1 -1
  113. package/build/esm/diagnostics.d.ts +12 -0
  114. package/build/esm/diagnostics.d.ts.map +1 -1
  115. package/build/esm/diagnostics.js.map +1 -1
  116. package/build/esm/effective-design.d.ts +2 -2
  117. package/build/esm/effective-design.d.ts.map +1 -1
  118. package/build/esm/effective-design.js +30 -2
  119. package/build/esm/effective-design.js.map +1 -1
  120. package/build/esm/entry-points.d.ts.map +1 -1
  121. package/build/esm/entry-points.js +3 -1
  122. package/build/esm/entry-points.js.map +1 -1
  123. package/build/esm/fork-scenarios.d.ts +3 -1
  124. package/build/esm/fork-scenarios.d.ts.map +1 -1
  125. package/build/esm/fork-scenarios.js +20 -5
  126. package/build/esm/fork-scenarios.js.map +1 -1
  127. package/build/esm/index.d.ts +6 -0
  128. package/build/esm/index.d.ts.map +1 -1
  129. package/build/esm/index.js +6 -0
  130. package/build/esm/index.js.map +1 -1
  131. package/build/esm/map-review-view.d.ts +29 -0
  132. package/build/esm/map-review-view.d.ts.map +1 -0
  133. package/build/esm/map-review-view.js +58 -0
  134. package/build/esm/map-review-view.js.map +1 -0
  135. package/build/esm/map-structure.d.ts +25 -1
  136. package/build/esm/map-structure.d.ts.map +1 -1
  137. package/build/esm/map-structure.js.map +1 -1
  138. package/build/esm/map-vocabulary.d.ts +8 -1
  139. package/build/esm/map-vocabulary.d.ts.map +1 -1
  140. package/build/esm/map-vocabulary.js +13 -1
  141. package/build/esm/map-vocabulary.js.map +1 -1
  142. package/build/esm/nodes.d.ts +67 -0
  143. package/build/esm/nodes.d.ts.map +1 -1
  144. package/build/esm/nodes.js +7 -0
  145. package/build/esm/nodes.js.map +1 -1
  146. package/build/esm/overrides.d.ts +21 -0
  147. package/build/esm/overrides.d.ts.map +1 -1
  148. package/build/esm/overrides.js +51 -1
  149. package/build/esm/overrides.js.map +1 -1
  150. package/build/esm/reality-check.d.ts +19 -1
  151. package/build/esm/reality-check.d.ts.map +1 -1
  152. package/build/esm/reality-check.js +112 -6
  153. package/build/esm/reality-check.js.map +1 -1
  154. package/build/esm/scenario-test-level.d.ts +25 -0
  155. package/build/esm/scenario-test-level.d.ts.map +1 -0
  156. package/build/esm/scenario-test-level.js +37 -0
  157. package/build/esm/scenario-test-level.js.map +1 -0
  158. package/build/esm/session.d.ts +21 -2
  159. package/build/esm/session.d.ts.map +1 -1
  160. package/build/esm/session.js +3 -2
  161. package/build/esm/session.js.map +1 -1
  162. package/build/esm/spec.d.ts.map +1 -1
  163. package/build/esm/spec.js +71 -14
  164. package/build/esm/spec.js.map +1 -1
  165. package/build/esm/step-elements.d.ts +27 -0
  166. package/build/esm/step-elements.d.ts.map +1 -0
  167. package/build/esm/step-elements.js +21 -0
  168. package/build/esm/step-elements.js.map +1 -0
  169. package/build/esm/tags.d.ts +26 -0
  170. package/build/esm/tags.d.ts.map +1 -0
  171. package/build/esm/tags.js +21 -0
  172. package/build/esm/tags.js.map +1 -0
  173. package/build/esm/topology.d.ts.map +1 -1
  174. package/build/esm/topology.js +2 -0
  175. package/build/esm/topology.js.map +1 -1
  176. package/build/esm/validate-design.d.ts +1 -1
  177. package/build/esm/validate-design.d.ts.map +1 -1
  178. package/build/esm/validate-design.js +243 -11
  179. package/build/esm/validate-design.js.map +1 -1
  180. package/build/tsconfig.tsbuildinfo +1 -1
  181. package/package.json +1 -1
  182. package/schema/map.schema.json +9 -1
@@ -27,7 +27,13 @@ export declare function isKpiDirection(value: unknown): value is KpiDirection;
27
27
  export type KpiSourceKind = 'events' | 'query';
28
28
  export declare const KPI_SOURCE_KINDS: readonly KpiSourceKind[];
29
29
  export declare function isKpiSourceKind(value: unknown): value is KpiSourceKind;
30
- export type KpiFilterOutcome = 'ok' | 'rejected';
30
+ export type KpiQueryLanguage = 'promql';
31
+ export declare const KPI_QUERY_LANGUAGES: readonly KpiQueryLanguage[];
32
+ export declare function isKpiQueryLanguage(value: unknown): value is KpiQueryLanguage;
33
+ export declare const APM_QUERY_LANGUAGE: Readonly<{
34
+ grafana: KpiQueryLanguage;
35
+ }>;
36
+ export type KpiFilterOutcome = 'ok' | 'rejected' | 'aborted';
31
37
  export declare const KPI_FILTER_OUTCOMES: readonly KpiFilterOutcome[];
32
38
  export declare function isKpiFilterOutcome(value: unknown): value is KpiFilterOutcome;
33
39
  export type WalkKind = 'behavioral' | 'structural';
@@ -53,6 +59,7 @@ export type MapSchemaDocument = {
53
59
  kpiKind: MapSchemaVocabulary;
54
60
  kpiDirection: MapSchemaVocabulary;
55
61
  kpiSourceKind: MapSchemaVocabulary;
62
+ kpiQueryLanguage: MapSchemaVocabulary;
56
63
  kpiFilterOutcome: MapSchemaVocabulary;
57
64
  walkKind: MapSchemaVocabulary;
58
65
  };
@@ -1 +1 @@
1
- {"version":3,"file":"map-vocabulary.d.ts","sourceRoot":"","sources":["../../src/map-vocabulary.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"map-vocabulary.d.ts","sourceRoot":"","sources":["../../src/map-vocabulary.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.WALK_KINDS = exports.KPI_FILTER_OUTCOMES = exports.KPI_SOURCE_KINDS = exports.KPI_DIRECTIONS = exports.KPI_KINDS = exports.KPI_MODES = exports.EXAMPLE_STATUS_KINDS = exports.MAP_SHAPES = exports.MAP_NODE_LEVELS = exports.DECIDED_SOURCES = exports.FORK_STATUS_KINDS = exports.MAP_SCHEMA_VERSION = void 0;
3
+ exports.WALK_KINDS = exports.KPI_FILTER_OUTCOMES = exports.APM_QUERY_LANGUAGE = exports.KPI_QUERY_LANGUAGES = exports.KPI_SOURCE_KINDS = exports.KPI_DIRECTIONS = exports.KPI_KINDS = exports.KPI_MODES = exports.EXAMPLE_STATUS_KINDS = exports.MAP_SHAPES = exports.MAP_NODE_LEVELS = exports.DECIDED_SOURCES = exports.FORK_STATUS_KINDS = exports.MAP_SCHEMA_VERSION = void 0;
4
4
  exports.isForkStatusKind = isForkStatusKind;
5
5
  exports.isDecidedSource = isDecidedSource;
6
6
  exports.isMapNodeLevel = isMapNodeLevel;
@@ -10,6 +10,7 @@ exports.isKpiMode = isKpiMode;
10
10
  exports.isKpiKind = isKpiKind;
11
11
  exports.isKpiDirection = isKpiDirection;
12
12
  exports.isKpiSourceKind = isKpiSourceKind;
13
+ exports.isKpiQueryLanguage = isKpiQueryLanguage;
13
14
  exports.isKpiFilterOutcome = isKpiFilterOutcome;
14
15
  exports.isWalkKind = isWalkKind;
15
16
  exports.mapSchemaDocument = mapSchemaDocument;
@@ -57,7 +58,14 @@ exports.KPI_SOURCE_KINDS = Object.freeze(['events', 'query']);
57
58
  function isKpiSourceKind(value) {
58
59
  return typeof value === 'string' && exports.KPI_SOURCE_KINDS.includes(value);
59
60
  }
60
- exports.KPI_FILTER_OUTCOMES = Object.freeze(['ok', 'rejected']);
61
+ exports.KPI_QUERY_LANGUAGES = Object.freeze(['promql']);
62
+ function isKpiQueryLanguage(value) {
63
+ return typeof value === 'string' && exports.KPI_QUERY_LANGUAGES.includes(value);
64
+ }
65
+ // BP-230: the query language each APM reads, keyed by the raw observability.apm value
66
+ // (blueprint-scaffold-core ObservabilityApm, grafana alone).
67
+ exports.APM_QUERY_LANGUAGE = Object.freeze({ grafana: 'promql' });
68
+ exports.KPI_FILTER_OUTCOMES = Object.freeze(['ok', 'rejected', 'aborted']);
61
69
  function isKpiFilterOutcome(value) {
62
70
  return typeof value === 'string' && exports.KPI_FILTER_OUTCOMES.includes(value);
63
71
  }
@@ -119,6 +127,11 @@ function mapSchemaDocument() {
119
127
  description: 'Where a defined KPI is read from: eventstorming ids, or a query on a logical datasource role.',
120
128
  enum: [...exports.KPI_SOURCE_KINDS]
121
129
  },
130
+ kpiQueryLanguage: {
131
+ type: 'string',
132
+ description: 'The language a query KPI\'s expr is written in; a query that states none is promql.',
133
+ enum: [...exports.KPI_QUERY_LANGUAGES]
134
+ },
122
135
  kpiFilterOutcome: {
123
136
  type: 'string',
124
137
  description: 'The logical outcome a KPI event side may be filtered on.',
@@ -1 +1 @@
1
- {"version":3,"file":"map-vocabulary.js","sourceRoot":"","sources":["../../src/map-vocabulary.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"map-vocabulary.js","sourceRoot":"","sources":["../../src/map-vocabulary.ts"],"names":[],"mappings":"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"}
@@ -10,6 +10,11 @@ export type NodeMeta = {
10
10
  * to the label's PascalCase.
11
11
  */
12
12
  runtimeName?: string;
13
+ /**
14
+ * BP-270: why an extractor could not read this node's data shape from code (a union, an unresolved identifier). A
15
+ * shape is read whole or not at all, so a node carrying this reason carries no `dataShape`.
16
+ */
17
+ dataShapeUnread?: string;
13
18
  };
14
19
  export type Origin = 'extracted' | 'manual' | 'human' | 'ai' | 'derived';
15
20
  export type DesignAuthor = 'human' | 'ai';
@@ -27,6 +32,65 @@ export type ReadModelSearchIndex = {
27
32
  engine: string;
28
33
  source: NodeSource;
29
34
  };
35
+ /**
36
+ * BP-270 (ADR-127): the type of one field of a data shape, from a closed, framework-neutral vocabulary. A `string` may
37
+ * name a `format` (`date-time`, `email`, `uuid`); an `enum` lists its `values`; a `list` holds `items`; a `map` keys
38
+ * strings to `values`; an `object` lists its own `fields` and is `open` when it admits fields it does not list; a
39
+ * `ref` names the node whose shape it carries by `target` id; a `schema` names a schema the design does not shape.
40
+ */
41
+ export type DataType = {
42
+ kind: 'string';
43
+ format?: string;
44
+ } | {
45
+ kind: 'number';
46
+ } | {
47
+ kind: 'integer';
48
+ } | {
49
+ kind: 'boolean';
50
+ } | {
51
+ kind: 'any';
52
+ } | {
53
+ kind: 'enum';
54
+ values: string[];
55
+ } | {
56
+ kind: 'list';
57
+ items: DataType;
58
+ } | {
59
+ kind: 'map';
60
+ values: DataType;
61
+ } | {
62
+ kind: 'object';
63
+ fields: DataField[];
64
+ open?: boolean;
65
+ } | {
66
+ kind: 'ref';
67
+ target: string;
68
+ } | {
69
+ kind: 'schema';
70
+ name: string;
71
+ };
72
+ export type DataTypeKind = DataType['kind'];
73
+ export declare const DATA_TYPE_KINDS: readonly DataTypeKind[];
74
+ /** BP-270: one named field of a data shape. A field with no `type` is owed. */
75
+ export type DataField = {
76
+ name: string;
77
+ type?: DataType;
78
+ optional?: boolean;
79
+ nullable?: boolean;
80
+ note?: string;
81
+ };
82
+ /**
83
+ * BP-270 (ADR-127): what a command, event, aggregate's state or read-model row carries: its fields, `open` when it
84
+ * admits fields it does not list; or `sameAs` the node id whose shape it repeats.
85
+ */
86
+ export type DataShape = {
87
+ fields: DataField[];
88
+ open?: boolean;
89
+ } | {
90
+ sameAs: string;
91
+ };
92
+ /** BP-270 D4: the node types a data shape may sit on; validateDesign refuses one elsewhere as DATA_SHAPE_NOT_ALLOWED. */
93
+ export declare const DATA_SHAPE_NODE_TYPES: readonly NodeType[];
30
94
  export type BlueprintNode = {
31
95
  id: string;
32
96
  type: NodeType;
@@ -41,6 +105,9 @@ export type BlueprintNode = {
41
105
  rule?: string;
42
106
  errorCodes?: string[];
43
107
  generic?: boolean;
108
+ /** BP-279: the node's tags (tags.ts); absent when it has none. */
109
+ tags?: string[];
110
+ dataShape?: DataShape;
44
111
  origin?: Origin;
45
112
  status?: DesignStatus;
46
113
  previousLabel?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"nodes.d.ts","sourceRoot":"","sources":["../../src/nodes.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,QAAQ,GAAG;IACrB,MAAM,EAAE,UAAU,CAAC;IACnB;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,MAAM,GAAG,WAAW,GAAG,QAAQ,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC;AAEzE,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,IAAI,CAAC;AAE1C,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG,UAAU,GAAG,SAAS,GAAG,WAAW,CAAC;AAE7E,MAAM,MAAM,MAAM,GAAG,UAAU,GAAG,aAAa,CAAC;AAEhD,MAAM,MAAM,QAAQ,GAChB,WAAW,GACX,QAAQ,GACR,SAAS,GACT,OAAO,GACP,QAAQ,GACR,YAAY,GACZ,iBAAiB,GACjB,WAAW,GACX,OAAO,GACP,IAAI,GACJ,eAAe,GACf,WAAW,CAAC;AAEhB,eAAO,MAAM,UAAU,EAAE,SAAS,QAAQ,EAahC,CAAC;AAEX,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAahD,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAElE,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,UAAU,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,UAAU,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,QAAQ,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,cAAc,EAAE,CAAC;IAC3B,aAAa,CAAC,EAAE,oBAAoB,EAAE,CAAC;IACvC,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,sHAAsH;IACtH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC"}
1
+ {"version":3,"file":"nodes.d.ts","sourceRoot":"","sources":["../../src/nodes.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.NODE_TYPE_BY_ABBREV = exports.NODE_ABBREV = exports.NODE_TYPES = void 0;
3
+ exports.DATA_SHAPE_NODE_TYPES = exports.DATA_TYPE_KINDS = exports.NODE_TYPE_BY_ABBREV = exports.NODE_ABBREV = exports.NODE_TYPES = void 0;
4
4
  exports.NODE_TYPES = [
5
5
  'aggregate',
6
6
  'system',
@@ -30,4 +30,11 @@ exports.NODE_ABBREV = {
30
30
  'invariant': 'inv'
31
31
  };
32
32
  exports.NODE_TYPE_BY_ABBREV = Object.fromEntries(exports.NODE_TYPES.map(type => [exports.NODE_ABBREV[type], type]));
33
+ exports.DATA_TYPE_KINDS = [
34
+ 'string', 'number', 'integer', 'boolean', 'any', 'enum', 'list', 'map', 'object', 'ref', 'schema'
35
+ ];
36
+ /** BP-270 D4: the node types a data shape may sit on; validateDesign refuses one elsewhere as DATA_SHAPE_NOT_ALLOWED. */
37
+ exports.DATA_SHAPE_NODE_TYPES = [
38
+ 'command', 'event', 'aggregate', 'read-model', 'postgres-view'
39
+ ];
33
40
  //# sourceMappingURL=nodes.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"nodes.js","sourceRoot":"","sources":["../../src/nodes.ts"],"names":[],"mappings":";;;AAqCa,QAAA,UAAU,GAAwB;IAC7C,WAAW;IACX,QAAQ;IACR,SAAS;IACT,OAAO;IACP,QAAQ;IACR,YAAY;IACZ,iBAAiB;IACjB,WAAW;IACX,OAAO;IACP,IAAI;IACJ,eAAe;IACf,WAAW;CACH,CAAC;AAEE,QAAA,WAAW,GAA6B;IACnD,WAAW,EAAE,KAAK;IAClB,QAAQ,EAAE,KAAK;IACf,SAAS,EAAE,KAAK;IAChB,OAAO,EAAE,KAAK;IACd,QAAQ,EAAE,KAAK;IACf,YAAY,EAAE,IAAI;IAClB,iBAAiB,EAAE,KAAK;IACxB,WAAW,EAAE,KAAK;IAClB,OAAO,EAAE,OAAO;IAChB,IAAI,EAAE,IAAI;IACV,eAAe,EAAE,MAAM;IACvB,WAAW,EAAE,KAAK;CACnB,CAAC;AAEW,QAAA,mBAAmB,GAAuC,MAAM,CAAC,WAAW,CACvF,kBAAU,CAAC,GAAG,CAAE,IAAI,CAAC,EAAE,CAAC,CAAE,mBAAW,CAAE,IAAI,CAAE,EAAE,IAAI,CAAE,CAAE,CACxD,CAAC"}
1
+ {"version":3,"file":"nodes.js","sourceRoot":"","sources":["../../src/nodes.ts"],"names":[],"mappings":";;;AA0Ca,QAAA,UAAU,GAAwB;IAC7C,WAAW;IACX,QAAQ;IACR,SAAS;IACT,OAAO;IACP,QAAQ;IACR,YAAY;IACZ,iBAAiB;IACjB,WAAW;IACX,OAAO;IACP,IAAI;IACJ,eAAe;IACf,WAAW;CACH,CAAC;AAEE,QAAA,WAAW,GAA6B;IACnD,WAAW,EAAE,KAAK;IAClB,QAAQ,EAAE,KAAK;IACf,SAAS,EAAE,KAAK;IAChB,OAAO,EAAE,KAAK;IACd,QAAQ,EAAE,KAAK;IACf,YAAY,EAAE,IAAI;IAClB,iBAAiB,EAAE,KAAK;IACxB,WAAW,EAAE,KAAK;IAClB,OAAO,EAAE,OAAO;IAChB,IAAI,EAAE,IAAI;IACV,eAAe,EAAE,MAAM;IACvB,WAAW,EAAE,KAAK;CACnB,CAAC;AAEW,QAAA,mBAAmB,GAAuC,MAAM,CAAC,WAAW,CACvF,kBAAU,CAAC,GAAG,CAAE,IAAI,CAAC,EAAE,CAAC,CAAE,mBAAW,CAAE,IAAI,CAAE,EAAE,IAAI,CAAE,CAAE,CACxD,CAAC;AAiCW,QAAA,eAAe,GAA4B;IACtD,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ;CACzF,CAAC;AAmBX,yHAAyH;AAC5G,QAAA,qBAAqB,GAAwB;IACxD,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,eAAe;CACtD,CAAC"}
@@ -12,6 +12,7 @@ export type ManualNode = {
12
12
  rule?: string;
13
13
  errorCodes?: string[];
14
14
  generic?: boolean;
15
+ tags?: string[];
15
16
  author?: DesignAuthor;
16
17
  note?: string;
17
18
  };
@@ -29,6 +30,7 @@ export type NodePatch = {
29
30
  label: string;
30
31
  subdomain: string;
31
32
  resourceKey: string;
33
+ tags: string[];
32
34
  }>;
33
35
  note?: string;
34
36
  };
@@ -61,6 +63,21 @@ export type BlueprintOverrides = {
61
63
  suppress?: Suppression[];
62
64
  };
63
65
  export declare function emptyOverrides(): BlueprintOverrides;
66
+ /**
67
+ * BP-279 E2: a tag in the overrides layer meets the same rules as a design-written tag. On load the layer is judged
68
+ * by `checkOverridesTags` (a malformed name or a non-list refuses with the design's own code, TAG_MALFORMED) and
69
+ * carried through `normaliseOverridesTags` (every name normalised, sorted, each once), so a hand-written or
70
+ * reclassified entry never passes a raw tag through to the merge.
71
+ */
72
+ export type OverridesTagIssue = {
73
+ code: 'TAG_MALFORMED';
74
+ path: string;
75
+ message: string;
76
+ };
77
+ /** Every tag the overrides layer carries that fails the tag-name rule, by path; empty when the layer is well-formed. */
78
+ export declare function checkOverridesTags(overrides: BlueprintOverrides): OverridesTagIssue[];
79
+ /** The overrides layer with every tag list as it is stored: normalised, sorted, each name once. Call after `checkOverridesTags`. */
80
+ export declare function normaliseOverridesTags(overrides: BlueprintOverrides): BlueprintOverrides;
64
81
  export type OverridesReadFailure = {
65
82
  ok: false;
66
83
  reason: 'not-a-document';
@@ -68,6 +85,10 @@ export type OverridesReadFailure = {
68
85
  ok: false;
69
86
  reason: 'wrong-version';
70
87
  observed: unknown;
88
+ } | {
89
+ ok: false;
90
+ reason: 'tag-malformed';
91
+ issues: OverridesTagIssue[];
71
92
  };
72
93
  export type OverridesRead = {
73
94
  ok: true;
@@ -1 +1 @@
1
- {"version":3,"file":"overrides.d.ts","sourceRoot":"","sources":["../../src/overrides.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEzD,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC;AAEvC,eAAO,MAAM,wBAAwB,IAAI,CAAC;AAE1C,eAAO,MAAM,4BAA4B,8BAA8B,CAAC;AAExE,MAAM,MAAM,UAAU,GAAG;IACvB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,QAAQ,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,QAAQ,CAAC;IACf,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,OAAO,CAAC;QACX,KAAK,EAAE,MAAM,CAAC;QACd,SAAS,EAAE,MAAM,CAAC;QAClB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC,CAAC;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,WAAW,GACnB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAC3C;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,QAAQ,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAC7E;IACE,IAAI,EAAE,iBAAiB,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,QAAQ,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEN,MAAM,MAAM,kBAAkB,GAAG;IAC/B,aAAa,EAAE,sBAAsB,CAAC;IACtC,GAAG,CAAC,EAAE;QACJ,KAAK,CAAC,EAAE,UAAU,EAAE,CAAC;QACrB,KAAK,CAAC,EAAE,UAAU,EAAE,CAAC;KACtB,CAAC;IACF,KAAK,CAAC,EAAE;QACN,KAAK,CAAC,EAAE,SAAS,EAAE,CAAC;KACrB,CAAC;IACF,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAC;CAC1B,CAAC;AAEF,wBAAgB,cAAc,IAAI,kBAAkB,CAEnD;AAED,MAAM,MAAM,oBAAoB,GAC5B;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,gBAAgB,CAAA;CAAE,GACvC;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,eAAe,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAA;CAAE,CAAC;AAE9D,MAAM,MAAM,aAAa,GAAG;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,SAAS,EAAE,kBAAkB,CAAA;CAAE,GAAG,oBAAoB,CAAC;AAE/F,wBAAgB,aAAa,CAAE,MAAM,EAAE,OAAO,GAAI,aAAa,CAO9D"}
1
+ {"version":3,"file":"overrides.d.ts","sourceRoot":"","sources":["../../src/overrides.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAGzD,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC;AAEvC,eAAO,MAAM,wBAAwB,IAAI,CAAC;AAE1C,eAAO,MAAM,4BAA4B,8BAA8B,CAAC;AAExE,MAAM,MAAM,UAAU,GAAG;IACvB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,QAAQ,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,QAAQ,CAAC;IACf,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,OAAO,CAAC;QACX,KAAK,EAAE,MAAM,CAAC;QACd,SAAS,EAAE,MAAM,CAAC;QAClB,WAAW,EAAE,MAAM,CAAC;QACpB,IAAI,EAAE,MAAM,EAAE,CAAC;KAChB,CAAC,CAAC;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,WAAW,GACnB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAC3C;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,QAAQ,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAC7E;IACE,IAAI,EAAE,iBAAiB,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,QAAQ,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEN,MAAM,MAAM,kBAAkB,GAAG;IAC/B,aAAa,EAAE,sBAAsB,CAAC;IACtC,GAAG,CAAC,EAAE;QACJ,KAAK,CAAC,EAAE,UAAU,EAAE,CAAC;QACrB,KAAK,CAAC,EAAE,UAAU,EAAE,CAAC;KACtB,CAAC;IACF,KAAK,CAAC,EAAE;QACN,KAAK,CAAC,EAAE,SAAS,EAAE,CAAC;KACrB,CAAC;IACF,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAC;CAC1B,CAAC;AAEF,wBAAgB,cAAc,IAAI,kBAAkB,CAEnD;AAED;;;;;GAKG;AACH,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EAAE,eAAe,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAqBF,wHAAwH;AACxH,wBAAgB,kBAAkB,CAAE,SAAS,EAAE,kBAAkB,GAAI,iBAAiB,EAAE,CAWvF;AAED,oIAAoI;AACpI,wBAAgB,sBAAsB,CAAE,SAAS,EAAE,kBAAkB,GAAI,kBAAkB,CAc1F;AAED,MAAM,MAAM,oBAAoB,GAC5B;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,gBAAgB,CAAA;CAAE,GACvC;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,eAAe,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAA;CAAE,GACzD;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,eAAe,CAAC;IAAC,MAAM,EAAE,iBAAiB,EAAE,CAAA;CAAE,CAAC;AAExE,MAAM,MAAM,aAAa,GAAG;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,SAAS,EAAE,kBAAkB,CAAA;CAAE,GAAG,oBAAoB,CAAC;AAE/F,wBAAgB,aAAa,CAAE,MAAM,EAAE,OAAO,GAAI,aAAa,CAS9D"}
@@ -2,12 +2,61 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.BLUEPRINT_OVERRIDES_FILENAME = exports.OVERRIDES_SCHEMA_VERSION = void 0;
4
4
  exports.emptyOverrides = emptyOverrides;
5
+ exports.checkOverridesTags = checkOverridesTags;
6
+ exports.normaliseOverridesTags = normaliseOverridesTags;
5
7
  exports.readOverrides = readOverrides;
8
+ const tags_js_1 = require("./tags.js");
6
9
  exports.OVERRIDES_SCHEMA_VERSION = 1;
7
10
  exports.BLUEPRINT_OVERRIDES_FILENAME = '.blueprint.overrides.json';
8
11
  function emptyOverrides() {
9
12
  return { schemaVersion: 1 };
10
13
  }
14
+ function checkEntryTags(entry, path, issues) {
15
+ const { tags } = entry;
16
+ if (tags === undefined)
17
+ return;
18
+ if (!Array.isArray(tags)) {
19
+ issues.push({ code: 'TAG_MALFORMED', path, message: `${path} must be a list of tag names` });
20
+ return;
21
+ }
22
+ for (const tag of tags) {
23
+ if ((0, tags_js_1.isTagName)(tag))
24
+ continue;
25
+ issues.push({
26
+ code: 'TAG_MALFORMED',
27
+ path,
28
+ message: `${path} holds ${JSON.stringify(tag)}, which is not a tag name: ${tags_js_1.TAG_NAME_RULE}`
29
+ });
30
+ }
31
+ }
32
+ /** Every tag the overrides layer carries that fails the tag-name rule, by path; empty when the layer is well-formed. */
33
+ function checkOverridesTags(overrides) {
34
+ const issues = [];
35
+ const nodes = overrides.add?.nodes;
36
+ if (Array.isArray(nodes)) {
37
+ nodes.forEach((node, index) => checkEntryTags(node ?? {}, `add.nodes[${index}].tags`, issues));
38
+ }
39
+ const patches = overrides.patch?.nodes;
40
+ if (Array.isArray(patches)) {
41
+ patches.forEach((patch, index) => checkEntryTags(patch?.set ?? {}, `patch.nodes[${index}].set.tags`, issues));
42
+ }
43
+ return issues;
44
+ }
45
+ /** The overrides layer with every tag list as it is stored: normalised, sorted, each name once. Call after `checkOverridesTags`. */
46
+ function normaliseOverridesTags(overrides) {
47
+ const nodes = overrides.add?.nodes;
48
+ const patches = overrides.patch?.nodes;
49
+ const withTags = (entry) => (Array.isArray(entry.tags) ? { ...entry, tags: (0, tags_js_1.normaliseTags)(entry.tags) } : entry);
50
+ return {
51
+ ...overrides,
52
+ ...(Array.isArray(nodes)
53
+ ? { add: { ...overrides.add, nodes: nodes.map(withTags) } }
54
+ : {}),
55
+ ...(Array.isArray(patches)
56
+ ? { patch: { ...overrides.patch, nodes: patches.map(patch => ({ ...patch, set: withTags(patch.set ?? {}) })) } }
57
+ : {})
58
+ };
59
+ }
11
60
  function readOverrides(parsed) {
12
61
  if (parsed === null || typeof parsed !== 'object' || Array.isArray(parsed)) {
13
62
  return { ok: false, reason: 'not-a-document' };
@@ -15,6 +64,9 @@ function readOverrides(parsed) {
15
64
  const observed = parsed.schemaVersion;
16
65
  if (observed !== exports.OVERRIDES_SCHEMA_VERSION)
17
66
  return { ok: false, reason: 'wrong-version', observed };
18
- return { ok: true, overrides: parsed };
67
+ const issues = checkOverridesTags(parsed);
68
+ if (issues.length > 0)
69
+ return { ok: false, reason: 'tag-malformed', issues };
70
+ return { ok: true, overrides: normaliseOverridesTags(parsed) };
19
71
  }
20
72
  //# sourceMappingURL=overrides.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"overrides.js","sourceRoot":"","sources":["../../src/overrides.ts"],"names":[],"mappings":";;;AAgEA,wCAEC;AAQD,sCAOC;AA5EY,QAAA,wBAAwB,GAAG,CAAC,CAAC;AAE7B,QAAA,4BAA4B,GAAG,2BAA2B,CAAC;AAyDxE,SAAgB,cAAc;IAC5B,OAAO,EAAE,aAAa,EAAE,CAAC,EAAE,CAAC;AAC9B,CAAC;AAQD,SAAgB,aAAa,CAAE,MAAe;IAC5C,IAAK,MAAM,KAAK,IAAI,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAE,MAAM,CAAE,EAAG,CAAC;QAC/E,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAC;IACjD,CAAC;IACD,MAAM,QAAQ,GAAK,MAAuC,CAAC,aAAa,CAAC;IACzE,IAAK,QAAQ,KAAK,gCAAwB;QAAG,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,QAAQ,EAAE,CAAC;IACrG,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,MAA4B,EAAE,CAAC;AAC/D,CAAC"}
1
+ {"version":3,"file":"overrides.js","sourceRoot":"","sources":["../../src/overrides.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import type { EdgeKind } from './edges.js';
2
2
  import { type DesignFile } from './design.js';
3
3
  import { type BlueprintGraph } from './graph.js';
4
- import type { DesignAuthor } from './nodes.js';
4
+ import type { DataField, DesignAuthor } from './nodes.js';
5
5
  export type VerbOutcome = 'satisfied' | 'stale' | 'pending';
6
6
  export type VerbSubject = {
7
7
  kind: 'node';
@@ -13,6 +13,15 @@ export type VerbSubject = {
13
13
  edgeKind: EdgeKind;
14
14
  };
15
15
  export declare function verbSubjectKey(subject: VerbSubject): string;
16
+ /**
17
+ * BP-270 D17: how a satisfied verdict's designed data shape stood against the extracted node's. `verified` is false when
18
+ * the shape counted by existence alone (the node carries no shape, its shape was unread, or either side is a `sameAs`);
19
+ * `extra` lists, by path (`traceId`, `address.zip`), the code fields the design does not name, which never fail it (F15=B).
20
+ */
21
+ export type ShapeCheck = {
22
+ verified: boolean;
23
+ extra: string[];
24
+ };
16
25
  export type VerbVerdict = {
17
26
  path: string;
18
27
  verb: 'propose' | 'modify' | 'remove';
@@ -20,6 +29,8 @@ export type VerbVerdict = {
20
29
  outcome: VerbOutcome;
21
30
  subject: VerbSubject;
22
31
  reason: string;
32
+ /** Present on a satisfied propose or modify whose design carries a data shape. */
33
+ shape?: ShapeCheck;
23
34
  };
24
35
  export type RealityCheck = {
25
36
  verdicts: VerbVerdict[];
@@ -28,6 +39,13 @@ export type RealityCheck = {
28
39
  note: string;
29
40
  };
30
41
  export declare function realityMovedNote(satisfied: number, stale: number, degraded?: number): string;
42
+ /**
43
+ * BP-270 D17: why the extracted field `extracted` (undefined: none of that name) does not carry the designed one, by the
44
+ * rule {@link checkDesignAgainstReality} judges a field by; empty when it does. Extra code fields inside it are allowed,
45
+ * as there. The scaffolder (BP-270 D8) calls a designed field changed by this rule, so a field it owes as changed is one
46
+ * the reality check holds pending. (A removed field it also owes is not held pending: extra code fields are allowed.)
47
+ */
48
+ export declare function designedFieldMismatches(designed: DataField, extracted: DataField | undefined): string[];
31
49
  export declare function checkDesignAgainstReality(reality: BlueprintGraph, design: DesignFile | undefined): RealityCheck;
32
50
  export type DecorateSatisfiedInput = {
33
51
  reality: BlueprintGraph;
@@ -1 +1 @@
1
- {"version":3,"file":"reality-check.d.ts","sourceRoot":"","sources":["../../src/reality-check.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAiB,MAAM,YAAY,CAAC;AAC1D,OAAO,EACL,KAAK,UAAU,EAOhB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,KAAK,cAAc,EAAgE,MAAM,YAAY,CAAC;AAC/G,OAAO,KAAK,EAAE,YAAY,EAAiC,MAAM,YAAY,CAAC;AAE9E,MAAM,MAAM,WAAW,GACnB,WAAW,GACX,OAAO,GACP,SAAS,CAAC;AAEd,MAAM,MAAM,WAAW,GACnB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAClC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,QAAQ,CAAA;CAAE,CAAC;AAEnE,wBAAgB,cAAc,CAAE,OAAO,EAAE,WAAW,GAAI,MAAM,CAI7D;AAED,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAAC;IACtC,MAAM,EAAE,YAAY,CAAC;IACrB,OAAO,EAAE,WAAW,CAAC;IACrB,OAAO,EAAE,WAAW,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,SAAS,EAAE,WAAW,EAAE,CAAC;IACzB,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,wBAAgB,gBAAgB,CAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,SAAI,GAAI,MAAM,CAGzF;AAmMD,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,cAAc,EACvB,MAAM,EAAE,UAAU,GAAG,SAAS,GAC7B,YAAY,CA4Dd;AAED,MAAM,MAAM,sBAAsB,GAAG;IACnC,OAAO,EAAE,cAAc,CAAC;IACxB,MAAM,EAAE,cAAc,CAAC;IACvB,MAAM,EAAE,UAAU,GAAG,SAAS,CAAC;CAChC,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,KAAK,EAAE,cAAc,CAAC;IACtB,KAAK,EAAE,YAAY,CAAC;CACrB,CAAC;AAEF,wBAAgB,iBAAiB,CAAE,KAAK,EAAE,sBAAsB,GAAI,uBAAuB,CA6B1F"}
1
+ {"version":3,"file":"reality-check.d.ts","sourceRoot":"","sources":["../../src/reality-check.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAiB,MAAM,YAAY,CAAC;AAC1D,OAAO,EACL,KAAK,UAAU,EAOhB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,KAAK,cAAc,EAAgE,MAAM,YAAY,CAAC;AAC/G,OAAO,KAAK,EAAE,SAAS,EAAuB,YAAY,EAAiC,MAAM,YAAY,CAAC;AAE9G,MAAM,MAAM,WAAW,GACnB,WAAW,GACX,OAAO,GACP,SAAS,CAAC;AAEd,MAAM,MAAM,WAAW,GACnB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAClC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,QAAQ,CAAA;CAAE,CAAC;AAEnE,wBAAgB,cAAc,CAAE,OAAO,EAAE,WAAW,GAAI,MAAM,CAI7D;AAED;;;;GAIG;AACH,MAAM,MAAM,UAAU,GAAG;IACvB,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAAC;IACtC,MAAM,EAAE,YAAY,CAAC;IACrB,OAAO,EAAE,WAAW,CAAC;IACrB,OAAO,EAAE,WAAW,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,kFAAkF;IAClF,KAAK,CAAC,EAAE,UAAU,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,SAAS,EAAE,WAAW,EAAE,CAAC;IACzB,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,wBAAgB,gBAAgB,CAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,SAAI,GAAI,MAAM,CAGzF;AA+GD;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,GAAG,SAAS,GAAI,MAAM,EAAE,CAEzG;AA+LD,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,cAAc,EACvB,MAAM,EAAE,UAAU,GAAG,SAAS,GAC7B,YAAY,CA4Dd;AAED,MAAM,MAAM,sBAAsB,GAAG;IACnC,OAAO,EAAE,cAAc,CAAC;IACxB,MAAM,EAAE,cAAc,CAAC;IACvB,MAAM,EAAE,UAAU,GAAG,SAAS,CAAC;CAChC,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,KAAK,EAAE,cAAc,CAAC;IACtB,KAAK,EAAE,YAAY,CAAC;CACrB,CAAC;AAEF,wBAAgB,iBAAiB,CAAE,KAAK,EAAE,sBAAsB,GAAI,uBAAuB,CA6B1F"}
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.verbSubjectKey = verbSubjectKey;
4
4
  exports.realityMovedNote = realityMovedNote;
5
+ exports.designedFieldMismatches = designedFieldMismatches;
5
6
  exports.checkDesignAgainstReality = checkDesignAgainstReality;
6
7
  exports.decorateSatisfied = decorateSatisfied;
7
8
  const design_js_1 = require("./design.js");
@@ -47,6 +48,91 @@ function routesOf(queries) {
47
48
  function codesOf(errorCodes) {
48
49
  return [...new Set(errorCodes ?? [])].sort().join('\u0000');
49
50
  }
51
+ /**
52
+ * BP-270 D17: a designed type that leaves the code's type open. `ref` and `schema` match by name only at every depth,
53
+ * since the extractor reads a named schema inline; `any` matches whatever the code narrows it to (F2).
54
+ */
55
+ const leavesTypeOpen = (type) => type.kind === 'any' || type.kind === 'ref' || type.kind === 'schema';
56
+ /**
57
+ * BP-270 D17 (ADR-127 decision 8): why an extracted type does not carry a designed one, recursively. List items and
58
+ * map values recurse; an object's fields are compared as a shape of their own (ADR-127 decision 4); enum values must
59
+ * all be present in code, which may add more; a string format is compared only when the design sets it. `subject`
60
+ * names what a kind mismatch is about: the field's path, or its list items or map values.
61
+ */
62
+ function typeMismatches(path, subject, designed, extracted, extra) {
63
+ if (leavesTypeOpen(designed))
64
+ return [];
65
+ if (designed.kind === 'list' && extracted?.kind === 'list') {
66
+ return typeMismatches(path, `${subject} items`, designed.items, extracted.items, extra);
67
+ }
68
+ if (designed.kind === 'map' && extracted?.kind === 'map') {
69
+ return typeMismatches(path, `${subject} values`, designed.values, extracted.values, extra);
70
+ }
71
+ if (designed.kind === 'object' && extracted?.kind === 'object')
72
+ return fieldsMismatches(`${path}.`, designed.fields, extracted.fields, extra);
73
+ if (designed.kind === 'enum' && extracted?.kind === 'enum') {
74
+ const lacking = designed.values.filter(value => !extracted.values.includes(value));
75
+ return lacking.length > 0 ? [`${path} lacks ${lacking.join(', ')}`] : [];
76
+ }
77
+ if (designed.kind === 'string' && extracted?.kind === 'string') {
78
+ return designed.format !== undefined && designed.format !== extracted.format
79
+ ? [`${path} has format ${extracted.format ?? 'none'}, designed ${designed.format}`]
80
+ : [];
81
+ }
82
+ return designed.kind === extracted?.kind ? [] : [`${subject} ${subject === path ? 'is' : 'are'} ${extracted?.kind ?? 'untyped'}, designed ${designed.kind}`];
83
+ }
84
+ /** BP-270 D17: an untyped, `ref` or `schema` designed field matches by name only; any other compares its flags and type. */
85
+ function fieldMismatches(path, designed, extracted, extra) {
86
+ if (extracted === undefined)
87
+ return [`${path} is missing`];
88
+ if (designed.type === undefined || designed.type.kind === 'ref' || designed.type.kind === 'schema')
89
+ return [];
90
+ const flags = [];
91
+ if ((designed.optional ?? false) !== (extracted.optional ?? false)) {
92
+ flags.push(`${path} is ${extracted.optional ? 'optional' : 'required'}, designed ${designed.optional ? 'optional' : 'required'}`);
93
+ }
94
+ if ((designed.nullable ?? false) !== (extracted.nullable ?? false)) {
95
+ flags.push(`${path} is ${extracted.nullable ? 'nullable' : 'not nullable'}, designed ${designed.nullable ? 'nullable' : 'not nullable'}`);
96
+ }
97
+ return [...typeMismatches(path, path, designed.type, extracted.type, extra), ...flags];
98
+ }
99
+ /**
100
+ * BP-270 D17: why the extracted field `extracted` (undefined: none of that name) does not carry the designed one, by the
101
+ * rule {@link checkDesignAgainstReality} judges a field by; empty when it does. Extra code fields inside it are allowed,
102
+ * as there. The scaffolder (BP-270 D8) calls a designed field changed by this rule, so a field it owes as changed is one
103
+ * the reality check holds pending. (A removed field it also owes is not held pending: extra code fields are allowed.)
104
+ */
105
+ function designedFieldMismatches(designed, extracted) {
106
+ return fieldMismatches(designed.name, designed, extracted, []);
107
+ }
108
+ /**
109
+ * BP-270 D17 (F15=B): the designed fields the extracted ones do not carry, each named by its path (`address.street`,
110
+ * ADR-127 decision 6). Extra code fields at this level are pushed onto `extra` by path, never failed on; an object's
111
+ * `open` flag is not compared, since extras are allowed either way.
112
+ */
113
+ function fieldsMismatches(prefix, designed, extracted, extra) {
114
+ const byName = new Map(extracted.map(field => [field.name, field]));
115
+ const named = new Set(designed.map(field => field.name));
116
+ extra.push(...extracted.map(field => field.name).filter(name => !named.has(name)).map(name => `${prefix}${name}`));
117
+ return designed.flatMap(field => fieldMismatches(`${prefix}${field.name}`, field, byName.get(field.name), extra));
118
+ }
119
+ /**
120
+ * BP-270 D17 (F15=B): whether the extracted node carries every designed field with its type, compared recursively,
121
+ * and its optional and nullable flags. Extra code fields, at any depth, are listed, never failed on. A node with no
122
+ * shape, an unread one, or a `sameAs` on either side counts by existence and is flagged shape not verified.
123
+ */
124
+ function judgeShape(node, designed) {
125
+ const extracted = node.dataShape;
126
+ if (!('fields' in designed) || extracted === undefined || !('fields' in extracted) || node.meta?.dataShapeUnread !== undefined) {
127
+ const why = node.meta?.dataShapeUnread ?? ('fields' in designed ? 'the extracted node carries no field list' : 'the designed shape repeats another node\'s');
128
+ return { met: true, check: { verified: false, extra: [] }, note: `; shape not verified (${why})` };
129
+ }
130
+ const extra = [];
131
+ const mismatches = fieldsMismatches('', designed.fields, extracted.fields, extra);
132
+ if (mismatches.length > 0)
133
+ return { met: false, reason: mismatches.join('; ') };
134
+ return { met: true, check: { verified: true, extra }, note: extra.length > 0 ? `; extra code fields: ${extra.join(', ')}` : '' };
135
+ }
50
136
  function exhibitsFields(node, set) {
51
137
  if (set.resourceKey !== undefined && node.resourceKey !== set.resourceKey)
52
138
  return false;
@@ -58,6 +144,11 @@ function exhibitsFields(node, set) {
58
144
  return false;
59
145
  if (set.generic !== undefined && (node.generic ?? false) !== set.generic)
60
146
  return false;
147
+ // BP-279: tags compare as sets, so a modify setting keyed stays pending until the extracted node carries it.
148
+ if (set.tags !== undefined && codesOf(node.tags) !== codesOf(set.tags))
149
+ return false;
150
+ if (set.dataShape !== undefined && !judgeShape(node, set.dataShape).met)
151
+ return false;
61
152
  return true;
62
153
  }
63
154
  function modifyTargetIdentity(entry, reality) {
@@ -94,11 +185,20 @@ function typeWordBuilds(proposedNodes, reality) {
94
185
  }
95
186
  function judgeProposedNode(proposed, reality, identity, builds) {
96
187
  const built = builds.get(identity);
97
- return decide(reality.byIdentity.has(identity)
98
- ? { outcome: 'satisfied', reason: `${identity} now exists in the extracted graph` }
188
+ const node = reality.byIdentity.get(identity) ?? (built === undefined ? undefined : nodeAt(reality, built));
189
+ const shape = node === undefined || proposed.dataShape === undefined ? undefined : judgeShape(node, proposed.dataShape);
190
+ const exists = reality.byIdentity.has(identity)
191
+ ? `${identity} now exists in the extracted graph`
99
192
  : built !== undefined
100
- ? { outcome: 'satisfied', reason: `${identity} now exists in the extracted graph as ${built}, its code name under the repository's type words` }
101
- : undefined, undefined, { outcome: 'pending', reason: `${proposed.label} has not been built yet` });
193
+ ? `${identity} now exists in the extracted graph as ${built}, its code name under the repository's type words`
194
+ : undefined;
195
+ return decide(exists !== undefined && shape?.met !== false
196
+ ? shape === undefined
197
+ ? { outcome: 'satisfied', reason: exists }
198
+ : { outcome: 'satisfied', reason: `${exists}${shape.note}`, shape: shape.check }
199
+ : undefined, undefined, shape?.met === false
200
+ ? { outcome: 'pending', reason: `${proposed.label} is built without its designed shape: ${shape.reason}` }
201
+ : { outcome: 'pending', reason: `${proposed.label} has not been built yet` });
102
202
  }
103
203
  function exhibitsScope(proposed, reality, key) {
104
204
  const declared = proposed.handlers;
@@ -131,13 +231,20 @@ function judgeModifyEntry(entry, reality, proposedIdentities, identity) {
131
231
  // re-extraction never confirms it: it stays pending until the design closes, never satisfied by the node existing.
132
232
  const built = target !== undefined && !(0, design_js_1.isNoteOnlyModify)(entry) && exhibitsFields(target, entry.set ?? {});
133
233
  const resolves = nodeAt(reality, entry.id) !== undefined || proposedIdentities.has(entry.id);
234
+ const designedShape = entry.set?.dataShape;
235
+ const shape = target === undefined || designedShape === undefined ? undefined : judgeShape(target, designedShape);
236
+ const asked = `${identity} now exists in the extracted graph as asked`;
134
237
  return decide(built
135
- ? { outcome: 'satisfied', reason: `${identity} now exists in the extracted graph as asked` }
238
+ ? shape?.met === true
239
+ ? { outcome: 'satisfied', reason: `${asked}${shape.note}`, shape: shape.check }
240
+ : { outcome: 'satisfied', reason: asked }
136
241
  : undefined, !resolves
137
242
  ? { outcome: 'stale', reason: `modify targets ${entry.id}, which reality no longer has` }
138
243
  : undefined, (0, design_js_1.isNoteOnlyModify)(entry)
139
244
  ? { outcome: 'pending', reason: `${entry.id} carries a change the extracted graph cannot show; it stays pending` }
140
- : { outcome: 'pending', reason: `${entry.id} has not been changed yet` });
245
+ : shape?.met === false
246
+ ? { outcome: 'pending', reason: `${entry.id} has not been changed yet: ${shape.reason}` }
247
+ : { outcome: 'pending', reason: `${entry.id} has not been changed yet` });
141
248
  }
142
249
  function judgeRemoveEntry(entry, reality, proposedIdentities, proposedEdgeKeys) {
143
250
  const [present, subject] = entry.kind === 'node'