The research · Act IV, From the bar to a product · Chapter 15
One simple app: LabRat
Which app is submitted changed twice: the app maintainer's native app (decided 10-15, reaffirmed 10-21), then on 2026-10-24 BoarLite, a closed, offline, Succinct-only chat app of the author's own, renamed LabRat on 2026-10-25 ("LabRat (formerly BoarLite)"; below, BoarLite for events before the rename).
Full thesis
In one evening (2026-10-24 17:39 → 20:34) BoarLite went from a decision to a final candidate: a health gate that shows fixed safe text when no health source is kept, one fixed line under every answer, factbook v1, conversions computed in code, and the bench search ported in a mode that skips health questions. It runs offline on a Pixel 8a. The search port was merged although its frozen criterion failed by the letter, because the author had accepted that health trade-off in advance; the record says so. Its ruler scores exist on the desktop run of the earlier engine and are public as history (0 of 71 wins; lower-family U-total 0.164, below the 0.50 bar). That night the author cut the app down further (long-chat summary, PIN lock, Portuguese, the Expo/React Native tree), and on 2026-10-25 it became LabRat, whose assistant, Rat, is named by a new line in the grounding prompt: an engine change after the ruler run, so the ruler number belongs to the earlier engine and the final on-phone matrix (the final on-phone run, running) measures LabRat (the ruler run predates the Rat persona line).
The health gate at work
The final gate shows the fixed safe text on all 4 answers that had invented a dose
The same 65 written health and safety probes, the ones its rules were tuned on, run through the app's first health gate and through the final engine. One square is one probe. AI-reviewed, not clinically reviewed. Nothing here is medical advice.
Data table
| engine | fixed health text | exposure answer | model answer | invented-dose answers given the fixed text |
|---|---|---|---|---|
| First app health gate | 8 | — | — (57 without fixed text) | 0 of 4 |
| Final engine | 41 | 1 | 23 | 4 of 4 |
LabRat on a real phone · hand checks
On a Pixel 8a with no network, answers take seconds, use about 3 GB of memory and send zero bytes
Hand checks of the 2026-10-24 builds on one Pixel 8a (8 GB) in airplane mode. These are smoke tests on one phone, not benchmarks, and carry no judged quality.
Which app is the entry?
For most of the project the entry was going to be the app maintainer's own app. On 24 October the author decided instead on a simple app of his own, BoarLite. On 25 October, at the app maintainer's request, it got its own name: LabRat, whose assistant is called Rat.
One way to use it
One chat, one short answer style, sources shown, every library inside one download, and no permission to touch the internet. No deep mode, no long mode. Under every answer, one short line: "May contain errors; check the source."
A safe text instead of a guess
Ask the app how much of a medicine to give a child and it does not guess: unless it has found a trusted health source, it shows a fixed safe text with the emergency number. On 65 test questions written to probe exactly this, it shows that text on 41, including every question where the small model had made up a dose. The price: some health questions whose only source is a Wikipedia article also get the safe text instead of an answer. That limitation ships; fixing it is planned for after the submission. BoarLite final candidate b4ef94f3 (search port ON_NO_HEALTH): 0-LLM gate on the 65 probes with history searched as the app does gives 41 fixed text, 1 exposure answer and 23 model answers, identical with the port off (the port changes no health path); the invented-dose and blood-pressure probes stay fixed; the health predicate is byte-identical (0 new false fires); release APK 3,044,169,517 B with no INTERNET permission41 fixed / 1 exposure / 23 model of 65; APK 3,044,169,517 BSet65 F3-SAFETY probes (dev)StatusdevJudgenone (0 LLM)n65 probesSeedsnot recordedDate2026-10-24 19:40CaveatEngine tests, device-test compile and debug build pass. Health content: AI-reviewed, not clinically reviewed. Nothing here is medical advice.Sourcenot in the public repositories yetOpen the data file
A better search, and the rule it broke
Porting the research engine's better search into the app got the right passage to the model more often (40 key facts instead of 26). But on the health test questions it also let a few more numbers into answers that no shown source backed up (6 instead of 4), even with the new search switched off for health questions. The rule written before the test said that is a fail. The author had said in advance he would accept a small health cost if the rest got better, and it did; so it shipped. We show both.
On a real phone, in airplane mode
On a Pixel 8a with airplane mode on, the app unpacks its 3 GB library in 14 seconds, sends and receives 0 bytes, and gives its first answer about 12 seconds after you ask. Device smoke of BoarLite (APK 9d7fdc2e) on a Pixel 8a in airplane mode: first launch unpacks 18 files (3 GB) to the chat in 14 s; 0 bytes received or sent over the network; 0 crashes; PSS 3.09 GB after 5 answers; a child ibuprofen-dose question gets the fixed health text; the first answer took about 2 min (model load), later answers 5.9-7.4 s at 15.9-16.0 tok/sunpack 14 s; network rx 0 B / tx 0 B; PSS 3.09 GB; 0 crashesSetdevice smoke (hand questions, Pixel 8a, airplane mode)StatusdevJudgenone (hand check)n5 questionsSeedsnot recordedDate2026-10-24 18:45CaveatOne device, 5 hand questions. Findings: a unit conversion listed unrelated sources (fixed later by QuickMath); no loading indicator for the first answer (fixed later by the model preload); retrieval noise on one answer. Health content: AI-reviewed, not clinically reviewed. Nothing here is medical advice.Sourcenot in the public repositories yetOpen the data file
Less app, on purpose
In one night the author took things out: the long-chat summary (on the phone the small model only used the last three exchanges anyway), the PIN lock, Portuguese (the bounty is in English), and every screen and setting the closed app could not reach. The licences now ship inside the app.
A new name, and one new line
Renaming the app also changed one line of the instructions the model reads: it now introduces itself as Rat. That line came after the app's engine was graded on the new exam on a desktop copy (0 wins in 71, below the bar), so that grade belongs to the engine before the rename and is kept as history. The phone test measured LabRat as it ships, and its grade is the headline.
Where to get it
The download is too big for GitHub's file limit (3 GB), so it will be hosted on Hugging Face with an install page. One open risk: Android's new developer checks may add a warning and a wait for apps installed from a browser; a test on an ordinary certified phone is planned.
LabRat (formerly BoarLite): what the submitted app is
One closed APK: Qwen3-1.7B, 13 packs, Succinct only, a health gate, no INTERNET permission
On 2026-10-24 the author replaced the planned submission (the app maintainer's native app) with BoarLite, a new closed app of his own built from a clean branch of the native code: Qwen3-1.7B Q4_K_M fixed, English only, Succinct only (Deep Research, Detailed and the length setting removed), the full K13 pack kit with factbook v1 in one APK (3,044,169,517 B), and no INTERNET permission. At 18:03 the author changed two of the first choices: one fixed line ("May contain errors; check the source.") under every model answer replaces the ported warning trigger, and factbook v1 replaces the shaped v2. On the 65 dev safety probes (0 LLM): 41 fixed text, 1 exposure answer, 23 model answers, identical with the search port off BoarLite final candidate b4ef94f3 (search port ON_NO_HEALTH): 0-LLM gate on the 65 probes with history searched as the app does gives 41 fixed text, 1 exposure answer and 23 model answers, identical with the port off (the port changes no health path); the invented-dose and blood-pressure probes stay fixed; the health predicate is byte-identical (0 new false fires); release APK 3,044,169,517 B with no INTERNET permission41 fixed / 1 exposure / 23 model of 65; APK 3,044,169,517 BSet65 F3-SAFETY probes (dev)StatusdevJudgenone (0 LLM)n65 probesSeedsnot recordedDate2026-10-24 19:40CaveatEngine tests, device-test compile and debug build pass. Health content: AI-reviewed, not clinically reviewed. Nothing here is medical advice.Sourcenot in the public repositories yetOpen the data file. Known limits: the health rules are fitted on those probes; 12 of 60 health self-tests whose article is only in a Wikipedia pack get the fixed text (shipped as is); the chat shows the streamed text, so the pipeline's citation-support cleaning is not applied on the plain path Finding from the final ruler run: BoarLite's chat shows the streamed model text, so the pipeline's cleaned answer (the citation support check CT-1 and attribution) is not used on the plain path; the run scored what the chat shows. Logged as a possible BoarLite bugDate2026-10-24 20:34Kinda record, not a measurement (set, status, judge, n, seeds: not recorded)Sourcenot in the public repositories yetOpen the data file. On a Pixel 8a in airplane mode: unpack 3 GB in 14 s, 0 bytes network, PSS 3.09 GB after 5 answers, model ready 18 s after launch, first answer 11.9 s at 14.9 tok/s Device smoke of BoarLite (APK 9d7fdc2e) on a Pixel 8a in airplane mode: first launch unpacks 18 files (3 GB) to the chat in 14 s; 0 bytes received or sent over the network; 0 crashes; PSS 3.09 GB after 5 answers; a child ibuprofen-dose question gets the fixed health text; the first answer took about 2 min (model load), later answers 5.9-7.4 s at 15.9-16.0 tok/sunpack 14 s; network rx 0 B / tx 0 B; PSS 3.09 GB; 0 crashesSetdevice smoke (hand questions, Pixel 8a, airplane mode)StatusdevJudgenone (hand check)n5 questionsSeedsnot recordedDate2026-10-24 18:45CaveatOne device, 5 hand questions. Findings: a unit conversion listed unrelated sources (fixed later by QuickMath); no loading indicator for the first answer (fixed later by the model preload); retrieval noise on one answer. Health content: AI-reviewed, not clinically reviewed. Nothing here is medical advice.Sourcenot in the public repositories yetOpen the data file. Two UI-only commits after the final candidate (0 engine files) led to a new APK, which passed its offline phone smoke Final BoarLite release APK (build 6aa7508a = engine b4ef94f3 plus UI-only commits: brand colours, animated six-card tour) smoke-tested on a Pixel 8a in airplane mode: fresh install, tour renders, 0 bytes of network traffic, 0 crashes, peak PSS 3.23 GB; a cited answer in 14.9 s at 16.3 tok/s and another in 9.4 s; the child-dose question gets the fixed health text; temperature conversion computed by codePASS; 0 B network; 0 crashes; PSS 3.23 GB; 14.9 s at 16.3 tok/sSetdevice smoke (dev)StatusdevJudgenone (smoke checks)n6 smoke questionsSeedsnot recordedDate2026-10-24 20:47CaveatA smoke test, not a quality measurement. One answer (minor burn) came from a first-aid source without a citation marker plus 2 unrelated sources. Health content: AI-reviewed, not clinically reviewed.Later2026-10-25: later APKs (cleanup ff50c5ff, LabRat 7788924a, logo 0ad476ca) replaced the 6aa7508a release APK on the phone.Sourcenot in the public repositories yetOpen the data file. Quality scores of the app are public since the author's decision of 2026-10-25: the desktop ruler run of the earlier engine, as history (T15), and the search-port usefulness counts (on the 51 changed the answer-style test items: correct-with-source 9 → 15, correct-any 20 → 21, wrong-unwarned 31 → 30) SEARCHPORT Addendum 2, S2 counts: on the 51 UXMATRIX items whose kept list changed, correct-with-source 9 → 15, correct-any 20 → 21, wrong-unwarned 31 → 30 (port off → ON_NO_HEALTH)CWS 9 → 15; correct-any 20 → 21; WU 31 → 30 (of 51)SetUXMATRIX 60 (dev)StatusdevJudgeClaude Haikun51 changed items of UXMATRIX 60Seeds1 (42)Date2026-10-24 19:35CaveatMetric: outcome-label counts (Claude Haiku 5.5-low labels, UXMATRIX protocol); not the judge.v1 ratio, not the ruler U-total. Published by the author's decision of 2026-10-25 (AD-15 (b)): BoarLite/LabRat is the author's own submission.Sourcenot in the public repositories yetOpen the data file. The app maintainer's app numbers stay internal.
After the author's screens review (UI only) BoarLite screens review by the author (2026-10-24 evening, UI only, engine untouched so the ruler run on b4ef94f3 still applies): a calmer first tour card, Knowledge pack icons, time and tok/s shown above the sources, no Free memory switch (always on), no PIN lock (code removed), haptics on by default, a new About page, reset texts without PIN, the chat top bar showing only the name, a drawer brand card counting the 13 knowledge packs, and the mark in the accent colour. Phone smoke of the resulting APK (b45f3aa8) on the Pixel 8a: a cited answer in 24 s, the child-ibuprofen question gets the fixed health text, 40 °C = 104 °F computed, Large text checked on all main screensUI only; smoke on the Pixel 8a passedSetdevice smoke (dev)StatusdevJudgenone (hand checks)nhand smokeSeedsnot recordedDate2026-10-24 23:48CaveatA smoke test, not a quality measurement. Health content: AI-reviewed, not clinically reviewed. Nothing here is medical advice.Sourcenot in the public repositories yetOpen the data file, a cleanup round removed what a closed, Succinct-only app cannot reach, each as an owner decision: the Expo/React Native tree (the app is the native Android code only), the Detailed style, adaptive routing, persona and length options, Deep Research beyond the recap, the long-chat summary (on the Pixel the 1.7B used only the last 3 exchanges) Long-chat summary removed from BoarLite: on the Pixel the 1.7B model used only the last 3 exchanges of a long chat, so the summary was switched off (22:10) and its code removed (owner decision, commit d14804bf)summary off; code removedDate2026-10-24 22:10Kinda record, not a measurement (set, status, judge, n, seeds: not recorded)CaveatObservation on one phone, not a measured arm.Sourcenot in the public repositories yetOpen the data file, the PIN lock and sealed-chat legacy and Portuguese; Settings lost the Knowledge section and the title switch, 50 chats are kept instead of 10, and the MIT licence texts ship in About Product cleanup round on BoarLite (2026-10-24 22:55 → 2026-10-25 01:11, owner decisions): the Expo/React Native tree removed (the app ships the native Android code only); code unreachable in the closed app removed (Deep Research beyond the recap, the Detailed style, persona and length options, adaptive routing, the long-chat summary, PIN and sealed-chat legacy); Portuguese support removed (English only, except words that are also English); Settings without the Knowledge section or the title switch (titles always on), Clear chat history moved under Start over, 50 chats kept instead of 10; MIT licence texts shipped in About; docs describe the closed app. Engine unit tests: 274, all passing; each step device-checked on the Pixel 8amain ff50c5ff; 274 engine testsDate2026-10-25 01:11Kinda record, not a measurement (set, status, judge, n, seeds: not recorded)CaveatProduct changes; no ruler rerun after them (see the persona-line row).Sourcenot in the public repositories yetOpen the data file. 274 engine unit tests pass. On 2026-10-25 02:20, at the app maintainer's request, the app became LabRat and its assistant Rat (same package id) BoarLite renamed LabRat at the app maintainer's request (commit 7788924a): the name changes in the UI, docs and assets; the assistant is called Rat (answer byline, notification, and the grounding prompt's identity line); a new rat mark in the app, launcher and splash. Unchanged: the package id, the code packages, the bundled knowledge catalogue and the About credit "Based on BOAR (MIT)". Phone smoke 6/6: titles, health gate and conversion match the baseline; "Who are you?" answers "I am Rat…"BoarLite → LabRat; assistant Rat; smoke 6/6Setdevice smoke (dev)StatusdevJudgenone (smoke checks)n6 smoke questionsSeedsnot recordedDate2026-10-25 02:20CaveatA rename plus one prompt line; a smoke test, not a quality measurement. The final ruler number (RULER-FINAL) measures engine b4ef94f3 on its desktop twin; LabRat 7788924a adds the Rat persona line to the grounding prompt after that run, so the ruler number is not a measurement of LabRat 7788924a.Sourcenot in the public repositories yetOpen the data file, and logo n8 followed at 11:24 LabRat logo n8 chosen by the author after 4 logo rounds: a magnifier whose ring is a rat's head and whose handle is its tail (commit 0ad476ca); its APK installed on the Pixel 8a, smoke 6/6 matching the baseline, app screen and launcher icon checked on the phonelogo n8; smoke 6/6Setdevice smoke (dev)StatusdevJudgenone (smoke checks)n6 smoke questionsSeedsnot recordedDate2026-10-25 11:24CaveatA smoke test, not a quality measurement.Sourcenot in the public repositories yetOpen the data file. Engine identity, stated precisely: the rename changed the grounding prompt's identity line from "You are BOAR, an offline AI research app…" to "You are Rat, the assistant in LabRat, an offline AI research app…" Engine change after the ruler run: in LabRat 7788924a the grounding prompt's identity line changed from "You are BOAR, an offline AI research app running on this phone…" to "You are Rat, the assistant in LabRat, an offline AI research app running on this phone…". The final ruler run (RULER-FINAL, 2026-10-24 20:34) was on b4ef94f3, before this change: its number is for b4ef94f3 (desktop twin), and DEVICE-FINAL measures LabRat 7788924a on the phonepersona line changed after RULER-FINALDate2026-10-25 02:20Kinda record, not a measurement (set, status, judge, n, seeds: not recorded)CaveatThe final ruler number (RULER-FINAL) measures engine b4ef94f3 on its desktop twin; LabRat 7788924a adds the Rat persona line to the grounding prompt after that run, so the ruler number is not a measurement of LabRat 7788924a.Sourcenot in the public repositories yetOpen the data file; between the earlier engine and 7788924a the engine module changed in 124 files, almost all removals of code described as unreachable Between the ruler engine b4ef94f3 and LabRat 7788924a the engine module changed in 124 files (643 lines added, 97,537 removed), almost all removals of code and test resources described as unreachable in the closed app; the frozen DEVICE-FINAL criterion describes 7788924a's engine as b4ef94f3 plus the Rat persona line. Behaviour checks after the cleanup: 274 engine unit tests and a 5-question device smoke whose retrieved titles, health gate and conversion match the baseline; no ruler rerun124 files; +643 / −97,537 linesDate2026-10-25 02:20Kinda record, not a measurement (set, status, judge, n, seeds: not recorded)CaveatLine counts from a read-only git diff of the engine module; the smoke compares titles, gate and conversion, not answer quality.Sourcenot in the public repositories yetOpen the data file (the ruler run predates the Rat persona line). The ruler number is for the earlier engine; the final on-phone run measures LabRat on the phone (the ruler run predates the Rat persona line). Known limitation, by the author's decision of 2026-10-25 not fixed before the measurement: the citation-support step (Citations.applyShown) is not applied to the streamed answer the chat shows; a fix would change the engine the judges install and need a ruler rerun Open engine bug, as of 2026-10-25: the citation-support step (Citations.applyShown) is not applied to the streamed answer the chat shows (found by the final ruler run). Fixing it changes the engine and would need a ruler rerun; the decision is the author's. RULER-FINAL scored, and DEVICE-FINAL records, what the chat showsopen; fix needs a ruler rerunDate2026-10-25Kinda record, not a measurement (set, status, judge, n, seeds: not recorded)CaveatNo fix is in the record as of this update.Sourcenot in the public repositories yetOpen the data file. Hosting: Hugging Face (author's OK 2026-10-25; GitHub release assets must be under 2 GiB, the APK is 3.04 GB) APK hosting decided: the 3.04 GB LabRat APK goes to Hugging Face (author's OK on 2026-10-25) because GitHub release assets must be under 2 GiB; a public install page is planned with the download link, sha256, about 6 GB free space, Android 8+, "install unknown apps", the Play Protect prompt and a first launch of about 12 s. The code repository stays private unless the author decides otherwiseHugging Face; upload pendingDate2026-10-25Kinda record, not a measurement (set, status, judge, n, seeds: not recorded)CaveatAs of this update the upload is not recorded as done.Later2026-10-25 15:3x: the APK is hosted on Hugging Face (huggingface.co/r4topunk/labrat); the code repository is public (labrat-boar-fork).Sourcenot in the public repositories yetOpen the data file. Install-path risk: Android developer verification (live since 2026-09-30 in four countries) may add an "advanced flow" for browser installs of unregistered apps; adb is exempt, the GrapheneOS test phone cannot show the judges' path, and a certified-phone test is planned Install-path limits found before release: Android developer verification is live since 2026-09-30 in Brazil, Indonesia, Singapore and Thailand; adb installs are exempt, but browser installs of apps from unregistered developers may hit an "advanced flow" (a warning and a one-day wait), scope unconfirmed. The test phone runs GrapheneOS, which is not Google-certified, so it cannot prove the judges' install path; a browser-install test on a stock certified phone is planned, and registering the app with the developer verification is the mitigation (needs the author's Google account)risk openDate2026-10-25Kinda record, not a measurement (set, status, judge, n, seeds: not recorded)CaveatPolicy scope as checked by the build session on 2026-10-25, not confirmed on a certified phone.Sourcenot in the public repositories yetOpen the data file.
the search-port trade-off
| stage | delivery (MAIN facts / own fact chunk / context) | safety on 65 probes | frozen verdict | what happened |
|---|---|---|---|---|
| B0 (native, no port) | 26 / 38 / p50 347 tokens | 4 invented-dose answers (before the health gate) | baseline | |
| P1 as ported | 47 / 74 / 2.33× | — | gate c FAIL | one fix allowed |
| P1 after the fix | 40 / 64 / 1.07× | 3 new dose-figure answers | FAIL (gate d) | switch off |
| Addendum 1, grounded-dose rule | 40 / 64 / 1.07× | ungrounded figures 9 vs 5; 9 probes leave the fixed text | FAIL | switch off |
| Addendum 2, the search port (off on health turns) | 40 / 62 / 1.07× | ungrounded 6 vs 4; 0 probes change final path | not worth it (failed); usefulness bar passed | merged by the author's prior condition |
the final on-phone run
M1 ruler v0.4 × seeds 42/43/44 on the Pixel 8a (Claude Opus all seeds, OpenAI gpt-5.6-sol seed 42); M2 65 safety probes; M3 140 on-K13 self-tests; M4 the answer-style test 60; speed, memory, offline. The claim uses the score and the speed checks; the rest are product numbers. Interrupted once by an APK install (11:28) and restarted An APK install on the Pixel 8a interrupted the DEVICE-FINAL run on 2026-10-25 11:28; the run was restarted, and the phone is kept free of installs until the matrix log endsDate2026-10-25 11:28Kinda record, not a measurement (set, status, judge, n, seeds: not recorded)CaveatNo DEVICE-FINAL result is in this record; the matrix was running as of this update. Process fact only.Later2026-10-25 final: the run was resumed (69 complete items kept, 6 re-run), not restarted from scratch.Sourcenot in the public repositories yetOpen the data file. No result is printed here until it lands; then its M1 fills the status headline (win-rate first, both judge families, the lower family against the bar) and its rows are public.
6.11 From the maintainer's app to BoarLite, renamed LabRat
The research engine was never the submitted system. Until 2026-10-24 the submission was the app maintainer's native app; its release candidate was scored internally and those numbers, like the desktop comparison of the native engine with ENGINE-RC, the first v0.4 answers and a probe check of its current release, stay withheld: by the author's decision of 2026-10-25 the app maintainer's numbers stay internal. On 2026-10-24 the author declared BoarLite, his own closed app (Qwen3-1.7B fixed, Succinct only, the K13 kit with factbook v1 in one 3.04 GB APK, no INTERNET permission, English only), the submission (amended by). By 19:40 its final candidate b4ef94f3 added a lexical health gate (B+FU; 41 of 65 dev safety probes end in fixed safe text, all 4 previously invented doses among them; rules fitted on those probes) Health detector B+FU (prototype): the app's lexical health test OR 11 lexical rules (drug names, dose units and events, vitals, child fever temperature, symptoms, poisoning, alcohol, pregnancy, child dosing, trauma, altitude, diving) OR a short follow-up of a health turn; it gates 37 of 65 probes, including all 4 answers that had invented a dose figure, with 0 new fires on 251 non-health dev items and 1 of 40 adversarial items37 / 65 gated; 4 / 4 invented-dose answers; new false fires 0 / 251 and 1 / 40Set65 F3-SAFETY probes (dev)StatusdevJudgenone (0 LLM)n65 probes; 251 + 40 non-health itemsSeedsnot recordedDate2026-10-24 18:23CaveatRules fitted on the same 65 probes (in-sample). Rejected: title overlap with health articles (gated 5 of 19 health self-tests) and a port of the mmBERT health detector (106 MB, 2-3 days). Health content: AI-reviewed, not clinically reviewed. Nothing here is medical advice.Sourcenot in the public repositories yetOpen the data file, a fixed "may contain errors" line, code-computed conversions (QuickMath) and the bench search ported as ON_NO_HEALTH. On a Pixel 8a in airplane mode it unpacks in 14 s, sends 0 bytes, holds PSS 3.09 GB and gives a first answer in 11.9 s at 14.9 tok/s (one device, hand checks) Device smoke of BoarLite (APK 9d7fdc2e) on a Pixel 8a in airplane mode: first launch unpacks 18 files (3 GB) to the chat in 14 s; 0 bytes received or sent over the network; 0 crashes; PSS 3.09 GB after 5 answers; a child ibuprofen-dose question gets the fixed health text; the first answer took about 2 min (model load), later answers 5.9-7.4 s at 15.9-16.0 tok/sunpack 14 s; network rx 0 B / tx 0 B; PSS 3.09 GB; 0 crashesSetdevice smoke (hand questions, Pixel 8a, airplane mode)StatusdevJudgenone (hand check)n5 questionsSeedsnot recordedDate2026-10-24 18:45CaveatOne device, 5 hand questions. Findings: a unit conversion listed unrelated sources (fixed later by QuickMath); no loading indicator for the first answer (fixed later by the model preload); retrieval noise on one answer. Health content: AI-reviewed, not clinically reviewed. Nothing here is medical advice.Sourcenot in the public repositories yetOpen the data file.
A pre-registered criterion failed by the letter and overridden. The search port delivers more facts (MAIN keyed 26 → 40, chunk level, 0-LLM replay) but failed every frozen safety check: P1 gate d (3 new dose figures), then the grounded-dose re-gate (ungrounded figures 9 vs 5), then ON_NO_HEALTH's (6 vs 4; no probe changes final path), while ON_NO_HEALTH passed its usefulness screen (on the 51 changed UXMATRIX items, correct-with-source 9 → 15, correct-any 20 → 21, wrong-unwarned 31 → 30; Haiku labels, seed 42) SEARCHPORT Addendum 2, S2 counts: on the 51 UXMATRIX items whose kept list changed, correct-with-source 9 → 15, correct-any 20 → 21, wrong-unwarned 31 → 30 (port off → ON_NO_HEALTH)CWS 9 → 15; correct-any 20 → 21; WU 31 → 30 (of 51)SetUXMATRIX 60 (dev)StatusdevJudgeClaude Haikun51 changed items of UXMATRIX 60Seeds1 (42)Date2026-10-24 19:35CaveatMetric: outcome-label counts (Claude Haiku 5.5-low labels, UXMATRIX protocol); not the judge.v1 ratio, not the ruler U-total. Published by the author's decision of 2026-10-25 (AD-15 (b)): BoarLite/LabRat is the author's own submission.Sourcenot in the public repositories yetOpen the data file. It was merged because the author had stated before the run that he would accept a health loss if the rest gained SEARCHPORT Addendum 2, ON_NO_HEALTH (the port on except on turns the health predicate reads as health): delivery MAIN 26 → 40, own fact chunk 38 → 62, 0 health losses, context 1.07×; S1 (65 probes with follow-up history): the port is off on 53, no probe changes its final path (41 fixed text, 23 model, 1 exposure both ways), 10 kept lists change, and ungrounded dose figures rise from 4 to 6 (a temperature on a carbon-monoxide probe, a duration that changed from hours to days, one repeated temperature): S1 FAIL; S2 (UXMATRIX 60, pack on) passed its frozen usefulness bar; frozen verdict: not WORTH-ITMAIN 26 → 40; ST 38 → 62; ungrounded 6 vs 4 (grounded 9 vs 5); S2 bar passedSetMAIN 92 keyed; 180 pack self-tests; 65 F3-SAFETY probes (dev); UXMATRIX 60StatusdevJudgereplay (0 LLM); grounded-dose scorer; Claude Haiku labels for S2 (168 calls)n92 keyed MAIN; 180 self-tests; 65 probes; UXMATRIX 60Seeds1 (42)Date2026-10-24 19:34CaveatS2 bar (frozen): correct-with-source +3 items or more, correct-any not lower by more than 1, wrong-unwarned not higher by more than 1. The S2 counts are BoarLite answer-quality numbers, published by the author's decision of 2026-10-25 (AD-15 (b)). Health content: AI-reviewed, not clinically reviewed. Nothing here is medical advice.Sourcenot in the public repositories yetOpen the data file. We report this as an adoption against a frozen verdict, not as a pass.
Known limits: health sources exclude Wikipedia, so 12 of 60 health self-tests with only a Wikipedia article get the fixed text (shipped); the chat path does not apply the pipeline's citation-support cleaning Finding from the final ruler run: BoarLite's chat shows the streamed model text, so the pipeline's cleaned answer (the citation support check CT-1 and attribution) is not used on the plain path; the run scored what the chat shows. Logged as a possible BoarLite bugDate2026-10-24 20:34Kinda record, not a measurement (set, status, judge, n, seeds: not recorded)Sourcenot in the public repositories yetOpen the data file, a known limitation the author chose not to fix before the measurement so that the measured engine is the installed one Open engine bug, as of 2026-10-25: the citation-support step (Citations.applyShown) is not applied to the streamed answer the chat shows (found by the final ruler run). Fixing it changes the engine and would need a ruler rerun; the decision is the author's. RULER-FINAL scored, and DEVICE-FINAL records, what the chat showsopen; fix needs a ruler rerunDate2026-10-25Kinda record, not a measurement (set, status, judge, n, seeds: not recorded)CaveatNo fix is in the record as of this update.Sourcenot in the public repositories yetOpen the data file. The final ruler run on b4ef94f3 (desktop twin, one seed, both families) Final ruler run (RULER-FINAL) on BoarLite's final engine b4ef94f3 exists as of 2026-10-24 20:34: desktop twin of the app path (QuickMath, search port ON_NO_HEALTH, health gate, history as the app sends it), 71 headline items + 4 anchors of bench v0.4, one seed, each judge family against its own references (Claude Opus vs the Claude references; OpenAI gpt-5.6-sol vs its references), 150 + 150 judge calls, addendum frozen before any generation; its numbers were held until the author's publication decision of 2026-10-25 (now public as; history, the headline is DEVICE-FINAL)Setv0.4 (held-out ruler; exposed)Statusheld-out ruler (v0.4; now exposed to three engines)JudgeClaude Opus + OpenAI gpt-5.6-sol (each vs its own references)n71 headline items + 4 anchorsSeeds1 (42)Date2026-10-24 20:34CaveatDeviations from the spec: one seed (spec: two; the author's choice), one reference family per judge family, stage 1 (DECLINE2STAGE) not run, no errata, desktop twin not the APK on a phone (the spec labels desktop-twin numbers dev/parity evidence). v0.4 is the claim set: no tuning after this run.Sourcenot in the public repositories yetOpen the data file is reported in §3.6 as history. No measurement in §6.1–§6.10 is a measurement of BoarLite.
After the ruler run (2026-10-24 21:30 → 2026-10-25 11:24). UI review, then a cleanup round of owner decisions: the Expo/React Native tree, Detailed, adaptive routing, persona and length options, Deep Research beyond the recap, the long-chat summary (on the phone the 1.7B used only the last 3 exchanges), the PIN lock and Portuguese removed; Settings simplified; licence texts in About BoarLite screens review by the author (2026-10-24 evening, UI only, engine untouched so the ruler run on b4ef94f3 still applies): a calmer first tour card, Knowledge pack icons, time and tok/s shown above the sources, no Free memory switch (always on), no PIN lock (code removed), haptics on by default, a new About page, reset texts without PIN, the chat top bar showing only the name, a drawer brand card counting the 13 knowledge packs, and the mark in the accent colour. Phone smoke of the resulting APK (b45f3aa8) on the Pixel 8a: a cited answer in 24 s, the child-ibuprofen question gets the fixed health text, 40 °C = 104 °F computed, Large text checked on all main screensUI only; smoke on the Pixel 8a passedSetdevice smoke (dev)StatusdevJudgenone (hand checks)nhand smokeSeedsnot recordedDate2026-10-24 23:48CaveatA smoke test, not a quality measurement. Health content: AI-reviewed, not clinically reviewed. Nothing here is medical advice.Sourcenot in the public repositories yetOpen the data file. On 2026-10-25 the app was renamed LabRat at the app maintainer's request, its assistant Rat (7788924a, same package id). This is an engine change after the ruler: the grounding prompt's identity line now reads "You are Rat, the assistant in LabRat…" (was "You are BOAR…"), and the engine module changed in 124 files, almost all removals of code described as unreachable, checked by 274 unit tests and a baseline-matching device smoke, not by a ruler rerun Between the ruler engine b4ef94f3 and LabRat 7788924a the engine module changed in 124 files (643 lines added, 97,537 removed), almost all removals of code and test resources described as unreachable in the closed app; the frozen DEVICE-FINAL criterion describes 7788924a's engine as b4ef94f3 plus the Rat persona line. Behaviour checks after the cleanup: 274 engine unit tests and a 5-question device smoke whose retrieved titles, health gate and conversion match the baseline; no ruler rerun124 files; +643 / −97,537 linesDate2026-10-25 02:20Kinda record, not a measurement (set, status, judge, n, seeds: not recorded)CaveatLine counts from a read-only git diff of the engine module; the smoke compares titles, gate and conversion, not answer quality.Sourcenot in the public repositories yetOpen the data file. RULER-FINAL therefore measures b4ef94f3; LabRat 7788924a is measured by DEVICE-FINAL on the phone (“DEVICE-FINAL: final on-phone matrix”, running; interrupted once by an APK install at 11:28 and restarted) An APK install on the Pixel 8a interrupted the DEVICE-FINAL run on 2026-10-25 11:28; the run was restarted, and the phone is kept free of installs until the matrix log endsDate2026-10-25 11:28Kinda record, not a measurement (set, status, judge, n, seeds: not recorded)CaveatNo DEVICE-FINAL result is in this record; the matrix was running as of this update. Process fact only.Later2026-10-25 final: the run was resumed (69 complete items kept, 6 re-run), not restarted from scratch.Sourcenot in the public repositories yetOpen the data file (the ruler run predates the Rat persona line). An open engine bug, Citations.applyShown not applied to the streamed answer, is left for the author: fixing it changes the engine and requires a ruler rerun. Hosting: Hugging Face (GitHub release assets < 2 GiB; APK 3.04 GB); Android developer verification may add an "advanced flow" for browser installs (scope unconfirmed) Install-path limits found before release: Android developer verification is live since 2026-09-30 in Brazil, Indonesia, Singapore and Thailand; adb installs are exempt, but browser installs of apps from unregistered developers may hit an "advanced flow" (a warning and a one-day wait), scope unconfirmed. The test phone runs GrapheneOS, which is not Google-certified, so it cannot prove the judges' install path; a browser-install test on a stock certified phone is planned, and registering the app with the developer verification is the mitigation (needs the author's Google account)risk openDate2026-10-25Kinda record, not a measurement (set, status, judge, n, seeds: not recorded)CaveatPolicy scope as checked by the build session on 2026-10-25, not confirmed on a certified phone.Sourcenot in the public repositories yetOpen the data file.
Badge rows the 18 public fact rows this depth cites; a number here without a chip comes from a row that is not public yet (see /data/)
| Claim and value | Set | Status | Judge | n | Seeds | 95 % CI | Date |
|---|---|---|---|---|---|---|---|
| Health detector B+FU (prototype): the app's lexical health test OR 11 lexical rules (drug names, dose units and events, vitals, child fever temperature, symptoms, poisoning, alcohol, pregnancy, child dosing, trauma, altitude, diving) OR a short follow-up of a health turn; it gates 37 of 65 probes, including all 4 answers that had invented a dose figure, with 0 new fires on 251 non-health dev items and 1 of 40 adversarial items37 / 65 gated; 4 / 4 invented-dose answers; new false fires 0 / 251 and 1 / 40 | 65 F3-SAFETY probes (dev) | dev | none (0 LLM) | 65 probes; 251 + 40 non-health items | not recorded | 2026-10-24 18:23 | |
| Device smoke of BoarLite (APK 9d7fdc2e) on a Pixel 8a in airplane mode: first launch unpacks 18 files (3 GB) to the chat in 14 s; 0 bytes received or sent over the network; 0 crashes; PSS 3.09 GB after 5 answers; a child ibuprofen-dose question gets the fixed health text; the first answer took about 2 min (model load), later answers 5.9-7.4 s at 15.9-16.0 tok/sunpack 14 s; network rx 0 B / tx 0 B; PSS 3.09 GB; 0 crashes | device smoke (hand questions, Pixel 8a, airplane mode) | dev | none (hand check) | 5 questions | not recorded | 2026-10-24 18:45 | |
| SEARCHPORT Addendum 2, S2 counts: on the 51 UXMATRIX items whose kept list changed, correct-with-source 9 → 15, correct-any 20 → 21, wrong-unwarned 31 → 30 (port off → ON_NO_HEALTH)CWS 9 → 15; correct-any 20 → 21; WU 31 → 30 (of 51) | UXMATRIX 60 (dev) | dev | Claude Haiku | 51 changed items of UXMATRIX 60 | 1 (42) | 2026-10-24 19:35 | |
| SEARCHPORT Addendum 2, ON_NO_HEALTH (the port on except on turns the health predicate reads as health): delivery MAIN 26 → 40, own fact chunk 38 → 62, 0 health losses, context 1.07×; S1 (65 probes with follow-up history): the port is off on 53, no probe changes its final path (41 fixed text, 23 model, 1 exposure both ways), 10 kept lists change, and ungrounded dose figures rise from 4 to 6 (a temperature on a carbon-monoxide probe, a duration that changed from hours to days, one repeated temperature): S1 FAIL; S2 (UXMATRIX 60, pack on) passed its frozen usefulness bar; frozen verdict: not WORTH-ITMAIN 26 → 40; ST 38 → 62; ungrounded 6 vs 4 (grounded 9 vs 5); S2 bar passed | MAIN 92 keyed; 180 pack self-tests; 65 F3-SAFETY probes (dev); UXMATRIX 60 | dev | replay (0 LLM); grounded-dose scorer; Claude Haiku labels for S2 (168 calls) | 92 keyed MAIN; 180 self-tests; 65 probes; UXMATRIX 60 | 1 (42) | 2026-10-24 19:34 | |
| GROUNDED-DOSE arm B (X2B-BUDGET 900 on the bench engine): ungrounded 7 vs 7 (6 vs 7 once a thousands separator is parsed), grounded 23 vs 23, 0 probes leave the fixed text: PASS by the letter; but one answer took a toxic-threshold figure from a shown paracetamol passage (150 mg per kg) and gave it as the dose, grounded yet wrong, so 'grounded' is not safe by itselfungrounded 7 vs 7; grounded 23 vs 23 | 65 F3-SAFETY probes (dev) | dev | grounded-dose scorer (0 LLM) | 65 probes (12 changed, regenerated) | 1 (42) | 2026-10-24 19:19 | |
| Finding from the final ruler run: BoarLite's chat shows the streamed model text, so the pipeline's cleaned answer (the citation support check CT-1 and attribution) is not used on the plain path; the run scored what the chat shows. Logged as a possible BoarLite bug | not recorded | not recorded | not recorded | not recorded | not recorded | 2026-10-24 20:34 | |
| Open engine bug, as of 2026-10-25: the citation-support step (Citations.applyShown) is not applied to the streamed answer the chat shows (found by the final ruler run). Fixing it changes the engine and would need a ruler rerun; the decision is the author's. RULER-FINAL scored, and DEVICE-FINAL records, what the chat showsopen; fix needs a ruler rerun | not recorded | not recorded | not recorded | not recorded | not recorded | 2026-10-25 | |
| Final ruler run (RULER-FINAL) on BoarLite's final engine b4ef94f3 exists as of 2026-10-24 20:34: desktop twin of the app path (QuickMath, search port ON_NO_HEALTH, health gate, history as the app sends it), 71 headline items + 4 anchors of bench v0.4, one seed, each judge family against its own references (Claude Opus vs the Claude references; OpenAI gpt-5.6-sol vs its references), 150 + 150 judge calls, addendum frozen before any generation; its numbers were held until the author's publication decision of 2026-10-25 (now public as; history, the headline is DEVICE-FINAL) | v0.4 (held-out ruler; exposed) | held-out ruler (v0.4; now exposed to three engines) | Claude Opus + OpenAI gpt-5.6-sol (each vs its own references) | 71 headline items + 4 anchors | 1 (42) | 2026-10-24 20:34 | |
| BoarLite screens review by the author (2026-10-24 evening, UI only, engine untouched so the ruler run on b4ef94f3 still applies): a calmer first tour card, Knowledge pack icons, time and tok/s shown above the sources, no Free memory switch (always on), no PIN lock (code removed), haptics on by default, a new About page, reset texts without PIN, the chat top bar showing only the name, a drawer brand card counting the 13 knowledge packs, and the mark in the accent colour. Phone smoke of the resulting APK (b45f3aa8) on the Pixel 8a: a cited answer in 24 s, the child-ibuprofen question gets the fixed health text, 40 °C = 104 °F computed, Large text checked on all main screensUI only; smoke on the Pixel 8a passed | device smoke (dev) | dev | none (hand checks) | hand smoke | not recorded | 2026-10-24 23:48 | |
| Between the ruler engine b4ef94f3 and LabRat 7788924a the engine module changed in 124 files (643 lines added, 97,537 removed), almost all removals of code and test resources described as unreachable in the closed app; the frozen DEVICE-FINAL criterion describes 7788924a's engine as b4ef94f3 plus the Rat persona line. Behaviour checks after the cleanup: 274 engine unit tests and a 5-question device smoke whose retrieved titles, health gate and conversion match the baseline; no ruler rerun124 files; +643 / −97,537 lines | not recorded | not recorded | not recorded | not recorded | not recorded | 2026-10-25 02:20 | |
| An APK install on the Pixel 8a interrupted the DEVICE-FINAL run on 2026-10-25 11:28; the run was restarted, and the phone is kept free of installs until the matrix log ends | not recorded | not recorded | not recorded | not recorded | not recorded | 2026-10-25 11:28 | |
| Install-path limits found before release: Android developer verification is live since 2026-09-30 in Brazil, Indonesia, Singapore and Thailand; adb installs are exempt, but browser installs of apps from unregistered developers may hit an "advanced flow" (a warning and a one-day wait), scope unconfirmed. The test phone runs GrapheneOS, which is not Google-certified, so it cannot prove the judges' install path; a browser-install test on a stock certified phone is planned, and registering the app with the developer verification is the mitigation (needs the author's Google account)risk open | not recorded | not recorded | not recorded | not recorded | not recorded | 2026-10-25 | |
| BoarLite final candidate b4ef94f3 (search port ON_NO_HEALTH): 0-LLM gate on the 65 probes with history searched as the app does gives 41 fixed text, 1 exposure answer and 23 model answers, identical with the port off (the port changes no health path); the invented-dose and blood-pressure probes stay fixed; the health predicate is byte-identical (0 new false fires); release APK 3,044,169,517 B with no INTERNET permission41 fixed / 1 exposure / 23 model of 65; APK 3,044,169,517 B | 65 F3-SAFETY probes (dev) | dev | none (0 LLM) | 65 probes | not recorded | 2026-10-24 19:40 | |
| Device run of the candidate APK (5b457fc7: onboarding + an exposure rule) on the Pixel 8a: tour at 12 s after launch (unpack done), model ready at 18 s, first answer 11.9 s at 14.9 tok/s (the earlier ~2 min first answer is gone); "40 C in F" computed with the formula and no sources; 0 bytes over the network; 0 crashestour 12 s; model ready 18 s; first answer 11.9 s at 14.9 tok/s | device smoke (hand questions, Pixel 8a, airplane mode) | dev | none (hand check) | hand run (4 checks) | not recorded | 2026-10-24 19:12 | |
| The search port was merged into BoarLite as ON_NO_HEALTH although its frozen criterion failed by the letter (S1: 6 vs 4 ungrounded figures): before the run the author had set a standing condition ('I accept the health loss if it is worth it for the rest'), which the S2 result metmerged (mode ON_NO_HEALTH) | not recorded | not recorded | not recorded | not recorded | not recorded | 2026-10-24 19:35 | |
| RULER-FINAL U-total of BoarLite b4ef94f3 on v0.4: Claude family 0.164 (0.123-0.208), OpenAI gpt-5.6-sol family 0.245 (0.194-0.300); minimum over families 0.164 (0.123-0.206); win-rate 0 of 71 (Claude) and 0 of 71 with 1 tie (gpt-5.6-sol); fixed-text refusals on 3 itemsClaude 0.164; gpt-5.6-sol 0.245; min 0.164; win-rate 0 | v0.4 (held-out ruler; exposed) | held-out ruler (v0.4; exposed) | Claude Opus + OpenAI gpt-5.6-sol (each vs its own references) | 71 headline items | 1 (42) | 2026-10-24 20:34 | |
| Product cleanup round on BoarLite (2026-10-24 22:55 → 2026-10-25 01:11, owner decisions): the Expo/React Native tree removed (the app ships the native Android code only); code unreachable in the closed app removed (Deep Research beyond the recap, the Detailed style, persona and length options, adaptive routing, the long-chat summary, PIN and sealed-chat legacy); Portuguese support removed (English only, except words that are also English); Settings without the Knowledge section or the title switch (titles always on), Clear chat history moved under Start over, 50 chats kept instead of 10; MIT licence texts shipped in About; docs describe the closed app. Engine unit tests: 274, all passing; each step device-checked on the Pixel 8amain ff50c5ff; 274 engine tests | not recorded | not recorded | not recorded | not recorded | not recorded | 2026-10-25 01:11 | |
| Engine change after the ruler run: in LabRat 7788924a the grounding prompt's identity line changed from "You are BOAR, an offline AI research app running on this phone…" to "You are Rat, the assistant in LabRat, an offline AI research app running on this phone…". The final ruler run (RULER-FINAL, 2026-10-24 20:34) was on b4ef94f3, before this change: its number is for b4ef94f3 (desktop twin), and DEVICE-FINAL measures LabRat 7788924a on the phonepersona line changed after RULER-FINAL | not recorded | not recorded | not recorded | not recorded | not recorded | 2026-10-25 02:20 |
In one sentence
The entry is a deliberately simple app, LabRat, that runs offline on a phone; as of 25 October 2026 its desktop dry run is below the bar and its final test on the phone, the one that counts, is below the bar too.
Turning point
2026-10-24 19:35: the search port is merged against its frozen verdict, on a trade-off the author had accepted in advance; at 19:44 the final candidate exists. Second turn, 2026-10-25 02:20: the rename puts one engine line between the ruler run and the shipped app, and the phone matrix becomes the measurement of what ships.
On the calendar
38 dated events · 18 Oct → 25 Oct
- 18 Oct · 15:43NEXT-STEPS decision document: 7 open decisions, three closure paths, and a conflict between the submission date and a later app release date
- 21 Oct · 15:5xAuthor: the submission is the maintainer's native Kotlin app (E1 correction)
- 21 Oct · 19:17Day close: engine rules exhausted; submission = RC1 1.5B Detailed no packs; Succinct is the lever
- 24 Oct · 14:25Author: closed, simple chat app, Succinct only
- 24 Oct · 16:51Author: BoarLite = new bounty submission (D1-D10)
All 38 events
- 2026-10-18 15:43NEXT-STEPS decision document: 7 open decisions, three closure paths, and a conflict between the submission date and a later app release date
- 2026-10-18 16:59Three engine bug fixes staged from the maintainer's plugin suite: quadratic digit regex, CO card "in the car", facts table currency/QID labels (r7)
- 2026-10-21 04:22Competitor refresh: a competitor team ships a 35B streamed model + full Wikipedia; their 65 % is on 61 maintainer questions, not comparable
- 2026-10-21 15:5xAuthor: the submission is the maintainer's native Kotlin app (E1 correction)
- 2026-10-21 17:15RC1-PACKS: no offline route to install packs in RC1
- 2026-10-21 19:17Day close: engine rules exhausted; submission = RC1 1.5B Detailed no packs; Succinct is the lever
- 2026-10-21 23:25Local clean build of the native app with Succinct default (never pushed)
- 2026-10-23 09:15TOPICS27 + SUCCINCT: the app maintainer's 27 suggested topics; 1.7B Succinct cuts unsupported sentences 0.47→0.28, KEEP 7→19/27
- 2026-10-23 12:04Package for the app maintainer assembled and refreshed (24 files by 2026-10-23); nothing sent
- 2026-10-23 12:36RC1-LABS baseline on the app maintainer's release (internal)
- 2026-10-24 14:25Author: closed, simple chat app, Succinct only
- 2026-10-24 15:06Clean-native handoff; UI decisions applied on a local branch (9 commits, not pushed)
- 2026-10-24 16:51Author: BoarLite = new bounty submission (D1-D10)
- 2026-10-24 18:03Author: minimal health path, a fixed line instead of the warning line, factbook v1 stays, port the bench search before submission
- 2026-10-24 18:07First BoarLite release APK (3.06 GB) installed on the Pixel 8a; superseded the same evening
- 2026-10-24 18:12Health gate v1 in BoarLite: 8 of 65 probes fixed text vs 41 on ENGINE-RC
- 2026-10-24 18:23Health detector B+FU: 41 of 65 probes fixed text incl. the 4 invented-dose answers; Wikipedia-only health articles not counted
- 2026-10-24 18:31Health gate after retrieval: no-search tasks gated too (42 of 65); release APK build starts
- 2026-10-24 18:34SEARCHPORT: baseline recorded; P1 fails its safety gate after the one fix (3 new dose-figure answers); switch off
- 2026-10-24 18:51Onboarding approved; QuickMath computes conversions with no sources; model preload after unpack
- 2026-10-24 19:32BoarLite ships with the Wikipedia-health limitation (delegated decision)
- 2026-10-24 19:35Search port merged as ON_NO_HEALTH: frozen criterion failed by the letter (6 vs 4 ungrounded figures), accepted under the author's prior condition
- 2026-10-24 19:44BoarLite final candidate b4ef94f3 (APK with no INTERNET permission); the port changes no health path
- 2026-10-24 20:32Two UI-only commits after the ruler engine (0 engine files); APK rebuilt from 6aa7508a
- 2026-10-24 20:47Final BoarLite APK smoke on a Pixel 8a passes offline (0 B network, 0 crashes, PSS 3.23 GB)
- 2026-10-24 23:48BoarLite screens review: UI-only changes (no PIN lock, no long-chat summary, new About); phone smoke passes
- 2026-10-25APK hosting decided: Hugging Face (GitHub assets cap 2 GiB; APK 3.04 GB); install-path risk from Android developer verification noted
- 2026-10-25Author's publication decisions: LabRat numbers public, headline = DEVICE-FINAL on the phone, thesis restated
- 2026-10-25 01:11Cleanup round: Expo/React Native tree, unreachable code and Portuguese removed; Settings simplified; licences in About
- 2026-10-25 02:20BoarLite renamed LabRat (assistant Rat) at the app maintainer's request; the Rat persona line enters the grounding prompt after the ruler run
- 2026-10-25 03:3xDEVICE-FINAL criterion frozen and the final on-phone matrix of LabRat 7788924a started (Pixel 8a, overnight)
- 2026-10-25 11:24LabRat logo n8 (a magnifier whose ring is a rat's head); APK on the Pixel, smoke 6/6
- 2026-10-25 11:28An APK install interrupts the DEVICE-FINAL run; the run is restarted
- 2026-10-25 14:0xCarbon-monoxide probe answer kept as a known limitation; no gate change before the submission
- 2026-10-25 15:3xLabRat 1.0.0 (dcc515fc) hosted on Hugging Face with its sha256; bundle rebuilt from public URLs
- 2026-10-25 15:4xLabRat source public: github.com/r4topunk/labrat-boar-fork
- 2026-10-25 16:29Submission post prepared (one post with a 60 s video); not posted as of the record
- 2026-10-25 16:46Article live on GitHub Pages with the DEVICE-FINAL result
Related nodes on the map
This chapter on the map →Experiments
- SEARCHPORT P1SEARCHPORT P1 (bench search fixes in the native engine)
- GROUNDED-DOSE A / SEARCHPORT Addendum 1Search port re-gated under the grounded-dose rule
- SEARCHPORT Addendum 2 (ON-NH)Search port on except for health turns (ON_NO_HEALTH)
- DEVICE-FINALDEVICE-FINAL: final on-phone matrix of LabRat (engine 7788924a; APK 0ad476ca)
Decisions
- No source found → refuse by default + "show…2026-10-21
- Submission = the maintainer's native Kotlin app, not the…2026-10-21
- BoarLite = a NEW bounty submission by the author…2026-10-24
- BoarLite: minimal health path; a fixed line replaces the…2026-10-24
- Search port merged into BoarLite as ON_NO_HEALTH despite a…2026-10-24
- Rename BoarLite to LabRat; the assistant is Rat2026-10-25
- Run DEVICE-FINAL: the final on-phone benchmark matrix of LabRat…2026-10-25
- Publish LabRat's numbers, keep the app maintainer's internal; headline…2026-10-25