@forwardimpact/schema 0.1.0 → 0.2.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 (66) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +58 -0
  3. package/bin/fit-schema.js +48 -21
  4. package/examples/behaviours/outcome_ownership.yaml +1 -1
  5. package/examples/behaviours/polymathic_knowledge.yaml +1 -1
  6. package/examples/behaviours/precise_communication.yaml +1 -1
  7. package/examples/behaviours/relentless_curiosity.yaml +1 -1
  8. package/examples/behaviours/systems_thinking.yaml +1 -1
  9. package/examples/capabilities/business.yaml +1 -1
  10. package/examples/capabilities/delivery.yaml +1 -1
  11. package/examples/capabilities/people.yaml +1 -1
  12. package/examples/capabilities/reliability.yaml +1 -1
  13. package/examples/capabilities/scale.yaml +1 -1
  14. package/examples/disciplines/data_engineering.yaml +1 -1
  15. package/examples/disciplines/engineering_management.yaml +1 -1
  16. package/examples/disciplines/software_engineering.yaml +1 -1
  17. package/examples/drivers.yaml +1 -1
  18. package/examples/framework.yaml +1 -1
  19. package/examples/grades.yaml +1 -1
  20. package/examples/questions/behaviours/outcome_ownership.yaml +1 -1
  21. package/examples/questions/behaviours/polymathic_knowledge.yaml +1 -1
  22. package/examples/questions/behaviours/precise_communication.yaml +1 -1
  23. package/examples/questions/behaviours/relentless_curiosity.yaml +1 -1
  24. package/examples/questions/behaviours/systems_thinking.yaml +1 -1
  25. package/examples/questions/skills/architecture_design.yaml +1 -1
  26. package/examples/questions/skills/cloud_platforms.yaml +1 -1
  27. package/examples/questions/skills/code_quality.yaml +1 -1
  28. package/examples/questions/skills/data_modeling.yaml +1 -1
  29. package/examples/questions/skills/devops.yaml +1 -1
  30. package/examples/questions/skills/full_stack_development.yaml +1 -1
  31. package/examples/questions/skills/sre_practices.yaml +1 -1
  32. package/examples/questions/skills/stakeholder_management.yaml +1 -1
  33. package/examples/questions/skills/team_collaboration.yaml +1 -1
  34. package/examples/questions/skills/technical_writing.yaml +1 -1
  35. package/examples/self-assessments.yaml +1 -1
  36. package/examples/stages.yaml +1 -1
  37. package/examples/tracks/platform.yaml +1 -1
  38. package/examples/tracks/sre.yaml +1 -1
  39. package/lib/schema-validation.js +1 -1
  40. package/package.json +5 -5
  41. package/schema/json/behaviour-questions.schema.json +1 -1
  42. package/schema/json/behaviour.schema.json +1 -1
  43. package/schema/json/capability.schema.json +1 -1
  44. package/schema/json/defs.schema.json +1 -1
  45. package/schema/json/discipline.schema.json +1 -1
  46. package/schema/json/drivers.schema.json +1 -1
  47. package/schema/json/framework.schema.json +1 -1
  48. package/schema/json/grades.schema.json +1 -1
  49. package/schema/json/self-assessments.schema.json +1 -1
  50. package/schema/json/skill-questions.schema.json +1 -1
  51. package/schema/json/stages.schema.json +1 -1
  52. package/schema/json/track.schema.json +1 -1
  53. package/schema/rdf/behaviour-questions.ttl +96 -0
  54. package/schema/rdf/behaviour.ttl +130 -0
  55. package/schema/rdf/capability.ttl +440 -0
  56. package/schema/rdf/defs.ttl +396 -0
  57. package/schema/rdf/discipline.ttl +336 -0
  58. package/schema/rdf/drivers.ttl +84 -0
  59. package/schema/rdf/framework.ttl +128 -0
  60. package/schema/rdf/grades.ttl +357 -0
  61. package/schema/rdf/self-assessments.ttl +147 -0
  62. package/schema/rdf/skill-questions.ttl +128 -0
  63. package/schema/rdf/stages.ttl +142 -0
  64. package/schema/rdf/track.ttl +231 -0
  65. package/schema/json/index.schema.json +0 -18
  66. package/schema/rdf/pathway.ttl +0 -2362
