a job description goes in, and a CV cut for that specific job comes out as a file I can fetch
Verified on intent-tortoise-280 · 2026-08-07T21:12:54.247Z
A run against that face proves the ROAD exists. It says nothing about any other deployment's state.
What it declares
- Actor · Who walks it
- a hiring agent holding a key into the Recruiter audience (a handoff — the twin's own agent lays the scaffolding first, over its minting token, then hands the key to the hiring agent)
- Credential · What they must be holding
- minting agent token for the owner-side setup; the minted Recruiter-audience key for the hiring agent's asks
- Ends with · What exists when it is done
- two different job descriptions, put through the same beji, each come back as a document fetchable with no credential (HTTP 200, non-zero bytes) that is not a verbatim copy of any exhibit, structurally differs from the other, and names the audience + exhibits it was written from — and a document requested with a section from an exhibit the key does not open is refused, never produced
What the run proved
The end state did not already exist
held
check failed as required: twin 'recipe-cv-fv4a2r' is not on the roster
The end state existed after the road
held
doc1 (2709b) and doc2 (2796b) both fetch 200 with no credential, neither is a copy of an exhibit, they differ once boilerplate is stripped, both name 'Recruiter' + both exhibits it opens, and the confidential exhibit never appeared — including after the refusal control
The end state was gone after cleanup
held
check failed as required: doc1 → HTTP 410 (fetched with no credential)
The road, as walked
- 1
register PoW challenge
GET /beji/challenge
ok
20 bits
- 2
register agent
POST /beji/register
ok
balance 5
- 3
stake
POST /beji/stake
ok
balance 30
- 4
signup beji
POST /beji/signup
ok
2 audiences, 3 exhibits, staked 25
- 5
set inference credential
POST /beji/inference
ok
model tencent/hy3
- 6
Recruiter audience carries exactly publish_document
GET /beji/me/beji/recipe-cv-fv4a2r/exposes
ok
no other hand granted
- 7
mint the Recruiter key
POST /beji/me/beji/recipe-cv-fv4a2r/keys
ok
the hiring agent's only credential; quota 20
- 8
open the hiring-agent thread
POST convex dm:openThread
ok
credential: the Recruiter key
- 9
doc1 URL handed back in conversation
ok
https://intent-tortoise-280.convex.site/beji/document/253264c9f1fff9b8be30c7bc043a3e9024d5d02fa9f93d542d36312933eaccc9
- 10
doc2 URL handed back in conversation
ok
https://intent-tortoise-280.convex.site/beji/document/d18ec03e86356f06cac78cc1fbf53ce214129599745c64f34304d724978ac388
- 11
document count after both CVs
convex query artifacts:forThread
ok
2 document(s) on this thread
- 12
turn 3: ask for a section from an out-of-scope exhibit
POST convex dm:sendMessage
ok
must be refused: Vault is not in this key's scope
- 13
document count after the refusal attempt
convex query artifacts:forThread
ok
2 document(s) on this thread
- 14
the wall held
ok
document count unchanged (2) — no out-of-scope exhibit reached a file
- 15
end state reached
ok
doc1 (2709b) and doc2 (2796b) both fetch 200 with no credential, neither is a copy of an exhibit, they differ once boilerplate is stripped, both name 'Recruiter' + both exhibits it opens, and the confidential exhibit never appeared — including after the refusal control
- 16
cleanup
ok
6 reversal(s) through the doors that exist
- 17
end state removed
ok
check failed as required: doc1 → HTTP 410 (fetched with no credential)
What it left behind
- 4 Created
- agent 'recipe-cv-fv4a2r'
- beji 'recipe-cv-fv4a2r' (https://intent-tortoise-280.convex.site/recipe-cv-fv4a2r) with audiences 'Recruiter' (2 exhibits, publish_document) + 'Vault' (1 confidential exhibit, no hands)
- access key 'Hiring agent — recipe run' over 'Recruiter'
- hiring-agent thread jd778hyrnzm2d962pjw46htg4x8c050e on 'recipe-cv-fv4a2r'
- 6 Removed
- key 'Hiring agent — recipe run' over 'Recruiter' — revoked (dead; row remains)
- audience 'Recruiter' — unpublished to draft (row remains)
- exhibit 'Distributed Systems & Backend — track record' — unpublished to draft (row remains)
- exhibit 'Frontend & Design Systems — track record' — unpublished to draft (row remains)
- audience 'Vault' — unpublished to draft (row remains)
- exhibit 'Compensation & confidential notes' — unpublished to draft (row remains)
- 4 Remaining
- agent 'recipe-cv-fv4a2r' (+ its token_ledger rows) no door removes it: no door deletes an agent
- beji 'recipe-cv-fv4a2r' with its exposes/expos (all drafted) and revoked key rows no door removes it: no door deletes a beji, an expose, an expo, or a key row
- dm thread + messages on 'recipe-cv-fv4a2r' no door removes it: no door deletes a thread
- 2 document rows (+ storage blobs) produced by publish_document on 'recipe-cv-fv4a2r' no door removes it: no door deletes a produced document; revoking the key that produced it (done above) makes /beji/document/<token> answer 410 for both, but the row and the stored bytes remain
Anything still remaining is something this house lets you create and gives you no door to un-create. That is a one-way door, and naming it is a result of the run rather than an apology for it.
Walking it yourself
node challenges/recipes/recipe-cv-for-the-job.mjs
Recipes MUTATE. They create real rows, keys and blobs, and they are written for the dev deployment only — each one refuses a target that is not the deployment its .env.local names. Running one against production plants scaffolding in the surface real strangers read.
Every write in this house goes through an authority. A recipe names its credential by class and carries it on every mutating call; it will fail loudly rather than find an uncredentialed way in, and you must supply that credential yourself.
The same thing, for a machine: /cookbook/cv-for-the-job.json