@forwardimpact/pathway 0.25.6 → 0.25.8

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 (36) hide show
  1. package/bin/fit-pathway.js +39 -39
  2. package/package.json +7 -7
  3. package/src/commands/agent.js +14 -14
  4. package/src/commands/behaviour.js +6 -6
  5. package/src/commands/build.js +1 -1
  6. package/src/commands/command-factory.js +2 -2
  7. package/src/commands/discipline.js +6 -6
  8. package/src/commands/driver.js +6 -6
  9. package/src/commands/init.js +26 -46
  10. package/src/commands/interview.js +4 -4
  11. package/src/commands/job.js +16 -16
  12. package/src/commands/level.js +6 -6
  13. package/src/commands/progress.js +4 -4
  14. package/src/commands/questions.js +7 -7
  15. package/src/commands/skill.js +8 -8
  16. package/src/commands/stage.js +5 -5
  17. package/src/commands/tool.js +5 -5
  18. package/src/commands/track.js +6 -6
  19. package/src/formatters/questions/yaml.js +1 -1
  20. package/src/handout-main.js +15 -1
  21. package/src/index.html +1 -1
  22. package/src/lib/cli-command.js +33 -33
  23. package/starter/behaviours/systems_thinking.yaml +32 -0
  24. package/starter/capabilities/delivery.yaml +105 -0
  25. package/starter/capabilities/reliability.yaml +72 -0
  26. package/starter/disciplines/software_engineering.yaml +46 -0
  27. package/starter/drivers.yaml +10 -0
  28. package/starter/framework.yaml +49 -0
  29. package/starter/levels.yaml +39 -0
  30. package/starter/questions/behaviours/.gitkeep +0 -0
  31. package/starter/questions/capabilities/.gitkeep +0 -0
  32. package/starter/questions/skills/.gitkeep +0 -0
  33. package/starter/stages.yaml +21 -0
  34. package/starter/tracks/forward_deployed.yaml +33 -0
  35. package/starter/tracks/platform.yaml +33 -0
  36. package/templates/install.template.sh +3 -4
@@ -4,10 +4,10 @@
4
4
  * Browse and compare interview questions across skills and behaviours.
5
5
  *
6
6
  * Usage:
7
- * npx pathway questions # Summary with stats
8
- * npx pathway questions --list # Question IDs (for piping)
9
- * npx pathway questions --level=practitioner # Filter by level
10
- * npx pathway questions --stats # Detailed statistics
7
+ * bunx pathway questions # Summary with stats
8
+ * bunx pathway questions --list # Question IDs (for piping)
9
+ * bunx pathway questions --level=practitioner # Filter by level
10
+ * bunx pathway questions --stats # Detailed statistics
11
11
  */
12
12
 