@@ -227,7 +227,7 @@ async function validateDirectory(ajv, dirPath, schemaId) {
227
227
  * @returns {string} Full schema $id URL
228
228
  */
229
229
  function getSchemaId(schemaFilename) {
230
- return `https://schema.forwardimpact.team/json/${schemaFilename}`;
230
+ return `https://www.forwardimpact.team/schema/json/${schemaFilename}`;
231
231
  }
232
232
 
233
233
  /**
package/package.json CHANGED
@@ -1,22 +1,22 @@
1
1
  {
2
2
  "name": "@forwardimpact/schema",
3
- "version": "0.1.0",
4
- "description": "Schema definitions and validation for Engineering Pathway framework",
3
+ "version": "0.2.0",
4
+ "description": "Schema definitions and data loading for skills, behaviours, and role frameworks",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
7
7
  "type": "git",
8
- "url": "https://github.com/forwardimpact/pathway",
8
+ "url": "https://github.com/forwardimpact/monorepo",
9
9
  "directory": "apps/schema"
10
10
  },
11
+ "homepage": "https://www.forwardimpact.team/schema",
11
12
  "type": "module",
12
13
  "main": "lib/index.js",
13
14
  "bin": {
14
15
  "fit-schema": "./bin/fit-schema.js"
15
16
  },
16
17
  "scripts": {
17
- "validate": "node ./bin/fit-schema.js validate",
18
18
  "generate-index": "node ./bin/fit-schema.js generate-index",
19
- "validate:shacl": "node ./bin/fit-schema.js validate:shacl"
19
+ "validate": "node ./bin/fit-schema.js validate"
20
20
  },
21
21
  "files": [
22
22
  "bin/",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "$schema": "http://json-schema.org/draft-07/schema#",
3
- "$id": "https://schema.forwardimpact.team/json/behaviour-questions.schema.json",
3
+ "$id": "https://www.forwardimpact.team/schema/json/behaviour-questions.schema.json",
4
4
  "title": "Behaviour Interview Questions",
5
5
  "description": "Interview questions for a behaviour, organized by maturity level",
6
6
  "type": "object",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "$schema": "http://json-schema.org/draft-07/schema#",
3
- "$id": "https://schema.forwardimpact.team/json/behaviour.schema.json",
3
+ "$id": "https://www.forwardimpact.team/schema/json/behaviour.schema.json",
4
4
  "title": "Behaviour",
5
5
  "description": "Mindset and way of working that underpins effective application of skills",
6
6
  "type": "object",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "$schema": "http://json-schema.org/draft-07/schema#",
3
- "$id": "https://schema.forwardimpact.team/json/capability.schema.json",
3
+ "$id": "https://www.forwardimpact.team/schema/json/capability.schema.json",
4
4
  "title": "Capability",
5
5
  "description": "Capability area that groups related skills with responsibilities and checklists",
6
6
  "type": "object",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "$schema": "http://json-schema.org/draft-07/schema#",
3
- "$id": "https://schema.forwardimpact.team/json/defs.schema.json",
3
+ "$id": "https://www.forwardimpact.team/schema/json/defs.schema.json",
4
4
  "title": "Engineering Pathway Common Definitions",
5
5
  "description": "Shared definitions for all pathway schemas",
6
6
  "$defs": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "$schema": "http://json-schema.org/draft-07/schema#",
3
- "$id": "https://schema.forwardimpact.team/json/discipline.schema.json",
3
+ "$id": "https://www.forwardimpact.team/schema/json/discipline.schema.json",
4
4
  "title": "Discipline",
5
5
  "description": "Engineering specialization that defines T-shaped skill profiles",
6
6
  "type": "object",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "$schema": "http://json-schema.org/draft-07/schema#",
3
- "$id": "https://schema.forwardimpact.team/json/drivers.schema.json",
3
+ "$id": "https://www.forwardimpact.team/schema/json/drivers.schema.json",
4
4
  "title": "Drivers",
5
5
  "description": "Organizational outcomes that productive teams achieve",
6
6
  "type": "array",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "$schema": "http://json-schema.org/draft-07/schema#",
3
- "$id": "https://schema.forwardimpact.team/json/framework.schema.json",
3
+ "$id": "https://www.forwardimpact.team/schema/json/framework.schema.json",
4
4
  "title": "Framework",
5
5
  "description": "High-level framework configuration and entity definitions",
6
6
  "type": "object",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "$schema": "http://json-schema.org/draft-07/schema#",
3
- "$id": "https://schema.forwardimpact.team/json/grades.schema.json",
3
+ "$id": "https://www.forwardimpact.team/schema/json/grades.schema.json",
4
4
  "title": "Grades",
5
5
  "description": "Career levels defining expectations for skill proficiency, behaviour maturity, and scope of impact",
6
6
  "type": "array",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "$schema": "http://json-schema.org/draft-07/schema#",
3
- "$id": "https://schema.forwardimpact.team/json/self-assessments.schema.json",
3
+ "$id": "https://www.forwardimpact.team/schema/json/self-assessments.schema.json",
4
4
  "title": "Self Assessments",
5
5
  "description": "Example candidate profiles for testing candidate matching",
6
6
  "type": "array",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "$schema": "http://json-schema.org/draft-07/schema#",
3
- "$id": "https://schema.forwardimpact.team/json/skill-questions.schema.json",
3
+ "$id": "https://www.forwardimpact.team/schema/json/skill-questions.schema.json",
4
4
  "title": "Skill Interview Questions",
5
5
  "description": "Interview questions for a skill, organized by level",
6
6
  "type": "object",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "$schema": "http://json-schema.org/draft-07/schema#",
3
- "$id": "https://schema.forwardimpact.team/json/stages.schema.json",
3
+ "$id": "https://www.forwardimpact.team/schema/json/stages.schema.json",
4
4
  "title": "Stages",
5
5
  "description": "Engineering lifecycle stages with their tools, handoffs, and constraints",
6
6
  "type": "array",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "$schema": "http://json-schema.org/draft-07/schema#",
3
- "$id": "https://schema.forwardimpact.team/json/track.schema.json",
3
+ "$id": "https://www.forwardimpact.team/schema/json/track.schema.json",
4
4
  "title": "Track",
5
5
  "description": "Work context that modifies skill and behaviour expectations",
6
6
  "type": "object",
@@ -0,0 +1,96 @@
1
+ @prefix fit: <https://www.forwardimpact.team/schema/rdf/> .
2
+ @prefix sh: <http://www.w3.org/ns/shacl#> .
3
+ @prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
4
+ @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
5
+ @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
6
+
7
+ # =============================================================================
8
+ # Behaviour Questions Schema
9
+ # =============================================================================
10
+ # Interview questions for assessing behaviours.
11
+ # =============================================================================
12
+
13
+ # -----------------------------------------------------------------------------
14
+ # Properties
15
+ # -----------------------------------------------------------------------------
16
+
17
+ fit:forBehaviour a rdf:Property ;
18
+ rdfs:label "forBehaviour"@en ;
19
+ rdfs:comment "The behaviour this question assesses"@en ;
20
+ rdfs:domain fit:Question ;
21
+ rdfs:range fit:Behaviour .
22
+
23
+ fit:atMaturity a rdf:Property ;
24
+ rdfs:label "atMaturity"@en ;
25
+ rdfs:comment "The behaviour maturity this question is for"@en ;
26
+ rdfs:domain fit:Question ;
27
+ rdfs:range fit:BehaviourMaturity .
28
+
29
+ # =============================================================================
30
+ # SHACL SHAPES
31
+ # =============================================================================
32
+
33
+ # -----------------------------------------------------------------------------
34
+ # Behaviour Question Shape
35
+ # -----------------------------------------------------------------------------
36
+
37
+ fit:BehaviourQuestionShape a sh:NodeShape ;
38
+ sh:targetClass fit:Question ;
39
+ sh:property [
40
+ sh:path fit:id ;
41
+ sh:datatype xsd:string ;
42
+ sh:pattern "^[a-z][a-z0-9_]*$" ;
43
+ sh:minCount 1 ;
44
+ sh:maxCount 1 ;
45
+ sh:name "id" ;
46
+ sh:description "Unique question identifier" ;
47
+ ] ;
48
+ sh:property [
49
+ sh:path fit:text ;
50
+ sh:datatype xsd:string ;
51
+ sh:maxLength 150 ;
52
+ sh:minCount 1 ;
53
+ sh:maxCount 1 ;
54
+ sh:name "text" ;
55
+ sh:description "The question text (under 150 characters)" ;
56
+ ] ;
57
+ sh:property [
58
+ sh:path fit:lookingFor ;
59
+ sh:datatype xsd:string ;
60
+ sh:minCount 1 ;
61
+ sh:maxCount 4 ;
62
+ sh:name "lookingFor" ;
63
+ sh:description "2-4 bullet points of good answer indicators" ;
64
+ ] ;
65
+ sh:property [
66
+ sh:path fit:expectedDurationMinutes ;
67
+ sh:datatype xsd:integer ;
68
+ sh:minInclusive 1 ;
69
+ sh:maxCount 1 ;
70
+ sh:name "expectedDurationMinutes" ;
71
+ sh:description "Expected duration in minutes" ;
72
+ ] ;
73
+ sh:property [
74
+ sh:path fit:followUps ;
75
+ sh:datatype xsd:string ;
76
+ sh:maxCount 3 ;
77
+ sh:name "followUps" ;
78
+ sh:description "1-3 probing questions for deeper exploration" ;
79
+ ] ;
80
+ sh:property [
81
+ sh:path fit:forBehaviour ;
82
+ sh:datatype xsd:string ;
83
+ sh:pattern "^[a-z][a-z0-9_]*$" ;
84
+ sh:minCount 1 ;
85
+ sh:maxCount 1 ;
86
+ sh:name "forBehaviour" ;
87
+ sh:description "The behaviour this question assesses (behaviour ID)" ;
88
+ ] ;
89
+ sh:property [
90
+ sh:path fit:atMaturity ;
91
+ sh:in ( fit:emerging fit:developing fit:practicing fit:role_modeling fit:exemplifying ) ;
92
+ sh:minCount 1 ;
93
+ sh:maxCount 1 ;
94
+ sh:name "atMaturity" ;
95
+ sh:description "The behaviour maturity this question is for" ;
96
+ ] .
@@ -0,0 +1,130 @@
1
+ @prefix fit: <https://www.forwardimpact.team/schema/rdf/> .
2
+ @prefix sh: <http://www.w3.org/ns/shacl#> .
3
+ @prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
4
+ @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
5
+ @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
6
+
7
+ # =============================================================================
8
+ # Behaviour Schema
9
+ # =============================================================================
10
+ # Mindset and way of working that underpins effective application of skills.
11
+ # =============================================================================
12
+
13
+ # -----------------------------------------------------------------------------
14
+ # Classes
15
+ # -----------------------------------------------------------------------------
16
+
17
+ fit:Behaviour a rdfs:Class ;
18
+ rdfs:label "Behaviour"@en ;
19
+ rdfs:comment "Mindset and way of working that underpins effective application of skills"@en .
20
+
21
+ fit:BehaviourHumanSection a rdfs:Class ;
22
+ rdfs:label "Behaviour Human Section"@en ;
23
+ rdfs:comment "Human-specific content for a behaviour"@en .
24
+
25
+ fit:BehaviourAgentSection a rdfs:Class ;
26
+ rdfs:label "Behaviour Agent Section"@en ;
27
+ rdfs:comment "Agent-specific content for a behaviour"@en .
28
+
29
+ # -----------------------------------------------------------------------------
30
+ # Properties
31
+ # -----------------------------------------------------------------------------
32
+
33
+ fit:maturityDescriptions a rdf:Property ;
34
+ rdfs:label "maturityDescriptions"@en ;
35
+ rdfs:comment "Description of expectations at each maturity level"@en ;
36
+ rdfs:range fit:MaturityDescriptions .
37
+
38
+ fit:workingStyle a rdf:Property ;
39
+ rdfs:label "workingStyle"@en ;
40
+ rdfs:comment "How the agent should apply this behaviour"@en ;
41
+ rdfs:domain fit:BehaviourAgentSection ;
42
+ rdfs:range xsd:string .
43
+
44
+ # =============================================================================
45
+ # SHACL SHAPES
46
+ # =============================================================================
47
+
48
+ # -----------------------------------------------------------------------------
49
+ # Behaviour Shape
50
+ # -----------------------------------------------------------------------------
51
+
52
+ fit:BehaviourShape a sh:NodeShape ;
53
+ sh:targetClass fit:Behaviour ;
54
+ sh:property [
55
+ sh:path fit:id ;
56
+ sh:datatype xsd:string ;
57
+ sh:pattern "^[a-z][a-z0-9_]*$" ;
58
+ sh:maxCount 1 ;
59
+ sh:name "id" ;
60
+ sh:description "Behaviour identifier (derived from filename)" ;
61
+ ] ;
62
+ sh:property [
63
+ sh:path fit:name ;
64
+ sh:datatype xsd:string ;
65
+ sh:minCount 1 ;
66
+ sh:maxCount 1 ;
67
+ sh:name "name" ;
68
+ sh:description "Human-readable behaviour name" ;
69
+ ] ;
70
+ sh:property [
71
+ sh:path fit:human ;
72
+ sh:node fit:BehaviourHumanSectionShape ;
73
+ sh:minCount 1 ;
74
+ sh:maxCount 1 ;
75
+ sh:name "human" ;
76
+ sh:description "Human-specific content" ;
77
+ ] ;
78
+ sh:property [
79
+ sh:path fit:agent ;
80
+ sh:node fit:BehaviourAgentSectionShape ;
81
+ sh:maxCount 1 ;
82
+ sh:name "agent" ;
83
+ sh:description "Agent-specific content" ;
84
+ ] .
85
+
86
+ # -----------------------------------------------------------------------------
87
+ # Behaviour Human Section Shape
88
+ # -----------------------------------------------------------------------------
89
+
90
+ fit:BehaviourHumanSectionShape a sh:NodeShape ;
91
+ sh:targetClass fit:BehaviourHumanSection ;
92
+ sh:property [
93
+ sh:path fit:description ;
94
+ sh:datatype xsd:string ;
95
+ sh:minCount 1 ;
96
+ sh:maxCount 1 ;
97
+ sh:name "description" ;
98
+ sh:description "Description of the behaviour" ;
99
+ ] ;
100
+ sh:property [
101
+ sh:path fit:maturityDescriptions ;
102
+ sh:node fit:MaturityDescriptionsShape ;
103
+ sh:minCount 1 ;
104
+ sh:maxCount 1 ;
105
+ sh:name "maturityDescriptions" ;
106
+ sh:description "Description of expectations at each maturity level" ;
107
+ ] .
108
+
109
+ # -----------------------------------------------------------------------------
110
+ # Behaviour Agent Section Shape
111
+ # -----------------------------------------------------------------------------
112
+
113
+ fit:BehaviourAgentSectionShape a sh:NodeShape ;
114
+ sh:targetClass fit:BehaviourAgentSection ;
115
+ sh:property [
116
+ sh:path fit:title ;
117
+ sh:datatype xsd:string ;
118
+ sh:minCount 1 ;
119
+ sh:maxCount 1 ;
120
+ sh:name "title" ;
121
+ sh:description "Short title for the behaviour's agent application" ;
122
+ ] ;
123
+ sh:property [
124
+ sh:path fit:workingStyle ;
125
+ sh:datatype xsd:string ;
126
+ sh:minCount 1 ;
127
+ sh:maxCount 1 ;
128
+ sh:name "workingStyle" ;
129
+ sh:description "How the agent should apply this behaviour" ;
130
+ ] .