All writing

Build log

My resume can't ship a claim my evidence doesn't clear

An AI drafts my public materials, so the public/private line can't live in anyone's memory. It's a machine-checked property of the file bytes — and the check already caught drift on my live site.

Key findings

  • One claim library, two lanes: a direct resume that may carry RESUME-ONLY material, and a web resume restricted to public-safe claims.
  • A fail-closed checker maps every paragraph to ranked claim IDs and verifies exact hash chains from source library to PDF bytes; an unmapped paragraph fails the build.
  • A read-only audit found the live resume PDF was a stale version; its state is now recorded as PUBLISHED-WITH-DISCLOSURE-DRIFT until a human approves the fix.

My resume is built by AI in two lanes from one claim library, and a fail-closed checker refuses any build that carries a claim past its disclosure rank.

That gate exists because the drafting is AI's job now. The library behind the resume holds 214 claim and lead cards, and a disclosure boundary that lives in memory is already broken — you just haven't found the leak yet.

Why does a resume need a disclosure gate?

Because two versions of the same document go to two very different audiences. The direct lane produces the file I hand to one specific employer; it may carry RESUME-ONLY material — outcomes I'll discuss in an application but won't post publicly. The web lane produces the copy anyone on the internet can download, and it is restricted to claims ranked PUBLIC or PUBLIC-SANITIZED (a bounded, pre-approved generalized form of a private claim).

Every card in the library carries one of five disclosure ranks: PUBLIC, PUBLIC-SANITIZED, RESUME-ONLY, PRIVATE, DO-NOT-USE. Both lanes build from the same library, so the dangerous failure is quiet reuse: a sentence that was fine in a direct application PDF getting rebuilt, untouched, into the public web version. I've already watched private context leak into a public surface once. A resume is the highest-stakes version of that leak I own.

Once an AI does the drafting, "I would never publish that" stops being a fact about me. It has to become a checkable property of the artifact.

The two-lane resume disclosure gate One claim library, two lanes, one fail-closed gate Claim library every paragraph maps to claim IDs, each ranked PUBLIC → DO-NOT-USE Fail-closed checker strictest rank per paragraph hash chain: library → bytes phone/email scan · 4-URL list Direct lane (one employer) may carry RESUME-ONLY Web lane (public internet) PUBLIC + PUBLIC-SANITIZED only The catch (2026-08-09): a read-only audit found the live site serving a stale web PDF pointer state: PUBLISHED-WITH-DISCLOSURE-DRIFT · corrected build: PREPARED-NOT-PUBLISHED remediation stays blocked until a human approves the exact site change
How a resume claim reaches the public web: paragraph → claim IDs → disclosure rank → fail-closed checker → lane. The bottom row is the real catch: the live site was serving a stale web PDF, now recorded under a named honest state. Diagram source: this page; maps 1:1 to _check-resume-artifacts.py.

What does the fail-closed checker verify?

_check-resume-artifacts.py is fail-closed: anything it cannot positively prove safe is a failure, not a skip. On every bundle it:

One gate is hard-coded on top of all that: the build manifest must record publication approval as false. The bundle structurally cannot claim it is cleared for the public web. Publishing is a separate human action, the same discipline as this site's own exact-byte publish gate.

None of this is glamorous. That's deliberate. The glamorous alternative — an AI assuring me it "kept the private parts private" — is the least trustworthy sentence in the whole pipeline.

Did it actually catch anything?

Yes, on the live site, on 2026-08-09. A read-only audit compared the published web resume PDF against the current bundle and found the live file was a stale version: v5 on the web while v5.1 sat locally as the prepared candidate. The stale file carried disclosure drift: outcome claims tied to a former employer, ranked RESUME-ONLY under current policy, were sitting on the public internet. Details generalized to protect the people and organizations involved.

That was my system's own failure, and I'll say so plainly. The policy had tightened, the checker guarded every new build, and nothing re-checked what was already published. A gate that inspects new artifacts while old ones rot on the web is half a gate.

What I trust is what happened next: nothing silent. The pointer file _current.json now records the live lane as PUBLISHED-WITH-DISCLOSURE-DRIFT, a named honest state, with the corrected candidate held at PREPARED-NOT-PUBLISHED. The fix stays blocked until a human approves the exact site change. The drift is a fact in the record, not a memory in my head.

This is the same shape as everything else in how I know my AI is right: the boundary is a property of the artifact, the failure has a name, and a green result means something specific.

So the question I'd put to you: if an AI drafts anything that ships under your name — a resume, a bio, a proposal — where does your public/private line actually live? And if a stale copy of last year's version is still sitting on some public surface right now, what would tell you?

Method & data

Method: the live two-lane resume pipeline: the fail-closed artifact checker, the current pointer and build manifest, the 2026-08-09 visual-QA receipt, and the read-only live-site audit that found the disclosure drift
Data: patterns and methods only; no names, dollar figures, addresses, case identifiers, or confidential content · Last checked: 2026-08-14

How this was made

AI-drafted, adversarially checked, human-directed. My AI assistant wrote this from the system's own records — the fail-closed checker `_check-resume-artifacts.py`, the `_current.json` pointer, the v5.1 build manifest, and the signed visual-QA receipt. A separate AI session then tried to break every claim against those records, and automated privacy and readability gates ran before publish. I direct this pipeline, own every boundary in it, and audit published pages on a rolling basis — if you find an error, tell me and it goes in the corrections log, dated, never silent.

I'm Ali — I run real life-and-work admin on AI agents, then check their work in the open. More at /about.

Published under my standards. Found an error? Tell me — corrections go in the corrections log, dated, never silent.

Cite this

@online{ali2026resumegate,
  author = {Ali},
  title  = {My resume can't ship a claim my evidence doesn't clear},
  date   = {2026-08-14},
  url    = {https://alidoes.ai/resume-disclosure-gate/}
}

Caught something I got wrong? Send it directly. Confirmed corrections go in the corrections log.