@forwardimpact/schema 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. package/bin/fit-schema.js +260 -0
  2. package/examples/behaviours/_index.yaml +8 -0
  3. package/examples/behaviours/outcome_ownership.yaml +43 -0
  4. package/examples/behaviours/polymathic_knowledge.yaml +41 -0
  5. package/examples/behaviours/precise_communication.yaml +39 -0
  6. package/examples/behaviours/relentless_curiosity.yaml +37 -0
  7. package/examples/behaviours/systems_thinking.yaml +40 -0
  8. package/examples/capabilities/_index.yaml +8 -0
  9. package/examples/capabilities/business.yaml +189 -0
  10. package/examples/capabilities/delivery.yaml +305 -0
  11. package/examples/capabilities/people.yaml +68 -0
  12. package/examples/capabilities/reliability.yaml +414 -0
  13. package/examples/capabilities/scale.yaml +378 -0
  14. package/examples/copilot-setup-steps.yaml +25 -0
  15. package/examples/devcontainer.yaml +21 -0
  16. package/examples/disciplines/_index.yaml +6 -0
  17. package/examples/disciplines/data_engineering.yaml +78 -0
  18. package/examples/disciplines/engineering_management.yaml +63 -0
  19. package/examples/disciplines/software_engineering.yaml +78 -0
  20. package/examples/drivers.yaml +202 -0
  21. package/examples/framework.yaml +69 -0
  22. package/examples/grades.yaml +115 -0
  23. package/examples/questions/behaviours/outcome_ownership.yaml +51 -0
  24. package/examples/questions/behaviours/polymathic_knowledge.yaml +47 -0
  25. package/examples/questions/behaviours/precise_communication.yaml +54 -0
  26. package/examples/questions/behaviours/relentless_curiosity.yaml +50 -0
  27. package/examples/questions/behaviours/systems_thinking.yaml +52 -0
  28. package/examples/questions/skills/architecture_design.yaml +53 -0
  29. package/examples/questions/skills/cloud_platforms.yaml +47 -0
  30. package/examples/questions/skills/code_quality.yaml +48 -0
  31. package/examples/questions/skills/data_modeling.yaml +45 -0
  32. package/examples/questions/skills/devops.yaml +46 -0
  33. package/examples/questions/skills/full_stack_development.yaml +47 -0
  34. package/examples/questions/skills/sre_practices.yaml +43 -0
  35. package/examples/questions/skills/stakeholder_management.yaml +48 -0
  36. package/examples/questions/skills/team_collaboration.yaml +42 -0
  37. package/examples/questions/skills/technical_writing.yaml +42 -0
  38. package/examples/self-assessments.yaml +64 -0
  39. package/examples/stages.yaml +139 -0
  40. package/examples/tracks/_index.yaml +5 -0
  41. package/examples/tracks/platform.yaml +49 -0
  42. package/examples/tracks/sre.yaml +48 -0
  43. package/examples/vscode-settings.yaml +21 -0
  44. package/lib/index-generator.js +65 -0
  45. package/lib/index.js +44 -0
  46. package/lib/levels.js +601 -0
  47. package/lib/loader.js +599 -0
  48. package/lib/modifiers.js +23 -0
  49. package/lib/schema-validation.js +438 -0
  50. package/lib/validation.js +2130 -0
  51. package/package.json +49 -0
  52. package/schema/json/behaviour-questions.schema.json +68 -0
  53. package/schema/json/behaviour.schema.json +73 -0
  54. package/schema/json/capability.schema.json +220 -0
  55. package/schema/json/defs.schema.json +132 -0
  56. package/schema/json/discipline.schema.json +132 -0
  57. package/schema/json/drivers.schema.json +48 -0
  58. package/schema/json/framework.schema.json +55 -0
  59. package/schema/json/grades.schema.json +121 -0
  60. package/schema/json/index.schema.json +18 -0
  61. package/schema/json/self-assessments.schema.json +52 -0
  62. package/schema/json/skill-questions.schema.json +68 -0
  63. package/schema/json/stages.schema.json +84 -0
  64. package/schema/json/track.schema.json +100 -0
  65. package/schema/rdf/pathway.ttl +2362 -0
