@skhema/method 0.1.1 → 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.
- package/LICENSE +21 -0
- package/README.md +84 -27
- package/dist/definitions.d.ts +1 -2
- package/dist/definitions.js +680 -461
- package/dist/index.d.ts +5 -5
- package/dist/index.js +5 -5
- package/dist/registry.d.ts +19 -19
- package/dist/registry.js +13 -12
- package/dist/types.d.ts +14 -17
- package/dist/types.js +0 -1
- package/dist/validate.d.ts +1 -2
- package/dist/validate.js +44 -43
- package/dist/vocabulary/components.d.ts +32 -0
- package/dist/vocabulary/components.js +27 -0
- package/dist/vocabulary/elements.d.ts +102 -0
- package/dist/vocabulary/elements.js +97 -0
- package/dist/vocabulary/index.d.ts +4 -0
- package/dist/vocabulary/index.js +4 -0
- package/dist/vocabulary/mapping.d.ts +130 -0
- package/dist/vocabulary/mapping.js +85 -0
- package/dist/vocabulary/utils.d.ts +14 -0
- package/dist/vocabulary/utils.js +54 -0
- package/package.json +56 -10
- package/dist/definitions.d.ts.map +0 -1
- package/dist/definitions.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/registry.d.ts.map +0 -1
- package/dist/registry.js.map +0 -1
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js.map +0 -1
- package/dist/validate.d.ts.map +0 -1
- package/dist/validate.js.map +0 -1
package/dist/definitions.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { COMPONENT_TYPES, ELEMENT_TYPES, SKHEMA_MAPPING, } from
|
|
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 ?
|
|
20
|
+
cardinality: options.cardinality ?? (required ? 'exactly_one' : 'zero_or_one'),
|
|
21
21
|
evidence: options.evidence ??
|
|
22
|
-
(required ?
|
|
23
|
-
inference: options.inference ?? (required ?
|
|
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 ??
|
|
42
|
+
cardinality: options.cardinality ?? 'zero_or_more',
|
|
43
43
|
requiredForCompleteness: options.requiredForCompleteness ?? false,
|
|
44
|
-
evidence: options.evidence ??
|
|
45
|
-
scope: options.scope ?? [
|
|
44
|
+
evidence: options.evidence ?? 'semantic_alignment',
|
|
45
|
+
scope: options.scope ?? ['same_strategy', 'same_workspace'],
|
|
46
46
|
diagnostics: options.diagnostics ?? {
|
|
47
|
-
...(options.requiredForCompleteness
|
|
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(
|
|
54
|
-
syntacticSlot(
|
|
55
|
-
syntacticSlot(
|
|
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(
|
|
59
|
-
syntacticSlot(
|
|
60
|
-
syntacticSlot(
|
|
61
|
-
syntacticSlot(
|
|
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(
|
|
65
|
-
syntacticSlot(
|
|
66
|
-
syntacticSlot(
|
|
67
|
-
syntacticSlot(
|
|
68
|
-
syntacticSlot(
|
|
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(
|
|
72
|
-
methodSlot(
|
|
73
|
-
methodSlot(
|
|
74
|
-
methodSlot(
|
|
75
|
-
methodSlot(
|
|
76
|
-
methodSlot(
|
|
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: [
|
|
80
|
+
examples: ['in the next 12 months', 'by 2030', 'in Q2 2025'],
|
|
79
81
|
}),
|
|
80
82
|
];
|
|
81
83
|
const imperativeMethodSlots = [
|
|
82
|
-
methodSlot(
|
|
84
|
+
methodSlot('relative_clause', 'Relative clause that modifies the noun phrase.', {
|
|
83
85
|
required: false,
|
|
84
86
|
}),
|
|
85
|
-
methodSlot(
|
|
87
|
+
methodSlot('adverbial_phrase', 'Adverb phrase that modifies the verb action.'),
|
|
86
88
|
];
|
|
87
89
|
const keyChallengeSlots = [
|
|
88
|
-
methodSlot(
|
|
89
|
-
cardinality:
|
|
90
|
-
acceptedEntityTypes: [
|
|
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:
|
|
93
|
-
weak:
|
|
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(
|
|
97
|
-
cardinality:
|
|
98
|
+
methodSlot('causal_pressure', 'The force, shift, constraint, or market change creating the challenge.', {
|
|
99
|
+
cardinality: 'one_or_more',
|
|
98
100
|
acceptedEntityTypes: [
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
101
|
+
'externality',
|
|
102
|
+
'constraint',
|
|
103
|
+
'market_shift',
|
|
104
|
+
'competitive_pressure',
|
|
105
|
+
'regulatory_pressure',
|
|
104
106
|
],
|
|
105
107
|
diagnostics: {
|
|
106
|
-
missing:
|
|
107
|
-
weak:
|
|
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(
|
|
111
|
-
acceptedEntityTypes: [
|
|
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:
|
|
114
|
-
weak:
|
|
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(
|
|
119
|
+
methodSlot('industry_context', 'The industry or sector context, if present.', {
|
|
118
120
|
required: false,
|
|
119
|
-
acceptedEntityTypes: [
|
|
121
|
+
acceptedEntityTypes: ['industry'],
|
|
120
122
|
diagnostics: {
|
|
121
|
-
weak:
|
|
123
|
+
weak: 'Clarify the industry context if it changes the nature of the challenge.',
|
|
122
124
|
},
|
|
123
125
|
}),
|
|
124
|
-
methodSlot(
|
|
126
|
+
methodSlot('geographic_context', 'The location, market, or region context, if present.', {
|
|
125
127
|
required: false,
|
|
126
|
-
acceptedEntityTypes: [
|
|
128
|
+
acceptedEntityTypes: ['geo', 'market'],
|
|
127
129
|
diagnostics: {
|
|
128
|
-
weak:
|
|
130
|
+
weak: 'Clarify geography if the challenge depends on location or market boundaries.',
|
|
129
131
|
},
|
|
130
132
|
}),
|
|
131
|
-
methodSlot(
|
|
133
|
+
methodSlot('temporal_context', 'The timeframe, deadline, period, or timing assumption, if present.', {
|
|
132
134
|
required: false,
|
|
133
|
-
acceptedEntityTypes: [
|
|
135
|
+
acceptedEntityTypes: ['timeframe'],
|
|
134
136
|
diagnostics: {
|
|
135
|
-
weak:
|
|
137
|
+
weak: 'Clarify timing if urgency or sequencing affects the strategic response.',
|
|
136
138
|
},
|
|
137
139
|
}),
|
|
138
|
-
methodSlot(
|
|
140
|
+
methodSlot('constraint', 'A limiting condition, dependency, or tradeoff that narrows the challenge.', {
|
|
139
141
|
required: false,
|
|
140
|
-
acceptedEntityTypes: [
|
|
142
|
+
acceptedEntityTypes: ['constraint', 'dependency', 'tradeoff'],
|
|
141
143
|
diagnostics: {
|
|
142
|
-
weak:
|
|
144
|
+
weak: 'Clarify the constraint if it changes what responses are viable.',
|
|
143
145
|
},
|
|
144
146
|
}),
|
|
145
|
-
methodSlot(
|
|
147
|
+
methodSlot('decision_object', 'The specific judgement, decision, resource, capability, or strategic object being pressured.', {
|
|
146
148
|
required: false,
|
|
147
|
-
acceptedEntityTypes: [
|
|
149
|
+
acceptedEntityTypes: [
|
|
150
|
+
'decision',
|
|
151
|
+
'resource',
|
|
152
|
+
'capability',
|
|
153
|
+
'strategic_object',
|
|
154
|
+
],
|
|
148
155
|
diagnostics: {
|
|
149
|
-
weak:
|
|
156
|
+
weak: 'Clarify what decision or strategic object is under pressure.',
|
|
150
157
|
},
|
|
151
158
|
}),
|
|
152
159
|
];
|
|
153
160
|
const supportingFactSlots = [
|
|
154
|
-
methodSlot(
|
|
155
|
-
acceptedEntityTypes: [
|
|
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:
|
|
158
|
-
weak:
|
|
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(
|
|
162
|
-
acceptedEntityTypes: [
|
|
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:
|
|
165
|
-
weak:
|
|
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(
|
|
181
|
+
methodSlot('direction', 'The movement, comparison, or directional change in the evidence.', {
|
|
169
182
|
required: false,
|
|
170
|
-
acceptedEntityTypes: [
|
|
183
|
+
acceptedEntityTypes: ['trend', 'comparison', 'directional_change'],
|
|
171
184
|
diagnostics: {
|
|
172
|
-
weak:
|
|
185
|
+
weak: 'Clarify whether the fact is increasing, decreasing, stable, above, or below a reference point.',
|
|
173
186
|
},
|
|
174
187
|
}),
|
|
175
|
-
methodSlot(
|
|
188
|
+
methodSlot('temporal_context', 'The timeframe or period in which the fact applies.', {
|
|
176
189
|
required: false,
|
|
177
|
-
acceptedEntityTypes: [
|
|
190
|
+
acceptedEntityTypes: ['timeframe'],
|
|
178
191
|
diagnostics: {
|
|
179
|
-
weak:
|
|
192
|
+
weak: 'Clarify the time period for the supporting fact.',
|
|
180
193
|
},
|
|
181
194
|
}),
|
|
182
|
-
methodSlot(
|
|
195
|
+
methodSlot('source_context', 'The source, basis, or measurement context for the fact.', {
|
|
183
196
|
required: false,
|
|
184
197
|
substitutable: false,
|
|
185
|
-
acceptedEntityTypes: [
|
|
198
|
+
acceptedEntityTypes: ['source', 'dataset', 'report', 'experiment'],
|
|
186
199
|
diagnostics: {
|
|
187
|
-
weak:
|
|
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(
|
|
193
|
-
acceptedEntityTypes: [
|
|
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:
|
|
196
|
-
weak:
|
|
214
|
+
missing: 'Identify what is affected.',
|
|
215
|
+
weak: 'Make the affected object specific enough to reason about consequences.',
|
|
197
216
|
},
|
|
198
217
|
}),
|
|
199
|
-
methodSlot(
|
|
200
|
-
acceptedEntityTypes: [
|
|
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:
|
|
203
|
-
weak:
|
|
226
|
+
missing: 'Explain how the challenge creates the impact.',
|
|
227
|
+
weak: 'Make the causal mechanism clearer.',
|
|
204
228
|
},
|
|
205
229
|
}),
|
|
206
|
-
methodSlot(
|
|
230
|
+
methodSlot('impact_magnitude', 'The scale, severity, or materiality of the impact.', {
|
|
207
231
|
required: false,
|
|
208
|
-
acceptedEntityTypes: [
|
|
232
|
+
acceptedEntityTypes: ['metric', 'risk', 'severity', 'estimate'],
|
|
209
233
|
diagnostics: {
|
|
210
|
-
weak:
|
|
234
|
+
weak: 'Clarify the scale or materiality of the impact if known.',
|
|
211
235
|
},
|
|
212
236
|
}),
|
|
213
|
-
methodSlot(
|
|
237
|
+
methodSlot('temporal_context', 'The timeframe over which the impact occurs or becomes material.', {
|
|
214
238
|
required: false,
|
|
215
|
-
acceptedEntityTypes: [
|
|
239
|
+
acceptedEntityTypes: ['timeframe'],
|
|
216
240
|
diagnostics: {
|
|
217
|
-
weak:
|
|
241
|
+
weak: 'Clarify when the impact occurs or becomes material.',
|
|
218
242
|
},
|
|
219
243
|
}),
|
|
220
|
-
methodSlot(
|
|
244
|
+
methodSlot('downstream_consequence', 'The further strategic consequence created by the immediate impact.', {
|
|
221
245
|
required: false,
|
|
222
|
-
acceptedEntityTypes: [
|
|
246
|
+
acceptedEntityTypes: ['consequence', 'risk', 'outcome'],
|
|
223
247
|
diagnostics: {
|
|
224
|
-
weak:
|
|
248
|
+
weak: 'Clarify the downstream consequence if it changes the strategic response.',
|
|
225
249
|
},
|
|
226
250
|
}),
|
|
227
251
|
];
|
|
228
252
|
const guidingPolicySlots = [
|
|
229
|
-
methodSlot(
|
|
230
|
-
acceptedEntityTypes: [
|
|
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:
|
|
233
|
-
weak:
|
|
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(
|
|
237
|
-
acceptedEntityTypes: [
|
|
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:
|
|
240
|
-
weak:
|
|
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(
|
|
274
|
+
methodSlot('advantage_logic', 'The rationale for why this policy creates advantage or resolves the challenge.', {
|
|
244
275
|
required: false,
|
|
245
|
-
acceptedEntityTypes: [
|
|
276
|
+
acceptedEntityTypes: ['advantage', 'capability', 'mechanism', 'tradeoff'],
|
|
246
277
|
diagnostics: {
|
|
247
|
-
weak:
|
|
278
|
+
weak: 'Clarify why this policy is expected to work.',
|
|
248
279
|
},
|
|
249
280
|
}),
|
|
250
|
-
methodSlot(
|
|
281
|
+
methodSlot('boundary', 'The explicit limit, exclusion, or tradeoff implied by the policy.', {
|
|
251
282
|
required: false,
|
|
252
|
-
acceptedEntityTypes: [
|
|
283
|
+
acceptedEntityTypes: ['scope', 'constraint', 'tradeoff'],
|
|
253
284
|
diagnostics: {
|
|
254
|
-
weak:
|
|
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(
|
|
260
|
-
acceptedEntityTypes: [
|
|
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:
|
|
263
|
-
weak:
|
|
299
|
+
missing: 'Identify who is making the competitor move.',
|
|
300
|
+
weak: 'Make the competitor or market participant specific.',
|
|
264
301
|
},
|
|
265
302
|
}),
|
|
266
|
-
methodSlot(
|
|
267
|
-
acceptedEntityTypes: [
|
|
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:
|
|
270
|
-
weak:
|
|
312
|
+
missing: 'Describe the competitive move.',
|
|
313
|
+
weak: 'Make the competitive action observable enough to track.',
|
|
271
314
|
},
|
|
272
315
|
}),
|
|
273
|
-
methodSlot(
|
|
316
|
+
methodSlot('threat_logic', "Why the move matters for the organization's challenge, policy, or advantage.", {
|
|
274
317
|
required: false,
|
|
275
|
-
acceptedEntityTypes: [
|
|
318
|
+
acceptedEntityTypes: ['threat', 'pressure', 'advantage', 'risk'],
|
|
276
319
|
diagnostics: {
|
|
277
|
-
weak:
|
|
320
|
+
weak: 'Clarify why this competitor move is strategically relevant.',
|
|
278
321
|
},
|
|
279
322
|
}),
|
|
280
|
-
methodSlot(
|
|
323
|
+
methodSlot('temporal_context', 'The timeframe in which the move is occurring or expected.', {
|
|
281
324
|
required: false,
|
|
282
|
-
acceptedEntityTypes: [
|
|
325
|
+
acceptedEntityTypes: ['timeframe'],
|
|
283
326
|
diagnostics: {
|
|
284
|
-
weak:
|
|
327
|
+
weak: 'Clarify when the move is occurring or expected.',
|
|
285
328
|
},
|
|
286
329
|
}),
|
|
287
330
|
];
|
|
288
331
|
const scopeSlots = [
|
|
289
|
-
methodSlot(
|
|
290
|
-
cardinality:
|
|
291
|
-
acceptedEntityTypes: [
|
|
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:
|
|
294
|
-
weak:
|
|
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(
|
|
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: [
|
|
351
|
+
acceptedEntityTypes: ['action', 'priority', 'boundary'],
|
|
300
352
|
diagnostics: {
|
|
301
|
-
weak:
|
|
353
|
+
weak: 'Clarify the action implied by the scope statement.',
|
|
302
354
|
},
|
|
303
355
|
}),
|
|
304
|
-
methodSlot(
|
|
356
|
+
methodSlot('excluded_domain', 'The domain explicitly excluded or deprioritized by the scope.', {
|
|
305
357
|
required: false,
|
|
306
|
-
acceptedEntityTypes: [
|
|
358
|
+
acceptedEntityTypes: [
|
|
359
|
+
'market',
|
|
360
|
+
'segment',
|
|
361
|
+
'geo',
|
|
362
|
+
'category',
|
|
363
|
+
'product',
|
|
364
|
+
'service',
|
|
365
|
+
'channel',
|
|
366
|
+
'activity',
|
|
367
|
+
],
|
|
307
368
|
diagnostics: {
|
|
308
|
-
weak:
|
|
369
|
+
weak: 'Clarify what is outside scope if the boundary matters.',
|
|
309
370
|
},
|
|
310
371
|
}),
|
|
311
|
-
methodSlot(
|
|
372
|
+
methodSlot('boundary_condition', 'The threshold, condition, or criterion that defines the scope boundary.', {
|
|
312
373
|
required: false,
|
|
313
|
-
acceptedEntityTypes: [
|
|
374
|
+
acceptedEntityTypes: ['metric', 'threshold', 'condition', 'criterion'],
|
|
314
375
|
diagnostics: {
|
|
315
|
-
weak:
|
|
376
|
+
weak: 'Clarify the threshold or criterion that defines the scope boundary.',
|
|
316
377
|
},
|
|
317
378
|
}),
|
|
318
379
|
];
|
|
319
380
|
const constraintSlots = [
|
|
320
|
-
methodSlot(
|
|
321
|
-
acceptedEntityTypes: [
|
|
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:
|
|
324
|
-
weak:
|
|
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(
|
|
328
|
-
acceptedEntityTypes: [
|
|
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:
|
|
331
|
-
weak:
|
|
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(
|
|
408
|
+
methodSlot('affected_choice', 'The policy, solution, action, investment, or capability affected by the constraint.', {
|
|
335
409
|
required: false,
|
|
336
|
-
acceptedEntityTypes: [
|
|
410
|
+
acceptedEntityTypes: [
|
|
411
|
+
'guiding_policy',
|
|
412
|
+
'solution',
|
|
413
|
+
'action',
|
|
414
|
+
'investment',
|
|
415
|
+
'capability',
|
|
416
|
+
],
|
|
337
417
|
diagnostics: {
|
|
338
|
-
weak:
|
|
418
|
+
weak: 'Clarify what choice the constraint affects.',
|
|
339
419
|
},
|
|
340
420
|
}),
|
|
341
|
-
methodSlot(
|
|
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: [
|
|
423
|
+
acceptedEntityTypes: ['constraint_type'],
|
|
344
424
|
diagnostics: {
|
|
345
|
-
weak:
|
|
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(
|
|
351
|
-
acceptedEntityTypes: [
|
|
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:
|
|
354
|
-
weak:
|
|
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(
|
|
444
|
+
methodSlot('mechanism', 'How the solution is expected to address the guiding policy or key challenge.', {
|
|
358
445
|
required: false,
|
|
359
|
-
acceptedEntityTypes: [
|
|
446
|
+
acceptedEntityTypes: ['mechanism', 'capability', 'process', 'advantage'],
|
|
360
447
|
diagnostics: {
|
|
361
|
-
weak:
|
|
448
|
+
weak: 'Clarify how this solution is expected to work.',
|
|
362
449
|
},
|
|
363
450
|
}),
|
|
364
|
-
methodSlot(
|
|
451
|
+
methodSlot('target_context', 'The customer, market, geography, product, channel, capability, or activity the solution targets.', {
|
|
365
452
|
required: false,
|
|
366
|
-
acceptedEntityTypes: [
|
|
453
|
+
acceptedEntityTypes: [
|
|
454
|
+
'segment',
|
|
455
|
+
'market',
|
|
456
|
+
'geo',
|
|
457
|
+
'product',
|
|
458
|
+
'channel',
|
|
459
|
+
'capability',
|
|
460
|
+
'activity',
|
|
461
|
+
],
|
|
367
462
|
diagnostics: {
|
|
368
|
-
weak:
|
|
463
|
+
weak: 'Clarify the context or target for the solution.',
|
|
369
464
|
},
|
|
370
465
|
}),
|
|
371
|
-
methodSlot(
|
|
466
|
+
methodSlot('tradeoff', 'The sacrifice, exclusion, cost, or risk implied by choosing this solution.', {
|
|
372
467
|
required: false,
|
|
373
|
-
acceptedEntityTypes: [
|
|
468
|
+
acceptedEntityTypes: ['tradeoff', 'cost', 'risk', 'constraint'],
|
|
374
469
|
diagnostics: {
|
|
375
|
-
weak:
|
|
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(
|
|
381
|
-
acceptedEntityTypes: [
|
|
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:
|
|
384
|
-
weak:
|
|
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(
|
|
487
|
+
methodSlot('dependent_outcome', 'The outcome, behavior, metric, or result that depends on the assumption being true.', {
|
|
388
488
|
required: false,
|
|
389
|
-
acceptedEntityTypes: [
|
|
489
|
+
acceptedEntityTypes: ['outcome', 'behavior', 'metric', 'result'],
|
|
390
490
|
diagnostics: {
|
|
391
|
-
weak:
|
|
491
|
+
weak: 'Clarify what outcome depends on this assumption.',
|
|
392
492
|
},
|
|
393
493
|
}),
|
|
394
|
-
methodSlot(
|
|
494
|
+
methodSlot('test_condition', 'The observable condition or evidence that would confirm or disconfirm the assumption.', {
|
|
395
495
|
required: false,
|
|
396
|
-
acceptedEntityTypes: [
|
|
496
|
+
acceptedEntityTypes: ['evidence', 'metric', 'threshold', 'condition'],
|
|
397
497
|
diagnostics: {
|
|
398
|
-
weak:
|
|
498
|
+
weak: 'Clarify how this assumption could be tested.',
|
|
399
499
|
},
|
|
400
500
|
}),
|
|
401
|
-
methodSlot(
|
|
501
|
+
methodSlot('timeframe', 'The period over which the assumption should hold or be tested.', {
|
|
402
502
|
required: false,
|
|
403
|
-
acceptedEntityTypes: [
|
|
503
|
+
acceptedEntityTypes: ['timeframe'],
|
|
404
504
|
diagnostics: {
|
|
405
|
-
weak:
|
|
505
|
+
weak: 'Clarify the timeframe for this assumption.',
|
|
406
506
|
},
|
|
407
507
|
}),
|
|
408
508
|
];
|
|
409
509
|
const experimentSlots = [
|
|
410
|
-
methodSlot(
|
|
411
|
-
acceptedEntityTypes: [
|
|
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:
|
|
414
|
-
weak:
|
|
520
|
+
missing: 'State the test action to perform.',
|
|
521
|
+
weak: 'Make the experiment action specific enough to execute.',
|
|
415
522
|
},
|
|
416
523
|
}),
|
|
417
|
-
methodSlot(
|
|
524
|
+
methodSlot('hypothesis_under_test', 'The assumption, hypothesis, or uncertainty the experiment is designed to test.', {
|
|
418
525
|
required: false,
|
|
419
|
-
acceptedEntityTypes: [
|
|
526
|
+
acceptedEntityTypes: ['assumption_hypothesis', 'uncertainty', 'belief'],
|
|
420
527
|
diagnostics: {
|
|
421
|
-
weak:
|
|
528
|
+
weak: 'Clarify what assumption or uncertainty this experiment tests.',
|
|
422
529
|
},
|
|
423
530
|
}),
|
|
424
|
-
methodSlot(
|
|
531
|
+
methodSlot('success_metric', 'The metric, threshold, or evidence that determines the result of the experiment.', {
|
|
425
532
|
required: false,
|
|
426
|
-
acceptedEntityTypes: [
|
|
533
|
+
acceptedEntityTypes: ['metric', 'threshold', 'evidence'],
|
|
427
534
|
diagnostics: {
|
|
428
|
-
weak:
|
|
535
|
+
weak: 'Clarify how the experiment result will be judged.',
|
|
429
536
|
},
|
|
430
537
|
}),
|
|
431
|
-
methodSlot(
|
|
538
|
+
methodSlot('sample_or_scope', 'The sample, audience, geography, product set, or operating scope of the experiment.', {
|
|
432
539
|
required: false,
|
|
433
|
-
acceptedEntityTypes: [
|
|
540
|
+
acceptedEntityTypes: ['segment', 'sample', 'geo', 'product', 'scope'],
|
|
434
541
|
diagnostics: {
|
|
435
|
-
weak:
|
|
542
|
+
weak: 'Clarify the experiment scope.',
|
|
436
543
|
},
|
|
437
544
|
}),
|
|
438
545
|
];
|
|
439
546
|
const actionSlots = [
|
|
440
|
-
methodSlot(
|
|
441
|
-
acceptedEntityTypes: [
|
|
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:
|
|
444
|
-
weak:
|
|
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(
|
|
560
|
+
methodSlot('owner_or_actor', 'The person, team, function, or partner responsible for the action.', {
|
|
448
561
|
required: false,
|
|
449
|
-
acceptedEntityTypes: [
|
|
562
|
+
acceptedEntityTypes: [
|
|
563
|
+
'person',
|
|
564
|
+
'team',
|
|
565
|
+
'function',
|
|
566
|
+
'partner',
|
|
567
|
+
'organization',
|
|
568
|
+
],
|
|
450
569
|
diagnostics: {
|
|
451
|
-
weak:
|
|
570
|
+
weak: 'Clarify who owns or performs the action.',
|
|
452
571
|
},
|
|
453
572
|
}),
|
|
454
|
-
methodSlot(
|
|
573
|
+
methodSlot('target_object', 'The process, product, customer, system, resource, or activity the action changes.', {
|
|
455
574
|
required: false,
|
|
456
|
-
acceptedEntityTypes: [
|
|
575
|
+
acceptedEntityTypes: [
|
|
576
|
+
'process',
|
|
577
|
+
'product',
|
|
578
|
+
'customer',
|
|
579
|
+
'system',
|
|
580
|
+
'resource',
|
|
581
|
+
'activity',
|
|
582
|
+
],
|
|
457
583
|
diagnostics: {
|
|
458
|
-
weak:
|
|
584
|
+
weak: 'Clarify what the action changes.',
|
|
459
585
|
},
|
|
460
586
|
}),
|
|
461
|
-
methodSlot(
|
|
587
|
+
methodSlot('timeframe', 'The deadline, cadence, or timing of the action.', {
|
|
462
588
|
required: false,
|
|
463
|
-
acceptedEntityTypes: [
|
|
589
|
+
acceptedEntityTypes: ['timeframe'],
|
|
464
590
|
diagnostics: {
|
|
465
|
-
weak:
|
|
591
|
+
weak: 'Clarify when the action should happen.',
|
|
466
592
|
},
|
|
467
593
|
}),
|
|
468
594
|
];
|
|
469
595
|
const investmentSlots = [
|
|
470
|
-
methodSlot(
|
|
471
|
-
acceptedEntityTypes: [
|
|
596
|
+
methodSlot('investment_amount', 'The quantity of capital, resources, or effort to invest.', {
|
|
597
|
+
acceptedEntityTypes: ['metric', 'currency', 'quantity', 'resource'],
|
|
472
598
|
diagnostics: {
|
|
473
|
-
missing:
|
|
474
|
-
weak:
|
|
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(
|
|
478
|
-
acceptedEntityTypes: [
|
|
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:
|
|
481
|
-
weak:
|
|
612
|
+
missing: 'Identify what type of investment is being considered.',
|
|
613
|
+
weak: 'Make the investment type specific.',
|
|
482
614
|
},
|
|
483
615
|
}),
|
|
484
|
-
methodSlot(
|
|
616
|
+
methodSlot('investment_period', 'The timeframe over which the investment is made or evaluated.', {
|
|
485
617
|
required: false,
|
|
486
|
-
acceptedEntityTypes: [
|
|
618
|
+
acceptedEntityTypes: ['timeframe'],
|
|
487
619
|
diagnostics: {
|
|
488
|
-
weak:
|
|
620
|
+
weak: 'Clarify the investment period.',
|
|
489
621
|
},
|
|
490
622
|
}),
|
|
491
623
|
];
|
|
492
624
|
const estimateSlots = [
|
|
493
|
-
methodSlot(
|
|
494
|
-
acceptedEntityTypes: [
|
|
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:
|
|
497
|
-
weak:
|
|
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(
|
|
501
|
-
acceptedEntityTypes: [
|
|
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:
|
|
504
|
-
weak:
|
|
648
|
+
missing: 'Identify what is being estimated.',
|
|
649
|
+
weak: 'Make the estimate type specific.',
|
|
505
650
|
},
|
|
506
651
|
}),
|
|
507
|
-
methodSlot(
|
|
652
|
+
methodSlot('estimate_period', 'The timeframe or period for the estimate.', {
|
|
508
653
|
required: false,
|
|
509
|
-
acceptedEntityTypes: [
|
|
654
|
+
acceptedEntityTypes: ['timeframe'],
|
|
510
655
|
diagnostics: {
|
|
511
|
-
weak:
|
|
656
|
+
weak: 'Clarify the estimate period.',
|
|
512
657
|
},
|
|
513
658
|
}),
|
|
514
|
-
methodSlot(
|
|
659
|
+
methodSlot('basis', 'The assumption, experiment, benchmark, or source that supports the estimate.', {
|
|
515
660
|
required: false,
|
|
516
661
|
substitutable: false,
|
|
517
|
-
acceptedEntityTypes: [
|
|
662
|
+
acceptedEntityTypes: [
|
|
663
|
+
'assumption_hypothesis',
|
|
664
|
+
'experiment',
|
|
665
|
+
'benchmark',
|
|
666
|
+
'source',
|
|
667
|
+
],
|
|
518
668
|
diagnostics: {
|
|
519
|
-
weak:
|
|
669
|
+
weak: 'Clarify the basis for the estimate if auditability matters.',
|
|
520
670
|
},
|
|
521
671
|
}),
|
|
522
672
|
];
|
|
523
673
|
const baselineSlots = [
|
|
524
|
-
methodSlot(
|
|
525
|
-
acceptedEntityTypes: [
|
|
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:
|
|
528
|
-
weak:
|
|
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(
|
|
532
|
-
acceptedEntityTypes: [
|
|
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:
|
|
535
|
-
weak:
|
|
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(
|
|
701
|
+
methodSlot('measurement_period', 'The period over which the baseline was measured.', {
|
|
539
702
|
required: false,
|
|
540
|
-
acceptedEntityTypes: [
|
|
703
|
+
acceptedEntityTypes: ['timeframe'],
|
|
541
704
|
diagnostics: {
|
|
542
|
-
weak:
|
|
705
|
+
weak: 'Clarify the measurement period for the baseline.',
|
|
543
706
|
},
|
|
544
707
|
}),
|
|
545
|
-
methodSlot(
|
|
708
|
+
methodSlot('source_context', 'The source, dataset, system, or evidence basis for the baseline.', {
|
|
546
709
|
required: false,
|
|
547
710
|
substitutable: false,
|
|
548
|
-
acceptedEntityTypes: [
|
|
711
|
+
acceptedEntityTypes: ['source', 'dataset', 'system', 'evidence'],
|
|
549
712
|
diagnostics: {
|
|
550
|
-
weak:
|
|
713
|
+
weak: 'Clarify the source of the baseline if auditability matters.',
|
|
551
714
|
},
|
|
552
715
|
}),
|
|
553
|
-
methodSlot(
|
|
716
|
+
methodSlot('comparison_context', 'The comparator, prior period, benchmark, or reference point used to interpret the baseline.', {
|
|
554
717
|
required: false,
|
|
555
|
-
acceptedEntityTypes: [
|
|
718
|
+
acceptedEntityTypes: [
|
|
719
|
+
'benchmark',
|
|
720
|
+
'prior_period',
|
|
721
|
+
'reference_point',
|
|
722
|
+
'comparison',
|
|
723
|
+
],
|
|
556
724
|
diagnostics: {
|
|
557
|
-
weak:
|
|
725
|
+
weak: 'Clarify the comparison context if it affects interpretation.',
|
|
558
726
|
},
|
|
559
727
|
}),
|
|
560
728
|
];
|
|
561
729
|
const outcomeSlots = [
|
|
562
|
-
methodSlot(
|
|
563
|
-
acceptedEntityTypes: [
|
|
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:
|
|
566
|
-
weak:
|
|
739
|
+
missing: 'Identify what outcome is being targeted.',
|
|
740
|
+
weak: 'Make the outcome object specific enough to measure.',
|
|
567
741
|
},
|
|
568
742
|
}),
|
|
569
|
-
methodSlot(
|
|
570
|
-
acceptedEntityTypes: [
|
|
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:
|
|
573
|
-
weak:
|
|
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(
|
|
756
|
+
methodSlot('timeframe', 'The timeframe by which the outcome should be achieved or assessed.', {
|
|
577
757
|
required: false,
|
|
578
|
-
acceptedEntityTypes: [
|
|
758
|
+
acceptedEntityTypes: ['timeframe'],
|
|
579
759
|
diagnostics: {
|
|
580
|
-
weak:
|
|
760
|
+
weak: 'Clarify when the outcome should be achieved.',
|
|
581
761
|
},
|
|
582
762
|
}),
|
|
583
|
-
methodSlot(
|
|
763
|
+
methodSlot('success_condition', 'The condition under which the outcome should be considered achieved.', {
|
|
584
764
|
required: false,
|
|
585
|
-
acceptedEntityTypes: [
|
|
765
|
+
acceptedEntityTypes: ['condition', 'threshold', 'metric'],
|
|
586
766
|
diagnostics: {
|
|
587
|
-
weak:
|
|
767
|
+
weak: 'Clarify what would count as success.',
|
|
588
768
|
},
|
|
589
769
|
}),
|
|
590
|
-
methodSlot(
|
|
770
|
+
methodSlot('strategic_effect', 'The strategic effect or business consequence expected if the outcome is achieved.', {
|
|
591
771
|
required: false,
|
|
592
|
-
acceptedEntityTypes: [
|
|
772
|
+
acceptedEntityTypes: ['effect', 'consequence', 'advantage', 'impact'],
|
|
593
773
|
diagnostics: {
|
|
594
|
-
weak:
|
|
774
|
+
weak: 'Clarify why this outcome matters strategically.',
|
|
595
775
|
},
|
|
596
776
|
}),
|
|
597
777
|
];
|
|
598
778
|
const performanceVariableSlots = [
|
|
599
|
-
methodSlot(
|
|
600
|
-
acceptedEntityTypes: [
|
|
779
|
+
methodSlot('metric', 'The variable, metric, indicator, or measure used to track performance.', {
|
|
780
|
+
acceptedEntityTypes: ['metric', 'indicator', 'measure', 'variable'],
|
|
601
781
|
diagnostics: {
|
|
602
|
-
missing:
|
|
603
|
-
weak:
|
|
782
|
+
missing: 'Identify the performance variable to track.',
|
|
783
|
+
weak: 'Make the performance variable specific enough to measure.',
|
|
604
784
|
},
|
|
605
785
|
}),
|
|
606
|
-
methodSlot(
|
|
786
|
+
methodSlot('measurement_method', 'How the variable is measured, calculated, or observed.', {
|
|
607
787
|
required: false,
|
|
608
788
|
substitutable: false,
|
|
609
|
-
acceptedEntityTypes: [
|
|
789
|
+
acceptedEntityTypes: ['method', 'calculation', 'system', 'observation'],
|
|
610
790
|
diagnostics: {
|
|
611
|
-
weak:
|
|
791
|
+
weak: 'Clarify how the performance variable is measured.',
|
|
612
792
|
},
|
|
613
793
|
}),
|
|
614
|
-
methodSlot(
|
|
794
|
+
methodSlot('cadence', 'How often the performance variable should be measured or reviewed.', {
|
|
615
795
|
required: false,
|
|
616
|
-
acceptedEntityTypes: [
|
|
796
|
+
acceptedEntityTypes: ['timeframe', 'cadence'],
|
|
617
797
|
diagnostics: {
|
|
618
|
-
weak:
|
|
798
|
+
weak: 'Clarify how often this variable should be reviewed.',
|
|
619
799
|
},
|
|
620
800
|
}),
|
|
621
|
-
methodSlot(
|
|
801
|
+
methodSlot('threshold', 'The trigger, target, tolerance, or threshold used to interpret the variable.', {
|
|
622
802
|
required: false,
|
|
623
|
-
acceptedEntityTypes: [
|
|
803
|
+
acceptedEntityTypes: ['threshold', 'target', 'tolerance', 'metric'],
|
|
624
804
|
diagnostics: {
|
|
625
|
-
weak:
|
|
805
|
+
weak: 'Clarify the threshold that makes this variable actionable.',
|
|
626
806
|
},
|
|
627
807
|
}),
|
|
628
|
-
methodSlot(
|
|
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: [
|
|
811
|
+
acceptedEntityTypes: ['owner', 'system', 'dataset', 'source'],
|
|
632
812
|
diagnostics: {
|
|
633
|
-
weak:
|
|
813
|
+
weak: 'Clarify who owns or supplies this performance variable.',
|
|
634
814
|
},
|
|
635
815
|
}),
|
|
636
816
|
];
|
|
637
817
|
const capabilitySlots = [
|
|
638
|
-
methodSlot(
|
|
639
|
-
acceptedEntityTypes: [
|
|
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:
|
|
642
|
-
weak:
|
|
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(
|
|
831
|
+
methodSlot('capability_purpose', 'The strategic purpose or activity the capability enables.', {
|
|
646
832
|
required: false,
|
|
647
|
-
acceptedEntityTypes: [
|
|
833
|
+
acceptedEntityTypes: [
|
|
834
|
+
'purpose',
|
|
835
|
+
'activity',
|
|
836
|
+
'solution',
|
|
837
|
+
'guiding_policy',
|
|
838
|
+
'outcome',
|
|
839
|
+
],
|
|
648
840
|
diagnostics: {
|
|
649
|
-
weak:
|
|
841
|
+
weak: 'Clarify what strategic purpose this capability serves.',
|
|
650
842
|
},
|
|
651
843
|
}),
|
|
652
|
-
methodSlot(
|
|
844
|
+
methodSlot('maturity_or_gap', 'The current maturity, deficiency, gap, or development need for the capability.', {
|
|
653
845
|
required: false,
|
|
654
|
-
acceptedEntityTypes: [
|
|
846
|
+
acceptedEntityTypes: ['maturity', 'gap', 'deficiency', 'need'],
|
|
655
847
|
diagnostics: {
|
|
656
|
-
weak:
|
|
848
|
+
weak: 'Clarify whether the capability exists, is weak, or needs to be built.',
|
|
657
849
|
},
|
|
658
850
|
}),
|
|
659
|
-
methodSlot(
|
|
851
|
+
methodSlot('owner_or_location', 'The function, team, partner, or part of the organization where the capability lives.', {
|
|
660
852
|
required: false,
|
|
661
|
-
acceptedEntityTypes: [
|
|
853
|
+
acceptedEntityTypes: ['function', 'team', 'partner', 'organization'],
|
|
662
854
|
diagnostics: {
|
|
663
|
-
weak:
|
|
855
|
+
weak: 'Clarify where this capability is owned or located.',
|
|
664
856
|
},
|
|
665
857
|
}),
|
|
666
858
|
];
|
|
667
859
|
const systemSlots = [
|
|
668
|
-
methodSlot(
|
|
669
|
-
acceptedEntityTypes: [
|
|
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:
|
|
672
|
-
weak:
|
|
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(
|
|
874
|
+
methodSlot('supported_capability', 'The capability, action, or operating need the system supports.', {
|
|
676
875
|
required: false,
|
|
677
|
-
acceptedEntityTypes: [
|
|
876
|
+
acceptedEntityTypes: ['capability', 'action', 'operation', 'need'],
|
|
678
877
|
diagnostics: {
|
|
679
|
-
weak:
|
|
878
|
+
weak: 'Clarify what capability or operating need this system supports.',
|
|
680
879
|
},
|
|
681
880
|
}),
|
|
682
|
-
methodSlot(
|
|
881
|
+
methodSlot('operating_cadence', 'The cadence, trigger, workflow, or operating rhythm for the system.', {
|
|
683
882
|
required: false,
|
|
684
|
-
acceptedEntityTypes: [
|
|
883
|
+
acceptedEntityTypes: ['cadence', 'trigger', 'workflow', 'timeframe'],
|
|
685
884
|
diagnostics: {
|
|
686
|
-
weak:
|
|
885
|
+
weak: 'Clarify how or when the system operates.',
|
|
687
886
|
},
|
|
688
887
|
}),
|
|
689
|
-
methodSlot(
|
|
888
|
+
methodSlot('control_or_feedback', 'The control, feedback loop, metric, or governance signal used by the system.', {
|
|
690
889
|
required: false,
|
|
691
|
-
acceptedEntityTypes: [
|
|
890
|
+
acceptedEntityTypes: ['control', 'feedback', 'metric', 'governance'],
|
|
692
891
|
diagnostics: {
|
|
693
|
-
weak:
|
|
892
|
+
weak: 'Clarify how the system controls or learns from performance.',
|
|
694
893
|
},
|
|
695
894
|
}),
|
|
696
895
|
];
|
|
697
896
|
const principleSlots = [
|
|
698
|
-
methodSlot(
|
|
699
|
-
acceptedEntityTypes: [
|
|
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:
|
|
702
|
-
weak:
|
|
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(
|
|
910
|
+
methodSlot('decision_context', 'The decision, behavior, system, team, or tradeoff the principle governs.', {
|
|
706
911
|
required: false,
|
|
707
|
-
acceptedEntityTypes: [
|
|
912
|
+
acceptedEntityTypes: [
|
|
913
|
+
'decision',
|
|
914
|
+
'behavior',
|
|
915
|
+
'system',
|
|
916
|
+
'team',
|
|
917
|
+
'tradeoff',
|
|
918
|
+
],
|
|
708
919
|
diagnostics: {
|
|
709
|
-
weak:
|
|
920
|
+
weak: 'Clarify what context this principle governs.',
|
|
710
921
|
},
|
|
711
922
|
}),
|
|
712
|
-
methodSlot(
|
|
923
|
+
methodSlot('priority_or_tradeoff', 'The priority, tradeoff, or preference implied by the principle.', {
|
|
713
924
|
required: false,
|
|
714
|
-
acceptedEntityTypes: [
|
|
925
|
+
acceptedEntityTypes: ['priority', 'tradeoff', 'preference'],
|
|
715
926
|
diagnostics: {
|
|
716
|
-
weak:
|
|
927
|
+
weak: 'Clarify what this principle prioritizes or rules out.',
|
|
717
928
|
},
|
|
718
929
|
}),
|
|
719
|
-
methodSlot(
|
|
930
|
+
methodSlot('exception_condition', 'The condition under which the principle may not apply.', {
|
|
720
931
|
required: false,
|
|
721
|
-
acceptedEntityTypes: [
|
|
932
|
+
acceptedEntityTypes: ['condition', 'exception', 'constraint'],
|
|
722
933
|
diagnostics: {
|
|
723
|
-
weak:
|
|
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 ===
|
|
951
|
+
(expectedMood === 'imperative'
|
|
741
952
|
? imperativeSyntax
|
|
742
|
-
: expectedMood ===
|
|
953
|
+
: expectedMood === 'noun_phrase'
|
|
743
954
|
? nounPhraseSyntax
|
|
744
955
|
: indicativeSyntax),
|
|
745
956
|
methodSlots: options.methodSlots ??
|
|
746
|
-
(expectedMood ===
|
|
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 ??
|
|
754
|
-
|
|
755
|
-
|
|
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(
|
|
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) ??
|
|
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(
|
|
823
|
-
|
|
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:
|
|
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(
|
|
834
|
-
|
|
835
|
-
|
|
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:
|
|
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(
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
|
|
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: [
|
|
1065
|
+
aliases: ['associated_impact'],
|
|
851
1066
|
methodSlots: impactSlots,
|
|
852
1067
|
rules: {
|
|
853
1068
|
minimumRequiredSlots: 2,
|
|
854
1069
|
diagnostics: {
|
|
855
|
-
insufficient:
|
|
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(
|
|
860
|
-
|
|
861
|
-
|
|
862
|
-
|
|
863
|
-
|
|
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
|
-
|
|
868
|
-
|
|
869
|
-
|
|
870
|
-
|
|
871
|
-
|
|
872
|
-
|
|
873
|
-
|
|
874
|
-
|
|
875
|
-
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
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:
|
|
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(
|
|
891
|
-
|
|
892
|
-
|
|
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:
|
|
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(
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
|
|
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: [
|
|
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:
|
|
1135
|
+
insufficient: 'A scope element must define what is included, excluded, or bounded.',
|
|
913
1136
|
},
|
|
914
1137
|
},
|
|
915
1138
|
}),
|
|
916
|
-
element(elementPositionInSchema(
|
|
917
|
-
|
|
918
|
-
|
|
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
|
-
|
|
923
|
-
|
|
924
|
-
|
|
925
|
-
|
|
926
|
-
|
|
927
|
-
|
|
928
|
-
|
|
929
|
-
|
|
930
|
-
|
|
931
|
-
|
|
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:
|
|
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(
|
|
941
|
-
|
|
942
|
-
|
|
943
|
-
|
|
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: [
|
|
1168
|
+
aliases: ['solution_alternative'],
|
|
946
1169
|
methodSlots: solutionSlots,
|
|
947
1170
|
rules: {
|
|
948
1171
|
minimumRequiredSlots: 1,
|
|
949
1172
|
diagnostics: {
|
|
950
|
-
insufficient:
|
|
1173
|
+
insufficient: 'A solution must identify the strategic option or intervention being considered.',
|
|
951
1174
|
},
|
|
952
1175
|
},
|
|
953
1176
|
}),
|
|
954
|
-
element(elementPositionInSchema(
|
|
955
|
-
|
|
956
|
-
|
|
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:
|
|
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(
|
|
967
|
-
|
|
968
|
-
|
|
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:
|
|
1197
|
+
insufficient: 'An experiment must state the test action to perform.',
|
|
975
1198
|
},
|
|
976
1199
|
},
|
|
977
1200
|
}),
|
|
978
|
-
element(elementPositionInSchema(
|
|
979
|
-
|
|
980
|
-
|
|
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:
|
|
1209
|
+
insufficient: 'An action must state the concrete task, decision, or implementation step to perform.',
|
|
987
1210
|
},
|
|
988
1211
|
},
|
|
989
1212
|
}),
|
|
990
|
-
element(elementPositionInSchema(
|
|
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:
|
|
1218
|
+
insufficient: 'An investment must identify the commitment amount and what is being invested in.',
|
|
996
1219
|
},
|
|
997
1220
|
},
|
|
998
1221
|
}),
|
|
999
|
-
element(elementPositionInSchema(
|
|
1000
|
-
|
|
1001
|
-
|
|
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:
|
|
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(
|
|
1012
|
-
|
|
1013
|
-
|
|
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:
|
|
1242
|
+
insufficient: 'A baseline must identify what is measured and the starting value or condition.',
|
|
1020
1243
|
},
|
|
1021
1244
|
},
|
|
1022
1245
|
}),
|
|
1023
|
-
element(elementPositionInSchema(
|
|
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:
|
|
1251
|
+
insufficient: 'An outcome must identify the target object and the desired value or state.',
|
|
1032
1252
|
},
|
|
1033
1253
|
},
|
|
1034
1254
|
}),
|
|
1035
|
-
element(elementPositionInSchema(
|
|
1036
|
-
|
|
1037
|
-
|
|
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:
|
|
1263
|
+
insufficient: 'A performance variable must identify the metric or indicator to track.',
|
|
1044
1264
|
},
|
|
1045
1265
|
},
|
|
1046
1266
|
}),
|
|
1047
|
-
element(elementPositionInSchema(
|
|
1048
|
-
|
|
1049
|
-
|
|
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:
|
|
1275
|
+
insufficient: 'A capability must identify the organizational ability required to support the strategy.',
|
|
1056
1276
|
},
|
|
1057
1277
|
},
|
|
1058
1278
|
}),
|
|
1059
|
-
element(elementPositionInSchema(
|
|
1060
|
-
|
|
1061
|
-
|
|
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:
|
|
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(
|
|
1072
|
-
|
|
1073
|
-
|
|
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:
|
|
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(
|
|
1086
|
-
relationship(
|
|
1087
|
-
relationship(
|
|
1088
|
-
cardinality:
|
|
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:
|
|
1311
|
+
missing: 'Link the key challenge to at least one guiding policy.',
|
|
1092
1312
|
},
|
|
1093
1313
|
}),
|
|
1094
|
-
relationship(
|
|
1095
|
-
relationship(
|
|
1096
|
-
relationship(
|
|
1097
|
-
relationship(
|
|
1098
|
-
cardinality:
|
|
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:
|
|
1102
|
-
},
|
|
1103
|
-
}),
|
|
1104
|
-
relationship(
|
|
1105
|
-
relationship(
|
|
1106
|
-
relationship(
|
|
1107
|
-
relationship(
|
|
1108
|
-
relationship(
|
|
1109
|
-
relationship(
|
|
1110
|
-
relationship(
|
|
1111
|
-
relationship(
|
|
1112
|
-
relationship(
|
|
1113
|
-
relationship(
|
|
1114
|
-
relationship(
|
|
1115
|
-
relationship(
|
|
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
|