@skhema/method 0.2.0 → 0.3.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 (65) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +84 -27
  3. package/dist/definitions.d.ts +1 -2
  4. package/dist/definitions.js +680 -461
  5. package/dist/index.d.ts +5 -6
  6. package/dist/index.js +5 -6
  7. package/dist/registry.d.ts +19 -19
  8. package/dist/registry.js +13 -12
  9. package/dist/types.d.ts +14 -17
  10. package/dist/types.js +0 -1
  11. package/dist/validate.d.ts +1 -2
  12. package/dist/validate.js +44 -51
  13. package/dist/vocabulary/components.d.ts +32 -0
  14. package/dist/vocabulary/components.js +27 -0
  15. package/dist/vocabulary/elements.d.ts +102 -0
  16. package/dist/vocabulary/elements.js +97 -0
  17. package/dist/vocabulary/index.d.ts +4 -0
  18. package/dist/vocabulary/index.js +4 -0
  19. package/dist/vocabulary/mapping.d.ts +130 -0
  20. package/dist/vocabulary/mapping.js +85 -0
  21. package/dist/vocabulary/utils.d.ts +14 -0
  22. package/dist/vocabulary/utils.js +54 -0
  23. package/package.json +56 -10
  24. package/dist/definitions.d.ts.map +0 -1
  25. package/dist/definitions.js.map +0 -1
  26. package/dist/domain/entity-type-definitions.d.ts +0 -7
  27. package/dist/domain/entity-type-definitions.d.ts.map +0 -1
  28. package/dist/domain/entity-type-definitions.js +0 -201
  29. package/dist/domain/entity-type-definitions.js.map +0 -1
  30. package/dist/domain/entity-types.d.ts +0 -11
  31. package/dist/domain/entity-types.d.ts.map +0 -1
  32. package/dist/domain/entity-types.js +0 -29
  33. package/dist/domain/entity-types.js.map +0 -1
  34. package/dist/domain/glossary-terms.d.ts +0 -3
  35. package/dist/domain/glossary-terms.d.ts.map +0 -1
  36. package/dist/domain/glossary-terms.js +0 -263
  37. package/dist/domain/glossary-terms.js.map +0 -1
  38. package/dist/domain/glossary.d.ts +0 -19
  39. package/dist/domain/glossary.d.ts.map +0 -1
  40. package/dist/domain/glossary.js +0 -62
  41. package/dist/domain/glossary.js.map +0 -1
  42. package/dist/domain/index.d.ts +0 -6
  43. package/dist/domain/index.d.ts.map +0 -1
  44. package/dist/domain/index.js +0 -6
  45. package/dist/domain/index.js.map +0 -1
  46. package/dist/domain/segmentation-dimensions.d.ts +0 -13
  47. package/dist/domain/segmentation-dimensions.d.ts.map +0 -1
  48. package/dist/domain/segmentation-dimensions.js +0 -26
  49. package/dist/domain/segmentation-dimensions.js.map +0 -1
  50. package/dist/domain/types.d.ts +0 -75
  51. package/dist/domain/types.d.ts.map +0 -1
  52. package/dist/domain/types.js +0 -21
  53. package/dist/domain/types.js.map +0 -1
  54. package/dist/domain/validate.d.ts +0 -28
  55. package/dist/domain/validate.d.ts.map +0 -1
  56. package/dist/domain/validate.js +0 -98
  57. package/dist/domain/validate.js.map +0 -1
  58. package/dist/index.d.ts.map +0 -1
  59. package/dist/index.js.map +0 -1
  60. package/dist/registry.d.ts.map +0 -1
  61. package/dist/registry.js.map +0 -1
  62. package/dist/types.d.ts.map +0 -1
  63. package/dist/types.js.map +0 -1
  64. package/dist/validate.d.ts.map +0 -1
  65. package/dist/validate.js.map +0 -1
@@ -1,9 +1,9 @@
1
- import { COMPONENT_TYPES, ELEMENT_TYPES, SKHEMA_MAPPING, } from "@skhema/types/schema";
1
+ import { COMPONENT_TYPES, ELEMENT_TYPES, SKHEMA_MAPPING, } from './vocabulary/index.js';
2
2
  function titleCase(value) {
3
3
  return value
4
- .split("_")
4
+ .split('_')
5
5
  .map((part) => part.charAt(0).toUpperCase() + part.slice(1))
6
- .join(" ");
6
+ .join(' ');
7
7
  }
