@forwardimpact/pathway 0.18.0 → 0.20.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@forwardimpact/pathway",
3
- "version": "0.18.0",
3
+ "version": "0.20.0",
4
4
  "description": "Career progression web app and CLI for exploring roles and generating agent teams",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
@@ -41,7 +41,7 @@
41
41
  },
42
42
  "dependencies": {
43
43
  "@forwardimpact/schema": "^0.10.0",
44
- "@forwardimpact/model": "^1.2.0",
44
+ "@forwardimpact/libpathway": "^2.0.0",
45
45
  "mustache": "^4.2.0",
46
46
  "simple-icons": "^16.7.0",
47
47
  "yaml": "^2.3.4"
@@ -42,7 +42,7 @@ import {
42
42
  buildAgentIndex,
43
43
  getDisciplineAbbreviation,
44
44
  toKebabCase,
45
- } from "@forwardimpact/model";
45
+ } from "@forwardimpact/libpathway";
46
46
  import { formatAgentProfile } from "../formatters/agent/profile.js";
47
47
  import {
48
48
  formatAgentSkill,
@@ -42,7 +42,7 @@ function resolvePackageLib(packageName) {
42
42
  }
43
43
 
44
44
  const schemaLibDir = resolvePackageLib("@forwardimpact/schema");
45
- const modelLibDir = resolvePackageLib("@forwardimpact/model");
45
+ const modelLibDir = resolvePackageLib("@forwardimpact/libpathway");
46
46
 
47
47
  /**
48
48
  * Files and directories to copy from app/
@@ -141,7 +141,7 @@ ${framework.emojiIcon} Generating ${framework.title} static site...
141
141
  }
142
142
  }
143
143
 
144
- // Copy @forwardimpact/schema and @forwardimpact/model packages
144
+ // Copy @forwardimpact/schema and @forwardimpact/libpathway packages
145
145
  // These are needed by the browser's import map
146
146
  console.log("📚 Copying package dependencies...");
147
147
  await cp(schemaLibDir, join(outputDir, "schema/lib"), { recursive: true });
@@ -31,7 +31,7 @@ function resolvePackageLib(packageName) {
31
31
  }
32
32
 
33
33
  const schemaLibDir = resolvePackageLib("@forwardimpact/schema");
34
- const modelLibDir = resolvePackageLib("@forwardimpact/model");
34
+ const modelLibDir = resolvePackageLib("@forwardimpact/libpathway");
35
35
 
36
36
  const MIME_TYPES = {
37
37
  ".html": "text/html; charset=utf-8",
@@ -138,7 +138,7 @@ export async function runDevCommand({ dataDir, options }) {
138
138
  // Serve @forwardimpact/schema package files (resolved via Node module resolution)
139
139
  filePath = join(schemaLibDir, pathname.slice(12));
140
140
  } else if (pathname.startsWith("/model/lib/")) {
141
- // Serve @forwardimpact/model package files (resolved via Node module resolution)
141
+ // Serve @forwardimpact/libpathway package files (resolved via Node module resolution)
142
142
  filePath = join(modelLibDir, pathname.slice(11));
143
143
  } else if (pathname === "/" || pathname === "") {
144
144
  // Serve index.html for root
@@ -14,14 +14,14 @@
14
14
  * npx pathway job --validate # Validation checks
15
15
  */
16
16
 
17
- import { prepareJobDetail } from "@forwardimpact/model/job";
17
+ import { prepareJobDetail } from "@forwardimpact/libpathway/job";
18
18
  import { jobToMarkdown } from "../formatters/job/markdown.js";
19
- import { generateAllJobs } from "@forwardimpact/model/derivation";
19
+ import { generateAllJobs } from "@forwardimpact/libpathway/derivation";
20
20
  import { formatTable } from "../lib/cli-output.js";
21
21
  import {
22
22
  deriveChecklist,
23
23
  formatChecklistMarkdown,
24
- } from "@forwardimpact/model/checklist";
24
+ } from "@forwardimpact/libpathway/checklist";
25
25
  import { loadJobTemplate } from "../lib/template-loader.js";
