This is a submission for the Hacktoberfest Open-Source AI Challenge: Week 3: Slow and Steady.
Part of my work happens at a computer, and part happens at the bench. I wanted a calmer way to move between them without losing the small instructions that determine what should happen next.
I started by asking AI to find waiting time in a protocol. Longer instructions led me to a different problem: keeping the source, its exceptions and the reason for a decision connected when the protocol changes.
What I Built
BenchSloth is a local attention organizer for research notes. Original passages sit beside an Attention Map, a movable evidence pinboard and a review queue. It doesn't execute an experiment or observe physical progress.
The desk can be resized, rearranged or reduced to one region in Focus Mode. Each pin keeps its original occurrence ID and text. Keyboard controls and compact mobile regions provide alternatives to dragging. Moving a card changes the workspace, not the protocol.
The Revision Impact Desk connects that workspace across versions:
Compare → inspect impact → review evidence → confirm or abstain → recover context → return to the source.
Try BenchSloth in your browser → No account, model download or installation required. This is the v0.9.1 static demo; its workspace, decisions and countdowns run in your browser.
Keeping the reason beside the revision
Here is a synthetic example, created independently of the private SOPs:
OLD: “Wait 7 minutes.”
OLD exception: “Do not use source 2 if the seal is damaged.”
NEW: “Wait 9 minutes.”
NEW exception: “Do not use source 2 unless the seal has been inspected.”
The number changes, but the exception matters too. I want to inspect both versions, their monitoring language and the reason I previously left the question open.
BenchSloth flags literal duration, monitoring, order and deletion cues. It keeps OLD and NEW IDs separate. A link brings an exception into view; it does not establish a scientific dependency or prove that the two passages mean the same thing. Display pairings can remain uncertain.
After inspecting the originals, I can confirm a correspondence, reject it or abstain. An optional rationale stays with the exact hashes, source IDs and displayed context. Editing either version makes the earlier annotation stale. Its original reason remains available, and Undo retains the decision history.
Even identical wording does not carry approval forward: an exception elsewhere may have changed. Opening NEW is a separate confirmation, with no inherited source confirmations or timer permissions.
Tracking a duration without granting a break
The earlier unattended-timer gate offered zero intervals across five real SOPs. That did not mean there was no useful timing information. Compound instructions, ranges, active work and equipment language often fell outside its narrow grammar.
I separated tracking a source duration from deciding whether something may be left unattended.
The tracker requires an exact original token, my interpretation of it, a review of the restrictions and a manual start. A range needs an explicit value within its bounds; there is no automatic midpoint. “Overnight” stays qualitative. Choosing an hour from “an hour or overnight” does not settle that alternative.
Concurrent trackers retain separate source IDs. Retrieved original conditions stay beside the clock, with their applicability still for review. Replacing the source invalidates the older trackers.
Breathing Room is quiet, but it does not imply that observation can stop. The demonstration counts down ten real seconds while preserving the source's seven-minute wording. Expiry does not confirm the step or complete the science. Browser clocks are a convenience, and reload does not resume an alarm.
Help me pick up where I left off
Context Recovery brings together five things: where the browser workflow stopped, what changed, which conditions need attention, which questions remain open and where to look next.
The complete handoff works without AI. It includes current source links, version-qualified comparisons, organizer annotations and tracker status. A later decision or source change marks it stale rather than quietly presenting old context as current.
I implemented one final, bounded Gemma 3 4B candidate for explaining that context. It receives original excerpts, exact changes and server-recorded state through a typed JSON contract. Browser-only organizer annotations and trackers remain in the complete deterministic handoff; the server does not pretend to know them.
A citation proves identity, not that a paraphrase follows from the evidence. Noncanonical model wording remains unverified. Wrong source versions, stale state, invalid references and missing handoff sections cannot become accepted instructions. No response can authorize a timer.
In the final local verification, 27 of 28 frozen scenarios were attempted: 26 returned responses, one timed out at the unchanged 100-second limit, and the last case was left unattempted under the stop rule. Only 3/27 attempted workflows produced complete exact handoffs, versus 27/27 for the paired deterministic baseline. Mean returned-request time was 57.98 seconds. A textual audit found one invented edit assertion; the application rejected it. Most other failures repeated sections or omitted context. The public evaluation summary and raw audit preserve those results; the complete local captures remain archived.
The complete deterministic handoff remains the default. I have not established a communication or usefulness advantage for the model, and no independent person has scored readability or correction effort. I am not promoting automatic evidence selection, revision classification or this explanation layer as a reliable semantic authority.
How I Built It
The first version of BenchSloth was mostly concerned with finding waiting periods in a protocol. Once I tested it against longer laboratory instructions, I realized that wasn't the hardest part. A protocol can tell you to wait for an hour, prepare something fifteen minutes before that interval ends, and keep a sample under specific conditions throughout. Recognizing the hour doesn't tell you how those instructions fit together. And if the protocol changes, you need to know which earlier decisions no longer apply.
That became the more interesting problem for me: not just counting time, but keeping the original instructions, their exceptions, and the reasons behind a decision connected. I ended up giving deterministic code more responsibility than the language model, which wasn't what I'd expected when I started.
The application uses Python, FastAPI and plain browser JavaScript. The deterministic document path supports 512 nonempty occurrences and 100,000 characters, independently of the frozen model parser's smaller budget. Raw text, its hash and original offsets are retained. Headings, warnings and repeated identical instructions each have their own global occurrence ID.
Explicit references and ordinals are resolved against the complete document before candidate limits apply. Oversized model context is rejected rather than shortened invisibly. Heading recognition remains heuristic; native document styling is not fully interpreted.
I reused small engineering ideas from my other projects: stable identity contracts, frozen comparisons, blank review provenance and revision-bound evidence gates. No research datasets or scientific conclusions were imported. Earlier reused MIT code and local video tooling remain credited. I did not add partner services merely to list integrations.
What the comparisons changed
Gemma's failures changed the design more than its successful examples did.
For source-grounded questions, a correct passage did not guarantee a correct relationship. The model could retrieve relevant evidence and still confuse “during” with “after.” On the earlier frozen 24-question comparison, the combined candidate produced 13/24 fully correct workflows versus 14/24 for strong rules, with 8 unsupported evidence selections versus 7. Its mean local model-request time was 25.40 seconds, compared with about 0.00067 seconds for retrieval. These are software timings, not researcher time savings.
Focused relationship classification and generated review briefs also lost to their templates. The revision pilot reached correspondence F1 0.889 versus 0.970 for the original deterministic baseline; exact semantic cards were 7/20 versus 9/20. A later deterministic correction reached 11/20, retained separately rather than substituted into the frozen result.
The historical comparisons remain documented, and the public release includes the final Context Recovery evaluation contract, aggregate results and raw audit. The related synthetic examples and implementer-visible labels limit generalization. I have not rewritten the older results around a more flattering story.
What happened with the real SOPs
The first private audit admitted only 2 of 5 complete SOPs. Their 70 admitted occurrences were quoted exactly, but the larger documents were rejected. Nothing was silently truncated; practical coverage was still poor.
After separating document capacity from model capacity, all five full texts passed: 48, 22, 58, 57 and 115 occurrences — 300/300 retained and quoted exactly. The final regression run repeated those lookups and version/state checks with model transport forbidden.
The source-timing pass found 34 exact numeric tokens across 34 occurrences. Test actions exercised confirmation guards, retained restrictions, expiry without step completion, source replacement and Undo. They are software-mechanics checks, not proof that every token is a useful interval or that no relevant duration was missed.
Human-reviewed scientific accuracy remains unvalidated. Eighteen source-bound cases are ready for owner review, with blank fields to accept, reject, correct or leave unresolved. The earlier 300-card audit and 50-card priority set are preserved. No model or automated test filled a human review field.
Private posters, presentations and notebooks describe biological observations. I did not establish the exact SOP-version, sample and run provenance needed to compare those outcomes with this software audit. They are not evidence of BenchSloth's performance, and their contents stay private.
Demo
Watch the 72-second walkthrough · Captions
The walkthrough uses actual viewport captures of the local v0.9 application, including its real ten-second demonstration tracker. It is an edited sequence of captures, not continuous video of a new Gemma inference. The deployed v0.9.1 adds private visual notes to that workflow.
For a first minute, inspect a passage, pin it and start the clearly labeled demonstration. Compare OLD and NEW, inspect the changed restriction, record an abstention and edit NEW again. The earlier decision becomes stale. Open NEW separately, recover context and follow the current source link back to its original wording.
The self-contained replay needs no Ollama. Resizing, pinning, literal lookup, review, manual timing and deterministic recovery run in the browser with runtime network connections denied. Historical Gemma outputs are labeled as recorded. Final native response records are separate experimental evidence, never a prepared substitute for a fresh request.
The final pass verifies 163 Python tests and 60 JavaScript assertions, the actual loopback API/browser workflow, desktop and 320px/390px layouts, keyboard controls, quiet motion, source isolation and playback. Quiet controls and reduced-motion rules were checked; this is not a full assistive-technology, physical-device or independent usability study.
Code and Version Scope
Public source and release · Evaluation page
The public v0.9.1 release contains the self-contained browser demo, selected Python and JavaScript implementation files, synthetic examples and sanitized evaluation evidence. It preserves the earlier v0.6 repository history without exposing the private development history. The selected source files are inspectable implementation evidence; this smaller package is not a complete one-command local server distribution.
Render serves only an allowlisted static directory. It does not expose FastAPI, Ollama, private research inputs or a live model endpoint. The strict build checks each published file against its expected SHA-256 hash. Historical Gemma outputs are labeled as recorded; no prepared response is presented as fresh inference.
A photograph can be a note without becoming a conclusion
The new visual-notes panel attaches a camera or uploaded image to a selected original passage, with an observation and an explicit manual review status. It performs no AI image interpretation. Photos stay in browser-tab memory until the user explicitly exports a private JSON file; the site does not upload them.
The browser makes a resized, lossy JPEG preview and strips embedded metadata. That preview is not primary scientific image data. Unaltered instrument images and acquisition metadata must stay in appropriate research storage. Changing the source marks earlier visual notes for another review. This is a way to retain context, not a claim that BenchSloth can assess a biological result.
Why Open Innovation Matters
The application and original artwork are MIT-licensed; Gemma weights have separate terms. Private protocols and reviewer exports are excluded from the demo and public code.
Open development makes it possible to inspect a failed request and the baseline that beat it, then see how the design changed. No independent researcher has completed the usability trial, and I have not measured productivity gains.
For me, Slow and Steady means leaving enough context for a decision to be reconsidered. The useful part is what should not disappear when instructions change: the original evidence, the exception and the reason someone left a question open.
Prize Categories
Overall: the research-organizer workflow is the main entry: preserving evidence, exceptions and decisions so returning to interrupted work takes less reconstruction. Actual time savings still need a human trial.
Best Use of Render: Render hosts the public static front end and walkthrough. No private research-processing server is deployed.
Best Use of Gemma: the project contains genuine local Gemma 3 4B integration and a frozen comparison of its Context Recovery responses. This is experimental use, with its failures disclosed. The deterministic handoff remains the default; a model advantage is not established.
AI tools supported the development of BenchSloth and the preparation of this article. The source code, evaluations, and recorded model behavior are available to inspect.

Top comments (0)