13
13
  import {
@@ -97,9 +97,9 @@ function showQuestionsSummary(data) {
97
97
  console.log("\nBehaviour Questions:");
98
98
  console.log(formatTable(["Maturity", "Count"], behaviourRows));
99
99
 
100
- console.log(`\nRun 'npx pathway questions --list' for question IDs`);
101
- console.log(`Run 'npx pathway questions --stats' for detailed stats`);
102
- console.log(`Run 'npx pathway questions --level=practitioner' to filter\n`);
100
+ console.log(`\nRun 'bunx pathway questions --list' for question IDs`);
101
+ console.log(`Run 'bunx pathway questions --stats' for detailed stats`);
102
+ console.log(`Run 'bunx pathway questions --level=practitioner' to filter\n`);
103
103
  }
104
104
 
105
105
  /**
@@ -4,11 +4,11 @@
4
4
  * Handles skill summary, listing, and detail display in the terminal.
5
5
  *
6
6
  * Usage:
7
- * npx pathway skill # Summary with stats
8
- * npx pathway skill --list # IDs only (for piping)
9
- * npx pathway skill <id> # Detail view
10
- * npx pathway skill <id> --agent # Agent SKILL.md output
11
- * npx pathway skill --validate # Validation checks
7
+ * bunx pathway skill # Summary with stats
8
+ * bunx pathway skill --list # IDs only (for piping)
9
+ * bunx pathway skill <id> # Detail view
10
+ * bunx pathway skill <id> --agent # Agent SKILL.md output
11
+ * bunx pathway skill --validate # Validation checks
12
12
  */
13
13
 
14
14
  import { createEntityCommand } from "./command-factory.js";
@@ -40,8 +40,8 @@ function formatSummary(skills, data) {
40
40
 
41
41
  console.log(formatTable(["Capability", "Count", "Agent"], rows));
42
42
  console.log(`\nTotal: ${skills.length} skills`);
43
- console.log(`\nRun 'npx pathway skill --list' for IDs`);
44
- console.log(`Run 'npx pathway skill <id>' for details\n`);
43
+ console.log(`\nRun 'bunx pathway skill --list' for IDs`);
44
+ console.log(`Run 'bunx pathway skill <id>' for details\n`);
45
45
  }
46
46
 
47
47
  /**
@@ -73,7 +73,7 @@ async function formatAgentDetail(skill, stages, templateLoader, dataDir) {
73
73
  console.error(formatError(`Skill '${skill.id}' has no agent section`));
74
74
  console.error(`\nSkills with agent support:`);
75
75
  console.error(
76
- ` npx pathway skill --list | xargs -I{} sh -c 'npx pathway skill {} --json | jq -e .skill.agent > /dev/null && echo {}'`,
76
+ ` bunx pathway skill --list | xargs -I{} sh -c 'bunx pathway skill {} --json | jq -e .skill.agent > /dev/null && echo {}'`,
77
77
  );
78
78
  process.exit(1);
79
79
  }
@@ -4,9 +4,9 @@
4
4
  * Handles stage summary, listing, and detail display in the terminal.
5
5
  *
6
6
  * Usage:
7
- * npx pathway stage # Summary with lifecycle flow
8
- * npx pathway stage --list # IDs only (for piping)
9
- * npx pathway stage <id> # Detail view
7
+ * bunx pathway stage # Summary with lifecycle flow
8
+ * bunx pathway stage --list # IDs only (for piping)
9
+ * bunx pathway stage <id> # Detail view
10
10
  */
11
11
 
12
12
  import { createEntityCommand } from "./command-factory.js";
@@ -52,8 +52,8 @@ function formatSummary(stages, _data) {
52
52
 
53
53
  console.log(formatTable(["ID", "Name", "Mode", "Tools", "Handoffs"], rows));
54
54
  console.log(`\nTotal: ${stages.length} stages`);
55
- console.log(`\nRun 'npx pathway stage --list' for IDs and names`);
56
- console.log(`Run 'npx pathway stage <id>' for details\n`);
55
+ console.log(`\nRun 'bunx pathway stage --list' for IDs and names`);
56
+ console.log(`Run 'bunx pathway stage <id>' for details\n`);
57
57
  }
58
58
 
59
59
  /**
@@ -4,9 +4,9 @@
4
4
  * Handles tool summary, listing, and detail display in the terminal.
5
5
  *
6
6
  * Usage:
7
- * npx pathway tool # Summary with stats
8
- * npx pathway tool --list # Tool names only (for piping)
9
- * npx pathway tool <name> # Detail view for specific tool
7
+ * bunx pathway tool # Summary with stats
8
+ * bunx pathway tool --list # Tool names only (for piping)
9
+ * bunx pathway tool <name> # Detail view for specific tool
10
10
  */
11
11
 
12
12
  import { truncate } from "../formatters/shared.js";
@@ -89,9 +89,9 @@ function formatSummary(tools, totalCount) {
89
89
  console.log(`(showing top 15 by usage)`);
90
90
  }
91
91
  console.log(
92
- `\nRun 'npx pathway tool --list' for all tool names and descriptions`,
92
+ `\nRun 'bunx pathway tool --list' for all tool names and descriptions`,
93
93
  );
94
- console.log(`Run 'npx pathway tool <name>' for details\n`);
94
+ console.log(`Run 'bunx pathway tool <name>' for details\n`);
95
95
  }
96
96
 
97
97
  /**
@@ -4,10 +4,10 @@
4
4
  * Handles track summary, listing, and detail display in the terminal.
5
5
  *
6
6
  * Usage:
7
- * npx pathway track # Summary with stats
8
- * npx pathway track --list # IDs only (for piping)
9
- * npx pathway track <id> # Detail view
10
- * npx pathway track --validate # Validation checks
7
+ * bunx pathway track # Summary with stats
8
+ * bunx pathway track --list # IDs only (for piping)
9
+ * bunx pathway track <id> # Detail view
10
+ * bunx pathway track --validate # Validation checks
11
11
  */
12
12
 
13
13
  import { createEntityCommand } from "./command-factory.js";
@@ -49,8 +49,8 @@ function formatSummary(tracks, data) {
49
49
 
50
50
  console.log(formatTable(["ID", "Name", "Modifiers", "Disciplines"], rows));
51
51
  console.log(`\nTotal: ${tracks.length} tracks`);
52
- console.log(`\nRun 'npx pathway track --list' for IDs and names`);
53
- console.log(`Run 'npx pathway track <id>' for details\n`);
52
+ console.log(`\nRun 'bunx pathway track --list' for IDs and names`);
53
+ console.log(`Run 'bunx pathway track <id>' for details\n`);
54
54
  }
55
55
 
56
56
  /**
@@ -26,7 +26,7 @@ export function questionsToYaml(view, _options = {}) {
26
26
 
27
27
  const filterStr =
28
28
  filterParts.length > 0 ? filterParts.join(" ") : "(no filters)";
29
- const header = `# Generated by: npx pathway questions ${filterStr}\n# Questions: ${questions.length}\n\n`;
29
+ const header = `# Generated by: bunx pathway questions ${filterStr}\n# Questions: ${questions.length}\n\n`;
30
30
 
31
31
  // Group questions by source
32
32
  const bySource = {};
@@ -38,6 +38,20 @@ import {
38
38
  } from "./formatters/index.js";
39
39
  import { sortTracksByName } from "./formatters/track/shared.js";
40
40
 
41
+ /**
42
+ * Escape HTML special characters to prevent XSS
43
+ * @param {string} text
44
+ * @returns {string}
45
+ */
46
+ function escapeHtml(text) {
47
+ return text
48
+ .replace(/&/g, "&amp;")
49
+ .replace(/</g, "&lt;")
50
+ .replace(/>/g, "&gt;")
51
+ .replace(/"/g, "&quot;")
52
+ .replace(/'/g, "&#039;");
53
+ }
54
+
41
55
  /**
42
56
  * Create a chapter cover page
43
57
  * @param {Object} params
@@ -425,7 +439,7 @@ async function init() {
425
439
  container.innerHTML = `
426
440
  <div class="slide-error">
427
441
  <h1>Initialization Error</h1>
428
- <p>${error.message}</p>
442
+ <p>${escapeHtml(String(error.message))}</p>
429
443
  </div>
430
444
  `;
431
445
  hideLoading();
package/src/index.html CHANGED
@@ -83,7 +83,7 @@
83
83
  <div class="top-bar__command">
84
84
  <span class="top-bar__prompt">$</span>
85
85
  <span class="top-bar__command-text" id="cli-command"
86
- >npx fit-pathway</span
86
+ >bunx fit-pathway</span
87
87
  >
88
88
  <button class="top-bar__copy" id="cli-copy" aria-label="Copy command">
89
89
  <svg viewBox="0 0 24 24">
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * CLI Command Mapping
3
3
  *
4
- * Maps hash routes to their equivalent `npx fit-pathway` CLI commands.
4
+ * Maps hash routes to their equivalent `bunx fit-pathway` CLI commands.
5
5
  */
6
6
 
7
7
  /**
@@ -11,122 +11,122 @@
11
11
  */
12
12
  const ROUTE_COMMANDS = [
13
13
  // Landing
14
- { pattern: /^\/$/, toCommand: () => "npx fit-pathway" },
14
+ { pattern: /^\/$/, toCommand: () => "bunx fit-pathway" },
15
15
 
16
16
  // Entity lists
17
- { pattern: /^\/skill$/, toCommand: () => "npx fit-pathway skill" },
18
- { pattern: /^\/behaviour$/, toCommand: () => "npx fit-pathway behaviour" },
17
+ { pattern: /^\/skill$/, toCommand: () => "bunx fit-pathway skill" },
18
+ { pattern: /^\/behaviour$/, toCommand: () => "bunx fit-pathway behaviour" },
19
19
  {
20
20
  pattern: /^\/discipline$/,
21
- toCommand: () => "npx fit-pathway discipline",
21
+ toCommand: () => "bunx fit-pathway discipline",
22
22
  },
23
- { pattern: /^\/track$/, toCommand: () => "npx fit-pathway track" },
24
- { pattern: /^\/level$/, toCommand: () => "npx fit-pathway level" },
25
- { pattern: /^\/driver$/, toCommand: () => "npx fit-pathway driver" },
26
- { pattern: /^\/stage$/, toCommand: () => "npx fit-pathway stage" },
27
- { pattern: /^\/tool$/, toCommand: () => "npx fit-pathway tool" },
23
+ { pattern: /^\/track$/, toCommand: () => "bunx fit-pathway track" },
24
+ { pattern: /^\/level$/, toCommand: () => "bunx fit-pathway level" },
25
+ { pattern: /^\/driver$/, toCommand: () => "bunx fit-pathway driver" },
26
+ { pattern: /^\/stage$/, toCommand: () => "bunx fit-pathway stage" },
27
+ { pattern: /^\/tool$/, toCommand: () => "bunx fit-pathway tool" },
28
28
 
29
29
  // Entity details
30
30
  {
31
31
  pattern: /^\/skill\/(.+)$/,
32
- toCommand: (m) => `npx fit-pathway skill ${m[1]}`,
32
+ toCommand: (m) => `bunx fit-pathway skill ${m[1]}`,
33
33
  },
34
34
  {
35
35
  pattern: /^\/behaviour\/(.+)$/,
36
- toCommand: (m) => `npx fit-pathway behaviour ${m[1]}`,
36
+ toCommand: (m) => `bunx fit-pathway behaviour ${m[1]}`,
37
37
  },
38
38
  {
39
39
  pattern: /^\/discipline\/(.+)$/,
40
- toCommand: (m) => `npx fit-pathway discipline ${m[1]}`,
40
+ toCommand: (m) => `bunx fit-pathway discipline ${m[1]}`,
41
41
  },
42
42
  {
43
43
  pattern: /^\/track\/(.+)$/,
44
- toCommand: (m) => `npx fit-pathway track ${m[1]}`,
44
+ toCommand: (m) => `bunx fit-pathway track ${m[1]}`,
45
45
  },
46
46
  {
47
47
  pattern: /^\/level\/(.+)$/,
48
- toCommand: (m) => `npx fit-pathway level ${m[1]}`,
48
+ toCommand: (m) => `bunx fit-pathway level ${m[1]}`,
49
49
  },
50
50
  {
51
51
  pattern: /^\/driver\/(.+)$/,
52
- toCommand: (m) => `npx fit-pathway driver ${m[1]}`,
52
+ toCommand: (m) => `bunx fit-pathway driver ${m[1]}`,
53
53
  },
54
54
  {
55
55
  pattern: /^\/stage\/(.+)$/,
56
- toCommand: (m) => `npx fit-pathway stage ${m[1]}`,
56
+ toCommand: (m) => `bunx fit-pathway stage ${m[1]}`,
57
57
  },
58
58
 
59
59
  // Job builder + detail
60
60
  {
61
61
  pattern: /^\/job-builder$/,
62
- toCommand: () => "npx fit-pathway job --list",
62
+ toCommand: () => "bunx fit-pathway job --list",
63
63
  },
64
64
  {
65
65
  pattern: /^\/job\/([^/]+)\/([^/]+)\/([^/]+)$/,
66
- toCommand: (m) => `npx fit-pathway job ${m[1]} ${m[2]} --track=${m[3]}`,
66
+ toCommand: (m) => `bunx fit-pathway job ${m[1]} ${m[2]} --track=${m[3]}`,
67
67
  },
68
68
  {
69
69
  pattern: /^\/job\/([^/]+)\/([^/]+)$/,
70
- toCommand: (m) => `npx fit-pathway job ${m[1]} ${m[2]}`,
70
+ toCommand: (m) => `bunx fit-pathway job ${m[1]} ${m[2]}`,
71
71
  },
72
72
 
73
73
  // Interview builder + detail
74
74
  {
75
75
  pattern: /^\/interview-prep$/,
76
- toCommand: () => "npx fit-pathway interview --list",
76
+ toCommand: () => "bunx fit-pathway interview --list",
77
77
  },
78
78
  {
79
79
  pattern: /^\/interview\/([^/]+)\/([^/]+)\/([^/]+)$/,
80
80
  toCommand: (m) =>
81
- `npx fit-pathway interview ${m[1]} ${m[2]} --track=${m[3]}`,
81
+ `bunx fit-pathway interview ${m[1]} ${m[2]} --track=${m[3]}`,
82
82
  },
83
83
  {
84
84
  pattern: /^\/interview\/([^/]+)\/([^/]+)$/,
85
- toCommand: (m) => `npx fit-pathway interview ${m[1]} ${m[2]}`,
85
+ toCommand: (m) => `bunx fit-pathway interview ${m[1]} ${m[2]}`,
86
86
  },
87
87
 
88
88
  // Career progress builder + detail
89
89
  {
90
90
  pattern: /^\/career-progress$/,
91
- toCommand: () => "npx fit-pathway progress --list",
91
+ toCommand: () => "bunx fit-pathway progress --list",
92
92
  },
93
93
  {
94
94
  pattern: /^\/progress\/([^/]+)\/([^/]+)\/([^/]+)$/,
95
95
  toCommand: (m) =>
96
- `npx fit-pathway progress ${m[1]} ${m[2]} --track=${m[3]}`,
96
+ `bunx fit-pathway progress ${m[1]} ${m[2]} --track=${m[3]}`,
97
97
  },
98
98
  {
99
99
  pattern: /^\/progress\/([^/]+)\/([^/]+)$/,
100
- toCommand: (m) => `npx fit-pathway progress ${m[1]} ${m[2]}`,
100
+ toCommand: (m) => `bunx fit-pathway progress ${m[1]} ${m[2]}`,
101
101
  },
102
102
 
103
103
  // Self-assessment
104
104
  {
105
105
  pattern: /^\/self-assessment$/,
106
- toCommand: () => "npx fit-pathway self-assessment",
106
+ toCommand: () => "bunx fit-pathway self-assessment",
107
107
  },
108
108
  {
109
109
  pattern: /^\/self-assessment\/results$/,
110
- toCommand: () => "npx fit-pathway self-assessment",
110
+ toCommand: () => "bunx fit-pathway self-assessment",
111
111
  },
112
112
 
113
113
  // Agent builder + detail
114
114
  {
115
115
  pattern: /^\/agent-builder$/,
116
- toCommand: () => "npx fit-pathway agent --list",
116
+ toCommand: () => "bunx fit-pathway agent --list",
117
117
  },
118
118
  {
119
119
  pattern: /^\/agent\/([^/]+)\/([^/]+)\/([^/]+)$/,
120
120
  toCommand: (m) =>
121
- `npx fit-pathway agent ${m[1]} --track=${m[2]} --stage=${m[3]}`,
121
+ `bunx fit-pathway agent ${m[1]} --track=${m[2]} --stage=${m[3]}`,
122
122
  },
123
123
  {
124
124
  pattern: /^\/agent\/([^/]+)\/([^/]+)$/,
125
- toCommand: (m) => `npx fit-pathway agent ${m[1]} --track=${m[2]}`,
125
+ toCommand: (m) => `bunx fit-pathway agent ${m[1]} --track=${m[2]}`,
126
126
  },
127
127
  {
128
128
  pattern: /^\/agent\/([^/]+)$/,
129
- toCommand: (m) => `npx fit-pathway agent ${m[1]}`,
129
+ toCommand: (m) => `bunx fit-pathway agent ${m[1]}`,
130
130
  },
131
131
  ];
132
132
 
@@ -141,5 +141,5 @@ export function getCliCommand(hashPath) {
141
141
  const match = path.match(pattern);
142
142
  if (match) return toCommand(match);
143
143
  }
144
- return "npx fit-pathway";
144
+ return "bunx fit-pathway";
145
145
  }
@@ -0,0 +1,32 @@
1
+ # yaml-language-server: $schema=https://www.forwardimpact.team/schema/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. Engineers recognize that every service, API, and queue is
8
+ part of a larger whole—isolated changes ripple across the system.
9
+ maturityDescriptions:
10
+ emerging:
11
+ Recognizes that systems have interconnected parts; considers immediate
12
+ dependencies in code
13
+ developing:
14
+ Identifies upstream and downstream impacts; uses observability tools to
15
+ trace requests across services
16
+ practicing:
17
+ Maps complex system interactions across technical and business domains;
18
+ anticipates cascading effects
19
+ role_modeling:
20
+ Shapes systems design practices across their function; influences
21
+ cross-team architecture decisions
22
+ exemplifying:
23
+ Defines organizational systems architecture principles; recognized
24
+ authority on complex systems
25
+
26
+ agent:
27
+ title: Consider the whole system
28
+ workingStyle: |
29
+ For every change:
30
+ 1. Identify upstream and downstream impacts
31
+ 2. Consider non-functional requirements (performance, security)
32
+ 3. Document assumptions and trade-offs
@@ -0,0 +1,105 @@
1
+ # yaml-language-server: $schema=https://www.forwardimpact.team/schema/json/capability.schema.json
2
+
3
+ id: delivery
4
+ name: Delivery
5
+ emojiIcon: "\U0001F680"
6
+ ordinalRank: 1
7
+ description: |
8
+ Building and shipping solutions that solve real problems.
9
+ professionalResponsibilities:
10
+ awareness:
11
+ You complete assigned tasks within established patterns with guidance
12
+ foundational: You deliver small features end-to-end with minimal guidance
13
+ working: You own feature delivery from design through deployment
14
+ practitioner: You lead technical delivery of complex projects across teams
15
+ expert: You drive delivery of the most critical technical initiatives
16
+ managementResponsibilities:
17
+ awareness: You track team progress and communicate status to stakeholders
18
+ foundational:
19
+ You coordinate team delivery by managing dependencies and removing blockers
20
+ working: You own team delivery outcomes and make resourcing decisions
21
+ practitioner: You drive delivery excellence across multiple teams
22
+ expert: You shape delivery culture across the business unit
23
+ skills:
24
+ - id: task_completion
25
+ name: Task Completion
26
+ human:
27
+ description:
28
+ Completing work items reliably, from understanding requirements through
29
+ implementation to verification.
30
+ proficiencyDescriptions:
31
+ awareness:
32
+ You complete well-defined tasks with guidance, following established
33
+ patterns and asking for help when needed.
34
+ foundational:
35
+ You break down tasks into steps, estimate effort, and deliver
36
+ independently on familiar work.
37
+ working:
38
+ You manage your own workload, handle ambiguous requirements, and
39
+ consistently deliver on commitments.
40
+ practitioner:
41
+ You coordinate task delivery across teams, unblock others, and
42
+ establish completion standards for your area.
43
+ expert:
44
+ You define delivery practices across the organization and drive
45
+ completion of the most complex initiatives.
46
+ agent:
47
+ name: task-completion
48
+ description: |
49
+ Guide for completing work items reliably from requirements through
50
+ verification.
51
+ useWhen: |
52
+ Implementing features, fixing bugs, or completing any defined work item.
53
+ stages:
54
+ code:
55
+ focus: |
56
+ Implement the solution according to requirements. Write clean,
57
+ tested code that meets acceptance criteria.
58
+ readChecklist:
59
+ - Understand the requirements and acceptance criteria
60
+ - Review relevant existing code and patterns
61
+ confirmChecklist:
62
+ - Code compiles and passes tests
63
+ - Acceptance criteria are met
64
+ - Changes are documented
65
+
66
+ - id: planning
67
+ name: Planning
68
+ human:
69
+ description:
70
+ Breaking down work into manageable pieces, estimating effort, and
71
+ sequencing delivery for maximum impact.
72
+ proficiencyDescriptions:
73
+ awareness:
74
+ You follow project plans created by others and report progress
75
+ accurately.
76
+ foundational:
77
+ You create simple plans for your own work, estimate tasks, and
78
+ identify dependencies.
79
+ working:
80
+ You plan features end-to-end, manage dependencies, and adjust plans
81
+ based on new information.
82
+ practitioner:
83
+ You lead planning for complex projects across teams, manage risk, and
84
+ establish planning practices for your area.
85
+ expert:
86
+ You shape planning strategy across the organization and drive delivery
87
+ of the most complex programmes.
88
+ agent:
89
+ name: planning
90
+ description: |
91
+ Guide for breaking down work, estimating effort, and sequencing
92
+ delivery.
93
+ useWhen: |
94
+ Planning features, creating implementation plans, or sequencing work.
95
+ stages:
96
+ code:
97
+ focus: |
98
+ Follow the implementation plan. Track progress and flag deviations
99
+ from the plan early.
100
+ readChecklist:
101
+ - Review the implementation plan
102
+ - Understand task dependencies and ordering
103
+ confirmChecklist:
104
+ - Plan steps are completed in order
105
+ - Deviations from the plan are documented
@@ -0,0 +1,72 @@
1
+ # yaml-language-server: $schema=https://www.forwardimpact.team/schema/json/capability.schema.json
2
+
3
+ id: reliability
4
+ name: Reliability
5
+ emojiIcon: "\U0001F6E1\uFE0F"
6
+ ordinalRank: 2
7
+ description: |
8
+ Ensuring systems are dependable, observable, and resilient.
9
+ professionalResponsibilities:
10
+ awareness: You follow operational guidelines and escalate issues appropriately
11
+ foundational:
12
+ You implement reliability practices in your code and create basic monitoring
13
+ working: You design for reliability and lead incident response
14
+ practitioner: You establish SLOs across teams and drive reliability culture
15
+ expert: You shape reliability strategy across the business unit
16
+ managementResponsibilities:
17
+ awareness:
18
+ You understand reliability requirements and support escalation processes
19
+ foundational:
20
+ You ensure your team follows reliability practices and facilitate
21
+ retrospectives
22
+ working:
23
+ You own team reliability outcomes and manage incident response rotations
24
+ practitioner:
25
+ You drive reliability culture across teams and own cross-team reliability
26
+ outcomes
27
+ expert:
28
+ You shape reliability strategy across the business unit and own enterprise
29
+ reliability outcomes
30
+ skills:
31
+ - id: incident_response
32
+ name: Incident Response
33
+ human:
34
+ description:
35
+ Responding to production incidents effectively, from detection through
36
+ resolution and post-incident review.
37
+ proficiencyDescriptions:
38
+ awareness:
39
+ You follow incident response procedures and escalate issues using
40
+ established channels.
41
+ foundational:
42
+ You participate in incident response, gather diagnostic information,
43
+ and contribute to post-incident reviews.
44
+ working:
45
+ You lead incident response for your services, coordinate resolution,
46
+ and conduct blameless post-mortems.
47
+ practitioner:
48
+ You establish incident response practices across teams, lead complex
49
+ incidents, and drive systemic improvements.
50
+ expert:
51
+ You define incident management strategy across the organization and
52
+ lead response to the most critical incidents.
53
+ agent:
54
+ name: incident-response
55
+ description: |
56
+ Guide for responding to production incidents from detection through
57
+ resolution.
58
+ useWhen: |
59
+ Handling production issues, investigating failures, or improving
60
+ incident response processes.
61
+ stages:
62
+ code:
63
+ focus: |
64
+ Implement fixes for identified issues. Ensure changes are tested
65
+ and do not introduce regressions.
66
+ readChecklist:
67
+ - Understand the root cause of the incident
68
+ - Review affected systems and dependencies
69
+ confirmChecklist:
70
+ - Fix addresses the root cause
71
+ - Changes are tested
72
+ - Monitoring confirms resolution
@@ -0,0 +1,46 @@
1
+ # yaml-language-server: $schema=https://www.forwardimpact.team/schema/json/discipline.schema.json
2
+
3
+ specialization: Software Engineering
4
+ roleTitle: Software Engineer
5
+ isProfessional: true
6
+
7
+ # null = allow trackless (generalist)
8
+ validTracks:
9
+ - null
10
+ - forward_deployed
11
+ - platform
12
+
13
+ description:
14
+ Builds and maintains software systems, focusing on code quality, architecture,
15
+ and reliable delivery of business value.
16
+
17
+ # Derivation inputs — one skill per tier
18
+ coreSkills:
19
+ - task_completion
20
+ supportingSkills:
21
+ - planning
22
+ broadSkills:
23
+ - incident_response
24
+ behaviourModifiers:
25
+ systems_thinking: 1
26
+
27
+ # Human-specific content
28
+ human:
29
+ professionalRoleSummary:
30
+ As a {roleTitle}, you build and maintain software systems that deliver
31
+ business value reliably.
32
+ managementRoleSummary:
33
+ As a {specialization} manager, you lead teams that build and maintain
34
+ software systems delivering business value.
35
+
36
+ # Agent-specific content
37
+ agent:
38
+ identity: |
39
+ You are a {roleTitle} agent focused on building reliable software.
40
+ priority: |
41
+ Write clean, tested code that meets requirements and follows established
42
+ patterns.
43
+ constraints:
44
+ - Follow existing code conventions
45
+ - Write tests for new functionality
46
+ - Document non-obvious decisions
@@ -0,0 +1,10 @@
1
+ # yaml-language-server: $schema=https://www.forwardimpact.team/schema/json/drivers.schema.json
2
+
3
+ - id: quality
4
+ name: Quality
5
+ description: Deliver work that meets expectations consistently.
6
+ contributingSkills:
7
+ - task_completion
8
+ - planning
9
+ contributingBehaviours:
10
+ - systems_thinking