# How the A-G Evaluation Scoring System Works in Career-Ops

> Understand the Career-Ops A-G evaluation scoring system. Learn how it generates a 1-5 global score and a 0-100 legitimacy rating to detect ghost jobs and scams.

- Repository: [Santiago Fernández de Valderrama/career-ops](https://github.com/santifer/career-ops)
- Tags: deep-dive
- Published: 2026-08-19

---

**The Career-Ops A-G evaluation scoring system calculates a 1-5 global score from six weighted blocks (A-F), while Block G provides a separate 0-100 legitimacy rating to identify ghost jobs and scams.**

Career-Ops evaluates every job opportunity through a rigorous seven-block schema that balances quantitative fit with qualitative risk assessment. The system is implemented across [`modes/oferta.md`](https://github.com/santifer/career-ops/blob/main/modes/oferta.md) and [`modes/pipeline.md`](https://github.com/santifer/career-ops/blob/main/modes/pipeline.md), generating structured reports that determine whether a posting merits further action. Each evaluation leverages candidate data from [`config/profile.yml`](https://github.com/santifer/career-ops/blob/main/config/profile.yml) and optional custom weighting rules stored in [`modes/_custom.md`](https://github.com/santifer/career-ops/blob/main/modes/_custom.md).

## The Seven-Block Schema (A-G)

The evaluation divides job analysis into seven distinct blocks, six of which contribute to the final score.

- **Block A (Role Match):** Measures alignment between the job description and the candidate's CV and experience.
- **Block B (Seniority):** Evaluates whether the role's level fits the candidate's career stage.
- **Block C (Compensation):** Analyzes salary ranges, equity, and bonuses against the candidate's targets.
- **Block D (Cultural Fit):** Assesses narrative hooks and alignment with personal values.
- **Block E (Interview Prep):** Identifies reusable STAR+R stories from the `interview-prep/` folder.
- **Block F (Work Authorization):** Flags hard blockers like "no sponsorship" for the candidate's authorized country.
- **Block G (Legitimacy):** Generates a standalone 0-100 "trust" score to flag ghost jobs, scams, or expired postings.

Block G operates independently—it does not factor into the 1-5 global score but appears in reports for manual review.

## Global Score Calculation

The quantitative output derives from the first six blocks using a standardized calculation method defined in the pipeline logic.

### Block-Level Ratings

Each block A through F receives a **1-5 rating** with half-point granularity (e.g., 3.5, 4.0). These ratings assess specific dimensions of the opportunity against the candidate's profile.

### Weighted Average Computation

By default, the global score is the **simple arithmetic mean** of the six block scores. However, users can override this behavior by creating a `Scoring System` section in [`modes/_custom.md`](https://github.com/santifer/career-ops/blob/main/modes/_custom.md):

```markdown

# Scoring System

weights:
  A: 0.25
  B: 0.20
  C: 0.25
  D: 0.15
  E: 0.10
  F: 0.05

```

When [`modes/_custom.md`](https://github.com/santifer/career-ops/blob/main/modes/_custom.md) exists and contains weight definitions, the pipeline applies these coefficients instead of the default equal weighting. The resulting global score appears in the report front-matter as `**Score:** 4.2/5`.

### Score Thresholds and Gates

The pipeline enforces a minimum quality gate defined in [`config/profile.yml`](https://github.com/santifer/career-ops/blob/main/config/profile.yml) under `auto_pdf_score_threshold` (default: `3.0`). If the global score falls below this threshold, the system skips PDF generation but still records the score in the report. Additionally, entries in [`data/blacklist.md`](https://github.com/santifer/career-ops/blob/main/data/blacklist.md) act as hard gates that can abort processing regardless of score.

## Decision Flow and Automation

The scoring system drives automated recommendations through a multi-stage pipeline defined in [`modes/pipeline.md`](https://github.com/santifer/career-ops/blob/main/modes/pipeline.md).

1. **Live-Posting Validation:** Before evaluation, the system uses Playwright to verify the URL is active. Dead links abort immediately to preserve tokens.
2. **User Consent Check:** The pipeline requires explicit candidate confirmation before proceeding with the full A-G evaluation.
3. **Blacklist Verification:** [`data/blacklist.md`](https://github.com/santifer/career-ops/blob/main/data/blacklist.md) entries block processing for known problematic employers or posting patterns.
4. **Recommendation Logic:** The system **strongly discourages** applications scoring below **4.0/5** unless the user explicitly overrides the recommendation.

According to the [`README.md`](https://github.com/santifer/career-ops/blob/main/README.md), this 4.0 threshold represents the "proceed with caution" boundary, while scores above indicate strong alignment.

## Running A-G Evaluations

Execute evaluations through the CLI tools provided in the repository.

### Single Offer Evaluation

Run the full A-G analysis on a specific job posting:

```bash
node modes/oferta.mjs https://example.com/job/1234

```

This command reads [`modes/oferta.md`](https://github.com/santifer/career-ops/blob/main/modes/oferta.md) to orchestrate the evaluation, respect custom scoring rules, and write a Markdown report to the `reports/` directory.

### Automated Pipeline

Trigger the complete workflow including PDF generation and tracker updates:

```bash
node modes/pipeline.mjs https://example.com/job/5678

```

The pipeline checks `config/profile.yml → auto_pdf_score_threshold` and only generates PDF outputs when the global score meets or exceeds the configured minimum (default 3.0).

## Customization Options

Users can fine-tune scoring behavior through configuration files without modifying core logic.

### Weight Overrides

Define custom block contributions in [`modes/_custom.md`](https://github.com/santifer/career-ops/blob/main/modes/_custom.md) as shown above. These weights must sum to 1.0 and will override the default arithmetic mean calculation.

### Profile-Based Thresholds

Adjust the automatic processing threshold in [`config/profile.yml`](https://github.com/santifer/career-ops/blob/main/config/profile.yml):

```yaml
auto_pdf_score_threshold: 3.5

```

Higher values restrict PDF generation to only high-quality matches, while lower values include more marginal opportunities.

## Summary

- The **A-G evaluation scoring system** uses six blocks (A-F) rated 1-5 to calculate a global weighted average, while Block G provides a separate 0-100 legitimacy check.
- Default scoring uses a simple arithmetic mean, but custom weights can be defined in [`modes/_custom.md`](https://github.com/santifer/career-ops/blob/main/modes/_custom.md) to prioritize specific factors like compensation or role fit.
- The pipeline enforces a default **score threshold of 3.0** for PDF generation and **strongly recommends against applying** to opportunities scoring below 4.0/5.
- Block G operates independently to flag ghost jobs and scams without affecting the quantitative global score.
- All configuration flows through [`config/profile.yml`](https://github.com/santifer/career-ops/blob/main/config/profile.yml) and [`modes/_custom.md`](https://github.com/santifer/career-ops/blob/main/modes/_custom.md), allowing candidates to tune evaluation criteria to their specific career stage and priorities.

## Frequently Asked Questions

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

The final score is calculated as a weighted average of blocks A through F. By default, Career-Ops uses a simple arithmetic mean (equal weighting), but you can customize this by defining weights in [`modes/_custom.md`](https://github.com/santifer/career-ops/blob/main/modes/_custom.md). Block G's 0-100 legitimacy score does not factor into this calculation.

### What does it mean if a job scores below 4.0/5?

According to the Career-Ops README, scores below 4.0/5 trigger a strong discouragement recommendation. The system advises against applying to these roles unless you explicitly override the recommendation, as they likely present significant mismatches in compensation, seniority, or role fit.

### Can I skip PDF generation for low-scoring opportunities?

Yes. Set `auto_pdf_score_threshold` in [`config/profile.yml`](https://github.com/santifer/career-ops/blob/main/config/profile.yml) to your desired minimum score (default is 3.0). The pipeline will evaluate the posting but skip PDF generation and auto-apply logic for any opportunity scoring below this threshold, saving storage and processing time.

### What is the difference between Block F and Block G?

Block F (Work Authorization) acts as a hard blocker within the scoring system—a negative flag here can disqualify an opportunity from consideration based on your visa or sponsorship requirements. Block G (Legitimacy) provides a separate qualitative assessment (0-100) that identifies ghost jobs and scams but does not alter the 1-5 global score; it serves as a warning flag for manual review.