26
26
  import { toolkitToPlainList } from "../formatters/toolkit/markdown.js";
27
27
 
@@ -16,7 +16,7 @@ import { skillToMarkdown } from "../formatters/skill/markdown.js";
16
16
  import { prepareSkillsList } from "../formatters/skill/shared.js";
17
17
  import { getConceptEmoji } from "@forwardimpact/schema/levels";
18
18
  import { formatTable, formatError } from "../lib/cli-output.js";
19
- import { generateSkillMarkdown } from "@forwardimpact/model/agent";
19
+ import { generateSkillMarkdown } from "@forwardimpact/libpathway/agent";
20
20
  import { formatAgentSkill } from "../formatters/agent/skill.js";
21
21
  import { loadSkillTemplate } from "../lib/template-loader.js";
22
22
 
@@ -13,7 +13,7 @@ import {
13
13
  getBehaviourMaturityIndex,
14
14
  formatLevel,
15
15
  } from "../lib/render.js";
16
- import { compareByCapability } from "@forwardimpact/model/policies";
16
+ import { compareByCapability } from "@forwardimpact/libpathway/policies";
17
17
 
18
18
  /**
19
19
  * Create a comparison skill radar chart
@@ -546,6 +546,15 @@
546
546
  padding-top: 3rem;
547
547
  }
548
548
 
549
+ /* Handout view: hide brand header — chapter covers provide branding */
550
+ .handout-view .page-brand-header {
551
+ display: none !important;
552
+ }
553
+
554
+ .handout-view main {
555
+ padding-top: 0;
556
+ }
557
+
549
558
  /* Chapter cover print styles */
550
559
  .chapter-cover {
551
560
  page-break-after: always;
@@ -556,6 +565,23 @@
556
565
  align-items: center;
557
566
  }
558
567
 
568
+ /* Handout view: page breaks between chapters and sections */
569
+ .handout-view .chapter-cover {
570
+ page-break-before: always;
571
+ page-break-after: auto;
572
+ }
573
+
574
+ .handout-view .detail-page {
575
+ page-break-before: always;
576
+ border-bottom: none;
577
+ margin-bottom: 0;
578
+ padding-bottom: 0;
579
+ }
580
+
581
+ .handout-view main > :first-child {
582
+ page-break-before: auto;
583
+ }
584
+
559
585
  /* Checklist print styles */
560
586
  .checklist-section {
561
587
  page-break-inside: avoid;
@@ -8,13 +8,13 @@ import {
8
8
  isValidJobCombination,
9
9
  generateJobTitle,
10
10
  getDisciplineSkillIds,
11
- } from "@forwardimpact/model/derivation";
11
+ } from "@forwardimpact/libpathway/derivation";
12
12
  import {
13
13
  deriveMissionFitInterview,
14
14
  deriveDecompositionInterview,
15
15
  deriveStakeholderInterview,
16
- } from "@forwardimpact/model/interview";
17
- import { getOrCreateJob } from "@forwardimpact/model/job-cache";
16
+ } from "@forwardimpact/libpathway/interview";
17
+ import { getOrCreateJob } from "@forwardimpact/libpathway/job-cache";
18
18
 
