@forwardimpact/pathway 0.5.0 → 0.7.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 (232) hide show
  1. package/README.md +47 -84
  2. package/bin/{pathway.js → fit-pathway.js} +65 -153
  3. package/package.json +18 -41
  4. package/{app → src}/commands/agent.js +5 -2
  5. package/{app → src}/commands/driver.js +1 -1
  6. package/{app → src}/commands/grade.js +1 -1
  7. package/{app → src}/commands/job.js +3 -3
  8. package/{app → src}/commands/serve.js +24 -2
  9. package/{app → src}/commands/site.js +2 -2
  10. package/{app → src}/commands/skill.js +2 -2
  11. package/{app → src}/commands/track.js +1 -1
  12. package/{app → src}/components/checklist.js +1 -1
  13. package/{app → src}/components/comparison-radar.js +1 -1
  14. package/{app → src}/components/detail.js +1 -1
  15. package/{app → src}/components/skill-matrix.js +1 -1
  16. package/{app → src}/formatters/behaviour/dom.js +1 -1
  17. package/{app → src}/formatters/behaviour/microdata.js +1 -1
  18. package/{app → src}/formatters/discipline/dom.js +1 -1
  19. package/{app → src}/formatters/discipline/microdata.js +1 -1
  20. package/{app → src}/formatters/driver/dom.js +1 -1
  21. package/{app → src}/formatters/driver/microdata.js +1 -1
  22. package/{app → src}/formatters/grade/dom.js +1 -1
  23. package/{app → src}/formatters/grade/markdown.js +1 -1
  24. package/{app → src}/formatters/grade/microdata.js +1 -1
  25. package/{app → src}/formatters/interview/dom.js +1 -1
  26. package/{app → src}/formatters/interview/markdown.js +1 -1
  27. package/{app → src}/formatters/interview/shared.js +3 -3
  28. package/{app → src}/formatters/job/description.js +1 -1
  29. package/{app → src}/formatters/job/markdown.js +1 -1
  30. package/{app → src}/formatters/json-ld.js +2 -2
  31. package/{app → src}/formatters/microdata-shared.js +2 -2
  32. package/{app → src}/formatters/progress/shared.js +3 -3
  33. package/{app → src}/formatters/skill/dom.js +1 -1
  34. package/{app → src}/formatters/skill/markdown.js +1 -1
  35. package/{app → src}/formatters/skill/microdata.js +1 -1
  36. package/{app → src}/formatters/skill/shared.js +2 -2
  37. package/{app → src}/formatters/stage/microdata.js +1 -1
  38. package/{app → src}/formatters/track/dom.js +1 -1
  39. package/{app → src}/formatters/track/markdown.js +1 -1
  40. package/{app → src}/formatters/track/microdata.js +1 -1
  41. package/{app → src}/formatters/track/shared.js +4 -1
  42. package/{app → src}/handout-main.js +4 -1
  43. package/src/handout.html +43 -0
  44. package/{app → src}/index.html +16 -1
  45. package/{app → src}/lib/card-mappers.js +1 -1
  46. package/{app → src}/lib/job-cache.js +1 -1
  47. package/{app → src}/lib/render.js +1 -1
  48. package/{app → src}/pages/agent-builder.js +1 -1
  49. package/{app → src}/pages/assessment-results.js +1 -1
  50. package/{app → src}/pages/interview.js +1 -1
  51. package/{app → src}/pages/job-builder.js +1 -1
  52. package/{app → src}/pages/job.js +1 -1
  53. package/{app → src}/pages/landing.js +4 -1
  54. package/{app → src}/pages/self-assessment.js +1 -1
  55. package/{app → src}/pages/skill.js +1 -1
  56. package/{app → src}/pages/stage.js +1 -1
  57. package/{app → src}/pages/tool.js +1 -1
  58. package/{app → src}/slide-main.js +1 -1
  59. package/{app → src}/slides/index.js +2 -2
  60. package/{app → src}/slides/job.js +1 -1
  61. package/{app → src}/slides/overview.js +1 -1
  62. package/{app → src}/slides.html +16 -1
  63. package/templates/agent.template.md +27 -26
  64. package/templates/job.template.md +11 -17
  65. package/templates/skill.template.md +15 -21
  66. package/app/handout.html +0 -28
  67. package/app/model/agent.js +0 -754
  68. package/app/model/checklist.js +0 -103
  69. package/app/model/derivation.js +0 -766
  70. package/app/model/index-generator.js +0 -65
  71. package/app/model/interview.js +0 -539
  72. package/app/model/job.js +0 -228
  73. package/app/model/levels.js +0 -601
  74. package/app/model/loader.js +0 -599
  75. package/app/model/matching.js +0 -888
  76. package/app/model/modifiers.js +0 -158
  77. package/app/model/profile.js +0 -259
  78. package/app/model/progression.js +0 -507
  79. package/app/model/schema-validation.js +0 -438
  80. package/app/model/validation.js +0 -2130
  81. package/examples/behaviours/_index.yaml +0 -8
  82. package/examples/behaviours/outcome_ownership.yaml +0 -43
  83. package/examples/behaviours/polymathic_knowledge.yaml +0 -41
  84. package/examples/behaviours/precise_communication.yaml +0 -39
  85. package/examples/behaviours/relentless_curiosity.yaml +0 -37
  86. package/examples/behaviours/systems_thinking.yaml +0 -40
  87. package/examples/capabilities/_index.yaml +0 -8
  88. package/examples/capabilities/business.yaml +0 -189
  89. package/examples/capabilities/delivery.yaml +0 -305
  90. package/examples/capabilities/people.yaml +0 -68
  91. package/examples/capabilities/reliability.yaml +0 -414
  92. package/examples/capabilities/scale.yaml +0 -378
  93. package/examples/copilot-setup-steps.yaml +0 -25
  94. package/examples/devcontainer.yaml +0 -21
  95. package/examples/disciplines/_index.yaml +0 -6
  96. package/examples/disciplines/data_engineering.yaml +0 -78
  97. package/examples/disciplines/engineering_management.yaml +0 -63
  98. package/examples/disciplines/software_engineering.yaml +0 -78
  99. package/examples/drivers.yaml +0 -202
  100. package/examples/framework.yaml +0 -69
  101. package/examples/grades.yaml +0 -115
  102. package/examples/questions/behaviours/outcome_ownership.yaml +0 -51
  103. package/examples/questions/behaviours/polymathic_knowledge.yaml +0 -47
  104. package/examples/questions/behaviours/precise_communication.yaml +0 -54
  105. package/examples/questions/behaviours/relentless_curiosity.yaml +0 -50
  106. package/examples/questions/behaviours/systems_thinking.yaml +0 -52
  107. package/examples/questions/skills/architecture_design.yaml +0 -53
  108. package/examples/questions/skills/cloud_platforms.yaml +0 -47
  109. package/examples/questions/skills/code_quality.yaml +0 -48
  110. package/examples/questions/skills/data_modeling.yaml +0 -45
  111. package/examples/questions/skills/devops.yaml +0 -46
  112. package/examples/questions/skills/full_stack_development.yaml +0 -47
  113. package/examples/questions/skills/sre_practices.yaml +0 -43
  114. package/examples/questions/skills/stakeholder_management.yaml +0 -48
  115. package/examples/questions/skills/team_collaboration.yaml +0 -42
  116. package/examples/questions/skills/technical_writing.yaml +0 -42
  117. package/examples/self-assessments.yaml +0 -64
  118. package/examples/stages.yaml +0 -139
  119. package/examples/tracks/_index.yaml +0 -5
  120. package/examples/tracks/platform.yaml +0 -49
  121. package/examples/tracks/sre.yaml +0 -48
  122. package/examples/vscode-settings.yaml +0 -17
  123. /package/{app → src}/commands/behaviour.js +0 -0
  124. /package/{app → src}/commands/command-factory.js +0 -0
  125. /package/{app → src}/commands/discipline.js +0 -0
  126. /package/{app → src}/commands/index.js +0 -0
  127. /package/{app → src}/commands/init.js +0 -0
  128. /package/{app → src}/commands/interview.js +0 -0
  129. /package/{app → src}/commands/progress.js +0 -0
  130. /package/{app → src}/commands/questions.js +0 -0
  131. /package/{app → src}/commands/stage.js +0 -0
  132. /package/{app → src}/commands/tool.js +0 -0
  133. /package/{app → src}/components/action-buttons.js +0 -0
  134. /package/{app → src}/components/behaviour-profile.js +0 -0
  135. /package/{app → src}/components/builder.js +0 -0
  136. /package/{app → src}/components/card.js +0 -0
  137. /package/{app → src}/components/code-display.js +0 -0
  138. /package/{app → src}/components/error-page.js +0 -0
  139. /package/{app → src}/components/grid.js +0 -0
  140. /package/{app → src}/components/list.js +0 -0
  141. /package/{app → src}/components/markdown-textarea.js +0 -0
  142. /package/{app → src}/components/modifier-table.js +0 -0
  143. /package/{app → src}/components/nav.js +0 -0
  144. /package/{app → src}/components/progression-table.js +0 -0
  145. /package/{app → src}/components/radar-chart.js +0 -0
  146. /package/{app → src}/css/base.css +0 -0
  147. /package/{app → src}/css/bundles/app.css +0 -0
  148. /package/{app → src}/css/bundles/handout.css +0 -0
  149. /package/{app → src}/css/bundles/slides.css +0 -0
  150. /package/{app → src}/css/components/badges.css +0 -0
  151. /package/{app → src}/css/components/buttons.css +0 -0
  152. /package/{app → src}/css/components/forms.css +0 -0
  153. /package/{app → src}/css/components/layout.css +0 -0
  154. /package/{app → src}/css/components/nav.css +0 -0
  155. /package/{app → src}/css/components/progress.css +0 -0
  156. /package/{app → src}/css/components/states.css +0 -0
  157. /package/{app → src}/css/components/surfaces.css +0 -0
  158. /package/{app → src}/css/components/tables.css +0 -0
  159. /package/{app → src}/css/components/typography.css +0 -0
  160. /package/{app → src}/css/components/utilities.css +0 -0
  161. /package/{app → src}/css/pages/agent-builder.css +0 -0
  162. /package/{app → src}/css/pages/assessment-results.css +0 -0
  163. /package/{app → src}/css/pages/detail.css +0 -0
  164. /package/{app → src}/css/pages/interview-builder.css +0 -0
  165. /package/{app → src}/css/pages/job-builder.css +0 -0
  166. /package/{app → src}/css/pages/landing.css +0 -0
  167. /package/{app → src}/css/pages/lifecycle.css +0 -0
  168. /package/{app → src}/css/pages/progress-builder.css +0 -0
  169. /package/{app → src}/css/pages/self-assessment.css +0 -0
  170. /package/{app → src}/css/reset.css +0 -0
  171. /package/{app → src}/css/tokens.css +0 -0
  172. /package/{app → src}/css/views/handout.css +0 -0
  173. /package/{app → src}/css/views/print.css +0 -0
  174. /package/{app → src}/css/views/slide-animations.css +0 -0
  175. /package/{app → src}/css/views/slide-base.css +0 -0
  176. /package/{app → src}/css/views/slide-sections.css +0 -0
  177. /package/{app → src}/css/views/slide-tables.css +0 -0
  178. /package/{app → src}/formatters/agent/dom.js +0 -0
  179. /package/{app → src}/formatters/agent/profile.js +0 -0
  180. /package/{app → src}/formatters/agent/skill.js +0 -0
  181. /package/{app → src}/formatters/behaviour/markdown.js +0 -0
  182. /package/{app → src}/formatters/behaviour/shared.js +0 -0
  183. /package/{app → src}/formatters/discipline/markdown.js +0 -0
  184. /package/{app → src}/formatters/discipline/shared.js +0 -0
  185. /package/{app → src}/formatters/driver/shared.js +0 -0
  186. /package/{app → src}/formatters/grade/shared.js +0 -0
  187. /package/{app → src}/formatters/index.js +0 -0
  188. /package/{app → src}/formatters/job/dom.js +0 -0
  189. /package/{app → src}/formatters/progress/dom.js +0 -0
  190. /package/{app → src}/formatters/progress/markdown.js +0 -0
  191. /package/{app → src}/formatters/questions/json.js +0 -0
  192. /package/{app → src}/formatters/questions/markdown.js +0 -0
  193. /package/{app → src}/formatters/questions/shared.js +0 -0
  194. /package/{app → src}/formatters/questions/yaml.js +0 -0
  195. /package/{app → src}/formatters/shared.js +0 -0
  196. /package/{app → src}/formatters/stage/dom.js +0 -0
  197. /package/{app → src}/formatters/stage/index.js +0 -0
  198. /package/{app → src}/formatters/stage/shared.js +0 -0
  199. /package/{app → src}/formatters/tool/shared.js +0 -0
  200. /package/{app → src}/lib/cli-output.js +0 -0
  201. /package/{app → src}/lib/error-boundary.js +0 -0
  202. /package/{app → src}/lib/errors.js +0 -0
  203. /package/{app → src}/lib/form-controls.js +0 -0
  204. /package/{app → src}/lib/markdown.js +0 -0
  205. /package/{app → src}/lib/radar.js +0 -0
  206. /package/{app → src}/lib/reactive.js +0 -0
  207. /package/{app → src}/lib/router-core.js +0 -0
  208. /package/{app → src}/lib/router-pages.js +0 -0
  209. /package/{app → src}/lib/router-slides.js +0 -0
  210. /package/{app → src}/lib/state.js +0 -0
  211. /package/{app → src}/lib/template-loader.js +0 -0
  212. /package/{app → src}/lib/utils.js +0 -0
  213. /package/{app → src}/lib/yaml-loader.js +0 -0
  214. /package/{app → src}/main.js +0 -0
  215. /package/{app → src}/pages/behaviour.js +0 -0
  216. /package/{app → src}/pages/discipline.js +0 -0
  217. /package/{app → src}/pages/driver.js +0 -0
  218. /package/{app → src}/pages/grade.js +0 -0
  219. /package/{app → src}/pages/interview-builder.js +0 -0
  220. /package/{app → src}/pages/progress-builder.js +0 -0
  221. /package/{app → src}/pages/progress.js +0 -0
  222. /package/{app → src}/pages/track.js +0 -0
  223. /package/{app → src}/slides/behaviour.js +0 -0
  224. /package/{app → src}/slides/chapter.js +0 -0
  225. /package/{app → src}/slides/discipline.js +0 -0
  226. /package/{app → src}/slides/driver.js +0 -0
  227. /package/{app → src}/slides/grade.js +0 -0
  228. /package/{app → src}/slides/interview.js +0 -0
  229. /package/{app → src}/slides/progress.js +0 -0
  230. /package/{app → src}/slides/skill.js +0 -0
  231. /package/{app → src}/slides/track.js +0 -0
  232. /package/{app → src}/types.js +0 -0
