knowme-careerforge-skill 0.0.2 → 0.0.6

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 (127) hide show
  1. package/AGENT.md +276 -0
  2. package/ARCHITECTURE.md +216 -0
  3. package/README.md +34 -54
  4. package/README.zh-CN.md +35 -57
  5. package/SKILL.md +28 -137
  6. package/agents/claude/knowme-careerforge.md +2 -16
  7. package/agents/codex/knowme-careerforge.yaml +5 -7
  8. package/agents/cursor/knowme-careerforge.mdc +4 -9
  9. package/agents/opencode/skill.yaml +1 -1
  10. package/agents/windsurf/knowme-careerforge.rules +2 -12
  11. package/dist/cli/src/commands/init.js +9 -0
  12. package/dist/cli/src/index.js +40 -19
  13. package/dist/scripts/rendering/engine-loader.d.ts +2 -0
  14. package/dist/scripts/rendering/engine-loader.js +46 -0
  15. package/dist/scripts/rendering/render-pdf.d.ts +3 -8
  16. package/dist/scripts/rendering/render-pdf.js +7 -103
  17. package/dist/scripts/rendering/runtime.d.ts +9 -0
  18. package/dist/scripts/rendering/runtime.js +63 -0
  19. package/dist/scripts/validation/validate-ats.d.ts +2 -22
  20. package/dist/scripts/validation/validate-ats.js +6 -168
  21. package/dist/scripts/validation/validate-layout.d.ts +2 -23
  22. package/dist/scripts/validation/validate-layout.js +5 -159
  23. package/package.json +16 -4
  24. package/references/01-evidence-mining.md +5 -0
  25. package/references/02-career-goal.md +38 -0
  26. package/references/03-jd-analysis.md +44 -0
  27. package/references/04-template-selection.md +43 -0
  28. package/references/05-html-canvas-tokens.md +12 -0
  29. package/references/06-qa-and-rendering.md +14 -0
  30. package/references/07-artifact-contract.md +64 -0
  31. package/scripts/Agent.md +9 -136
  32. package/scripts/build/build-gallery.py +66 -56
  33. package/scripts/build/run-all-tests.py +1 -0
  34. package/scripts/build/sync-version.py +37 -10
  35. package/scripts/contracts/profile.py +101 -0
  36. package/scripts/evidence/extract-evidence.py +109 -62
  37. package/scripts/pipeline/forge.py +266 -136
  38. package/scripts/rendering/README.md +65 -0
  39. package/scripts/rendering/browser-engine.d.ts +15 -0
  40. package/scripts/rendering/browser-engine.js +366 -0
  41. package/scripts/rendering/browser_engine.py +39 -0
  42. package/scripts/rendering/engine-loader.ts +11 -0
  43. package/scripts/rendering/render-pdf.py +26 -151
  44. package/scripts/rendering/render-pdf.ts +7 -83
  45. package/scripts/template/instantiate-resume.py +266 -167
  46. package/scripts/template/search-template.py +367 -89
  47. package/scripts/validation/measure-dom.js +5 -0
  48. package/scripts/validation/validate-ats.ts +6 -174
  49. package/scripts/validation/validate-layout.ts +5 -159
  50. package/scripts/validation/validate-resume.py +23 -134
  51. package/skill.json +1 -1
  52. package/src/knowledge/index.json +390 -10
  53. package/src/knowledge/resume-schema.json +377 -71
  54. package/src/knowledge/templates.json +388 -8
  55. package/src/references/01-evidence-mining.md +5 -0
  56. package/src/references/02-career-goal.md +38 -0
  57. package/src/references/03-jd-analysis.md +44 -0
  58. package/src/references/04-template-selection.md +43 -0
  59. package/src/references/05-html-canvas-tokens.md +12 -0
  60. package/src/references/06-qa-and-rendering.md +14 -0
  61. package/src/references/07-artifact-contract.md +64 -0
  62. package/src/templates/Agent.md +11 -0
  63. package/src/templates/academic-research/README.md +25 -0
  64. package/src/templates/academic-research/canvas.html +21 -0
  65. package/src/templates/academic-research/metadata.json +38 -0
  66. package/src/templates/academic-research/sample-profile.json +86 -0
  67. package/src/templates/academic-research/style.css +213 -0
  68. package/src/templates/classic/README.md +9 -0
  69. package/src/templates/classic/canvas.html +21 -0
  70. package/src/templates/classic/metadata.json +3 -0
  71. package/src/templates/classic/sample-profile.json +86 -0
  72. package/src/templates/classic/style.css +35 -54
  73. package/src/templates/common/base.css +182 -0
  74. package/src/templates/common/canvas-bindings.css +41 -0
  75. package/src/templates/common/resume-contract.md +8 -0
  76. package/src/templates/compact-dense/README.md +25 -0
  77. package/src/templates/compact-dense/canvas.html +14 -0
  78. package/src/templates/compact-dense/metadata.json +38 -0
  79. package/src/templates/compact-dense/sample-profile.json +86 -0
  80. package/src/templates/compact-dense/style.css +218 -0
  81. package/src/templates/creative-tech/README.md +26 -0
  82. package/src/templates/creative-tech/canvas.html +15 -0
  83. package/src/templates/creative-tech/metadata.json +39 -0
  84. package/src/templates/creative-tech/sample-profile.json +86 -0
  85. package/src/templates/creative-tech/style.css +257 -0
  86. package/src/templates/data-analyst/README.md +26 -0
  87. package/src/templates/data-analyst/canvas.html +15 -0
  88. package/src/templates/data-analyst/metadata.json +39 -0
  89. package/src/templates/data-analyst/sample-profile.json +86 -0
  90. package/src/templates/data-analyst/style.css +285 -0
  91. package/src/templates/executive/README.md +9 -0
  92. package/src/templates/executive/canvas.html +15 -0
  93. package/src/templates/executive/sample-profile.json +86 -0
  94. package/src/templates/executive/style.css +83 -74
  95. package/src/templates/international-flow/README.md +26 -0
  96. package/src/templates/international-flow/canvas.html +21 -0
  97. package/src/templates/international-flow/metadata.json +37 -0
  98. package/src/templates/international-flow/sample-profile.json +86 -0
  99. package/src/templates/international-flow/style.css +208 -0
  100. package/src/templates/minimal/README.md +9 -0
  101. package/src/templates/minimal/canvas.html +21 -0
  102. package/src/templates/minimal/sample-profile.json +86 -0
  103. package/src/templates/minimal/style.css +54 -72
  104. package/src/templates/modern/README.md +9 -0
  105. package/src/templates/modern/canvas.html +15 -0
  106. package/src/templates/modern/sample-profile.json +86 -0
  107. package/src/templates/modern/style.css +78 -71
  108. package/src/templates/startup-generalist/README.md +25 -0
  109. package/src/templates/startup-generalist/canvas.html +21 -0
  110. package/src/templates/startup-generalist/metadata.json +37 -0
  111. package/src/templates/startup-generalist/sample-profile.json +86 -0
  112. package/src/templates/startup-generalist/style.css +237 -0
  113. package/src/references/ats.md +0 -17
  114. package/src/references/evidence-first.md +0 -22
  115. package/src/references/pdf.md +0 -40
  116. package/src/references/resume-writing.md +0 -25
  117. package/src/references/template-design.md +0 -57
  118. package/src/templates/classic/template.html +0 -133
  119. package/src/templates/executive/template.html +0 -101
  120. package/src/templates/minimal/template.html +0 -114
  121. package/src/templates/modern/template.html +0 -139
  122. package/src/workflows/analyze-job.md +0 -16
  123. package/src/workflows/define-goal.md +0 -16
  124. package/src/workflows/forge-resume.md +0 -25
  125. package/src/workflows/know-me.md +0 -21
  126. package/src/workflows/position.md +0 -19
  127. package/src/workflows/review.md +0 -31
