@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,68 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "https://www.forwardimpact.team/schema/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
+ "distribution": {
33
+ "type": "object",
34
+ "description": "Distribution configuration for publishing and installing the framework",
35
+ "properties": {
36
+ "siteUrl": {
37
+ "type": "string",
38
+ "format": "uri",
39
+ "description": "Base URL for the published static site (e.g. https://pathway.myorg.com)"
40
+ }
41
+ },
42
+ "required": ["siteUrl"],
43
+ "additionalProperties": false
44
+ }
45
+ },
46
+ "additionalProperties": false,
47
+ "$defs": {
48
+ "entityDefinition": {
49
+ "type": "object",
50
+ "required": ["title"],
51
+ "properties": {
52
+ "title": {
53
+ "type": "string",
54
+ "description": "Display title for the entity"
55
+ },
56
+ "emojiIcon": {
57
+ "type": "string",
58
+ "description": "Emoji for visual representation"
59
+ },
60
+ "description": {
61
+ "type": "string",
62
+ "description": "Description of the entity type"
63
+ }
64
+ },
65
+ "additionalProperties": false
66
+ }
67
+ }
68
+ }
@@ -0,0 +1,121 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "https://www.forwardimpact.team/schema/json/levels.schema.json",
4
+ "title": "Levels",
5
+ "description": "Career levels defining expectations for skill proficiency, behaviour maturity, and scope of impact",
6
+ "type": "array",
7
+ "items": {
8
+ "$ref": "#/$defs/level"
9
+ },
10
+ "$defs": {
11
+ "level": {
12
+ "type": "object",
13
+ "required": [
14
+ "id",
15
+ "professionalTitle",
16
+ "managementTitle",
17
+ "ordinalRank",
18
+ "baseSkillProficiencies",
19
+ "baseBehaviourMaturity"
20
+ ],
21
+ "properties": {
22
+ "id": {
23
+ "type": "string",
24
+ "pattern": "^[A-Z][A-Z0-9]*$",
25
+ "description": "Unique level 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 levels (1 = lowest)"
43
+ },
44
+ "qualificationSummary": {
45
+ "type": "string",
46
+ "description": "Summary of qualifications expected at this level. May use {typicalExperienceRange} placeholder."
47
+ },
48
+ "baseSkillProficiencies": {
49
+ "type": "object",
50
+ "description": "Base skill proficiencys by skill tier for this level",
51
+ "required": ["primary", "secondary", "broad"],
52
+ "properties": {
53
+ "primary": {
54
+ "$ref": "#/$defs/skillProficiency",
55
+ "description": "Level for core/primary skills"
56
+ },
57
+ "secondary": {
58
+ "$ref": "#/$defs/skillProficiency",
59
+ "description": "Level for supporting/secondary skills"
60
+ },
61
+ "broad": {
62
+ "$ref": "#/$defs/skillProficiency",
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 level"
71
+ },
72
+ "breadthCriteria": {
73
+ "type": "object",
74
+ "description": "Minimum number of skills at each level for breadth (senior levels 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 level"
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 level should handle"
99
+ }
100
+ },
101
+ "additionalProperties": false
102
+ }
103
+ },
104
+ "additionalProperties": false
105
+ },
106
+ "skillProficiency": {
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,52 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "https://www.forwardimpact.team/schema/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
+ "skillProficiencies": {
21
+ "type": "object",
22
+ "description": "Skill assessments (skill ID → level)",
23
+ "additionalProperties": {
24
+ "$ref": "#/$defs/skillProficiency"
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
+ "skillProficiency": {
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,83 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "https://www.forwardimpact.team/schema/json/skill-questions.schema.json",
4
+ "title": "Skill Interview Questions",
5
+ "description": "Interview questions for a skill, organized by role type (professional/management) and level",
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 skill proficiency",
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"],
49
+ "properties": {
50
+ "id": {
51
+ "type": "string",
52
+ "pattern": "^[a-z][a-z0-9_]*$",
53
+ "description": "Unique question identifier (format: {abbrev}_{level_abbrev}_{number})"
54
+ },
55
+ "text": {
56
+ "type": "string",
57
+ "maxLength": 150,
58
+ "description": "The question text (second person, under 150 characters)"
59
+ },
60
+ "lookingFor": {
61
+ "type": "array",
62
+ "description": "2-4 bullet points of good answer indicators",
63
+ "minItems": 1,
64
+ "maxItems": 4,
65
+ "items": { "type": "string" }
66
+ },
67
+ "expectedDurationMinutes": {
68
+ "type": "integer",
69
+ "minimum": 1,
70
+ "description": "Expected duration in minutes (default: 5 for awareness/foundational, 8-10 for higher)"
71
+ },
72
+ "followUps": {
73
+ "type": "array",
74
+ "description": "1-3 probing questions for deeper exploration",
75
+ "minItems": 1,
76
+ "maxItems": 3,
77
+ "items": { "type": "string" }
78
+ }
79
+ },
80
+ "additionalProperties": false
81
+ }
82
+ }
83
+ }
@@ -0,0 +1,88 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "https://www.forwardimpact.team/schema/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", "onboard", "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 (second-person, for agent body)"
31
+ },
32
+ "summary": {
33
+ "type": "string",
34
+ "description": "Third-person summary for metadata, listings, and sub-agent descriptions"
35
+ },
36
+ "handoffs": {
37
+ "type": "array",
38
+ "description": "Transitions to other stages",
39
+ "items": {
40
+ "$ref": "#/$defs/handoff"
41
+ }
42
+ },
43
+ "constraints": {
44
+ "type": "array",
45
+ "description": "Restrictions on behaviour in this stage",
46
+ "items": {
47
+ "type": "string"
48
+ }
49
+ },
50
+ "readChecklist": {
51
+ "type": "array",
52
+ "description": "Read-Then-Do Checklist: steps to follow in order during this stage",
53
+ "items": {
54
+ "type": "string"
55
+ }
56
+ },
57
+ "confirmChecklist": {
58
+ "type": "array",
59
+ "description": "Do-Then-Confirm Checklist: items to verify before handing off to next stage",
60
+ "items": {
61
+ "type": "string"
62
+ }
63
+ }
64
+ },
65
+ "additionalProperties": false
66
+ },
67
+ "handoff": {
68
+ "type": "object",
69
+ "required": ["targetStage", "label", "prompt"],
70
+ "properties": {
71
+ "targetStage": {
72
+ "type": "string",
73
+ "enum": ["specify", "plan", "onboard", "code", "review", "deploy"],
74
+ "description": "The stage to transition to"
75
+ },
76
+ "label": {
77
+ "type": "string",
78
+ "description": "Button label for the handoff action"
79
+ },
80
+ "prompt": {
81
+ "type": "string",
82
+ "description": "Instructions for the next stage"
83
+ }
84
+ },
85
+ "additionalProperties": false
86
+ }
87
+ }
88
+ }
@@ -0,0 +1,95 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "https://www.forwardimpact.team/schema/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
+ "minLevel": {
46
+ "type": "string",
47
+ "description": "Minimum level required for this track (references level 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
+ "constraints": {
87
+ "type": "array",
88
+ "description": "Additional constraints specific to this track",
89
+ "items": { "type": "string" }
90
+ }
91
+ },
92
+ "additionalProperties": false
93
+ }
94
+ }
95
+ }
@@ -0,0 +1,128 @@
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
+ # Stakeholder simulation interview questions for assessing behaviours,
11
+ # organized by role type (professional/management) and maturity level.
12
+ # Each question presents a realistic stakeholder scenario with simulation
13
+ # prompts to guide the interview panel.
14
+ # =============================================================================
15
+
16
+ # -----------------------------------------------------------------------------
17
+ # Properties
18
+ # -----------------------------------------------------------------------------
19
+
20
+ fit:forBehaviour a rdf:Property ;
21
+ rdfs:label "forBehaviour"@en ;
22
+ rdfs:comment "The behaviour this question assesses"@en ;
23
+ rdfs:domain fit:Question ;
24
+ rdfs:range fit:Behaviour .
25
+
26
+ fit:atMaturity a rdf:Property ;
27
+ rdfs:label "atMaturity"@en ;
28
+ rdfs:comment "The behaviour maturity this question is for"@en ;
29
+ rdfs:domain fit:Question ;
30
+ rdfs:range fit:BehaviourMaturity .
31
+
32
+ fit:simulationPrompts a rdf:Property ;
33
+ rdfs:label "simulationPrompts"@en ;
34
+ rdfs:comment "Guiding prompts to steer the stakeholder simulation and probe the candidate's behaviour"@en ;
35
+ rdfs:domain fit:Question ;
36
+ rdfs:range xsd:string .
37
+
38
+ # =============================================================================
39
+ # SHACL SHAPES
40
+ # =============================================================================
41
+
42
+ # -----------------------------------------------------------------------------
43
+ # Behaviour Question Shape
44
+ # -----------------------------------------------------------------------------
45
+
46
+ fit:BehaviourQuestionShape a sh:NodeShape ;
47
+ sh:targetClass fit:Question ;
48
+ sh:property [
49
+ sh:path fit:id ;
50
+ sh:datatype xsd:string ;
51
+ sh:pattern "^[a-z][a-z0-9_]*$" ;
52
+ sh:minCount 1 ;
53
+ sh:maxCount 1 ;
54
+ sh:name "id" ;
55
+ sh:description "Unique question identifier" ;
56
+ ] ;
57
+ sh:property [
58
+ sh:path fit:text ;
59
+ sh:datatype xsd:string ;
60
+ sh:maxLength 300 ;
61
+ sh:minCount 1 ;
62
+ sh:maxCount 1 ;
63
+ sh:name "text" ;
64
+ sh:description "The stakeholder scenario (under 300 characters)" ;
65
+ ] ;
66
+ sh:property [
67
+ sh:path fit:context ;
68
+ sh:datatype xsd:string ;
69
+ sh:maxCount 1 ;
70
+ sh:name "context" ;
71
+ sh:description "Additional context to set up the simulation scenario" ;
72
+ ] ;
73
+ sh:property [
74
+ sh:path fit:simulationPrompts ;
75
+ sh:datatype xsd:string ;
76
+ sh:minCount 2 ;
77
+ sh:maxCount 5 ;
78
+ sh:name "simulationPrompts" ;
79
+ sh:description "3-5 guiding prompts to steer the simulation" ;
80
+ ] ;
81
+ sh:property [
82
+ sh:path fit:lookingFor ;
83
+ sh:datatype xsd:string ;
84
+ sh:minCount 2 ;
85
+ sh:maxCount 4 ;
86
+ sh:name "lookingFor" ;
87
+ sh:description "2-4 indicators of strong behavioural response" ;
88
+ ] ;
89
+ sh:property [
90
+ sh:path fit:expectedDurationMinutes ;
91
+ sh:datatype xsd:integer ;
92
+ sh:minInclusive 10 ;
93
+ sh:maxCount 1 ;
94
+ sh:name "expectedDurationMinutes" ;
95
+ sh:description "Expected duration in minutes (default: 20)" ;
96
+ ] ;
97
+ sh:property [
98
+ sh:path fit:followUps ;
99
+ sh:datatype xsd:string ;
100
+ sh:maxCount 3 ;
101
+ sh:name "followUps" ;
102
+ sh:description "1-3 probing questions for deeper exploration" ;
103
+ ] ;
104
+ sh:property [
105
+ sh:path fit:forBehaviour ;
106
+ sh:datatype xsd:string ;
107
+ sh:pattern "^[a-z][a-z0-9_]*$" ;
108
+ sh:minCount 1 ;
109
+ sh:maxCount 1 ;
110
+ sh:name "forBehaviour" ;
111
+ sh:description "The behaviour this question assesses (behaviour ID)" ;
112
+ ] ;
113
+ sh:property [
114
+ sh:path fit:atMaturity ;
115
+ sh:in ( fit:emerging fit:developing fit:practicing fit:role_modeling fit:exemplifying ) ;
116
+ sh:minCount 1 ;
117
+ sh:maxCount 1 ;
118
+ sh:name "atMaturity" ;
119
+ sh:description "The behaviour maturity this question is for" ;
120
+ ] ;
121
+ sh:property [
122
+ sh:path fit:forRoleType ;
123
+ sh:in ( fit:professional fit:management ) ;
124
+ sh:minCount 1 ;
125
+ sh:maxCount 1 ;
126
+ sh:name "forRoleType" ;
127
+ sh:description "The role type this question is for" ;
128
+ ] .