@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.
@@ -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
@@ -66,4 +66,4 @@ entityDefinitions:
66
66
  title: Tools
67
67
  emojiIcon: "🔧"
68
68
  description: |
69
- Recommended 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 best practices directly in skill definitions.
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.
@@ -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
@@ -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, beforeMakingChanges, and delegation instead.",
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, beforeMakingChanges, and constraints instead.",
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@forwardimpact/schema",
3
- "version": "0.2.0",
3
+ "version": "0.4.0",
4
4
  "description": "Schema definitions and data loading for skills, behaviours, and role frameworks",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
@@ -95,7 +95,7 @@
95
95
  },
96
96
  "toolReferences": {
97
97
  "type": "array",
98
- "description": "Recommended tools for this skill",
98
+ "description": "Required tools for this skill",
99
99
  "items": { "$ref": "#/$defs/toolReference" }
100
100
  }
101
101
  },
@@ -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 "Recommended tools for this skill"@en ;
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 "Recommended tools for this skill" ;
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 ;
@@ -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" ;
@@ -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 ;