@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.
- package/bin/fit-schema.js +260 -0
- package/examples/behaviours/_index.yaml +8 -0
- package/examples/behaviours/outcome_ownership.yaml +43 -0
- package/examples/behaviours/polymathic_knowledge.yaml +41 -0
- package/examples/behaviours/precise_communication.yaml +39 -0
- package/examples/behaviours/relentless_curiosity.yaml +37 -0
- package/examples/behaviours/systems_thinking.yaml +40 -0
- package/examples/capabilities/_index.yaml +8 -0
- package/examples/capabilities/business.yaml +189 -0
- package/examples/capabilities/delivery.yaml +305 -0
- package/examples/capabilities/people.yaml +68 -0
- package/examples/capabilities/reliability.yaml +414 -0
- package/examples/capabilities/scale.yaml +378 -0
- package/examples/copilot-setup-steps.yaml +25 -0
- package/examples/devcontainer.yaml +21 -0
- package/examples/disciplines/_index.yaml +6 -0
- package/examples/disciplines/data_engineering.yaml +78 -0
- package/examples/disciplines/engineering_management.yaml +63 -0
- package/examples/disciplines/software_engineering.yaml +78 -0
- package/examples/drivers.yaml +202 -0
- package/examples/framework.yaml +69 -0
- package/examples/grades.yaml +115 -0
- package/examples/questions/behaviours/outcome_ownership.yaml +51 -0
- package/examples/questions/behaviours/polymathic_knowledge.yaml +47 -0
- package/examples/questions/behaviours/precise_communication.yaml +54 -0
- package/examples/questions/behaviours/relentless_curiosity.yaml +50 -0
- package/examples/questions/behaviours/systems_thinking.yaml +52 -0
- package/examples/questions/skills/architecture_design.yaml +53 -0
- package/examples/questions/skills/cloud_platforms.yaml +47 -0
- package/examples/questions/skills/code_quality.yaml +48 -0
- package/examples/questions/skills/data_modeling.yaml +45 -0
- package/examples/questions/skills/devops.yaml +46 -0
- package/examples/questions/skills/full_stack_development.yaml +47 -0
- package/examples/questions/skills/sre_practices.yaml +43 -0
- package/examples/questions/skills/stakeholder_management.yaml +48 -0
- package/examples/questions/skills/team_collaboration.yaml +42 -0
- package/examples/questions/skills/technical_writing.yaml +42 -0
- package/examples/self-assessments.yaml +64 -0
- package/examples/stages.yaml +139 -0
- package/examples/tracks/_index.yaml +5 -0
- package/examples/tracks/platform.yaml +49 -0
- package/examples/tracks/sre.yaml +48 -0
- package/examples/vscode-settings.yaml +21 -0
- package/lib/index-generator.js +65 -0
- package/lib/index.js +44 -0
- package/lib/levels.js +601 -0
- package/lib/loader.js +599 -0
- package/lib/modifiers.js +23 -0
- package/lib/schema-validation.js +438 -0
- package/lib/validation.js +2130 -0
- package/package.json +49 -0
- package/schema/json/behaviour-questions.schema.json +68 -0
- package/schema/json/behaviour.schema.json +73 -0
- package/schema/json/capability.schema.json +220 -0
- package/schema/json/defs.schema.json +132 -0
- package/schema/json/discipline.schema.json +132 -0
- package/schema/json/drivers.schema.json +48 -0
- package/schema/json/framework.schema.json +55 -0
- package/schema/json/grades.schema.json +121 -0
- package/schema/json/index.schema.json +18 -0
- package/schema/json/self-assessments.schema.json +52 -0
- package/schema/json/skill-questions.schema.json +68 -0
- package/schema/json/stages.schema.json +84 -0
- package/schema/json/track.schema.json +100 -0
- package/schema/rdf/pathway.ttl +2362 -0
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
3
|
+
"$id": "https://schema.forwardimpact.team/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
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
3
|
+
"$id": "https://schema.forwardimpact.team/json/framework.schema.json",
|
|
4
|
+
"title": "Framework",
|
|
5
|
+
"description": "High-level framework configuration and entity definitions",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"required": ["title"],
|
|
8
|
+
"properties": {
|
|
9
|
+
"title": {
|
|
10
|
+
"type": "string",
|
|
11
|
+
"description": "Title of the engineering pathway"
|
|
12
|
+
},
|
|
13
|
+
"emojiIcon": {
|
|
14
|
+
"type": "string",
|
|
15
|
+
"description": "Emoji for visual representation"
|
|
16
|
+
},
|
|
17
|
+
"tag": {
|
|
18
|
+
"type": "string",
|
|
19
|
+
"description": "Organization tag or identifier"
|
|
20
|
+
},
|
|
21
|
+
"description": {
|
|
22
|
+
"type": "string",
|
|
23
|
+
"description": "Description of the framework's purpose"
|
|
24
|
+
},
|
|
25
|
+
"entityDefinitions": {
|
|
26
|
+
"type": "object",
|
|
27
|
+
"description": "Definitions for each entity type used in pages and chapters",
|
|
28
|
+
"additionalProperties": {
|
|
29
|
+
"$ref": "#/$defs/entityDefinition"
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
},
|
|
33
|
+
"additionalProperties": false,
|
|
34
|
+
"$defs": {
|
|
35
|
+
"entityDefinition": {
|
|
36
|
+
"type": "object",
|
|
37
|
+
"required": ["title"],
|
|
38
|
+
"properties": {
|
|
39
|
+
"title": {
|
|
40
|
+
"type": "string",
|
|
41
|
+
"description": "Display title for the entity"
|
|
42
|
+
},
|
|
43
|
+
"emojiIcon": {
|
|
44
|
+
"type": "string",
|
|
45
|
+
"description": "Emoji for visual representation"
|
|
46
|
+
},
|
|
47
|
+
"description": {
|
|
48
|
+
"type": "string",
|
|
49
|
+
"description": "Description of the entity type"
|
|
50
|
+
}
|
|
51
|
+
},
|
|
52
|
+
"additionalProperties": false
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
3
|
+
"$id": "https://schema.forwardimpact.team/json/grades.schema.json",
|
|
4
|
+
"title": "Grades",
|
|
5
|
+
"description": "Career levels defining expectations for skill proficiency, behaviour maturity, and scope of impact",
|
|
6
|
+
"type": "array",
|
|
7
|
+
"items": {
|
|
8
|
+
"$ref": "#/$defs/grade"
|
|
9
|
+
},
|
|
10
|
+
"$defs": {
|
|
11
|
+
"grade": {
|
|
12
|
+
"type": "object",
|
|
13
|
+
"required": [
|
|
14
|
+
"id",
|
|
15
|
+
"professionalTitle",
|
|
16
|
+
"managementTitle",
|
|
17
|
+
"ordinalRank",
|
|
18
|
+
"baseSkillLevels",
|
|
19
|
+
"baseBehaviourMaturity"
|
|
20
|
+
],
|
|
21
|
+
"properties": {
|
|
22
|
+
"id": {
|
|
23
|
+
"type": "string",
|
|
24
|
+
"pattern": "^[A-Z][A-Z0-9]*$",
|
|
25
|
+
"description": "Unique grade identifier (e.g., L1, L2, L3)"
|
|
26
|
+
},
|
|
27
|
+
"professionalTitle": {
|
|
28
|
+
"type": "string",
|
|
29
|
+
"description": "Title for professional/IC track (e.g., Engineer I, Senior Engineer)"
|
|
30
|
+
},
|
|
31
|
+
"managementTitle": {
|
|
32
|
+
"type": "string",
|
|
33
|
+
"description": "Title for management track (e.g., Manager, Senior Manager)"
|
|
34
|
+
},
|
|
35
|
+
"typicalExperienceRange": {
|
|
36
|
+
"type": "string",
|
|
37
|
+
"description": "Expected years of experience range (e.g., '0-2', '5-8', '12+')"
|
|
38
|
+
},
|
|
39
|
+
"ordinalRank": {
|
|
40
|
+
"type": "integer",
|
|
41
|
+
"minimum": 1,
|
|
42
|
+
"description": "Numeric rank for ordering grades (1 = lowest)"
|
|
43
|
+
},
|
|
44
|
+
"qualificationSummary": {
|
|
45
|
+
"type": "string",
|
|
46
|
+
"description": "Summary of qualifications expected at this grade. May use {typicalExperienceRange} placeholder."
|
|
47
|
+
},
|
|
48
|
+
"baseSkillLevels": {
|
|
49
|
+
"type": "object",
|
|
50
|
+
"description": "Base skill levels by skill tier for this grade",
|
|
51
|
+
"required": ["primary", "secondary", "broad"],
|
|
52
|
+
"properties": {
|
|
53
|
+
"primary": {
|
|
54
|
+
"$ref": "#/$defs/skillLevel",
|
|
55
|
+
"description": "Level for core/primary skills"
|
|
56
|
+
},
|
|
57
|
+
"secondary": {
|
|
58
|
+
"$ref": "#/$defs/skillLevel",
|
|
59
|
+
"description": "Level for supporting/secondary skills"
|
|
60
|
+
},
|
|
61
|
+
"broad": {
|
|
62
|
+
"$ref": "#/$defs/skillLevel",
|
|
63
|
+
"description": "Level for broad skills"
|
|
64
|
+
}
|
|
65
|
+
},
|
|
66
|
+
"additionalProperties": false
|
|
67
|
+
},
|
|
68
|
+
"baseBehaviourMaturity": {
|
|
69
|
+
"$ref": "#/$defs/behaviourMaturity",
|
|
70
|
+
"description": "Base behaviour maturity for this grade"
|
|
71
|
+
},
|
|
72
|
+
"breadthCriteria": {
|
|
73
|
+
"type": "object",
|
|
74
|
+
"description": "Minimum number of skills at each level for breadth (senior grades only)",
|
|
75
|
+
"additionalProperties": {
|
|
76
|
+
"type": "integer",
|
|
77
|
+
"minimum": 1
|
|
78
|
+
}
|
|
79
|
+
},
|
|
80
|
+
"expectations": {
|
|
81
|
+
"type": "object",
|
|
82
|
+
"description": "Expectations for impact, autonomy, influence, and complexity",
|
|
83
|
+
"properties": {
|
|
84
|
+
"impactScope": {
|
|
85
|
+
"type": "string",
|
|
86
|
+
"description": "Scope of impact expected at this grade"
|
|
87
|
+
},
|
|
88
|
+
"autonomyExpectation": {
|
|
89
|
+
"type": "string",
|
|
90
|
+
"description": "Level of autonomy expected"
|
|
91
|
+
},
|
|
92
|
+
"influenceScope": {
|
|
93
|
+
"type": "string",
|
|
94
|
+
"description": "Scope of influence"
|
|
95
|
+
},
|
|
96
|
+
"complexityHandled": {
|
|
97
|
+
"type": "string",
|
|
98
|
+
"description": "Complexity level the grade should handle"
|
|
99
|
+
}
|
|
100
|
+
},
|
|
101
|
+
"additionalProperties": false
|
|
102
|
+
}
|
|
103
|
+
},
|
|
104
|
+
"additionalProperties": false
|
|
105
|
+
},
|
|
106
|
+
"skillLevel": {
|
|
107
|
+
"type": "string",
|
|
108
|
+
"enum": ["awareness", "foundational", "working", "practitioner", "expert"]
|
|
109
|
+
},
|
|
110
|
+
"behaviourMaturity": {
|
|
111
|
+
"type": "string",
|
|
112
|
+
"enum": [
|
|
113
|
+
"emerging",
|
|
114
|
+
"developing",
|
|
115
|
+
"practicing",
|
|
116
|
+
"role_modeling",
|
|
117
|
+
"exemplifying"
|
|
118
|
+
]
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
3
|
+
"$id": "https://schema.forwardimpact.team/json/index.schema.json",
|
|
4
|
+
"title": "Auto-generated Index",
|
|
5
|
+
"description": "Index file for browser loading, generated by npx pathway --generate-index",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"required": ["files"],
|
|
8
|
+
"properties": {
|
|
9
|
+
"files": {
|
|
10
|
+
"type": "array",
|
|
11
|
+
"description": "List of file basenames (without extension) in the directory",
|
|
12
|
+
"items": {
|
|
13
|
+
"type": "string"
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
},
|
|
17
|
+
"additionalProperties": false
|
|
18
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
3
|
+
"$id": "https://schema.forwardimpact.team/json/self-assessments.schema.json",
|
|
4
|
+
"title": "Self Assessments",
|
|
5
|
+
"description": "Example candidate profiles for testing candidate matching",
|
|
6
|
+
"type": "array",
|
|
7
|
+
"items": {
|
|
8
|
+
"$ref": "#/$defs/selfAssessment"
|
|
9
|
+
},
|
|
10
|
+
"$defs": {
|
|
11
|
+
"selfAssessment": {
|
|
12
|
+
"type": "object",
|
|
13
|
+
"required": ["id"],
|
|
14
|
+
"properties": {
|
|
15
|
+
"id": {
|
|
16
|
+
"type": "string",
|
|
17
|
+
"pattern": "^[a-z][a-z0-9_]*$",
|
|
18
|
+
"description": "Unique assessment identifier"
|
|
19
|
+
},
|
|
20
|
+
"skillLevels": {
|
|
21
|
+
"type": "object",
|
|
22
|
+
"description": "Skill assessments (skill ID → level)",
|
|
23
|
+
"additionalProperties": {
|
|
24
|
+
"$ref": "#/$defs/skillLevel"
|
|
25
|
+
}
|
|
26
|
+
},
|
|
27
|
+
"behaviourMaturities": {
|
|
28
|
+
"type": "object",
|
|
29
|
+
"description": "Behaviour assessments (behaviour ID → maturity)",
|
|
30
|
+
"additionalProperties": {
|
|
31
|
+
"$ref": "#/$defs/behaviourMaturity"
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
"additionalProperties": false
|
|
36
|
+
},
|
|
37
|
+
"skillLevel": {
|
|
38
|
+
"type": "string",
|
|
39
|
+
"enum": ["awareness", "foundational", "working", "practitioner", "expert"]
|
|
40
|
+
},
|
|
41
|
+
"behaviourMaturity": {
|
|
42
|
+
"type": "string",
|
|
43
|
+
"enum": [
|
|
44
|
+
"emerging",
|
|
45
|
+
"developing",
|
|
46
|
+
"practicing",
|
|
47
|
+
"role_modeling",
|
|
48
|
+
"exemplifying"
|
|
49
|
+
]
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
3
|
+
"$id": "https://schema.forwardimpact.team/json/skill-questions.schema.json",
|
|
4
|
+
"title": "Skill Interview Questions",
|
|
5
|
+
"description": "Interview questions for a skill, organized by level",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"properties": {
|
|
8
|
+
"awareness": {
|
|
9
|
+
"type": "array",
|
|
10
|
+
"items": { "$ref": "#/$defs/question" }
|
|
11
|
+
},
|
|
12
|
+
"foundational": {
|
|
13
|
+
"type": "array",
|
|
14
|
+
"items": { "$ref": "#/$defs/question" }
|
|
15
|
+
},
|
|
16
|
+
"working": {
|
|
17
|
+
"type": "array",
|
|
18
|
+
"items": { "$ref": "#/$defs/question" }
|
|
19
|
+
},
|
|
20
|
+
"practitioner": {
|
|
21
|
+
"type": "array",
|
|
22
|
+
"items": { "$ref": "#/$defs/question" }
|
|
23
|
+
},
|
|
24
|
+
"expert": {
|
|
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}_{level_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 awareness/foundational, 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,84 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
3
|
+
"$id": "https://schema.forwardimpact.team/json/stages.schema.json",
|
|
4
|
+
"title": "Stages",
|
|
5
|
+
"description": "Engineering lifecycle stages with their tools, handoffs, and constraints",
|
|
6
|
+
"type": "array",
|
|
7
|
+
"items": {
|
|
8
|
+
"$ref": "#/$defs/stage"
|
|
9
|
+
},
|
|
10
|
+
"$defs": {
|
|
11
|
+
"stage": {
|
|
12
|
+
"type": "object",
|
|
13
|
+
"required": ["id", "name"],
|
|
14
|
+
"properties": {
|
|
15
|
+
"id": {
|
|
16
|
+
"type": "string",
|
|
17
|
+
"enum": ["specify", "plan", "code", "review", "deploy"],
|
|
18
|
+
"description": "Stage identifier"
|
|
19
|
+
},
|
|
20
|
+
"name": {
|
|
21
|
+
"type": "string",
|
|
22
|
+
"description": "Human-readable stage name"
|
|
23
|
+
},
|
|
24
|
+
"emojiIcon": {
|
|
25
|
+
"type": "string",
|
|
26
|
+
"description": "Emoji for visual representation"
|
|
27
|
+
},
|
|
28
|
+
"description": {
|
|
29
|
+
"type": "string",
|
|
30
|
+
"description": "Description of the stage's purpose"
|
|
31
|
+
},
|
|
32
|
+
"handoffs": {
|
|
33
|
+
"type": "array",
|
|
34
|
+
"description": "Transitions to other stages",
|
|
35
|
+
"items": {
|
|
36
|
+
"$ref": "#/$defs/handoff"
|
|
37
|
+
}
|
|
38
|
+
},
|
|
39
|
+
"constraints": {
|
|
40
|
+
"type": "array",
|
|
41
|
+
"description": "Restrictions on behaviour in this stage",
|
|
42
|
+
"items": {
|
|
43
|
+
"type": "string"
|
|
44
|
+
}
|
|
45
|
+
},
|
|
46
|
+
"entryCriteria": {
|
|
47
|
+
"type": "array",
|
|
48
|
+
"description": "Conditions that must be met before entering this stage",
|
|
49
|
+
"items": {
|
|
50
|
+
"type": "string"
|
|
51
|
+
}
|
|
52
|
+
},
|
|
53
|
+
"exitCriteria": {
|
|
54
|
+
"type": "array",
|
|
55
|
+
"description": "Conditions that must be met before leaving this stage",
|
|
56
|
+
"items": {
|
|
57
|
+
"type": "string"
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
},
|
|
61
|
+
"additionalProperties": false
|
|
62
|
+
},
|
|
63
|
+
"handoff": {
|
|
64
|
+
"type": "object",
|
|
65
|
+
"required": ["targetStage", "label", "prompt"],
|
|
66
|
+
"properties": {
|
|
67
|
+
"targetStage": {
|
|
68
|
+
"type": "string",
|
|
69
|
+
"enum": ["specify", "plan", "code", "review", "deploy"],
|
|
70
|
+
"description": "The stage to transition to"
|
|
71
|
+
},
|
|
72
|
+
"label": {
|
|
73
|
+
"type": "string",
|
|
74
|
+
"description": "Button label for the handoff action"
|
|
75
|
+
},
|
|
76
|
+
"prompt": {
|
|
77
|
+
"type": "string",
|
|
78
|
+
"description": "Instructions for the next stage"
|
|
79
|
+
}
|
|
80
|
+
},
|
|
81
|
+
"additionalProperties": false
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
3
|
+
"$id": "https://schema.forwardimpact.team/json/track.schema.json",
|
|
4
|
+
"title": "Track",
|
|
5
|
+
"description": "Work context that modifies skill and behaviour expectations",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"required": ["name"],
|
|
8
|
+
"properties": {
|
|
9
|
+
"name": {
|
|
10
|
+
"type": "string",
|
|
11
|
+
"description": "Human-readable track name"
|
|
12
|
+
},
|
|
13
|
+
"description": {
|
|
14
|
+
"type": "string",
|
|
15
|
+
"description": "Description of the track's focus"
|
|
16
|
+
},
|
|
17
|
+
"roleContext": {
|
|
18
|
+
"type": "string",
|
|
19
|
+
"description": "Contextual description for job listings"
|
|
20
|
+
},
|
|
21
|
+
"skillModifiers": {
|
|
22
|
+
"type": "object",
|
|
23
|
+
"description": "Modifiers by capability ID (not individual skill IDs)",
|
|
24
|
+
"propertyNames": {
|
|
25
|
+
"type": "string",
|
|
26
|
+
"pattern": "^[a-z][a-z0-9_]*$",
|
|
27
|
+
"description": "Must be a capability ID (e.g., delivery, scale, reliability)"
|
|
28
|
+
},
|
|
29
|
+
"additionalProperties": {
|
|
30
|
+
"type": "integer",
|
|
31
|
+
"description": "Level modifier to apply to all skills in this capability"
|
|
32
|
+
}
|
|
33
|
+
},
|
|
34
|
+
"behaviourModifiers": {
|
|
35
|
+
"type": "object",
|
|
36
|
+
"description": "Modifiers to behaviour expectations (behaviour ID → modifier)",
|
|
37
|
+
"additionalProperties": {
|
|
38
|
+
"type": "integer"
|
|
39
|
+
}
|
|
40
|
+
},
|
|
41
|
+
"assessmentWeights": {
|
|
42
|
+
"$ref": "#/$defs/assessmentWeights",
|
|
43
|
+
"description": "Custom weights for skill vs behaviour assessment"
|
|
44
|
+
},
|
|
45
|
+
"minGrade": {
|
|
46
|
+
"type": "string",
|
|
47
|
+
"description": "Minimum grade required for this track (references grade ID)"
|
|
48
|
+
},
|
|
49
|
+
"agent": {
|
|
50
|
+
"$ref": "#/$defs/trackAgentSection",
|
|
51
|
+
"description": "Agent-specific content"
|
|
52
|
+
}
|
|
53
|
+
},
|
|
54
|
+
"additionalProperties": false,
|
|
55
|
+
"$defs": {
|
|
56
|
+
"assessmentWeights": {
|
|
57
|
+
"type": "object",
|
|
58
|
+
"required": ["skillWeight", "behaviourWeight"],
|
|
59
|
+
"properties": {
|
|
60
|
+
"skillWeight": {
|
|
61
|
+
"type": "number",
|
|
62
|
+
"minimum": 0,
|
|
63
|
+
"maximum": 1,
|
|
64
|
+
"description": "Weight for skills in assessment (must sum to 1 with behaviourWeight)"
|
|
65
|
+
},
|
|
66
|
+
"behaviourWeight": {
|
|
67
|
+
"type": "number",
|
|
68
|
+
"minimum": 0,
|
|
69
|
+
"maximum": 1,
|
|
70
|
+
"description": "Weight for behaviours in assessment (must sum to 1 with skillWeight)"
|
|
71
|
+
}
|
|
72
|
+
},
|
|
73
|
+
"additionalProperties": false
|
|
74
|
+
},
|
|
75
|
+
"trackAgentSection": {
|
|
76
|
+
"type": "object",
|
|
77
|
+
"properties": {
|
|
78
|
+
"identity": {
|
|
79
|
+
"type": "string",
|
|
80
|
+
"description": "Identity override for the agent (replaces discipline identity). May use {roleTitle} placeholder."
|
|
81
|
+
},
|
|
82
|
+
"priority": {
|
|
83
|
+
"type": "string",
|
|
84
|
+
"description": "Priority guidance specific to this track"
|
|
85
|
+
},
|
|
86
|
+
"beforeMakingChanges": {
|
|
87
|
+
"type": "array",
|
|
88
|
+
"description": "Additional checklist items to consider",
|
|
89
|
+
"items": { "type": "string" }
|
|
90
|
+
},
|
|
91
|
+
"constraints": {
|
|
92
|
+
"type": "array",
|
|
93
|
+
"description": "Additional constraints specific to this track",
|
|
94
|
+
"items": { "type": "string" }
|
|
95
|
+
}
|
|
96
|
+
},
|
|
97
|
+
"additionalProperties": false
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|