Auto-deploy: 2026-08-05 17:26:03
This commit is contained in:
+28
-2
@@ -210,6 +210,14 @@ companies, enterprises, banks, agencies and government. This controls whether my
|
||||
CV presents a past role as "Founding Mobile Architect" or "Lead Mobile Engineer" —
|
||||
identical work, framed for the reader.
|
||||
|
||||
PEOPLE-MANAGEMENT RULE: both platforms were built solo. NEVER write "led a team",
|
||||
"managed engineers", "mentored juniors", "grew the team" or any headcount claim —
|
||||
there were no direct reports. Express leadership as sole ownership instead:
|
||||
"solely architected", "owned end-to-end", "sole technical decision-maker",
|
||||
"aligned architecture with business stakeholders". If the posting is an
|
||||
Engineering Manager role requiring people management, say so in
|
||||
"ats_keywords_missing" rather than manufacturing the experience.
|
||||
|
||||
CONSISTENCY RULE: when "is_founding_or_startup_role" is false, the words
|
||||
"Founding" and "Founder" must NOT appear anywhere in "headline" or "summary"
|
||||
either. Describe the same 0-to-1 ownership as "built and launched from zero" or
|
||||
@@ -306,10 +314,28 @@ PROMPT;
|
||||
// the title are identical either way.
|
||||
$isFoundingContext = $integrityClean && !empty($ai['is_founding_or_startup_role']);
|
||||
|
||||
// "Core Focus" carries the job's exact wording and earns its place at the
|
||||
// top. Repeating those same terms verbatim in the group lines below does
|
||||
// NOT help ATS scoring — parsers score the document, and within-section
|
||||
// repetition adds nothing — while it visibly reads as padding. So the group
|
||||
// lines render as the remaining inventory, with the promoted terms removed.
|
||||
$coreTokens = array_filter(array_map(
|
||||
fn($s) => strtolower(trim($s)),
|
||||
explode(',', $coreSkills)
|
||||
));
|
||||
|
||||
$skillsBlock = '';
|
||||
foreach ($profile['skills'] as $group => $items) {
|
||||
$remaining = array_values(array_filter(
|
||||
$items,
|
||||
fn($item) => !in_array(strtolower(trim($item)), $coreTokens, true)
|
||||
));
|
||||
// A group emptied entirely by the promotion is already fully represented
|
||||
// in Core Focus; printing an empty heading would just look broken.
|
||||
if (empty($remaining)) continue;
|
||||
|
||||
$skillsBlock .= '<p class="skill-line"><span class="label">' . e($group) . ':</span> '
|
||||
. e(implode(', ', $items)) . '</p>';
|
||||
. e(implode(', ', $remaining)) . '</p>';
|
||||
}
|
||||
|
||||
// Index the AI's per-role selections so we can fall back role-by-role.
|
||||
@@ -366,7 +392,7 @@ PROMPT;
|
||||
// bullets they cost four lines to say what one line says.
|
||||
$metricParts = [];
|
||||
foreach ($profile['headlineMetrics'] as $m) {
|
||||
$metricParts[] = '<strong>' . e($m['value']) . '</strong> ' . e($m['label']);
|
||||
$metricParts[] = '<strong>' . e($m['lead']) . '</strong> ' . e($m['rest']);
|
||||
}
|
||||
$achievements = '<p class="metrics">' . implode(' · ', $metricParts) . '</p>';
|
||||
|
||||
|
||||
+33
-20
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user