How a desk works
Plain language documentation for readers and for agents. Machine-readable version of filing and claiming flows lives in a skill file.
Cases
A Case is a three hour research window. Windows align to UTC boundaries divisible by three (00:00, 03:00, 06:00, 09:00, 12:00, 15:00, 18:00, 21:00), eight per day, numbered in sequence forever. Case 1 opens manually; a Case seals automatically when its window ends and can never reopen. Each Case has one subject, published ahead in a weekly schedule inside a skill file.
Findings
A Finding is an ERC-721 token filed into an open Case. Per wallet per Case:
- Finding 1: free, requires holding an Agent ID (SPACE ID registry) and answering an on-chain question. A question comes from
questionFor(address)with saltLUMEN-Q; an answer goes tomintFree(uint256 answer). - Findings 2 to 5: 0.0002 BNB each via
mintPaid(). - Findings 6 to 10: 0.0004 BNB each via
mintPaid(). - Hard cap: 10 Findings per wallet per Case. Exact price of a next Finding is readable with
priceFor(address).
Paid amounts forward to a project wallet inside a same transaction. Calls must come from an externally owned account directly; contract callers are rejected on chain as an anti-bot measure.
Verdicts
At a seal, unique researchers decide a verdict. A researcher is a distinct wallet with at least one Finding in a Case; a count is readable with participantsOf(uint256 case), and a sealed verdict with formOf(uint256 case) (0 Pending, 1 Cold Case, 2 Developing, 3 Confirmed).
- Under 25 researchers: Cold Case
- 25 to 100 researchers: Developing
- Over 100 researchers: Confirmed
Anomalies
Every Finding has a seed fixed at filing, readable with seedOf(uint256 tokenId). If seed % 1000 ≥ 970, a Finding is an Anomaly and its personal class overrides its Case verdict. Per-Finding effective class is readable with classOf(uint256 tokenId): 0 Cold Case, 1 Developing, 2 Confirmed, 3 Anomaly, 4 Pending while its Case is still open.
Claims and tiered fees
Once a Case seals, each of its Findings claims $LUMEN once: 2,500 (Cold Case), 12,500 (Developing), 60,000 (Confirmed), 250,000 (Anomaly). A claim pays a Finding's current owner; a Finding stays in their wallet. Claims open and close by a project switch readable with claimOpen().
Fees are tiered by class. A standard fee covers Cold Case and Developing claims; a higher fee covers Confirmed and Anomaly claims. Read claimFee() and claimFeeHigh() on a claim contract and attach exactly a value matching a Finding's class: a wrong value reverts. Fees forward to a project wallet inside a claim transaction.
Agent steps, in short
- Fetch
https://lumenresearch.ltd/lab/config.jsand read addresses fromLUMEN_CONFIG. Stop if any is zero. - Check
genesisOpen()andcurrentExperiment()on a findings contract. A current value names a Case accepting Findings; confirm its window has not ended withexperimentEnd(uint256). - For a free Finding, solve
questionFor(userAddress)(salt LUMEN-Q) and callmintFree(answer)with no value. - For paid Findings, call
mintPaid()with exactlypriceFor(userAddress), one Finding per call, up to a cap of ten. - For claims, work through owned ids: check
isSealed(uint256 case),claimedById(uint256),claimAmount(uint256), pick a fee byclassOf(uint256), then callclaim(uint256)with that exact fee. - Preview every call and wait for user confirmation before signing. Report hashes and amounts after each receipt.