David
Blumenau
Menu
Small tools, real work

Pencil Page / Help in the margin

Useful help knows
when to wait.

A notebook should leave you space to think. I built Pencil Page’s timing policy to wait for enough new writing, then choose a quieter moment for feedback.

Recorded Swift decisions. Illustrative writing. Synthetic drawing changes, selected check times and fictional response readiness. No model, network, handwriting recognition or app timer runs here.

Timing lab / Pencil Page

Leave room
for the thought.

The app asks two different questions: may I review the writing? Then, if feedback is ready, may I show a note?

Four more timing cases

A brief thought

A short passage and a pause. Is there enough new work to justify a review?

FIELD NOTES / 0112.5 s
The margin waitsNo note presentation check yet.
Illustration only. Pen marks do not represent recognized text or measured handwriting.
Review check1 / 3

Wait before reviewing

The pen is still active. Give the person room to keep writing.

Active new writing
13 s
New strokes
26
Since last pen event
0.5 s

Last review checkWait

Last note checkNot checked

Next check: 16 s into the case.

Selected evaluations / not a live clock

30 s elapsed

A pause alone is not a reason to interrupt.

Inspect this case’s exact events

Every row below is output from the unmodified Swift source. “Begin”, “ready”, “failed” and “shown” are supplied fixture transitions. The controls above select recorded decisions; they do not calculate the policy.

A brief thought does not need an interruption
TimeEventResultSource reason
12 swrite-rangewrite-rangeSynthetic drawing-change series
12.5 sdecidewaitwriting
16 sdecidewaitshort pause
30 sdecidewaitpause, but only 13 s / 26 strokes of new work
What this replay proves Source & limits

The original timing policy ran.

The unmodified Swift scheduler at Pencil Page revision 07474bf was compiled on macOS. Nine fictional scenarios produced 34 review and presentation decisions. All matched the expected sequences. Eleven original extracted scheduler and ledger tests passed.

Source SHA-256
d21f2900bd5039dcbcef7cbc15e99c11355d6abed9269491750dd585b9dcb519
Runtime
Apple Swift 6.3.2 · XCTest through SwiftPM
Executed boundary
The pure scheduler and ledger.

The events are supplied.

Drawing changes, timestamps, request success or failure, visible-note counts and response readiness are synthetic. Checks occur only at the listed times.

This does not exercise PencilKit, recognition, model transport, the app coordinator’s timer or native note layout. A permitted review is not proof that a model answered. A permitted note is not proof that the app displayed it.

Download the execution receipt Download the fictional event inputs
Read all nine recorded cases Also available without JavaScript

A brief thought

A short passage and a pause. Is there enough new work to justify a review? A pause alone is not a reason to interrupt.

  1. 12.5 s · Wait before reviewingwriting
  2. 16 s · Wait before reviewingshort pause
  3. 30 s · Wait before reviewingpause, but only 13 s / 26 strokes of new work

A substantial pause

A longer passage, then the pen stops. Step through the pause and the separate permission to show a note. Enough new writing earns a review. Showing feedback has its own check.

  1. 60 s · Wait before reviewingwriting
  2. 64 s · Wait before reviewingshort pause
  3. 67 s · Review permittedpause after 61 s / 122 strokes of new work
  4. 75 s · Note permittedThe timing policy permits a note

A long stretch

The writing has accumulated for 150 active seconds. A small settling pause gives the review a quieter opening. New strokes add to the writing time. A small pause can release the waiting review.

  1. 149 s · Wait before reviewingdeadline reached; waiting for pen to settle
  2. 150.5 s · Review permitteddeadline: 150 s of unreviewed writing

Feedback while writing

A review was permitted. Its fictional response becomes ready just as the person starts writing again. Ready feedback can wait for the person.

  1. 67 s · Review permittedpause after 61 s / 122 strokes of new work
  2. 75 s · Hold the noteuser writing
  3. 77.5 s · Note permittedThe timing policy permits a note

A failed review

A review fails. The writing stays available for the next check, and repeated failures leave more time between attempts. Keep the work. Leave space before trying again.

  1. 70 s · Review permittedpause after 61 s / 122 strokes of new work
  2. 90 s · Wait before reviewingbacking off after failure (30 s)
  3. 110 s · Review permittedpause after 61 s / 122 strokes of new work
  4. 150 s · Wait before reviewingbacking off after failure (60 s)
  5. 175 s · Review permittedpause after 61 s / 122 strokes of new work

An untouched page

Check the same unchanged page five times, up to an hour later. Elapsed time does not turn an unchanged page into new work.

  1. 0 s · No new workunchanged
  2. 10 s · No new workunchanged
  3. 60 s · No new workunchanged
  4. 300 s · No new workunchanged
  5. 3600 s · No new workunchanged

Writing without a pause

The person keeps writing past the usual settling window. Accumulated work eventually reaches the hard deadline. Continuous writing cannot postpone the review indefinitely.

  1. 149 s · Wait before reviewingdeadline reached; waiting for pen to settle
  2. 208 s · Wait before reviewingdeadline reached; waiting for pen to settle
  3. 209.1 s · Review permittedhard deadline: 210 s of writing without a pause

Room in the margin

Compare a recent note, a longer wait, and one versus two notes already visible. Unsolicited notes respect time and available space.

  1. 11 s · Hold the noteuser writing
  2. 14 s · Note permittedThe timing policy permits a note
  3. 50 s · Hold the notecooldown 39 s
  4. 90 s · Note permittedThe timing policy permits a note
  5. 90 s · Hold the note2 unsolicited notes already visible

Writing during a request

New work accumulates while a request is in flight. Afterward it still observes the spacing between calls. New work stays available for the next check.

  1. 70 s · Review permittedpause after 61 s / 122 strokes of new work
  2. 90 s · Wait before reviewingrequest in flight; new work coalesces into the next check
  3. 99 s · Wait before reviewingcall spacing
  4. 100 s · Review permittedpause after 24 s / 200 strokes of new work

A separate native demonstration

What a note
looks like.

This real iPad Simulator recording shows a manual review, an actual Opus 5.5 response, a follow-up and a folded note thread.

The ink is synthetic PencilKit input. Manual Review starts the request. This clip demonstrates native feedback; it does not run the automatic timing cases above end to end.

Explore the smaller tools

Recorded in the product

A real Pencil Page margin note

Actual native app · iPad Simulator · synthetic Danish exercise ink · real Opus feedbackManual Review asks for feedback on a fictional Danish exercise. A margin card appears, a question continues its thread, and the card folds and unfolds. Waiting is cut from the recording. This is separate from the pure scheduling replay.
What happens in this recording

Actual native app · iPad Simulator · synthetic Danish exercise ink · real Opus feedback

Manual Review asks for feedback on a fictional Danish exercise. A margin card appears, a question continues its thread, and the card folds and unfolds. Waiting is cut from the recording. This is separate from the pure scheduling replay.

Two timing decisions

Read the work.
Respect the person.

Accumulated writing decides when there is enough to review. Presentation makes a separate decision about whether to show an unsolicited note. A response can be ready while its note still waits: the person may be writing, a recent note may need time, or the margin may already be full.

After a failed request, the policy keeps the writing available for another review and delays the next attempt. The goal is a useful companion that keeps track without turning every pause into an interruption.