@forwardimpact/outpost 3.12.0 → 3.13.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 (129) hide show
  1. package/README.md +2 -2
  2. package/bin/fit-outpost.js +3 -2
  3. package/package.json +6 -5
  4. package/src/agent-path.js +10 -6
  5. package/src/agent-runner.js +28 -24
  6. package/src/index.js +2 -3
  7. package/src/kb-manager.js +75 -20
  8. package/src/kb-validator.js +762 -0
  9. package/src/outpost.js +108 -39
  10. package/src/posture.js +3 -3
  11. package/src/privilege.js +11 -11
  12. package/src/scheduler.js +14 -12
  13. package/src/socket-server.js +19 -18
  14. package/src/spawn-env.js +7 -6
  15. package/src/state-manager.js +2 -2
  16. package/templates/.claude/agents/chief-of-staff.md +32 -24
  17. package/templates/.claude/agents/concierge.md +26 -17
  18. package/templates/.claude/agents/head-hunter.md +34 -26
  19. package/templates/.claude/agents/librarian.md +26 -18
  20. package/templates/.claude/agents/postman.md +26 -18
  21. package/templates/.claude/agents/recruiter.md +38 -27
  22. package/templates/.claude/skills/anarlog-follow/SKILL.md +91 -66
  23. package/templates/.claude/skills/anarlog-follow/references/coaching.md +22 -21
  24. package/templates/.claude/skills/anarlog-follow/references/sessions.md +52 -0
  25. package/templates/.claude/skills/anarlog-process/SKILL.md +108 -62
  26. package/templates/.claude/skills/anarlog-process/references/extraction.md +41 -29
  27. package/templates/.claude/skills/anarlog-process/references/sessions.md +92 -58
  28. package/templates/.claude/skills/anarlog-process/scripts/scan.mjs +402 -160
  29. package/templates/.claude/skills/candidate-report/SKILL.md +41 -36
  30. package/templates/.claude/skills/candidate-report/references/report-template.html +10 -10
  31. package/templates/.claude/skills/candidate-report/references/report.css +4 -4
  32. package/templates/.claude/skills/candidate-report/references/rubric.md +15 -14
  33. package/templates/.claude/skills/candidate-report/scripts/render-pdf.mjs +2 -2
  34. package/templates/.claude/skills/changelog/SKILL.md +122 -67
  35. package/templates/.claude/skills/deck-create/SKILL.md +90 -32
  36. package/templates/.claude/skills/deck-create/references/slide.css +4 -4
  37. package/templates/.claude/skills/deck-create/scripts/convert-to-pdf.mjs +6 -6
  38. package/templates/.claude/skills/deck-review/SKILL.md +63 -58
  39. package/templates/.claude/skills/deck-review/assets/slide-annotator.js +58 -49
  40. package/templates/.claude/skills/deck-summarize/SKILL.md +55 -45
  41. package/templates/.claude/skills/deck-summarize/references/brief-template.md +5 -4
  42. package/templates/.claude/skills/deck-summarize/scripts/extract-pptx.mjs +8 -7
  43. package/templates/.claude/skills/doc-collab/SKILL.md +39 -34
  44. package/templates/.claude/skills/doc-create/SKILL.md +27 -23
  45. package/templates/.claude/skills/doc-create/scripts/convert-to-pdf.mjs +6 -6
  46. package/templates/.claude/skills/draft-emails/SKILL.md +63 -53
  47. package/templates/.claude/skills/draft-emails/references/template.md +2 -2
  48. package/templates/.claude/skills/draft-emails/scripts/scan-emails.mjs +15 -8
  49. package/templates/.claude/skills/draft-emails/scripts/send-email.mjs +19 -11
  50. package/templates/.claude/skills/extract-entities/SKILL.md +76 -75
  51. package/templates/.claude/skills/extract-entities/references/TEMPLATES.md +6 -5
  52. package/templates/.claude/skills/extract-entities/references/conditions.md +20 -18
  53. package/templates/.claude/skills/extract-entities/references/content.md +10 -9
  54. package/templates/.claude/skills/extract-entities/references/links.md +37 -13
  55. package/templates/.claude/skills/extract-entities/references/recruitment.md +30 -24
  56. package/templates/.claude/skills/extract-entities/references/resolution.md +14 -14
  57. package/templates/.claude/skills/extract-entities/references/sources.md +9 -9
  58. package/templates/.claude/skills/extract-entities/references/templates-conditions.md +12 -6
  59. package/templates/.claude/skills/extract-entities/references/templates-people-orgs.md +29 -10
  60. package/templates/.claude/skills/extract-entities/references/templates-priorities.md +10 -4
  61. package/templates/.claude/skills/extract-entities/references/templates-projects-topics.md +19 -7
  62. package/templates/.claude/skills/extract-entities/scripts/state.mjs +9 -8
  63. package/templates/.claude/skills/meeting-prep/SKILL.md +42 -36
  64. package/templates/.claude/skills/organize-files/SKILL.md +27 -22
  65. package/templates/.claude/skills/organize-files/scripts/organize-by-type.mjs +5 -4
  66. package/templates/.claude/skills/organize-files/scripts/summarize.mjs +4 -4
  67. package/templates/.claude/skills/person-identify/SKILL.md +77 -27
  68. package/templates/.claude/skills/person-identify/scripts/identify.sh +125 -26
  69. package/templates/.claude/skills/person-lookup/SKILL.md +34 -30
  70. package/templates/.claude/skills/person-lookup/scripts/lookup.sh +46 -17
  71. package/templates/.claude/skills/req-assess/SKILL.md +44 -36
  72. package/templates/.claude/skills/req-assess/references/interview-template.md +7 -2
  73. package/templates/.claude/skills/req-assess/references/panel-template.md +7 -2
  74. package/templates/.claude/skills/req-assess/references/rubric.md +13 -13
  75. package/templates/.claude/skills/req-bundle/SKILL.md +164 -0
  76. package/templates/.claude/skills/req-bundle/references/matching.md +70 -0
  77. package/templates/.claude/skills/req-bundle/references/pdf-structure.md +74 -0
  78. package/templates/.claude/skills/req-bundle/scripts/split-bundle.mjs +377 -0
  79. package/templates/.claude/skills/req-decide/SKILL.md +52 -41
  80. package/templates/.claude/skills/req-decide/references/rubric.md +11 -10
  81. package/templates/.claude/skills/req-decide/references/template.md +2 -2
  82. package/templates/.claude/skills/req-forget/SKILL.md +58 -39
  83. package/templates/.claude/skills/req-forget/references/classify.md +15 -13
  84. package/templates/.claude/skills/req-forget/references/locations.md +27 -22
  85. package/templates/.claude/skills/req-forget/references/report-template.md +24 -16
  86. package/templates/.claude/skills/req-scan/SKILL.md +27 -25
  87. package/templates/.claude/skills/req-scan/references/fallbacks.md +9 -9
  88. package/templates/.claude/skills/req-scan/references/filters.md +13 -13
  89. package/templates/.claude/skills/req-scan/references/sources.md +7 -7
  90. package/templates/.claude/skills/req-scan/references/state.md +1 -1
  91. package/templates/.claude/skills/req-scan/references/template.md +11 -1
  92. package/templates/.claude/skills/req-scan/scripts/state.mjs +3 -2
  93. package/templates/.claude/skills/req-screen/SKILL.md +96 -50
  94. package/templates/.claude/skills/req-screen/references/rubric.md +46 -50
  95. package/templates/.claude/skills/req-screen/references/scoring.md +79 -0
  96. package/templates/.claude/skills/req-screen/references/template.md +29 -17
  97. package/templates/.claude/skills/req-track/SKILL.md +76 -76
  98. package/templates/.claude/skills/req-track/references/fields.md +31 -27
  99. package/templates/.claude/skills/req-track/references/overlays.md +42 -0
  100. package/templates/.claude/skills/req-track/references/signals.md +12 -12
  101. package/templates/.claude/skills/req-track/references/statuses.md +3 -2
  102. package/templates/.claude/skills/req-track/references/templates.md +28 -27
  103. package/templates/.claude/skills/req-workday/SKILL.md +69 -40
  104. package/templates/.claude/skills/req-workday/references/brief.md +81 -0
  105. package/templates/.claude/skills/req-workday/references/status-mapping.md +5 -5
  106. package/templates/.claude/skills/req-workday/references/templates.md +11 -78
  107. package/templates/.claude/skills/req-workday/references/xlsx-format.md +26 -7
  108. package/templates/.claude/skills/req-workday/scripts/parse-workday.mjs +113 -35
  109. package/templates/.claude/skills/send-chat/SKILL.md +58 -54
  110. package/templates/.claude/skills/sync-apple-calendar/SKILL.md +23 -19
  111. package/templates/.claude/skills/sync-apple-calendar/references/SCHEMA.md +7 -7
  112. package/templates/.claude/skills/sync-apple-calendar/scripts/query.mjs +6 -6
  113. package/templates/.claude/skills/sync-apple-calendar/scripts/sync.mjs +9 -8
  114. package/templates/.claude/skills/sync-apple-mail/SKILL.md +20 -14
  115. package/templates/.claude/skills/sync-apple-mail/references/SCHEMA.md +10 -10
  116. package/templates/.claude/skills/sync-apple-mail/scripts/parse-emlx.mjs +9 -9
  117. package/templates/.claude/skills/sync-apple-mail/scripts/sync-helpers.mjs +16 -13
  118. package/templates/.claude/skills/sync-apple-mail/scripts/sync.mjs +3 -3
  119. package/templates/.claude/skills/sync-teams/SKILL.md +46 -43
  120. package/templates/.claude/skills/sync-teams/scripts/idb-reader.mjs +22 -21
  121. package/templates/.claude/skills/sync-teams/scripts/leveldb-reader.mjs +4 -4
  122. package/templates/.claude/skills/sync-teams/scripts/sync.mjs +4 -4
  123. package/templates/.claude/skills/upstream-instructions/SKILL.md +43 -41
  124. package/templates/.claude/skills/upstream-instructions/references/examples.md +5 -5
  125. package/templates/CLAUDE.md +97 -85
  126. package/templates/MIGRATION.md +359 -0
  127. package/templates/registry.yaml +25 -0
  128. package/templates/.claude/skills/anarlog-follow/scripts/follow.mjs +0 -243
  129. package/templates/.claude/skills/anarlog-trim/SKILL.md +0 -183
