@forwardimpact/map 0.11.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 (83) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +67 -0
  3. package/bin/fit-map.js +287 -0
  4. package/examples/behaviours/_index.yaml +8 -0
  5. package/examples/behaviours/outcome_ownership.yaml +43 -0
  6. package/examples/behaviours/polymathic_knowledge.yaml +41 -0
  7. package/examples/behaviours/precise_communication.yaml +39 -0
  8. package/examples/behaviours/relentless_curiosity.yaml +37 -0
  9. package/examples/behaviours/systems_thinking.yaml +40 -0
  10. package/examples/capabilities/_index.yaml +8 -0
  11. package/examples/capabilities/business.yaml +205 -0
  12. package/examples/capabilities/delivery.yaml +1001 -0
  13. package/examples/capabilities/people.yaml +68 -0
  14. package/examples/capabilities/reliability.yaml +349 -0
  15. package/examples/capabilities/scale.yaml +1672 -0
  16. package/examples/copilot-setup-steps.yaml +25 -0
  17. package/examples/devcontainer.yaml +21 -0
  18. package/examples/disciplines/_index.yaml +6 -0
  19. package/examples/disciplines/data_engineering.yaml +68 -0
  20. package/examples/disciplines/engineering_management.yaml +61 -0
  21. package/examples/disciplines/software_engineering.yaml +68 -0
  22. package/examples/drivers.yaml +202 -0
  23. package/examples/framework.yaml +73 -0
  24. package/examples/levels.yaml +115 -0
  25. package/examples/questions/behaviours/outcome_ownership.yaml +228 -0
  26. package/examples/questions/behaviours/polymathic_knowledge.yaml +275 -0
  27. package/examples/questions/behaviours/precise_communication.yaml +248 -0
  28. package/examples/questions/behaviours/relentless_curiosity.yaml +248 -0
  29. package/examples/questions/behaviours/systems_thinking.yaml +238 -0
  30. package/examples/questions/capabilities/business.yaml +107 -0
  31. package/examples/questions/capabilities/delivery.yaml +101 -0
  32. package/examples/questions/capabilities/people.yaml +106 -0
  33. package/examples/questions/capabilities/reliability.yaml +105 -0
  34. package/examples/questions/capabilities/scale.yaml +104 -0
  35. package/examples/questions/skills/architecture_design.yaml +115 -0
  36. package/examples/questions/skills/cloud_platforms.yaml +105 -0
  37. package/examples/questions/skills/code_quality.yaml +162 -0
  38. package/examples/questions/skills/data_modeling.yaml +107 -0
  39. package/examples/questions/skills/devops.yaml +111 -0
  40. package/examples/questions/skills/full_stack_development.yaml +118 -0
  41. package/examples/questions/skills/sre_practices.yaml +113 -0
  42. package/examples/questions/skills/stakeholder_management.yaml +116 -0
  43. package/examples/questions/skills/team_collaboration.yaml +106 -0
  44. package/examples/questions/skills/technical_writing.yaml +110 -0
  45. package/examples/self-assessments.yaml +64 -0
  46. package/examples/stages.yaml +191 -0
  47. package/examples/tracks/_index.yaml +5 -0
  48. package/examples/tracks/platform.yaml +47 -0
  49. package/examples/tracks/sre.yaml +46 -0
  50. package/examples/vscode-settings.yaml +21 -0
  51. package/package.json +49 -0
  52. package/schema/json/behaviour-questions.schema.json +95 -0
  53. package/schema/json/behaviour.schema.json +73 -0
  54. package/schema/json/capability-questions.schema.json +95 -0
  55. package/schema/json/capability.schema.json +229 -0
  56. package/schema/json/defs.schema.json +132 -0
  57. package/schema/json/discipline.schema.json +123 -0
  58. package/schema/json/drivers.schema.json +48 -0
  59. package/schema/json/framework.schema.json +68 -0
  60. package/schema/json/levels.schema.json +121 -0
  61. package/schema/json/self-assessments.schema.json +52 -0
  62. package/schema/json/skill-questions.schema.json +83 -0
  63. package/schema/json/stages.schema.json +88 -0
  64. package/schema/json/track.schema.json +95 -0
  65. package/schema/rdf/behaviour-questions.ttl +128 -0
  66. package/schema/rdf/behaviour.ttl +130 -0
  67. package/schema/rdf/capability.ttl +466 -0
  68. package/schema/rdf/defs.ttl +396 -0
  69. package/schema/rdf/discipline.ttl +313 -0
  70. package/schema/rdf/drivers.ttl +84 -0
  71. package/schema/rdf/framework.ttl +166 -0
  72. package/schema/rdf/levels.ttl +357 -0
  73. package/schema/rdf/self-assessments.ttl +147 -0
  74. package/schema/rdf/skill-questions.ttl +155 -0
  75. package/schema/rdf/stages.ttl +166 -0
  76. package/schema/rdf/track.ttl +225 -0
  77. package/src/index-generator.js +65 -0
  78. package/src/index.js +44 -0
  79. package/src/levels.js +553 -0
  80. package/src/loader.js +608 -0
  81. package/src/modifiers.js +23 -0
  82. package/src/schema-validation.js +438 -0
  83. package/src/validation.js +2136 -0
