@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.
Files changed (65) hide show
  1. package/bin/fit-schema.js +260 -0
  2. package/examples/behaviours/_index.yaml +8 -0
  3. package/examples/behaviours/outcome_ownership.yaml +43 -0
  4. package/examples/behaviours/polymathic_knowledge.yaml +41 -0
  5. package/examples/behaviours/precise_communication.yaml +39 -0
  6. package/examples/behaviours/relentless_curiosity.yaml +37 -0
  7. package/examples/behaviours/systems_thinking.yaml +40 -0
  8. package/examples/capabilities/_index.yaml +8 -0
  9. package/examples/capabilities/business.yaml +189 -0
  10. package/examples/capabilities/delivery.yaml +305 -0
  11. package/examples/capabilities/people.yaml +68 -0
  12. package/examples/capabilities/reliability.yaml +414 -0
  13. package/examples/capabilities/scale.yaml +378 -0
  14. package/examples/copilot-setup-steps.yaml +25 -0
  15. package/examples/devcontainer.yaml +21 -0
  16. package/examples/disciplines/_index.yaml +6 -0
  17. package/examples/disciplines/data_engineering.yaml +78 -0
  18. package/examples/disciplines/engineering_management.yaml +63 -0
  19. package/examples/disciplines/software_engineering.yaml +78 -0
  20. package/examples/drivers.yaml +202 -0
  21. package/examples/framework.yaml +69 -0
  22. package/examples/grades.yaml +115 -0
  23. package/examples/questions/behaviours/outcome_ownership.yaml +51 -0
  24. package/examples/questions/behaviours/polymathic_knowledge.yaml +47 -0
  25. package/examples/questions/behaviours/precise_communication.yaml +54 -0
  26. package/examples/questions/behaviours/relentless_curiosity.yaml +50 -0
  27. package/examples/questions/behaviours/systems_thinking.yaml +52 -0
  28. package/examples/questions/skills/architecture_design.yaml +53 -0
  29. package/examples/questions/skills/cloud_platforms.yaml +47 -0
  30. package/examples/questions/skills/code_quality.yaml +48 -0
  31. package/examples/questions/skills/data_modeling.yaml +45 -0
  32. package/examples/questions/skills/devops.yaml +46 -0
  33. package/examples/questions/skills/full_stack_development.yaml +47 -0
  34. package/examples/questions/skills/sre_practices.yaml +43 -0
  35. package/examples/questions/skills/stakeholder_management.yaml +48 -0
  36. package/examples/questions/skills/team_collaboration.yaml +42 -0
  37. package/examples/questions/skills/technical_writing.yaml +42 -0
  38. package/examples/self-assessments.yaml +64 -0
  39. package/examples/stages.yaml +139 -0
  40. package/examples/tracks/_index.yaml +5 -0
  41. package/examples/tracks/platform.yaml +49 -0
  42. package/examples/tracks/sre.yaml +48 -0
  43. package/examples/vscode-settings.yaml +21 -0
  44. package/lib/index-generator.js +65 -0
  45. package/lib/index.js +44 -0
  46. package/lib/levels.js +601 -0
  47. package/lib/loader.js +599 -0
  48. package/lib/modifiers.js +23 -0
  49. package/lib/schema-validation.js +438 -0
  50. package/lib/validation.js +2130 -0
  51. package/package.json +49 -0
  52. package/schema/json/behaviour-questions.schema.json +68 -0
  53. package/schema/json/behaviour.schema.json +73 -0
  54. package/schema/json/capability.schema.json +220 -0
  55. package/schema/json/defs.schema.json +132 -0
  56. package/schema/json/discipline.schema.json +132 -0
  57. package/schema/json/drivers.schema.json +48 -0
  58. package/schema/json/framework.schema.json +55 -0
  59. package/schema/json/grades.schema.json +121 -0
  60. package/schema/json/index.schema.json +18 -0
  61. package/schema/json/self-assessments.schema.json +52 -0
  62. package/schema/json/skill-questions.schema.json +68 -0
  63. package/schema/json/stages.schema.json +84 -0
  64. package/schema/json/track.schema.json +100 -0
  65. package/schema/rdf/pathway.ttl +2362 -0
