Drafts persist across a restart with no network
pnpm test src/draftsCheck & evidence
Recorded status: passed
Source revision: c41e09d7b2a8f3615e0d2b9c7a4f18e3d5b60a92
pnpm test src/drafts6 tests passedDuration: 1800 ms
Losing signal on a trail loses the note you were writing.
Review the evidence below. Open /ideation in Pi when you are ready to accept the change.
Field Notes needs a connection to save. Drop signal mid-sentence and the draft is gone.
Notes save on the device first, sync when signal returns, and flag conflicts instead of overwriting.
4 changed areas. Review changed boundaries and criteria before any new approval.
[
"Real-time collaboration"
][
"Real-time collaboration",
"Syncing attachments"
][
{
"decision": "How is “the offline indicator feels right” checked? A test for the state, plus your airplane-mode walkthrough",
"reason": "A test proves the state; only a person can judge whether it feels right."
}
][
{
"decision": "How is “the offline indicator feels right” checked? A test for the state, plus your airplane-mode walkthrough",
"reason": "A test proves the state; only a person can judge whether it feels right."
},
{
"decision": "Keep both versions when edits conflict",
"reason": "Silently picking a winner is the failure this change exists to fix.",
"rejected": "Last write wins"
}
][
{
"id": "draft-store",
"criterion": "Drafts persist across a restart with no network",
"check": {
"cmd": "pnpm test src/drafts"
}
},
{
"id": "sync-queue",
"criterion": "Queued edits sync in order when signal returns",
"check": {
"cmd": "pnpm test src/sync"
}
},
{
"id": "conflicts",
"criterion": "A conflicting edit shows a banner instead of overwriting",
"check": {
"cmd": "pnpm test src/conflicts"
}
},
{
"id": "status",
"criterion": "The offline indicator reflects real connectivity",
"check": {
"cmd": "pnpm test src/status"
}
},
{
"id": "full-suite",
"criterion": "The whole test suite passes",
"check": {
"cmd": "pnpm test"
}
},
{
"id": "typecheck",
"criterion": "Type checking passes",
"check": {
"cmd": "pnpm typecheck"
}
},
{
"id": "calm",
"criterion": "Writing in airplane mode feels calm",
"check": {
"judgment": "In airplane mode, write a note, reconnect, and confirm nothing was lost."
}
}
][
{
"id": "draft-store",
"criterion": "Drafts persist across a restart with no network",
"check": {
"cmd": "pnpm test src/drafts"
}
},
{
"id": "sync-queue",
"criterion": "Queued edits sync in order when signal returns",
"check": {
"cmd": "pnpm test src/sync"
}
},
{
"id": "conflicts",
"criterion": "A conflicting edit keeps both versions and shows a banner",
"check": {
"cmd": "pnpm test src/conflicts"
}
},
{
"id": "status",
"criterion": "The offline indicator reflects real connectivity",
"check": {
"cmd": "pnpm test src/status"
}
},
{
"id": "full-suite",
"criterion": "The whole test suite passes",
"check": {
"cmd": "pnpm test"
}
},
{
"id": "typecheck",
"criterion": "Type checking passes",
"check": {
"cmd": "pnpm typecheck"
}
},
{
"id": "calm",
"criterion": "Writing in airplane mode feels calm",
"check": {
"judgment": "In airplane mode, write a note, reconnect, and confirm nothing was lost."
}
}
][
{
"id": "store",
"title": "Local draft store",
"goal": "Persist drafts on the device before any network call.",
"risk": "low",
"needs": [],
"acceptanceIds": [
"draft-store"
]
},
{
"id": "queue",
"title": "Sync queue",
"goal": "Replay queued edits in order when connectivity returns.",
"risk": "medium",
"needs": [
"store"
],
"acceptanceIds": [
"sync-queue"
]
},
{
"id": "conflicts",
"title": "Conflict banner",
"goal": "Surface conflicting edits rather than overwriting.",
"risk": "medium",
"needs": [
"queue"
],
"acceptanceIds": [
"conflicts"
]
},
{
"id": "status",
"title": "Offline indicator",
"goal": "Show real connectivity state.",
"risk": "low",
"needs": [],
"acceptanceIds": [
"status",
"full-suite",
"typecheck",
"calm"
]
}
][
{
"id": "store",
"title": "Local draft store",
"goal": "Persist drafts on the device before any network call.",
"risk": "low",
"needs": [],
"acceptanceIds": [
"draft-store"
]
},
{
"id": "queue",
"title": "Sync queue",
"goal": "Replay queued edits in order when connectivity returns.",
"risk": "medium",
"needs": [
"store"
],
"acceptanceIds": [
"sync-queue"
]
},
{
"id": "conflicts",
"title": "Conflict banner",
"goal": "Keep both versions of a conflicting edit and say so, rather than overwriting either.",
"risk": "medium",
"needs": [
"queue"
],
"acceptanceIds": [
"conflicts"
]
},
{
"id": "status",
"title": "Offline indicator",
"goal": "Show real connectivity state.",
"risk": "low",
"needs": [],
"acceptanceIds": [
"status",
"full-suite",
"typecheck",
"calm"
]
}
]Implementation is ready for human review, not accepted or merged.
Recorded snapshot only; source freshness is compared with the run’s recorded fingerprint, not the live workspace.
Arrows run from prerequisite to dependent deliverable. These are dependencies, not a timeline.
Verification record · Latest recorded evidence, checked against this brief and the recorded source.
Read each row from commitment → check → evidence state. Grouped by the deliverable responsible for it.
Persist drafts on the device before any network call.
pnpm test src/draftsRecorded status: passed
Source revision: c41e09d7b2a8f3615e0d2b9c7a4f18e3d5b60a92
pnpm test src/drafts6 tests passedDuration: 1800 ms
Replay queued edits in order when connectivity returns.
pnpm test src/syncRecorded status: passed
Source revision: c41e09d7b2a8f3615e0d2b9c7a4f18e3d5b60a92
pnpm test src/sync9 tests passedDuration: 3170 ms
Keep both versions of a conflicting edit and say so, rather than overwriting either.
pnpm test src/conflictsRecorded status: passed
Source revision: c41e09d7b2a8f3615e0d2b9c7a4f18e3d5b60a92
pnpm test src/conflicts12 tests passedDuration: 4540 ms
Show real connectivity state.
pnpm test src/statusRecorded status: passed
Source revision: c41e09d7b2a8f3615e0d2b9c7a4f18e3d5b60a92
pnpm test src/status15 tests passedDuration: 5910 ms
pnpm testRecorded status: passed
Source revision: c41e09d7b2a8f3615e0d2b9c7a4f18e3d5b60a92
pnpm test18 tests passedDuration: 7280 ms
pnpm typecheckRecorded status: passed
Source revision: c41e09d7b2a8f3615e0d2b9c7a4f18e3d5b60a92
pnpm typecheckFound 0 errors.Duration: 8650 ms
In airplane mode, write a note, reconnect, and confirm nothing was lost.
Human judgment required.
Persist drafts on the device before any network call. Reviewed independently.
Attempts: 1 · Review: passed · Local commit: 5eedbed
Replay queued edits in order when connectivity returns. Reviewed independently.
Attempts: 1 · Review: passed · Local commit: 5f0cf94
Keep both versions of a conflicting edit and say so, rather than overwriting either. Reviewed independently.
Attempts: 1 · Review: passed · Local commit: 5f2c33b
Show real connectivity state. Reviewed independently.
Attempts: 1 · Review: passed · Local commit: 5f4b6e2
Annotations reach the coordinating session, not the builder. Feedback never changes approval, scope, or acceptance automatically. Use explicit Pi controls to pause or stop.
No feedback recorded. When served by the artifacts extension, use its Review panel to send questions or suggestions.
None specified.
A test proves the state; only a person can judge whether it feels right.
Silently picking a winner is the failure this change exists to fix.
Rejected: Last write wins
Execution mode: strict. Independent review remains required. These are requested boundaries, not proof of approval.
Exact files or trailing-slash directory prefixes. “.” covers ordinary project files only; protected internals and dependency manifests/lockfiles remain excluded.
pnpm test src/draftspnpm test src/syncpnpm test src/conflictspnpm test src/statuspnpm testpnpm typecheckCommands 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.
Persist drafts on the device before any network call.
store · needs: none · criteria: draft-store
Replay queued edits in order when connectivity returns.
queue · needs: store · criteria: sync-queue
Keep both versions of a conflicting edit and say so, rather than overwriting either.
conflicts · needs: queue · criteria: conflicts
Show real connectivity state.
status · needs: none · criteria: status, full-suite, typecheck, calm
Brief fingerprint
f8599f30b7856bd019505905e8ae5410420b52b214f9f0e46987b7591e93e01a