@@ -1,18 +1,20 @@
1
1
  ---
2
2
  name: candidate-report
3
3
  description: >
4
- Generate an A4 single-page HTML candidate assessment report benchmarked
5
- against the agent-aligned engineering standard. Use when the user asks you
6
- to create a candidate report, one-pager, or visual assessment for a hiring
7
- manager.
4
+ Generate a single-page A4 HTML report that assesses a candidate against the
5
+ agent-aligned engineering standard. Use when the user asks you to create a
6
+ candidate report, one-pager, or visual assessment for a hiring manager.
8
7
  ---
9
8
 
10
9
  # Candidate Report
11
10
 
11
+ Write tier: `0-Draft` (the report is an export artifact)
12
+ Frontmatter: none
13
+
12
14
  Generate a polished, single-page A4 HTML report that benchmarks a candidate
13
- against a specific role in the agent-aligned engineering standard. The report is
14
- designed for hiring managers and pod leads who need a quick visual summary
15
- before deciding whether to invest interview time.
15
+ against a specific role in the agent-aligned engineering standard. The report
16
+ serves hiring managers and pod leads. They need a quick visual summary before
17
+ they decide whether to invest interview time.
16
18
 
17
19
  ## Trigger
18
20
 
@@ -25,34 +27,36 @@ before deciding whether to invest interview time.
25
27
  - `@forwardimpact/pathway` CLI installed (`bunx fit-pathway --help`).
