How Career-Ops Block G Checks Posting Legitimacy and Identifies Scams

Career-Ops Block G evaluates job posting legitimacy by analyzing five signal groups—freshness, description quality, company hiring signals, reposting history, and market context—to assign a High Confidence, Proceed with Caution, or Suspicious tier.

Block G serves as the final legitimacy gate in the santifer/career-ops A-G evaluation pipeline, running inside the Oferta mode to surface scams and ghost jobs before you invest time. After the Playwright-based liveness gate confirms a URL is still active, Block G executes a multi-point inspection defined in modes/oferta.md to determine whether a posting represents a genuine opportunity or a potential waste of effort.

The Five Signal Groups of Block G

According to the source code in modes/oferta.md (lines 101-152), Block G inspects five ordered signal groups to build a composite legitimacy assessment.

1. Posting Freshness

The system examines date stamps, "X days ago" strings, and the state of the Apply button captured in the Playwright snapshot. Recent posting dates and active application buttons push the assessment toward High Confidence, while missing dates or disabled buttons trigger Proceed with Caution.

2. Description Quality

Block G analyzes the presence of concrete technical requirements, team size specifications, realistic experience ranges, first 6-12 month scope details, and compensation transparency. Detailed descriptions with specific tech stacks rate as positive signals, whereas vague or contradictory boilerplate text receives neutral or negative weighting.

3. Company Hiring Signals

The mode performs WebSearch queries (2-3 searches) to detect recent layoffs or hiring freezes at the company (lines 23-27). Evidence of workforce reductions—especially in the same department as the posting—constitutes a Concerning signal that elevates scam risk.

4. Reposting Detection

Block G consults scan-history.tsv to identify if the same role has appeared under different URLs (lines 28-31). Frequent reposting without closure suggests a "phantom" or evergreen listing that may not represent an active hire, warranting a Suspicious classification.

5. Role Market Context

The final signal evaluates whether the role's expected fill time aligns with market norms for the seniority level and company stage (lines 32-36). Unusually long-standing openings or misaligned seniority expectations influence the tier assignment toward caution.

Tier Assignment and Risk Classification

After aggregating all five signal groups, Block G assigns one of three tiers defined in modes/oferta.md (lines 39-43):

  • High Confidence — Multiple positive signals indicate the posting is actively recruiting.
  • Proceed with Caution — Mixed signals require additional investigation before applying.
  • Suspicious — Concerning patterns (no dates, heavy reposting, recent layoffs) suggest a possible scam or ghost job.

Edge Cases and Special Handling

The modes/oferta.md file (lines 48-55) contains explicit rules to prevent false positives for legitimate but unusual postings. Block G adjusts weighting for government and academic listings, evergreen hires, niche executive roles, early-stage startups, recruiter-sourced contacts, and positions with intentionally missing dates. These adjustments ensure the scam detection logic does not inadvertently flag valid opportunities in non-standard hiring contexts. The mode references canonical status strings from templates/states.yml when marking postings as "Discarded" or "SKIP" to maintain consistency across evaluations.

Command-Line Usage and Implementation

To run Block G manually or inspect its output, use the following commands:


# Evaluate a single job URL through the full A-G pipeline

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

# Run the automated pipeline with stdin input

career-ops auto-pipeline < job-url-or-jd.txt

# Extract Block G results from a generated report

grep -A 20 "## G) Posting Legitimacy" reports/001-company-2026-06-13.md

For programmatic access, import the evaluation module from the modes/oferta.mjs file:

import { evaluateJob } from './modes/oferta.mjs';

(async () => {
  const result = await evaluateJob({ url: 'https://example.com/jobs/12345' });
  console.log('Legitimacy tier:', result.blockG.assessment);
  console.table(result.blockG.signals);
})();

Summary

  • Block G is the final legitimacy gate in the Career-Ops oferta mode, running after the Playwright liveness check confirms the URL is live (lines 5-13 in modes/oferta.md).
  • The system evaluates five signal groups: posting freshness, description quality, company hiring signals, reposting detection, and role market context.
  • Output is classified into three tiers: High Confidence, Proceed with Caution, or Suspicious.
  • Edge-case handling prevents false positives for government jobs, academic roles, and recruiter-sourced postings.
  • Historical data from scan-history.tsv powers reposting detection to identify phantom listings.

Frequently Asked Questions

What triggers a "Suspicious" rating in Career-Ops Block G?

A Suspicious rating occurs when multiple concerning signals align, such as missing posting dates combined with evidence of recent company layoffs and detection of the same role in scan-history.tsv under multiple URLs. According to the logic in modes/oferta.md, this pattern suggests a "ghost" job that may not represent active hiring intent.

How does Block G detect reposted job listings?

Block G queries the scan-history.tsv file to check if the same role title and company combination has appeared under different URLs (lines 28-31). This reposting detection identifies phantom listings that recruiters refresh periodically without closing the original posting, a common indicator of stale or fake opportunities.

Can Block G evaluate job postings without a live URL?

Yes, while Block G prefers a live URL to run the Playwright browser_navigate and browser_snapshot commands for freshness checks, it can evaluate text-only job descriptions. However, without the snapshot data, the Posting Freshness and Apply Button signals are unavailable, potentially defaulting the assessment to Proceed with Caution unless other signals are strongly positive.

Where is the Block G logic defined in the Career-Ops repository?

The complete Block G specification resides in modes/oferta.md at lines 101-152, with tier assignment logic at lines 39-43 and edge-case handling at lines 48-55. Supporting utilities appear in modes/_shared.md, status strings are defined in templates/states.yml, and the high-level architecture is documented in docs/ARCHITECTURE.md. The batch/batch-prompt.md file drives the LLM rendering of the final assessment output.

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 →