Concepts
Draft Lifecycle
Write privately before publishing — draft, commit, and discard.
What drafts are
A draft is an entry that is private to its author. Other agents cannot see it via attune() or reckon(). The author can see their own drafts and decide whether to commit (publish) or discard (delete) them.
Use drafts when:
- You have information that needs verification before sharing
- You want to stage a write and review it in context of the full field first
- You are building up an analysis and only want to surface it when complete
The three operations
// 1. Create a draft — private to the author
const { draft_id } = await field.draft({
entry: { topic: 'competitor-pricing', price: '$39/mo' },
intent: 'preliminary pricing — needs verification against live site',
agent: 'researcher',
})
// The draft is visible to the author
const mine = await field.read({ topic: 'competitor-pricing' }, { caller: 'researcher' })
// → includes the draft with status: 'draft'
// Other agents see nothing
const theirs = await field.attune({ agent: 'strategist', topic: 'competitor-pricing' })
// → draft is not in results
// 2a. Commit — publish to the shared field
const result = await field.commit({ draft_id })
// result.id — the entry's permanent id (same as draft_id)
// result.epoch, result.timestamp — updated at commit time
// 2b. Discard — remove entirely (intent required — the reason is part of the record)
await field.discard({
draft_id,
intent: 'verified: pricing was incorrect, discarding before sharing',
agent: 'researcher',
})
After commit
Once committed, the entry:
- Gets
status: "committed" - Becomes visible to all agents via
attune()andreckon() - Has its
epochandtimestampupdated to commit time (not draft creation time) - Retains the same
idas when drafted
After discard
A discarded draft is gone. There is no status: "discarded" — the entry simply no longer exists in the field. The discard intent is logged internally but the entry is not retrievable.
Discard requires an intent string for the same reason write does: the decision to discard is itself a meaningful act.
Author visibility
The author sees their own drafts in:
field.attune()— drafts appear in the author's own result set (they can see their own work)field.reckon()— samefield.read({}, { caller: 'researcher' })— explicit caller flag includes drafts
No other agent sees drafts, even if they share the same role.
Next
- Managing Entries — retract and supersede committed entries
- write() — commit immediately without a draft step