26
28
  - Playwright for PDF output
27
29
  (`bun install playwright && bunx playwright install chromium`).
28
- - Candidate has a `brief.md` in `Knowledge/Candidates/{Name}/`.
30
+ - The candidate has a `brief.md` in `2-Confidential/Candidates/{Name}/`.
29
31
 
30
32
  ## Inputs
31
33
 
32
- - **Candidate name** — locates `Knowledge/Candidates/{Name}/brief.md`.
34
+ - **Candidate name** — locates `2-Confidential/Candidates/{Name}/brief.md`.
33
35
  - **Target role** — discipline, level, track (e.g.
34
- `software-engineering J070 forward-deployed`). If not given, infer from the
35
- candidate's `Req` field → Role file. Ask the user if it can't be inferred.
36
+ `software-engineering J070 forward-deployed`). If the user does not give it,
37
+ infer it from the candidate's `Req` field → Role file. Ask the user when you
38
+ cannot infer it.
36
39
  - **Recipient** — pod lead or hiring manager the report is for.
37
40
  - **CV file** (optional) — read directly when no `screening.md` exists.
38
41
 
39
42
  ## Outputs
40
43
 
41
- - `Drafts/{Recipient}-{CandidateSurname}-Report.html` — the A4 one-pager.
42
- - Optional PDF via `scripts/render-pdf.mjs`.
44
+ - `0-Draft/{Recipient}-{CandidateSurname}-Report.html` — the A4 one-pager.
45
+ - Optional PDF with `scripts/render-pdf.mjs`.
43
46
 
44
47
  <do_confirm_checklist goal="Verify the report before delivering it">
45
48
 
46
- - [ ] Standard data was loaded via `bunx fit-pathway job` (not guessed).
47
- - [ ] Every skill rating is evidence-based; two-level scepticism applied to CV
49
+ - [ ] Load the standard data with `bunx fit-pathway job`. Do not guess it.
50
+ - [ ] Base every skill rating on evidence. Apply two-level scepticism to the CV
48
51
  claims.
49
52
  - [ ] Coverage counters add up to the total skill count.
50
- - [ ] Verdict class matches the overall assessment.
51
- - [ ] Report fits on a single A4 page (browser print preview).
52
- - [ ] CSS is inlined in the `<style>` block.
53
- - [ ] Footer shows the author name and role from
54
- `~/.cache/fit/outpost/state/identity.md`.
55
- - [ ] Written as if the candidate will read it; no special-category data.
53
+ - [ ] Match the verdict class to the overall assessment.
54
+ - [ ] Fit the report on a single A4 page (browser print preview).
55
+ - [ ] Inline the CSS in the `<style>` block.
56
+ - [ ] Show the author name and role from
57
+ `~/.cache/fit/outpost/state/identity.md` in the footer.
58
+ - [ ] Write as if the candidate will read the report. Include no
59
+ special-category data.
56
60
 
57
61
  </do_confirm_checklist>
58
62
 
@@ -63,16 +67,17 @@ before deciding whether to invest interview time.
63
67
  Read whatever exists for the candidate:
64
68
 
65
69
  ```text
66
- Knowledge/Candidates/{Name}/brief.md # required
67
- Knowledge/Candidates/{Name}/screening.md # if produced by req-screen
68
- Knowledge/Candidates/{Name}/interview-*.md # if produced by req-assess
69
- Knowledge/Candidates/{Name}/CV.pdf|CV.md # raw CV if needed
70
+ 2-Confidential/Candidates/{Name}/brief.md # required
71
+ 2-Confidential/Candidates/{Name}/screening.md # if produced by req-screen
72
+ 2-Confidential/Candidates/{Name}/interview-*.md # if produced by req-assess
73
+ 2-Confidential/Candidates/{Name}/CV.pdf|CV.md # raw CV if needed
70
74
  ```