@@ -1,5 +1,68 @@
1
1
  {
2
2
  "templates": [
3
+ {
4
+ "id": "academic-research",
5
+ "name": "Academic Research Flow",
6
+ "version": "1.0.0",
7
+ "style": "single-column-academic",
8
+ "roleCategory": "research-algorithm",
9
+ "layout": {
10
+ "type": "single-column",
11
+ "targetPages": 1,
12
+ "maxPages": 2,
13
+ "density": "ultra"
14
+ },
15
+ "visualStyle": {
16
+ "tone": "oxford-navy",
17
+ "accentColor": "#1e3a8a",
18
+ "fontFamily": "System Sans-Serif"
19
+ },
20
+ "atsScoreTier": "tier-1-optimal",
21
+ "supportedRoles": [
22
+ "ai-agent-engineer",
23
+ "algorithm-engineer",
24
+ "research-scientist",
25
+ "data-scientist",
26
+ "nlp-engineer",
27
+ "cv-engineer",
28
+ "phd-candidate",
29
+ "postdoc"
30
+ ],
31
+ "languages": [
32
+ "zh-CN",
33
+ "en-US"
34
+ ],
35
+ "customizableTokens": [
36
+ "--resume-font-size-body",
37
+ "--resume-line-height-body",
38
+ "--resume-space-section",
39
+ "--resume-space-item",
40
+ "--resume-space-bullet",
41
+ "--resume-color-accent"
42
+ ],
43
+ "directory": "src/templates/academic-research",
44
+ "detectedTokens": [
45
+ "--resume-color-accent",
46
+ "--resume-color-accent-bg",
47
+ "--resume-color-border",
48
+ "--resume-color-muted",
49
+ "--resume-color-primary",
50
+ "--resume-color-secondary",
51
+ "--resume-color-tag-bg",
52
+ "--resume-font-body",
53
+ "--resume-font-size-body",
54
+ "--resume-font-size-h2",
55
+ "--resume-font-size-meta",
56
+ "--resume-font-size-name",
57
+ "--resume-font-size-target",
58
+ "--resume-line-height-body",
59
+ "--resume-page-padding",
60
+ "--resume-space-bullet",
61
+ "--resume-space-header-bottom",
62
+ "--resume-space-item",
63
+ "--resume-space-section"
64
+ ]
65
+ },
3
66
  {
4
67
  "id": "classic",
5
68
  "name": "Table Structured Modern",
@@ -33,6 +96,9 @@
33
96
  "customizableTokens": [
34
97
  "--resume-font-size-body",
35
98
  "--resume-cell-padding",
99
+ "--resume-space-section",
100
+ "--resume-space-item",
101
+ "--resume-space-bullet",
36
102
  "--resume-color-accent",
37
103
  "--resume-color-label-bg"
38
104
  ],
@@ -51,9 +117,203 @@
51
117
  "--resume-font-size-meta",
52
118
  "--resume-font-size-title",
53
119
  "--resume-line-height-body",
54
- "--resume-page-min-height",
55
120
  "--resume-page-padding",
56
- "--resume-page-width"
121
+ "--resume-space-bullet",
122
+ "--resume-space-item",
123
+ "--resume-space-section"
124
+ ]
125
+ },
126
+ {
127
+ "id": "compact-dense",
128
+ "name": "Compact Dense Grid",
129
+ "version": "1.0.0",
130
+ "style": "two-column-dense",
131
+ "roleCategory": "engineering-senior",
132
+ "layout": {
133
+ "type": "two-column-dense",
134
+ "targetPages": 1,
135
+ "maxPages": 1,
136
+ "density": "ultra"
137
+ },
138
+ "visualStyle": {
139
+ "tone": "steel-blue",
140
+ "accentColor": "#0369a1",
141
+ "fontFamily": "System Sans-Serif"
142
+ },
143
+ "atsScoreTier": "tier-1-optimal",
144
+ "supportedRoles": [
145
+ "architect",
146
+ "backend",
147
+ "frontend",
148
+ "fullstack",
149
+ "cpp-systems",
150
+ "java-backend",
151
+ "devops",
152
+ "tech-lead"
153
+ ],
154
+ "languages": [
155
+ "zh-CN",
156
+ "en-US"
157
+ ],
158
+ "customizableTokens": [
159
+ "--resume-font-size-body",
160
+ "--resume-line-height-body",
161
+ "--resume-space-section",
162
+ "--resume-space-item",
163
+ "--resume-space-bullet",
164
+ "--resume-color-accent"
165
+ ],
166
+ "directory": "src/templates/compact-dense",
167
+ "detectedTokens": [
168
+ "--resume-color-accent",
169
+ "--resume-color-accent-bg",
170
+ "--resume-color-border",
171
+ "--resume-color-muted",
172
+ "--resume-color-primary",
173
+ "--resume-color-secondary",
174
+ "--resume-color-tag-bg",
175
+ "--resume-font-body",
176
+ "--resume-font-size-body",
177
+ "--resume-font-size-h2",
178
+ "--resume-font-size-meta",
179
+ "--resume-font-size-name",
180
+ "--resume-font-size-target",
181
+ "--resume-line-height-body",
182
+ "--resume-page-padding",
183
+ "--resume-space-bullet",
184
+ "--resume-space-header-bottom",
185
+ "--resume-space-item",
186
+ "--resume-space-section"
187
+ ]
188
+ },
189
+ {
190
+ "id": "creative-tech",
191
+ "name": "Creative Tech Split",
192
+ "version": "1.0.0",
193
+ "style": "two-column-split",
194
+ "roleCategory": "frontend-creative",
195
+ "layout": {
196
+ "type": "two-column-sidebar",
197
+ "targetPages": 1,
198
+ "maxPages": 1,
199
+ "sidebarRatio": "28:72",
200
+ "density": "balanced"
201
+ },
202
+ "visualStyle": {
203
+ "tone": "tech-violet",
204
+ "accentColor": "#7c3aed",
205
+ "sidebarBg": "#faf5ff",
206
+ "fontFamily": "System Sans-Serif"
207
+ },
208
+ "atsScoreTier": "tier-1-optimal",
209
+ "supportedRoles": [
210
+ "frontend",
211
+ "ui-ux-engineer",
212
+ "creative-technologist",
213
+ "web-architect",
214
+ "design-system-engineer",
215
+ "node-fullstack"
216
+ ],
217
+ "languages": [
218
+ "zh-CN",
219
+ "en-US"
220
+ ],
221
+ "customizableTokens": [
222
+ "--resume-font-size-body",
223
+ "--resume-line-height-body",
224
+ "--resume-space-section",
225
+ "--resume-space-item",
226
+ "--resume-space-bullet",
227
+ "--resume-sidebar-width",
228
+ "--resume-color-accent"
229
+ ],
230
+ "directory": "src/templates/creative-tech",
231
+ "detectedTokens": [
232
+ "--resume-color-accent",
233
+ "--resume-color-accent-light",
234
+ "--resume-color-border",
235
+ "--resume-color-indigo",
236
+ "--resume-color-muted",
237
+ "--resume-color-primary",
238
+ "--resume-color-secondary",
239
+ "--resume-color-sidebar-bg",
240
+ "--resume-color-sidebar-border",
241
+ "--resume-font-body",
242
+ "--resume-font-size-body",
243
+ "--resume-font-size-h2",
244
+ "--resume-font-size-meta",
245
+ "--resume-font-size-name",
246
+ "--resume-font-size-target",
247
+ "--resume-line-height-body",
248
+ "--resume-sidebar-width",
249
+ "--resume-space-bullet",
250
+ "--resume-space-item",
251
+ "--resume-space-section"
252
+ ]
253
+ },
254
+ {
255
+ "id": "data-analyst",
256
+ "name": "Data Analyst Metric Stream",
257
+ "version": "1.0.0",
258
+ "style": "two-column-metrics",
259
+ "roleCategory": "data-analytics",
260
+ "layout": {
261
+ "type": "two-column-sidebar",
262
+ "targetPages": 1,
263
+ "maxPages": 1,
264
+ "sidebarRatio": "30:70",
265
+ "density": "high"
266
+ },
267
+ "visualStyle": {
268
+ "tone": "amber-cyan",
269
+ "accentColor": "#0891b2",
270
+ "sidebarBg": "#f0fdfa",
271
+ "fontFamily": "System Sans-Serif"
272
+ },
273
+ "atsScoreTier": "tier-1-optimal",
274
+ "supportedRoles": [
275
+ "data-analyst",
276
+ "data-scientist",
277
+ "bi-engineer",
278
+ "growth-architect",
279
+ "data-engineer",
280
+ "machine-learning-engineer"
281
+ ],
282
+ "languages": [
283
+ "zh-CN",
284
+ "en-US"
285
+ ],
286
+ "customizableTokens": [
287
+ "--resume-font-size-body",
288
+ "--resume-line-height-body",
289
+ "--resume-space-section",
290
+ "--resume-space-item",
291
+ "--resume-space-bullet",
292
+ "--resume-sidebar-width",
293
+ "--resume-color-accent"
294
+ ],
295
+ "directory": "src/templates/data-analyst",
296
+ "detectedTokens": [
297
+ "--resume-color-accent",
298
+ "--resume-color-accent-dark",
299
+ "--resume-color-accent-light",
300
+ "--resume-color-border",
301
+ "--resume-color-muted",
302
+ "--resume-color-primary",
303
+ "--resume-color-secondary",
304
+ "--resume-color-sidebar-bg",
305
+ "--resume-color-sidebar-border",
306
+ "--resume-font-body",
307
+ "--resume-font-size-body",
308
+ "--resume-font-size-h2",
309
+ "--resume-font-size-meta",
310
+ "--resume-font-size-name",
311
+ "--resume-font-size-target",
312
+ "--resume-line-height-body",
313
+ "--resume-sidebar-width",
314
+ "--resume-space-bullet",
315
+ "--resume-space-item",
316
+ "--resume-space-section"
57
317
  ]
58
318
  },
59
319
  {
@@ -113,13 +373,73 @@
113
373
  "--resume-font-size-title",
114
374
  "--resume-left-col-width",
115
375
  "--resume-line-height-body",
116
- "--resume-page-min-height",
117
- "--resume-page-width",
118
376
  "--resume-space-bullet",
119
377
  "--resume-space-item",
120
378
  "--resume-space-section"
121
379
  ]
122
380
  },
