Akashik Protocol
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() and reckon()
  • Has its epoch and timestamp updated to commit time (not draft creation time)
  • Retains the same id as 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() — same
  • field.read({}, { caller: 'researcher' }) — explicit caller flag includes drafts

No other agent sees drafts, even if they share the same role.

Next