@@ -0,0 +1,95 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "https://www.forwardimpact.team/schema/json/capability-questions.schema.json",
4
+ "title": "Capability Decomposition Questions",
5
+ "description": "Decomposition interview questions for a capability, organized by role type (professional/management) and level. Inspired by Palantir's decomposition interview technique.",
6
+ "type": "object",
7
+ "properties": {
8
+ "professionalQuestions": {
9
+ "description": "Questions for professional/IC roles (e.g., engineers)",
10
+ "$ref": "#/$defs/levelQuestions"
11
+ },
12
+ "managementQuestions": {
13
+ "description": "Questions for management roles (e.g., engineering managers, product managers)",
14
+ "$ref": "#/$defs/levelQuestions"
15
+ }
16
+ },
17
+ "additionalProperties": false,
18
+ "$defs": {
19
+ "levelQuestions": {
20
+ "type": "object",
21
+ "description": "Questions organized by capability level",
22
+ "properties": {
23
+ "awareness": {
24
+ "type": "array",
25
+ "items": { "$ref": "#/$defs/question" }
26
+ },
27
+ "foundational": {
28
+ "type": "array",
29
+ "items": { "$ref": "#/$defs/question" }
30
+ },
31
+ "working": {
32
+ "type": "array",
33
+ "items": { "$ref": "#/$defs/question" }
34
+ },
35
+ "practitioner": {
36
+ "type": "array",
37
+ "items": { "$ref": "#/$defs/question" }
38
+ },
39
+ "expert": {
40
+ "type": "array",
41
+ "items": { "$ref": "#/$defs/question" }
42
+ }
43
+ },
44
+ "additionalProperties": false
45
+ },
46
+ "question": {
47
+ "type": "object",
48
+ "required": ["id", "text", "lookingFor", "decompositionPrompts"],
49
+ "properties": {
50
+ "id": {
51
+ "type": "string",
52
+ "pattern": "^[a-z][a-z0-9_]*$",
53
+ "description": "Unique question identifier (format: {capability_abbrev}_{level_abbrev}_{number})"
54
+ },
55
+ "text": {
56
+ "type": "string",
57
+ "maxLength": 200,
58
+ "description": "The problem statement or scenario (second person, open-ended)"
59
+ },
60
+ "context": {
61
+ "type": "string",
62
+ "description": "Optional additional context to set up the scenario"
63
+ },
64
+ "decompositionPrompts": {
65
+ "type": "array",
66
+ "description": "3-5 guiding questions to help the candidate structure their thinking",
67
+ "minItems": 2,
68
+ "maxItems": 5,
69
+ "items": { "type": "string" }
70
+ },
71
+ "lookingFor": {
72
+ "type": "array",
73
+ "description": "2-4 indicators of a strong decomposition approach",
74
+ "minItems": 2,
75
+ "maxItems": 4,
76
+ "items": { "type": "string" }
77
+ },
78
+ "expectedDurationMinutes": {
79
+ "type": "integer",
80
+ "minimum": 5,
81
+ "default": 15,
82
+ "description": "Expected duration in minutes (default: 15 for decomposition)"
83
+ },
84
+ "followUps": {
85
+ "type": "array",
86
+ "description": "1-3 probing questions for deeper exploration",
87
+ "minItems": 1,
88
+ "maxItems": 3,
89
+ "items": { "type": "string" }
90
+ }
91
+ },
92
+ "additionalProperties": false
93
+ }
94
+ }
95
+ }
@@ -0,0 +1,229 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "https://www.forwardimpact.team/schema/json/capability.schema.json",
4
+ "title": "Capability",
5
+ "description": "Capability area that groups related skills with responsibilities and checklists",
6
+ "type": "object",
7
+ "required": ["name"],
8
+ "properties": {
9
+ "id": {
10
+ "type": "string",
11
+ "pattern": "^[a-z][a-z0-9_]*$",
12
+ "description": "Capability identifier (derived from filename if not specified)"
13
+ },
14
+ "name": {
15
+ "type": "string",
16
+ "description": "Human-readable capability name"
17
+ },
18
+ "emojiIcon": {
19
+ "type": "string",
20
+ "description": "Emoji for visual representation"
21
+ },
22
+ "ordinalRank": {
23
+ "type": "integer",
24
+ "minimum": 1,
25
+ "description": "Numeric rank for ordering capabilities (1 = first)"
26
+ },
27
+ "description": {
28
+ "type": "string",
29
+ "description": "Description of the capability area"
30
+ },
31
+ "professionalResponsibilities": {
32
+ "$ref": "#/$defs/responsibilitiesByLevel",
33
+ "description": "Responsibilities for professional/IC track by level"
34
+ },
35
+ "managementResponsibilities": {
36
+ "$ref": "#/$defs/responsibilitiesByLevel",
37
+ "description": "Responsibilities for management track by level"
38
+ },
39
+ "skills": {
40
+ "type": "array",
41
+ "description": "Skills within this capability",
42
+ "items": {
43
+ "$ref": "#/$defs/skill"
44
+ }
45
+ }
46
+ },
47
+ "additionalProperties": false,
48
+ "$defs": {
49
+ "responsibilitiesByLevel": {
50
+ "type": "object",
51
+ "properties": {
52
+ "awareness": { "type": "string" },
53
+ "foundational": { "type": "string" },
54
+ "working": { "type": "string" },
55
+ "practitioner": { "type": "string" },
56
+ "expert": { "type": "string" }
57
+ },
58
+ "required": [
59
+ "awareness",
60
+ "foundational",
61
+ "working",
62
+ "practitioner",
63
+ "expert"
64
+ ],
65
+ "additionalProperties": false
66
+ },
67
+ "skill": {
68
+ "type": "object",
69
+ "required": ["id", "name", "human"],
70
+ "properties": {
71
+ "id": {
72
+ "type": "string",
73
+ "pattern": "^[a-z][a-z0-9_]*$",
74
+ "description": "Unique skill identifier (snake_case)"
75
+ },
76
+ "name": {
77
+ "type": "string",
78
+ "description": "Human-readable skill name"
79
+ },
80
+ "isHumanOnly": {
81
+ "type": "boolean",
82
+ "description": "If true, this skill is excluded from agent profiles"
83
+ },
84
+ "human": {
85
+ "$ref": "#/$defs/skillHumanSection",
86
+ "description": "Human-specific content for the skill"
87
+ },
88
+ "agent": {
89
+ "$ref": "#/$defs/skillAgentSection",
90
+ "description": "Agent-specific content for the skill"
91
+ },
92
+ "toolReferences": {
93
+ "type": "array",
94
+ "description": "Required tools for this skill",
95
+ "items": { "$ref": "#/$defs/toolReference" }
96
+ },
97
+ "instructions": {
98
+ "type": "string",
99
+ "description": "Step-by-step workflow guidance for the main SKILL.md body"
100
+ },
101
+ "installScript": {
102
+ "type": "string",
103
+ "description": "Shell commands for environment setup, exported to scripts/install.sh"
104
+ },
105
+ "implementationReference": {
106
+ "type": "string",
107
+ "description": "Code examples and detailed reference material, exported to references/REFERENCE.md"
108
+ }
109
+ },
110
+ "additionalProperties": false
111
+ },
112
+ "toolReference": {
113
+ "type": "object",
114
+ "required": ["name", "description", "useWhen"],
115
+ "properties": {
116
+ "name": {
117
+ "type": "string",
118
+ "description": "Tool name"
119
+ },
120
+ "url": {
121
+ "type": "string",
122
+ "format": "uri",
123
+ "description": "Link to tool documentation"
124
+ },
125
+ "simpleIcon": {
126
+ "type": "string",
127
+ "pattern": "^[a-z0-9]+$",
128
+ "description": "Simple Icons slug for the tool icon (e.g., 'terraform', 'docker')"
129
+ },
130
+ "description": {
131
+ "type": "string",
132
+ "description": "What this tool does"
133
+ },
134
+ "useWhen": {
135
+ "type": "string",
136
+ "description": "When to use this tool"
137
+ }
138
+ },
139
+ "additionalProperties": false
140
+ },
141
+ "skillHumanSection": {
142
+ "type": "object",
143
+ "required": ["description", "proficiencyDescriptions"],
144
+ "properties": {
145
+ "description": {
146
+ "type": "string",
147
+ "description": "Description of the skill"
148
+ },
149
+ "proficiencyDescriptions": {
150
+ "$ref": "#/$defs/proficiencyDescriptions",
151
+ "description": "Description of expectations at each level"
152
+ }
153
+ },
154
+ "additionalProperties": false
155
+ },
156
+ "proficiencyDescriptions": {
157
+ "type": "object",
158
+ "properties": {
159
+ "awareness": { "type": "string" },
160
+ "foundational": { "type": "string" },
161
+ "working": { "type": "string" },
162
+ "practitioner": { "type": "string" },
163
+ "expert": { "type": "string" }
164
+ },
165
+ "required": [
166
+ "awareness",
167
+ "foundational",
168
+ "working",
169
+ "practitioner",
170
+ "expert"
171
+ ],
172
+ "additionalProperties": false
173
+ },
174
+ "skillAgentSection": {
175
+ "type": "object",
176
+ "required": ["name", "description", "useWhen", "stages"],
177
+ "properties": {
178
+ "name": {
179
+ "type": "string",
180
+ "pattern": "^[a-z][a-z0-9-]*$",
181
+ "description": "Agent skill name (kebab-case)"
182
+ },
183
+ "description": {
184
+ "type": "string",
185
+ "description": "Brief description of what this skill provides"
186
+ },
187
+ "useWhen": {
188
+ "type": "string",
189
+ "description": "Triggering conditions - when agents should use this skill"
190
+ },
191
+ "stages": {
192
+ "type": "object",
193
+ "description": "Stage-specific guidance for applying the skill",
194
+ "properties": {
195
+ "specify": { "$ref": "#/$defs/skillStage" },
196
+ "plan": { "$ref": "#/$defs/skillStage" },
197
+ "onboard": { "$ref": "#/$defs/skillStage" },
198
+ "code": { "$ref": "#/$defs/skillStage" },
199
+ "review": { "$ref": "#/$defs/skillStage" },
200
+ "deploy": { "$ref": "#/$defs/skillStage" }
201
+ },
202
+ "additionalProperties": false
203
+ }
204
+ },
205
+ "additionalProperties": false
206
+ },
207
+ "skillStage": {
208
+ "type": "object",
209
+ "required": ["focus", "readChecklist", "confirmChecklist"],
210
+ "properties": {
211
+ "focus": {
212
+ "type": "string",
213
+ "description": "Primary focus for this stage"
214
+ },
215
+ "readChecklist": {
216
+ "type": "array",
217
+ "description": "Read-Then-Do Checklist: steps to follow in order during this stage",
218
+ "items": { "type": "string" }
219
+ },
220
+ "confirmChecklist": {
221
+ "type": "array",
222
+ "description": "Do-Then-Confirm Checklist: items to verify before moving to next stage",
223
+ "items": { "type": "string" }
224
+ }
225
+ },
226
+ "additionalProperties": false
227
+ }
228
+ }
229
+ }
@@ -0,0 +1,132 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "https://www.forwardimpact.team/schema/json/defs.schema.json",
4
+ "title": "Engineering Pathway Common Definitions",
5
+ "description": "Shared definitions for all pathway schemas",
6
+ "$defs": {
7
+ "skillProficiency": {
8
+ "type": "string",
9
+ "enum": [
10
+ "awareness",
11
+ "foundational",
12
+ "working",
13
+ "practitioner",
14
+ "expert"
15
+ ],
16
+ "description": "Skill proficiency level from lowest to highest"
17
+ },
18
+ "behaviourMaturity": {
19
+ "type": "string",
20
+ "enum": [
21
+ "emerging",
22
+ "developing",
23
+ "practicing",
24
+ "role_modeling",
25
+ "exemplifying"
26
+ ],
27
+ "description": "Behaviour maturity level from lowest to highest"
28
+ },
29
+ "stageId": {
30
+ "type": "string",
31
+ "enum": ["plan", "code", "review"],
32
+ "description": "Lifecycle stage identifier"
33
+ },
34
+ "proficiencyDescriptions": {
35
+ "type": "object",
36
+ "description": "Description of expectations at each skill proficiency",
37
+ "properties": {
38
+ "awareness": { "type": "string" },
39
+ "foundational": { "type": "string" },
40
+ "working": { "type": "string" },
41
+ "practitioner": { "type": "string" },
42
+ "expert": { "type": "string" }
43
+ },
44
+ "required": [
45
+ "awareness",
46
+ "foundational",
47
+ "working",
48
+ "practitioner",
49
+ "expert"
50
+ ],
51
+ "additionalProperties": false
52
+ },
53
+ "maturityDescriptions": {
54
+ "type": "object",
55
+ "description": "Description of expectations at each behaviour maturity level",
56
+ "properties": {
57
+ "emerging": { "type": "string" },
58
+ "developing": { "type": "string" },
59
+ "practicing": { "type": "string" },
60
+ "role_modeling": { "type": "string" },
61
+ "exemplifying": { "type": "string" }
62
+ },
63
+ "required": [
64
+ "emerging",
65
+ "developing",
66
+ "practicing",
67
+ "role_modeling",
68
+ "exemplifying"
69
+ ],
70
+ "additionalProperties": false
71
+ },
72
+ "responsibilitiesByLevel": {
73
+ "type": "object",
74
+ "description": "Responsibility descriptions by skill proficiency",
75
+ "properties": {
76
+ "awareness": { "type": "string" },
77
+ "foundational": { "type": "string" },
78
+ "working": { "type": "string" },
79
+ "practitioner": { "type": "string" },
80
+ "expert": { "type": "string" }
81
+ },
82
+ "required": [
83
+ "awareness",
84
+ "foundational",
85
+ "working",
86
+ "practitioner",
87
+ "expert"
88
+ ],
89
+ "additionalProperties": false
90
+ },
91
+ "skillId": {
92
+ "type": "string",
93
+ "pattern": "^[a-z][a-z0-9_]*$",
94
+ "description": "Skill identifier (snake_case)"
95
+ },
96
+ "behaviourId": {
97
+ "type": "string",
98
+ "pattern": "^[a-z][a-z0-9_]*$",
99
+ "description": "Behaviour identifier (snake_case)"
100
+ },
101
+ "capabilityId": {
102
+ "type": "string",
103
+ "pattern": "^[a-z][a-z0-9_]*$",
104
+ "description": "Capability identifier (snake_case)"
105
+ },
106
+ "levelId": {
107
+ "type": "string",
108
+ "pattern": "^[A-Z][A-Z0-9]*$",
109
+ "description": "Level identifier (uppercase)"
110
+ },
111
+ "disciplineId": {
112
+ "type": "string",
113
+ "pattern": "^[a-z][a-z0-9_]*$",
114
+ "description": "Discipline identifier (snake_case)"
115
+ },
116
+ "trackId": {
117
+ "type": "string",
118
+ "pattern": "^[a-z][a-z0-9_]*$",
119
+ "description": "Track identifier (snake_case)"
120
+ },
121
+ "modifier": {
122
+ "type": "integer",
123
+ "description": "Modifier value for adjusting levels"
124
+ },
125
+ "normalizedModifier": {
126
+ "type": "integer",
127
+ "minimum": -1,
128
+ "maximum": 1,
129
+ "description": "Modifier value restricted to -1, 0, or 1"
130
+ }
131
+ }
132
+ }
@@ -0,0 +1,123 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "https://www.forwardimpact.team/schema/json/discipline.schema.json",
4
+ "title": "Discipline",
5
+ "description": "Engineering specialization that defines T-shaped skill profiles",
6
+ "type": "object",
7
+ "required": ["specialization", "roleTitle", "coreSkills", "validTracks"],
8
+ "properties": {
9
+ "specialization": {
10
+ "type": "string",
11
+ "description": "Name of the specialization (e.g., Software Engineering)"
12
+ },
13
+ "roleTitle": {
14
+ "type": "string",
15
+ "description": "Base role title (e.g., Software Engineer)"
16
+ },
17
+ "isProfessional": {
18
+ "type": "boolean",
19
+ "description": "If true, this is an IC/professional discipline (default true)"
20
+ },
21
+ "isManagement": {
22
+ "type": "boolean",
23
+ "description": "If true, this is a management discipline (default false)"
24
+ },
25
+ "validTracks": {
26
+ "type": "array",
27
+ "description": "REQUIRED. Explicit list of valid tracks. Use null to allow trackless (generalist). Empty array = no valid combinations.",
28
+ "items": {
29
+ "oneOf": [
30
+ { "type": "null" },
31
+ { "type": "string", "pattern": "^[a-z][a-z0-9_]*$" }
32
+ ]
33
+ }
34
+ },
35
+ "minLevel": {
36
+ "type": "string",
37
+ "description": "Minimum level required for this discipline"
38
+ },
39
+ "description": {
40
+ "type": "string",
41
+ "description": "Description of the discipline's focus"
42
+ },
43
+ "coreSkills": {
44
+ "type": "array",
45
+ "description": "Primary skills for deep expertise (references skill IDs)",
46
+ "minItems": 1,
47
+ "items": {
48
+ "type": "string",
49
+ "pattern": "^[a-z][a-z0-9_]*$"
50
+ }
51
+ },
52
+ "supportingSkills": {
53
+ "type": "array",
54
+ "description": "Secondary skills for supporting capabilities (references skill IDs)",
55
+ "items": {
56
+ "type": "string",
57
+ "pattern": "^[a-z][a-z0-9_]*$"
58
+ }
59
+ },
60
+ "broadSkills": {
61
+ "type": "array",
62
+ "description": "Skills for general awareness (references skill IDs)",
63
+ "items": {
64
+ "type": "string",
65
+ "pattern": "^[a-z][a-z0-9_]*$"
66
+ }
67
+ },
68
+ "behaviourModifiers": {
69
+ "type": "object",
70
+ "description": "Modifiers to behaviour expectations (behaviour ID → modifier)",
71
+ "additionalProperties": {
72
+ "type": "integer",
73
+ "minimum": -1,
74
+ "maximum": 1
75
+ }
76
+ },
77
+ "human": {
78
+ "$ref": "#/$defs/disciplineHumanSection",
79
+ "description": "Human-specific content"
80
+ },
81
+ "agent": {
82
+ "$ref": "#/$defs/disciplineAgentSection",
83
+ "description": "Agent-specific content"
84
+ }
85
+ },
86
+ "additionalProperties": false,
87
+ "$defs": {
88
+ "disciplineHumanSection": {
89
+ "type": "object",
90
+ "properties": {
91
+ "professionalRoleSummary": {
92
+ "type": "string",
93
+ "description": "Role summary for professional/IC track. May use {roleTitle} placeholder."
94
+ },
95
+ "managementRoleSummary": {
96
+ "type": "string",
97
+ "description": "Role summary for management track. May use {specialization} placeholder."
98
+ }
99
+ },
100
+ "additionalProperties": false
101
+ },
102
+ "disciplineAgentSection": {
103
+ "type": "object",
104
+ "required": ["identity"],
105
+ "properties": {
106
+ "identity": {
107
+ "type": "string",
108
+ "description": "Core identity statement for the agent. May use {roleTitle} or {roleName} placeholder."
109
+ },
110
+ "priority": {
111
+ "type": "string",
112
+ "description": "Priority guidance for the agent"
113
+ },
114
+ "constraints": {
115
+ "type": "array",
116
+ "description": "Things the agent should avoid or never do",
117
+ "items": { "type": "string" }
118
+ }
119
+ },
120
+ "additionalProperties": false
121
+ }
122
+ }
123
+ }
@@ -0,0 +1,48 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "https://www.forwardimpact.team/schema/json/drivers.schema.json",
4
+ "title": "Drivers",
5
+ "description": "Organizational outcomes that productive teams achieve",
6
+ "type": "array",
7
+ "items": {
8
+ "$ref": "#/$defs/driver"
9
+ },
10
+ "$defs": {
11
+ "driver": {
12
+ "type": "object",
13
+ "required": ["id", "name"],
14
+ "properties": {
15
+ "id": {
16
+ "type": "string",
17
+ "pattern": "^[a-z][a-z0-9_]*$",
18
+ "description": "Unique driver identifier (snake_case)"
19
+ },
20
+ "name": {
21
+ "type": "string",
22
+ "description": "Human-readable driver name"
23
+ },
24
+ "description": {
25
+ "type": "string",
26
+ "description": "Description of the business outcome"
27
+ },
28
+ "contributingSkills": {
29
+ "type": "array",
30
+ "description": "Skills that contribute to this driver (references skill IDs)",
31
+ "items": {
32
+ "type": "string",
33
+ "pattern": "^[a-z][a-z0-9_]*$"
34
+ }
35
+ },
36
+ "contributingBehaviours": {
37
+ "type": "array",
38
+ "description": "Behaviours that contribute to this driver (references behaviour IDs)",
39
+ "items": {
40
+ "type": "string",
41
+ "pattern": "^[a-z][a-z0-9_]*$"
42
+ }
43
+ }
44
+ },
45
+ "additionalProperties": false
46
+ }
47
+ }
48
+ }