@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,260 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* fit-schema CLI
|
|
5
|
+
*
|
|
6
|
+
* Schema validation and index generation for Engineering Pathway data.
|
|
7
|
+
*
|
|
8
|
+
* Commands:
|
|
9
|
+
* validate [--data=PATH] Run full schema + referential validation
|
|
10
|
+
* generate-index [--data=PATH] Generate _index.yaml files
|
|
11
|
+
* validate:shacl Validate SHACL schema syntax
|
|
12
|
+
* --help Show help
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
import { stat } from "fs/promises";
|
|
16
|
+
import { join, resolve, dirname } from "path";
|
|
17
|
+
import { fileURLToPath } from "url";
|
|
18
|
+
|
|
19
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
20
|
+
const __dirname = dirname(__filename);
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Parse CLI arguments
|
|
24
|
+
*/
|
|
25
|
+
function parseArgs(args) {
|
|
26
|
+
const command = args[0];
|
|
27
|
+
const options = {};
|
|
28
|
+
|
|
29
|
+
for (let i = 1; i < args.length; i++) {
|
|
30
|
+
const arg = args[i];
|
|
31
|
+
if (arg.startsWith("--data=")) {
|
|
32
|
+
options.dataDir = arg.slice(7);
|
|
33
|
+
} else if (arg === "--help" || arg === "-h") {
|
|
34
|
+
options.help = true;
|
|
35
|
+
} else if (arg.startsWith("--")) {
|
|
36
|
+
const [key, value] = arg.slice(2).split("=");
|
|
37
|
+
options[key] = value ?? true;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
return { command, options };
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Check if a directory exists
|
|
46
|
+
*/
|
|
47
|
+
async function dirExists(path) {
|
|
48
|
+
try {
|
|
49
|
+
const stats = await stat(path);
|
|
50
|
+
return stats.isDirectory();
|
|
51
|
+
} catch {
|
|
52
|
+
return false;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Find the data directory
|
|
58
|
+
*/
|
|
59
|
+
async function findDataDir(providedPath) {
|
|
60
|
+
if (providedPath) {
|
|
61
|
+
const resolved = resolve(providedPath);
|
|
62
|
+
if (await dirExists(resolved)) {
|
|
63
|
+
return resolved;
|
|
64
|
+
}
|
|
65
|
+
throw new Error(`Data directory not found: ${providedPath}`);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
// Check common locations
|
|
69
|
+
const candidates = [
|
|
70
|
+
join(process.cwd(), "data"),
|
|
71
|
+
join(process.cwd(), "examples"),
|
|
72
|
+
join(__dirname, "../examples"),
|
|
73
|
+
];
|
|
74
|
+
|
|
75
|
+
for (const candidate of candidates) {
|
|
76
|
+
if (await dirExists(candidate)) {
|
|
77
|
+
return candidate;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
throw new Error(
|
|
82
|
+
"No data directory found. Use --data=PATH to specify location.",
|
|
83
|
+
);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* Format validation results for display
|
|
88
|
+
*/
|
|
89
|
+
function formatValidationResults(result) {
|
|
90
|
+
const lines = [];
|
|
91
|
+
|
|
92
|
+
if (result.valid) {
|
|
93
|
+
lines.push("✅ Validation passed\n");
|
|
94
|
+
} else {
|
|
95
|
+
lines.push("❌ Validation failed\n");
|
|
96
|
+
lines.push("\nErrors:");
|
|
97
|
+
for (const error of result.errors) {
|
|
98
|
+
const path = error.path ? ` (${error.path})` : "";
|
|
99
|
+
lines.push(` • ${error.type}: ${error.message}${path}`);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
if (result.warnings?.length > 0) {
|
|
104
|
+
lines.push("\nWarnings:");
|
|
105
|
+
for (const warning of result.warnings) {
|
|
106
|
+
const path = warning.path ? ` (${warning.path})` : "";
|
|
107
|
+
lines.push(` ⚠ ${warning.type}: ${warning.message}${path}`);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
return lines.join("\n");
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* Validate command
|
|
116
|
+
*/
|
|
117
|
+
async function runValidate(dataDir) {
|
|
118
|
+
console.log(`🔍 Validating data in: ${dataDir}\n`);
|
|
119
|
+
|
|
120
|
+
const { runSchemaValidation, loadAllData } = await import("../lib/index.js");
|
|
121
|
+
|
|
122
|
+
// Load data first
|
|
123
|
+
const data = await loadAllData(dataDir, { validate: false });
|
|
124
|
+
|
|
125
|
+
// Run full validation
|
|
126
|
+
const result = await runSchemaValidation(dataDir, data);
|
|
127
|
+
|
|
128
|
+
console.log(formatValidationResults(result));
|
|
129
|
+
|
|
130
|
+
// Print summary
|
|
131
|
+
console.log("\n📊 Data Summary:");
|
|
132
|
+
console.log(` Skills: ${data.skills?.length || 0}`);
|
|
133
|
+
console.log(` Behaviours: ${data.behaviours?.length || 0}`);
|
|
134
|
+
console.log(` Disciplines: ${data.disciplines?.length || 0}`);
|
|
135
|
+
console.log(` Tracks: ${data.tracks?.length || 0}`);
|
|
136
|
+
console.log(` Grades: ${data.grades?.length || 0}`);
|
|
137
|
+
console.log(` Drivers: ${data.drivers?.length || 0}`);
|
|
138
|
+
|
|
139
|
+
return result.valid ? 0 : 1;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
/**
|
|
143
|
+
* Generate index command
|
|
144
|
+
*/
|
|
145
|
+
async function runGenerateIndex(dataDir) {
|
|
146
|
+
console.log(`📁 Generating index files in: ${dataDir}\n`);
|
|
147
|
+
|
|
148
|
+
const { generateAllIndexes } = await import("../lib/index.js");
|
|
149
|
+
|
|
150
|
+
const results = await generateAllIndexes(dataDir);
|
|
151
|
+
|
|
152
|
+
for (const [dir, files] of Object.entries(results)) {
|
|
153
|
+
if (files.error) {
|
|
154
|
+
console.log(`❌ ${dir}/_index.yaml: ${files.error}`);
|
|
155
|
+
} else {
|
|
156
|
+
console.log(`✅ ${dir}/_index.yaml (${files.length} files)`);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
return 0;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
/**
|
|
164
|
+
* SHACL validation command
|
|
165
|
+
*/
|
|
166
|
+
async function runValidateShacl() {
|
|
167
|
+
console.log("🔍 Validating SHACL schema syntax...\n");
|
|
168
|
+
|
|
169
|
+
const schemaPath = join(__dirname, "../schema/rdf/pathway.ttl");
|
|
170
|
+
|
|
171
|
+
try {
|
|
172
|
+
const { default: N3 } = await import("n3");
|
|
173
|
+
const { readFile } = await import("fs/promises");
|
|
174
|
+
|
|
175
|
+
const turtleContent = await readFile(schemaPath, "utf-8");
|
|
176
|
+
const parser = new N3.Parser({ format: "text/turtle" });
|
|
177
|
+
|
|
178
|
+
const quads = [];
|
|
179
|
+
parser.parse(turtleContent, (error, quad) => {
|
|
180
|
+
if (error) throw error;
|
|
181
|
+
if (quad) quads.push(quad);
|
|
182
|
+
});
|
|
183
|
+
|
|
184
|
+
console.log(`✅ SHACL syntax valid (${quads.length} triples)\n`);
|
|
185
|
+
return 0;
|
|
186
|
+
} catch (error) {
|
|
187
|
+
console.error(`❌ SHACL syntax error: ${error.message}\n`);
|
|
188
|
+
return 1;
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
/**
|
|
193
|
+
* Show help
|
|
194
|
+
*/
|
|
195
|
+
function showHelp() {
|
|
196
|
+
console.log(`
|
|
197
|
+
fit-schema - Schema validation for Engineering Pathway
|
|
198
|
+
|
|
199
|
+
Usage:
|
|
200
|
+
fit-schema <command> [options]
|
|
201
|
+
|
|
202
|
+
Commands:
|
|
203
|
+
validate Run full schema + referential validation
|
|
204
|
+
generate-index Generate _index.yaml files for directories
|
|
205
|
+
validate:shacl Validate SHACL schema syntax
|
|
206
|
+
|
|
207
|
+
Options:
|
|
208
|
+
--data=PATH Path to data directory (default: ./data or ./examples)
|
|
209
|
+
--help, -h Show this help message
|
|
210
|
+
|
|
211
|
+
Examples:
|
|
212
|
+
fit-schema validate
|
|
213
|
+
fit-schema validate --data=./my-data
|
|
214
|
+
fit-schema generate-index
|
|
215
|
+
fit-schema validate:shacl
|
|
216
|
+
`);
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
/**
|
|
220
|
+
* Main entry point
|
|
221
|
+
*/
|
|
222
|
+
async function main() {
|
|
223
|
+
const { command, options } = parseArgs(process.argv.slice(2));
|
|
224
|
+
|
|
225
|
+
if (options.help || !command) {
|
|
226
|
+
showHelp();
|
|
227
|
+
process.exit(command ? 0 : 1);
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
try {
|
|
231
|
+
let exitCode = 0;
|
|
232
|
+
|
|
233
|
+
switch (command) {
|
|
234
|
+
case "validate": {
|
|
235
|
+
const dataDir = await findDataDir(options.dataDir);
|
|
236
|
+
exitCode = await runValidate(dataDir);
|
|
237
|
+
break;
|
|
238
|
+
}
|
|
239
|
+
case "generate-index": {
|
|
240
|
+
const dataDir = await findDataDir(options.dataDir);
|
|
241
|
+
exitCode = await runGenerateIndex(dataDir);
|
|
242
|
+
break;
|
|
243
|
+
}
|
|
244
|
+
case "validate:shacl":
|
|
245
|
+
exitCode = await runValidateShacl();
|
|
246
|
+
break;
|
|
247
|
+
default:
|
|
248
|
+
console.error(`Unknown command: ${command}`);
|
|
249
|
+
showHelp();
|
|
250
|
+
exitCode = 1;
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
process.exit(exitCode);
|
|
254
|
+
} catch (error) {
|
|
255
|
+
console.error(`Error: ${error.message}`);
|
|
256
|
+
process.exit(1);
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
main();
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# yaml-language-server: $schema=https://schema.forwardimpact.team/json/behaviour.schema.json
|
|
2
|
+
|
|
3
|
+
name: Own the Outcome
|
|
4
|
+
human:
|
|
5
|
+
description:
|
|
6
|
+
Business outcomes trump engineering elegance. Embrace extreme ownership of
|
|
7
|
+
what you build—not just code quality, but business relationships, impact
|
|
8
|
+
metrics, and end-to-end results. Accept technical debt when it enables
|
|
9
|
+
faster business value, but own the consequences. AI may generate the code,
|
|
10
|
+
but responsibility for outcomes remains with you.
|
|
11
|
+
maturityDescriptions:
|
|
12
|
+
emerging:
|
|
13
|
+
Takes responsibility for assigned tasks with supervision; follows through
|
|
14
|
+
when reminded; asks for help appropriately; understands that work serves
|
|
15
|
+
business goals
|
|
16
|
+
developing:
|
|
17
|
+
Owns task completion independently; reviews AI-generated code critically;
|
|
18
|
+
makes pragmatic trade-offs between speed and polish; takes responsibility
|
|
19
|
+
for understanding code before shipping; considers business impact of
|
|
20
|
+
technical decisions
|
|
21
|
+
practicing:
|
|
22
|
+
Takes end-to-end ownership of features and business outcomes; accepts
|
|
23
|
+
technical debt intentionally when it accelerates value; builds trust
|
|
24
|
+
through rapid delivery of working solutions; owns stakeholder
|
|
25
|
+
relationships; balances quality with delivery speed
|
|
26
|
+
role_modeling:
|
|
27
|
+
Drives accountability culture focused on outcomes not deliverables; owns
|
|
28
|
+
business relationships and impact metrics across their function; makes
|
|
29
|
+
trade-offs between custom solutions and generalizable work; there is no "I
|
|
30
|
+
must run this by X"; ensures verification rigor for AI-generated code
|
|
31
|
+
exemplifying:
|
|
32
|
+
Defines organizational accountability standards focused on business
|
|
33
|
+
impact; shapes industry practices around outcome ownership in the AI era;
|
|
34
|
+
sponsors transformational initiatives with full outcome accountability;
|
|
35
|
+
recognized externally for ownership culture leadership
|
|
36
|
+
|
|
37
|
+
agent:
|
|
38
|
+
title: Own the outcome end-to-end
|
|
39
|
+
workingStyle: |
|
|
40
|
+
At each step:
|
|
41
|
+
1. Define success criteria before starting
|
|
42
|
+
2. Verify the change achieves the criteria
|
|
43
|
+
3. Don't hand off until you've validated the work
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# yaml-language-server: $schema=https://schema.forwardimpact.team/json/behaviour.schema.json
|
|
2
|
+
|
|
3
|
+
name: Be Polymath Oriented
|
|
4
|
+
human:
|
|
5
|
+
description:
|
|
6
|
+
Depth of expertise combined with breadth across multiple domains. Go beyond
|
|
7
|
+
T-shaped, building knowledge that spans technology, business, science, and
|
|
8
|
+
the pharmaceutical domain. Like Jim Gray, who made better architectural
|
|
9
|
+
decisions by understanding business beyond his database expertise, see
|
|
10
|
+
connections others miss.
|
|
11
|
+
maturityDescriptions:
|
|
12
|
+
emerging:
|
|
13
|
+
Recognizes that problems benefit from cross-disciplinary insights; shows
|
|
14
|
+
interest in domains beyond immediate technical requirements
|
|
15
|
+
developing:
|
|
16
|
+
Applies knowledge from one domain to inform decisions in another; studies
|
|
17
|
+
adjacent fields like design, business, or science; begins learning domain
|
|
18
|
+
language of business partners
|
|
19
|
+
practicing:
|
|
20
|
+
Bridges gaps between engineering, design, business, and science; rapidly
|
|
21
|
+
immerses in new domains; speaks the language of Commercial, Manufacturing,
|
|
22
|
+
or R&D; makes better decisions by understanding broader context
|
|
23
|
+
role_modeling:
|
|
24
|
+
Champions cross-disciplinary learning; creates holistic solutions spanning
|
|
25
|
+
technical and business domains; embodies the Renaissance Engineer ideal;
|
|
26
|
+
translates specialized knowledge into accessible explanations; thinks like
|
|
27
|
+
a business insider
|
|
28
|
+
exemplifying:
|
|
29
|
+
Shapes organizational learning strategy across disciplines; recognized
|
|
30
|
+
industry thought leader bridging technology and business; advises
|
|
31
|
+
executive leadership on cross-functional strategy; publishes on polymathic
|
|
32
|
+
approaches to engineering; influences industry hiring and development
|
|
33
|
+
practices
|
|
34
|
+
|
|
35
|
+
agent:
|
|
36
|
+
title: Apply cross-domain insight
|
|
37
|
+
workingStyle: |
|
|
38
|
+
When solving problems:
|
|
39
|
+
1. Draw on knowledge from multiple domains
|
|
40
|
+
2. Consider perspectives beyond pure technical implementation
|
|
41
|
+
3. Look for patterns that can be generalized
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# yaml-language-server: $schema=https://schema.forwardimpact.team/json/behaviour.schema.json
|
|
2
|
+
|
|
3
|
+
name: Communicate with Precision
|
|
4
|
+
human:
|
|
5
|
+
description:
|
|
6
|
+
In the age of AI, clarity becomes a superpower. Communicate with
|
|
7
|
+
precision—reducing ambiguity in specifications, requirements, and designs.
|
|
8
|
+
Natural language is inherently vague; AI can only generate accurate
|
|
9
|
+
solutions when given clear, unambiguous intent.
|
|
10
|
+
maturityDescriptions:
|
|
11
|
+
emerging:
|
|
12
|
+
Communicates basic technical concepts when prompted; participates in team
|
|
13
|
+
discussions; writes simple documentation
|
|
14
|
+
developing:
|
|
15
|
+
Writes clear documentation and specifications; reduces ambiguity in
|
|
16
|
+
requirements; crafts effective prompts for AI tools; adapts communication
|
|
17
|
+
style for different audiences
|
|
18
|
+
practicing:
|
|
19
|
+
Separates requirements, designs, and tasks with precision; enables AI to
|
|
20
|
+
generate accurate code through clear specifications; translates between
|
|
21
|
+
technical and business language; facilitates productive discussions
|
|
22
|
+
role_modeling:
|
|
23
|
+
Creates spec-driven development practices; mentors others on precise
|
|
24
|
+
communication; spans C-level executives to frontline workers; drives
|
|
25
|
+
clarity as a core value across their function; represents the organization
|
|
26
|
+
externally
|
|
27
|
+
exemplifying:
|
|
28
|
+
Shapes industry standards for technical communication; recognized
|
|
29
|
+
authority on spec-driven AI development; influences organizational
|
|
30
|
+
communication culture; publishes on precision in the AI era; keynotes at
|
|
31
|
+
industry conferences
|
|
32
|
+
|
|
33
|
+
agent:
|
|
34
|
+
title: Communicate with clarity
|
|
35
|
+
workingStyle: |
|
|
36
|
+
When providing output:
|
|
37
|
+
1. Separate blocking issues from suggestions
|
|
38
|
+
2. Explain the "why" behind each recommendation
|
|
39
|
+
3. Provide concrete examples or alternatives
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# yaml-language-server: $schema=https://schema.forwardimpact.team/json/behaviour.schema.json
|
|
2
|
+
|
|
3
|
+
name: Don't Lose Your Curiosity
|
|
4
|
+
human:
|
|
5
|
+
description:
|
|
6
|
+
The driving force behind learning and invention. Protect your instinct to
|
|
7
|
+
break things down and understand them deeply. Embrace an experimental spirit
|
|
8
|
+
that treats failure as a path to discovery, not a setback to avoid.
|
|
9
|
+
maturityDescriptions:
|
|
10
|
+
emerging:
|
|
11
|
+
Asks basic questions when prompted; shows interest in learning about
|
|
12
|
+
immediate tasks; willing to try new approaches
|
|
13
|
+
developing:
|
|
14
|
+
Regularly asks clarifying questions about "why" and "how"; explores
|
|
15
|
+
related topics with guidance; experiments without fear of failure;
|
|
16
|
+
investigates how AI tools work rather than using them blindly
|
|
17
|
+
practicing:
|
|
18
|
+
Proactively investigates root causes; experiments with new technologies
|
|
19
|
+
and AI capabilities; protects time for exploration; treats failure as
|
|
20
|
+
learning; discovers requirements through immersion in problem spaces
|
|
21
|
+
role_modeling:
|
|
22
|
+
Drives team curiosity through challenging questions; creates environments
|
|
23
|
+
where exploration and experimentation are encouraged; models problem
|
|
24
|
+
discovery orientation; seeks out ambiguity rather than avoiding it
|
|
25
|
+
exemplifying:
|
|
26
|
+
Shapes organizational culture around curiosity and continuous learning;
|
|
27
|
+
sponsors experimental initiatives across the organization; recognized
|
|
28
|
+
externally as a thought leader in problem discovery; influences industry
|
|
29
|
+
practices around innovation and exploration
|
|
30
|
+
|
|
31
|
+
agent:
|
|
32
|
+
title: Investigate before acting
|
|
33
|
+
workingStyle: |
|
|
34
|
+
Before taking action:
|
|
35
|
+
1. Confirm your understanding of the goal
|
|
36
|
+
2. Identify unknowns that could affect the approach
|
|
37
|
+
3. Research unfamiliar areas via subagent if needed
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# yaml-language-server: $schema=https://schema.forwardimpact.team/json/behaviour.schema.json
|
|
2
|
+
|
|
3
|
+
name: Think in Systems
|
|
4
|
+
human:
|
|
5
|
+
description:
|
|
6
|
+
The ability to see beyond individual components to understand how the entire
|
|
7
|
+
system behaves. Like understanding how reintroducing wolves to Yellowstone
|
|
8
|
+
transformed not just deer but rivers, engineers recognize that every
|
|
9
|
+
service, API, and queue is part of a larger whole—isolated changes ripple
|
|
10
|
+
across the system.
|
|
11
|
+
maturityDescriptions:
|
|
12
|
+
emerging:
|
|
13
|
+
Recognizes that systems have interconnected parts; considers immediate
|
|
14
|
+
dependencies in code; understands basic cause-and-effect
|
|
15
|
+
developing:
|
|
16
|
+
Identifies upstream and downstream impacts; uses observability tools to
|
|
17
|
+
trace requests across services; understands feedback loops; maps
|
|
18
|
+
dependencies before making changes
|
|
19
|
+
practicing:
|
|
20
|
+
Maps complex system interactions across technical and business domains;
|
|
21
|
+
anticipates cascading effects; designs systems that degrade gracefully;
|
|
22
|
+
understands how technology changes impact business operations
|
|
23
|
+
role_modeling:
|
|
24
|
+
Shapes systems design practices across their function; conducts chaos
|
|
25
|
+
engineering experiments; influences cross-team architecture decisions;
|
|
26
|
+
creates clarity from complexity; bridges technical systems with business
|
|
27
|
+
processes
|
|
28
|
+
exemplifying:
|
|
29
|
+
Defines organizational systems architecture principles; recognized
|
|
30
|
+
industry authority on complex systems; advises executive leadership on
|
|
31
|
+
systemic risks and opportunities; publishes thought leadership on systems
|
|
32
|
+
thinking in technology organizations
|
|
33
|
+
|
|
34
|
+
agent:
|
|
35
|
+
title: Consider the whole system
|
|
36
|
+
workingStyle: |
|
|
37
|
+
For every change:
|
|
38
|
+
1. Identify upstream and downstream impacts
|
|
39
|
+
2. Consider non-functional requirements (performance, security)
|
|
40
|
+
3. Document assumptions and trade-offs
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
# yaml-language-server: $schema=https://schema.forwardimpact.team/json/capability.schema.json
|
|
2
|
+
|
|
3
|
+
name: Business
|
|
4
|
+
emojiIcon: 💼
|
|
5
|
+
displayOrder: 8
|
|
6
|
+
description: |
|
|
7
|
+
Understanding and driving business value.
|
|
8
|
+
Includes domain knowledge, stakeholder management, strategic thinking,
|
|
9
|
+
and translating between technical and business contexts.
|
|
10
|
+
professionalResponsibilities:
|
|
11
|
+
awareness:
|
|
12
|
+
Understand the business context for your assigned work and communicate
|
|
13
|
+
progress clearly when asked
|
|
14
|
+
foundational:
|
|
15
|
+
Connect your technical work to business outcomes, engage with stakeholders
|
|
16
|
+
to clarify requirements
|
|
17
|
+
working:
|
|
18
|
+
Translate business needs into technical solutions, manage stakeholder
|
|
19
|
+
expectations, and articulate technical decisions in business terms
|
|
20
|
+
practitioner:
|
|
21
|
+
Drive business outcomes through technical solutions across your area,
|
|
22
|
+
influence product roadmaps, and partner effectively with business
|
|
23
|
+
stakeholders
|
|
24
|
+
expert:
|
|
25
|
+
Shape technology-driven business strategy, represent technical perspective
|
|
26
|
+
at executive level, and be recognized as a bridge between engineering and
|
|
27
|
+
business
|
|
28
|
+
managementResponsibilities:
|
|
29
|
+
awareness:
|
|
30
|
+
Understand business context and communicate team progress to stakeholders
|
|
31
|
+
with guidance
|
|
32
|
+
foundational:
|
|
33
|
+
Align team priorities with business objectives, manage stakeholder
|
|
34
|
+
relationships, and communicate team impact
|
|
35
|
+
working:
|
|
36
|
+
Translate business strategy into team objectives, own stakeholder
|
|
37
|
+
relationships, and ensure team delivers business value
|
|
38
|
+
practitioner:
|
|
39
|
+
Partner with business leaders to shape strategy for your area, influence
|
|
40
|
+
direction across teams, and deliver measurable business impact
|
|
41
|
+
expert:
|
|
42
|
+
Shape technology-driven business strategy, represent engineering at
|
|
43
|
+
executive level, and own strategic business outcomes
|
|
44
|
+
skills:
|
|
45
|
+
- id: stakeholder_management
|
|
46
|
+
name: Stakeholder Management
|
|
47
|
+
isHumanOnly: true
|
|
48
|
+
human:
|
|
49
|
+
description:
|
|
50
|
+
Building relationships with and managing expectations of stakeholders
|
|
51
|
+
across the organization, from frontline workers to C-level executives
|
|
52
|
+
levelDescriptions:
|
|
53
|
+
awareness:
|
|
54
|
+
You identify key stakeholders for your work and communicate status
|
|
55
|
+
when asked. You understand that different stakeholders have different
|
|
56
|
+
needs.
|
|
57
|
+
foundational:
|
|
58
|
+
You proactively update stakeholders on progress, handle basic
|
|
59
|
+
expectation setting, and escalate concerns appropriately. You build
|
|
60
|
+
rapport with regular collaborators.
|
|
61
|
+
working:
|
|
62
|
+
You manage multiple stakeholders with different interests, navigate
|
|
63
|
+
conflicting priorities diplomatically, and build trust through
|
|
64
|
+
consistent delivery. You tailor communication to each audience.
|
|
65
|
+
practitioner:
|
|
66
|
+
You influence senior stakeholders effectively across your area, manage
|
|
67
|
+
complex stakeholder landscapes with competing agendas, build trust
|
|
68
|
+
rapidly with new stakeholders, and shield teams from organizational
|
|
69
|
+
friction.
|
|
70
|
+
expert:
|
|
71
|
+
You shape stakeholder practices across the business unit. You manage
|
|
72
|
+
executive relationships, represent engineering at the highest levels,
|
|
73
|
+
and are recognized for exceptional stakeholder partnerships.
|
|
74
|
+
- id: technical_writing
|
|
75
|
+
name: Technical Writing
|
|
76
|
+
human:
|
|
77
|
+
description:
|
|
78
|
+
Creating clear, accurate, and useful technical documentation. Good specs
|
|
79
|
+
enable AI to generate accurate solutions; poor specs lead to poor
|
|
80
|
+
results.
|
|
81
|
+
levelDescriptions:
|
|
82
|
+
awareness:
|
|
83
|
+
You document your own work following team templates and standards. You
|
|
84
|
+
keep code comments current and write basic README content.
|
|
85
|
+
foundational:
|
|
86
|
+
You write clear READMEs, inline documentation, and technical guides.
|
|
87
|
+
You update existing docs when making changes and ensure documentation
|
|
88
|
+
matches implementation.
|
|
89
|
+
working:
|
|
90
|
+
You create comprehensive documentation for complex systems. You write
|
|
91
|
+
precise specifications that enable accurate AI-generated code,
|
|
92
|
+
establish documentation practices for your projects, and ensure docs
|
|
93
|
+
are discoverable.
|
|
94
|
+
practitioner:
|
|
95
|
+
You define documentation standards across teams in your area, create
|
|
96
|
+
documentation systems and templates, train engineers on spec-driven
|
|
97
|
+
development, and ensure documentation quality across projects.
|
|
98
|
+
expert:
|
|
99
|
+
You shape documentation culture and standards across the business
|
|
100
|
+
unit. You innovate on documentation approaches, are recognized for
|
|
101
|
+
exceptional technical writing clarity, and lead documentation
|
|
102
|
+
initiatives.
|
|
103
|
+
agent:
|
|
104
|
+
name: technical-writing
|
|
105
|
+
description: Guide for creating clear technical documentation.
|
|
106
|
+
useWhen: |
|
|
107
|
+
Writing READMEs, API docs, specifications, or any technical content
|
|
108
|
+
that needs to be clear and accurate.
|
|
109
|
+
stages:
|
|
110
|
+
specify:
|
|
111
|
+
focus: |
|
|
112
|
+
Define documentation requirements and audience needs.
|
|
113
|
+
Clarify what the documentation must accomplish.
|
|
114
|
+
activities:
|
|
115
|
+
- Identify target audience and their skill level
|
|
116
|
+
- Document what questions the docs must answer
|
|
117
|
+
- Define documentation type (README, API, spec, tutorial)
|
|
118
|
+
- Specify accuracy and completeness requirements
|
|
119
|
+
- Mark ambiguities with [NEEDS CLARIFICATION]
|
|
120
|
+
ready:
|
|
121
|
+
- Audience is identified
|
|
122
|
+
- Questions to answer are documented
|
|
123
|
+
- Documentation type is chosen
|
|
124
|
+
- Requirements are clear
|
|
125
|
+
plan:
|
|
126
|
+
focus: Understanding audience and planning documentation
|
|
127
|
+
activities:
|
|
128
|
+
- Identify target audience and their needs
|
|
129
|
+
- Determine document type and structure
|
|
130
|
+
- List prerequisites and assumptions
|
|
131
|
+
- Outline key sections and content
|
|
132
|
+
ready:
|
|
133
|
+
- Audience is identified
|
|
134
|
+
- Document type and structure planned
|
|
135
|
+
- Prerequisites listed
|
|
136
|
+
- Outline complete
|
|
137
|
+
code:
|
|
138
|
+
focus: Writing clear and accurate documentation
|
|
139
|
+
activities:
|
|
140
|
+
- Write using simple, direct language
|
|
141
|
+
- Structure content for scanning
|
|
142
|
+
- Include tested, runnable examples
|
|
143
|
+
- Define technical terms
|
|
144
|
+
ready:
|
|
145
|
+
- Purpose clear in first paragraph
|
|
146
|
+
- Examples are tested and work
|
|
147
|
+
- Technical terms are defined
|
|
148
|
+
- Structure supports scanning
|
|
149
|
+
review:
|
|
150
|
+
focus: Verifying documentation quality
|
|
151
|
+
activities:
|
|
152
|
+
- Check accuracy against implementation
|
|
153
|
+
- Verify examples are runnable
|
|
154
|
+
- Review for clarity and completeness
|
|
155
|
+
- Test with target audience if possible
|
|
156
|
+
ready:
|
|
157
|
+
- Documentation matches implementation
|
|
158
|
+
- All examples verified working
|
|
159
|
+
- No ambiguous pronouns
|
|
160
|
+
- Structure is logical and complete
|
|
161
|
+
deploy:
|
|
162
|
+
focus: |
|
|
163
|
+
Publish documentation and ensure it reaches the audience.
|
|
164
|
+
Set up maintenance process.
|
|
165
|
+
activities:
|
|
166
|
+
- Publish to documentation site
|
|
167
|
+
- Announce to relevant teams
|
|
168
|
+
- Add to search indexes and navigation
|
|
169
|
+
- Establish update and review schedule
|
|
170
|
+
ready:
|
|
171
|
+
- Documentation is published and accessible
|
|
172
|
+
- Audience can discover and find it
|
|
173
|
+
- Search and navigation are updated
|
|
174
|
+
- Maintenance schedule is established
|
|
175
|
+
implementationReference: |
|
|
176
|
+
## Document Types
|
|
177
|
+
|
|
178
|
+
| Type | Purpose | Key Sections |
|
|
179
|
+
|------|---------|--------------|
|
|
180
|
+
| README | Project overview | Description, Getting Started, Usage |
|
|
181
|
+
| API Docs | API reference | Endpoints, Parameters, Examples |
|
|
182
|
+
| Spec | Design proposal | Problem, Solution, Alternatives |
|
|
183
|
+
| Tutorial | Learning guide | Objective, Steps, Outcomes |
|
|
184
|
+
|
|
185
|
+
## Writing Principles
|
|
186
|
+
- Use simple, direct language
|
|
187
|
+
- One idea per sentence
|
|
188
|
+
- Active voice over passive
|
|
189
|
+
- Lead with most important info
|