CareerOps Fabrication Rule for Keywords: Reformulation vs. Invention Explained

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, 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 (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 and the JD, then passes them through the cleanChips sanitization pipeline:

// 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:

// 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

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, 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 (lines 38-42) and operationalized in 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 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 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 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.

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:

Share the following with your agent to get started:
curl -s "https://instagit.com/install.md"

Works with
Claude Codex Cursor VS Code OpenClaw Any MCP Client

Maintain an open-source project? Get it listed too →