71
75
 
72
76
  If `screening.md` exists, treat its skill and behaviour ratings as the primary
73
- source they're already standard-calibrated. Otherwise map manually in Step 3.
77
+ source. They are already standard-calibrated. Otherwise map them manually in
78
+ Step 3.
74
79
 
75
- Search the graph for surrounding context: `rg "{Candidate Name}" Knowledge/`.
80
+ Search the graph for surrounding context: `rg "{Candidate Name}" [0-9]-*/`.
76
81
 
77
82
  ### 2. Load the standard benchmark
78
83
 
@@ -91,14 +96,14 @@ Group skills by capability area (Delivery, AI, Business, Docs, ML).
91
96
 
92
97
  ### 3. Benchmark the candidate
93
98
 
94
- Map evidence against each skill and behaviour using the rubric in
95
- [references/rubric.md](references/rubric.md): rating pills, behaviour bar widths
96
- and colours, level-gauge window. Count totals into Gap / Partial / Unknown / Met
97
- for the coverage counters.
99
+ Map the evidence against each skill and behaviour with the rubric in
100
+ [references/rubric.md](references/rubric.md). The rubric covers the rating
101
+ pills, the behaviour bar widths and colours, and the level-gauge window. Count
102
+ the totals into Gap / Partial / Unknown / Met for the coverage counters.
98
103
 
99
104
  ### 4. Determine verdict
100
105
 
101
- Pick one of `verdict-proceed`, `verdict-caution`, or `verdict-pass` using the
106
+ Pick one of `verdict-proceed`, `verdict-caution`, or `verdict-pass` with the
102
107
  verdict table in [references/rubric.md](references/rubric.md). Write a one-line
103
108
  headline and a short detail sentence.
104
109
 
@@ -106,10 +111,10 @@ headline and a short detail sentence.
106
111
 
107
112
  1. Read `references/report.css`.
108
113
  2. Read `references/report-template.html`.
109
- 3. Replace every `{{PLACEHOLDER}}` with candidate-specific data, populating the
114
+ 3. Replace every `{{PLACEHOLDER}}` with candidate-specific data. Populate the
110
115
  sections listed in