19
19
  /**
20
20
  * Interview type configurations
@@ -10,10 +10,7 @@
10
10
 
11
11
  import Mustache from "mustache";
12
12
 
13
- import {
14
- SKILL_LEVEL_ORDER,
15
- BEHAVIOUR_MATURITY_ORDER,
16
- } from "@forwardimpact/schema/levels";
13
+ import { BEHAVIOUR_MATURITY_ORDER } from "@forwardimpact/schema/levels";
17
14
  import { trimValue, trimFields } from "../shared.js";
18
15
 
19
16
  /**
@@ -84,43 +81,45 @@ function prepareJobDescriptionData({ job, discipline, grade, track }) {
84
81
  return indexB - indexA;
85
82
  });
86
83
 
87
- // Group skills by level
88
- const skillsByLevel = {};
89
- for (const skill of job.skillMatrix) {
90
- const level = skill.level || "Other";
91
- if (!skillsByLevel[level]) {
92
- skillsByLevel[level] = [];
93
- }
94
- skillsByLevel[level].push(skill);
95
- }
84
+ // Build capability skill sections at the highest skill level
85
+ let capabilitySkills = [];
86
+ const derivedResponsibilities = job.derivedResponsibilities || [];
87
+ if (derivedResponsibilities.length > 0) {
88
+ // derivedResponsibilities is sorted: highest level first, then by ordinalRank
89
+ const highestLevel = derivedResponsibilities[0].level;
96
90
 
97
- // Sort levels in reverse order (expert first, awareness last)
98
- const sortedLevels = Object.keys(skillsByLevel).sort((a, b) => {
99
- const indexA = SKILL_LEVEL_ORDER.indexOf(a.toLowerCase());
100
- const indexB = SKILL_LEVEL_ORDER.indexOf(b.toLowerCase());
101
- if (indexA === -1 && indexB === -1) return a.localeCompare(b);
102
- if (indexA === -1) return 1;
103
- if (indexB === -1) return -1;
104
- return indexB - indexA;
105
- });
91
+ // Filter responsibilities to only the highest level
92
+ const topResponsibilities = derivedResponsibilities.filter(
93
+ (r) => r.level === highestLevel,
94
+ );
106
95
 
107
- // Keep only the top 2 skill levels for job descriptions
108
- const topLevels = sortedLevels.slice(0, 2);
96
+ // Group skill matrix entries by capability at the highest level
97
+ const skillsByCapability = {};
98
+ for (const skill of job.skillMatrix) {
99
+ if (skill.level !== highestLevel) continue;
100
+ if (!skillsByCapability[skill.capability]) {
101
+ skillsByCapability[skill.capability] = [];
102
+ }
103
+ skillsByCapability[skill.capability].push(skill);
104
+ }
109
105
 
110
- // Build skill levels array for template
111
- const skillLevels = topLevels.map((level) => {
112
- const skills = skillsByLevel[level];
113
- const sortedSkills = [...skills].sort((a, b) =>
114
- (a.skillName || "").localeCompare(b.skillName || ""),
115
- );
116
- return {
117
- levelHeading: `${level.toUpperCase()}-LEVEL SKILLS`,
118
- skills: sortedSkills.map((s) => ({
119
- skillName: s.skillName,
120
- levelDescription: s.levelDescription || "",
121
- })),
122
- };
123
- });
106
+ // Build capability sections in ordinalRank order
107
+ capabilitySkills = topResponsibilities
108
+ .filter((r) => skillsByCapability[r.capability]?.length > 0)
109
+ .map((r) => {
110
+ const skills = [...skillsByCapability[r.capability]].sort((a, b) =>
111
+ (a.skillName || "").localeCompare(b.skillName || ""),
112
+ );
113
+ return {
114
+ capabilityHeading: r.capabilityName.toUpperCase(),
115
+ responsibilityDescription: r.responsibility,
116
+ skills: skills.map((s) => ({
117
+ skillName: s.skillName,
118
+ levelDescription: s.levelDescription || "",
119
+ })),
120
+ };
121
+ });
122
+ }
124
123
 
125
124
  // Build qualification summary with placeholder replacement
126
125
  const qualificationSummary =
@@ -129,9 +128,6 @@ function prepareJobDescriptionData({ job, discipline, grade, track }) {
129
128
  grade.typicalExperienceRange || "",
130
129
  ) || null;
131
130
 
132
- const responsibilities = trimFields(job.derivedResponsibilities, {
133
- responsibility: "required",
134
- });
135
131
  const behaviours = trimFields(sortedBehaviours, {
136
132
  maturityDescription: "optional",
137
133
  });
@@ -150,15 +146,14 @@ function prepareJobDescriptionData({ job, discipline, grade, track }) {
150
146
  hasTrackRoleContext: !!trimmedTrackRoleContext,
151
147
  expectationsParagraph: trimmedExpectationsParagraph,
152
148
  hasExpectationsParagraph: !!trimmedExpectationsParagraph,
153
- responsibilities,
154
- hasResponsibilities: responsibilities.length > 0,
155
149
  behaviours,
156
150
  hasBehaviours: behaviours.length > 0,
157
- skillLevels: skillLevels.map((level) => ({
158
- ...level,
159
- skills: trimFields(level.skills, { levelDescription: "optional" }),
151
+ capabilitySkills: capabilitySkills.map((cap) => ({
152
+ ...cap,
153
+ responsibilityDescription: trimValue(cap.responsibilityDescription),
154
+ skills: trimFields(cap.skills, { levelDescription: "optional" }),
160
155
  })),
161
- hasSkillLevels: skillLevels.length > 0,
156
+ hasCapabilitySkills: capabilitySkills.length > 0,
162
157
  qualificationSummary: trimmedQualificationSummary,
163
158
  hasQualificationSummary: !!trimmedQualificationSummary,
164
159
  };
@@ -7,13 +7,13 @@
7
7
  import {
8
8
  isValidJobCombination,
9
9
  generateJobTitle,
10
- } from "@forwardimpact/model/derivation";
10
+ } from "@forwardimpact/libpathway/derivation";
11
11
  import {
12
12
  analyzeProgression,
13
13
  analyzeCustomProgression,
14
14
  getNextGrade,
15
- } from "@forwardimpact/model/progression";
16
- import { getOrCreateJob } from "@forwardimpact/model/job-cache";
15
+ } from "@forwardimpact/libpathway/progression";
16
+ import { getOrCreateJob } from "@forwardimpact/libpathway/job-cache";
17
17
 
18
18
  /**
19
19
  * Get the next grade for progression
@@ -8,7 +8,7 @@ import {
8
8
  groupSkillsByCapability,
9
9
  getCapabilityEmoji,
10
10
  } from "@forwardimpact/schema/levels";
11
- import { getSkillTypeForDiscipline } from "@forwardimpact/model/derivation";
11
+ import { getSkillTypeForDiscipline } from "@forwardimpact/libpathway/derivation";
12
12
  import { truncate } from "../shared.js";
13
13
 
14
14
  /**
@@ -7,7 +7,7 @@
7
7
  import {
8
8
  isCapability,
9
9
  getSkillsByCapability,
10
- } from "@forwardimpact/model/modifiers";
10
+ } from "@forwardimpact/libpathway/modifiers";
11
11
  import { truncate } from "../shared.js";
12
12
 
13
13
  /**
package/src/handout.html CHANGED
@@ -13,19 +13,19 @@
13
13
  "@forwardimpact/schema/levels": "/schema/lib/levels.js",
14
14
  "@forwardimpact/schema/loader": "/schema/lib/loader.js",
15
15
  "@forwardimpact/schema/validation": "/schema/lib/validation.js",
16
- "@forwardimpact/model": "/model/lib/index.js",
17
- "@forwardimpact/model/derivation": "/model/lib/derivation.js",
18
- "@forwardimpact/model/modifiers": "/model/lib/modifiers.js",
19
- "@forwardimpact/model/agent": "/model/lib/agent.js",
20
- "@forwardimpact/model/interview": "/model/lib/interview.js",
21
- "@forwardimpact/model/job": "/model/lib/job.js",
22
- "@forwardimpact/model/job-cache": "/model/lib/job-cache.js",
23
- "@forwardimpact/model/checklist": "/model/lib/checklist.js",
24
- "@forwardimpact/model/matching": "/model/lib/matching.js",
25
- "@forwardimpact/model/profile": "/model/lib/profile.js",
26
- "@forwardimpact/model/progression": "/model/lib/progression.js",
27
- "@forwardimpact/model/policies": "/model/lib/policies/index.js",
28
- "@forwardimpact/model/toolkit": "/model/lib/toolkit.js"
16
+ "@forwardimpact/libpathway": "/model/lib/index.js",
17
+ "@forwardimpact/libpathway/derivation": "/model/lib/derivation.js",
18
+ "@forwardimpact/libpathway/modifiers": "/model/lib/modifiers.js",
19
+ "@forwardimpact/libpathway/agent": "/model/lib/agent.js",
20
+ "@forwardimpact/libpathway/interview": "/model/lib/interview.js",
21
+ "@forwardimpact/libpathway/job": "/model/lib/job.js",
22
+ "@forwardimpact/libpathway/job-cache": "/model/lib/job-cache.js",
23
+ "@forwardimpact/libpathway/checklist": "/model/lib/checklist.js",
24
+ "@forwardimpact/libpathway/matching": "/model/lib/matching.js",
25
+ "@forwardimpact/libpathway/profile": "/model/lib/profile.js",
26
+ "@forwardimpact/libpathway/progression": "/model/lib/progression.js",
27
+ "@forwardimpact/libpathway/policies": "/model/lib/policies/index.js",
28
+ "@forwardimpact/libpathway/toolkit": "/model/lib/toolkit.js"
29
29
  }
30
30
  }
31
31
  </script>
package/src/index.html CHANGED
@@ -25,19 +25,19 @@
25
25
  "@forwardimpact/schema/levels": "/schema/lib/levels.js",
26
26
  "@forwardimpact/schema/loader": "/schema/lib/loader.js",
27
27
  "@forwardimpact/schema/validation": "/schema/lib/validation.js",
28
- "@forwardimpact/model": "/model/lib/index.js",
29
- "@forwardimpact/model/derivation": "/model/lib/derivation.js",
30
- "@forwardimpact/model/modifiers": "/model/lib/modifiers.js",
31
- "@forwardimpact/model/agent": "/model/lib/agent.js",
32
- "@forwardimpact/model/interview": "/model/lib/interview.js",
33
- "@forwardimpact/model/job": "/model/lib/job.js",
34
- "@forwardimpact/model/job-cache": "/model/lib/job-cache.js",
35
- "@forwardimpact/model/checklist": "/model/lib/checklist.js",
36
- "@forwardimpact/model/matching": "/model/lib/matching.js",
37
- "@forwardimpact/model/profile": "/model/lib/profile.js",
38
- "@forwardimpact/model/progression": "/model/lib/progression.js",
39
- "@forwardimpact/model/policies": "/model/lib/policies/index.js",
40
- "@forwardimpact/model/toolkit": "/model/lib/toolkit.js"
28
+ "@forwardimpact/libpathway": "/model/lib/index.js",
29
+ "@forwardimpact/libpathway/derivation": "/model/lib/derivation.js",
30
+ "@forwardimpact/libpathway/modifiers": "/model/lib/modifiers.js",
31
+ "@forwardimpact/libpathway/agent": "/model/lib/agent.js",
32
+ "@forwardimpact/libpathway/interview": "/model/lib/interview.js",
33
+ "@forwardimpact/libpathway/job": "/model/lib/job.js",
34
+ "@forwardimpact/libpathway/job-cache": "/model/lib/job-cache.js",
35
+ "@forwardimpact/libpathway/checklist": "/model/lib/checklist.js",
36
+ "@forwardimpact/libpathway/matching": "/model/lib/matching.js",
37
+ "@forwardimpact/libpathway/profile": "/model/lib/profile.js",
38
+ "@forwardimpact/libpathway/progression": "/model/lib/progression.js",
39
+ "@forwardimpact/libpathway/policies": "/model/lib/policies/index.js",
40
+ "@forwardimpact/libpathway/toolkit": "/model/lib/toolkit.js"
41
41
  }
42
42
  }
43
43
  </script>
@@ -5,7 +5,7 @@
5
5
  * Provides consistent key generation and get-or-create pattern.
6
6
  */