381
+ {
382
+ "id": "international-flow",
383
+ "name": "International Text Flow",
384
+ "version": "1.0.0",
385
+ "style": "single-column-flow",
386
+ "roleCategory": "international-remote",
387
+ "layout": {
388
+ "type": "single-column",
389
+ "targetPages": 1,
390
+ "maxPages": 2,
391
+ "density": "balanced"
392
+ },
393
+ "visualStyle": {
394
+ "tone": "neutral-slate",
395
+ "accentColor": "#334155",
396
+ "fontFamily": "System Sans-Serif"
397
+ },
398
+ "atsScoreTier": "tier-1-optimal",
399
+ "supportedRoles": [
400
+ "frontend",
401
+ "backend",
402
+ "fullstack",
403
+ "ai-agent-engineer",
404
+ "product-manager",
405
+ "engineering-manager",
406
+ "remote-specialist"
407
+ ],
408
+ "languages": [
409
+ "zh-CN",
410
+ "en-US"
411
+ ],
412
+ "customizableTokens": [
413
+ "--resume-font-size-body",
414
+ "--resume-line-height-body",
415
+ "--resume-space-section",
416
+ "--resume-space-item",
417
+ "--resume-space-bullet",
418
+ "--resume-color-accent"
419
+ ],
420
+ "directory": "src/templates/international-flow",
421
+ "detectedTokens": [
422
+ "--resume-color-accent",
423
+ "--resume-color-accent-bg",
424
+ "--resume-color-border",
425
+ "--resume-color-muted",
426
+ "--resume-color-primary",
427
+ "--resume-color-secondary",
428
+ "--resume-color-tag-bg",
429
+ "--resume-font-body",
430
+ "--resume-font-size-body",
431
+ "--resume-font-size-h2",
432
+ "--resume-font-size-meta",
433
+ "--resume-font-size-name",
434
+ "--resume-font-size-target",
435
+ "--resume-line-height-body",
436
+ "--resume-page-padding",
437
+ "--resume-space-bullet",
438
+ "--resume-space-header-bottom",
439
+ "--resume-space-item",
440
+ "--resume-space-section"
441
+ ]
442
+ },
123
443
  {
124
444
  "id": "minimal",
125
445
  "name": "Minimal Tech",
@@ -175,9 +495,7 @@
175
495
  "--resume-font-size-name",
176
496
  "--resume-font-size-target",
177
497
  "--resume-line-height-body",
178
- "--resume-page-min-height",
179
498
  "--resume-page-padding",
180
- "--resume-page-width",
181
499
  "--resume-space-bullet",
182
500
  "--resume-space-header-bottom",
183
501
  "--resume-space-item",
@@ -243,13 +561,75 @@
243
561
  "--resume-font-size-name",
244
562
  "--resume-font-size-target",
245
563
  "--resume-line-height-body",
246
- "--resume-page-min-height",
247
- "--resume-page-width",
248
564
  "--resume-sidebar-width",
249
565
  "--resume-space-bullet",
250
566
  "--resume-space-item",
251
567
  "--resume-space-section"
252
568
  ]