111
116
  [references/rubric.md](references/rubric.md#template-sections-to-populate).
112
- 4. Inline the CSS into the `<style>` block required for PDF rendering.
117
+ 4. Inline the CSS into the `<style>` block. The PDF output needs this.
113
118
 
114
119
  Respect the **A4 single-page budget** in
115
120
  [references/rubric.md](references/rubric.md#a4-single-page-budget). If the print
@@ -120,7 +125,7 @@ preview overflows, cut content.
120
125
  Save the completed HTML to:
121
126
 
122
127
  ```text
123
- Drafts/{Recipient}-{CandidateSurname}-Report.html
128
+ 0-Draft/{Recipient}-{CandidateSurname}-Report.html
124
129
  ```
125
130
 
126
131
  `{Recipient}` is the first name of the person the report is for.
@@ -136,5 +141,5 @@ node .claude/skills/candidate-report/scripts/render-pdf.mjs \
136
141
  ~/Desktop/{CandidateSurname}-Report.pdf
137
142
  ```
138
143
 
139
- Requires Playwright. If missing, ask the user to run
144
+ This step needs Playwright. If Playwright is missing, ask the user to run
140
145
  `bun install playwright && bunx playwright install chromium`.
@@ -9,8 +9,8 @@
9
9
  This is the structural skeleton for the A4 one-page candidate assessment.
10
10
  Replace all {{PLACEHOLDER}} tokens with candidate-specific data.
11
11
 
12
- The stylesheet is in references/report.css inline it here with a <style>
13
- tag (required for PDF rendering).
12
+ The stylesheet is in references/report.css. Inline it here with a <style>
13
+ tag. The PDF output needs it inline.
14
14
 
15
15
  LAYOUT BUDGET (fits 297mm A4 height):
16
16
  Header: ~60px
@@ -18,9 +18,9 @@
18
18
  Body: ~680px (6 sections at ~110px avg)
19
19
  Footer: ~28px
20
20
 
21
- When customising, test with Ctrl+P (print preview) in a browser to verify
22
- the report fits on a single page. If content overflows, reduce the number
23
- of benchmark skills shown or shorten the strengths list.
21
+ When you customise the template, test with Ctrl+P (print preview) in a
22
+ browser. Verify that the report fits on a single page. If content overflows,
23
+ reduce the number of benchmark skills shown or shorten the strengths list.
24
24
  -->
25
25
  <style>
26
26
  {{INLINE_CSS}}
@@ -59,7 +59,7 @@
59
59
  <dl class="snap">
60
60
  <!--
61
61
  Typical fields: Experience, Education, Source, Stack.
62
- Add/remove <dt>/<dd> pairs as needed for the candidate.
62
+ Add or remove <dt>/<dd> pairs to fit the candidate.
63
63
  -->
64
64
  {{SNAPSHOT_DL_ITEMS}}
65
65
  </dl>
@@ -115,8 +115,8 @@
115
115
 
116
116
  Group the framework's capability areas into 4 visual blocks.
117
117
  If there are 6 capability areas, combine the smallest two.
118
- Show only skills where evidence exists or the gap is notable
119
- aim for 4-6 rows per block to stay within A4 height.
118
+ Show only skills where evidence exists or the gap is notable.
119
+ Aim for 4-6 rows per block to stay within A4 height.
120
120
 
121
121
  Pill classes:
122
122
  p-g = Gap (red)
@@ -151,7 +151,7 @@
151
151
  <div class="stitle">Coverage Summary</div>
152
152
  <div class="counters">
153
153
  <!--
154
- Four counter boxes. Colours are fixed:
154
+ Four counter boxes. Use these fixed colours:
155
155
  Gap: background:#FEE2E2 text:#991B1B
156
156
  Partial: background:#FEF3C7 text:#92400E
157
157
  Unknown: background:var(--s100) text:var(--s500)
@@ -184,7 +184,7 @@
184
184
  <ol>
185
185
  <!--
186
186
  2-4 numbered action items. Each:
187
- <li><strong>Action.</strong> Detail explaining the step.</li>
187
+ <li><strong>Action.</strong> Detail that explains the step.</li>
188
188
  -->
189
189
  {{RECOMMENDATION_LI_ITEMS}}
190
190
  </ol>
@@ -1,11 +1,11 @@
1
1
  /*
2
2
  * candidate-report — A4 single-page candidate assessment report
3
3
  *
4
- * This stylesheet is designed for a 210mm × 297mm page.
5
- * It is loaded into the HTML template by the candidate-report skill.
4
+ * This stylesheet targets a 210mm × 297mm page.
5
+ * The candidate-report skill loads it into the HTML template.
6
6
  *
7
7
  * IMPORTANT: All colours must use print-color-adjust: exact so they survive
8
- * PDF rendering via Playwright. Avoid box-shadow and fixed positioning.
8
+ * when Playwright renders the PDF. Avoid box-shadow and fixed positioning.
9
9
  */
10
10
 
11
11
  @import url("https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800&display=swap");
@@ -107,7 +107,7 @@ body {
107
107
  color: var(--s600);
108
108
  }
109
109
 
110
- /* Verdict colour variants — set on the element via class */
110
+ /* Verdict colour variants — add one as a class on the element */
111
111
  .verdict-caution {
112
112
  background: #fef3c7;
113
113
  }
@@ -1,11 +1,11 @@
1
- # Benchmarking Rubric
1
+ # Benchmark Rubric
2
2
 
3
3
  Reference data for `candidate-report` Step 3 (benchmark) and Step 4 (verdict).
4
4
 
5
5
  ## Skill ratings
6
6
 
7
- Map each agent-aligned engineering standard skill against candidate evidence (CV
8
- or `screening.md`).
7
+ Map each skill in the agent-aligned engineering standard against the candidate
8
+ evidence (CV or `screening.md`).
9
9
 
10
10
  | Rating | Criteria | Pill class |
11
11
  | ----------- | -------------------------------------------------- | ---------- |
@@ -14,8 +14,9 @@ or `screening.md`).
14
14
  | **Gap** | No evidence, or clearly below expected | `p-g` |
15
15
  | **Unknown** | Cannot assess from available evidence | `p-u` |
16
16
 
17
- Apply the **two-level scepticism rule** from `req-screen`: default two levels
18
- below CV claims unless concrete, quantified evidence is provided.
17
+ Apply the **two-level scepticism rule** from `req-screen`. Default to two levels
18
+ below the CV claims, unless the candidate supplies concrete, quantified
19
+ evidence.
19
20
 
20
21
  ## Behaviour bar widths
21
22
 
@@ -38,17 +39,17 @@ candidate's estimate and the target level.
38
39
 
39
40
  Pick one verdict class for the report header.
40
41
 
41
- | Verdict | Class | When to use |
42
- | -------------------- | ----------------- | ------------------------------------------------------------------- |
43
- | Proceed | `verdict-proceed` | Candidate benchmarks at or above target level |
44
- | Proceed with Caution | `verdict-caution` | Mixed signals; viable for scoped role or needs interview to resolve |
45
- | Pass | `verdict-pass` | Clear misalignment with role requirements |
42
+ | Verdict | Class | When to use |
43
+ | -------------------- | ----------------- | ------------------------------------------------------------------------- |
44
+ | Proceed | `verdict-proceed` | Candidate benchmarks at or above target level |
45
+ | Proceed with Caution | `verdict-caution` | Mixed signals. Viable for a scoped role, or needs an interview to resolve |
46
+ | Pass | `verdict-pass` | Clear misalignment with role requirements |
46
47
 
47
48
  Write a one-line headline and a brief detail sentence.
48
49
 
49
50
  ## Template sections to populate
50
51
 
51
- Drives the placeholder substitution in Step 5.
52
+ Use this table to replace the placeholders in Step 5.
52
53
 
53
54
  | Section | Source |
54
55
  | ----------------- | ------------------------------------------------------------------ |
@@ -69,8 +70,8 @@ The report **must** fit on a single A4 page (210mm × 297mm):
69
70
 
70
71
  - Snapshot: max 6 `<dt>`/`<dd>` pairs.
71
72
  - Strengths: max 5 `<li>`, one sentence each.
72
- - Benchmark grid: 4–6 rows per capability area; prioritise notable
73
- gaps/strengths, omit "Unknown" rows when tight.
73
+ - Benchmark grid: 4–6 rows per capability area. Prioritise the notable gaps and
74
+ strengths. Omit "Unknown" rows when the space is tight.
74
75
  - Combine small capability areas (e.g. Docs + ML) into one block.
75
76
  - Recommendation: max 4 `<li>`.
76
- - Test with browser print preview (Ctrl+P); cut content if it overflows.
77
+ - Test with the browser print preview (Ctrl+P). Cut content if it overflows.
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env bun
2
2
  /**
3
- * Render a candidate report HTML file to A4 PDF using Playwright.
3
+ * Render a candidate-report HTML file to A4 PDF with Playwright.
4
4
  *
5
5
  * Usage: node scripts/render-pdf.mjs [input.html] [output.pdf]
6
6
  *
@@ -14,7 +14,7 @@
14
14
  import { resolve, join } from "node:path";
15
15
  import { homedir } from "node:os";
16
16
 
17
- const HELP = `render-pdf — render candidate report HTML to A4 PDF via Playwright
17
+ const HELP = `render-pdf — render candidate-report HTML to A4 PDF with Playwright
18
18
 
19
19
  Usage: node scripts/render-pdf.mjs [input.html] [output.pdf] [-h|--help]
20
20
 
@@ -1,60 +1,79 @@
1
1
  ---
2
2
  name: changelog
3
- description: Record the knowledge-graph changes made during the current session into a single shared Knowledge/CHANGELOG.md so the team can see what changed and why. Use when the user asks to log, record, or write up the changes they just made to the knowledge base typically at the end of a session of edits.
3
+ description: Record the knowledge-graph changes from the current session into one CHANGELOG.md per shared tier. The team can then see what changed and why. Use when the user asks to log, record, or write up the changes they just made to the knowledge base. This typically happens at the end of a session of edits.
4
4
  ---
5
5
 
6
6
  # Changelog
7
7
 
8
- Record the changes made to the **knowledge graph** (`Knowledge/`) during the
9
- current working session in one shared `Knowledge/CHANGELOG.md`, newest first, so
10
- teammates syncing the same filesystem can see what changed and why.
8
+ Write tier: each shared tier (rank 1 and up)
9
+ Frontmatter: changelog
11
10
 
12
- This tracks **graph content** notes under `Knowledge/People/`,
13
- `Organizations/`, `Projects/`, `Topics/`, `Candidates/`, `Priorities/`, and the
14
- other subdirectories. It does **not** track changes to instructions
15
- (`CLAUDE.md`, agents, skills) that is the `upstream-instructions` skill's job.
11
+ Record the changes to the **knowledge graph** (the tier directories) from the
12
+ current working session. Write them into one `CHANGELOG.md` per shared tier
13
+ (`<N>-<Label>/CHANGELOG.md`, ranks 1 and up), newest first. Teammates who
14
+ receive a tier can then see what changed in it and why.
15
+
16
+ The changelog is per tier because its audience is the tier's audience. An
17
+ entry never names a note in a narrower tier: a change to a tier-2 note goes
18
+ to `2-Confidential/CHANGELOG.md` only, never to `3-Team/CHANGELOG.md`.
19
+ `0-Draft/` keeps no changelog. Discover changelogs inside the tier
20
+ directories only.
21
+
22
+ This skill tracks **graph content**: the notes under each tier's entity
23
+ subdirectories (`People/`, `Organizations/`, `Projects/`, `Candidates/`, and
24
+ the rest). It does **not** track changes to instructions (`CLAUDE.md`,
25
+ agents, skills). The `upstream-instructions` skill owns those, and the root
26
+ instruction `CHANGELOG.md` is a personal surface this skill never touches.
16
27
 
17
28
  ## Trigger
18
29
 
19
- - The user asks to write, update, or record a changelog after editing the KB.
20
- - A session has added, modified, removed, or renamed notes in `Knowledge/` and
21
- the user wants those changes documented for the team.
30
+ - The user asks to write, update, or record a changelog after they edit the KB.
31
+ - A session added, modified, removed, or renamed notes in a shared tier. The
32
+ user wants a record of those changes for the team.
22
33
 
23
34
  ## Inputs
24
35
 
25
- - **The edits made in the current session** — the source of truth. The KB lives
26
- on a synced filesystem and is not version-controlled, so there is no commit
27
- history to diff. Recall every note created, edited, removed, or renamed under
28
- `Knowledge/` during this conversation.
29
- - `~/.cache/fit/outpost/state/identity.md` — the current user's identity. Its
30
- **Name** is the author recorded on each entry. The KB is shared, so every
31
- change must be attributed to the team member who made it. Resolve `~` to
32
- `$HOME` before reading.
33
- - `Knowledge/CHANGELOG.md` — the existing changelog, to see what's already
34
- recorded and avoid duplicates.
36
+ - **The edits made in the current session** — the source of truth. A tier may
37
+ sync over a mount with no version control, so never rely on commit history.
38
+ Recall every note that you created, edited, removed, or renamed in a shared
39
+ tier during this conversation.
40
+ - `~/.cache/fit/outpost/state/identity.md` — the current user's identity. Use
41
+ its **Name** as the author on each entry. The tiers are shared, so every entry
42
+ must name the team member who made the change. Resolve `~` to `$HOME` before
43
+ you read it.
44
+ - `<N>-<Label>/CHANGELOG.md` per shared tier — the existing changelogs. Read
45
+ them to see what is already recorded and to avoid duplicates.
35
46
 
36
47
  ## Outputs
37
48
 
38
- - `Knowledge/CHANGELOG.md` a **single** reverse-chronological changelog
39
- covering all graph subdirectories. No per-folder or per-note changelogs.
49
+ - One `CHANGELOG.md` per shared tier that had changes: a
50
+ reverse-chronological log that covers that tier's subdirectories. No
51
+ per-folder or per-note changelogs, and none in `0-Draft/`.
40
52
 
41
53
  ## Ethics
42
54
 
43
- `Knowledge/` is shared with the team. Every entry obeys the KB's integrity
44
- rules: objective and factual, work-relevant, no personal judgments. Assume the
45
- person a note is about will read its changelog entry. Describe
46
- **what changed in the graph**, not opinions about the people in it.
55
+ The team shares each tier with its own audience. Every entry obeys the KB's
56
+ integrity rules: objective and factual, work-relevant, no personal judgments.
57
+ Assume the person a note is about will read its changelog entry. Describe
58
+ **what changed in the graph**. Do not record opinions about the people in it.
47
59
 
48
60
  <do_confirm_checklist goal="Verify the changelog is accurate and shareable">
49
61
 
50
- - [ ] Exactly one `Knowledge/CHANGELOG.md`; no stray per-folder changelogs.
51
- - [ ] Every entry names its **Scope** — the specific note(s) or folder(s)
52
- touched, by full path.
53
- - [ ] Each entry has **Who** (author, from identity), **What**, and **Why**.
54
- - [ ] Descriptions are specific enough to be useful (not "updated some notes").
55
- - [ ] Dates are the date the change was actually made, not guessed.
56
- - [ ] No duplicate entries for a change already in the changelog.
57
- - [ ] Entries are factual and would be fine for the subject to read.
62
+ - [ ] Keep exactly one `CHANGELOG.md` per shared tier, at the tier root.
63
+ Leave no stray per-folder changelog and none in `0-Draft/`.
64
+ - [ ] Route every entry to the changelog of the tier that holds the changed
65
+ note. Never name a narrower tier's note in a wider tier's changelog.
66
+ - [ ] Write every entry as **one line**: type, **Scope** (tier-prefixed
67
+ paths), **Who**, and a short pointer. No `What:`/`Why:` blocks.
68
+ - [ ] Make the pointer specific enough to locate the change (never "updated
69
+ some notes").
70
+ - [ ] Use the real date of each change. Never guess a date.
71
+ - [ ] Add no duplicate entry for a change already in the changelog.
72
+ - [ ] Keep every entry factual and fit for the subject to read.
73
+ - [ ] Stamp the frontmatter core (`type: changelog`, `created`, `updated`) on
74
+ a changelog you create; stamp `updated` on one you edit.
75
+ - [ ] Keep each file short (see Step 5). Compact or drop old entries when it
76
+ grows.
58
77
 
59
78
  </do_confirm_checklist>
60
79
 
@@ -63,31 +82,33 @@ person a note is about will read its changelog entry. Describe
63
82
  ### 1. Find what's already recorded, and who you are
64
83
 
65
84
  ```bash
66
- head -30 Knowledge/CHANGELOG.md 2>/dev/null # newest date already logged, if any
67
- cat "$HOME/.cache/fit/outpost/state/identity.md" # Name → the author for this session's entries
85
+ head -30 3-Team/CHANGELOG.md 2>/dev/null # per tier you changed
86
+ cat "$HOME/.cache/fit/outpost/state/identity.md" # Name → the author
68
87
  ```
69
88
 
70
89
  If `identity.md` is missing or stale, run the `person-identify` skill to refresh
71
- it before logging don't guess the author.
90
+ it before you log the changes. Never guess the author.
72
91
 
73
92
  ### 2. Reconstruct this session's changes
74
93
 
75
- Recall every change made to `Knowledge/` during the current conversation:
76
- creations, edits, removals, renames. Group them by note. If you are unsure a
77
- change landed, confirm it before logging:
94
+ Recall every change you made to the shared tiers during the current
95
+ conversation: creations, edits, removals, and renames. Group them by note,
96
+ then by tier. If you are unsure that a change landed, confirm it before you
97
+ log it:
78
98
 
79
99
  ```bash
80
- rg --files Knowledge/ | rg "<note name>" # confirm a note exists
81
- cat "Knowledge/People/Doe, Jane.md" # confirm content landed
100
+ rg --files [0-9]-*/ | rg "<note name>" # confirm a note exists
101
+ cat "3-Team/People/Doe, Jane.md" # confirm content landed
82
102
  ```
83
103
 
84
- Optionally surface anything edited recently that you might have missed:
104
+ Optionally, surface anything you edited recently and might have missed:
85
105
 
86
106
  ```bash
87
- find Knowledge -name '*.md' -newermt '-1 day' -not -path '*/.*'
107
+ find [0-9]-* -name '*.md' -newermt '-1 day' -not -path '*/.*'
88
108
  ```
89
109
 
90
- Use `Knowledge/CHANGELOG.md` only to avoid duplicating an entry already there.
110
+ Use each tier's `CHANGELOG.md` only to avoid a duplicate of an entry already
111
+ there.
91
112
 
92
113
  ### 3. Classify each change
93
114
 
@@ -98,39 +119,73 @@ Use `Knowledge/CHANGELOG.md` only to avoid duplicating an entry already there.
98
119
  | `removed` | Note deleted |
99
120
  | `renamed` | Note renamed or moved |
100
121
 
101
- Related changes that form one logical edit (e.g. a new project note plus the
102
- backlinks added to the people it involves) are recorded as **one entry** whose
103
- Scope lists every note touched.
122
+ Some related changes form one logical edit. An example is a new project note
123
+ plus the backlinks to the people it involves. Record these as **one entry**
124
+ when they live in one tier. Changes that span tiers split into one entry per
125
+ tier, each naming only that tier's notes.
104
126
 
105
127
  ### 4. Write the changelog
106
128
 
107
- Create or update `Knowledge/CHANGELOG.md` (newest first). Group entries under
108
- one heading per day; one bullet per logical change:
129
+ Create or update the changed tiers' `CHANGELOG.md` files (newest first).
130
+ Group entries under one heading per day. Write one bullet per logical change.
131
+ A new changelog opens with the frontmatter core (`type: changelog`,
132
+ `created`, `updated`); an edited one gets a fresh `updated`.
109
133
 
110
134
  ```markdown
111
- # Knowledge Changelog
135
+ ---
136
+ type: changelog
137
+ created: 2026-01-01
138
+ updated: 2026-01-01
139
+ ---
140
+
141
+ # Team Changelog
112
142
 
113
- Changes to the shared knowledge graph, newest first. Maintained by hand at the
114
- end of editing sessions via the `changelog` skill. The KB is not
115
- version-controlled, so this is the record of what changed and why.
143
+ Terse, newest-first pointers to changes in this tier. This is a hint for
144
+ teammates who sync the same files, not a precious record. The `changelog`
145
+ skill maintains it, and compacts and drops old entries as the file grows.
116
146
 
117
147
  ## <YYYY-MM-DD>
118
148
 
119
- - **<added | modified | removed | renamed>** — _<Scope: full path(s)>_ · <Who>
120
- **What:** <one-line summary of the change.>
121
- **Why:** <the reason — the email, meeting, or request that prompted it.>
149
+ - **<added | modified | removed | renamed>** — _<Scope: tier-prefixed path(s)>_ · <Who> — <short pointer: what changed, and why only if it isn't obvious.>
122
150
  ```
123
151
 
124
- Use the real date the change was made (today's date is in context) and the
125
- **Name** from `identity.md` as `<Who>`. Because the file is shared, the author
126
- travels on each entry — not just the day's heading so a day with edits from
127
- more than one teammate stays unambiguous. Keep each entry to its What and Why
128
- this is a ledger, not a diff.
152
+ **Keep entries brief a pointer, not a summary.** One line each. State the
153
+ type, the scope (tier-prefixed paths), the author, and a short clause that
154
+ lets a teammate find the change and grasp its gist. Do **not** reproduce the
155
+ content of the edit. If someone needs the detail, they open the note.
156
+
157
+ Use the real date of the change (today's date is in context). Use the **Name**
158
+ from `identity.md` as `<Who>`. The team shares the file, so the author travels
159
+ on each entry.
160
+
161
+ Collapse related same-tier edits into one line. Several notes touched for one
162
+ purpose, or the same note created-then-reworked in a session, is a single
163
+ entry. Combine the types (e.g. `**added / renamed**`) and name the notes in
164
+ the scope.
165
+
166
+ ### 5. Compact each file when it grows
167
+
168
+ A changelog is a **disposable hint file, not an archive**. The notes
169
+ themselves are the record. Keep it short. After you add this session's
170
+ entries, compact the file in the same pass when it has grown large (rough
171
+ guide: **more than ~150 lines, or older than ~2 months of daily headings**):
172
+
173
+ - **Roll up old days.** Fold each day older than ~2 weeks into one or two
174
+ thematic lines per author.
175
+ - **Merge iterative churn.** Collapse a run of edits to the same file or
176
+ topic into a single line that describes the net result.
177
+ - **Drop the stale tail.** Delete day headings older than ~2–3 months
178
+ outright. The change already lives in the notes.
179
+
180
+ Be aggressive: losing granularity here costs nothing. Never rewrite an entry
181
+ to say something the edit did not do. Do not drop a *recent* change just to
182
+ save space.
129
183
 
130
184
  ## Notes
131
185
 
132
- - This skill **documents only** it records changes already made; it does not
133
- make or undo edits.
134
- - One `Knowledge/CHANGELOG.md` at the graph root, never per-folder.
186
+ - This skill **documents only**. It records changes you already made. It does
187
+ not make or undo edits.
188
+ - One `CHANGELOG.md` per shared tier, at the tier root, never per-folder.
135
189
  - For changes to instructions (`CLAUDE.md`, agents, skills), use
136
- `upstream-instructions` instead.
190
+ `upstream-instructions` instead; its root `CHANGELOG.md` is a separate
191
+ personal artifact.