# The Six-Block Evaluation Framework in Career-Ops: A Complete Technical Guide

> Master the six-block evaluation framework for career-ops. This guide details how to analyze job offers using blocks A-F for role alignment, CV matching, and interview readiness to drive data-driven career decisions.

- Repository: [Santiago Fernández de Valderrama/career-ops](https://github.com/santifer/career-ops)
- Tags: technical-guide
- Published: 2026-06-13

---

**TLDR:** Career-Ops analyzes job offers through six deterministic blocks (A–F) that evaluate role alignment, CV matching, compensation research, and interview readiness, culminating in a weighted 1–5 score that drives data-driven application decisions.

The **career-ops** repository by santifer implements a deterministic evaluation system for job seekers. This **six-block evaluation framework** automatically processes job descriptions and URLs to generate comprehensive qualification reports, eliminating subjective guesswork from career decisions by standardizing deep due diligence across every opportunity.

## What Is the Six-Block Evaluation Framework?

The **six-block evaluation framework** is the core analytical engine of Career-Ops' "oferta" mode. When a candidate inputs a job description or URL, the system sequentially constructs six analytical blocks (labeled A through F) that form the qualitative basis for the final 1–5 evaluation score.

Each block serves a distinct purpose in the qualification pipeline, reusing data from previous stages to ensure consistency. According to the architecture documentation in [`docs/ARCHITECTURE.md`](https://github.com/santifer/career-ops/blob/main/docs/ARCHITECTURE.md), this framework orchestrates the entire evaluation flow from input ingestion to final report generation.

## The Six Blocks Explained

The framework processes each job offer through six specialized analysis blocks defined in [`modes/oferta.md`](https://github.com/santifer/career-ops/blob/main/modes/oferta.md).

### Block A – Role Summary

**Block A** extracts high-level characteristics from the posting. As implemented in [`modes/oferta.md`](https://github.com/santifer/career-ops/blob/main/modes/oferta.md) (lines 25–34), this block generates a structured table containing the **archetype**, domain, function, seniority level, remote work model, team size, and a one-sentence TL;DR summary.

This initial classification determines which evaluation path the subsequent blocks will follow.

### Block B – Match with CV

**Block B** performs granular requirement mapping between the job description and the candidate's CV. The implementation in [`modes/oferta.md`](https://github.com/santifer/career-ops/blob/main/modes/oferta.md) (lines 36–53) creates a table linking each JD requirement to specific lines in [`cv.md`](https://github.com/santifer/career-ops/blob/main/cv.md), followed by a "Gaps" section that classifies missing qualifications as either **hard blockers** or **nice-to-have** items.

The gap analysis proposes concrete mitigation strategies, which directly inform the customization recommendations in Block E.

### Block C – Level & Strategy

**Block C** positions the candidate's seniority relative to the posting requirements and defines negotiation tactics. According to [`modes/oferta.md`](https://github.com/santifer/career-ops/blob/main/modes/oferta.md) (lines 54–58), this block detects the level stated in the JD and suggests a "sell senior without lying" pitch, alongside an "if they down-level me" contingency plan.

### Block D – Compensation & Demand

**Block D** researches market-rate salary data and company compensation reputation. The system uses WebSearch to pull data from Glassdoor, Levels.fyi, and Blind, presenting findings in a cited table (see [`modes/oferta.md`](https://github.com/santifer/career-ops/blob/main/modes/oferta.md) lines 60–68). This block also analyzes demand trends for the specific role category.

### Block E – Customization Plan

**Block E** provides actionable edits to improve application success rates. As specified in [`modes/oferta.md`](https://github.com/santifer/career-ops/blob/main/modes/oferta.md) (lines 69–77), this block delivers a structured table with columns for Section, Current status, Proposed change, and Why, plus the top five CV and top five LinkedIn modifications recommended to close gaps identified in Block B.

### Block F – Interview Plan

**Block F** generates behavioral interview preparation materials. The implementation in [`modes/oferta.md`](https://github.com/santifer/career-ops/blob/main/modes/oferta.md) (lines 78–96) creates a matrix mapping each JD requirement to a **STAR+R** story (Situation, Task, Action, Result, Reflection), including a "Story Bank" recommendation for rapid recall during interviews.

## Understanding Block G and the Scoring System

While Blocks A–F form the core framework, **Block G** (Posting Legitimacy) operates separately. According to the source analysis, Block G classifies postings as **High Confidence**, **Proceed with Caution**, or **Suspicious**, but does not affect the 1–5 score.

The final score derives from a weighted average across six dimensions defined in [`modes/_shared.md`](https://github.com/santifer/career-ops/blob/main/modes/_shared.md) (lines 29–38): Match with CV, North-Star alignment, Compensation, Cultural signals, Red flags, and Global factors. This scoring logic executes only after Blocks A–F complete their analysis.

## Running the Evaluation Pipeline

Trigger the six-block framework using the Career-Ops CLI or OpenCode agent.

Evaluate a job posting by URL:

```bash
career-ops oferta https://example.com/jobs/12345

```

Process a raw job description via piped input:

```bash
cat job-description.txt | career-ops oferta

```

Using the OpenCode agent:

```bash
opencode run "career-ops oferta https://example.com/jobs/12345"

```

Each execution triggers the full A–F pipeline, writes a Markdown report to `reports/{###}-{company}-{date}.md`, generates an ATS-optimized PDF via `generate-pdf.mjs`, and records the entry in [`data/applications.md`](https://github.com/santifer/career-ops/blob/main/data/applications.md) through `merge-tracker.mjs`.

## Key Source Files

The framework implementation spans these critical files:

- **[`modes/oferta.md`](https://github.com/santifer/career-ops/blob/main/modes/oferta.md)** – Detailed specifications for Blocks A–F and Block G (Posting Legitimacy)
- **[`modes/_shared.md`](https://github.com/santifer/career-ops/blob/main/modes/_shared.md)** – Scoring system definitions, dimension weights, and archetype lists
- **[`docs/ARCHITECTURE.md`](https://github.com/santifer/career-ops/blob/main/docs/ARCHITECTURE.md)** – High-level flow diagrams and block enumeration
- **[`modes/_profile.template.md`](https://github.com/santifer/career-ops/blob/main/modes/_profile.template.md)** – User-specific archetype customizations consumed by the framework
- **`generate-pdf.mjs`** – Converts final reports into ATS-compatible PDFs
- **`merge-tracker.mjs`** – Processes TSV output to update the applications tracker

## Summary

- **The six-block evaluation framework** in Career-Ops provides deterministic job offer analysis through Blocks A–F, excluding Block G which handles legitimacy checks.
- **Block A** generates role summaries; **Block B** maps CV matches and gaps; **Block C** defines level strategy.
- **Block D** researches compensation; **Block E** prescribes customization; **Block F** prepares interview stories.
- The **final 1–5 score** weights six dimensions defined in [`modes/_shared.md`](https://github.com/santifer/career-ops/blob/main/modes/_shared.md) (lines 29–38) to enable data-driven application decisions.
- Each evaluation produces a Markdown report in `reports/`, an ATS-compatible PDF, and updates the application tracker TSV.

## Frequently Asked Questions

### How does Block B identify gaps between a job description and my CV?

Block B constructs a requirement mapping table that links each JD item to exact lines in your [`cv.md`](https://github.com/santifer/career-ops/blob/main/cv.md) file. According to [`modes/oferta.md`](https://github.com/santifer/career-ops/blob/main/modes/oferta.md) (lines 36–53), the system classifies each mismatch as either a **hard blocker** or **nice-to-have** gap, then proposes specific mitigation strategies. This classification directly feeds into the customization recommendations generated in Block E.

### What is the difference between the six-block framework and Block G?

The **six-block framework** (A–F) generates the qualitative analysis that feeds into the numerical 1–5 score. **Block G** (Posting Legitimacy) runs as a separate validation layer that classifies postings as High Confidence, Proceed with Caution, or Suspicious based on fraud indicators. Unlike Blocks A–F, Block G does not affect the final weighted score defined in [`modes/_shared.md`](https://github.com/santifer/career-ops/blob/main/modes/_shared.md).

### How is the final 1–5 score calculated in Career-Ops?

The scoring logic resides in [`modes/_shared.md`](https://github.com/santifer/career-ops/blob/main/modes/_shared.md) (lines 29–38) and computes a weighted average across six dimensions: Match with CV, North-Star alignment, Compensation, Cultural signals, Red flags, and Global factors. This calculation executes after Blocks A–F complete their analysis, ensuring the score reflects the deep qualitative evaluation rather than surface-level keyword matching.

### Which file should I modify to customize how the framework evaluates specific job archetypes?

User-specific customizations for the six archetypes (defined in the framework) belong in [`modes/_profile.template.md`](https://github.com/santifer/career-ops/blob/main/modes/_profile.template.md). This template file allows you to adjust how Blocks A–F interpret requirements for your specific industry, seniority level, and career preferences without modifying the core evaluation logic in [`modes/oferta.md`](https://github.com/santifer/career-ops/blob/main/modes/oferta.md).