@@ -0,0 +1,48 @@
1
+ # yaml-language-server: $schema=https://schema.forwardimpact.team/json/track.schema.json
2
+
3
+ name: SRE
4
+
5
+ # Shared content (used by both human job descriptions and agent profiles)
6
+ description:
7
+ Site Reliability Engineering focus on system reliability, observability, and
8
+ incident response
9
+ roleContext:
10
+ In this Site Reliability Engineering role, you will focus on system
11
+ reliability, observability, and incident response. You will ensure our
12
+ services meet their reliability targets while driving continuous improvement
13
+ in system resilience and operational excellence.
14
+
15
+ # Derivation inputs - used by both human and agent profiles
16
+ skillModifiers:
17
+ scale: 1
18
+ reliability: 1
19
+ delivery: -1
20
+ behaviourModifiers:
21
+ outcome_ownership: 1
22
+ relentless_curiosity: 1
23
+ assessmentWeights:
24
+ skillWeight: 0.6
25
+ behaviourWeight: 0.4
26
+
27
+ # Agent-specific content
28
+ agent:
29
+ identity: |
30
+ You are an SRE {roleTitle} agent. Your primary focus is
31
+ system reliability, observability, and incident response.
32
+ priority: |
33
+ Reliability is non-negotiable. You instrument everything, design for
34
+ graceful degradation, and maintain error budgets. Every change
35
+ considers blast radius and recovery paths.
36
+
37
+ Production stability trumps feature velocity. No change ships without
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
+ constraints:
45
+ - Never compromise on observability instrumentation
46
+ - Document all runbooks and incident response procedures
47
+ - Verify failover mechanisms regularly
48
+ - Consider blast radius for all changes
@@ -0,0 +1,21 @@
1
+ # Enable coding agent
2
+ chat.agent.enabled: true
3
+
4
+ # Maximum requests per agent session (high limit for complex tasks)
5
+ chat.agent.maxRequests: 999
6
+
7
+ # Enable edits v2 for improved code editing
8
+ chat.edits2.enabled: true
9
+
10
+ # Enable extension unification for consistent behavior
11
+ chat.extensionUnification.enabled: true
12
+
13
+ # Enable custom agents to be used as subagents
14
+ # Required for multi-agent workflows with handoffs
15
+ chat.customAgentInSubagent.enabled: true
16
+
17
+ # Enable agent skills for enhanced agent capabilities
18
+ chat.useAgentSkills: true
19
+
20
+ # Enable skill adherence prompt to improve agent compliance with defined skills
21
+ chat.experimental.useSkillAdherencePrompt: true
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Directory Index Generator
3
+ *
4
+ * Generates _index.yaml files for browser-based directory discovery.
5
+ * These files list all entity files in a directory.
6
+ */
7
+
8
+ import { readdir, writeFile } from "fs/promises";
9
+ import { join, basename } from "path";
10
+ import { stringify as stringifyYaml } from "yaml";
11
+
12
+ /**
13
+ * Generate _index.yaml for a directory
14
+ * @param {string} dir - Directory path
15
+ * @returns {Promise<string[]>} List of file IDs included
16
+ */
17
+ export async function generateDirIndex(dir) {
18
+ const files = await readdir(dir);
19
+ const yamlFiles = files.filter(
20
+ (f) => f.endsWith(".yaml") && !f.startsWith("_"),
21
+ );
22
+
23
+ const fileIds = yamlFiles.map((f) => basename(f, ".yaml")).sort();
24
+
25
+ const content = stringifyYaml(
26
+ {
27
+ // Auto-generated index for browser loading
28
+ // Do not edit manually - regenerate with: npx pathway --generate-index
29
+ files: fileIds,
30
+ },
31
+ { lineWidth: 0 },
32
+ );
33
+
34
+ // Add header comment
35
+ const output = `# Auto-generated index for browser loading
36
+ # Do not edit manually - regenerate with: npx pathway --generate-index
37
+ ${content}`;
38
+
39
+ await writeFile(join(dir, "_index.yaml"), output, "utf-8");
40
+
41
+ return fileIds;
42
+ }
43
+
44
+ /**
45
+ * Generate all index files for the data directory
46
+ * @param {string} dataDir - Path to the data directory
47
+ * @returns {Promise<Object>} Summary of generated indexes
48
+ */
49
+ export async function generateAllIndexes(dataDir) {
50
+ const directories = ["behaviours", "disciplines", "tracks", "capabilities"];
51
+
52
+ const results = {};
53
+
54
+ for (const dir of directories) {
55
+ const fullPath = join(dataDir, dir);
56
+ try {
57
+ const files = await generateDirIndex(fullPath);
58
+ results[dir] = files;
59
+ } catch (err) {
60
+ results[dir] = { error: err.message };
61
+ }
62
+ }
63
+
64
+ return results;
65
+ }
package/lib/index.js ADDED
@@ -0,0 +1,44 @@
1
+ /**
2
+ * @forwardimpact/schema
3
+ *
4
+ * Schema definitions, data validation, and loading for Engineering Pathway.
5
+ */
6
+
7
+ // Data loading
8
+ export {
9
+ loadAllData,
10
+ loadYamlFile,
11
+ createDataLoader,
12
+ loadFrameworkConfig,
13
+ loadQuestionFolder,
14
+ loadQuestionBankFromFolder,
15
+ loadSelfAssessments,
16
+ loadExampleData,
17
+ loadAndValidate,
18
+ loadAgentData,
19
+ loadSkillsWithAgentData,
20
+ } from "./loader.js";
21
+
22
+ // Referential integrity validation
23
+ export {
24
+ validateAllData,
25
+ validateQuestionBank,
26
+ validateSelfAssessment,
27
+ validateAgentData,
28
+ } from "./validation.js";
29
+
30
+ // Schema-based validation
31
+ export {
32
+ validateDataDirectory,
33
+ validateReferentialIntegrity,
34
+ runSchemaValidation,
35
+ } from "./schema-validation.js";
36
+
37
+ // Index generation
38
+ export { generateAllIndexes, generateDirIndex } from "./index-generator.js";
39
+
40
+ // Type constants and helpers
41
+ export * from "./levels.js";
42
+
43
+ // Capability validation helper
44
+ export { isCapability } from "./modifiers.js";