@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.
- package/README.md +2 -2
- package/bin/fit-outpost.js +3 -2
- package/package.json +6 -5
- package/src/agent-path.js +10 -6
- package/src/agent-runner.js +28 -24
- package/src/index.js +2 -3
- package/src/kb-manager.js +75 -20
- package/src/kb-validator.js +762 -0
- package/src/outpost.js +108 -39
- package/src/posture.js +3 -3
- package/src/privilege.js +11 -11
- package/src/scheduler.js +14 -12
- package/src/socket-server.js +19 -18
- package/src/spawn-env.js +7 -6
- package/src/state-manager.js +2 -2
- package/templates/.claude/agents/chief-of-staff.md +32 -24
- package/templates/.claude/agents/concierge.md +26 -17
- package/templates/.claude/agents/head-hunter.md +34 -26
- package/templates/.claude/agents/librarian.md +26 -18
- package/templates/.claude/agents/postman.md +26 -18
- package/templates/.claude/agents/recruiter.md +38 -27
- package/templates/.claude/skills/anarlog-follow/SKILL.md +91 -66
- package/templates/.claude/skills/anarlog-follow/references/coaching.md +22 -21
- package/templates/.claude/skills/anarlog-follow/references/sessions.md +52 -0
- package/templates/.claude/skills/anarlog-process/SKILL.md +108 -62
- package/templates/.claude/skills/anarlog-process/references/extraction.md +41 -29
- package/templates/.claude/skills/anarlog-process/references/sessions.md +92 -58
- package/templates/.claude/skills/anarlog-process/scripts/scan.mjs +402 -160
- package/templates/.claude/skills/candidate-report/SKILL.md +41 -36
- package/templates/.claude/skills/candidate-report/references/report-template.html +10 -10
- package/templates/.claude/skills/candidate-report/references/report.css +4 -4
- package/templates/.claude/skills/candidate-report/references/rubric.md +15 -14
- package/templates/.claude/skills/candidate-report/scripts/render-pdf.mjs +2 -2
- package/templates/.claude/skills/changelog/SKILL.md +122 -67
- package/templates/.claude/skills/deck-create/SKILL.md +90 -32
- package/templates/.claude/skills/deck-create/references/slide.css +4 -4
- package/templates/.claude/skills/deck-create/scripts/convert-to-pdf.mjs +6 -6
- package/templates/.claude/skills/deck-review/SKILL.md +63 -58
- package/templates/.claude/skills/deck-review/assets/slide-annotator.js +58 -49
- package/templates/.claude/skills/deck-summarize/SKILL.md +55 -45
- package/templates/.claude/skills/deck-summarize/references/brief-template.md +5 -4
- package/templates/.claude/skills/deck-summarize/scripts/extract-pptx.mjs +8 -7
- package/templates/.claude/skills/doc-collab/SKILL.md +39 -34
- package/templates/.claude/skills/doc-create/SKILL.md +27 -23
- package/templates/.claude/skills/doc-create/scripts/convert-to-pdf.mjs +6 -6
- package/templates/.claude/skills/draft-emails/SKILL.md +63 -53
- package/templates/.claude/skills/draft-emails/references/template.md +2 -2
- package/templates/.claude/skills/draft-emails/scripts/scan-emails.mjs +15 -8
- package/templates/.claude/skills/draft-emails/scripts/send-email.mjs +19 -11
- package/templates/.claude/skills/extract-entities/SKILL.md +76 -75
- package/templates/.claude/skills/extract-entities/references/TEMPLATES.md +6 -5
- package/templates/.claude/skills/extract-entities/references/conditions.md +20 -18
- package/templates/.claude/skills/extract-entities/references/content.md +10 -9
- package/templates/.claude/skills/extract-entities/references/links.md +37 -13
- package/templates/.claude/skills/extract-entities/references/recruitment.md +30 -24
- package/templates/.claude/skills/extract-entities/references/resolution.md +14 -14
- package/templates/.claude/skills/extract-entities/references/sources.md +9 -9
- package/templates/.claude/skills/extract-entities/references/templates-conditions.md +12 -6
- package/templates/.claude/skills/extract-entities/references/templates-people-orgs.md +29 -10
- package/templates/.claude/skills/extract-entities/references/templates-priorities.md +10 -4
- package/templates/.claude/skills/extract-entities/references/templates-projects-topics.md +19 -7
- package/templates/.claude/skills/extract-entities/scripts/state.mjs +9 -8
- package/templates/.claude/skills/meeting-prep/SKILL.md +42 -36
- package/templates/.claude/skills/organize-files/SKILL.md +27 -22
- package/templates/.claude/skills/organize-files/scripts/organize-by-type.mjs +5 -4
- package/templates/.claude/skills/organize-files/scripts/summarize.mjs +4 -4
- package/templates/.claude/skills/person-identify/SKILL.md +77 -27
- package/templates/.claude/skills/person-identify/scripts/identify.sh +125 -26
- package/templates/.claude/skills/person-lookup/SKILL.md +34 -30
- package/templates/.claude/skills/person-lookup/scripts/lookup.sh +46 -17
- package/templates/.claude/skills/req-assess/SKILL.md +44 -36
- package/templates/.claude/skills/req-assess/references/interview-template.md +7 -2
- package/templates/.claude/skills/req-assess/references/panel-template.md +7 -2
- package/templates/.claude/skills/req-assess/references/rubric.md +13 -13
- package/templates/.claude/skills/req-bundle/SKILL.md +164 -0
- package/templates/.claude/skills/req-bundle/references/matching.md +70 -0
- package/templates/.claude/skills/req-bundle/references/pdf-structure.md +74 -0
- package/templates/.claude/skills/req-bundle/scripts/split-bundle.mjs +377 -0
- package/templates/.claude/skills/req-decide/SKILL.md +52 -41
- package/templates/.claude/skills/req-decide/references/rubric.md +11 -10
- package/templates/.claude/skills/req-decide/references/template.md +2 -2
- package/templates/.claude/skills/req-forget/SKILL.md +58 -39
- package/templates/.claude/skills/req-forget/references/classify.md +15 -13
- package/templates/.claude/skills/req-forget/references/locations.md +27 -22
- package/templates/.claude/skills/req-forget/references/report-template.md +24 -16
- package/templates/.claude/skills/req-scan/SKILL.md +27 -25
- package/templates/.claude/skills/req-scan/references/fallbacks.md +9 -9
- package/templates/.claude/skills/req-scan/references/filters.md +13 -13
- package/templates/.claude/skills/req-scan/references/sources.md +7 -7
- package/templates/.claude/skills/req-scan/references/state.md +1 -1
- package/templates/.claude/skills/req-scan/references/template.md +11 -1
- package/templates/.claude/skills/req-scan/scripts/state.mjs +3 -2
- package/templates/.claude/skills/req-screen/SKILL.md +96 -50
- package/templates/.claude/skills/req-screen/references/rubric.md +46 -50
- package/templates/.claude/skills/req-screen/references/scoring.md +79 -0
- package/templates/.claude/skills/req-screen/references/template.md +29 -17
- package/templates/.claude/skills/req-track/SKILL.md +76 -76
- package/templates/.claude/skills/req-track/references/fields.md +31 -27
- package/templates/.claude/skills/req-track/references/overlays.md +42 -0
- package/templates/.claude/skills/req-track/references/signals.md +12 -12
- package/templates/.claude/skills/req-track/references/statuses.md +3 -2
- package/templates/.claude/skills/req-track/references/templates.md +28 -27
- package/templates/.claude/skills/req-workday/SKILL.md +69 -40
- package/templates/.claude/skills/req-workday/references/brief.md +81 -0
- package/templates/.claude/skills/req-workday/references/status-mapping.md +5 -5
- package/templates/.claude/skills/req-workday/references/templates.md +11 -78
- package/templates/.claude/skills/req-workday/references/xlsx-format.md +26 -7
- package/templates/.claude/skills/req-workday/scripts/parse-workday.mjs +113 -35
- package/templates/.claude/skills/send-chat/SKILL.md +58 -54
- package/templates/.claude/skills/sync-apple-calendar/SKILL.md +23 -19
- package/templates/.claude/skills/sync-apple-calendar/references/SCHEMA.md +7 -7
- package/templates/.claude/skills/sync-apple-calendar/scripts/query.mjs +6 -6
- package/templates/.claude/skills/sync-apple-calendar/scripts/sync.mjs +9 -8
- package/templates/.claude/skills/sync-apple-mail/SKILL.md +20 -14
- package/templates/.claude/skills/sync-apple-mail/references/SCHEMA.md +10 -10
- package/templates/.claude/skills/sync-apple-mail/scripts/parse-emlx.mjs +9 -9
- package/templates/.claude/skills/sync-apple-mail/scripts/sync-helpers.mjs +16 -13
- package/templates/.claude/skills/sync-apple-mail/scripts/sync.mjs +3 -3
- package/templates/.claude/skills/sync-teams/SKILL.md +46 -43
- package/templates/.claude/skills/sync-teams/scripts/idb-reader.mjs +22 -21
- package/templates/.claude/skills/sync-teams/scripts/leveldb-reader.mjs +4 -4
- package/templates/.claude/skills/sync-teams/scripts/sync.mjs +4 -4
- package/templates/.claude/skills/upstream-instructions/SKILL.md +43 -41
- package/templates/.claude/skills/upstream-instructions/references/examples.md +5 -5
- package/templates/CLAUDE.md +97 -85
- package/templates/MIGRATION.md +359 -0
- package/templates/registry.yaml +25 -0
- package/templates/.claude/skills/anarlog-follow/scripts/follow.mjs +0 -243
- 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
|
|
5
|
-
|
|
6
|
-
|
|
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
|
|
14
|
-
|
|
15
|
-
|
|
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
|
-
-
|
|
30
|
+
- The candidate has a `brief.md` in `2-Confidential/Candidates/{Name}/`.
|
|
29
31
|
|
|
30
32
|
## Inputs
|
|
31
33
|
|
|
32
|
-
- **Candidate name** — locates `
|
|
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
|
|
35
|
-
candidate's `Req` field → Role file. Ask the user
|
|
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
|
-
- `
|
|
42
|
-
- Optional PDF
|
|
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
|
-
- [ ]
|
|
47
|
-
- [ ]
|
|
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
|
-
- [ ]
|
|
51
|
-
- [ ]
|
|
52
|
-
- [ ]
|
|
53
|
-
- [ ]
|
|
54
|
-
`~/.cache/fit/outpost/state/identity.md
|
|
55
|
-
- [ ]
|
|
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
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
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
|
|
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}"
|
|
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
|
|
95
|
-
[references/rubric.md](references/rubric.md)
|
|
96
|
-
and colours, level-gauge window. Count
|
|
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`
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
13
|
-
tag
|
|
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
|
|
22
|
-
the report fits on a single page. If content overflows,
|
|
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
|
|
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
|
-
|
|
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.
|
|
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
|
|
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
|
|
5
|
-
*
|
|
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
|
-
*
|
|
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 —
|
|
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
|
-
#
|
|
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
|
|
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
|
|
18
|
-
below CV claims unless concrete, quantified
|
|
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
|
|
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
|
-
|
|
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
|
|
73
|
-
|
|
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)
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
9
|
-
|
|
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
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
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
|
|
20
|
-
- A session
|
|
21
|
-
|
|
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.
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
- `~/.cache/fit/outpost/state/identity.md` — the current user's identity.
|
|
30
|
-
**Name**
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
-
|
|
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
|
-
- `
|
|
39
|
-
|
|
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
|
-
|
|
44
|
-
rules: objective and factual, work-relevant, no personal judgments.
|
|
45
|
-
person a note is about will read its changelog entry. Describe
|
|
46
|
-
**what changed in the graph
|
|
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
|
-
- [ ]
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
- [ ]
|
|
55
|
-
|
|
56
|
-
- [ ]
|
|
57
|
-
|
|
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
|
|
67
|
-
cat "$HOME/.cache/fit/outpost/state/identity.md" # Name → the author
|
|
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
|
|
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
|
|
76
|
-
creations, edits, removals, renames. Group them by note
|
|
77
|
-
change landed, confirm it before
|
|
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
|
|
81
|
-
cat "
|
|
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
|
|
104
|
+
Optionally, surface anything you edited recently and might have missed:
|
|
85
105
|
|
|
86
106
|
```bash
|
|
87
|
-
find
|
|
107
|
+
find [0-9]-* -name '*.md' -newermt '-1 day' -not -path '*/.*'
|
|
88
108
|
```
|
|
89
109
|
|
|
90
|
-
Use `
|
|
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
|
-
|
|
102
|
-
backlinks
|
|
103
|
-
|
|
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 `
|
|
108
|
-
one heading per day
|
|
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
|
-
|
|
135
|
+
---
|
|
136
|
+
type: changelog
|
|
137
|
+
created: 2026-01-01
|
|
138
|
+
updated: 2026-01-01
|
|
139
|
+
---
|
|
140
|
+
|
|
141
|
+
# Team Changelog
|
|
112
142
|
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
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:
|
|
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
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
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
|
|
133
|
-
make or undo edits.
|
|
134
|
-
- One `
|
|
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.
|