7
7
 
8
- import { deriveJob } from "@forwardimpact/model/derivation";
8
+ import { deriveJob } from "@forwardimpact/libpathway/derivation";
9
9
 
10
10
  /** @type {Map<string, Object>} */
11
11
  const cache = new Map();
@@ -29,7 +29,7 @@ import {
29
29
  deriveReferenceGrade,
30
30
  deriveToolkit,
31
31
  buildAgentIndex,
32
- } from "@forwardimpact/model";
32
+ } from "@forwardimpact/libpathway";
33
33
  import {
34
34
  createSelectWithValue,
35
35
  createDisciplineSelect,
@@ -19,7 +19,7 @@ import { getState } from "../lib/state.js";
19
19
  import { createBadge } from "../components/card.js";
20
20
  import { formatLevel } from "../lib/render.js";
21
21
  import { getAssessmentState, resetAssessment } from "./self-assessment.js";
22
- import { findRealisticMatches } from "@forwardimpact/model/matching";
22
+ import { findRealisticMatches } from "@forwardimpact/libpathway/matching";
23
23
 
24
24
  /**
25
25
  * Render the assessment results page
@@ -5,7 +5,7 @@
5
5
  import { render } from "../lib/render.js";
6
6
  import { getState } from "../lib/state.js";
7
7
  import { createBuilder, createStandardPreview } from "../components/builder.js";
8
- import { prepareJobBuilderPreview } from "@forwardimpact/model/job";
8
+ import { prepareJobBuilderPreview } from "@forwardimpact/libpathway/job";
9
9
 
10
10
  /**
11
11
  * Render job builder page
package/src/pages/job.js CHANGED
@@ -5,7 +5,7 @@
5
5
  import { render, div, p } from "../lib/render.js";
6
6
  import { getState } from "../lib/state.js";
7
7
  import { renderError } from "../components/error-page.js";
8
- import { prepareJobDetail } from "@forwardimpact/model/job";
8
+ import { prepareJobDetail } from "@forwardimpact/libpathway/job";
9
9
  import { jobToDOM } from "../formatters/job/dom.js";
10
10
 
11
11
  /** @type {string|null} Cached job template */
@@ -14,7 +14,7 @@ import {
14
14
  getCapabilityEmoji,
15
15
  getConceptEmoji,
16
16
  } from "@forwardimpact/schema/levels";
17
- import { generateSkillMarkdown } from "@forwardimpact/model";
17
+ import { generateSkillMarkdown } from "@forwardimpact/libpathway";
18
18
  import { formatAgentSkill } from "../formatters/agent/skill.js";
19
19
 
20
20
  /** @type {string|null} Cached skill template */
package/src/slide-main.js CHANGED
@@ -8,7 +8,7 @@ import { createSlideRouter } from "./lib/router-slides.js";
8
8
  import { setData, getState } from "./lib/state.js";
9
9
  import { loadAllData } from "./lib/yaml-loader.js";
10
10
  import { span, a } from "./lib/render.js";
11
- import { generateAllJobs } from "@forwardimpact/model/derivation";
11
+ import { generateAllJobs } from "@forwardimpact/libpathway/derivation";
12
12
  import { sortTracksByName } from "./formatters/track/shared.js";
13
13
 
14
14
  // Import slide renderers
@@ -6,7 +6,7 @@
6
6
 
7
7
  import { div, heading1, heading2, p, a, ul, li, span } from "../lib/render.js";
8
8
  import { getConceptEmoji } from "@forwardimpact/schema/levels";
9
- import { generateAllJobs } from "@forwardimpact/model/derivation";
9
+ import { generateAllJobs } from "@forwardimpact/libpathway/derivation";
10
10
 
11
11
  /**
12
12
  * Render the slide index
package/src/slides/job.js CHANGED
@@ -5,7 +5,7 @@
5
5
  */
6
6
 
7
7
  import { div, h1, p } from "../lib/render.js";
8
- import { prepareJobDetail } from "@forwardimpact/model/job";
8
+ import { prepareJobDetail } from "@forwardimpact/libpathway/job";
9
9
  import { jobToDOM } from "../formatters/index.js";
10
10
 
11
11
  /**
@@ -22,7 +22,7 @@ import { prepareBehavioursList } from "../formatters/behaviour/shared.js";
22
22
  import { prepareDriversList } from "../formatters/driver/shared.js";
23
23
  import { prepareGradesList } from "../formatters/grade/shared.js";
24
24
  import { prepareTracksList } from "../formatters/track/shared.js";
25
- import { generateAllJobs } from "@forwardimpact/model/derivation";
25
+ import { generateAllJobs } from "@forwardimpact/libpathway/derivation";
26
26
 
27
27
  /**
28
28
  * Format discipline group name for display
package/src/slides.html CHANGED
@@ -13,19 +13,19 @@
13
13
  "@forwardimpact/schema/levels": "/schema/lib/levels.js",
14
14
  "@forwardimpact/schema/loader": "/schema/lib/loader.js",
15
15
  "@forwardimpact/schema/validation": "/schema/lib/validation.js",
16
- "@forwardimpact/model": "/model/lib/index.js",
17
- "@forwardimpact/model/derivation": "/model/lib/derivation.js",
18
- "@forwardimpact/model/modifiers": "/model/lib/modifiers.js",
19
- "@forwardimpact/model/agent": "/model/lib/agent.js",
20
- "@forwardimpact/model/interview": "/model/lib/interview.js",
21
- "@forwardimpact/model/job": "/model/lib/job.js",
22
- "@forwardimpact/model/job-cache": "/model/lib/job-cache.js",
23
- "@forwardimpact/model/checklist": "/model/lib/checklist.js",
24
- "@forwardimpact/model/matching": "/model/lib/matching.js",
25
- "@forwardimpact/model/profile": "/model/lib/profile.js",
26
- "@forwardimpact/model/progression": "/model/lib/progression.js",
27
- "@forwardimpact/model/policies": "/model/lib/policies/index.js",
28
- "@forwardimpact/model/toolkit": "/model/lib/toolkit.js"
16
+ "@forwardimpact/libpathway": "/model/lib/index.js",
17
+ "@forwardimpact/libpathway/derivation": "/model/lib/derivation.js",
18
+ "@forwardimpact/libpathway/modifiers": "/model/lib/modifiers.js",
19
+ "@forwardimpact/libpathway/agent": "/model/lib/agent.js",
20
+ "@forwardimpact/libpathway/interview": "/model/lib/interview.js",
21
+ "@forwardimpact/libpathway/job": "/model/lib/job.js",
22
+ "@forwardimpact/libpathway/job-cache": "/model/lib/job-cache.js",
23
+ "@forwardimpact/libpathway/checklist": "/model/lib/checklist.js",
24
+ "@forwardimpact/libpathway/matching": "/model/lib/matching.js",
25
+ "@forwardimpact/libpathway/profile": "/model/lib/profile.js",
26
+ "@forwardimpact/libpathway/progression": "/model/lib/progression.js",
27
+ "@forwardimpact/libpathway/policies": "/model/lib/policies/index.js",
28
+ "@forwardimpact/libpathway/toolkit": "/model/lib/toolkit.js"
29
29
  }
30
30
  }
31
31
  </script>
@@ -16,14 +16,6 @@
16
16
 
17
17
  {{{expectationsParagraph}}}
18
18
  {{/hasExpectationsParagraph}}
19
- {{#hasResponsibilities}}
20
-
21
- ## ROLE RESPONSIBILITIES
22
-
23
- {{#responsibilities}}
24
- - **{{{capabilityName}}}:** {{{responsibility}}}
25
- {{/responsibilities}}
26
- {{/hasResponsibilities}}
27
19
  {{#hasBehaviours}}
28
20
 
29
21
  ## ROLE BEHAVIOURS
@@ -32,16 +24,20 @@
32
24
  - **{{{behaviourName}}}:** {{{maturityDescription}}}
33
25
  {{/behaviours}}
34
26
  {{/hasBehaviours}}
35
- {{#hasSkillLevels}}
36
- {{#skillLevels}}
27
+ {{#hasCapabilitySkills}}
28
+
29
+ ## ROLE RESPONSIBILITIES
30
+ {{#capabilitySkills}}
31
+
32
+ ### {{{capabilityHeading}}}
37
33
 
38
- ## {{{levelHeading}}}
34
+ {{{responsibilityDescription}}}:
39
35
 
40
36
  {{#skills}}
41
37
  - **{{{skillName}}}:** {{{levelDescription}}}
42
38
  {{/skills}}
43
- {{/skillLevels}}
44
- {{/hasSkillLevels}}
39
+ {{/capabilitySkills}}
40
+ {{/hasCapabilitySkills}}
45
41
  {{#hasQualificationSummary}}
46
42
 
47
43
  ## QUALIFICATIONS