8
8
  function syntacticSlot(id, description, required = true) {
9
9
  return { id, label: titleCase(id), description, required };
@@ -17,10 +17,10 @@ function methodSlot(id, description, options = {}) {
17
17
  description,
18
18
  required,
19
19
  substitutable: options.substitutable ?? true,
20
- cardinality: options.cardinality ?? (required ? "exactly_one" : "zero_or_one"),
20
+ cardinality: options.cardinality ?? (required ? 'exactly_one' : 'zero_or_one'),
21
21
  evidence: options.evidence ??
22
- (required ? "explicit_span_required" : "explicit_or_inferred"),
23
- inference: options.inference ?? (required ? "not_allowed" : "allowed"),
22
+ (required ? 'explicit_span_required' : 'explicit_or_inferred'),
23
+ inference: options.inference ?? (required ? 'not_allowed' : 'allowed'),
24
24
  acceptedEntityTypes: options.acceptedEntityTypes ?? [],
25
25
  diagnostics: options.diagnostics ?? {
26
26
  ...(required ? { missing: `${slotLabel} is required.` } : {}),
@@ -39,688 +39,899 @@ function relationship(source, target, type, label, description, options = {}) {
39
39
  type,
40
40
  label,
41
41
  description,
42
- cardinality: options.cardinality ?? "zero_or_more",
42
+ cardinality: options.cardinality ?? 'zero_or_more',
43
43
  requiredForCompleteness: options.requiredForCompleteness ?? false,
44
- evidence: options.evidence ?? "semantic_alignment",
45
- scope: options.scope ?? ["same_strategy", "same_workspace"],
44
+ evidence: options.evidence ?? 'semantic_alignment',
45
+ scope: options.scope ?? ['same_strategy', 'same_workspace'],
46
46
  diagnostics: options.diagnostics ?? {
47
- ...(options.requiredForCompleteness ? { missing: `${label} is required for completeness.` } : {}),
47
+ ...(options.requiredForCompleteness
48
+ ? { missing: `${label} is required for completeness.` }
49
+ : {}),
48
50
  weak: `${label} needs clearer evidence.`,
49
51
  },
50
52
  };
51
53
  }
52
54
  const indicativeSyntax = [
53
- syntacticSlot("subject", "Noun that describes the subject performing or experiencing the action."),
54
- syntacticSlot("direct_object", "Noun that describes the direct object of the verb."),
55
- syntacticSlot("indirect_object", "Noun that describes the indirect object of the verb.", false),
55
+ syntacticSlot('subject', 'Noun that describes the subject performing or experiencing the action.'),
56
+ syntacticSlot('direct_object', 'Noun that describes the direct object of the verb.'),
57
+ syntacticSlot('indirect_object', 'Noun that describes the indirect object of the verb.', false),
56
58
  ];
57
59
  const imperativeSyntax = [
58
- syntacticSlot("verb", "Verb that describes the required action."),
59
- syntacticSlot("subject", "Noun that describes the actor performing the action.", false),
60
- syntacticSlot("direct_object", "Noun that describes the direct object of the verb."),
61
- syntacticSlot("indirect_object", "Noun that describes the indirect object of the verb.", false),
60
+ syntacticSlot('verb', 'Verb that describes the required action.'),
61
+ syntacticSlot('subject', 'Noun that describes the actor performing the action.', false),
62
+ syntacticSlot('direct_object', 'Noun that describes the direct object of the verb.'),
63
+ syntacticSlot('indirect_object', 'Noun that describes the indirect object of the verb.', false),
62
64
  ];
63
65
  const nounPhraseSyntax = [
64
- syntacticSlot("noun_phrase", "Noun phrase that names the strategic option or object."),
65
- syntacticSlot("verb", "Verb used if the phrase expresses a discontinuance or transition.", false),
66
- syntacticSlot("direct_object", "Noun that describes the direct object of the verb.", false),
67
- syntacticSlot("indirect_object", "Noun that describes the indirect object of the verb.", false),
68
- syntacticSlot("subject", "Noun that describes the actor performing the action.", false),
66
+ syntacticSlot('noun_phrase', 'Noun phrase that names the strategic option or object.'),
67
+ syntacticSlot('verb', 'Verb used if the phrase expresses a discontinuance or transition.', false),
68
+ syntacticSlot('direct_object', 'Noun that describes the direct object of the verb.', false),
69
+ syntacticSlot('indirect_object', 'Noun that describes the indirect object of the verb.', false),
70
+ syntacticSlot('subject', 'Noun that describes the actor performing the action.', false),
69
71
  ];
70
72
  const indicativeMethodSlots = [
71
- methodSlot("adverbial_phrase", "Adverb phrase that modifies the subject or statement frame."),
72
- methodSlot("noun_phrase", "Noun phrase that modifies the subject or statement frame."),
73
- methodSlot("argument", "Phrase that specifies the main argument of the element."),
74
- methodSlot("argument_modifier", "Phrase that modifies the main argument."),
75
- methodSlot("agent", "Noun that describes an agent contributing to the concern.", { required: false }),
76
- methodSlot("temporal_modifier", "Phrase that modifies the temporal aspect of the element.", {
73
+ methodSlot('adverbial_phrase', 'Adverb phrase that modifies the subject or statement frame.'),
74
+ methodSlot('noun_phrase', 'Noun phrase that modifies the subject or statement frame.'),
75
+ methodSlot('argument', 'Phrase that specifies the main argument of the element.'),
76
+ methodSlot('argument_modifier', 'Phrase that modifies the main argument.'),
77
+ methodSlot('agent', 'Noun that describes an agent contributing to the concern.', { required: false }),
78
+ methodSlot('temporal_modifier', 'Phrase that modifies the temporal aspect of the element.', {
77
79
  required: false,
78
- examples: ["in the next 12 months", "by 2030", "in Q2 2025"],
80
+ examples: ['in the next 12 months', 'by 2030', 'in Q2 2025'],
79
81
  }),
80
82
  ];
81
83
  const imperativeMethodSlots = [
82
- methodSlot("relative_clause", "Relative clause that modifies the noun phrase.", {
84
+ methodSlot('relative_clause', 'Relative clause that modifies the noun phrase.', {
83
85
  required: false,
84
86
  }),
85
- methodSlot("adverbial_phrase", "Adverb phrase that modifies the verb action."),
87
+ methodSlot('adverbial_phrase', 'Adverb phrase that modifies the verb action.'),
86
88
  ];
87
89
  const keyChallengeSlots = [
88
- methodSlot("actor", "The organization, team, market participant, customer group, or decision-maker facing the challenge.", {
89
- cardinality: "one_or_more",
90
- acceptedEntityTypes: ["organization", "segment", "market_participant"],
90
+ methodSlot('actor', 'The organization, team, market participant, customer group, or decision-maker facing the challenge.', {
91
+ cardinality: 'one_or_more',
92
+ acceptedEntityTypes: ['organization', 'segment', 'market_participant'],
91
93
  diagnostics: {
92
- missing: "Identify who is facing the challenge.",
93
- weak: "Make the actor specific enough to guide strategy work.",
94
+ missing: 'Identify who is facing the challenge.',
95
+ weak: 'Make the actor specific enough to guide strategy work.',
94
96
  },
95
97
  }),
96
- methodSlot("causal_pressure", "The force, shift, constraint, or market change creating the challenge.", {
97
- cardinality: "one_or_more",
98
+ methodSlot('causal_pressure', 'The force, shift, constraint, or market change creating the challenge.', {
99
+ cardinality: 'one_or_more',
98
100
  acceptedEntityTypes: [
99
- "externality",
100
- "constraint",
101
- "market_shift",
102
- "competitive_pressure",
103
- "regulatory_pressure",
101
+ 'externality',
102
+ 'constraint',
103
+ 'market_shift',
104
+ 'competitive_pressure',
105
+ 'regulatory_pressure',
104
106
  ],
105
107
  diagnostics: {
106
- missing: "Describe the force or change creating the challenge.",
107
- weak: "Make the causal pressure concrete enough to explain why the challenge exists.",
108
+ missing: 'Describe the force or change creating the challenge.',
109
+ weak: 'Make the causal pressure concrete enough to explain why the challenge exists.',
108
110
  },
109
111
  }),
110
- methodSlot("consequence", "The material impact, risk, or strategic effect if the challenge is not addressed.", {
111
- acceptedEntityTypes: ["impact", "metric", "risk", "outcome"],
112
+ methodSlot('consequence', 'The material impact, risk, or strategic effect if the challenge is not addressed.', {
113
+ acceptedEntityTypes: ['impact', 'metric', 'risk', 'outcome'],
112
114
  diagnostics: {
113
- missing: "Describe the material consequence of not addressing the challenge.",
114
- weak: "Make the consequence observable or strategically material.",
115
+ missing: 'Describe the material consequence of not addressing the challenge.',
116
+ weak: 'Make the consequence observable or strategically material.',
115
117
  },
116
118
  }),
117
- methodSlot("industry_context", "The industry or sector context, if present.", {
119
+ methodSlot('industry_context', 'The industry or sector context, if present.', {
118
120
  required: false,
119
- acceptedEntityTypes: ["industry"],
121
+ acceptedEntityTypes: ['industry'],
120
122
  diagnostics: {
121
- weak: "Clarify the industry context if it changes the nature of the challenge.",
123
+ weak: 'Clarify the industry context if it changes the nature of the challenge.',
122
124
  },
123
125
  }),
124
- methodSlot("geographic_context", "The location, market, or region context, if present.", {
126
+ methodSlot('geographic_context', 'The location, market, or region context, if present.', {
125
127
  required: false,
126
- acceptedEntityTypes: ["geo", "market"],
128
+ acceptedEntityTypes: ['geo', 'market'],
127
129
  diagnostics: {
128
- weak: "Clarify geography if the challenge depends on location or market boundaries.",
130
+ weak: 'Clarify geography if the challenge depends on location or market boundaries.',
129
131
  },
130
132
  }),
131
- methodSlot("temporal_context", "The timeframe, deadline, period, or timing assumption, if present.", {
133
+ methodSlot('temporal_context', 'The timeframe, deadline, period, or timing assumption, if present.', {
132
134
  required: false,
133
- acceptedEntityTypes: ["timeframe"],
135
+ acceptedEntityTypes: ['timeframe'],
134
136
  diagnostics: {
135
- weak: "Clarify timing if urgency or sequencing affects the strategic response.",
137
+ weak: 'Clarify timing if urgency or sequencing affects the strategic response.',
136
138
  },
137
139
  }),
138
- methodSlot("constraint", "A limiting condition, dependency, or tradeoff that narrows the challenge.", {
140
+ methodSlot('constraint', 'A limiting condition, dependency, or tradeoff that narrows the challenge.', {
139
141
  required: false,
140
- acceptedEntityTypes: ["constraint", "dependency", "tradeoff"],
142
+ acceptedEntityTypes: ['constraint', 'dependency', 'tradeoff'],
141
143
  diagnostics: {
142
- weak: "Clarify the constraint if it changes what responses are viable.",
144
+ weak: 'Clarify the constraint if it changes what responses are viable.',
143
145
  },
144
146
  }),
145
- methodSlot("decision_object", "The specific judgement, decision, resource, capability, or strategic object being pressured.", {
147
+ methodSlot('decision_object', 'The specific judgement, decision, resource, capability, or strategic object being pressured.', {
146
148
  required: false,
147
- acceptedEntityTypes: ["decision", "resource", "capability", "strategic_object"],
149
+ acceptedEntityTypes: [
150
+ 'decision',
151
+ 'resource',
152
+ 'capability',
153
+ 'strategic_object',
154
+ ],
148
155
  diagnostics: {
149
- weak: "Clarify what decision or strategic object is under pressure.",
156
+ weak: 'Clarify what decision or strategic object is under pressure.',
150
157
  },
151
158
  }),
152
159
  ];
153
160
  const supportingFactSlots = [
154
- methodSlot("subject", "The entity, activity, metric, market, or operating area the fact describes.", {
155
- acceptedEntityTypes: ["organization", "segment", "metric", "market", "capability"],
161
+ methodSlot('subject', 'The entity, activity, metric, market, or operating area the fact describes.', {
162
+ acceptedEntityTypes: [
163
+ 'organization',
164
+ 'segment',
165
+ 'metric',
166
+ 'market',
167
+ 'capability',
168
+ ],
156
169
  diagnostics: {
157
- missing: "Identify what the supporting fact is about.",
158
- weak: "Make the subject of the fact specific enough to support a challenge.",
170
+ missing: 'Identify what the supporting fact is about.',
171
+ weak: 'Make the subject of the fact specific enough to support a challenge.',
159
172
  },
160
173
  }),
161
- methodSlot("evidence", "The observed fact, measurement, event, or data point that supports strategic judgement.", {
162
- acceptedEntityTypes: ["metric", "event", "observation", "evidence"],
174
+ methodSlot('evidence', 'The observed fact, measurement, event, or data point that supports strategic judgement.', {
175
+ acceptedEntityTypes: ['metric', 'event', 'observation', 'evidence'],
163
176
  diagnostics: {
164
- missing: "State the observed fact or evidence.",
165
- weak: "Make the evidence concrete enough to be tested or cited.",
177
+ missing: 'State the observed fact or evidence.',
178
+ weak: 'Make the evidence concrete enough to be tested or cited.',
166
179
  },
167
180
  }),
168
- methodSlot("direction", "The movement, comparison, or directional change in the evidence.", {
181
+ methodSlot('direction', 'The movement, comparison, or directional change in the evidence.', {
169
182
  required: false,
170
- acceptedEntityTypes: ["trend", "comparison", "directional_change"],
183
+ acceptedEntityTypes: ['trend', 'comparison', 'directional_change'],
171
184
  diagnostics: {
172
- weak: "Clarify whether the fact is increasing, decreasing, stable, above, or below a reference point.",
185
+ weak: 'Clarify whether the fact is increasing, decreasing, stable, above, or below a reference point.',
173
186
  },
174
187
  }),
175
- methodSlot("temporal_context", "The timeframe or period in which the fact applies.", {
188
+ methodSlot('temporal_context', 'The timeframe or period in which the fact applies.', {
176
189
  required: false,
177
- acceptedEntityTypes: ["timeframe"],
190
+ acceptedEntityTypes: ['timeframe'],
178
191
  diagnostics: {
179
- weak: "Clarify the time period for the supporting fact.",
192
+ weak: 'Clarify the time period for the supporting fact.',
180
193
  },
181
194
  }),
182
- methodSlot("source_context", "The source, basis, or measurement context for the fact.", {
195
+ methodSlot('source_context', 'The source, basis, or measurement context for the fact.', {
183
196
  required: false,
184
197
  substitutable: false,
185
- acceptedEntityTypes: ["source", "dataset", "report", "experiment"],
198
+ acceptedEntityTypes: ['source', 'dataset', 'report', 'experiment'],
186
199
  diagnostics: {
187
- weak: "Add the source or measurement basis if the fact needs auditability.",
200
+ weak: 'Add the source or measurement basis if the fact needs auditability.',
188
201
  },
189
202
  }),
190
203
  ];
191
204
  const impactSlots = [
192
- methodSlot("affected_object", "The business outcome, stakeholder, asset, capability, or metric affected by the challenge.", {
193
- acceptedEntityTypes: ["outcome", "metric", "stakeholder", "asset", "capability"],
205
+ methodSlot('affected_object', 'The business outcome, stakeholder, asset, capability, or metric affected by the challenge.', {
206
+ acceptedEntityTypes: [
207
+ 'outcome',
208
+ 'metric',
209
+ 'stakeholder',
210
+ 'asset',
211
+ 'capability',
212
+ ],
194
213
  diagnostics: {
195
- missing: "Identify what is affected.",
196
- weak: "Make the affected object specific enough to reason about consequences.",
214
+ missing: 'Identify what is affected.',
215
+ weak: 'Make the affected object specific enough to reason about consequences.',
197
216
  },
198
217
  }),
199
- methodSlot("impact_mechanism", "The causal mechanism by which the challenge creates the impact.", {
200
- acceptedEntityTypes: ["causal_mechanism", "constraint", "externality", "process"],
218
+ methodSlot('impact_mechanism', 'The causal mechanism by which the challenge creates the impact.', {
219
+ acceptedEntityTypes: [
220
+ 'causal_mechanism',
221
+ 'constraint',
222
+ 'externality',
223
+ 'process',
224
+ ],
201
225
  diagnostics: {
202
- missing: "Explain how the challenge creates the impact.",
203
- weak: "Make the causal mechanism clearer.",
226
+ missing: 'Explain how the challenge creates the impact.',
227
+ weak: 'Make the causal mechanism clearer.',
204
228
  },
205
229
  }),
206
- methodSlot("impact_magnitude", "The scale, severity, or materiality of the impact.", {
230
+ methodSlot('impact_magnitude', 'The scale, severity, or materiality of the impact.', {
207
231
  required: false,
208
- acceptedEntityTypes: ["metric", "risk", "severity", "estimate"],
232
+ acceptedEntityTypes: ['metric', 'risk', 'severity', 'estimate'],
209
233
  diagnostics: {
210
- weak: "Clarify the scale or materiality of the impact if known.",
234
+ weak: 'Clarify the scale or materiality of the impact if known.',
211
235
  },
212
236
  }),
213
- methodSlot("temporal_context", "The timeframe over which the impact occurs or becomes material.", {
237
+ methodSlot('temporal_context', 'The timeframe over which the impact occurs or becomes material.', {
214
238
  required: false,
215
- acceptedEntityTypes: ["timeframe"],
239
+ acceptedEntityTypes: ['timeframe'],
216
240
  diagnostics: {
217
- weak: "Clarify when the impact occurs or becomes material.",
241
+ weak: 'Clarify when the impact occurs or becomes material.',
218
242
  },
219
243
  }),
220
- methodSlot("downstream_consequence", "The further strategic consequence created by the immediate impact.", {
244
+ methodSlot('downstream_consequence', 'The further strategic consequence created by the immediate impact.', {
221
245
  required: false,
222
- acceptedEntityTypes: ["consequence", "risk", "outcome"],
246
+ acceptedEntityTypes: ['consequence', 'risk', 'outcome'],
223
247
  diagnostics: {
224
- weak: "Clarify the downstream consequence if it changes the strategic response.",
248
+ weak: 'Clarify the downstream consequence if it changes the strategic response.',
225
249
  },
226
250
  }),
227
251
  ];
228
252
  const guidingPolicySlots = [
229
- methodSlot("strategic_action", "The coherent action, posture, or policy direction that addresses the key challenge.", {
230
- acceptedEntityTypes: ["approach", "method", "move", "position"],
253
+ methodSlot('strategic_action', 'The coherent action, posture, or policy direction that addresses the key challenge.', {
254
+ acceptedEntityTypes: ['approach', 'method', 'move', 'position'],
231
255
  diagnostics: {
232
- missing: "State the strategic action or policy direction.",
233
- weak: "Make the policy direction specific enough to guide choices.",
256
+ missing: 'State the strategic action or policy direction.',
257
+ weak: 'Make the policy direction specific enough to guide choices.',
234
258
  },
235
259
  }),
236
- methodSlot("decision_object", "The market, capability, offer, activity, resource, or choice the policy acts on.", {
237
- acceptedEntityTypes: ["market", "capability", "product", "service", "resource", "activity"],
260
+ methodSlot('decision_object', 'The market, capability, offer, activity, resource, or choice the policy acts on.', {
261
+ acceptedEntityTypes: [
262
+ 'market',
263
+ 'capability',
264
+ 'product',
265
+ 'service',
266
+ 'resource',
267
+ 'activity',
268
+ ],
238
269
  diagnostics: {
239
- missing: "Identify what the guiding policy acts on.",
240
- weak: "Make the decision object concrete enough to constrain action.",
270
+ missing: 'Identify what the guiding policy acts on.',
271
+ weak: 'Make the decision object concrete enough to constrain action.',
241
272
  },
242
273
  }),
243
- methodSlot("advantage_logic", "The rationale for why this policy creates advantage or resolves the challenge.", {
274
+ methodSlot('advantage_logic', 'The rationale for why this policy creates advantage or resolves the challenge.', {
244
275
  required: false,
245
- acceptedEntityTypes: ["advantage", "capability", "mechanism", "tradeoff"],
276
+ acceptedEntityTypes: ['advantage', 'capability', 'mechanism', 'tradeoff'],
246
277
  diagnostics: {
247
- weak: "Clarify why this policy is expected to work.",
278
+ weak: 'Clarify why this policy is expected to work.',
248
279
  },
249
280
  }),
250
- methodSlot("boundary", "The explicit limit, exclusion, or tradeoff implied by the policy.", {
281
+ methodSlot('boundary', 'The explicit limit, exclusion, or tradeoff implied by the policy.', {
251
282
  required: false,
252
- acceptedEntityTypes: ["scope", "constraint", "tradeoff"],
283
+ acceptedEntityTypes: ['scope', 'constraint', 'tradeoff'],
253
284
  diagnostics: {
254
- weak: "Clarify the boundary or tradeoff if the policy could be interpreted too broadly.",
285
+ weak: 'Clarify the boundary or tradeoff if the policy could be interpreted too broadly.',
255
286
  },
256
287
  }),
257
288
  ];
258
289
  const competitorMoveSlots = [
259
- methodSlot("competitor", "The competitor, substitute, entrant, channel, or market participant making the move.", {
260
- acceptedEntityTypes: ["organization", "competitor", "substitute", "entrant", "channel"],
290
+ methodSlot('competitor', 'The competitor, substitute, entrant, channel, or market participant making the move.', {
291
+ acceptedEntityTypes: [
292
+ 'organization',
293
+ 'competitor',
294
+ 'substitute',
295
+ 'entrant',
296
+ 'channel',
297
+ ],
261
298
  diagnostics: {
262
- missing: "Identify who is making the competitor move.",
263
- weak: "Make the competitor or market participant specific.",
299
+ missing: 'Identify who is making the competitor move.',
300
+ weak: 'Make the competitor or market participant specific.',
264
301
  },
265
302
  }),
266
- methodSlot("move", "The competitive action, investment, pricing change, distribution shift, or strategic posture being taken.", {
267
- acceptedEntityTypes: ["move", "investment", "pricing", "distribution", "position"],
303
+ methodSlot('move', 'The competitive action, investment, pricing change, distribution shift, or strategic posture being taken.', {
304
+ acceptedEntityTypes: [
305
+ 'move',
306
+ 'investment',
307
+ 'pricing',
308
+ 'distribution',
309
+ 'position',
310
+ ],
268
311
  diagnostics: {
269
- missing: "Describe the competitive move.",
270
- weak: "Make the competitive action observable enough to track.",
312
+ missing: 'Describe the competitive move.',
313
+ weak: 'Make the competitive action observable enough to track.',
271
314
  },
272
315
  }),
273
- methodSlot("threat_logic", "Why the move matters for the organization's challenge, policy, or advantage.", {
316
+ methodSlot('threat_logic', "Why the move matters for the organization's challenge, policy, or advantage.", {
274
317
  required: false,
275
- acceptedEntityTypes: ["threat", "pressure", "advantage", "risk"],
318
+ acceptedEntityTypes: ['threat', 'pressure', 'advantage', 'risk'],
276
319
  diagnostics: {
277
- weak: "Clarify why this competitor move is strategically relevant.",
320
+ weak: 'Clarify why this competitor move is strategically relevant.',
278
321
  },
279
322
  }),
280
- methodSlot("temporal_context", "The timeframe in which the move is occurring or expected.", {
323
+ methodSlot('temporal_context', 'The timeframe in which the move is occurring or expected.', {
281
324
  required: false,
282
- acceptedEntityTypes: ["timeframe"],
325
+ acceptedEntityTypes: ['timeframe'],
283
326
  diagnostics: {
284
- weak: "Clarify when the move is occurring or expected.",
327
+ weak: 'Clarify when the move is occurring or expected.',
285
328
  },
286
329
  }),
287
330
  ];
288
331
  const scopeSlots = [
289
- methodSlot("included_domain", "The market, customer segment, geography, category, product, service, channel, or activity included in scope.", {
290
- cardinality: "one_or_more",
291
- acceptedEntityTypes: ["market", "segment", "geo", "category", "product", "service", "channel", "activity"],
332
+ methodSlot('included_domain', 'The market, customer segment, geography, category, product, service, channel, or activity included in scope.', {
333
+ cardinality: 'one_or_more',
334
+ acceptedEntityTypes: [
335
+ 'market',
336
+ 'segment',
337
+ 'geo',
338
+ 'category',
339
+ 'product',
340
+ 'service',
341
+ 'channel',
342
+ 'activity',
343
+ ],
292
344
  diagnostics: {
293
- missing: "Identify what is included in scope.",
294
- weak: "Make the included scope specific enough to guide choices.",
345
+ missing: 'Identify what is included in scope.',
346
+ weak: 'Make the included scope specific enough to guide choices.',
295
347
  },
296
348
  }),
297
- methodSlot("scope_action", "The action implied by the scope statement, such as target, prioritize, enter, avoid, or limit.", {
349
+ methodSlot('scope_action', 'The action implied by the scope statement, such as target, prioritize, enter, avoid, or limit.', {
298
350
  required: false,
299
- acceptedEntityTypes: ["action", "priority", "boundary"],
351
+ acceptedEntityTypes: ['action', 'priority', 'boundary'],
300
352
  diagnostics: {
301
- weak: "Clarify the action implied by the scope statement.",
353
+ weak: 'Clarify the action implied by the scope statement.',
302
354
  },
303
355
  }),
304
- methodSlot("excluded_domain", "The domain explicitly excluded or deprioritized by the scope.", {
356
+ methodSlot('excluded_domain', 'The domain explicitly excluded or deprioritized by the scope.', {
305
357
  required: false,
306
- acceptedEntityTypes: ["market", "segment", "geo", "category", "product", "service", "channel", "activity"],
358
+ acceptedEntityTypes: [
359
+ 'market',
360
+ 'segment',
361
+ 'geo',
362
+ 'category',
363
+ 'product',
364
+ 'service',
365
+ 'channel',
366
+ 'activity',
367
+ ],
307
368
  diagnostics: {
308
- weak: "Clarify what is outside scope if the boundary matters.",
369
+ weak: 'Clarify what is outside scope if the boundary matters.',
309
370
  },
310
371
  }),
311
- methodSlot("boundary_condition", "The threshold, condition, or criterion that defines the scope boundary.", {
372
+ methodSlot('boundary_condition', 'The threshold, condition, or criterion that defines the scope boundary.', {
312
373
  required: false,
313
- acceptedEntityTypes: ["metric", "threshold", "condition", "criterion"],
374
+ acceptedEntityTypes: ['metric', 'threshold', 'condition', 'criterion'],
314
375
  diagnostics: {
315
- weak: "Clarify the threshold or criterion that defines the scope boundary.",
376
+ weak: 'Clarify the threshold or criterion that defines the scope boundary.',
316
377
  },
317
378
  }),
318
379
  ];
319
380
  const constraintSlots = [
320
- methodSlot("constraint_source", "The internal or external source creating the limitation.", {
321
- acceptedEntityTypes: ["internality", "externality", "regulation", "resource", "capability", "market"],
381
+ methodSlot('constraint_source', 'The internal or external source creating the limitation.', {
382
+ acceptedEntityTypes: [
383
+ 'internality',
384
+ 'externality',
385
+ 'regulation',
386
+ 'resource',
387
+ 'capability',
388
+ 'market',
389
+ ],
322
390
  diagnostics: {
323
- missing: "Identify the source of the constraint.",
324
- weak: "Make the constraint source specific enough to reason about.",
391
+ missing: 'Identify the source of the constraint.',
392
+ weak: 'Make the constraint source specific enough to reason about.',
325
393
  },
326
394
  }),
327
- methodSlot("limitation", "The limit, dependency, threshold, or condition that restricts viable choices.", {
328
- acceptedEntityTypes: ["constraint", "dependency", "threshold", "condition", "tradeoff"],
395
+ methodSlot('limitation', 'The limit, dependency, threshold, or condition that restricts viable choices.', {
396
+ acceptedEntityTypes: [
397
+ 'constraint',
398
+ 'dependency',
399
+ 'threshold',
400
+ 'condition',
401
+ 'tradeoff',
402
+ ],
329
403
  diagnostics: {
330
- missing: "Describe the limitation imposed by the constraint.",
331
- weak: "Make the limitation concrete enough to constrain action.",
404
+ missing: 'Describe the limitation imposed by the constraint.',
405
+ weak: 'Make the limitation concrete enough to constrain action.',
332
406
  },
333
407
  }),
334
- methodSlot("affected_choice", "The policy, solution, action, investment, or capability affected by the constraint.", {
408
+ methodSlot('affected_choice', 'The policy, solution, action, investment, or capability affected by the constraint.', {
335
409
  required: false,
336
- acceptedEntityTypes: ["guiding_policy", "solution", "action", "investment", "capability"],
410
+ acceptedEntityTypes: [
411
+ 'guiding_policy',
412
+ 'solution',
413
+ 'action',
414
+ 'investment',
415
+ 'capability',
416
+ ],
337
417
  diagnostics: {
338
- weak: "Clarify what choice the constraint affects.",
418
+ weak: 'Clarify what choice the constraint affects.',
339
419
  },
340
420
  }),
341
- methodSlot("constraint_type", "The category of constraint, such as fiscal, regulatory, competitive, technological, environmental, social, temporal, internal, or external.", {
421
+ methodSlot('constraint_type', 'The category of constraint, such as fiscal, regulatory, competitive, technological, environmental, social, temporal, internal, or external.', {
342
422
  required: false,
343
- acceptedEntityTypes: ["constraint_type"],
423
+ acceptedEntityTypes: ['constraint_type'],
344
424
  diagnostics: {
345
- weak: "Classify the constraint if type changes how it should be handled.",
425
+ weak: 'Classify the constraint if type changes how it should be handled.',
346
426
  },
347
427
  }),
348
428
  ];
349
429
  const solutionSlots = [
350
- methodSlot("solution_object", "The option, initiative, intervention, product, process, or strategic move being considered.", {
351
- acceptedEntityTypes: ["solution", "initiative", "product", "process", "move", "intervention"],
430
+ methodSlot('solution_object', 'The option, initiative, intervention, product, process, or strategic move being considered.', {
431
+ acceptedEntityTypes: [
432
+ 'solution',
433
+ 'initiative',
434
+ 'product',
435
+ 'process',
436
+ 'move',
437
+ 'intervention',
438
+ ],
352
439
  diagnostics: {
353
- missing: "Identify the solution or strategic option being considered.",
354
- weak: "Make the solution object specific enough to evaluate.",
440
+ missing: 'Identify the solution or strategic option being considered.',
441
+ weak: 'Make the solution object specific enough to evaluate.',
355
442
  },
356
443
  }),
357
- methodSlot("mechanism", "How the solution is expected to address the guiding policy or key challenge.", {
444
+ methodSlot('mechanism', 'How the solution is expected to address the guiding policy or key challenge.', {
358
445
  required: false,
359
- acceptedEntityTypes: ["mechanism", "capability", "process", "advantage"],
446
+ acceptedEntityTypes: ['mechanism', 'capability', 'process', 'advantage'],
360
447
  diagnostics: {
361
- weak: "Clarify how this solution is expected to work.",
448
+ weak: 'Clarify how this solution is expected to work.',
362
449
  },
363
450
  }),
364
- methodSlot("target_context", "The customer, market, geography, product, channel, capability, or activity the solution targets.", {
451
+ methodSlot('target_context', 'The customer, market, geography, product, channel, capability, or activity the solution targets.', {
365
452
  required: false,
366
- acceptedEntityTypes: ["segment", "market", "geo", "product", "channel", "capability", "activity"],
453
+ acceptedEntityTypes: [
454
+ 'segment',
455
+ 'market',
456
+ 'geo',
457
+ 'product',
458
+ 'channel',
459
+ 'capability',
460
+ 'activity',
461
+ ],
367
462
  diagnostics: {
368
- weak: "Clarify the context or target for the solution.",
463
+ weak: 'Clarify the context or target for the solution.',
369
464
  },
370
465
  }),
371
- methodSlot("tradeoff", "The sacrifice, exclusion, cost, or risk implied by choosing this solution.", {
466
+ methodSlot('tradeoff', 'The sacrifice, exclusion, cost, or risk implied by choosing this solution.', {
372
467
  required: false,
373
- acceptedEntityTypes: ["tradeoff", "cost", "risk", "constraint"],
468
+ acceptedEntityTypes: ['tradeoff', 'cost', 'risk', 'constraint'],
374
469
  diagnostics: {
375
- weak: "Clarify the tradeoff if it affects whether the solution is viable.",
470
+ weak: 'Clarify the tradeoff if it affects whether the solution is viable.',
376
471
  },
377
472
  }),
378
473
  ];
379
474
  const assumptionHypothesisSlots = [
380
- methodSlot("belief", "The unproven belief, condition, or causal claim that must hold true.", {
381
- acceptedEntityTypes: ["belief", "condition", "claim", "causal_assumption"],
475
+ methodSlot('belief', 'The unproven belief, condition, or causal claim that must hold true.', {
476
+ acceptedEntityTypes: [
477
+ 'belief',
478
+ 'condition',
479
+ 'claim',
480
+ 'causal_assumption',
481
+ ],
382
482
  diagnostics: {
383
- missing: "State the assumption or hypothesis that must be true.",
384
- weak: "Make the assumption specific enough to test.",
483
+ missing: 'State the assumption or hypothesis that must be true.',
484
+ weak: 'Make the assumption specific enough to test.',
385
485
  },
386
486
  }),
387
- methodSlot("dependent_outcome", "The outcome, behavior, metric, or result that depends on the assumption being true.", {
487
+ methodSlot('dependent_outcome', 'The outcome, behavior, metric, or result that depends on the assumption being true.', {
388
488
  required: false,
389
- acceptedEntityTypes: ["outcome", "behavior", "metric", "result"],
489
+ acceptedEntityTypes: ['outcome', 'behavior', 'metric', 'result'],
390
490
  diagnostics: {
391
- weak: "Clarify what outcome depends on this assumption.",
491
+ weak: 'Clarify what outcome depends on this assumption.',
392
492
  },
393
493
  }),
394
- methodSlot("test_condition", "The observable condition or evidence that would confirm or disconfirm the assumption.", {
494
+ methodSlot('test_condition', 'The observable condition or evidence that would confirm or disconfirm the assumption.', {
395
495
  required: false,
396
- acceptedEntityTypes: ["evidence", "metric", "threshold", "condition"],
496
+ acceptedEntityTypes: ['evidence', 'metric', 'threshold', 'condition'],
397
497
  diagnostics: {
398
- weak: "Clarify how this assumption could be tested.",
498
+ weak: 'Clarify how this assumption could be tested.',
399
499
  },
400
500
  }),
401
- methodSlot("timeframe", "The period over which the assumption should hold or be tested.", {
501
+ methodSlot('timeframe', 'The period over which the assumption should hold or be tested.', {
402
502
  required: false,
403
- acceptedEntityTypes: ["timeframe"],
503
+ acceptedEntityTypes: ['timeframe'],
404
504
  diagnostics: {
405
- weak: "Clarify the timeframe for this assumption.",
505
+ weak: 'Clarify the timeframe for this assumption.',
406
506
  },
407
507
  }),
408
508
  ];
409
509
  const experimentSlots = [
410
- methodSlot("test_action", "The experiment, pilot, model, trial, survey, or analysis to perform.", {
411
- acceptedEntityTypes: ["experiment", "pilot", "model", "survey", "analysis", "test"],
510
+ methodSlot('test_action', 'The experiment, pilot, model, trial, survey, or analysis to perform.', {
511
+ acceptedEntityTypes: [
512
+ 'experiment',
513
+ 'pilot',
514
+ 'model',
515
+ 'survey',
516
+ 'analysis',
517
+ 'test',
518
+ ],
412
519
  diagnostics: {
413
- missing: "State the test action to perform.",
414
- weak: "Make the experiment action specific enough to execute.",
520
+ missing: 'State the test action to perform.',
521
+ weak: 'Make the experiment action specific enough to execute.',
415
522
  },
416
523
  }),
417
- methodSlot("hypothesis_under_test", "The assumption, hypothesis, or uncertainty the experiment is designed to test.", {
524
+ methodSlot('hypothesis_under_test', 'The assumption, hypothesis, or uncertainty the experiment is designed to test.', {
418
525
  required: false,
419
- acceptedEntityTypes: ["assumption_hypothesis", "uncertainty", "belief"],
526
+ acceptedEntityTypes: ['assumption_hypothesis', 'uncertainty', 'belief'],
420
527
  diagnostics: {
421
- weak: "Clarify what assumption or uncertainty this experiment tests.",
528
+ weak: 'Clarify what assumption or uncertainty this experiment tests.',
422
529
  },
423
530
  }),
424
- methodSlot("success_metric", "The metric, threshold, or evidence that determines the result of the experiment.", {
531
+ methodSlot('success_metric', 'The metric, threshold, or evidence that determines the result of the experiment.', {
425
532
  required: false,
426
- acceptedEntityTypes: ["metric", "threshold", "evidence"],
533
+ acceptedEntityTypes: ['metric', 'threshold', 'evidence'],
427
534
  diagnostics: {
428
- weak: "Clarify how the experiment result will be judged.",
535
+ weak: 'Clarify how the experiment result will be judged.',
429
536
  },
430
537
  }),
431
- methodSlot("sample_or_scope", "The sample, audience, geography, product set, or operating scope of the experiment.", {
538
+ methodSlot('sample_or_scope', 'The sample, audience, geography, product set, or operating scope of the experiment.', {
432
539
  required: false,
433
- acceptedEntityTypes: ["segment", "sample", "geo", "product", "scope"],
540
+ acceptedEntityTypes: ['segment', 'sample', 'geo', 'product', 'scope'],
434
541
  diagnostics: {
435
- weak: "Clarify the experiment scope.",
542
+ weak: 'Clarify the experiment scope.',
436
543
  },
437
544
  }),
438
545
  ];
439
546
  const actionSlots = [
440
- methodSlot("action", "The concrete task, decision, change, or implementation step to perform.", {
441
- acceptedEntityTypes: ["action", "task", "decision", "change", "implementation_step"],
547
+ methodSlot('action', 'The concrete task, decision, change, or implementation step to perform.', {
548
+ acceptedEntityTypes: [
549
+ 'action',
550
+ 'task',
551
+ 'decision',
552
+ 'change',
553
+ 'implementation_step',
554
+ ],
442
555
  diagnostics: {
443
- missing: "State the concrete action to perform.",
444
- weak: "Make the action specific enough to assign or execute.",
556
+ missing: 'State the concrete action to perform.',
557
+ weak: 'Make the action specific enough to assign or execute.',
445
558
  },
446
559
  }),
447
- methodSlot("owner_or_actor", "The person, team, function, or partner responsible for the action.", {
560
+ methodSlot('owner_or_actor', 'The person, team, function, or partner responsible for the action.', {
448
561
  required: false,
449
- acceptedEntityTypes: ["person", "team", "function", "partner", "organization"],
562
+ acceptedEntityTypes: [
563
+ 'person',
564
+ 'team',
565
+ 'function',
566
+ 'partner',
567
+ 'organization',
568
+ ],
450
569
  diagnostics: {
451
- weak: "Clarify who owns or performs the action.",
570
+ weak: 'Clarify who owns or performs the action.',
452
571
  },
453
572
  }),
454
- methodSlot("target_object", "The process, product, customer, system, resource, or activity the action changes.", {
573
+ methodSlot('target_object', 'The process, product, customer, system, resource, or activity the action changes.', {
455
574
  required: false,
456
- acceptedEntityTypes: ["process", "product", "customer", "system", "resource", "activity"],
575
+ acceptedEntityTypes: [
576
+ 'process',
577
+ 'product',
578
+ 'customer',
579
+ 'system',
580
+ 'resource',
581
+ 'activity',
582
+ ],
457
583
  diagnostics: {
458
- weak: "Clarify what the action changes.",
584
+ weak: 'Clarify what the action changes.',
459
585
  },
460
586
  }),
461
- methodSlot("timeframe", "The deadline, cadence, or timing of the action.", {
587
+ methodSlot('timeframe', 'The deadline, cadence, or timing of the action.', {
462
588
  required: false,
463
- acceptedEntityTypes: ["timeframe"],
589
+ acceptedEntityTypes: ['timeframe'],
464
590
  diagnostics: {
465
- weak: "Clarify when the action should happen.",
591
+ weak: 'Clarify when the action should happen.',
466
592
  },
467
593
  }),
468
594
  ];
469
595
  const investmentSlots = [
470
- methodSlot("investment_amount", "The quantity of capital, resources, or effort to invest.", {
471
- acceptedEntityTypes: ["metric", "currency", "quantity", "resource"],
596
+ methodSlot('investment_amount', 'The quantity of capital, resources, or effort to invest.', {
597
+ acceptedEntityTypes: ['metric', 'currency', 'quantity', 'resource'],
472
598
  diagnostics: {
473
- missing: "State the investment amount or resource commitment.",
474
- weak: "Make the investment amount specific enough to compare.",
599
+ missing: 'State the investment amount or resource commitment.',
600
+ weak: 'Make the investment amount specific enough to compare.',
475
601
  },
476
602
  }),
477
- methodSlot("investment_type", "The category or object of investment.", {
478
- acceptedEntityTypes: ["capability", "system", "asset", "initiative", "resource"],
603
+ methodSlot('investment_type', 'The category or object of investment.', {
604
+ acceptedEntityTypes: [
605
+ 'capability',
606
+ 'system',
607
+ 'asset',
608
+ 'initiative',
609
+ 'resource',
610
+ ],
479
611
  diagnostics: {
480
- missing: "Identify what type of investment is being considered.",
481
- weak: "Make the investment type specific.",
612
+ missing: 'Identify what type of investment is being considered.',
613
+ weak: 'Make the investment type specific.',
482
614
  },
483
615
  }),
484
- methodSlot("investment_period", "The timeframe over which the investment is made or evaluated.", {
616
+ methodSlot('investment_period', 'The timeframe over which the investment is made or evaluated.', {
485
617
  required: false,
486
- acceptedEntityTypes: ["timeframe"],
618
+ acceptedEntityTypes: ['timeframe'],
487
619
  diagnostics: {
488
- weak: "Clarify the investment period.",
620
+ weak: 'Clarify the investment period.',
489
621
  },
490
622
  }),
491
623
  ];
492
624
  const estimateSlots = [
493
- methodSlot("estimate_amount", "The estimated quantity, value, range, or probability.", {
494
- acceptedEntityTypes: ["metric", "currency", "quantity", "probability", "range"],
625
+ methodSlot('estimate_amount', 'The estimated quantity, value, range, or probability.', {
626
+ acceptedEntityTypes: [
627
+ 'metric',
628
+ 'currency',
629
+ 'quantity',
630
+ 'probability',
631
+ 'range',
632
+ ],
495
633
  diagnostics: {
496
- missing: "State the estimate amount, value, range, or probability.",
497
- weak: "Make the estimate specific enough to compare or revise.",
634
+ missing: 'State the estimate amount, value, range, or probability.',
635
+ weak: 'Make the estimate specific enough to compare or revise.',
498
636
  },
499
637
  }),
500
- methodSlot("estimate_type", "The metric, outcome, cost, revenue, share, volume, or effect being estimated.", {
501
- acceptedEntityTypes: ["metric", "outcome", "cost", "revenue", "share", "volume"],
638
+ methodSlot('estimate_type', 'The metric, outcome, cost, revenue, share, volume, or effect being estimated.', {
639
+ acceptedEntityTypes: [
640
+ 'metric',
641
+ 'outcome',
642
+ 'cost',
643
+ 'revenue',
644
+ 'share',
645
+ 'volume',
646
+ ],
502
647
  diagnostics: {
503
- missing: "Identify what is being estimated.",
504
- weak: "Make the estimate type specific.",
648
+ missing: 'Identify what is being estimated.',
649
+ weak: 'Make the estimate type specific.',
505
650
  },
506
651
  }),
507
- methodSlot("estimate_period", "The timeframe or period for the estimate.", {
652
+ methodSlot('estimate_period', 'The timeframe or period for the estimate.', {
508
653
  required: false,
509
- acceptedEntityTypes: ["timeframe"],
654
+ acceptedEntityTypes: ['timeframe'],
510
655
  diagnostics: {
511
- weak: "Clarify the estimate period.",
656
+ weak: 'Clarify the estimate period.',
512
657
  },
513
658
  }),
514
- methodSlot("basis", "The assumption, experiment, benchmark, or source that supports the estimate.", {
659
+ methodSlot('basis', 'The assumption, experiment, benchmark, or source that supports the estimate.', {
515
660
  required: false,
516
661
  substitutable: false,
517
- acceptedEntityTypes: ["assumption_hypothesis", "experiment", "benchmark", "source"],
662
+ acceptedEntityTypes: [
663
+ 'assumption_hypothesis',
664
+ 'experiment',
665
+ 'benchmark',
666
+ 'source',
667
+ ],
518
668
  diagnostics: {
519
- weak: "Clarify the basis for the estimate if auditability matters.",
669
+ weak: 'Clarify the basis for the estimate if auditability matters.',
520
670
  },
521
671
  }),
522
672
  ];
523
673
  const baselineSlots = [
524
- methodSlot("measured_object", "The metric, process, behavior, asset, segment, or outcome being measured as the starting point.", {
525
- acceptedEntityTypes: ["metric", "process", "behavior", "asset", "segment", "outcome"],
674
+ methodSlot('measured_object', 'The metric, process, behavior, asset, segment, or outcome being measured as the starting point.', {
675
+ acceptedEntityTypes: [
676
+ 'metric',
677
+ 'process',
678
+ 'behavior',
679
+ 'asset',
680
+ 'segment',
681
+ 'outcome',
682
+ ],
526
683
  diagnostics: {
527
- missing: "Identify what the baseline measures.",
528
- weak: "Make the measured object specific enough to compare against future outcomes.",
684
+ missing: 'Identify what the baseline measures.',
685
+ weak: 'Make the measured object specific enough to compare against future outcomes.',
529
686
  },
530
687
  }),
531
- methodSlot("baseline_value", "The starting value, level, state, quantity, or condition before intervention.", {
532
- acceptedEntityTypes: ["metric", "quantity", "state", "condition", "value"],
688
+ methodSlot('baseline_value', 'The starting value, level, state, quantity, or condition before intervention.', {
689
+ acceptedEntityTypes: [
690
+ 'metric',
691
+ 'quantity',
692
+ 'state',
693
+ 'condition',
694
+ 'value',
695
+ ],
533
696
  diagnostics: {
534
- missing: "State the baseline value or starting condition.",
535
- weak: "Make the baseline value specific enough to compare.",
697
+ missing: 'State the baseline value or starting condition.',
698
+ weak: 'Make the baseline value specific enough to compare.',
536
699
  },
537
700
  }),
538
- methodSlot("measurement_period", "The period over which the baseline was measured.", {
701
+ methodSlot('measurement_period', 'The period over which the baseline was measured.', {
539
702
  required: false,
540
- acceptedEntityTypes: ["timeframe"],
703
+ acceptedEntityTypes: ['timeframe'],
541
704
  diagnostics: {
542
- weak: "Clarify the measurement period for the baseline.",
705
+ weak: 'Clarify the measurement period for the baseline.',
543
706
  },
544
707
  }),
545
- methodSlot("source_context", "The source, dataset, system, or evidence basis for the baseline.", {
708
+ methodSlot('source_context', 'The source, dataset, system, or evidence basis for the baseline.', {
546
709
  required: false,
547
710
  substitutable: false,
548
- acceptedEntityTypes: ["source", "dataset", "system", "evidence"],
711
+ acceptedEntityTypes: ['source', 'dataset', 'system', 'evidence'],
549
712
  diagnostics: {
550
- weak: "Clarify the source of the baseline if auditability matters.",
713
+ weak: 'Clarify the source of the baseline if auditability matters.',
551
714
  },
552
715
  }),
553
- methodSlot("comparison_context", "The comparator, prior period, benchmark, or reference point used to interpret the baseline.", {
716
+ methodSlot('comparison_context', 'The comparator, prior period, benchmark, or reference point used to interpret the baseline.', {
554
717
  required: false,
555
- acceptedEntityTypes: ["benchmark", "prior_period", "reference_point", "comparison"],
718
+ acceptedEntityTypes: [
719
+ 'benchmark',
720
+ 'prior_period',
721
+ 'reference_point',
722
+ 'comparison',
723
+ ],
556
724
  diagnostics: {
557
- weak: "Clarify the comparison context if it affects interpretation.",
725
+ weak: 'Clarify the comparison context if it affects interpretation.',
558
726
  },
559
727
  }),
560
728
  ];
561
729
  const outcomeSlots = [
562
- methodSlot("target_object", "The metric, business result, customer behavior, capability, or strategic state targeted by the strategy.", {
563
- acceptedEntityTypes: ["metric", "outcome", "behavior", "capability", "strategic_state"],
730
+ methodSlot('target_object', 'The metric, business result, customer behavior, capability, or strategic state targeted by the strategy.', {
731
+ acceptedEntityTypes: [
732
+ 'metric',
733
+ 'outcome',
734
+ 'behavior',
735
+ 'capability',
736
+ 'strategic_state',
737
+ ],
564
738
  diagnostics: {
565
- missing: "Identify what outcome is being targeted.",
566
- weak: "Make the outcome object specific enough to measure.",
739
+ missing: 'Identify what outcome is being targeted.',
740
+ weak: 'Make the outcome object specific enough to measure.',
567
741
  },
568
742
  }),
569
- methodSlot("target_value", "The desired value, state, quantity, threshold, or direction of the outcome.", {
570
- acceptedEntityTypes: ["metric", "quantity", "threshold", "state", "direction"],
743
+ methodSlot('target_value', 'The desired value, state, quantity, threshold, or direction of the outcome.', {
744
+ acceptedEntityTypes: [
745
+ 'metric',
746
+ 'quantity',
747
+ 'threshold',
748
+ 'state',
749
+ 'direction',
750
+ ],
571
751
  diagnostics: {
572
- missing: "State the target value or desired state.",
573
- weak: "Make the target value specific enough to judge success.",
752
+ missing: 'State the target value or desired state.',
753
+ weak: 'Make the target value specific enough to judge success.',
574
754
  },
575
755
  }),
576
- methodSlot("timeframe", "The timeframe by which the outcome should be achieved or assessed.", {
756
+ methodSlot('timeframe', 'The timeframe by which the outcome should be achieved or assessed.', {
577
757
  required: false,
578
- acceptedEntityTypes: ["timeframe"],
758
+ acceptedEntityTypes: ['timeframe'],
579
759
  diagnostics: {
580
- weak: "Clarify when the outcome should be achieved.",
760
+ weak: 'Clarify when the outcome should be achieved.',
581
761
  },
582
762
  }),
583
- methodSlot("success_condition", "The condition under which the outcome should be considered achieved.", {
763
+ methodSlot('success_condition', 'The condition under which the outcome should be considered achieved.', {
584
764
  required: false,
585
- acceptedEntityTypes: ["condition", "threshold", "metric"],
765
+ acceptedEntityTypes: ['condition', 'threshold', 'metric'],
586
766
  diagnostics: {
587
- weak: "Clarify what would count as success.",
767
+ weak: 'Clarify what would count as success.',
588
768
  },
589
769
  }),
590
- methodSlot("strategic_effect", "The strategic effect or business consequence expected if the outcome is achieved.", {
770
+ methodSlot('strategic_effect', 'The strategic effect or business consequence expected if the outcome is achieved.', {
591
771
  required: false,
592
- acceptedEntityTypes: ["effect", "consequence", "advantage", "impact"],
772
+ acceptedEntityTypes: ['effect', 'consequence', 'advantage', 'impact'],
593
773
  diagnostics: {
594
- weak: "Clarify why this outcome matters strategically.",
774
+ weak: 'Clarify why this outcome matters strategically.',
595
775
  },
596
776
  }),
597
777
  ];
598
778
  const performanceVariableSlots = [
599
- methodSlot("metric", "The variable, metric, indicator, or measure used to track performance.", {
600
- acceptedEntityTypes: ["metric", "indicator", "measure", "variable"],
779
+ methodSlot('metric', 'The variable, metric, indicator, or measure used to track performance.', {
780
+ acceptedEntityTypes: ['metric', 'indicator', 'measure', 'variable'],
601
781
  diagnostics: {
602
- missing: "Identify the performance variable to track.",
603
- weak: "Make the performance variable specific enough to measure.",
782
+ missing: 'Identify the performance variable to track.',
783
+ weak: 'Make the performance variable specific enough to measure.',
604
784
  },
605
785
  }),
606
- methodSlot("measurement_method", "How the variable is measured, calculated, or observed.", {
786
+ methodSlot('measurement_method', 'How the variable is measured, calculated, or observed.', {
607
787
  required: false,
608
788
  substitutable: false,
609
- acceptedEntityTypes: ["method", "calculation", "system", "observation"],
789
+ acceptedEntityTypes: ['method', 'calculation', 'system', 'observation'],
610
790
  diagnostics: {
611
- weak: "Clarify how the performance variable is measured.",
791
+ weak: 'Clarify how the performance variable is measured.',
612
792
  },
613
793
  }),
614
- methodSlot("cadence", "How often the performance variable should be measured or reviewed.", {
794
+ methodSlot('cadence', 'How often the performance variable should be measured or reviewed.', {
615
795
  required: false,
616
- acceptedEntityTypes: ["timeframe", "cadence"],
796
+ acceptedEntityTypes: ['timeframe', 'cadence'],
617
797
  diagnostics: {
618
- weak: "Clarify how often this variable should be reviewed.",
798
+ weak: 'Clarify how often this variable should be reviewed.',
619
799
  },
620
800
  }),
621
- methodSlot("threshold", "The trigger, target, tolerance, or threshold used to interpret the variable.", {
801
+ methodSlot('threshold', 'The trigger, target, tolerance, or threshold used to interpret the variable.', {
622
802
  required: false,
623
- acceptedEntityTypes: ["threshold", "target", "tolerance", "metric"],
803
+ acceptedEntityTypes: ['threshold', 'target', 'tolerance', 'metric'],
624
804
  diagnostics: {
625
- weak: "Clarify the threshold that makes this variable actionable.",
805
+ weak: 'Clarify the threshold that makes this variable actionable.',
626
806
  },
627
807
  }),
628
- methodSlot("owner_or_source", "The owner, system, dataset, or source responsible for the variable.", {
808
+ methodSlot('owner_or_source', 'The owner, system, dataset, or source responsible for the variable.', {
629
809
  required: false,
630
810
  substitutable: false,
631
- acceptedEntityTypes: ["owner", "system", "dataset", "source"],
811
+ acceptedEntityTypes: ['owner', 'system', 'dataset', 'source'],
632
812
  diagnostics: {
633
- weak: "Clarify who owns or supplies this performance variable.",
813
+ weak: 'Clarify who owns or supplies this performance variable.',
634
814
  },
635
815
  }),
636
816
  ];
637
817
  const capabilitySlots = [
638
- methodSlot("capability", "The organizational ability, competency, resource, process, or capacity required to execute the strategy.", {
639
- acceptedEntityTypes: ["capability", "competency", "resource", "process", "capacity"],
818
+ methodSlot('capability', 'The organizational ability, competency, resource, process, or capacity required to execute the strategy.', {
819
+ acceptedEntityTypes: [
820
+ 'capability',
821
+ 'competency',
822
+ 'resource',
823
+ 'process',
824
+ 'capacity',
825
+ ],
640
826
  diagnostics: {
641
- missing: "Identify the capability required to support the strategy.",
642
- weak: "Make the capability specific enough to build, assess, or assign.",
827
+ missing: 'Identify the capability required to support the strategy.',
828
+ weak: 'Make the capability specific enough to build, assess, or assign.',
643
829
  },
644
830
  }),
645
- methodSlot("capability_purpose", "The strategic purpose or activity the capability enables.", {
831
+ methodSlot('capability_purpose', 'The strategic purpose or activity the capability enables.', {
646
832
  required: false,
647
- acceptedEntityTypes: ["purpose", "activity", "solution", "guiding_policy", "outcome"],
833
+ acceptedEntityTypes: [
834
+ 'purpose',
835
+ 'activity',
836
+ 'solution',
837
+ 'guiding_policy',
838
+ 'outcome',
839
+ ],
648
840
  diagnostics: {
649
- weak: "Clarify what strategic purpose this capability serves.",
841
+ weak: 'Clarify what strategic purpose this capability serves.',
650
842
  },
651
843
  }),
652
- methodSlot("maturity_or_gap", "The current maturity, deficiency, gap, or development need for the capability.", {
844
+ methodSlot('maturity_or_gap', 'The current maturity, deficiency, gap, or development need for the capability.', {
653
845
  required: false,
654
- acceptedEntityTypes: ["maturity", "gap", "deficiency", "need"],
846
+ acceptedEntityTypes: ['maturity', 'gap', 'deficiency', 'need'],
655
847
  diagnostics: {
656
- weak: "Clarify whether the capability exists, is weak, or needs to be built.",
848
+ weak: 'Clarify whether the capability exists, is weak, or needs to be built.',
657
849
  },
658
850
  }),
659
- methodSlot("owner_or_location", "The function, team, partner, or part of the organization where the capability lives.", {
851
+ methodSlot('owner_or_location', 'The function, team, partner, or part of the organization where the capability lives.', {
660
852
  required: false,
661
- acceptedEntityTypes: ["function", "team", "partner", "organization"],
853
+ acceptedEntityTypes: ['function', 'team', 'partner', 'organization'],
662
854
  diagnostics: {
663
- weak: "Clarify where this capability is owned or located.",
855
+ weak: 'Clarify where this capability is owned or located.',
664
856
  },
665
857
  }),
666
858
  ];
667
859
  const systemSlots = [
668
- methodSlot("system", "The process, tool, governance mechanism, operating system, data system, or routine that supports the capability.", {
669
- acceptedEntityTypes: ["system", "process", "tool", "governance", "routine", "data_system"],
860
+ methodSlot('system', 'The process, tool, governance mechanism, operating system, data system, or routine that supports the capability.', {
861
+ acceptedEntityTypes: [
862
+ 'system',
863
+ 'process',
864
+ 'tool',
865
+ 'governance',
866
+ 'routine',
867
+ 'data_system',
868
+ ],
670
869
  diagnostics: {
671
- missing: "Identify the system that supports execution.",
672
- weak: "Make the system specific enough to design or operate.",
870
+ missing: 'Identify the system that supports execution.',
871
+ weak: 'Make the system specific enough to design or operate.',
673
872
  },
674
873
  }),
675
- methodSlot("supported_capability", "The capability, action, or operating need the system supports.", {
874
+ methodSlot('supported_capability', 'The capability, action, or operating need the system supports.', {
676
875
  required: false,
677
- acceptedEntityTypes: ["capability", "action", "operation", "need"],
876
+ acceptedEntityTypes: ['capability', 'action', 'operation', 'need'],
678
877
  diagnostics: {
679
- weak: "Clarify what capability or operating need this system supports.",
878
+ weak: 'Clarify what capability or operating need this system supports.',
680
879
  },
681
880
  }),
682
- methodSlot("operating_cadence", "The cadence, trigger, workflow, or operating rhythm for the system.", {
881
+ methodSlot('operating_cadence', 'The cadence, trigger, workflow, or operating rhythm for the system.', {
683
882
  required: false,
684
- acceptedEntityTypes: ["cadence", "trigger", "workflow", "timeframe"],
883
+ acceptedEntityTypes: ['cadence', 'trigger', 'workflow', 'timeframe'],
685
884
  diagnostics: {
686
- weak: "Clarify how or when the system operates.",
885
+ weak: 'Clarify how or when the system operates.',
687
886
  },
688
887
  }),
689
- methodSlot("control_or_feedback", "The control, feedback loop, metric, or governance signal used by the system.", {
888
+ methodSlot('control_or_feedback', 'The control, feedback loop, metric, or governance signal used by the system.', {
690
889
  required: false,
691
- acceptedEntityTypes: ["control", "feedback", "metric", "governance"],
890
+ acceptedEntityTypes: ['control', 'feedback', 'metric', 'governance'],
692
891
  diagnostics: {
693
- weak: "Clarify how the system controls or learns from performance.",
892
+ weak: 'Clarify how the system controls or learns from performance.',
694
893
  },
695
894
  }),
696
895
  ];
697
896
  const principleSlots = [
698
- methodSlot("principle", "The durable rule, standard, belief, or operating doctrine that should guide decisions.", {
699
- acceptedEntityTypes: ["principle", "standard", "belief", "doctrine", "rule"],
897
+ methodSlot('principle', 'The durable rule, standard, belief, or operating doctrine that should guide decisions.', {
898
+ acceptedEntityTypes: [
899
+ 'principle',
900
+ 'standard',
901
+ 'belief',
902
+ 'doctrine',
903
+ 'rule',
904
+ ],
700
905
  diagnostics: {
701
- missing: "State the principle that should guide decisions.",
702
- weak: "Make the principle specific enough to constrain choices.",
906
+ missing: 'State the principle that should guide decisions.',
907
+ weak: 'Make the principle specific enough to constrain choices.',
703
908
  },
704
909
  }),
705
- methodSlot("decision_context", "The decision, behavior, system, team, or tradeoff the principle governs.", {
910
+ methodSlot('decision_context', 'The decision, behavior, system, team, or tradeoff the principle governs.', {
706
911
  required: false,
707
- acceptedEntityTypes: ["decision", "behavior", "system", "team", "tradeoff"],
912
+ acceptedEntityTypes: [
913
+ 'decision',
914
+ 'behavior',
915
+ 'system',
916
+ 'team',
917
+ 'tradeoff',
918
+ ],
708
919
  diagnostics: {
709
- weak: "Clarify what context this principle governs.",
920
+ weak: 'Clarify what context this principle governs.',
710
921
  },
711
922
  }),
712
- methodSlot("priority_or_tradeoff", "The priority, tradeoff, or preference implied by the principle.", {
923
+ methodSlot('priority_or_tradeoff', 'The priority, tradeoff, or preference implied by the principle.', {
713
924
  required: false,
714
- acceptedEntityTypes: ["priority", "tradeoff", "preference"],
925
+ acceptedEntityTypes: ['priority', 'tradeoff', 'preference'],
715
926
  diagnostics: {
716
- weak: "Clarify what this principle prioritizes or rules out.",
927
+ weak: 'Clarify what this principle prioritizes or rules out.',
717
928
  },
718
929
  }),
719
- methodSlot("exception_condition", "The condition under which the principle may not apply.", {
930
+ methodSlot('exception_condition', 'The condition under which the principle may not apply.', {
720
931
  required: false,
721
- acceptedEntityTypes: ["condition", "exception", "constraint"],
932
+ acceptedEntityTypes: ['condition', 'exception', 'constraint'],
722
933
  diagnostics: {
723
- weak: "Clarify exceptions if the principle is not universal.",
934
+ weak: 'Clarify exceptions if the principle is not universal.',
724
935
  },
725
936
  }),
726
937
  ];
@@ -737,26 +948,27 @@ function element(position, type, component, expectedMood, examples, options = {}
737
948
  position,
738
949
  expectedMood,
739
950
  syntacticSlots: options.syntacticSlots ??
740
- (expectedMood === "imperative"
951
+ (expectedMood === 'imperative'
741
952
  ? imperativeSyntax
742
- : expectedMood === "noun_phrase"
953
+ : expectedMood === 'noun_phrase'
743
954
  ? nounPhraseSyntax
744
955
  : indicativeSyntax),
745
956
  methodSlots: options.methodSlots ??
746
- (expectedMood === "imperative" || expectedMood === "noun_phrase"
957
+ (expectedMood === 'imperative' || expectedMood === 'noun_phrase'
747
958
  ? imperativeMethodSlots
748
959
  : indicativeMethodSlots),
749
960
  examples,
750
961
  rules: {
751
962
  examplesRequired: options.rules?.examplesRequired ?? true,
752
963
  minimumRequiredSlots: options.rules?.minimumRequiredSlots ??
753
- (options.methodSlots ?? (expectedMood === "imperative" || expectedMood === "noun_phrase"
754
- ? imperativeMethodSlots
755
- : indicativeMethodSlots)).filter((slot) => slot.required).length,
964
+ (options.methodSlots ??
965
+ (expectedMood === 'imperative' || expectedMood === 'noun_phrase'
966
+ ? imperativeMethodSlots
967
+ : indicativeMethodSlots)).filter((slot) => slot.required).length,
756
968
  allowInference: options.rules?.allowInference ?? false,
757
969
  diagnostics: {
758
970
  wrongMood: options.rules?.diagnostics?.wrongMood ??
759
- `${schemaElement.label} should be written in ${expectedMood.replace("_", " ")} mood.`,
971
+ `${schemaElement.label} should be written in ${expectedMood.replace('_', ' ')} mood.`,
760
972
  insufficient: options.rules?.diagnostics?.insufficient ??
761
973
  `${schemaElement.label} does not yet contain enough method substance.`,
762
974
  missing: options.rules?.diagnostics?.missing ??
@@ -814,304 +1026,311 @@ function elementPositionInSchema(type) {
814
1026
  const index = elements.findIndex((element) => element.value === type);
815
1027
  if (index === -1)
816
1028
  continue;
817
- return (componentPosition.get(component) ?? 0) * 100 + index;
1029
+ return ((componentPosition.get(component) ??
1030
+ 0) *
1031
+ 100 +
1032
+ index);
818
1033
  }
819
1034
  return 9999;
820
1035
  }
821
1036
  export const elementDefinitions = [
822
- element(elementPositionInSchema("key_challenge"), "key_challenge", "diagnosis", "indicative", [
823
- "Anti-competition laws in Australia hinder the ability to grow through acquisitions.",
1037
+ element(elementPositionInSchema('key_challenge'), 'key_challenge', 'diagnosis', 'indicative', [
1038
+ 'Anti-competition laws in Australia hinder the ability to grow through acquisitions.',
824
1039
  ], {
825
1040
  methodSlots: keyChallengeSlots,
826
1041
  rules: {
827
1042
  minimumRequiredSlots: 3,
828
1043
  diagnostics: {
829
- insufficient: "A key challenge must identify who is facing the challenge, what pressure is creating it, and why it matters.",
1044
+ insufficient: 'A key challenge must identify who is facing the challenge, what pressure is creating it, and why it matters.',
830
1045
  },
831
1046
  },
832
1047
  }),
833
- element(elementPositionInSchema("supporting_fact"), "supporting_fact", "diagnosis", "indicative", [
834
- "Q1 FY24 sales reached $1.5M, 18% below the prior year.",
835
- "Foot traffic declined 12% across metropolitan stores over the past two quarters.",
1048
+ element(elementPositionInSchema('supporting_fact'), 'supporting_fact', 'diagnosis', 'indicative', [
1049
+ 'Q1 FY24 sales reached $1.5M, 18% below the prior year.',
1050
+ 'Foot traffic declined 12% across metropolitan stores over the past two quarters.',
836
1051
  ], {
837
1052
  methodSlots: supportingFactSlots,
838
1053
  rules: {
839
1054
  minimumRequiredSlots: 2,
840
1055
  diagnostics: {
841
- insufficient: "A supporting fact must identify what is being measured or observed and state the evidence clearly.",
1056
+ insufficient: 'A supporting fact must identify what is being measured or observed and state the evidence clearly.',
842
1057
  },
843
1058
  },
844
1059
  }),
845
- element(elementPositionInSchema("impact"), "impact", "diagnosis", "indicative", [
846
- "Employee turnover rates increase substantially when aggressive price competition limits earnings potential for sales personnel dependent on commission-based income.",
847
- "Interest rate adjustments accelerate the depreciation of inventory holdings, reducing the collateral value available for securing additional floor plan financing.",
848
- "Customer acquisition costs may remain high due to high percentage of offline media spend.",
1060
+ element(elementPositionInSchema('impact'), 'impact', 'diagnosis', 'indicative', [
1061
+ 'Employee turnover rates increase substantially when aggressive price competition limits earnings potential for sales personnel dependent on commission-based income.',
1062
+ 'Interest rate adjustments accelerate the depreciation of inventory holdings, reducing the collateral value available for securing additional floor plan financing.',
1063
+ 'Customer acquisition costs may remain high due to high percentage of offline media spend.',
849
1064
  ], {
850
- aliases: ["associated_impact"],
1065
+ aliases: ['associated_impact'],
851
1066
  methodSlots: impactSlots,
852
1067
  rules: {
853
1068
  minimumRequiredSlots: 2,
854
1069
  diagnostics: {
855
- insufficient: "An impact must identify what is affected and explain how the challenge creates that effect.",
1070
+ insufficient: 'An impact must identify what is affected and explain how the challenge creates that effect.',
856
1071
  },
857
1072
  },
858
1073
  }),
859
- element(elementPositionInSchema("guiding_policy"), "guiding_policy", "method", "imperative", [
860
- "Use dynamically adjusted prices during off-peak periods.",
861
- "Shift down market to lower priced goods.",
862
- "Focus on secondary sale periods.",
863
- "Use network effects to expand our audience and identify new customer segments.",
1074
+ element(elementPositionInSchema('guiding_policy'), 'guiding_policy', 'method', 'imperative', [
1075
+ 'Use dynamically adjusted prices during off-peak periods.',
1076
+ 'Shift down market to lower priced goods.',
1077
+ 'Focus on secondary sale periods.',
1078
+ 'Use network effects to expand our audience and identify new customer segments.',
864
1079
  ], {
865
1080
  methodSlots: guidingPolicySlots,
866
1081
  allowedEntityTypes: [
867
- "Category",
868
- "Segment",
869
- "Geography",
870
- "Channel",
871
- "Function",
872
- "Cost",
873
- "Labour",
874
- "Approach",
875
- "Method",
876
- "Move",
877
- "Position",
878
- "Instrument",
879
- "Source of Advantage",
880
- "Resource",
881
- "Other",
1082
+ 'Category',
1083
+ 'Segment',
1084
+ 'Geography',
1085
+ 'Channel',
1086
+ 'Function',
1087
+ 'Cost',
1088
+ 'Labour',
1089
+ 'Approach',
1090
+ 'Method',
1091
+ 'Move',
1092
+ 'Position',
1093
+ 'Instrument',
1094
+ 'Source of Advantage',
1095
+ 'Resource',
1096
+ 'Other',
882
1097
  ],
883
1098
  rules: {
884
1099
  minimumRequiredSlots: 2,
885
1100
  diagnostics: {
886
- insufficient: "A guiding policy must state a strategic action and the object it acts on.",
1101
+ insufficient: 'A guiding policy must state a strategic action and the object it acts on.',
887
1102
  },
888
1103
  },
889
1104
  }),
890
- element(elementPositionInSchema("competitor_move"), "competitor_move", "method", "indicative", [
891
- "Competitors will reduce stock levels at similar rates to maintain lower inventory costs.",
892
- "Google may impose restrictions on third-party applications, making access to distribution channels more difficult.",
1105
+ element(elementPositionInSchema('competitor_move'), 'competitor_move', 'method', 'indicative', [
1106
+ 'Competitors will reduce stock levels at similar rates to maintain lower inventory costs.',
1107
+ 'Google may impose restrictions on third-party applications, making access to distribution channels more difficult.',
893
1108
  ], {
894
1109
  methodSlots: competitorMoveSlots,
895
1110
  rules: {
896
1111
  minimumRequiredSlots: 2,
897
1112
  diagnostics: {
898
- insufficient: "A competitor move must identify the actor making the move and the move being made.",
1113
+ insufficient: 'A competitor move must identify the actor making the move and the move being made.',
899
1114
  },
900
1115
  },
901
1116
  }),
902
- element(elementPositionInSchema("scope"), "scope", "method", "imperative", [
903
- "Open new stores in Australia and New Zealand.",
904
- "Target women 25-45 years old.",
905
- "Prioritize API-driven integrations with enterprise resource planning platforms.",
1117
+ element(elementPositionInSchema('scope'), 'scope', 'method', 'imperative', [
1118
+ 'Open new stores in Australia and New Zealand.',
1119
+ 'Target women 25-45 years old.',
1120
+ 'Prioritize API-driven integrations with enterprise resource planning platforms.',
906
1121
  ], {
907
1122
  methodSlots: scopeSlots,
908
- allowedEntityTypes: ["Audience", "Market", "Category", "Product", "Service", "Vertical Stage", "Other"],
1123
+ allowedEntityTypes: [
1124
+ 'Audience',
1125
+ 'Market',
1126
+ 'Category',
1127
+ 'Product',
1128
+ 'Service',
1129
+ 'Vertical Stage',
1130
+ 'Other',
1131
+ ],
909
1132
  rules: {
910
1133
  minimumRequiredSlots: 1,
911
1134
  diagnostics: {
912
- insufficient: "A scope element must define what is included, excluded, or bounded.",
1135
+ insufficient: 'A scope element must define what is included, excluded, or bounded.',
913
1136
  },
914
1137
  },
915
1138
  }),
916
- element(elementPositionInSchema("constraint"), "constraint", "method", "indicative", [
917
- "Differences in advertising regulations across geographic regions means some campaigns cannot be replicated.",
918
- "Production line volumes cannot exceed 2,000 units per day.",
1139
+ element(elementPositionInSchema('constraint'), 'constraint', 'method', 'indicative', [
1140
+ 'Differences in advertising regulations across geographic regions means some campaigns cannot be replicated.',
1141
+ 'Production line volumes cannot exceed 2,000 units per day.',
919
1142
  ], {
920
1143
  methodSlots: constraintSlots,
921
1144
  allowedEntityTypes: [
922
- "internal",
923
- "externality",
924
- "fiscal",
925
- "regulatory",
926
- "competitive",
927
- "technological",
928
- "environmental",
929
- "social",
930
- "temporal",
931
- "other",
1145
+ 'internal',
1146
+ 'externality',
1147
+ 'fiscal',
1148
+ 'regulatory',
1149
+ 'competitive',
1150
+ 'technological',
1151
+ 'environmental',
1152
+ 'social',
1153
+ 'temporal',
1154
+ 'other',
932
1155
  ],
933
1156
  rules: {
934
1157
  minimumRequiredSlots: 2,
935
1158
  diagnostics: {
936
- insufficient: "A constraint must identify the source of the limitation and the limitation it imposes.",
1159
+ insufficient: 'A constraint must identify the source of the limitation and the limitation it imposes.',
937
1160
  },
938
1161
  },
939
1162
  }),
940
- element(elementPositionInSchema("solution"), "solution", "initiatives", "noun_phrase", [
941
- "Remove poor profit margin products.",
942
- "Exit the Australian market.",
943
- "Divest Catch of the Day and seek to acquire major global brand.",
1163
+ element(elementPositionInSchema('solution'), 'solution', 'initiatives', 'noun_phrase', [
1164
+ 'Remove poor profit margin products.',
1165
+ 'Exit the Australian market.',
1166
+ 'Divest Catch of the Day and seek to acquire major global brand.',
944
1167
  ], {
945
- aliases: ["solution_alternative"],
1168
+ aliases: ['solution_alternative'],
946
1169
  methodSlots: solutionSlots,
947
1170
  rules: {
948
1171
  minimumRequiredSlots: 1,
949
1172
  diagnostics: {
950
- insufficient: "A solution must identify the strategic option or intervention being considered.",
1173
+ insufficient: 'A solution must identify the strategic option or intervention being considered.',
951
1174
  },
952
1175
  },
953
1176
  }),
954
- element(elementPositionInSchema("assumption_hypothesis"), "assumption_hypothesis", "initiatives", "indicative", [
955
- "Younger women are willing to pay a premium for prestige-like products sold through traditional mass channels.",
956
- "Price reductions improve sales growth if increased customer transaction volume offsets a reduction in average spend.",
1177
+ element(elementPositionInSchema('assumption_hypothesis'), 'assumption_hypothesis', 'initiatives', 'indicative', [
1178
+ 'Younger women are willing to pay a premium for prestige-like products sold through traditional mass channels.',
1179
+ 'Price reductions improve sales growth if increased customer transaction volume offsets a reduction in average spend.',
957
1180
  ], {
958
1181
  methodSlots: assumptionHypothesisSlots,
959
1182
  rules: {
960
1183
  minimumRequiredSlots: 1,
961
1184
  diagnostics: {
962
- insufficient: "An assumption hypothesis must state the belief or condition that needs to be true.",
1185
+ insufficient: 'An assumption hypothesis must state the belief or condition that needs to be true.',
963
1186
  },
964
1187
  },
965
1188
  }),
966
- element(elementPositionInSchema("experiment"), "experiment", "initiatives", "imperative", [
967
- "Conduct a market test by launching a limited edition prestige-like Olay product in select mass channels.",
968
- "Model scenario with 4, 6, and 8 year projections.",
1189
+ element(elementPositionInSchema('experiment'), 'experiment', 'initiatives', 'imperative', [
1190
+ 'Conduct a market test by launching a limited edition prestige-like Olay product in select mass channels.',
1191
+ 'Model scenario with 4, 6, and 8 year projections.',
969
1192
  ], {
970
1193
  methodSlots: experimentSlots,
971
1194
  rules: {
972
1195
  minimumRequiredSlots: 1,
973
1196
  diagnostics: {
974
- insufficient: "An experiment must state the test action to perform.",
1197
+ insufficient: 'An experiment must state the test action to perform.',
975
1198
  },
976
1199
  },
977
1200
  }),
978
- element(elementPositionInSchema("action"), "action", "initiatives", "imperative", [
979
- "Collaborate with retail partners to create a masstige in-store experience for Olay products.",
980
- "Identify 10 new stores based on site selection analysis.",
1201
+ element(elementPositionInSchema('action'), 'action', 'initiatives', 'imperative', [
1202
+ 'Collaborate with retail partners to create a masstige in-store experience for Olay products.',
1203
+ 'Identify 10 new stores based on site selection analysis.',
981
1204
  ], {
982
1205
  methodSlots: actionSlots,
983
1206
  rules: {
984
1207
  minimumRequiredSlots: 1,
985
1208
  diagnostics: {
986
- insufficient: "An action must state the concrete task, decision, or implementation step to perform.",
1209
+ insufficient: 'An action must state the concrete task, decision, or implementation step to perform.',
987
1210
  },
988
1211
  },
989
1212
  }),
990
- element(elementPositionInSchema("investment"), "investment", "initiatives", "noun_phrase", ["Return on Invested Capital."], {
1213
+ element(elementPositionInSchema('investment'), 'investment', 'initiatives', 'noun_phrase', ['Return on Invested Capital.'], {
991
1214
  methodSlots: investmentSlots,
992
1215
  rules: {
993
1216
  minimumRequiredSlots: 2,
994
1217
  diagnostics: {
995
- insufficient: "An investment must identify the commitment amount and what is being invested in.",
1218
+ insufficient: 'An investment must identify the commitment amount and what is being invested in.',
996
1219
  },
997
1220
  },
998
1221
  }),
999
- element(elementPositionInSchema("estimate"), "estimate", "initiatives", "indicative", [
1000
- "500,000 new sales in first half.",
1001
- "Incremental 1% gain in soft goods market share equals a $34m revenue opportunity.",
1222
+ element(elementPositionInSchema('estimate'), 'estimate', 'initiatives', 'indicative', [
1223
+ '500,000 new sales in first half.',
1224
+ 'Incremental 1% gain in soft goods market share equals a $34m revenue opportunity.',
1002
1225
  ], {
1003
1226
  methodSlots: estimateSlots,
1004
1227
  rules: {
1005
1228
  minimumRequiredSlots: 2,
1006
1229
  diagnostics: {
1007
- insufficient: "An estimate must state what is being estimated and the estimated amount or range.",
1230
+ insufficient: 'An estimate must state what is being estimated and the estimated amount or range.',
1008
1231
  },
1009
1232
  },
1010
1233
  }),
1011
- element(elementPositionInSchema("baseline"), "baseline", "measures", "indicative", [
1012
- "Q1 FY24 sales reached $1.5M.",
1013
- "5,000 SKUs have a profit margin below 25%.",
1234
+ element(elementPositionInSchema('baseline'), 'baseline', 'measures', 'indicative', [
1235
+ 'Q1 FY24 sales reached $1.5M.',
1236
+ '5,000 SKUs have a profit margin below 25%.',
1014
1237
  ], {
1015
1238
  methodSlots: baselineSlots,
1016
1239
  rules: {
1017
1240
  minimumRequiredSlots: 2,
1018
1241
  diagnostics: {
1019
- insufficient: "A baseline must identify what is measured and the starting value or condition.",
1242
+ insufficient: 'A baseline must identify what is measured and the starting value or condition.',
1020
1243
  },
1021
1244
  },
1022
1245
  }),
1023
- element(elementPositionInSchema("outcome"), "outcome", "measures", "noun_phrase", [
1024
- "$2 million revenue by 2025.",
1025
- "Total sales for Q3 FY25 to exceed $1.6M.",
1026
- ], {
1246
+ element(elementPositionInSchema('outcome'), 'outcome', 'measures', 'noun_phrase', ['$2 million revenue by 2025.', 'Total sales for Q3 FY25 to exceed $1.6M.'], {
1027
1247
  methodSlots: outcomeSlots,
1028
1248
  rules: {
1029
1249
  minimumRequiredSlots: 2,
1030
1250
  diagnostics: {
1031
- insufficient: "An outcome must identify the target object and the desired value or state.",
1251
+ insufficient: 'An outcome must identify the target object and the desired value or state.',
1032
1252
  },
1033
1253
  },
1034
1254
  }),
1035
- element(elementPositionInSchema("performance_variable"), "performance_variable", "measures", "noun_phrase", [
1036
- "Average number of units sold per retailer.",
1037
- "Weekly foot traffic exceeds 500.",
1255
+ element(elementPositionInSchema('performance_variable'), 'performance_variable', 'measures', 'noun_phrase', [
1256
+ 'Average number of units sold per retailer.',
1257
+ 'Weekly foot traffic exceeds 500.',
1038
1258
  ], {
1039
1259
  methodSlots: performanceVariableSlots,
1040
1260
  rules: {
1041
1261
  minimumRequiredSlots: 1,
1042
1262
  diagnostics: {
1043
- insufficient: "A performance variable must identify the metric or indicator to track.",
1263
+ insufficient: 'A performance variable must identify the metric or indicator to track.',
1044
1264
  },
1045
1265
  },
1046
1266
  }),
1047
- element(elementPositionInSchema("capability"), "capability", "support", "noun_phrase", [
1048
- "Inventory management: hold less stock and replenish on demand.",
1049
- "Strategic site selection analysis with GIS competency.",
1267
+ element(elementPositionInSchema('capability'), 'capability', 'support', 'noun_phrase', [
1268
+ 'Inventory management: hold less stock and replenish on demand.',
1269
+ 'Strategic site selection analysis with GIS competency.',
1050
1270
  ], {
1051
1271
  methodSlots: capabilitySlots,
1052
1272
  rules: {
1053
1273
  minimumRequiredSlots: 1,
1054
1274
  diagnostics: {
1055
- insufficient: "A capability must identify the organizational ability required to support the strategy.",
1275
+ insufficient: 'A capability must identify the organizational ability required to support the strategy.',
1056
1276
  },
1057
1277
  },
1058
1278
  }),
1059
- element(elementPositionInSchema("system"), "system", "support", "noun_phrase", [
1060
- "Implementation of a strategic sales management system focusing on high margin products.",
1061
- "Daily store foot traffic analysis.",
1279
+ element(elementPositionInSchema('system'), 'system', 'support', 'noun_phrase', [
1280
+ 'Implementation of a strategic sales management system focusing on high margin products.',
1281
+ 'Daily store foot traffic analysis.',
1062
1282
  ], {
1063
1283
  methodSlots: systemSlots,
1064
1284
  rules: {
1065
1285
  minimumRequiredSlots: 1,
1066
1286
  diagnostics: {
1067
- insufficient: "A system must identify the process, tool, governance mechanism, or routine that supports execution.",
1287
+ insufficient: 'A system must identify the process, tool, governance mechanism, or routine that supports execution.',
1068
1288
  },
1069
1289
  },
1070
1290
  }),
1071
- element(elementPositionInSchema("principle"), "principle", "support", "imperative", [
1072
- "Prioritize domestic market before considering international expansion.",
1073
- "Put the customer first.",
1291
+ element(elementPositionInSchema('principle'), 'principle', 'support', 'imperative', [
1292
+ 'Prioritize domestic market before considering international expansion.',
1293
+ 'Put the customer first.',
1074
1294
  ], {
1075
1295
  methodSlots: principleSlots,
1076
1296
  rules: {
1077
1297
  minimumRequiredSlots: 1,
1078
1298
  diagnostics: {
1079
- insufficient: "A principle must state the durable rule or standard that should guide decisions.",
1299
+ insufficient: 'A principle must state the durable rule or standard that should guide decisions.',
1080
1300
  },
1081
1301
  },
1082
1302
  }),
1083
1303
  ];
1084
1304
  export const elementRelationshipDefinitions = [
1085
- relationship("key_challenge", "supporting_fact", "EVIDENCED_BY", "Evidenced By", "A key challenge is evidenced by supporting facts."),
1086
- relationship("key_challenge", "impact", "CAUSES", "Causes", "A key challenge causes or contributes to an impact."),
1087
- relationship("key_challenge", "guiding_policy", "ADDRESSED_BY", "Addressed By", "A key challenge is addressed by a guiding policy.", {
1088
- cardinality: "one_or_more",
1305
+ relationship('key_challenge', 'supporting_fact', 'EVIDENCED_BY', 'Evidenced By', 'A key challenge is evidenced by supporting facts.'),
1306
+ relationship('key_challenge', 'impact', 'CAUSES', 'Causes', 'A key challenge causes or contributes to an impact.'),
1307
+ relationship('key_challenge', 'guiding_policy', 'ADDRESSED_BY', 'Addressed By', 'A key challenge is addressed by a guiding policy.', {
1308
+ cardinality: 'one_or_more',
1089
1309
  requiredForCompleteness: true,
1090
1310
  diagnostics: {
1091
- missing: "Link the key challenge to at least one guiding policy.",
1311
+ missing: 'Link the key challenge to at least one guiding policy.',
1092
1312
  },
1093
1313
  }),
1094
- relationship("scope", "guiding_policy", "LIMITS", "Limits", "Scope limits the guiding policy."),
1095
- relationship("constraint", "guiding_policy", "CONSTRAINS", "Constrains", "A constraint narrows or restricts a guiding policy."),
1096
- relationship("competitor_move", "key_challenge", "THREATENS", "Threatens", "A competitor move can threaten or intensify a key challenge."),
1097
- relationship("guiding_policy", "solution", "IMPLEMENTED_VIA", "Implemented Via", "A guiding policy is implemented through solutions.", {
1098
- cardinality: "one_or_more",
1314
+ relationship('scope', 'guiding_policy', 'LIMITS', 'Limits', 'Scope limits the guiding policy.'),
1315
+ relationship('constraint', 'guiding_policy', 'CONSTRAINS', 'Constrains', 'A constraint narrows or restricts a guiding policy.'),
1316
+ relationship('competitor_move', 'key_challenge', 'THREATENS', 'Threatens', 'A competitor move can threaten or intensify a key challenge.'),
1317
+ relationship('guiding_policy', 'solution', 'IMPLEMENTED_VIA', 'Implemented Via', 'A guiding policy is implemented through solutions.', {
1318
+ cardinality: 'one_or_more',
1099
1319
  requiredForCompleteness: true,
1100
1320
  diagnostics: {
1101
- missing: "Link the guiding policy to at least one solution.",
1102
- },
1103
- }),
1104
- relationship("constraint", "solution", "CONSTRAINS", "Constrains", "A constraint limits a solution."),
1105
- relationship("solution", "assumption_hypothesis", "VALIDATED_BY", "Validated By", "A solution is validated by assumptions or hypotheses."),
1106
- relationship("assumption_hypothesis", "experiment", "TESTED_BY", "Tested By", "An assumption or hypothesis is tested by an experiment."),
1107
- relationship("experiment", "action", "PRODUCES", "Produces", "An experiment produces actions or evidence for action."),
1108
- relationship("solution", "investment", "REQUIRES_INVESTMENT", "Requires Investment", "A solution requires investment."),
1109
- relationship("solution", "estimate", "ESTIMATED_AT", "Estimated At", "A solution is estimated by an estimate."),
1110
- relationship("solution", "outcome", "TARGETS", "Targets", "A solution targets an outcome."),
1111
- relationship("baseline", "outcome", "COMPARED_TO", "Compared To", "A baseline is compared to an outcome."),
1112
- relationship("outcome", "performance_variable", "MEASURED_BY", "Measured By", "An outcome is measured by performance variables."),
1113
- relationship("solution", "capability", "REQUIRES_CAPABILITY", "Requires Capability", "A solution requires capabilities."),
1114
- relationship("capability", "system", "SUPPORTED_BY", "Supported By", "A capability is supported by systems."),
1115
- relationship("system", "principle", "GOVERNED_BY", "Governed By", "A system is governed by principles."),
1321
+ missing: 'Link the guiding policy to at least one solution.',
1322
+ },
1323
+ }),
1324
+ relationship('constraint', 'solution', 'CONSTRAINS', 'Constrains', 'A constraint limits a solution.'),
1325
+ relationship('solution', 'assumption_hypothesis', 'VALIDATED_BY', 'Validated By', 'A solution is validated by assumptions or hypotheses.'),
1326
+ relationship('assumption_hypothesis', 'experiment', 'TESTED_BY', 'Tested By', 'An assumption or hypothesis is tested by an experiment.'),
1327
+ relationship('experiment', 'action', 'PRODUCES', 'Produces', 'An experiment produces actions or evidence for action.'),
1328
+ relationship('solution', 'investment', 'REQUIRES_INVESTMENT', 'Requires Investment', 'A solution requires investment.'),
1329
+ relationship('solution', 'estimate', 'ESTIMATED_AT', 'Estimated At', 'A solution is estimated by an estimate.'),
1330
+ relationship('solution', 'outcome', 'TARGETS', 'Targets', 'A solution targets an outcome.'),
1331
+ relationship('baseline', 'outcome', 'COMPARED_TO', 'Compared To', 'A baseline is compared to an outcome.'),
1332
+ relationship('outcome', 'performance_variable', 'MEASURED_BY', 'Measured By', 'An outcome is measured by performance variables.'),
1333
+ relationship('solution', 'capability', 'REQUIRES_CAPABILITY', 'Requires Capability', 'A solution requires capabilities.'),
1334
+ relationship('capability', 'system', 'SUPPORTED_BY', 'Supported By', 'A capability is supported by systems.'),
1335
+ relationship('system', 'principle', 'GOVERNED_BY', 'Governed By', 'A system is governed by principles.'),
1116
1336
  ];
1117
- //# sourceMappingURL=definitions.js.map