Ideation / Change brief

Offline drafts for Field Notes

Losing signal on a trail loses the note you were writing.

offline-drafts · revision 1

Review this agreement, then open /ideation in Pi to approve or revise it. No work starts before confirmation.

The change

Before

Field Notes needs a connection to save. Drop signal mid-sentence and the draft is gone.

Proposed change

After

Notes save on the device first, sync when signal returns, and flag conflicts instead of overwriting.

The existing experience → the agreed outcome. Read together with the invariants and boundaries below.

Must hold

How the work connects

Arrows run from prerequisite to dependent deliverable. These are dependencies, not a timeline.

store → queuequeue → conflicts
  1. Local draft storelow risk · Independent starting point
  2. Sync queuemedium risk · Needs: store
  3. Conflict bannermedium risk · Needs: queue
  4. Offline indicatorlow risk · Independent starting point

Acceptance criteria

Verification PLAN · Checks to perform, not results. No execution evidence is claimed.

Read each row from commitment → check → evidence state. Grouped by the deliverable responsible for it.

Local draft store

store
Deliverable intent

Persist drafts on the device before any network call.

draft-store

Drafts persist across a restart with no network

Command
pnpm test src/drafts
pendingCheck planned

Sync queue

queue
Deliverable intent

Replay queued edits in order when connectivity returns.

sync-queue

Queued edits sync in order when signal returns

Command
pnpm test src/sync
pendingCheck planned

Conflict banner

conflicts
Deliverable intent

Surface conflicting edits rather than overwriting.

conflicts

A conflicting edit shows a banner instead of overwriting

Command
pnpm test src/conflicts
pendingCheck planned

Offline indicator

status
Deliverable intent

Show real connectivity state.

status

The offline indicator reflects real connectivity

Command
pnpm test src/status
pendingCheck planned
full-suite

The whole test suite passes

Command
pnpm test
pendingCheck planned
typecheck

Type checking passes

Command
pnpm typecheck
pendingCheck planned
calm

Writing in airplane mode feels calm

Human judgment

In airplane mode, write a note, reconnect, and confirm nothing was lost.

pendingHuman review planned

Human judgment required.

Boundaries & choices

Out of scope

  • Real-time collaboration

Delegated

None specified.

Decisions & rationale

How is “the offline indicator feels right” checked? A test for the state, plus your airplane-mode walkthrough

A test proves the state; only a person can judge whether it feels right.

Execution boundaries & mechanics

Execution mode: strict. Independent review remains required. These are requested boundaries, not proof of approval.

Writable paths

  • src/

Exact files or trailing-slash directory prefixes. “.” covers ordinary project files only; protected internals and dependency manifests/lockfiles remain excluded.

Exact commands

pnpm test src/drafts
pnpm test src/sync
pnpm test src/conflicts
pnpm test src/status
pnpm test
pnpm typecheck

Commands must assert success with exit 0. Expected outcomes are explanatory. Approved scripts execute project code: tool policy is not an OS sandbox.

No time, token or attempt budget applies: work continues until it is verified, you pause or stop it, or it stops to ask because a check keeps failing.

Host-managed local commit: permitted. No push, merge, or deploy.

Units

Local draft store low

Persist drafts on the device before any network call.

store · needs: none · criteria: draft-store

Sync queue medium

Replay queued edits in order when connectivity returns.

queue · needs: store · criteria: sync-queue

Conflict banner medium

Surface conflicting edits rather than overwriting.

conflicts · needs: queue · criteria: conflicts

Offline indicator low

Show real connectivity state.

status · needs: none · criteria: status, full-suite, typecheck, calm

Brief fingerprint

cc851c7f3d8369fba298c74ba80a671af6f2cf2cd0e9b78017b1b9b3dc4492ef