@forwardimpact/schema 0.2.0 → 0.4.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/examples/disciplines/data_engineering.yaml +0 -12
- package/examples/disciplines/engineering_management.yaml +0 -4
- package/examples/disciplines/software_engineering.yaml +0 -12
- package/examples/framework.yaml +1 -1
- package/examples/stages.yaml +6 -0
- package/examples/tracks/platform.yaml +0 -5
- package/examples/tracks/sre.yaml +0 -5
- package/lib/validation.js +2 -71
- package/package.json +1 -1
- package/schema/json/capability.schema.json +1 -1
- package/schema/json/discipline.schema.json +0 -9
- package/schema/json/stages.schema.json +5 -1
- package/schema/json/track.schema.json +0 -5
- package/schema/rdf/capability.ttl +2 -2
- package/schema/rdf/discipline.ttl +0 -23
- package/schema/rdf/stages.ttl +27 -3
- package/schema/rdf/track.ttl +0 -6
|
@@ -59,18 +59,6 @@ agent:
|
|
|
59
59
|
priority: |
|
|
60
60
|
Data quality is paramount. Always validate data at ingestion points and
|
|
61
61
|
document schema assumptions. Treat undocumented schemas with suspicion.
|
|
62
|
-
beforeMakingChanges:
|
|
63
|
-
- Understand the data sources and their quality characteristics
|
|
64
|
-
- Map data lineage and dependencies
|
|
65
|
-
- Consider performance implications for downstream consumers
|
|
66
|
-
delegation: |
|
|
67
|
-
When facing tasks outside your expertise, use `runSubagent` to delegate:
|
|
68
|
-
- Statistical analysis or model validation → data science subagent
|
|
69
|
-
- Application code changes → software engineering subagent
|
|
70
|
-
- Infrastructure or deployment → SRE subagent
|
|
71
|
-
|
|
72
|
-
Subagents run in isolated context. Provide clear task descriptions and
|
|
73
|
-
specify what information to return.
|
|
74
62
|
constraints:
|
|
75
63
|
- Ignoring data quality issues
|
|
76
64
|
- Creating pipelines without proper error handling
|
|
@@ -53,10 +53,6 @@ agent:
|
|
|
53
53
|
remove organizational friction.
|
|
54
54
|
|
|
55
55
|
Your role is to support engineering judgment, not replace it.
|
|
56
|
-
beforeMakingChanges:
|
|
57
|
-
- Consider team dynamics and individual growth
|
|
58
|
-
- Think about systemic improvements over individual fixes
|
|
59
|
-
- Focus on enabling others rather than doing directly
|
|
60
56
|
constraints:
|
|
61
57
|
- Focus on enabling and empowering rather than doing directly
|
|
62
58
|
- Consider long-term team health over short-term fixes
|
|
@@ -59,18 +59,6 @@ agent:
|
|
|
59
59
|
Code review is more important than code generation. Every line of code
|
|
60
60
|
you produce must be understood and verified. Never ship code without
|
|
61
61
|
comprehensive testing.
|
|
62
|
-
beforeMakingChanges:
|
|
63
|
-
- Understand the existing architecture and patterns
|
|
64
|
-
- Identify test coverage requirements
|
|
65
|
-
- Consider backward compatibility implications
|
|
66
|
-
delegation: |
|
|
67
|
-
When facing tasks outside your expertise, use `runSubagent` to delegate:
|
|
68
|
-
- Data modeling or statistical analysis → data science subagent
|
|
69
|
-
- Security assessment or threat modeling → research subagent
|
|
70
|
-
- Complex debugging across unfamiliar systems → research subagent
|
|
71
|
-
|
|
72
|
-
Subagents run in isolated context. Provide clear task descriptions and
|
|
73
|
-
specify what information to return.
|
|
74
62
|
constraints:
|
|
75
63
|
- Committing code without running tests
|
|
76
64
|
- Making changes without understanding the existing codebase
|
package/examples/framework.yaml
CHANGED
|
@@ -66,4 +66,4 @@ entityDefinitions:
|
|
|
66
66
|
title: Tools
|
|
67
67
|
emojiIcon: "🔧"
|
|
68
68
|
description: |
|
|
69
|
-
|
|
69
|
+
Required tools and utilities referenced by skills for effective engineering workflows. Tools are linked to specific skills with guidance on when and how to use them, surfacing organizational standards directly in skill definitions.
|
package/examples/stages.yaml
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
- id: specify
|
|
4
4
|
name: Specify
|
|
5
5
|
emojiIcon: "🎯"
|
|
6
|
+
summary: Defines requirements, user stories, and acceptance criteria
|
|
6
7
|
description:
|
|
7
8
|
Your primary task is to define WHAT users need and WHY, not how to build it.
|
|
8
9
|
Gather requirements, write user stories, and define acceptance criteria.
|
|
@@ -30,6 +31,7 @@
|
|
|
30
31
|
- id: plan
|
|
31
32
|
name: Plan
|
|
32
33
|
emojiIcon: "📐"
|
|
34
|
+
summary: Designs architecture, makes technology choices, and defines contracts
|
|
33
35
|
description:
|
|
34
36
|
Your primary task is to define HOW to build the solution. Make technology
|
|
35
37
|
choices, design architecture, define contracts and data models.
|
|
@@ -60,6 +62,7 @@
|
|
|
60
62
|
- id: code
|
|
61
63
|
name: Code
|
|
62
64
|
emojiIcon: "💻"
|
|
65
|
+
summary: Implements solutions, writes tests, and iterates to completion
|
|
63
66
|
description:
|
|
64
67
|
Your primary task is to implement the solution. Write code, write tests, and
|
|
65
68
|
iterate until the implementation is complete.
|
|
@@ -83,6 +86,8 @@
|
|
|
83
86
|
- id: review
|
|
84
87
|
name: Review
|
|
85
88
|
emojiIcon: "🔍"
|
|
89
|
+
summary:
|
|
90
|
+
Verifies implementation, tests acceptance criteria, and documents findings
|
|
86
91
|
description:
|
|
87
92
|
Your primary task is to verify the implementation works correctly. Run the
|
|
88
93
|
application, test against acceptance criteria, document findings.
|
|
@@ -116,6 +121,7 @@
|
|
|
116
121
|
- id: deploy
|
|
117
122
|
name: Deploy
|
|
118
123
|
emojiIcon: "🚀"
|
|
124
|
+
summary: Ships changes to production and monitors deployment workflows
|
|
119
125
|
description:
|
|
120
126
|
Your primary task is to ship the changes to production. Push code, monitor
|
|
121
127
|
CI/CD workflows, and verify successful deployment.
|
|
@@ -37,11 +37,6 @@ agent:
|
|
|
37
37
|
|
|
38
38
|
Every API change must consider developer experience. Treat breaking
|
|
39
39
|
changes with extreme caution—your consumers build on your stability.
|
|
40
|
-
beforeMakingChanges:
|
|
41
|
-
- Understand the existing architecture and patterns
|
|
42
|
-
- Identify test coverage requirements
|
|
43
|
-
- Consider backward compatibility implications
|
|
44
|
-
- Plan documentation updates
|
|
45
40
|
constraints:
|
|
46
41
|
- Maintain backward compatibility
|
|
47
42
|
- Document breaking changes with migration guides
|
package/examples/tracks/sre.yaml
CHANGED
|
@@ -36,11 +36,6 @@ agent:
|
|
|
36
36
|
|
|
37
37
|
Production stability trumps feature velocity. No change ships without
|
|
38
38
|
understanding its impact on system reliability.
|
|
39
|
-
beforeMakingChanges:
|
|
40
|
-
- Understand system dependencies and failure modes
|
|
41
|
-
- Ensure observability instrumentation is in place
|
|
42
|
-
- Consider rollback procedures and blast radius
|
|
43
|
-
- Verify runbooks are updated
|
|
44
39
|
constraints:
|
|
45
40
|
- Never compromise on observability instrumentation
|
|
46
41
|
- Document all runbooks and incident response procedures
|
package/lib/validation.js
CHANGED
|
@@ -750,48 +750,6 @@ function validateDiscipline(
|
|
|
750
750
|
);
|
|
751
751
|
}
|
|
752
752
|
|
|
753
|
-
// Optional: beforeMakingChanges (array of strings)
|
|
754
|
-
if (discipline.agent.beforeMakingChanges !== undefined) {
|
|
755
|
-
if (!Array.isArray(discipline.agent.beforeMakingChanges)) {
|
|
756
|
-
errors.push(
|
|
757
|
-
createError(
|
|
758
|
-
"INVALID_VALUE",
|
|
759
|
-
"Discipline agent beforeMakingChanges must be an array",
|
|
760
|
-
`${agentPath}.beforeMakingChanges`,
|
|
761
|
-
discipline.agent.beforeMakingChanges,
|
|
762
|
-
),
|
|
763
|
-
);
|
|
764
|
-
} else {
|
|
765
|
-
discipline.agent.beforeMakingChanges.forEach((item, i) => {
|
|
766
|
-
if (typeof item !== "string") {
|
|
767
|
-
errors.push(
|
|
768
|
-
createError(
|
|
769
|
-
"INVALID_VALUE",
|
|
770
|
-
"Discipline agent beforeMakingChanges items must be strings",
|
|
771
|
-
`${agentPath}.beforeMakingChanges[${i}]`,
|
|
772
|
-
item,
|
|
773
|
-
),
|
|
774
|
-
);
|
|
775
|
-
}
|
|
776
|
-
});
|
|
777
|
-
}
|
|
778
|
-
}
|
|
779
|
-
|
|
780
|
-
// Optional: delegation (string)
|
|
781
|
-
if (
|
|
782
|
-
discipline.agent.delegation !== undefined &&
|
|
783
|
-
typeof discipline.agent.delegation !== "string"
|
|
784
|
-
) {
|
|
785
|
-
errors.push(
|
|
786
|
-
createError(
|
|
787
|
-
"INVALID_VALUE",
|
|
788
|
-
"Discipline agent delegation must be a string",
|
|
789
|
-
`${agentPath}.delegation`,
|
|
790
|
-
discipline.agent.delegation,
|
|
791
|
-
),
|
|
792
|
-
);
|
|
793
|
-
}
|
|
794
|
-
|
|
795
753
|
// Optional: constraints (array of strings)
|
|
796
754
|
if (discipline.agent.constraints !== undefined) {
|
|
797
755
|
if (!Array.isArray(discipline.agent.constraints)) {
|
|
@@ -824,7 +782,7 @@ function validateDiscipline(
|
|
|
824
782
|
errors.push(
|
|
825
783
|
createError(
|
|
826
784
|
"INVALID_FIELD",
|
|
827
|
-
"Discipline agent 'coreInstructions' field is not supported. Use identity, priority,
|
|
785
|
+
"Discipline agent 'coreInstructions' field is not supported. Use identity, priority, and constraints instead.",
|
|
828
786
|
`${agentPath}.coreInstructions`,
|
|
829
787
|
),
|
|
830
788
|
);
|
|
@@ -1024,33 +982,6 @@ function validateTrack(
|
|
|
1024
982
|
);
|
|
1025
983
|
}
|
|
1026
984
|
|
|
1027
|
-
// Optional: beforeMakingChanges (array of strings)
|
|
1028
|
-
if (track.agent.beforeMakingChanges !== undefined) {
|
|
1029
|
-
if (!Array.isArray(track.agent.beforeMakingChanges)) {
|
|
1030
|
-
errors.push(
|
|
1031
|
-
createError(
|
|
1032
|
-
"INVALID_VALUE",
|
|
1033
|
-
"Track agent beforeMakingChanges must be an array",
|
|
1034
|
-
`${agentPath}.beforeMakingChanges`,
|
|
1035
|
-
track.agent.beforeMakingChanges,
|
|
1036
|
-
),
|
|
1037
|
-
);
|
|
1038
|
-
} else {
|
|
1039
|
-
track.agent.beforeMakingChanges.forEach((item, i) => {
|
|
1040
|
-
if (typeof item !== "string") {
|
|
1041
|
-
errors.push(
|
|
1042
|
-
createError(
|
|
1043
|
-
"INVALID_VALUE",
|
|
1044
|
-
"Track agent beforeMakingChanges items must be strings",
|
|
1045
|
-
`${agentPath}.beforeMakingChanges[${i}]`,
|
|
1046
|
-
item,
|
|
1047
|
-
),
|
|
1048
|
-
);
|
|
1049
|
-
}
|
|
1050
|
-
});
|
|
1051
|
-
}
|
|
1052
|
-
}
|
|
1053
|
-
|
|
1054
985
|
// Optional: constraints (array of strings)
|
|
1055
986
|
if (track.agent.constraints !== undefined) {
|
|
1056
987
|
if (!Array.isArray(track.agent.constraints)) {
|
|
@@ -1083,7 +1014,7 @@ function validateTrack(
|
|
|
1083
1014
|
errors.push(
|
|
1084
1015
|
createError(
|
|
1085
1016
|
"INVALID_FIELD",
|
|
1086
|
-
"Track agent 'coreInstructions' field is not supported. Use identity, priority,
|
|
1017
|
+
"Track agent 'coreInstructions' field is not supported. Use identity, priority, and constraints instead.",
|
|
1087
1018
|
`${agentPath}.coreInstructions`,
|
|
1088
1019
|
),
|
|
1089
1020
|
);
|
package/package.json
CHANGED
|
@@ -111,15 +111,6 @@
|
|
|
111
111
|
"type": "string",
|
|
112
112
|
"description": "Priority guidance for the agent"
|
|
113
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
114
|
"constraints": {
|
|
124
115
|
"type": "array",
|
|
125
116
|
"description": "Things the agent should avoid or never do",
|
|
@@ -27,7 +27,11 @@
|
|
|
27
27
|
},
|
|
28
28
|
"description": {
|
|
29
29
|
"type": "string",
|
|
30
|
-
"description": "Description of the stage's purpose"
|
|
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"
|
|
31
35
|
},
|
|
32
36
|
"handoffs": {
|
|
33
37
|
"type": "array",
|
|
@@ -83,11 +83,6 @@
|
|
|
83
83
|
"type": "string",
|
|
84
84
|
"description": "Priority guidance specific to this track"
|
|
85
85
|
},
|
|
86
|
-
"beforeMakingChanges": {
|
|
87
|
-
"type": "array",
|
|
88
|
-
"description": "Additional checklist items to consider",
|
|
89
|
-
"items": { "type": "string" }
|
|
90
|
-
},
|
|
91
86
|
"constraints": {
|
|
92
87
|
"type": "array",
|
|
93
88
|
"description": "Additional constraints specific to this track",
|
|
@@ -85,7 +85,7 @@ fit:implementationReference a rdf:Property ;
|
|
|
85
85
|
|
|
86
86
|
fit:toolReferences a rdf:Property ;
|
|
87
87
|
rdfs:label "toolReferences"@en ;
|
|
88
|
-
rdfs:comment "
|
|
88
|
+
rdfs:comment "Required tools for this skill"@en ;
|
|
89
89
|
rdfs:domain fit:Skill ;
|
|
90
90
|
rdfs:range fit:ToolReference .
|
|
91
91
|
|
|
@@ -288,7 +288,7 @@ fit:SkillShape a sh:NodeShape ;
|
|
|
288
288
|
sh:path fit:toolReferences ;
|
|
289
289
|
sh:node fit:ToolReferenceShape ;
|
|
290
290
|
sh:name "toolReferences" ;
|
|
291
|
-
sh:description "
|
|
291
|
+
sh:description "Required tools for this skill" ;
|
|
292
292
|
] .
|
|
293
293
|
|
|
294
294
|
# -----------------------------------------------------------------------------
|
|
@@ -109,16 +109,6 @@ fit:priority a rdf:Property ;
|
|
|
109
109
|
rdfs:comment "Priority guidance for the agent"@en ;
|
|
110
110
|
rdfs:range xsd:string .
|
|
111
111
|
|
|
112
|
-
fit:beforeMakingChanges a rdf:Property ;
|
|
113
|
-
rdfs:label "beforeMakingChanges"@en ;
|
|
114
|
-
rdfs:comment "Checklist items to consider before making changes"@en ;
|
|
115
|
-
rdfs:range xsd:string .
|
|
116
|
-
|
|
117
|
-
fit:delegation a rdf:Property ;
|
|
118
|
-
rdfs:label "delegation"@en ;
|
|
119
|
-
rdfs:comment "Guidance on when and how to delegate to subagents"@en ;
|
|
120
|
-
rdfs:range xsd:string .
|
|
121
|
-
|
|
122
112
|
# Modifier Properties
|
|
123
113
|
fit:targetBehaviour a rdf:Property ;
|
|
124
114
|
rdfs:label "targetBehaviour"@en ;
|
|
@@ -289,19 +279,6 @@ fit:DisciplineAgentSectionShape a sh:NodeShape ;
|
|
|
289
279
|
sh:name "priority" ;
|
|
290
280
|
sh:description "Priority guidance for the agent" ;
|
|
291
281
|
] ;
|
|
292
|
-
sh:property [
|
|
293
|
-
sh:path fit:beforeMakingChanges ;
|
|
294
|
-
sh:datatype xsd:string ;
|
|
295
|
-
sh:name "beforeMakingChanges" ;
|
|
296
|
-
sh:description "Checklist items to consider before making changes" ;
|
|
297
|
-
] ;
|
|
298
|
-
sh:property [
|
|
299
|
-
sh:path fit:delegation ;
|
|
300
|
-
sh:datatype xsd:string ;
|
|
301
|
-
sh:maxCount 1 ;
|
|
302
|
-
sh:name "delegation" ;
|
|
303
|
-
sh:description "Guidance on when and how to delegate to subagents" ;
|
|
304
|
-
] ;
|
|
305
282
|
sh:property [
|
|
306
283
|
sh:path fit:constraints ;
|
|
307
284
|
sh:datatype xsd:string ;
|
package/schema/rdf/stages.ttl
CHANGED
|
@@ -33,6 +33,17 @@ fit:entryCriteria a rdf:Property ;
|
|
|
33
33
|
rdfs:comment "Conditions that must be met before entering this stage"@en ;
|
|
34
34
|
rdfs:range xsd:string .
|
|
35
35
|
|
|
36
|
+
fit:exitCriteria a rdf:Property ;
|
|
37
|
+
rdfs:label "exitCriteria"@en ;
|
|
38
|
+
rdfs:comment "Conditions that must be met before leaving this stage"@en ;
|
|
39
|
+
rdfs:range xsd:string .
|
|
40
|
+
|
|
41
|
+
fit:summary a rdf:Property ;
|
|
42
|
+
rdfs:label "summary"@en ;
|
|
43
|
+
rdfs:comment "Third-person summary for metadata, listings, and sub-agent descriptions"@en ;
|
|
44
|
+
rdfs:domain fit:Stage ;
|
|
45
|
+
rdfs:range xsd:string .
|
|
46
|
+
|
|
36
47
|
fit:targetStage a rdf:Property ;
|
|
37
48
|
rdfs:label "targetStage"@en ;
|
|
38
49
|
rdfs:comment "The stage to transition to"@en ;
|
|
@@ -63,7 +74,7 @@ fit:StageShape a sh:NodeShape ;
|
|
|
63
74
|
sh:targetClass fit:Stage ;
|
|
64
75
|
sh:property [
|
|
65
76
|
sh:path fit:id ;
|
|
66
|
-
sh:in ( "plan" "code" "review" ) ;
|
|
77
|
+
sh:in ( "specify" "plan" "code" "review" "deploy" ) ;
|
|
67
78
|
sh:minCount 1 ;
|
|
68
79
|
sh:maxCount 1 ;
|
|
69
80
|
sh:name "id" ;
|
|
@@ -89,7 +100,14 @@ fit:StageShape a sh:NodeShape ;
|
|
|
89
100
|
sh:datatype xsd:string ;
|
|
90
101
|
sh:maxCount 1 ;
|
|
91
102
|
sh:name "description" ;
|
|
92
|
-
sh:description "Description of the stage's purpose" ;
|
|
103
|
+
sh:description "Description of the stage's purpose (second-person, for agent body)" ;
|
|
104
|
+
] ;
|
|
105
|
+
sh:property [
|
|
106
|
+
sh:path fit:summary ;
|
|
107
|
+
sh:datatype xsd:string ;
|
|
108
|
+
sh:maxCount 1 ;
|
|
109
|
+
sh:name "summary" ;
|
|
110
|
+
sh:description "Third-person summary for metadata, listings, and sub-agent descriptions" ;
|
|
93
111
|
] ;
|
|
94
112
|
sh:property [
|
|
95
113
|
sh:path fit:handoffs ;
|
|
@@ -108,6 +126,12 @@ fit:StageShape a sh:NodeShape ;
|
|
|
108
126
|
sh:datatype xsd:string ;
|
|
109
127
|
sh:name "entryCriteria" ;
|
|
110
128
|
sh:description "Conditions that must be met before entering this stage" ;
|
|
129
|
+
] ;
|
|
130
|
+
sh:property [
|
|
131
|
+
sh:path fit:exitCriteria ;
|
|
132
|
+
sh:datatype xsd:string ;
|
|
133
|
+
sh:name "exitCriteria" ;
|
|
134
|
+
sh:description "Conditions that must be met before leaving this stage" ;
|
|
111
135
|
] .
|
|
112
136
|
|
|
113
137
|
# -----------------------------------------------------------------------------
|
|
@@ -118,7 +142,7 @@ fit:HandoffShape a sh:NodeShape ;
|
|
|
118
142
|
sh:targetClass fit:Handoff ;
|
|
119
143
|
sh:property [
|
|
120
144
|
sh:path fit:targetStage ;
|
|
121
|
-
sh:in ( "plan" "code" "review" ) ;
|
|
145
|
+
sh:in ( "specify" "plan" "code" "review" "deploy" ) ;
|
|
122
146
|
sh:minCount 1 ;
|
|
123
147
|
sh:maxCount 1 ;
|
|
124
148
|
sh:name "targetStage" ;
|
package/schema/rdf/track.ttl
CHANGED
|
@@ -166,12 +166,6 @@ fit:TrackAgentSectionShape a sh:NodeShape ;
|
|
|
166
166
|
sh:name "priority" ;
|
|
167
167
|
sh:description "Priority guidance specific to this track" ;
|
|
168
168
|
] ;
|
|
169
|
-
sh:property [
|
|
170
|
-
sh:path fit:beforeMakingChanges ;
|
|
171
|
-
sh:datatype xsd:string ;
|
|
172
|
-
sh:name "beforeMakingChanges" ;
|
|
173
|
-
sh:description "Additional checklist items to consider" ;
|
|
174
|
-
] ;
|
|
175
169
|
sh:property [
|
|
176
170
|
sh:path fit:constraints ;
|
|
177
171
|
sh:datatype xsd:string ;
|