How Career-Ops Maps JD Requirements to Your CV in Block B — CV Match
Career-Ops performs deterministic, exact-text matching between job description requirements and your résumé in Block B — CV Match through archetype detection, line-by-line table generation, and data-driven gap analysis.
The santifer/career-ops repository generates a seven-block evaluation report for every job posting you analyze. Block B — CV Match serves as the alignment engine where JD (Job Description) requirements are mapped against your canonical curriculum vitae stored in cv.md. This process eschews probabilistic LLM inference in favor of reproducible, traceable text matching that adheres to strict data-contract rules.
The Seven-Block Evaluation Architecture
Positioning Block B Within the Pipeline
Career-Ops structures every job evaluation into seven sequential blocks labeled A through G. Block A establishes the Role Summary through archetype classification, while Block B — CV Match immediately follows to ground that classification in your actual experience. The remaining blocks address compensation, cultural signals, interview readiness, and application strategy. This structured approach ensures that every JD-to-CV mapping occurs only after the system has determined which type of role archetype (FDE, SA, PM, LLMOps, Agentic, or Transformation) it is evaluating against.
The CV Match Algorithm: Step-by-Step Execution
Step 1: Archetype Detection and Role Classification
Before any matching occurs, the system classifies the JD into one of six predefined archetypes defined in modes/_shared.md. As implemented in modes/oferta.md (lines 42-47), this classification (FDE, SA, PM, LLMOps, Agentic, or Transformation) is stored in Block A and directly influences the prioritization logic for Block B. For example, a Systems Architect (SA) posting prioritizes system design proof points, while a Full-Stack Data Engineer (FDE) posting emphasizes delivery speed metrics.
Step 2: Loading the Canonical CV
The engine reads cv.md from the repository root as the single source of truth for candidate qualifications. This markdown file must follow the repository's canonical format, containing distinct sections for experience, projects, and skills that the matching algorithm can parse line-by-line. Unlike external CV parsers that ingest PDFs or Word documents, Career-Ops requires the native cv.md format to ensure deterministic exact matching.
Step 3: Exact Line-by-Line Mapping
For each requirement extracted from the JD—whether explicit skills, responsibilities, or mandatory experience—the system searches cv.md for an exact textual match (not semantic similarity). The results populate a two-column markdown table inserted at the start of Block B (lines 97-100 in modes/oferta.md):
| JD Requirement | CV Line(s) |
|---|---|
| Experience with Kubernetes | Senior Engineer @ Acme — Built k8s CI pipelines |
| Python + TypeScript proficiency | Python: 5 yrs, TypeScript: 3 yrs (see Projects) |
| Lead cross-functional teams | Led 8-person ML platform team |
This deterministic approach guarantees that every match is traceable to a specific line in your source file, eliminating hallucinated connections that plague LLM-based matching systems.
Step 4: Archetype-Aware Prioritisation
Following the table insertion, the system applies archetype-specific highlighting rules defined in modes/oferta.md (lines 101-107). Depending on the Block A classification, different proof-point categories receive emphasis:
- FDE: Delivery speed and data pipeline architecture
- SA: System design and technical decision records
- PM: Product discovery and roadmap execution
- LLMOps: Evaluation frameworks and model observability
- Agentic: Multi-agent orchestration and tool-use patterns
- Transformation: Change management and stakeholder alignment
Step 5: Gap Analysis and Mitigation Planning
Immediately following the match table, a Gaps section enumerates JD requirements not found in cv.md. As specified in modes/oferta.md (lines 109-114), the engine categorizes each gap across four dimensions:
- Blocker status: Whether the gap represents a hard requirement or nice-to-have
- Adjacent experience: Whether related CV entries partially satisfy the requirement
- Portfolio coverage: Whether a side project could demonstrate the missing skill
- Mitigation plan: Concrete phrasing suggestions for cover letters or specific projects to build
Flag Integration and Conditional Rendering
If preliminary gates detect geo-mismatches, sponsorship requirements, or other hard-stop criteria, the system inserts additive flag lines above Block B without modifying the core CV match content (lines 70-75 and 91-95 in modes/oferta.md). This ensures that filtering criteria remain visible while preserving the integrity of the JD-to-CV mapping analysis.
Running the CV Match Pipeline
You can trigger the full evaluation—including Block B generation—via the CLI or programmatically:
# Generate the full A-G report via stdin or file input
career-ops oferta < job_description.txt
For integration with custom workflows, import the core evaluation function from modes/oferta.mjs:
import { evaluateOferta } from './modes/oferta.mjs';
// jdText: raw JD string, cvPath: path to cv.md
const report = await evaluateOferta({ jdText, cvPath: 'cv.md' });
console.log(report.blocks.B); // outputs the Block B markdown
Configuration Files and Data Contracts
The deterministic mapping relies on several canonical files:
modes/oferta.md: Defines the Block B workflow logic, archetype prioritization, and gap analysis structure (lines 42-47, 97-114)cv.md: The canonical résumé used for all exact-match operationsconfig/profile.yml: Stores location authorization (location.authorized_in), sponsorship needs (location.needs_sponsorship), and archetype customizations that influence gap analysismodes/_shared.md: Contains the six archetype definitions and shared scoring rules referenced during prioritizationtemplates/states.yml: Defines tracker states; when hard-stop states trigger, they appear as flags above Block B while leaving the CV match table intact
Summary
- Career-Ops generates exact-text matches between JD requirements and
cv.md, not semantic AI inferences - Block B — CV Match produces a two-column markdown table mapping every JD requirement to specific CV line(s)
- Archetype detection (Block A) drives prioritization of proof points across six role types: FDE, SA, PM, LLMOps, Agentic, and Transformation
- The Gap analysis section categorizes missing requirements and suggests concrete mitigation strategies
- All logic is defined in
modes/oferta.mdwith deterministic rules ensuring reproducible, auditable results - Hard-stop flags (geo, sponsorship) appear above Block B without altering the underlying match data
Frequently Asked Questions
Does Career-Ops use AI to match my CV to job requirements?
No. The career-ops tool performs deterministic exact-text matching against your cv.md file. According to the source code in modes/oferta.md, the system searches for literal line matches rather than using LLM inference to invent connections. This design guarantees traceability and prevents hallucinated qualifications.
What happens if my CV doesn't match a specific JD requirement?
Unmatched requirements appear in the Gaps section of Block B. As implemented in lines 109-114 of modes/oferta.md, the system analyzes whether the gap is a hard blocker, identifies adjacent experience in your CV, suggests portfolio projects to cover the gap, and provides concrete phrasing for cover letters or mitigation plans.
Where does Career-Ops store the CV that gets matched against JDs?
The system reads cv.md from the repository root as the canonical curriculum vitae. This markdown file serves as the single source of truth for all Block B — CV Match operations, replacing external PDF or Word document parsers with a version-controlled, line-addressable format.
Can I customize which CV sections are prioritized for different role types?
Yes. The prioritization logic in modes/oferta.md (lines 101-107) maps the six archetypes (FDE, SA, PM, LLMOps, Agentic, Transformation) to specific proof-point categories. You can influence this behavior by modifying config/profile.yml to specify archetype preferences or by structuring cv.md with explicit sections that align with the priority categories defined in modes/_shared.md.
Have a question about this repo?
These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →