@bett3r-dev/blueprint-schema 1.7.0 → 1.9.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 (206) hide show
  1. package/CHANGELOG.md +56 -0
  2. package/build/cjs/apply-design.d.ts +1 -1
  3. package/build/cjs/apply-design.d.ts.map +1 -1
  4. package/build/cjs/apply-design.js +18 -5
  5. package/build/cjs/apply-design.js.map +1 -1
  6. package/build/cjs/apply-overrides.d.ts.map +1 -1
  7. package/build/cjs/apply-overrides.js +20 -2
  8. package/build/cjs/apply-overrides.js.map +1 -1
  9. package/build/cjs/card-holds.d.ts +4 -0
  10. package/build/cjs/card-holds.d.ts.map +1 -0
  11. package/build/cjs/card-holds.js +51 -0
  12. package/build/cjs/card-holds.js.map +1 -0
  13. package/build/cjs/channel-link.d.ts +11 -0
  14. package/build/cjs/channel-link.d.ts.map +1 -0
  15. package/build/cjs/channel-link.js +39 -0
  16. package/build/cjs/channel-link.js.map +1 -0
  17. package/build/cjs/coverage-links.d.ts +1 -1
  18. package/build/cjs/coverage-links.d.ts.map +1 -1
  19. package/build/cjs/coverage-links.js +10 -3
  20. package/build/cjs/coverage-links.js.map +1 -1
  21. package/build/cjs/design.d.ts +38 -3
  22. package/build/cjs/design.d.ts.map +1 -1
  23. package/build/cjs/design.js +21 -5
  24. package/build/cjs/design.js.map +1 -1
  25. package/build/cjs/diagnostics.d.ts +12 -0
  26. package/build/cjs/diagnostics.d.ts.map +1 -1
  27. package/build/cjs/diagnostics.js.map +1 -1
  28. package/build/cjs/edge-endpoints.d.ts +33 -0
  29. package/build/cjs/edge-endpoints.d.ts.map +1 -0
  30. package/build/cjs/edge-endpoints.js +83 -0
  31. package/build/cjs/edge-endpoints.js.map +1 -0
  32. package/build/cjs/effective-design.d.ts +21 -0
  33. package/build/cjs/effective-design.d.ts.map +1 -0
  34. package/build/cjs/effective-design.js +177 -0
  35. package/build/cjs/effective-design.js.map +1 -0
  36. package/build/cjs/fork-scenarios.d.ts +3 -1
  37. package/build/cjs/fork-scenarios.d.ts.map +1 -1
  38. package/build/cjs/fork-scenarios.js +20 -5
  39. package/build/cjs/fork-scenarios.js.map +1 -1
  40. package/build/cjs/graph.d.ts +25 -0
  41. package/build/cjs/graph.d.ts.map +1 -1
  42. package/build/cjs/graph.js +36 -0
  43. package/build/cjs/graph.js.map +1 -1
  44. package/build/cjs/index.d.ts +10 -0
  45. package/build/cjs/index.d.ts.map +1 -1
  46. package/build/cjs/index.js +10 -0
  47. package/build/cjs/index.js.map +1 -1
  48. package/build/cjs/map-review-view.d.ts +29 -0
  49. package/build/cjs/map-review-view.d.ts.map +1 -0
  50. package/build/cjs/map-review-view.js +64 -0
  51. package/build/cjs/map-review-view.js.map +1 -0
  52. package/build/cjs/map-structure.d.ts +26 -2
  53. package/build/cjs/map-structure.d.ts.map +1 -1
  54. package/build/cjs/map-structure.js.map +1 -1
  55. package/build/cjs/map-vocabulary.d.ts +8 -1
  56. package/build/cjs/map-vocabulary.d.ts.map +1 -1
  57. package/build/cjs/map-vocabulary.js +15 -2
  58. package/build/cjs/map-vocabulary.js.map +1 -1
  59. package/build/cjs/nodes.d.ts +2 -0
  60. package/build/cjs/nodes.d.ts.map +1 -1
  61. package/build/cjs/overrides.d.ts +21 -0
  62. package/build/cjs/overrides.d.ts.map +1 -1
  63. package/build/cjs/overrides.js +53 -1
  64. package/build/cjs/overrides.js.map +1 -1
  65. package/build/cjs/reachability.js +1 -1
  66. package/build/cjs/reachability.js.map +1 -1
  67. package/build/cjs/reality-check.d.ts +1 -1
  68. package/build/cjs/reality-check.d.ts.map +1 -1
  69. package/build/cjs/reality-check.js +46 -9
  70. package/build/cjs/reality-check.js.map +1 -1
  71. package/build/cjs/scenario-test-level.d.ts +25 -0
  72. package/build/cjs/scenario-test-level.d.ts.map +1 -0
  73. package/build/cjs/scenario-test-level.js +43 -0
  74. package/build/cjs/scenario-test-level.js.map +1 -0
  75. package/build/cjs/session-phase.d.ts +80 -0
  76. package/build/cjs/session-phase.d.ts.map +1 -0
  77. package/build/cjs/session-phase.js +97 -0
  78. package/build/cjs/session-phase.js.map +1 -0
  79. package/build/cjs/session.d.ts +21 -2
  80. package/build/cjs/session.d.ts.map +1 -1
  81. package/build/cjs/session.js +3 -2
  82. package/build/cjs/session.js.map +1 -1
  83. package/build/cjs/spec.d.ts +3 -0
  84. package/build/cjs/spec.d.ts.map +1 -1
  85. package/build/cjs/spec.js +85 -17
  86. package/build/cjs/spec.js.map +1 -1
  87. package/build/cjs/step-elements.d.ts +27 -0
  88. package/build/cjs/step-elements.d.ts.map +1 -0
  89. package/build/cjs/step-elements.js +28 -0
  90. package/build/cjs/step-elements.js.map +1 -0
  91. package/build/cjs/tags.d.ts +26 -0
  92. package/build/cjs/tags.d.ts.map +1 -0
  93. package/build/cjs/tags.js +28 -0
  94. package/build/cjs/tags.js.map +1 -0
  95. package/build/cjs/unproduced-events.d.ts +10 -0
  96. package/build/cjs/unproduced-events.d.ts.map +1 -0
  97. package/build/cjs/unproduced-events.js +37 -0
  98. package/build/cjs/unproduced-events.js.map +1 -0
  99. package/build/cjs/validate-design.d.ts +1 -1
  100. package/build/cjs/validate-design.d.ts.map +1 -1
  101. package/build/cjs/validate-design.js +74 -4
  102. package/build/cjs/validate-design.js.map +1 -1
  103. package/build/esm/apply-design.d.ts +1 -1
  104. package/build/esm/apply-design.d.ts.map +1 -1
  105. package/build/esm/apply-design.js +18 -5
  106. package/build/esm/apply-design.js.map +1 -1
  107. package/build/esm/apply-overrides.d.ts.map +1 -1
  108. package/build/esm/apply-overrides.js +20 -2
  109. package/build/esm/apply-overrides.js.map +1 -1
  110. package/build/esm/card-holds.d.ts +4 -0
  111. package/build/esm/card-holds.d.ts.map +1 -0
  112. package/build/esm/card-holds.js +48 -0
  113. package/build/esm/card-holds.js.map +1 -0
  114. package/build/esm/channel-link.d.ts +11 -0
  115. package/build/esm/channel-link.d.ts.map +1 -0
  116. package/build/esm/channel-link.js +34 -0
  117. package/build/esm/channel-link.js.map +1 -0
  118. package/build/esm/coverage-links.d.ts +1 -1
  119. package/build/esm/coverage-links.d.ts.map +1 -1
  120. package/build/esm/coverage-links.js +10 -3
  121. package/build/esm/coverage-links.js.map +1 -1
  122. package/build/esm/design.d.ts +38 -3
  123. package/build/esm/design.d.ts.map +1 -1
  124. package/build/esm/design.js +18 -4
  125. package/build/esm/design.js.map +1 -1
  126. package/build/esm/diagnostics.d.ts +12 -0
  127. package/build/esm/diagnostics.d.ts.map +1 -1
  128. package/build/esm/diagnostics.js.map +1 -1
  129. package/build/esm/edge-endpoints.d.ts +33 -0
  130. package/build/esm/edge-endpoints.d.ts.map +1 -0
  131. package/build/esm/edge-endpoints.js +77 -0
  132. package/build/esm/edge-endpoints.js.map +1 -0
  133. package/build/esm/effective-design.d.ts +21 -0
  134. package/build/esm/effective-design.d.ts.map +1 -0
  135. package/build/esm/effective-design.js +174 -0
  136. package/build/esm/effective-design.js.map +1 -0
  137. package/build/esm/fork-scenarios.d.ts +3 -1
  138. package/build/esm/fork-scenarios.d.ts.map +1 -1
  139. package/build/esm/fork-scenarios.js +20 -5
  140. package/build/esm/fork-scenarios.js.map +1 -1
  141. package/build/esm/graph.d.ts +25 -0
  142. package/build/esm/graph.d.ts.map +1 -1
  143. package/build/esm/graph.js +33 -0
  144. package/build/esm/graph.js.map +1 -1
  145. package/build/esm/index.d.ts +10 -0
  146. package/build/esm/index.d.ts.map +1 -1
  147. package/build/esm/index.js +10 -0
  148. package/build/esm/index.js.map +1 -1
  149. package/build/esm/map-review-view.d.ts +29 -0
  150. package/build/esm/map-review-view.d.ts.map +1 -0
  151. package/build/esm/map-review-view.js +58 -0
  152. package/build/esm/map-review-view.js.map +1 -0
  153. package/build/esm/map-structure.d.ts +26 -2
  154. package/build/esm/map-structure.d.ts.map +1 -1
  155. package/build/esm/map-structure.js.map +1 -1
  156. package/build/esm/map-vocabulary.d.ts +8 -1
  157. package/build/esm/map-vocabulary.d.ts.map +1 -1
  158. package/build/esm/map-vocabulary.js +13 -1
  159. package/build/esm/map-vocabulary.js.map +1 -1
  160. package/build/esm/nodes.d.ts +2 -0
  161. package/build/esm/nodes.d.ts.map +1 -1
  162. package/build/esm/overrides.d.ts +21 -0
  163. package/build/esm/overrides.d.ts.map +1 -1
  164. package/build/esm/overrides.js +51 -1
  165. package/build/esm/overrides.js.map +1 -1
  166. package/build/esm/reachability.js +1 -1
  167. package/build/esm/reachability.js.map +1 -1
  168. package/build/esm/reality-check.d.ts +1 -1
  169. package/build/esm/reality-check.d.ts.map +1 -1
  170. package/build/esm/reality-check.js +47 -10
  171. package/build/esm/reality-check.js.map +1 -1
  172. package/build/esm/scenario-test-level.d.ts +25 -0
  173. package/build/esm/scenario-test-level.d.ts.map +1 -0
  174. package/build/esm/scenario-test-level.js +37 -0
  175. package/build/esm/scenario-test-level.js.map +1 -0
  176. package/build/esm/session-phase.d.ts +80 -0
  177. package/build/esm/session-phase.d.ts.map +1 -0
  178. package/build/esm/session-phase.js +93 -0
  179. package/build/esm/session-phase.js.map +1 -0
  180. package/build/esm/session.d.ts +21 -2
  181. package/build/esm/session.d.ts.map +1 -1
  182. package/build/esm/session.js +3 -2
  183. package/build/esm/session.js.map +1 -1
  184. package/build/esm/spec.d.ts +3 -0
  185. package/build/esm/spec.d.ts.map +1 -1
  186. package/build/esm/spec.js +88 -20
  187. package/build/esm/spec.js.map +1 -1
  188. package/build/esm/step-elements.d.ts +27 -0
  189. package/build/esm/step-elements.d.ts.map +1 -0
  190. package/build/esm/step-elements.js +21 -0
  191. package/build/esm/step-elements.js.map +1 -0
  192. package/build/esm/tags.d.ts +26 -0
  193. package/build/esm/tags.d.ts.map +1 -0
  194. package/build/esm/tags.js +21 -0
  195. package/build/esm/tags.js.map +1 -0
  196. package/build/esm/unproduced-events.d.ts +10 -0
  197. package/build/esm/unproduced-events.d.ts.map +1 -0
  198. package/build/esm/unproduced-events.js +32 -0
  199. package/build/esm/unproduced-events.js.map +1 -0
  200. package/build/esm/validate-design.d.ts +1 -1
  201. package/build/esm/validate-design.d.ts.map +1 -1
  202. package/build/esm/validate-design.js +74 -4
  203. package/build/esm/validate-design.js.map +1 -1
  204. package/build/tsconfig.tsbuildinfo +1 -1
  205. package/package.json +1 -1
  206. package/schema/map.schema.json +9 -1