@@ -1,103 +0,0 @@
1
- /**
2
- * Checklist Derivation
3
- *
4
- * Checklists are derived from skills with agent.stages.{stage}.ready criteria.
5
- * Each skill defines its own readiness criteria for stage transitions.
6
- *
7
- * Checklist = Stage × Skill Matrix × Skill Ready Criteria
8
- */
9
-
10
- /**
11
- * Map from stage ID to the stage whose ready criteria should be shown
12
- * (i.e., what must be ready before leaving this stage)
13
- */
14
- const STAGE_TO_HANDOFF = {
15
- plan: "plan", // Show plan.ready before leaving plan
16
- code: "code", // Show code.ready before leaving code
17
- review: "review", // Show review.ready (completion criteria)
18
- };
19
-
20
- /**
21
- * Derive checklist items for a specific stage
22
- * Returns skills grouped by capability with their ready criteria
23
- *
24
- * @param {Object} params
25
- * @param {string} params.stageId - Current stage (plan, code, review)
26
- * @param {Array} params.skillMatrix - Derived skill matrix with skill details
27
- * @param {Array} params.skills - All skills (to look up agent.stages)
28
- * @param {Array} params.capabilities - All capabilities (for emoji lookup)
29
- * @returns {Array<{skill: Object, capability: Object, items: string[]}>} Checklist items grouped by skill
30
- */
31
- export function deriveChecklist({
32
- stageId,
33
- skillMatrix,
34
- skills,
35
- capabilities,
36
- }) {
37
- const targetStage = STAGE_TO_HANDOFF[stageId];
38
- if (!targetStage) {
39
- return [];
40
- }
41
-
42
- // Build skill lookup
43
- const skillById = new Map(skills.map((s) => [s.id, s]));
44
-
45
- // Build capability lookup
46
- const capabilityById = new Map(capabilities.map((c) => [c.id, c]));
47
-
48
- const result = [];
49
-
50
- for (const entry of skillMatrix) {
51
- const skill = skillById.get(entry.skillId);
52
- if (!skill || !skill.agent || !skill.agent.stages) {
53
- continue;
54
- }
55
-
56
- const stageData = skill.agent.stages[targetStage];
57
- if (!stageData || !stageData.ready || stageData.ready.length === 0) {
58
- continue;
59
- }
60
-
61
- // Get capability for this skill
62
- const capability = capabilityById.get(entry.capability);
63
- if (!capability) {
64
- continue;
65
- }
66
-
67
- result.push({
68
- skill: {
69
- id: skill.id,
70
- name: skill.name,
71
- },
72
- capability: {
73
- id: capability.id,
74
- name: capability.name,
75
- emojiIcon: capability.emojiIcon,
76
- },
77
- items: stageData.ready,
78
- });
79
- }
80
-
81
- return result;
82
- }
83
-
84
- /**
85
- * Format a checklist for display (markdown format)
86
- * Groups items by skill with capability emoji
87
- *
88
- * @param {Array<{skill: Object, capability: Object, items: string[]}>} checklist - Derived checklist
89
- * @returns {string} Markdown-formatted checklist
90
- */
91
- export function formatChecklistMarkdown(checklist) {
92
- if (!checklist || checklist.length === 0) {
93
- return "";
94
- }
95
-
96
- const sections = checklist.map(({ skill, capability, items }) => {
97
- const header = `**${capability.emojiIcon} ${skill.name}**`;
98
- const itemList = items.map((item) => `- [ ] ${item}`).join("\n");
99
- return `${header}\n\n${itemList}`;
100
- });
101
-
102
- return sections.join("\n\n");
103
- }