# CareerOps Fabrication Rule for Keywords: Reformulation vs. Invention Explained

> Understand the CareerOps fabrication rule. Learn to reformulate keywords from existing data, not invent them. Ensure compliance and effective keyword usage in your projects.

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

---

**CareerOps strictly prohibits fabricating keywords, mandating that all terms must be reformulated from existing job description or profile data rather than invented from scratch.**

The `santifer/career-ops` repository is an open-source career automation toolkit that generates tailored CVs, cover letters, and interview preparation materials. At its core lies a strict **anti-fabrication policy** governing how keywords are handled—ensuring every term injected into your application materials originates from verifiable source documents rather than hallucinated by the system.

## What Is the Fabrication Rule in CareerOps?

The fabrication rule in CareerOps can be summarized by a single directive documented in the project's policy files: **"Keywords get reformulated, never fabricated."**

This means the system is explicitly prohibited from inventing new keywords, skills, or competencies that do not appear in your existing profile data or the target job description (JD). Instead, the engine must **reformulate**—rephrase, reorder, or recontextualize—existing keywords to match the JD's vocabulary while maintaining strict fidelity to your actual experience. All keyword injection passes through an anti-fabrication gate that rejects any claim lacking a verified source.

## Where the Rule Is Enforced in the Codebase

The non-fabrication constraint is implemented across four critical components of the CareerOps architecture.

### AGENTS.md Policy Definition

The overarching ethical framework resides in [`AGENTS.md`](https://github.com/santifer/career-ops/blob/main/AGENTS.md), where lines 38-42 establish the foundational non-fabrication policy. This section defines the boundary between permissible paraphrasing and prohibited invention, mandating that **authorship claims must be grounded in existing sources** and never synthesized from thin air. This policy file serves as the primary constraint layer for all agent behaviors in the system.

### PDF Mode Tailoring Instructions

The CV generation logic in [`modes/pdf.md`](https://github.com/santifer/career-ops/blob/main/modes/pdf.md) (lines 74-75) contains explicit instructions to the engine: **"NEVER invent skills — only re-word REAL experience using the JD's vocabulary."** This directive ensures that when the system tailors your CV for a specific role, it maps your verified experience to the JD's keyword taxonomy through synonym substitution and contextual reframing, rather than attributing false competencies to your profile.

### Keyword Extraction Logic

The data pipeline in `src/lib/profile-keywords.mjs` (lines 2-5) enforces the rule at the data ingestion stage. The `profileTargetKeywords` function extracts raw keywords from [`config/profile.yml`](https://github.com/santifer/career-ops/blob/main/config/profile.yml) and the JD, then passes them through the `cleanChips` sanitization pipeline:

```javascript
// src/lib/profile-keywords.mjs
import { cleanChips } from "./clean-chips.mjs";

export function profileTargetKeywords(profile) {
  const raw = profile.target_roles?.flatMap(r => r.keywords) ?? [];
  return cleanChips(raw);               // drops empty / non-string entries, dedups
}

```

This implementation ensures that only **pre-existing keywords** from your profile or the job posting enter the generation workflow—no new terms are appended during the cleaning process.

### Verification Gates

The anti-fabrication constraint is validated post-generation in `verify-cv-facts.mjs`. The verification script acts as a final guardrail that rejects any output containing fabricated metrics or keywords:

```javascript
// verify-cv-facts.mjs (anti-fabrication gate excerpt)
if (candidateMetricIsFabricated) {
  // reject the claim – it must come from a verified source
  equal('headcount paraphrase is not a fabrication', true);
}

```

If the system attempts to inject a keyword not traceable to the source documents, the verification gate flags the violation and prevents the content from being finalized.

## Practical Implementation: Reformulation vs. Fabrication

Understanding the distinction between permitted reformulation and prohibited fabrication is critical for optimizing your CareerOps workflow.

**Permitted Reformulation:**
- **Synonym substitution:** Changing "managed teams" to "led cross-functional groups" when the JD uses leadership terminology
- **Keyword mapping:** Aligning "React.js" in your profile with "React" in the JD through canonicalization
- **Contextual reframing:** Repositioning a bullet point to emphasize "agile methodology" because the JD prioritizes it, provided you actually have agile experience

**Prohibited Fabrication:**
- Inventing "Kubernetes expertise" because the JD requires it, when your profile contains no containerization experience
- Creating fake metrics like "increased revenue by 150%" without source documentation
- Adding programming languages or certifications not listed in your [`profile.yml`](https://github.com/santifer/career-ops/blob/main/profile.yml)

When a required keyword is absent from your source data, CareerOps leaves the field blank or uses a placeholder rather than fabricating a plausible-sounding term.

## Why Anti-Fabrication Matters for ATS and Compliance

**Applicant Tracking Systems (ATS)** and hiring managers verify claimed skills during interviews. The CareerOps fabrication rule protects candidates from automated rejection during background checks and prevents ethical violations in AI-assisted job applications. By grounding every keyword in the `profile-keywords.mjs` extraction layer and enforcing the "never invent skills" directive in [`modes/pdf.md`](https://github.com/santifer/career-ops/blob/main/modes/pdf.md), the system maintains **documentary fidelity** required for modern hiring compliance.

## Summary

- **Core Rule:** CareerOps operates on the principle that keywords get reformulated, never fabricated.
- **Policy Source:** The constraint is defined in [`AGENTS.md`](https://github.com/santifer/career-ops/blob/main/AGENTS.md) (lines 38-42) and operationalized in [`modes/pdf.md`](https://github.com/santifer/career-ops/blob/main/modes/pdf.md) (lines 74-75).
- **Technical Enforcement:** `src/lib/profile-keywords.mjs` extracts only existing keywords, while `verify-cv-facts.mjs` blocks fabricated claims.
- **User Impact:** You must source all keywords from your actual experience and the target JD; the system will not invent missing competencies.
- **Compliance Benefit:** This approach ensures ATS compatibility and eliminates the risk of fraudulent skill claims.

## Frequently Asked Questions

### What does "reformulated" mean in CareerOps?

Reformulation refers to the process of rephrasing, reordering, or recontextualizing existing keywords from your profile or the job description to match the JD's vocabulary. It includes synonym substitution and structural changes to bullet points, provided the underlying claim remains factually identical to your source data.

### How does CareerOps prevent keyword fabrication?

The system employs a multi-layer defense: `profile-keywords.mjs` restricts input to pre-existing terms, [`modes/pdf.md`](https://github.com/santifer/career-ops/blob/main/modes/pdf.md) explicitly instructs the engine never to invent skills, and `verify-cv-facts.mjs` performs post-generation validation to reject any content containing fabricated metrics or unattributed keywords.

### What happens if a required keyword is missing from my profile?

CareerOps will not fabricate the missing keyword. Instead, the system either leaves the relevant section blank, uses a placeholder indicating the gap, or prompts you to update your [`config/profile.yml`](https://github.com/santifer/career-ops/blob/main/config/profile.yml) with the actual experience before regeneration. This ensures all output remains traceable to verified source documents.

### Does the fabrication rule apply to metrics and experience as well?

Yes. The anti-fabrication policy in [`AGENTS.md`](https://github.com/santifer/career-ops/blob/main/AGENTS.md) and the verification logic in `verify-cv-facts.mjs` apply universally to all claims, including quantitative metrics, project timelines, and responsibility descriptions. The "never invent" constraint governs all content generation modes in the repository.