@@ -0,0 +1,174 @@
1
+ import { isCommentIdAnchor, joinedNote } from './design.js';
2
+ import { proposedNodeId } from './apply-design.js';
3
+ import { canonicalEndpoint } from './edge-endpoints.js';
4
+ const edgeKey = (edge) => `${edge.from}|${edge.to}|${edge.kind}`;
5
+ // A modify's note folds in beside the proposal's own, so a note-only modify of a proposal is never lost.
6
+ function withSet(node, set, note) {
7
+ const next = { ...node };
8
+ const joined = joinedNote(node.note, note);
9
+ if (joined !== undefined)
10
+ next.note = joined;
11
+ if (set.label !== undefined)
12
+ next.label = set.label;
13
+ if (set.subdomain !== undefined)
14
+ next.subdomain = set.subdomain;
15
+ if (set.resourceKey !== undefined)
16
+ next.resourceKey = set.resourceKey;
17
+ if (set.queries !== undefined)
18
+ next.queries = set.queries;
19
+ if (set.rule !== undefined)
20
+ next.rule = set.rule;
21
+ if (set.errorCodes !== undefined)
22
+ next.errorCodes = [...set.errorCodes];
23
+ if (set.generic !== undefined)
24
+ next.generic = set.generic;
25
+ // BP-279: a modify sets the whole tag list, and [] clears it.
26
+ if (set.tags !== undefined && set.tags.length > 0)
27
+ next.tags = [...set.tags];
28
+ else if (set.tags !== undefined)
29
+ delete next.tags;
30
+ return next;
31
+ }
32
+ function anchorOf(anchor, idOf) {
33
+ if (anchor === null || anchor === undefined || isCommentIdAnchor(anchor))
34
+ return anchor;
35
+ if (typeof anchor === 'string')
36
+ return idOf(anchor);
37
+ return { ...anchor, from: idOf(anchor.from), to: idOf(anchor.to) };
38
+ }
39
+ function kpiOf(kpi, idOf) {
40
+ if (kpi.mode !== 'define' || kpi.definition.source.kind !== 'events')
41
+ return kpi;
42
+ const side = (events) => ({
43
+ ...events, esIds: events.esIds.flatMap(id => idOf(id) ?? [])
44
+ });
45
+ const { numerator, denominator } = kpi.definition.source;
46
+ return {
47
+ ...kpi,
48
+ definition: {
49
+ ...kpi.definition,
50
+ source: { ...kpi.definition.source, numerator: side(numerator), ...(denominator === undefined ? {} : { denominator: side(denominator) }) }
51
+ }
52
+ };
53
+ }
54
+ /** The map with each element id rewritten by `idOf`, and each reference to an element `idOf` drops (undefined) left out. */
55
+ function mapOf(map, idOf) {
56
+ const linked = (entries) => entries.flatMap(entry => {
57
+ const esId = idOf(entry.esId);
58
+ return esId === undefined ? [] : [{ ...entry, esId }];
59
+ });
60
+ return {
61
+ ...map,
62
+ links: linked(map.links),
63
+ coverage: linked(map.coverage),
64
+ observations: map.observations.map(observation => ({ ...observation, kpi: kpiOf(observation.kpi, idOf) })),
65
+ ...(map.review === undefined ? {} : { review: linked(map.review) })
66
+ };
67
+ }
68
+ export function effectiveDesignOf(design, map) {
69
+ const nodes = (design.propose?.nodes ?? []).map(node => ({ ...node }));
70
+ // Each live proposal's current id, to its index in `nodes`; the first proposal of an id is the one applyDesign keeps.
71
+ const live = new Map();
72
+ nodes.forEach((node, index) => {
73
+ const id = proposedNodeId(node);
74
+ if (!live.has(id))
75
+ live.set(id, index);
76
+ });
77
+ const proposedIds = new Set(live.keys());
78
+ const renamed = new Map();
79
+ const resolve = (id) => renamed.get(id) ?? id;
80
+ // An endpoint is resolved from the id it names as written, so a reference first becomes the id it was proposed as.
81
+ const endpoint = (id) => resolve(canonicalEndpoint(id, proposedIds) ?? id);
82
+ const modify = [];
83
+ for (const entry of design.modify ?? []) {
84
+ const id = resolve(entry.id);
85
+ const index = live.get(id);
86
+ if (index === undefined) {
87
+ modify.push(entry);
88
+ continue;
89
+ }
90
+ nodes[index] = withSet(nodes[index], entry.set ?? {}, entry.note);
91
+ const next = proposedNodeId(nodes[index]);
92
+ if (next === id)
93
+ continue;
94
+ live.delete(id);
95
+ if (!live.has(next))
96
+ live.set(next, index);
97
+ for (const [from, to] of renamed)
98
+ if (to === id)
99
+ renamed.set(from, next);
100
+ renamed.set(id, next);
101
+ }
102
+ const droppedNodes = new Set();
103
+ const dropped = new Set();
104
+ const writtenEdges = design.propose?.edges ?? [];
105
+ const proposedEdges = writtenEdges.map(edge => ({
106
+ ...edge,
107
+ from: endpoint(edge.from),
108
+ to: endpoint(edge.to),
109
+ ...(edge.handlers === undefined ? {} : { handlers: edge.handlers.map(endpoint) })
110
+ }));
111
+ // A removal drops the proposals it names as written; only when none is written so does it drop by the resolved
112
+ // endpoints. So removing a reference-form edge never also drops its correctly written twin.
113
+ const writtenKeys = writtenEdges.map(edge => edgeKey({ from: resolve(edge.from), to: resolve(edge.to), kind: edge.kind }));
114
+ const resolvedKeys = proposedEdges.map(edgeKey);
115
+ const droppedEdges = new Set();
116
+ const remove = [];
117
+ for (const entry of design.remove ?? []) {
118
+ if (entry.kind === 'node') {
119
+ const id = resolve(entry.id);
120
+ const index = live.get(id);
121
+ if (index === undefined) {
122
+ remove.push(entry);
123
+ continue;
124
+ }
125
+ live.delete(id);
126
+ droppedNodes.add(index);
127
+ dropped.add(id);
128
+ continue;
129
+ }
130
+ const written = edgeKey({ from: resolve(entry.from), to: resolve(entry.to), kind: entry.edgeKind });
131
+ const resolved = edgeKey({ from: endpoint(entry.from), to: endpoint(entry.to), kind: entry.edgeKind });
132
+ const asWritten = writtenKeys.flatMap((key, index) => key === written ? [index] : []);
133
+ const matched = asWritten.length > 0 ? asWritten : resolvedKeys.flatMap((key, index) => key === resolved ? [index] : []);
134
+ if (matched.length > 0)
135
+ matched.forEach(index => droppedEdges.add(index));
136
+ else
137
+ remove.push(entry);
138
+ }
139
+ const kept = new Set();
140
+ const edges = proposedEdges.flatMap((edge, index) => {
141
+ const key = edgeKey(edge);
142
+ if (droppedEdges.has(index) || dropped.has(edge.from) || dropped.has(edge.to) || kept.has(key))
143
+ return [];
144
+ kept.add(key);
145
+ if (edge.handlers === undefined)
146
+ return [edge];
147
+ const { handlers, ...artifactWide } = edge;
148
+ const scoped = handlers.filter(handler => !dropped.has(handler));
149
+ return [scoped.length > 0 ? { ...artifactWide, handlers: scoped } : artifactWide];
150
+ });
151
+ const proposedNodes = nodes.filter((_node, index) => !droppedNodes.has(index));
152
+ const comments = design.comments?.map(comment => ({ ...comment, anchor: anchorOf(comment.anchor, resolve) }));
153
+ const folds = {
154
+ propose: {
155
+ ...(design.propose?.nodes === undefined ? {} : { nodes: proposedNodes }),
156
+ ...(design.propose?.edges === undefined ? {} : { edges })
157
+ },
158
+ modify,
159
+ remove,
160
+ comments
161
+ };
162
+ // Each key where the design holds it, in its order, so the exported file differs from the replay only where it folds.
163
+ const folded = Object.fromEntries(Object.entries(design).map(([key, value]) => [key, key in folds ? folds[key] : value]));
164
+ return {
165
+ design: folded,
166
+ map: mapOf(map, id => {
167
+ const at = resolve(id);
168
+ return dropped.has(at) ? undefined : at;
169
+ }),
170
+ renamed,
171
+ dropped
172
+ };
173
+ }
174
+ //# sourceMappingURL=effective-design.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"effective-design.js","sourceRoot":"","sources":["../../src/effective-design.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import type { DecidedSource } from './map-vocabulary.js';
2
- import type { GherkinStep, MapEntryId, MapFile, MapOptionId, MapScenario } from './map-structure.js';
2
+ import type { GherkinStep, MapEntryId, MapFile, MapOptionId, MapScenario, ScenarioRejection } from './map-structure.js';
3
3
  /** Why a stored fork-derived scenario stops feeding tests until a human strikes or supersedes it. */