569
+ },
570
+ {
571
+ "id": "startup-generalist",
572
+ "name": "Startup Generalist Cards",
573
+ "version": "1.0.0",
574
+ "style": "modular-cards",
575
+ "roleCategory": "startup-growth",
576
+ "layout": {
577
+ "type": "modular-cards",
578
+ "targetPages": 1,
579
+ "maxPages": 1,
580
+ "density": "high"
581
+ },
582
+ "visualStyle": {
583
+ "tone": "emerald-green",
584
+ "accentColor": "#059669",
585
+ "fontFamily": "System Sans-Serif"
586
+ },
587
+ "atsScoreTier": "tier-1-optimal",
588
+ "supportedRoles": [
589
+ "fullstack",
590
+ "indie-hacker",
591
+ "startup-cto",
592
+ "growth-engineer",
593
+ "product-engineer",
594
+ "frontend",
595
+ "backend"
596
+ ],
597
+ "languages": [
598
+ "zh-CN",
599
+ "en-US"
600
+ ],
601
+ "customizableTokens": [
602
+ "--resume-font-size-body",
603
+ "--resume-line-height-body",
604
+ "--resume-space-section",
605
+ "--resume-space-item",
606
+ "--resume-space-bullet",
607
+ "--resume-color-accent"
608
+ ],
609
+ "directory": "src/templates/startup-generalist",
610
+ "detectedTokens": [
611
+ "--resume-color-accent",
612
+ "--resume-color-accent-bg",
613
+ "--resume-color-border",
614
+ "--resume-color-card-bg",
615
+ "--resume-color-card-border",
616
+ "--resume-color-muted",
617
+ "--resume-color-primary",
618
+ "--resume-color-secondary",
619
+ "--resume-color-tag-bg",
620
+ "--resume-font-body",
621
+ "--resume-font-size-body",
622
+ "--resume-font-size-h2",
623
+ "--resume-font-size-meta",
624
+ "--resume-font-size-name",
625
+ "--resume-font-size-target",
626
+ "--resume-line-height-body",
627
+ "--resume-page-padding",
628
+ "--resume-space-bullet",
629
+ "--resume-space-header-bottom",
630
+ "--resume-space-item",
631
+ "--resume-space-section"
632
+ ]
253
633
  }