package/package.json ADDED
@@ -0,0 +1,49 @@
1
+ {
2
+ "name": "@forwardimpact/schema",
3
+ "version": "0.1.0",
4
+ "description": "Schema definitions and validation for Engineering Pathway framework",
5
+ "license": "Apache-2.0",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "https://github.com/forwardimpact/pathway",
9
+ "directory": "apps/schema"
10
+ },
11
+ "type": "module",
12
+ "main": "lib/index.js",
13
+ "bin": {
14
+ "fit-schema": "./bin/fit-schema.js"
15
+ },
16
+ "scripts": {
17
+ "validate": "node ./bin/fit-schema.js validate",
18
+ "generate-index": "node ./bin/fit-schema.js generate-index",
19
+ "validate:shacl": "node ./bin/fit-schema.js validate:shacl"
20
+ },
21
+ "files": [
22
+ "bin/",
23
+ "examples/",
24
+ "lib/",
25
+ "schema/"
26
+ ],
27
+ "exports": {
28
+ ".": "./lib/index.js",
29
+ "./loader": "./lib/loader.js",
30
+ "./validation": "./lib/validation.js",
31
+ "./schema-validation": "./lib/schema-validation.js",
32
+ "./index-generator": "./lib/index-generator.js",
33
+ "./levels": "./lib/levels.js",
34
+ "./examples/*": "./examples/*",
35
+ "./schema/json/*": "./schema/json/*",
36
+ "./schema/rdf/*": "./schema/rdf/*"
37
+ },
38
+ "dependencies": {
39
+ "ajv": "^8.17.1",
40
+ "ajv-formats": "^3.0.1",
41
+ "yaml": "^2.3.4"
42
+ },
43
+ "devDependencies": {
44
+ "n3": "^2.0.1"
45
+ },
46
+ "engines": {
47
+ "node": ">=18.0.0"
48
+ }
49
+ }
@@ -0,0 +1,68 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "https://schema.forwardimpact.team/json/behaviour-questions.schema.json",
4
+ "title": "Behaviour Interview Questions",
5
+ "description": "Interview questions for a behaviour, organized by maturity level",
6
+ "type": "object",
7
+ "properties": {
8
+ "emerging": {
9
+ "type": "array",
10
+ "items": { "$ref": "#/$defs/question" }
11
+ },
12
+ "developing": {
13
+ "type": "array",
14
+ "items": { "$ref": "#/$defs/question" }
15
+ },
16
+ "practicing": {
17
+ "type": "array",
18
+ "items": { "$ref": "#/$defs/question" }
19
+ },
20
+ "role_modeling": {
21
+ "type": "array",
22
+ "items": { "$ref": "#/$defs/question" }
23
+ },
24
+ "exemplifying": {
25
+ "type": "array",
26
+ "items": { "$ref": "#/$defs/question" }
27
+ }
28
+ },
29
+ "additionalProperties": false,
30
+ "$defs": {
31
+ "question": {
32
+ "type": "object",
33
+ "required": ["id", "text", "lookingFor"],
34
+ "properties": {
35
+ "id": {
36
+ "type": "string",
37
+ "pattern": "^[a-z][a-z0-9_]*$",
38
+ "description": "Unique question identifier (format: {abbrev}_{maturity_abbrev}_{number})"
39
+ },
40
+ "text": {
41
+ "type": "string",
42
+ "maxLength": 150,
43
+ "description": "The question text (second person, under 150 characters)"
44
+ },
45
+ "lookingFor": {
46
+ "type": "array",
47
+ "description": "2-4 bullet points of good answer indicators",
48
+ "minItems": 1,
49
+ "maxItems": 4,
50
+ "items": { "type": "string" }
51
+ },
52
+ "expectedDurationMinutes": {
53
+ "type": "integer",
54
+ "minimum": 1,
55
+ "description": "Expected duration in minutes (default: 5 for emerging/developing, 8-10 for higher)"
56
+ },
57
+ "followUps": {
58
+ "type": "array",
59
+ "description": "1-3 probing questions for deeper exploration",
60
+ "minItems": 1,
61
+ "maxItems": 3,
62
+ "items": { "type": "string" }
63
+ }
64
+ },
65
+ "additionalProperties": false
66
+ }
67
+ }
68
+ }
@@ -0,0 +1,73 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "https://schema.forwardimpact.team/json/behaviour.schema.json",
4
+ "title": "Behaviour",
5
+ "description": "Mindset and way of working that underpins effective application of skills",
6
+ "type": "object",
7
+ "required": ["name", "human"],
8
+ "properties": {
9
+ "name": {
10
+ "type": "string",
11
+ "description": "Human-readable behaviour name"
12
+ },
13
+ "human": {
14
+ "$ref": "#/$defs/behaviourHumanSection",
15
+ "description": "Human-specific content"
16
+ },
17
+ "agent": {
18
+ "$ref": "#/$defs/behaviourAgentSection",
19
+ "description": "Agent-specific content"
20
+ }
21
+ },
22
+ "additionalProperties": false,
23
+ "$defs": {
24
+ "behaviourHumanSection": {
25
+ "type": "object",
26
+ "required": ["description", "maturityDescriptions"],
27
+ "properties": {
28
+ "description": {
29
+ "type": "string",
30
+ "description": "Description of the behaviour"
31
+ },
32
+ "maturityDescriptions": {
33
+ "$ref": "#/$defs/maturityDescriptions",
34
+ "description": "Description of expectations at each maturity level"
35
+ }
36
+ },
37
+ "additionalProperties": false
38
+ },
39
+ "maturityDescriptions": {
40
+ "type": "object",
41
+ "properties": {
42
+ "emerging": { "type": "string" },
43
+ "developing": { "type": "string" },
44
+ "practicing": { "type": "string" },
45
+ "role_modeling": { "type": "string" },
46
+ "exemplifying": { "type": "string" }
47
+ },
48
+ "required": [
49
+ "emerging",
50
+ "developing",
51
+ "practicing",
52
+ "role_modeling",
53
+ "exemplifying"
54
+ ],
55
+ "additionalProperties": false
56
+ },
57
+ "behaviourAgentSection": {
58
+ "type": "object",
59
+ "required": ["title", "workingStyle"],
60
+ "properties": {
61
+ "title": {
62
+ "type": "string",
63
+ "description": "Short title for the behaviour's agent application"
64
+ },
65
+ "workingStyle": {
66
+ "type": "string",
67
+ "description": "How the agent should apply this behaviour"
68
+ }
69
+ },
70
+ "additionalProperties": false
71
+ }
72
+ }
73
+ }
@@ -0,0 +1,220 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "https://schema.forwardimpact.team/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
+ "displayOrder": {
23
+ "type": "integer",
24
+ "minimum": 1,
25
+ "description": "Order for display in UI"
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
+ "implementationReference": {
93
+ "type": "string",
94
+ "description": "Implementation patterns and code examples in markdown format (shared by human and agent)"
95
+ },
96
+ "toolReferences": {
97
+ "type": "array",
98
+ "description": "Recommended tools for this skill",
99
+ "items": { "$ref": "#/$defs/toolReference" }
100
+ }
101
+ },
102
+ "additionalProperties": false
103
+ },
104
+ "toolReference": {
105
+ "type": "object",
106
+ "required": ["name", "description", "useWhen"],
107
+ "properties": {
108
+ "name": {
109
+ "type": "string",
110
+ "description": "Tool name"
111
+ },
112
+ "url": {
113
+ "type": "string",
114
+ "format": "uri",
115
+ "description": "Link to tool documentation"
116
+ },
117
+ "simpleIcon": {
118
+ "type": "string",
119
+ "pattern": "^[a-z0-9]+$",
120
+ "description": "Simple Icons slug for the tool icon (e.g., 'terraform', 'docker')"
121
+ },
122
+ "description": {
123
+ "type": "string",
124
+ "description": "What this tool does"
125
+ },
126
+ "useWhen": {
127
+ "type": "string",
128
+ "description": "When to use this tool"
129
+ }
130
+ },
131
+ "additionalProperties": false
132
+ },
133
+ "skillHumanSection": {
134
+ "type": "object",
135
+ "required": ["description", "levelDescriptions"],
136
+ "properties": {
137
+ "description": {
138
+ "type": "string",
139
+ "description": "Description of the skill"
140
+ },
141
+ "levelDescriptions": {
142
+ "$ref": "#/$defs/levelDescriptions",
143
+ "description": "Description of expectations at each level"
144
+ }
145
+ },
146
+ "additionalProperties": false
147
+ },
148
+ "levelDescriptions": {
149
+ "type": "object",
150
+ "properties": {
151
+ "awareness": { "type": "string" },
152
+ "foundational": { "type": "string" },
153
+ "working": { "type": "string" },
154
+ "practitioner": { "type": "string" },
155
+ "expert": { "type": "string" }
156
+ },
157
+ "required": [
158
+ "awareness",
159
+ "foundational",
160
+ "working",
161
+ "practitioner",
162
+ "expert"
163
+ ],
164
+ "additionalProperties": false
165
+ },
166
+ "skillAgentSection": {
167
+ "type": "object",
168
+ "required": ["name", "description", "useWhen", "stages"],
169
+ "properties": {
170
+ "name": {
171
+ "type": "string",
172
+ "pattern": "^[a-z][a-z0-9-]*$",
173
+ "description": "Agent skill name (kebab-case)"
174
+ },
175
+ "description": {
176
+ "type": "string",
177
+ "description": "Brief description of what this skill provides"
178
+ },
179
+ "useWhen": {
180
+ "type": "string",
181
+ "description": "Triggering conditions - when agents should use this skill"
182
+ },
183
+ "stages": {
184
+ "type": "object",
185
+ "description": "Stage-specific guidance for applying the skill",
186
+ "properties": {
187
+ "specify": { "$ref": "#/$defs/skillStage" },
188
+ "plan": { "$ref": "#/$defs/skillStage" },
189
+ "code": { "$ref": "#/$defs/skillStage" },
190
+ "review": { "$ref": "#/$defs/skillStage" },
191
+ "deploy": { "$ref": "#/$defs/skillStage" }
192
+ },
193
+ "additionalProperties": false
194
+ }
195
+ },
196
+ "additionalProperties": false
197
+ },
198
+ "skillStage": {
199
+ "type": "object",
200
+ "required": ["focus", "activities", "ready"],
201
+ "properties": {
202
+ "focus": {
203
+ "type": "string",
204
+ "description": "Primary focus for this stage"
205
+ },
206
+ "activities": {
207
+ "type": "array",
208
+ "description": "Key activities to perform in this stage",
209
+ "items": { "type": "string" }
210
+ },
211
+ "ready": {
212
+ "type": "array",
213
+ "description": "Criteria that indicate readiness to move to next stage",
214
+ "items": { "type": "string" }
215
+ }
216
+ },
217
+ "additionalProperties": false
218
+ }
219
+ }
220
+ }
@@ -0,0 +1,132 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "https://schema.forwardimpact.team/json/defs.schema.json",
4
+ "title": "Engineering Pathway Common Definitions",
5
+ "description": "Shared definitions for all pathway schemas",
6
+ "$defs": {
7
+ "skillLevel": {
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
+ "levelDescriptions": {
35
+ "type": "object",
36
+ "description": "Description of expectations at each skill level",
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 level",
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
+ "gradeId": {
107
+ "type": "string",
108
+ "pattern": "^[A-Z][A-Z0-9]*$",
109
+ "description": "Grade 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,132 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "https://schema.forwardimpact.team/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
+ "minGrade": {
36
+ "type": "string",
37
+ "description": "Minimum grade 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
+ "beforeMakingChanges": {
115
+ "type": "array",
116
+ "description": "Checklist items to consider before making changes",
117
+ "items": { "type": "string" }
118
+ },
119
+ "delegation": {
120
+ "type": "string",
121
+ "description": "Guidance on when and how to delegate to subagents"
122
+ },
123
+ "constraints": {
124
+ "type": "array",
125
+ "description": "Things the agent should avoid or never do",
126
+ "items": { "type": "string" }
127
+ }
128
+ },
129
+ "additionalProperties": false
130
+ }
131
+ }
132
+ }