# Where to Find the Main CV Source of Truth File in CareerOps

> Locate the main CV source of truth file in CareerOps easily. Find the cv.md file at the repository's root for accurate career data management.

- Repository: [Santiago Fernández de Valderrama/career-ops](https://github.com/santifer/career-ops)
- Tags: how-to-guide
- Published: 2026-08-22

---

**The main CV source of truth file in CareerOps is [`cv.md`](https://github.com/santifer/career-ops/blob/main/cv.md), located at the root of the repository.**

CareerOps maintains a strict data architecture that designates a single markdown file as the **main CV source of truth file in CareerOps**. Located in the `santifer/career-ops` repository, this file serves as the authoritative reference for all résumé-related operations, ensuring PDF generators, skill-gap analyzers, and offer evaluation tools read from one consistent location.

## The Canonical CV File Location

The file [`cv.md`](https://github.com/santifer/career-ops/blob/main/cv.md) sits at the repository root and functions as the single source of truth for candidate factual content. According to the Data Contract defined in [`AGENTS.md`](https://github.com/santifer/career-ops/blob/main/AGENTS.md) (lines 13-25), this file belongs to the *User Layer* and is explicitly marked as content that "never auto-updated." This design guarantees that human-curated résumé data remains the authoritative reference while automated tools consume it read-only.

All generation pipelines—including LaTeX export, PDF rendering, and skill analysis—read directly from this file to obtain candidate information.

## How the Codebase References cv.md

Multiple scripts enforce the location and role of [`cv.md`](https://github.com/santifer/career-ops/blob/main/cv.md) through hardcoded constants and default configurations.

### AGENTS.md Data Contract

In [`AGENTS.md`](https://github.com/santifer/career-ops/blob/main/AGENTS.md) (lines 13-25), the Data Contract explicitly lists [`cv.md`](https://github.com/santifer/career-ops/blob/main/cv.md) as a *User Layer* file. The contract designates it as the **primary** source of truth for the CV, distinguishing it from generated or cached files that may reside in other layers.

### upskill.mjs Constant Definition

The helper script `upskill.mjs` (lines 36-38) defines a constant `CV_FILE` that points directly to [`cv.md`](https://github.com/santifer/career-ops/blob/main/cv.md) in the repository root:

```javascript
// Conceptual reference from upskill.mjs
const CV_FILE = join(process.cwd(), 'cv.md');

```

This constant ensures that skill-gap analysis operations read from the canonical location without ambiguity.

### verify-cv-facts.mjs Default Sources

The validation script `verify-cv-facts.mjs` (lines 11-20) declares [`cv.md`](https://github.com/santifer/career-ops/blob/main/cv.md) as part of the `DEFAULT_SOURCES` array alongside [`article-digest.md`](https://github.com/santifer/career-ops/blob/main/article-digest.md). This configuration establishes the file as the default reference for fact-checking operations against the candidate's stated history.

## Accessing the CV Programmatically

When building custom scripts or extensions for CareerOps, reference [`cv.md`](https://github.com/santifer/career-ops/blob/main/cv.md) using the repository root as your base path.

### Reading the File in Node.js

```javascript
import { readFileSync } from 'fs';
import { join } from 'path';

const CAREER_OPS_ROOT = process.cwd();           // assuming script runs from repo root
const CV_PATH = join(CAREER_OPS_ROOT, 'cv.md');

const cvContent = readFileSync(CV_PATH, 'utf8');
console.log('Current CV:\n', cvContent);

```

### Generating PDF Output

The PDF generator reads [`cv.md`](https://github.com/santifer/career-ops/blob/main/cv.md) automatically when invoked from the repository root:

```bash
node generate-pdf.mjs

```

### Configuration References

While [`cv.md`](https://github.com/santifer/career-ops/blob/main/cv.md) itself contains the factual content, configuration files may reference its existence. Systems expect this file to persist at the top level:

```yaml
profile:
  name: "Jane Doe"
  # CV content is taken from cv.md at the repo root

```

## Key Files Defining the CV Source

- **[`cv.md`](https://github.com/santifer/career-ops/blob/main/cv.md)** — The canonical CV markdown file (User Layer) located at the repository root
- **[`AGENTS.md`](https://github.com/santifer/career-ops/blob/main/AGENTS.md)** — Defines the Data Contract establishing [`cv.md`](https://github.com/santifer/career-ops/blob/main/cv.md) as the primary source (lines 13-25)
- **`upskill.mjs`** — Contains the `CV_FILE` constant pointing to [`cv.md`](https://github.com/santifer/career-ops/blob/main/cv.md) (lines 36-38)
- **`verify-cv-facts.mjs`** — Declares [`cv.md`](https://github.com/santifer/career-ops/blob/main/cv.md) in `DEFAULT_SOURCES` for validation (lines 11-20)

## Summary

- The **main CV source of truth file in CareerOps** is [`cv.md`](https://github.com/santifer/career-ops/blob/main/cv.md), located at the repository root.
- The Data Contract in [`AGENTS.md`](https://github.com/santifer/career-ops/blob/main/AGENTS.md) (lines 13-25) designates it as a User Layer file that is never automatically updated.
- `upskill.mjs` (lines 36-38) references the file through the `CV_FILE` constant.
- `verify-cv-facts.mjs` (lines 11-20) uses it as a default source for fact verification.
- All generation pipelines read from this single location to ensure consistency across PDF, LaTeX, and analysis outputs.

## Frequently Asked Questions

### What is the main CV source of truth file in CareerOps?

The **main CV source of truth file in CareerOps** is [`cv.md`](https://github.com/santifer/career-ops/blob/main/cv.md), a markdown file located at the root of the `santifer/career-ops` repository. This file contains the authoritative candidate résumé content that all generation and validation tools reference directly.

### Is cv.md automatically updated by scripts?

No. According to the Data Contract in [`AGENTS.md`](https://github.com/santifer/career-ops/blob/main/AGENTS.md) (lines 13-25), [`cv.md`](https://github.com/santifer/career-ops/blob/main/cv.md) is classified as a *User Layer* file that "never auto-updated." This ensures that human editors maintain full control over the canonical résumé content while automated systems consume it as read-only data.

### Which scripts depend on the cv.md file location?

The `upskill.mjs` script (lines 36-38) defines a `CV_FILE` constant that points to [`cv.md`](https://github.com/santifer/career-ops/blob/main/cv.md), and the `verify-cv-facts.mjs` script (lines 11-20) includes it in the `DEFAULT_SOURCES` array. Both expect the file to exist at the repository root to function correctly.

### Can I rename or relocate the CV file?

No, you should not rename or move [`cv.md`](https://github.com/santifer/career-ops/blob/main/cv.md). The codebase contains hardcoded references expecting the file at the repository root, specifically in `upskill.mjs` and `verify-cv-facts.mjs`. Relocating it would break the PDF generation pipeline, skill-gap analysis, and fact validation scripts.