4
4
  export type ScenarioReviewReason = 'option-changed' | 'reopened' | 'moot' | 'fork-gone' | 'walk-changed' | 'walk-gone';
5
5
  /** `ready` when the walk carries given, when and then; `needs-gherkin` when it is prose. */
@@ -18,6 +18,8 @@ export type ForkScenarioProposal = {
18
18
  given: GherkinStep[];
19
19
  when: GherkinStep[];
20
20
  then: GherkinStep[];
21
+ /** BP-229 (D7): the walk's declared rejection, copied only when the walk carries one. */
22
+ rejection?: ScenarioRejection;
21
23
  };
22
24
  /** A stored scenario with derivedFrom, and why it is under review; null when its fork still stands. */
23
25
  export type DerivedScenarioJudgement = {
@@ -1 +1 @@
1
- {"version":3,"file":"fork-scenarios.d.ts","sourceRoot":"","sources":["../../src/fork-scenarios.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EACV,WAAW,EACX,UAAU,EACV,OAAO,EAEP,WAAW,EAEX,WAAW,EAGZ,MAAM,oBAAoB,CAAC;AAO5B,qGAAqG;AACrG,MAAM,MAAM,oBAAoB,GAAG,gBAAgB,GAAG,UAAU,GAAG,MAAM,GAAG,WAAW,GAAG,cAAc,GAAG,WAAW,CAAC;AAEvH,4FAA4F;AAC5F,MAAM,MAAM,iBAAiB,GAAG,OAAO,GAAG,eAAe,CAAC;AAE1D,8FAA8F;AAC9F,MAAM,MAAM,oBAAoB,GAAG;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,UAAU,CAAC;IACnB,QAAQ,EAAE,WAAW,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,aAAa,CAAC;IACtB,KAAK,EAAE,iBAAiB,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,IAAI,EAAE,WAAW,EAAE,CAAC;IACpB,IAAI,EAAE,WAAW,EAAE,CAAC;CACrB,CAAC;AAEF,uGAAuG;AACvG,MAAM,MAAM,wBAAwB,GAAG;IACrC,UAAU,EAAE,UAAU,CAAC;IACvB,YAAY,EAAE,oBAAoB,GAAG,IAAI,CAAC;CAC3C,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,SAAS,EAAE,oBAAoB,EAAE,CAAC;IAClC,OAAO,EAAE,wBAAwB,EAAE,CAAC;CACrC,CAAC;AAEF,8FAA8F;AAC9F,MAAM,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG;IAAE,SAAS,EAAE,aAAa,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,GAAG,aAAa,CAAC,CAAC,CAAA;CAAE,CAAC;AAE7H,wGAAwG;AACxG,eAAO,MAAM,wBAAwB,aAAa,CAAC;AAEnD,eAAO,MAAM,eAAe,GAAK,QAAQ,UAAU,EAAE,UAAU,WAAW,EAAE,MAAM,MAAM,KAAI,MACxB,CAAC;AAgCrE;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAE,GAAG,EAAE,eAAe,GAAI,kBAAkB,CAuC5E"}
1
+ {"version":3,"file":"fork-scenarios.d.ts","sourceRoot":"","sources":["../../src/fork-scenarios.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EACV,WAAW,EACX,UAAU,EACV,OAAO,EAEP,WAAW,EAEX,WAAW,EAGX,iBAAiB,EAElB,MAAM,oBAAoB,CAAC;AAO5B,qGAAqG;AACrG,MAAM,MAAM,oBAAoB,GAAG,gBAAgB,GAAG,UAAU,GAAG,MAAM,GAAG,WAAW,GAAG,cAAc,GAAG,WAAW,CAAC;AAEvH,4FAA4F;AAC5F,MAAM,MAAM,iBAAiB,GAAG,OAAO,GAAG,eAAe,CAAC;AAE1D,8FAA8F;AAC9F,MAAM,MAAM,oBAAoB,GAAG;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,UAAU,CAAC;IACnB,QAAQ,EAAE,WAAW,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,aAAa,CAAC;IACtB,KAAK,EAAE,iBAAiB,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,IAAI,EAAE,WAAW,EAAE,CAAC;IACpB,IAAI,EAAE,WAAW,EAAE,CAAC;IACpB,yFAAyF;IACzF,SAAS,CAAC,EAAE,iBAAiB,CAAC;CAC/B,CAAC;AAEF,uGAAuG;AACvG,MAAM,MAAM,wBAAwB,GAAG;IACrC,UAAU,EAAE,UAAU,CAAC;IACvB,YAAY,EAAE,oBAAoB,GAAG,IAAI,CAAC;CAC3C,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,SAAS,EAAE,oBAAoB,EAAE,CAAC;IAClC,OAAO,EAAE,wBAAwB,EAAE,CAAC;CACrC,CAAC;AAEF,8FAA8F;AAC9F,MAAM,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG;IAAE,SAAS,EAAE,aAAa,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,GAAG,aAAa,CAAC,CAAC,CAAA;CAAE,CAAC;AAE7H,wGAAwG;AACxG,eAAO,MAAM,wBAAwB,aAAa,CAAC;AAEnD,eAAO,MAAM,eAAe,GAAK,QAAQ,UAAU,EAAE,UAAU,WAAW,EAAE,MAAM,MAAM,KAAI,MACxB,CAAC;AAoDrE;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAE,GAAG,EAAE,eAAe,GAAI,kBAAkB,CAwC5E"}
@@ -3,13 +3,27 @@ export const FORK_SCENARIO_KEY_PREFIX = 'derived:';
3
3
  export const forkScenarioKey = (forkId, optionId, walk) => `${FORK_SCENARIO_KEY_PREFIX}${forkId}/${optionId}/${walk}`;
4
4
  const isStructural = (walk) => walk.kind === 'structural';
5
5
  const hasGherkin = (walk) => walk.given !== undefined && walk.when !== undefined && walk.then !== undefined;
6
- const stepsOf = (text) => text === undefined ? [] : [{ text }];
6
+ const GHERKIN_KEYWORDS = ['given', 'when', 'then'];
7
+ // BP-231 (D11): a keyword's step carries the element the walk names for that keyword, and no key without one.
8
+ function stepsOf(walk, keyword) {
9
+ const text = walk[keyword];
10
+ if (text === undefined)
11
+ return [];
12
+ const element = walk.exercises?.[keyword];
13
+ return [element === undefined ? { text } : { text, exercises: { esId: element.esId } }];
14
+ }
15
+ // BP-231 (D11): an element absent on one side only, or a different id, is a change.
16
+ const sameExercises = (walk, basis) => GHERKIN_KEYWORDS.every(keyword => walk?.[keyword]?.esId === basis?.[keyword]?.esId);
17
+ // BP-229 (D8): absent means no rejection; a marker on one side only, or a different code, is a change.
18
+ const sameRejection = (walk, basis) => (walk === undefined) === (basis === undefined) && walk?.code === basis?.code;
7
19
  // The walk's fields a basis records; `kind` absent reads as behavioral, so spelling it out changes nothing.
8
20
  const sameWalk = (walk, basis) => walk.text === basis.text
9
21
  && isStructural(walk) === isStructural(basis)
10
22
  && walk.given === basis.given
11
23
  && walk.when === basis.when
12
- && walk.then === basis.then;
24
+ && walk.then === basis.then
25
+ && sameRejection(walk.rejection, basis.rejection)
26
+ && sameExercises(walk.exercises, basis.exercises);
13
27
  function reviewReasonOf(derivedFrom, forks) {
14
28
  const fork = forks.get(derivedFrom.forkId);
15
29
  if (fork === undefined)
@@ -63,9 +77,10 @@ export function joinForkScenarios(map) {
63
77
  title: walk.scenario,
64
78
  text: walk.text,
65
79
  anchors: [fork.anchor ?? fork.id],
66
- given: ready ? stepsOf(walk.given) : [],
67
- when: ready ? stepsOf(walk.when) : [],
68
- then: ready ? stepsOf(walk.then) : []
80
+ given: ready ? stepsOf(walk, 'given') : [],
81
+ when: ready ? stepsOf(walk, 'when') : [],
82
+ then: ready ? stepsOf(walk, 'then') : [],
83
+ ...(walk.rejection === undefined ? {} : { rejection: walk.rejection })
69
84
  });
70
85
  }
71
86
  }
@@ -1 +1 @@
1
- {"version":3,"file":"fork-scenarios.js","sourceRoot":"","sources":["../../src/fork-scenarios.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fork-scenarios.js","sourceRoot":"","sources":["../../src/fork-scenarios.ts"],"names":[],"mappings":"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"}
@@ -1,15 +1,40 @@
1
1
  import type { BlueprintEdge } from './edges.js';
2
2
  import { type BlueprintNode, type NodeType } from './nodes.js';
3
3
  export type SchemaVersion = 1;
4
+ /**
5
+ * The type words a repository's code names end in, by node type, as the repository declares them
6
+ * (`{ "aggregate": "Aggregate" }`). They are the repository's convention, never Blueprint's: its
7
+ * extractor writes them on the graph, and Blueprint tolerates exactly those. A label carries no type
8
+ * word by guarantee, so a node proposed as `Greeter` is realized by the code named `GreeterAggregate`
9
+ * ({@link codeNodeId}).
10
+ */
11
+ export type TypeWords = Partial<Record<NodeType, string>>;
4
12
  export type BlueprintGraph = {
5
13
  schemaVersion: SchemaVersion;
6
14
  subdomains: string[];
7
15
  nodes: BlueprintNode[];
8
16
  edges: BlueprintEdge[];
17
+ typeWords?: TypeWords;
9
18
  };
10
19
  export declare function emptyGraph(): BlueprintGraph;
11
20
  export declare function slugify(label: string): string;
12
21
  export declare function nodeId(subdomain: string, type: NodeType, label: string): string;
22
+ /** The type words a graph carries, each a string with a letter or digit; anything else in the field is ignored. */
23
+ export declare function typeWordsOf(graph: Pick<BlueprintGraph, 'typeWords'>): TypeWords | undefined;
24
+ /**
25
+ * The name the code of a node labelled `label` carries when its type's word is `word`: the label
26
+ * without the word it may end in, in PascalCase, then the word once. `Greeter` and `Greeter
27
+ * Aggregate` are both `GreeterAggregate`. The label ends in the word when its last letters and
28
+ * digits spell it, case and anything between them aside (`Orders Read Model` ends in `Readmodel`);
29
+ * a label that is nothing but the word keeps it.
30
+ */
31
+ export declare function codeName(label: string, word: string): string;
32
+ /**
33
+ * The id the code of a node proposed as (`subdomain`, `type`, `label`) extracts to when the
34
+ * repository declares a type word for `type`: the id of its {@link codeName}. `undefined` when the
35
+ * repository declares none for the type, so a proposal is realized by its own id alone.
36
+ */
37
+ export declare function codeNodeId(subdomain: string, type: NodeType, label: string, typeWords: TypeWords | undefined): string | undefined;
13
38
  export type ParsedNodeId = {
14
39
  subdomain: string;
15
40
  type: NodeType;
@@ -1 +1 @@
1
- {"version":3,"file":"graph.d.ts","sourceRoot":"","sources":["../../src/graph.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,KAAK,aAAa,EAAoC,KAAK,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEjG,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC;AAE9B,MAAM,MAAM,cAAc,GAAG;IAC3B,aAAa,EAAE,aAAa,CAAC;IAC7B,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,KAAK,EAAE,aAAa,EAAE,CAAC;CACxB,CAAC;AAEF,wBAAgB,UAAU,IAAI,cAAc,CAE3C;AAED,wBAAgB,OAAO,CAAE,KAAK,EAAE,MAAM,GAAI,MAAM,CAO/C;AAED,wBAAgB,MAAM,CAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,GAAI,MAAM,CAEjF;AAED,MAAM,MAAM,YAAY,GAAG;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,QAAQ,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,wBAAgB,WAAW,CAAE,EAAE,EAAE,MAAM,GAAI,YAAY,GAAG,SAAS,CAOlE"}
1
+ {"version":3,"file":"graph.d.ts","sourceRoot":"","sources":["../../src/graph.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,KAAK,aAAa,EAAoC,KAAK,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEjG,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC;AAE9B;;;;;;GAMG;AACH,MAAM,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;AAE1D,MAAM,MAAM,cAAc,GAAG;IAC3B,aAAa,EAAE,aAAa,CAAC;IAC7B,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB,CAAC;AAEF,wBAAgB,UAAU,IAAI,cAAc,CAE3C;AAED,wBAAgB,OAAO,CAAE,KAAK,EAAE,MAAM,GAAI,MAAM,CAO/C;AAED,wBAAgB,MAAM,CAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,GAAI,MAAM,CAEjF;AAED,mHAAmH;AACnH,wBAAgB,WAAW,CAAE,KAAK,EAAE,IAAI,CAAC,cAAc,EAAE,WAAW,CAAC,GAAI,SAAS,GAAG,SAAS,CAM7F;AAED;;;;;;GAMG;AACH,wBAAgB,QAAQ,CAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAI,MAAM,CAQ9D;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CACxB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,QAAQ,EACd,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,SAAS,GAAG,SAAS,GAC/B,MAAM,GAAG,SAAS,CAGpB;AAED,MAAM,MAAM,YAAY,GAAG;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,QAAQ,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,wBAAgB,WAAW,CAAE,EAAE,EAAE,MAAM,GAAI,YAAY,GAAG,SAAS,CAOlE"}
@@ -13,6 +13,39 @@ export function slugify(label) {
13
13
  export function nodeId(subdomain, type, label) {
14
14
  return `${slugify(subdomain)}_${NODE_ABBREV[type]}_${slugify(label)}`;
15
15
  }
16
+ /** The type words a graph carries, each a string with a letter or digit; anything else in the field is ignored. */
17
+ export function typeWordsOf(graph) {
18
+ const declared = graph.typeWords;
19
+ if (declared === null || typeof declared !== 'object' || Array.isArray(declared))
20
+ return undefined;
21
+ const words = Object.entries(declared).filter((entry) => Object.prototype.hasOwnProperty.call(NODE_ABBREV, entry[0]) && typeof entry[1] === 'string' && /[a-zA-Z0-9]/.test(entry[1]));
22
+ return words.length > 0 ? Object.fromEntries(words) : undefined;
23
+ }
24
+ /**
25
+ * The name the code of a node labelled `label` carries when its type's word is `word`: the label
26
+ * without the word it may end in, in PascalCase, then the word once. `Greeter` and `Greeter
27
+ * Aggregate` are both `GreeterAggregate`. The label ends in the word when its last letters and
28
+ * digits spell it, case and anything between them aside (`Orders Read Model` ends in `Readmodel`);
29
+ * a label that is nothing but the word keeps it.
30
+ */
31
+ export function codeName(label, word) {
32
+ const letters = [...word.replace(/[^a-zA-Z0-9]/g, '')];
33
+ const tail = new RegExp(`[^a-zA-Z0-9]*${letters.join('[^a-zA-Z0-9]*')}$`, 'i');
34
+ const stripped = label.replace(tail, '');
35
+ const bare = slugify(stripped) === '' ? label : stripped;
36
+ const pascal = slugify(bare).split('-').filter(Boolean)
37
+ .map(segment => segment.charAt(0).toUpperCase() + segment.slice(1)).join('');
38
+ return `${pascal}${word}`;
39
+ }
40
+ /**
41
+ * The id the code of a node proposed as (`subdomain`, `type`, `label`) extracts to when the
42
+ * repository declares a type word for `type`: the id of its {@link codeName}. `undefined` when the
43
+ * repository declares none for the type, so a proposal is realized by its own id alone.
44
+ */
45
+ export function codeNodeId(subdomain, type, label, typeWords) {
46
+ const word = typeWords?.[type];
47
+ return word === undefined ? undefined : nodeId(subdomain, type, codeName(label, word));
48
+ }
16
49
  export function parseNodeId(id) {
17
50
  const segments = id.split('_');
18
51
  if (segments.length !== 3)
@@ -1 +1 @@
1
- {"version":3,"file":"graph.js","sourceRoot":"","sources":["../../src/graph.ts"],"names":[],"mappings":"AACA,OAAO,EAAsB,WAAW,EAAE,mBAAmB,EAAiB,MAAM,YAAY,CAAC;AAWjG,MAAM,UAAU,UAAU;IACxB,OAAO,EAAE,aAAa,EAAE,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;AACpE,CAAC;AAED,MAAM,UAAU,OAAO,CAAE,KAAa;IACpC,OAAO,KAAK;SACT,OAAO,CAAE,oBAAoB,EAAE,OAAO,CAAE;SACxC,OAAO,CAAE,uBAAuB,EAAE,OAAO,CAAE;SAC3C,OAAO,CAAE,gBAAgB,EAAE,GAAG,CAAE;SAChC,OAAO,CAAE,UAAU,EAAE,EAAE,CAAE;SACzB,WAAW,EAAE,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,MAAM,CAAE,SAAiB,EAAE,IAAc,EAAE,KAAa;IACtE,OAAO,GAAI,OAAO,CAAE,SAAS,CAAG,IAAK,WAAW,CAAE,IAAI,CAAG,IAAK,OAAO,CAAE,KAAK,CAAG,EAAE,CAAC;AACpF,CAAC;AAQD,MAAM,UAAU,WAAW,CAAE,EAAU;IACrC,MAAM,QAAQ,GAAG,EAAE,CAAC,KAAK,CAAE,GAAG,CAAE,CAAC;IACjC,IAAK,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAG,OAAO,SAAS,CAAC;IAC9C,MAAM,CAAE,SAAS,EAAE,MAAM,EAAE,IAAI,CAAE,GAAG,QAAQ,CAAC;IAC7C,MAAM,IAAI,GAAG,mBAAmB,CAAE,MAAM,CAAE,CAAC;IAC3C,IAAK,IAAI,KAAK,SAAS,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAG,OAAO,SAAS,CAAC;IAC1F,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AACnC,CAAC"}
1
+ {"version":3,"file":"graph.js","sourceRoot":"","sources":["../../src/graph.ts"],"names":[],"mappings":"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"}
@@ -9,24 +9,34 @@ export * from './entry-points.js';
9
9
  export * from './diagnostics.js';
10
10
  export * from './overrides.js';
11
11
  export * from './find-orphan-nodes.js';
12
+ export * from './unproduced-events.js';
12
13
  export * from './apply-overrides.js';
13
14
  export * from './design.js';
14
15
  export * from './ops.js';
15
16
  export * from './op-chain.js';
16
17
  export * from './validate-design.js';
17
18
  export * from './apply-design.js';
19
+ export * from './effective-design.js';
20
+ export * from './edge-endpoints.js';
18
21
  export * from './reality-check.js';
19
22
  export * from './convergence.js';
20
23
  export * from './replication.js';
21
24
  export * from './session.js';
25
+ export * from './session-phase.js';
22
26
  export * from './organisation.js';
23
27
  export * from './retention.js';
24
28
  export * from './map-vocabulary.js';
25
29
  export * from './map-structure.js';
26
30
  export * from './map-links.js';
27
31
  export * from './coverage-links.js';
32
+ export * from './step-elements.js';
28
33
  export * from './card-channel.js';
34
+ export * from './channel-link.js';
29
35
  export * from './fork-scenarios.js';
36
+ export * from './card-holds.js';
37
+ export * from './map-review-view.js';
30
38
  export * from './invariants.js';
31
39
  export * from './spec.js';
40
+ export * from './tags.js';
41
+ export * from './scenario-test-level.js';
32
42
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC;AAC9B,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,WAAW,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC;AAC9B,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC;AACrC,cAAc,iBAAiB,CAAC;AAChC,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,0BAA0B,CAAC"}
@@ -9,24 +9,34 @@ export * from './entry-points.js';
9
9
  export * from './diagnostics.js';
10
10
  export * from './overrides.js';
11
11
  export * from './find-orphan-nodes.js';
12
+ export * from './unproduced-events.js';
12
13
  export * from './apply-overrides.js';
13
14
  export * from './design.js';
14
15
  export * from './ops.js';
15
16
  export * from './op-chain.js';
16
17
  export * from './validate-design.js';
17
18
  export * from './apply-design.js';
19
+ export * from './effective-design.js';
20
+ export * from './edge-endpoints.js';
18
21
  export * from './reality-check.js';
19
22
  export * from './convergence.js';
20
23
  export * from './replication.js';
21
24
  export * from './session.js';
25
+ export * from './session-phase.js';
22
26
  export * from './organisation.js';
23
27
  export * from './retention.js';
24
28
  export * from './map-vocabulary.js';
25
29
  export * from './map-structure.js';
26
30
  export * from './map-links.js';
27
31
  export * from './coverage-links.js';
32
+ export * from './step-elements.js';
28
33
  export * from './card-channel.js';
34
+ export * from './channel-link.js';
29
35
  export * from './fork-scenarios.js';
36
+ export * from './card-holds.js';
37
+ export * from './map-review-view.js';
30
38
  export * from './invariants.js';
31
39
  export * from './spec.js';
40
+ export * from './tags.js';
41
+ export * from './scenario-test-level.js';
32
42
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC;AAC9B,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,WAAW,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC;AAC9B,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC;AACrC,cAAc,iBAAiB,CAAC;AAChC,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,0BAA0B,CAAC"}
@@ -0,0 +1,29 @@
1
+ import { type ForkScenarioProposal, type ScenarioReviewReason } from './fork-scenarios.js';
2
+ import type { MapEntryId, MapExample, MapFile } from './map-structure.js';
3
+ /**
4
+ * One row a card shows; `proposal` is set on an unstored fork-derived scenario, whose example id is its key;
5
+ * `reviewReason` on a standing stored fork-derived scenario whose fork no longer stands behind it.
6
+ */
7
+ export type MapReviewEntry = {
8
+ example: MapExample;
9
+ proposal?: ForkScenarioProposal;
10
+ reviewReason?: ScenarioReviewReason;
11
+ };
12
+ export type MapReviewView = {
13
+ cards: ReadonlyMap<MapEntryId, MapReviewEntry[]>;
14
+ /** The cards showing an entry that waits on the owner: one awaiting agreement, or one under review. */
15
+ holders: ReadonlySet<MapEntryId>;
16
+ /** Proposed scenarios map-wide, stored or derived, not under review, each counted once however many cards show it. */
17
+ awaitingScenarios: number;
18
+ awaitingKpis: number;
19
+ /** Standing stored scenarios under review map-wide, whatever their reason. */
20
+ underReview: number;
21
+ /** Each card waiting on an open fork, to the open forks it waits on (cardsWaitingOnForks). */
22
+ heldBy: ReadonlyMap<MapEntryId, MapEntryId[]>;
23
+ };
24
+ /** An entry waits for the owner's Agree: proposed, and not under review. */
25
+ export declare const awaitsAgreement: (entry: MapReviewEntry) => boolean;
26
+ export declare function mapReviewView(map: MapFile): MapReviewView;
27
+ /** The rows a card shows; none for a card that shows nothing. */
28
+ export declare const reviewEntriesOn: (view: MapReviewView, card: MapEntryId) => MapReviewEntry[];
29
+ //# sourceMappingURL=map-review-view.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"map-review-view.d.ts","sourceRoot":"","sources":["../../src/map-review-view.ts"],"names":[],"mappings":"AACA,OAAO,EAAqB,KAAK,oBAAoB,EAAE,KAAK,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC9G,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO,EAAe,MAAM,oBAAoB,CAAC;AAYvF;;;GAGG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B,OAAO,EAAE,UAAU,CAAC;IACpB,QAAQ,CAAC,EAAE,oBAAoB,CAAC;IAChC,YAAY,CAAC,EAAE,oBAAoB,CAAC;CACrC,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,KAAK,EAAE,WAAW,CAAC,UAAU,EAAE,cAAc,EAAE,CAAC,CAAC;IACjD,uGAAuG;IACvG,OAAO,EAAE,WAAW,CAAC,UAAU,CAAC,CAAC;IACjC,sHAAsH;IACtH,iBAAiB,EAAE,MAAM,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,8EAA8E;IAC9E,WAAW,EAAE,MAAM,CAAC;IACpB,8FAA8F;IAC9F,MAAM,EAAE,WAAW,CAAC,UAAU,EAAE,UAAU,EAAE,CAAC,CAAC;CAC/C,CAAC;AAEF,4EAA4E;AAC5E,eAAO,MAAM,eAAe,GAAK,OAAO,cAAc,KAAI,OACoB,CAAC;AAuB/E,wBAAgB,aAAa,CAAE,GAAG,EAAE,OAAO,GAAI,aAAa,CA+B3D;AAED,iEAAiE;AACjE,eAAO,MAAM,eAAe,GAAK,MAAM,aAAa,EAAE,MAAM,UAAU,KAAI,cAAc,EAAkC,CAAC"}
@@ -0,0 +1,58 @@
1
+ import { cardsWaitingOnForks } from './card-holds.js';
2
+ import { joinForkScenarios } from './fork-scenarios.js';
3
+ /** An entry waits for the owner's Agree: proposed, and not under review. */
4
+ export const awaitsAgreement = (entry) => entry.example.status.kind === 'proposed' && entry.reviewReason === undefined;
5
+ // What an entry asks of the owner: an Agree while it awaits agreement, a Strike or a successor while it is under review.
6
+ const waits = (entry) => awaitsAgreement(entry) || entry.reviewReason !== undefined;
7
+ const isScenario = (example) => 'given' in example;
8
+ // A proposal reads as the scenario its derived post would store: anchored where the door stamps it
9
+ // (proposal.anchors, resolveDerivedPost), proposed, and named by its read-only key.
10
+ const proposedScenarioOf = (proposal) => ({
11
+ id: proposal.key,
12
+ title: proposal.title,
13
+ anchors: proposal.anchors,
14
+ given: proposal.given,
15
+ when: proposal.when,
16
+ then: proposal.then,
17
+ derivedFrom: { forkId: proposal.forkId, optionId: proposal.optionId, walk: proposal.walk },
18
+ proposedBy: 'human',
19
+ status: { kind: 'proposed' },
20
+ });
21
+ // A map read from a host that predates ESAS-287 carries no example arrays; missing arrays read as empty, so
22
+ // its decided forks still list their ready proposals.
23
+ export function mapReviewView(map) {
24
+ const scenarios = map.scenarios ?? [];
25
+ const observations = map.observations ?? [];
26
+ const report = joinForkScenarios({ forks: map.forks, scenarios });
27
+ const ready = report.proposals.filter((proposal) => proposal.state === 'ready');
28
+ const heldBy = cardsWaitingOnForks(map);
29
+ const judged = new Map(report.derived.flatMap(({ scenarioId, reviewReason }) => reviewReason === null ? [] : [[scenarioId, reviewReason]]));
30
+ const cards = new Map();
31
+ const entries = [];
32
+ const show = (entry, on) => {
33
+ if (waits(entry) && on.some((card) => heldBy.has(card)))
34
+ return;
35
+ entries.push(entry);
36
+ for (const card of new Set(on))
37
+ cards.set(card, [...(cards.get(card) ?? []), entry]);
38
+ };
39
+ for (const example of [...scenarios, ...observations]) {
40
+ const fork = isScenario(example) ? example.derivedFrom?.forkId : undefined;
41
+ const reviewReason = example.status.kind === 'struck' ? undefined : judged.get(example.id);
42
+ show(reviewReason === undefined ? { example } : { example, reviewReason }, fork === undefined ? example.anchors : [...example.anchors, fork]);
43
+ }
44
+ for (const proposal of ready)
45
+ show({ example: proposedScenarioOf(proposal), proposal }, [proposal.forkId, ...proposal.anchors]);
46
+ const awaiting = entries.filter(awaitsAgreement);
47
+ return {
48
+ cards,
49
+ holders: new Set([...cards].filter(([, shown]) => shown.some(waits)).map(([card]) => card)),
50
+ awaitingScenarios: awaiting.filter(({ example }) => isScenario(example)).length,
51
+ awaitingKpis: awaiting.filter(({ example }) => !isScenario(example)).length,
52
+ underReview: entries.filter(({ reviewReason }) => reviewReason !== undefined).length,
53
+ heldBy,
54
+ };
55
+ }
56
+ /** The rows a card shows; none for a card that shows nothing. */
57
+ export const reviewEntriesOn = (view, card) => view.cards.get(card) ?? [];
58
+ //# sourceMappingURL=map-review-view.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"map-review-view.js","sourceRoot":"","sources":["../../src/map-review-view.ts"],"names":[],"mappings":"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"}