254
634
  ]
255
635
  }
@@ -0,0 +1,5 @@
1
+ # Organize user-supplied facts
2
+
3
+ Use the user's descriptions, prior resume and explicitly supplied supporting material. Repository scanning is not a supported candidate input mode. Reuse known information; ask progressive follow-up questions only for consequential gaps. Do not invent dates, employers, degrees or metrics, or weaken stated ownership solely because it came from chat.
4
+
5
+ Store incomplete information as Draft and reviewed supplied facts as Master. Derive role-specific Variant content without changing the Master. Unknown values remain omitted/null. Follow the shared lifecycle and error rules in 07-artifact-contract.md.
@@ -0,0 +1,38 @@
1
+ # Reference Manual 02: Career Goal Definition & Role Archetypes
2
+
3
+ > **"Know Yourself. Define Your Direction. Forge Your Opportunity."**
4
+
5
+ ---
6
+
7
+ ## 1. Professional Seniority Signals
8
+
9
+ Identify candidate level and calibrate narrative depth accordingly:
10
+
11
+ | Seniority Tier | Core Value Proposition | Key Narrative Signals | Section Priority |
12
+ |:---|:---|:---|:---|
13
+ | **Junior (1~3 Years)** | Rapid learning, solid coding standards, reliable task delivery | Clean code, unit test coverage, framework fluency, bug resolution | Skills → Projects → Experience → Education |
14
+ | **Mid-Level (3~5 Years)** | Independent ownership, feature architecture, performance optimization | End-to-end module ownership, database tuning, API design, CI/CD | Experience → Projects → Skills → Education |
15
+ | **Senior / Lead (5~8+ Years)** | System architecture, technical leadership, cross-system trade-offs | Distributed systems, high availability, mentoring, business impact | Experience → Projects → Architecture → Skills |
16
+ | **Principal / Architect** | Technical vision, organizational strategy, governance, ROI | Architecture governance, multi-team alignment, technology selection | Experience → Leadership → Architecture → Patents |
17
+
18
+ ---
19
+
20
+ ## 2. Role Archetypes Knowledge Base (`src/knowledge/roles/*.json`)
21
+
22
+ The skill ships with 9+ structured role profiles:
23
+ - `ai-agent-engineer.json`: LLM Orchestration, RAG, Tool Calling, VectorDB, Prompt Engineering
24
+ - `frontend.json`: React/Vue/Next.js, Web Vitals, Design Systems, State Management
25
+ - `java-backend.json`: Spring Boot, JVM tuning, Distributed Caching, Message Queues
26
+ - `node-fullstack.json`: TypeScript, Node.js runtime, GraphQL, Cloud Native
27
+ - `architect.json`: Distributed Systems, Domain-Driven Design, High Concurrency, Cloud Architecture
28
+ - `product-manager.json`: PRD, User Research, Data Analysis, Roadmapping, Growth
29
+
30
+ ---
31
+
32
+ ## 3. Core Value Proposition Formulation
33
+
34
+ Synthesize the 15~25 word Value Proposition headline following this formula:
35
+ $$\text{Value Proposition} = [\text{Target Role}] + [\text{Years/Domain Focus}] + [\text{Top 2 Signature Strengths}] + [\text{Concrete Impact Deliverable}]$$
36
+
37
+ *Example*:
38
+ > **Senior AI Agent Engineer** with 5+ years building scalable LLM orchestration & enterprise RAG pipelines, delivering 40% latency reduction across multi-agent production workflows.
@@ -0,0 +1,44 @@
1
+ # Reference Manual 03: Job Description (JD) Analysis & Keyword Extraction
2
+
3
+ > **"Understand the hiring manager's unstated pain point to align your verified strengths."**
4
+
5
+ ---
6
+
7
+ ## 1. Automated JD Signal Parsing Protocol
8
+
9
+ Execute the JD analyzer to extract structured requirements:
10
+ ```bash
11
+ python3 scripts/evidence/analyze-jd.py --jd "path/to/jd.md" --json
12
+ ```
13
+
14
+ ### Signal Extraction Dimensions:
15
+ 1. **Target Role & Seniority Tier**: Extracted from title and years of experience requirements;
16
+ 2. **Must-Have Skills (Hard Constraints)**: Top technical stacks and non-negotiable architectural competencies;
17
+ 3. **Nice-to-Have Skills (Differentiators)**: Emerging tools, cloud certifications, domain bonuses;
18
+ 4. **Hiring Pain Points**: High-frequency verbs indicating immediate business challenges (e.g., "reduce latency", "overhaul legacy monolithic service", "establish CI/CD").
19
+
20
+ ---
21
+
22
+ ## 2. Keyword Density & Highlighting Rules
23
+
24
+ In `workspace/resume.html`, inject JD keywords to pass ATS automated screening while remaining natural for human reviewers:
25
+
26
+ - **Primary Stack (Top 3~5 Keywords)**: Wrap with `<strong>` tags inside bullet points where evidence exists;
27
+ - **Technology Badges**: Place in `.tech-tags` or `.tech-badge` spans;
28
+ - **Density Control**: Maintain keyword density around 2.5%~4.0% of total words to prevent ATS keyword stuffing penalties.
29
+
30
+ ---
31
+
32
+ ## 3. FAB (Feature-Advantage-Benefit) Bullet Engineering
33
+
34
+ Structure every project bullet point using the FAB formula:
35
+
36
+ ```
37
+ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
38
+ │ Feature (技术动作)│ ────> │ Advantage (技术优势)│ ────> │ Benefit (业务价值) │
39
+ │ Exact tech & tool │ │ Architectural gain│ │ Quantified impact│
40
+ └─────────────────┘ └─────────────────┘ └─────────────────┘
41
+ ```
42
+
43
+ *Before (Weak)*: Worked on database and improved query performance.
44
+ *After (FAB Standard)*: Refactored PostgreSQL indexing and introduced Redis multi-tier caching (**Feature**), cutting P99 query latency from 850ms to 45ms (**Advantage**), supporting 10x traffic spike during peak sales (**Benefit**).
@@ -0,0 +1,43 @@
1
+ # Reference Manual 04: Template Selection & Layout Geometries
2
+
3
+ > **"Layout geometry determines information hierarchy. Select the composition that earns the candidate's strongest evidence."**
4
+
5
+ ---
6
+
7
+ ## 1. Core Template Matrix (Baseline 4)
8
+
9
+ | Template ID | Layout Geometry | Tone & Accent | Target Roles | Density | ATS Tier |
10
+ |:---|:---|:---|:---|:---|:---|
11
+ | `minimal` (`minimal-tech`) | Single-Column Linear Flow | Geek Minimal (Tech Blue `#2563eb`) | Backend, AI/LLM, Systems, DevOps, Fullstack | High | Tier 1 (Optimal) |
12
+ | `modern` (`modern-split-sidebar`) | Two-Column Split (32:68 Dark Sidebar) | Deep Navy (`#254665`) + Sky Blue (`#38bdf8`) | AI Agent, Frontend, Fullstack, Mobile | Balanced | Tier 1 (Optimal) |
13
+ | `executive` (`executive-split`) | Hero Banner + Two-Column (33:67 Split) | Executive Slate (`#1e293b`) + Teal (`#0f766e`) | Tech Director, Architect, PM, CTO | Balanced | Tier 1 (Optimal) |
14
+ | `classic` (`table-structured`) | 6-Column Structured Grid Table | Corporate Blue (`#1d4ed8`) + Slate | Enterprise, Fintech, Hardware, State-Owned | High | Tier 1 (Optimal) |
15
+
16
+ ---
17
+
18
+ ## 2. Template Search Engine (`scripts/template/search-template.py`)
19
+
20
+ Search for the optimal template via CLI:
21
+ ```bash
22
+ # Hybrid Search (Default Recommended)
23
+ python3 scripts/template/search-template.py "AI Agent Engineer" --style "two-column-split" --target-pages 1
24
+
25
+ # BM25 Keyword Search
26
+ python3 scripts/template/search-template.py "Distributed Architect" --engine bm25 --json
27
+
28
+ # Weighted Multi-Criteria Rule Search
29
+ python3 scripts/template/search-template.py "Frontend Engineer" --engine weighted
30
+ ```
31
+
32
+ ### Search Scoring Formulation (Weighted Scorer):
33
+ $$\text{Score} = (\text{RoleMatch} \times 0.35) + (\text{StyleMatch} \times 0.25) + (\text{ATSTier} \times 0.20) + (\text{PageFit} \times 0.10) + (\text{Density} \times 0.10)$$
34
+
35
+ ---
36
+
37
+ ## 3. Instantiating the Intermediate HTML Canvas
38
+
39
+ ```bash
40
+ python3 scripts/template/instantiate-resume.py --template modern --profile workspace/evidence-master.json --keywords "Python,LLM,RAG,FastAPI" --output workspace/resume.html
41
+ ```
42
+
43
+ *The instantiator automatically inlines `src/templates/common/base.css` + `src/templates/{template}/style.css` into a single self-contained HTML file.*
@@ -0,0 +1,12 @@
1
+ # HTML canvas and tokens
2
+
3
+ Instantiate an empty canvas.html skeleton with explicit user facts. canvas.html is the sole maintained structure. Gallery previews bind explicit fictional sample-profile.json through the same instantiator and full CSS chain; sample data must never serve as default candidate facts. Shared normalization accepts omitted/null optional fields and rejects invalid types. Failed binding must preserve old output and return nonzero.
4
+
5
+ Tune the run's HTML with CSS variables for section/item/bullet spacing and body typography. Preserve manually edited content rather than regenerating stale profile data. Auto-healing cannot remove facts or reduce body font below 8.8pt. Validate in print mode, inspect all pages and verify the actual PDF before delivery. See 07-artifact-contract.md.
6
+
7
+
8
+ ## 本地字体与缺字诊断
9
+
10
+ `forge.py` 和 `instantiate-resume.py` 支持 `--font-preset system|arial-unicode`,默认保留系统字体。`arial-unicode` 显式使用本机 Arial Unicode MS;没有该字体时字体验收失败并返回 UNVERIFIED,不保证跨机器可用,也不自动下载字体。字体选择只改变画布样式,不改变 Master 事实,并记录在 Variant 的 source.fontPreset 和运行清单中。
11
+
12
+ 中文 PDF 若文本验收失败,检查 QA 每页的 missingCodepoints、missingFragments 与 extractedRadicals。部首字符可能来自字体字码映射差异,也可能存在真实缺字;不能仅凭这种提示放行。可选用本机可用字体、创建新运行并重新检查,不改写姓名/经历来绕过问题,也不把部首字符全部忽略。
@@ -0,0 +1,14 @@
1
+ # QA and final rendering
2
+
3
+ Validation and rendering use scripts/rendering/browser-engine.js. Inspect print media after fonts settle, every page container and visible content boundary; generate a fresh PDF and parse every page for A4 portrait dimensions, allowed page count and extractable content matching the canvas.
4
+
5
+ PASS requires the actual checks to complete. Missing browser/dependencies or timeout is UNVERIFIED (exit 2), a failed check is FAIL (exit 1). JSON mode uses the same exit rules. Do not use an estimate or an existing PDF as proof. Export verified bytes through a temporary file and atomic replacement; failed export retains the previous file.
6
+
7
+ The pipeline isolates each run and records artifact hashes in manifest.json. Use its current PASS output paths, not shared default filenames. Factual and visual review remain Agent responsibilities; text extraction does not certify every ATS. See 07-artifact-contract.md for the complete lifecycle.
8
+
9
+
10
+ ## 本地字体与缺字诊断
11
+
12
+ `forge.py` 和 `instantiate-resume.py` 支持 `--font-preset system|arial-unicode`,默认保留系统字体。`arial-unicode` 显式使用本机 Arial Unicode MS;没有该字体时字体验收失败并返回 UNVERIFIED,不保证跨机器可用,也不自动下载字体。字体选择只改变画布样式,不改变 Master 事实,并记录在 Variant 的 source.fontPreset 和运行清单中。
13
+
14
+ 中文 PDF 若文本验收失败,检查 QA 每页的 missingCodepoints、missingFragments 与 extractedRadicals。部首字符可能来自字体字码映射差异,也可能存在真实缺字;不能仅凭这种提示放行。可选用本机可用字体、创建新运行并重新检查,不改写姓名/经历来绕过问题,也不把部首字符全部忽略。
@@ -0,0 +1,64 @@
1
+ # 资料、运行与验收契约
2
+
3
+ ## Draft / Master / Variant
4
+
5
+ 这三个值表示资料用途,不是质量评分,也不表示已独立核实事实。
6
+
7
+ | kind | 用途 | 约束 |
8
+ | --- | --- | --- |
9
+ | draft | 用户资料尚不完整的草稿 | 可缺姓名及经历;仅生成草稿画布,不能报告 PDF 已验收 |
10
+ | master | 用户或 Agent 整理的完整事实集合 | 每次运行只保存新快照,不反写输入;完整指保留本次已知事实,不强制具备所有可选字段 |
11
+ | variant | 为目标岗位派生的展示资料 | 记录来源 Master 的 profileSha256;岗位标题只修改 Variant,不回写 Master;不能作为下一份 Master 隐式导入 |
12
+
13
+ 标准文档形状为:
14
+
15
+ ```json
16
+ {
17
+ "schemaVersion": "1.0",
18
+ "kind": "master",
19
+ "profile": {"basics": {"name": "候选人姓名"}},
20
+ "source": {"type": "user-input"}
21
+ }
22
+ ```
23
+
24
+ `profile` 的字段定义见 `src/knowledge/resume-schema.json`;脚本 `scripts/contracts/profile.py` 是归一化与封装契约的实现。脚本输出时附加 `profileSha256` 和 `missingFields`。摘要用于发现资料版本变化,不证明用户陈述真实性。手动修改封装资料后,应重新生成摘要或移除旧摘要再读入;不能保留不匹配的摘要。
25
+
26
+ 兼容旧版的裸 profile JSON,按调用者明确提供的 Master 事实输入处理。封装为 Draft 的输入必须加 `--draft` 才能生成草稿;复核后由 Agent 显式整理为 Master,不由工具自动升级。Variant 的语义改写与事实选择仍由宿主 Agent 完成;当前脚本保留所有输入条目,只处理显式基础信息覆盖、岗位标题及展示装配。
27
+
28
+ ## 缺失值
29
+
30
+ - 可选字段省略或 null 均表示未知,空白字符串归为 null,不生成占位候选人事实。
31
+ - null 的数组归为空数组;数组中的空白/null 项省略。未知字段和错误类型拒绝,不能悄悄丢失可能重要的资料。
32
+ - 教育经历、项目和工作经历为独立数组,按输入顺序完整处理;无教育描述不补“优秀毕业生”等默认荣誉。
33
+ - 缺失联系方式和目标岗位记录为待补信息。正式交付至少需要非空姓名及实质内容,打印与 PDF 验收进一步判断内容有效性。
34
+ - 旧版 L1/L2/L3 元数据可保留;用户陈述不因为来自对话就自动降级为“参与”。
35
+
36
+ ## 每次运行独立
37
+
38
+ `forge --profile-json <file>` 在 `workspace/runs/<唯一运行ID>/` 下创建私有目录,包含 `input.json` 原始输入快照、`master.json`、`variant.json`、`resume.html`、`qa.json`、通过验收后写入的 `resume.pdf` 和 `manifest.json`。Draft 运行保存 `draft.json` 和草稿画布,不生成正式 PDF。
39
+
40
+ `--workspace` 仅改变运行目录的父目录,不复用已有运行。失败现场保留供诊断,不自动删除或继续使用其他运行的文件。目录包含个人资料,不提交到 Git;可由用户按需删除。测试必须使用临时目录。
41
+
42
+ `--html-output` 和 `--output` 是可选的已验收副本路径。先在独立运行中完成验证,再一起准备副本;写入失败时回滚普通错误,目标锁阻止两个本工具进程交错写入。跨文件复制不具备操作系统崩溃下的事务保证,因此运行目录和 manifest 始终是交付判据。发现遗留锁时报告冲突,不擅自删除其他运行的锁。
43
+
44
+ ## 运行与检查状态
45
+
46
+ | status | 退出码 | 意义 |
47
+ | --- | --- | --- |
48
+ | RUNNING | 不作为最终结果 | 已开始但未完成,不能交付 |
49
+ | DRAFT | 0 | 草稿准备完成,无 PDF 验收承诺 |
50
+ | PASS | 0 | 本次指定检查及最终 PDF 验收通过 |
51
+ | FAIL | 1 | 输入、绑定、布局、PDF 内容或输出写入不符合要求 |
52
+ | UNVERIFIED | 2 | 浏览器、依赖、超时或检查协议故障,无法完成验收 |
53
+
54
+ `manifest.json` 包含 `runId`、`stage`、`errors`、`warnings`、`checks`、`outputs`。失败的 `outputs` 为空,即使目录或显式输出位置存在旧 PDF,也不能返回它作为本次交付。只有 PASS 的清单记录本次输出路径及 HTML/PDF SHA-256。JSON 模式与人读模式使用同一退出语义。
55
+
56
+ ## 打印与最终 PDF
57
+
58
+ 布局与导出共用 `scripts/rendering/browser-engine.js`,以 print 媒体模式等待字体,检查所有页面容器与内容边界。再生成新的 PDF,解析所有页,检查 A4 纵向尺寸、页数上限、逐页可提取文本与正文覆盖。最终写入的是通过验收的 PDF 字节,使用临时文件原子替换,不接受旧输出文件作为生成成功的证据。
59
+
60
+ 自动调优不得增加当前间距,正文字号不降至 8.8pt 以下;调优失败保留原画布,不删改事实来强行过关。浏览器不可用不得用字数/盒模型估算替代 PASS。PDF 文本提取通过不代表所有 ATS 对多栏阅读顺序的解释一致;事实与视觉仍需 Agent 复核。
61
+
62
+ 当前分页契约要求每个 `.resume-page` 对应一个 A4 页面,`--expected-pages` 为 1 或 2 的上限。一页文档可用上限 2;两页文档需由 Agent 显式建立两个页面容器。单个超高容器自然流入多页会被拒绝,不猜测浏览器分页后每页应有的内容。
63
+
64
+ 输入文档的来源说明保存在 Master 的 source.suppliedSource 中,包括 synthetic-simulation 等原始标签。它是来源元数据,不是新增候选人事实。字体预设单独记录为 Variant.source.fontPreset;不得把字体修订误记为事实变更。