feat: CV overhaul — modernize skills, add projects, fix proficiency scale

- Title: "Senior Technical Consultant & Full-Stack Developer"
- Add Swift & macOS Development skill category (SoundInbox, Commando)
- Rename "AI-Assisted Development" → "AI Engineering & Integration" with MCP, ADK, Gemini, CLIP
- Remove "Design Tools" (Corel Draw, GIMP) and "Legacy Enterprise" (Struts, Yii, Zend)
- Remove jQuery, Assembler, Groovy; add Swift to programming languages
- Rewrite Team Management with professional language
- Proficiency scale: 1-5 → 1-10 (validation, tests, chat agent prompt)
- Add SoundInbox (Swift) and Commando (Go+SwiftUI) to projects
- Remove personal details: dateOfBirth, placeOfBirth, domestika, driverLicense
- Trim weak LinkedIn Learning courses (speed reading, persuasive UX)
- Fix Spanish soft_skills duplicates
- Chat agent: 11 new assertions (proficiency scale, new projects, removed skills)
- Fix hardcoded year 2025 in TestDefaultCVShortcut → time.Now().Year()
This commit is contained in:
juanatsap
2026-04-13 00:07:51 +01:00
parent aae818fbc0
commit 2fbd88f28e
7 changed files with 273 additions and 152 deletions
+48 -1
View File
@@ -10,6 +10,10 @@
* - Responds in the same language as the question
* - Off-topic questions redirect to CV scope with email
* - Technology questions use cross-section search
* - Proficiency uses 1-10 scale (never 1-5)
* - Knows new projects (SoundInbox, Commando)
* - Knows new skills (Swift, MCP, AI Engineering)
* - Does not claim removed skills (jQuery, Corel Draw)
*
* NOTE: These tests call a live LLM and are inherently non-deterministic.
* A single failure may be a flaky response — run twice to confirm real issues.
@@ -137,7 +141,50 @@ async function testResponseRules() {
console.log('\n9️⃣ Years of Experience');
const years = await chat('How many years of experience does Juan have?');
record('Years: mentions 21', /21/.test(years));
record('Years: mentions 20 or 21', /20|21/.test(years));
// ================================================================
// 10. PROFICIENCY SCALE — must use /10, never /5
// ================================================================
console.log('\n🔟 Proficiency Scale (1-10)');
const cssProficiency = await chat('What is Juan\'s proficiency level in CSS and frontend technologies?');
record('CSS: uses /10 scale', /\/10|out of 10|over 10/i.test(cssProficiency), cssProficiency.substring(0, 150));
record('CSS: does NOT use /5 scale', !/\b[0-9]\/5\b|out of 5|over 5/i.test(cssProficiency));
record('CSS: high rating (8-10)', /[89]\/10|9 out of 10|10\/10|10 out of 10|8\/10|8 out of 10/i.test(cssProficiency));
// ================================================================
// 11. NEW PROJECTS — SoundInbox, Commando
// ================================================================
console.log('\n1️⃣1️⃣ New Projects (SoundInbox, Commando)');
const swift = await chat('Does Juan have experience with Swift or macOS development?');
record('Swift: mentions SoundInbox', /soundinbox/i.test(swift));
record('Swift: mentions Swift or SwiftUI', /swift/i.test(swift));
const commando = await chat('Tell me about the Commando project');
record('Commando: mentions terminal/command', /terminal|command/i.test(commando));
record('Commando: mentions Go or SQLite', /go|sqlite/i.test(commando));
// ================================================================
// 12. NEW SKILLS — MCP, AI Engineering
// ================================================================
console.log('\n1️⃣2️⃣ New Skills (MCP, AI)');
const mcp = await chat('Does Juan have experience with MCP or Model Context Protocol?');
record('MCP: mentions MCP', /mcp|model context protocol/i.test(mcp));
record('MCP: mentions Immich project', /immich/i.test(mcp));
// ================================================================
// 13. REMOVED SKILLS — should not claim expertise
// ================================================================
console.log('\n1️⃣3️⃣ Removed Skills (no false claims)');
const jquery = await chat('Does Juan know jQuery?');
record('jQuery: honest — not listed or minimal', !/expert|proficien|specialist|strong|extensive/i.test(jquery));
const corel = await chat('Does Juan use Corel Draw?');
record('Corel: not found or not listed', /not found|no se encontr|not listed|not included|not mention|did not find|does not|no result|couldn/i.test(corel));
// ================================================================
// SUMMARY