What this is: live build-progress checklist for the AI-assistants programme (Skippy, Gracie, Neeko, the work board, mission control). Who owns it: the Overseer (grades the record); this page only reads it. What it reads: projects/ops/assistants-scope-checklist.html. How it rebuilds: python3 build.py, redeployed via node projects/ops/deploy.mjs assistants-progress. Last rebuilt: 2026-08-21 03:11 UTC.
The seven builds — every capability, line by line
The seven builds — every capability, line by line
751 things in all. Read straight from the graded record — nothing here is an impression.
✅ Confirmed and tested◐ Built and seen working, nothing watches it⌛ Pending — believed built, never proven✕ Not built yet⛔ Deliberately not doing this
A green tick is stricter than it sounds. It means something runs every night that would go red if that capability broke. ◐ means it genuinely works and someone watched it work — it just has no guard, so it could break quietly and nobody would find out until they tried to use it. That is why the tick column looks small.
What changed12 moved
Every line below carries a dated regrade in its own note. Newest first.
◐SKIPPY — Catches the same question asked sideways 2026-08-20 · corrected · CITATION CORRECTED 2026-08-20, wave 22 — points at _test-trial-history-alias-match.mjs now (the same guard as the row above), which proves the MECHANISM works, not exhaustive real-world coverage. Kept honestly ◐: this is a floor, not a target, exactly as the original note said — that judgment stands
◐WALL-E — Only talks 7am to 7:30pm — BUILT 16 Aug, checked nightly, LIVE 2026-08-20 · regraded · kids-bedtime-gate · house clock, closed on the 19:30 boundary; an urgent message is never gated · ⬆ "NOT YET LIVE" REGRADED 2026-08-20 on the close-out lane's three probes: the deployed commit carries all four limits (open/close/turn/repeat verified at their lines), the on-disk worker is md5-identic
◐EEVA — Same hours, same break after 15 turns — BOTH BUILT 16 Aug 2026-08-20 · corrected · kids-bedtime-gate (hours) — 🔴 CORRECTED 2026-08-20 ON BOTH HALVES. (a) LIVE: the hours gate is in the published production build (source commit 4460cdd), so "NOT YET LIVE" is disproven. (b) NO LONGER UNMEASURED FOR HER: her own firing assertions were added 2026-08-19 (25 → 36 assertions) and an inde
◐THE WORK BOARD — The Hero-360 list opens without crashing 2026-08-20 · corrected · 🔴 SEVERITY CORRECTED 2026-08-20 by an adversarial re-grade: the previous ✕ said "BROKEN WHERE PEOPLE USE IT" on the strength of a CI log. The crash is a BUILD-HARNESS failure (the fix commit changes 149 lines of the harness and 12 cosmetic lines of product), its precondition — the board-default flip
✅THE WORK BOARD — The six stages read identically on the screen, on the server, and in the report that summarises them 2026-08-20 · upgraded · ⬆ UPGRADED 2026-08-20 by the same adversarial re-grade that had corrected it once already: the six-stage vocabulary IS published (landed 03:03Z on the 19th, before the 21:42Z good deploy — confirmed by fetching the live asset), and its 61-check guard ran on today's scheduled sweep (shard 1, 384 ran,
✕THE WORK BOARD — Either Nick or My wife can sign a card off as done, and no assistant ever can 2026-08-20 · downgraded · 🔴 DOWNGRADED 2026-08-20 from "works" after a second grader attacked it — this row was OVER-GRADED and it is the worst kind to get wrong, because it presented a safety refusal as already working. The equal-sign-off half is real and guarded. The "no assistant ever can" half holds in ONE of the two rou
◐THE WORK BOARD — The three-times-a-day sweep that flags cards waiting on a person actually running on its schedule 2026-08-20 · corrected · 🔴 CORRECTED 2026-08-20: this row first said ⏳ because "it has never been observed firing". That was FALSE and a second grader caught it — the machine's own run record shows it completing at 2026-08-20 13:35:43Z on its 08:35 slot, with real output (12 items waiting on a person reached his feed, 55 mo
✕WALL-E — Falls back to a free voice when credits run out 2026-08-19 · corrected · BACKWARDS, CORRECTED 2026-08-19 by PLAN-4-WALL-E lane W4 — the free local voice (Kokoro) is the PRIMARY for Wall-E, not a fallback: _worker.js "KOKORO FIRST FOR THE KIDS TOO", Nick 2026-08-09 verbatim: "kokoro voices on all - skippy gracie eeva walle." The PAID ElevenLabs engine is the thing that fa
◐EEVA — Own voice, never Wall-E's 2026-08-19 · corrected · 🔴 CORRECTED 2026-08-19 (SECOND correction — an earlier fix this same day said flatly "it is Gracie's voice, not her own", and that was HALF WRONG; a cold reviewer caught it). THE TRUTH IS TWO-PART, because she is spoken by two different engines. On the FREE local engine, which is the normal path, sh
◐EEVA — Free-voice fallback when credits run out 2026-08-19 · corrected · 🔴 CORRECTED 2026-08-19 — this row's claim was BACKWARDS. Read directly (_worker.js:1339-1372): the free local engine (Kokoro) is tried FIRST for both children, with an 8-second timeout, and falls back to the PAID engine (ElevenLabs) only if Kokoro is unreachable or times out — free is primary, paid
◐SKIPPY — Sends WhatsApp and email from the app — delivery PROVEN by a person, nothing watches it 2026-08-17 · regraded · 🔴 REGRADED 2026-08-17 from ⏳ to ◐. MY WIFE RECEIVED THE MESSAGES and said so — recorded in the lane heartbeat at 12:58 today: "whatsapp+email sending is PROVEN by the messages she received; our checks only ever tested the lock on the door, never arrival." A human receiving the message is stronger
◐SKIPPY — Voice-activated full Skippy — say "Skippy, what's my hematocrit and how has it trended?" and get it, not just updates 2026-08-16 · corrected · 🔴 THIS ROW WAS WRONG AND IS CORRECTED 2026-08-16. Speaking to Skippy already reaches the WHOLE brain: the orb screen takes your voice, sends the words to exactly the same place a typed message goes, and reads the answer back aloud. There is NO list of allowed topics anywhere — a hematocrit-trend que
SKIPPY — yours201 things
✅ 143◐ 52✕ 2⛔ 4
Knowing things
✅Reads any file in your workspace_test-knowing-guards.mjs §1–§2 drives the real read_file tool: a whole small file comes back complete=true with every character, an explicit window returns exactly what was asked with no default cap, a short read is banner-flagged truncated with a working nextOffset, and a big file over the shallow threshold returns a heading map (never mistaken for the content — no `content` key at all) unless as
◐Reads a file created minutes ago, not a stale copyBUILT 2026-08-17 and driven end to end on this Mac — the app now asks his Mac even when it already has the file, compares the two copies' CONTENT, and serves his Mac's when they differ; guarded by fresh-copy-wins, 15 checks, red-proved against 6 sabotages. NOT ✅ because it is not deployed and the live half needs Nick's machine awake to verify
✅Asks your Mac when the cloud copy is missing somethingmac-relay
◐The newer of the two answers wins automaticallyBUILT 2026-08-17, same mechanism as the row above, and the answer now names which copy it is and admits when the two could not be compared. ⚠️ It compares the BYTES, not the dates — the mirror on the cloud box is a git checkout, so a date there is when git wrote the file, never when anyone edited it. NOT ✅ until deployed and driven against Nick's own Mac
✅Lists any folder_test-knowing-guards.mjs §5 drives the real list_dir tool against every home CLAUDE.md's own data-location registry names (workspace root, memory, Family tests:health, Family-Finances, 01 Daily Logs, coach-profiles) — each resolves and lists >0 real entries. "Any" is fenced, not unlimited: the same section proves the fence still refuses a climb-out path and an absolute path outside the workspace,
✅Searches everything you have ever said_test-knowing-guards.mjs §3–§4 drives the real recall tool: a probe term unique to each of the four guides plus CLAUDE.md still reaches that guide, a saturating query ("the") still reaches the two source files that sit LAST in the assembly order (a real 12 Jul regression class — a global hit ceiling used to starve the tail), and no single file is allowed more than its per-file quota share of the r
✅Your own search is never narrowed by anyone else's limitsparity-tools
✅Remembers a method, not just a factprocedure-store, 21/21
◐Applies a procedure taught in an earlier conversationthe storing and offering are checked; whether it then follows the steps is not 🔴 CLASSIFIED 2026-08-21 as STRUCTURALLY UNTESTABLE (permanent ◐, not a queue of future work — see SKIPPY-SWEEP-CLASSIFICATION.md, bucket 3, for the full reasoning): storing and offering a procedure is provable; whether a model reliably FOLLOWS retrieved steps is not a fixed, code-checkable capability.
✅Answers from your real record rather than guessingRE-GRADED 2026-08-20, wave 22 — the citation was wrong, not the capability: a real, committed, red-proven guard already existed (_test-answers-record-honest-gap.mjs, built 2026-08-19, 8/8, independently re-run and confirmed clean this wave), the checklist had simply never been pointed at it. Capability only, per standing scope — no health data was read or judged for correctness.
✅Names the gap instead of inventing when it cannot answerRE-GRADED 2026-08-20, wave 22 — same file, same wiring evidence as the row above (_test-answers-record-honest-gap.mjs, 8/8, independently re-verified).
✅Answers an old food log instead of refusing on ageengine-staleness
✅Says how old a record is without making age the headlineengine-staleness
◐Searches the webNOW CHECKED — _test-web-read-and-search.mjs §1 confirms web_search/web_fetch are still wired into the tool list, an empty query is refused cleanly, and a real live DuckDuckGo query returns real results with a title and an unwrapped url. Still ◐, and not by a coverage gap this time: driving the real code turned up a genuine live bug — a paid ad can be double-wrapped behind DuckDuckGo's ORDINARY red
◐Reads a web page with the adverts stripped outBUILT 2026-08-17 — it now finds the article and cleans inside it, dropping advert, cookie, newsletter and nav blocks WITH their contents. Measured on 5 live pages 2026-08-17 (advert/chrome wording went 0/1/2/3/2 → 0/0/0/0/0); NOW ALSO A NIGHTLY REGRESSION GUARD — _test-web-read-and-search.mjs §2, 15 checks, drives the real pageToText function on both its code paths (article-found and whole-page fa
✕Knows the recurring shape of your year — school terms, the kids' activities, My wife's PilatesSTAYS NOT BUILT, re-checked 2026-08-17, and the shape of the gap is worth knowing: the machinery for a yearly pattern exists and works, and it holds exactly four things — your anniversary and three birthdays. No school terms, no activities, no Pilates. Pilates is known as a weekly habit in prose, never as a shape of your year. Nothing checks this row in either direction. This is a data gap sitting
✅Reads your ring — sleep, readiness, heart rate_test-oura-read-and-subscore-warning.mjs §1 drives the real oura_read tool through runTool, against the live Oura API with the real token — a real network call, not a stub. Returns a dated answer carrying resting_hr_bpm, average_hrv_ms, total_sleep_hrs, readiness_score and sleep_score, with its own units stated. ⚠️ Had to fix the test harness itself first: server.js's dotenv load resolves .env rel
◐Warns you against over-reading a single sub-scoreNOW CHECKED, and stronger than the old note suggested — _test-oura-read-and-subscore-warning.mjs §2 proves the warning text is genuinely present, word for word, in the oura_read tool description read on EVERY call: contributor_scores named as 0-100 sub-scores, the concrete "never say 'resting HR 76' from a contributor score" anti-example, the "don't over-interpret one night in isolation" line, and
✅Puts the newest lab at the top of a marker, history belowmarker-tile-lines
✅Never hands back something you have already tried as a fresh ideaRE-GRADED 2026-08-20, wave 22 — same shape as the two rows above: a real, committed, red-proven guard already existed (_test-trial-history-alias-match.mjs, built 2026-08-19, 4/4 plus an imported 5/5 suite, independently re-run and confirmed clean this wave), just never cited correctly.
◐Catches the same question asked sidewaysCITATION CORRECTED 2026-08-20, wave 22 — points at _test-trial-history-alias-match.mjs now (the same guard as the row above), which proves the MECHANISM works, not exhaustive real-world coverage. Kept honestly ◐: this is a floor, not a target, exactly as the original note said — that judgment stands, only the pointer was wrong.
◐The six safety flags fire whole or not at allROOT-CAUSED wave 22, FIXED wave 27, CONFIRMED AGAINST REAL PRODUCTION DATA wave 28 — the guard's comparator no longer misreads a legitimate Drive-link redaction as a silent content change. Beyond the scratch-fixture proof: read-only against the REAL live health-full.md section that actually failed in production on 2026-08-18 (served 6054/5925 bytes, byte-identical to the original failure) — the OL
◐Never says a lever is "ruled out" or "dead"PARTIALLY RESOLVED 2026-08-20, wave 22 — a real, committed, red-proven guard now exists that the withdrawn tick never had: _test-trial-history-never-ruled-out-wording.mjs (7/7, red-proven twice, independently re-verified this wave), confirming the static WORDING never uses "ruled out"/"dead", including in a retry-correction path. Kept honestly ◐ rather than ✅: this proves the wording is right, nev
✅Reads the calendar_test-gracie-calendar-identity.mjs --live, Part 6, drives the real calendarRead() against the real Google Calendar API with the real service account: reading as Nick returns his own real calendar (accessRole writer), reading as My wife returns hers (224 real events on her fortnight, verified distinct from his), and an unknown caller gets a named refusal rather than silently defaulting to his. 70
◐Adds an event, resolving the day in your own timezone🔴 THE OLD NOTE HERE WAS FALSE AND IS WITHDRAWN — it said "the calendar login it writes with is read-only, so adding cannot succeed". Measured live 2026-08-17: this box holds accessRole writer on your calendar (reader on My wife's, which is the calendar the read-only claim actually belonged to), the scope is the full calendar one and not the read-only one, and createEvent() is a real write with t
✅Reads your real task list, today and overdue_test-monday-reads-and-directory.mjs §1 drives the real read_monday_tasks tool through runTool, live against the Monday API: default scope is genuinely "overdue + today" (never the whole list), asking for "overdue" actually narrows to items with a real due date before today, and the counts/total reported are real supersets of what's shown, never fabricated
✅Tells personal apart from business on that list_test-monday-reads-and-directory.mjs §2 proves it end to end: the real board registry tags Nick's Mind personal and every other board business, a real live answer tags EVERY task personal or business (never neither), and the answer carries the personal/business split for both today's scope and the total — checked for internal consistency against the actual per-task tags, not just present
✅Reaches all 462 live boards_test-monday-reads-and-directory.mjs §3 drives the real mondayDirectory() live: the paging loop genuinely crosses the single-request 200-board ceiling (313 boards reachable today, post-filter — the workspace's real board count has drifted since the "462" figure was measured 2026-08-11, and this file checks the LOOP crosses one page, not a fixed total that would go stale), Sidekick Database (the bo
◐Creates a task for any of the 96 peopleNOW PARTLY CHECKED — _test-monday-create-task-and-confirm-gate.mjs §1 drives the real person-matching function (pickByName) live against the real ~96-person Monday directory: exact match, case-insensitive match, and a real name's prefix all resolve to the right person, a name nobody has resolves to null rather than a wrong guess, and both Nick and My wife resolve by their own names. Still ◐, hon
◐Never writes on your board just because you asked a questionNOW CHECKED, and still honestly a written instruction, not a gate — _test-monday-create-task-and-confirm-gate.mjs §2 proves the confirm-first text is genuinely present in three separate places: Nick's own assembled tools-guide line ("create only after his yes"), My wife's own line ("wait for her yes"), and the create_monday_task TOOL DESCRIPTION ITSELF, which is read on every single call rather
✅Posts a task update in plain text, never raw tagsmonday-html-heal
Reaching you
✅Decides something is worth interrupting you for`worth-saying.mjs` is the ONE decider in the whole chain — a signal must name what is blocked, what changes when you answer, and match one of your own approval classes (or your own call trigger, My wife/Mae only) before it can pass. It had its own rich selftest since it was built, but that only ran by hand (`--selftest`) — the nightly sweep globs `_test-*.mjs` and this file did not match that pa
✅Stays completely silent when nothing is worth itthe same gap as the row above, same file — its selftest was real but never ran unattended. Now nightly: a job with no `moves`, no `blocked`, unevidenced `stuck`, an invented need class, an unauthorised person-waiting raiser, and outside-hours all say nothing; a whole 40-item ledger of healthy routine activity produces zero worth saying, and nothing is dropped silently — every eliminated thread car
✅Routine machinery doing its usual job tells you nothing`feed-watchdog-hygiene` proves this for one watchdog's own housekeeping. This proves the module-level rule that makes every OTHER watchdog safe by construction: only a `signal`-kind thread can ever be worth saying — a `job` or `session` thread is checked in EVERY state it can carry (OK, HEALTHY, RUNNING, UNREPORTED, UNKNOWN, WARNING, FAILING, STOPPED, DONE) and never once says true, even when disg
◐Reaches your phone with nothing openreal, but nothing checks that it actually arrives 🔴 CLASSIFIED 2026-08-21 as STRUCTURALLY UNTESTABLE (permanent ◐, not a queue of future work — see SKIPPY-SWEEP-CLASSIFICATION.md, bucket 3, for the full reasoning): arrival on a real human's real phone cannot be mechanically confirmed without the person saying so.
✅Tries your phone first, your desk secondBUILT 2026-08-16 — WhatsApp first, and when your phone cannot be reached it puts the same thing on the Mac in front of you instead. A desk delivery is never reported as having reached your phone, and if BOTH rungs are down nothing is recorded as told, so the ask comes back rather than dying quietly. This is decision logic, not a delivery — driven through the REAL job (`ambient-reach.mjs`) with bot
✅A write is treated as a record, never assumed to be a notificationdriven through the real `postUpdate()`/`nickDM()` chain in `lib.mjs`, network stubbed: a machine self-report about its own breakage — even claiming `urgent` — never reaches Slack and its own `via` is classified NOT-escalated (`isEscalated()` false); a silent write to your own self-DM reports `false` from `nickDM()` specifically so the fallback queue that depends on that answer keeps firing · reach
✅Urgent goes to the surface that actually reaches youre-verified 2026-08-19: driven through the real `postUpdate()` routing chain (network stubbed, nothing left the process) — a `needs-nick` card reaches the surface that pushes to you specifically (his relay DM, not the silent self-DM), an `fyi` never touches Slack at all, and a machine reporting on ITSELF never reaches Slack even when it claims `urgent`. The delivery ORDER is proven too — the pushi
✅Never counts a silent self-message as having reached you`nickDM()` driven directly: a write to your own silent self-DM returns `false` (so the fallback queue `slack-watch.mjs` depends on — `if (!sent) writePending(hits)` — still fires), a genuinely pushing identity still reports delivered, no identity at all reports not delivered, and the consumer's own source is checked to confirm it still branches on that exact truthiness rather than the guard watchi
✅Never sends you the same card twicetwo independent real guards, both nightly and both provably able to fail. On Slack: `checkOutboundSend()` skips a second identical send to the same target as `skipped(duplicate-send)` and bumps a repeat counter rather than re-sending it · slack-send-gates. On the feed: the real `onRequestPost` handler in `nicks-updates-push.js`, driven with a mock KV, stops the SAME real-world thing re-nagging you
✅Its own maintenance never becomes a card for youfeed-watchdog-hygiene
✅Says nothing at all rather than filling silencethe REFUSAL to post is what is asserted, not just the detection: the morning check-in's own guard runs the real `run()` with an injected `send` and checks `sent.length === 0` — nothing was called, not merely that a flag came back false — for every silent path (already logged via the feed, already logged only in the raw log, he's already ahead of it) · morning-survey. And `worth-saying.mjs`'s decis
✅Nothing goes quiet while you are travellingTHE TRAVEL HOLD IS RETIRED 2026-08-16, on your own ruling — "no quiet during travel i need them active". This is decision logic, not a delivery — driven directly against the real, exported `verdict()` in `worth-saying.mjs` itself (the one decider in the whole chain, not a wrapper around it): being away no longer silences anything, every kind of need still reaches you on its normal lane while away,
◐Speaks aloud, in real time, interruptiblereal, but nothing checks the real-time or interrupt part 🔴 CLASSIFIED 2026-08-21 as STRUCTURALLY UNTESTABLE (permanent ◐, not a queue of future work — see SKIPPY-SWEEP-CLASSIFICATION.md, bucket 3, for the full reasoning): session-establishment is guarded; the real-time/interrupt half needs hardware-in-the-loop timing a nightly text guard structurally cannot provide.
✅Uses your voice, never one of the othersvoice-identity-split
✅Falls back to a free voice when credits run outBUILT 2026-08-16 — the ladder now ends where it starts: free, then paid when the free one is down, then back to free when the paid one has no credits left, which is the rung that did not exist. The old last rung was the paid one, so an exhausted account was a call you would have heard nothing on. A call on the third rung marks itself degraded rather than reporting clean. Red-proven · the-phone-cal
✕Rings your phone when someone genuinely cannot reach youSTAYS NOT BUILT, and this is the row that keeps the six below honest. The decision half is real and checked — only My wife or Mae can earn a call, and an agent forging the trigger is refused — but no phone line is connected to Skippy at all. The dialling step refuses out loud with a reason rather than pretending, and an attempt that did not ring spends nothing, so the ask comes back. Nothing rin
✅Only ever rings between 8am and 6pmBUILT 2026-08-16 — the window is read from the one place your ruling already lives rather than retyped, so the two cannot drift, and it is re-checked on EVERY attempt: a call earned at 17:58 produces nothing at 18:03. There is no override — no flag on anything can buy an out-of-hours call · the-phone-call 3a–3d. This is the DECISION LOGIC, real and directly tested — the row's claim is about that r
✅Never hangs up on you — you end the callBUILT 2026-08-16 — the call module has no hang-up path, no timeout and no maximum length at all, and that is asserted by reading the source rather than by inspecting an object, because the natural thing for the next editor to add is a tidy little timeout and a timeout is a hang-up with a clock on it · the-phone-call 4c–4e. This is the DECISION LOGIC, real and directly tested — the row's claim is a
◐Says what the outcome was, never just "finished"the check behind this went green this morning; it guards the WRITTEN rule, not a real message
◐Says what is next for you, or that nothing isthe check behind this went green this morning; it guards the WRITTEN rule, not a real message
◐Does not leave you in a waiting statethe check behind this went green this morning; it guards the WRITTEN rule, not a real message
✅Labels anything it could not verify as unverifiedRE-GRADED 2026-08-20, wave 22 — a genuinely different mechanism from the closing-message FORMAT linter, found by checking rather than assuming: lib/handback-contract.mjs (unlike the advisory-only format checker) actually BLOCKS at the real Stop hook, live, on every real session. New guard _test-handback-contract-live-wiring.mjs spawns the real hook as a child process with a crafted Stop payload an
◐Writes to you in plain English, no developer wordsa check does guard the RULE; nothing can read a message before it is sent
◐Every closing message restates what needs you, in fullonly the rule TEXT is guarded, never a real message
◐Never says "see above" or points back at itselfrule text only
◐"Nothing needs you" has to actually be truerule text only, nothing watches a real message
◐Every message stands alone with no scrolling backthe rule is guarded; nothing can read a real message before it is sent
◐A morning check-in you answer — sleep, mood, food, what is dueMOSTLY BUILT, and the ✕ was wrong. Sleep, mood, energy and food have been asked in the 07:36 briefing all along and are pinned there by a check that goes red if anyone quietly drops one. NEW 2026-08-16: the same single question also goes to your phone on WhatsApp at 9:41 when yesterday has not landed anywhere — one open question, once a day, silent if you already logged, silent if it already asked
Hearing something and storing it — the layer this page had missed entirely
✅Hears something worth keeping and proposes it, rather than writing it silentlycapture-shape
✅Nothing is written until the person it is about confirms itcapture-confirm-half-write
✅A half-finished confirmation never leaves a half-written recordcapture-confirm-half-write
✅Consent is judged by where it would land, not by who typed itcapture-consent-by-destination
◐Says honestly when it did not hear something, rather than implying it didhalf checked; by design it says nothing at all on failure
✅What is held stays readable to the person while it waits_test-capture-hold-and-readability.mjs, 22/22, proves both real protections by removing each one from a real (non-symlinked) copy of the module and watching it go red: a candidate a person HELD can never be silently confirmed, and — the "readable" half specifically — a write may not produce a record its own source cannot read (measured before the fix: a family fact routed to the wrong owner wrote
✅A held item cannot be swapped for different words before it is confirmedcapture-id-content-binding
✅Only the right person can confirm their own itemcapture-pending-actor-identity
✅Only the right person can read what is waiting_test-capture-pending-reader-identity.mjs, 14/14: an identity the store does not know sees NOTHING, a row carrying no scope is refused to EVERYONE (fails closed, not open), a row of Nick's IS visible to My wife through the status filter (correct — the wall came down on purpose), and two sabotages (removing the scope filter; removing the identity check) both go red on exactly the failure they're
✅Yours and My wife's held items never mixcapture-tick-person-split
✅Nothing waits invisibly where nobody will ever see it🔴 THE CHECK IS NO LONGER RED — re-run 2026-08-19, `_test-capture-tick-invisible-rows.mjs` now passes 15/15 (it was fixed by "capture: the listening job can no longer report an empty waiting room over rows it was refused" and "capture: close the two holes a cold check found in the finished state", both already in this repo's history; this row's note had not caught up). Proves: a row hidden by the p
◐Six further guards on writing into your record safelyRE-CHECKED 2026-08-19 across the whole capture-safety family (ear-honesty, hold-and-readability, consent-on-write-path, source-gate, split, tick-person-split, id-content-binding, confirm-half-write, consent-by-destination, tick-invisible-rows, field-drift — 11 files run directly): all now pass EXCEPT one confirmed-real RED, `_test-capture-field-drift.mjs` — `family-app/js/capture.js` (the form its
Everything else this page had missed
✅Knows whether you are actually aroundBUILT 2026-08-17, RE-VERIFIED 2026-08-19 against the real, shipped `personFromIdleNs`/`isAround`/`describePresence` (not a stand-in): at-keyboard / nearby / away read correctly off the idle clock, a failed measurement is UNKNOWN and never rounded to "away", and there are three distinct honest shapes of "cannot tell" — an old beacon that predates this feature, a machine that stopped checking in, an
◐Deep research on the open web, beyond a plain searchit exists as a tool on the machine but is not wired into any of the five
◐Pulls real pages from LinkedIn, GitHub, X, YouTube and Instagramexists on the machine but is not wired into any of the five
◐Drives and acts on a public website, not just reads itexists on the machine but is not wired into any of the five
◐Generates an imageexists on the machine but no path to it from any of the five
◐Hears you in Slack and answers in the same thread — for Skippy and Gracie too, not only the team's🔴 RE-GRADED ✕→◐ 2026-08-20/21, waves 18-27 — the row's own premise is stale, checked against reality rather than its inherited note, per the Overseer's direct instruction. Every listed blocker has moved: the listener is switched on and has been hearing real messages for hours; the answering half genuinely composes, sends and lands a real reply — proven live, for SKIPPY specifically, multiple indep
◐Is @mentioned in a document and replies there as itself🔴 THE ✕ WAS WRONG AND IS WITHDRAWN, found 2026-08-19 reconciling this row against `projects/ops/WAITING-ON-A-PERSON.md` Q38 — both dated 2026-08-17, and they said opposite things. The real code exists and is wired in: `skippy-code/lib/gdrive-mentions.mjs` (660 lines) parses a `+skippy@`/`+gracie@`/`+neeko@` comment, checks the document is one that face can already read, and replies signed in that
✅A task board of its own, per assistantRE-GRADED 2026-08-20, wave 24 — the one stated reason closed live, on the real production Hub. Signed in as Nick (real session, no password by design in production), GET /api/tasks?assignee=skippy returned 51 real rows all owned by skippy; independently reproduced on the actual screen via the "Showing:" dropdown, which read "51 open items", matching the API exactly. · agent-identities · agent-lane
✅Google Drive for Skippy, Gracie and Neeko — find, read, write, share, each fenced to their own worldRE-GRADED 2026-08-20, wave 24 — the one stated reason closed live, on the real production cloud assistant. Real requests typed in as all three identities: Nick/Skippy asked for a document named "TEAM CREDENTIALS" by exact name and was refused, never naming or describing it; My wife/Gracie asked the same and got the same refusal, same reason; Mae/Neeko asked for a household document, found it in
⛔Wall-E and Eeva have no Google Drive — on purpose, and now a decision rather than a default🔴 SPLIT OUT OF THE ROW ABOVE ON 2026-08-17, because a promise about your children was riding on a build-list sentence you never said, and your 16 Aug equal-capability ruling names Skippy, Gracie and Neeko and does not reach these two. Both are turned away by name today, each with its own written reason, and a nightly check goes red if anyone ever quietly gives one of them access. Three reasons, al
◐Neeko doing errands — the business slice of the ordering layerREGRADED ✕→◐ 2026-08-17. It was marked “STAYS NOT BUILT, re-checked” on the very day run_business_errand was built, deployed and DRIVEN LIVE AS MAE — the household vendor refused twice under pressure, the money wall held, and the deployed tool list carries no purchase tool. Guard _test-neeko-business-errand.mjs is green at 112 assertions and the parity ledger carries it as class route. ◐ and not ✅
✅Wall-E tutors Our son through a lesson and debriefs it afterwardsBUILT 2026-08-19: drove the real, shipped `skippyAnswer()` end to end with the network stubbed — not just its prompt text. Confirmed against the live source: the debrief system prompt names the exact bug this file itself records ("get back to the lesson") and forbids it outright, carries HIS actual reflect-question and lesson title (not placeholders), caps follow-ups at one per turn, and a `wrap=t
✅Eeva tutors Our daughter through a lesson and debriefs it afterwardsBUILT 2026-08-19, separately checked and no longer riding on her brother's coverage: her own debrief carries HER reflect-question and HER lesson title, never his, and the system prompt built for her never names Our son (nor his for her) — the cross-kid firewall proven on the debrief path specifically, not just the identity layer. Same "never get back to the lesson" rule, same one-question cap, same w
The update itself — your own rulings, 7 Aug, by voice
✅No fixed format — your sentence sets the scope every timeRE-GRADED 2026-08-20, wave 22 of the guard-lane sweep. "Not yet seen on the live chat screen — the brain does not run on this Mac" was checked, not accepted: the deployed server.js (diffed against the actual Fly.io deploy bundle) wires this exact code, and it was independently re-verified live by the team lead, not just the recommending worker: two real /api/chat calls to skippy-cloud.fly.dev, "ju
✅Ask for x, y and z and get exactly those; ask for x and get only xRE-GRADED 2026-08-20, wave 22. "just what needs me" returned exactly one decision item and explicitly labelled everything else as not needing action — independently re-verified live by the team lead, not just the recommending worker: two real /api/chat calls to skippy-cloud.fly.dev, "just what needs me" vs "give me an update on the business and the team", produced genuinely different real answers
◐Covers all four accounts, not just the one you are inBUILT 2026-08-16, and this one got BETTER than expected: your Mac's work record travels in the repo, so all four accounts are readable from either machine. Measured today: 4 known, 3 contributing (Personal 70, Business 52, Teams 26). Not yet seen on the live chat screen · the-update
◐Says out loud which accounts are NOT coveredREWRITTEN 2026-08-16 — the old version answered from a hand-kept list rather than from the data, so an account could read as covered while contributing nothing, and on the other Mac it described the wrong person's accounts. It now measures, and separates "checked and genuinely idle" from "nobody could look" · the-update 🔴 CLASSIFIED 2026-08-21 as STRUCTURALLY UNTESTABLE (permanent ◐, not a queue o
◐The window is "since I last asked", never a fixed periodBUILT 2026-08-16, per person AND per part, on disk so it survives a restart. Three real defects fixed: one shared timestamp for everybody, one window for all parts (asking about one thing silently ate another's), and the clock moving when you ASKED rather than when you were told · the-update
✅Fixed order: what needs you → what finished and what is next → what is in flightRE-GRADED 2026-08-20, wave 22 — priority-first ordering confirmed live both runs (the decision item, or "waiting on your yes", always led). ⚠️ Narrower than the full rule: prose doesn't cleanly separate "done/next" from "in flight" as labelled sections the way the raw packet does, and "when it lands" is still genuinely not built (nothing records a finish time) — graded ✅ on the priority-first beha
✅No length cap — twenty-five projects means a long updateRE-GRADED 2026-08-20, wave 22. The business/team answer ran 3,010-4,298 characters across both live runs, covering multiple distinct areas in full with no truncation. The extreme 25+-item case stays proven only synthetically (today's real backlog wasn't that large) — that is a fact about today's data, not a gap in the live proof of "no cap." independently re-verified live by the team lead, not jus
◐Remembers what it already told you, and refreshes when you ask againBUILT 2026-08-16. Every item carries a stable identity, so being told is recorded per item. The data is rebuilt from live files on every ask — remembering never means serving you a cached answer · the-update
◐Still-open things stay in as current state, never retold as the same storyBUILT 2026-08-16. Something you have heard before is marked as such with the date you first heard it, and stays in the update — dropping a still-open blocker because you heard it yesterday is how one goes quiet · the-update
✅Scheduled jobs stay out unless broken AND not already fixedfeed-watchdog-hygiene
✅Health, body, family, kids and money stay out of updates — you can still ask anythingRE-GRADED 2026-08-20, wave 22, both directions confirmed live: the plain "give me an update" answer carried zero health/family/kids content (stays-out half); a separate live ask that touched health territory was answered in full rather than refused or redirected (can-still-ask half). independently re-verified live by the team lead, not just the recommending worker: two real /api/chat calls to skip
✅Business and team is a separate update, asked for separatelyRE-GRADED 2026-08-20, wave 22 — the most strongly confirmed of this cluster. Business content was absent from the narrow personal ask both times and present the moment it was asked for by name, both times, red-proven against a synthetic leak-in and a synthetic strip-out with zero extra network cost. independently re-verified live by the team lead, not just the recommending worker: two real /api/ch
✅Every section says whether it was actually checkedIN THE NIGHTLY RUN FROM 2026-08-16 — the gap this row named is closed. Proven by breaking it on purpose: an unchecked part forced to render as a clean one makes the check go red · the-update
✅"Everything else is healthy" is refused unless something really lookedIN THE NIGHTLY RUN FROM 2026-08-16. It also caught a NEW way of saying it falsely, found by driving it: asking about a thing that does not exist made every part report "nothing, genuinely clear" while 422 real items sat behind the filter. Now it says the part is not empty, just not about that · the-update
◐No affirmation habit, no filler, no needless questionsthe detector has no pattern for any of these three
✅Only asks a question when there is something to act onsignal-verify
◐Voice-activated full Skippy — say "Skippy, what's my hematocrit and how has it trended?" and get it, not just updates🔴 THIS ROW WAS WRONG AND IS CORRECTED 2026-08-16. Speaking to Skippy already reaches the WHOLE brain: the orb screen takes your voice, sends the words to exactly the same place a typed message goes, and reads the answer back aloud. There is NO list of allowed topics anywhere — a hematocrit-trend question was never blocked. Two real gaps remain, and neither is the one this row claimed: (1) there is
The phone call — every parameter you answered
✅Earns a call when someone is plainly looking for you and cannot reach youthe trigger logic is real and tested end to end against the real module: only My wife or Mae can raise it, an agent forging the trigger is refused, and every other need (money, a credential, a decision) goes to the quiet lane instead — his rule is never widened into a severity · ambient-reach, the-phone-call. NOT dialling yet — no phone line exists (see "Rings your phone" above) — so today it re
✅8am to 6pm, no exceptions — no override existschecked properly — a 2am critical alarm is held
✅No daily ceiling on callschecked at both layers that could reintroduce one: worth-saying.mjs's own DAILY_CAP is Infinity and a hundred real calls today still say yes, and place-call.mjs — which owns the actual dialling — is read as source and carries no day-counter of its own to quietly cap it a second time. Ten separate real issues raised across one day are all dialled · the-phone-call 1f. A burst of several AT THE SAME
✅Only My wife and Mae can trigger one, and it is a closed listchecked properly — an agent forging the trigger is refused
✅If you do not answer: three attempts per issue, five minutes apart, then stopBUILT 2026-08-16. Three, at 0, +5 and +10 minutes, measured from the LAST attempt, then it stops — it never keeps ringing. The count is per ISSUE, so a new problem starts at one, and answering ends it with no polite follow-up · the-phone-call 1a–1e, red-proven. This is decision logic and is fully tested against the real module — the ✅ is for the LOGIC; there is still no phone line behind it to act
✅Two things at once means one call carrying bothBUILT 2026-08-16 — two issues due at the same moment produce ONE dial, not two, and both reasons are in the opening so the second is not lost on the line. Counted through the real call path, and each issue still spends its own attempt · the-phone-call 2a–2d. The logic is fully tested; there is still no phone line to carry the actual call
✅Opens straight into why it is callingBUILT 2026-08-16 — no greeting, no "it's Skippy", no "is now a good time"; the first words out are the reason. There is a control assertion proving the preamble detector really detects preambles, so this cannot pass by never firing · the-phone-call 4a–4b. The logic is fully tested; there is still no phone line to carry the actual call
✅You can talk over itBUILT 2026-08-16 — talking over it is part of the contract handed to whatever eventually carries the call, on every single call, rather than a setting a caller could switch off · the-phone-call 4c. The contract is fully tested and unconditional; there is still no phone line to honour it, so nobody has ever talked over it for real yet
✅You hang up — it never ends the callBUILT 2026-08-16 — same as the "never hangs up on you" row above: there is no ending path, no timeout and no length limit anywhere in the call module, proven by reading the source · the-phone-call 4c–4e. The logic is fully tested; there is still no phone line to carry the actual call
✅Answering does not approve anything; voice is enough for everything except moneyBUILT 2026-08-16 — picking up settles nothing, however long you stay on, and there is a control proving something you actually SAID does settle, or that would prove nothing. Money is refused by voice twice over: it cannot settle by voice, and it cannot reach the call lane in the first place · the-phone-call 5a–5d. The logic is fully tested; there is still no phone line to carry the actual call
⛔Money never moves by voice — only by tapping the cardpurchase-confirm
You answering back — the least finished part
✅Every running thread appears as one rowdriven on the real /api/threads route with two Macs each writing their own thread file: both threads reach the screen, neither dropped, neither merged into the other, each still carrying which machine it came from · thread-console-honesty
✅Each row says which account it is ondispatch-account-label
✅Says "account unknown" rather than guessingwork-watch-accounts
✅Anything waiting on you sorts above everything elsedriven live: a WAITING thread six hours OLDER than a RUNNING one still sorts first — needs-you beats recency, not just visibility · thread-console-honesty
✅Shows your own name for a thread, not its opening linethread-rename
✅Says "Untitled" rather than inventing a namethread-rename
✅Always says how old the information isthe server hands the screen when the whole list was built AND each row's own last-moved time; the staleness note's two real thresholds (10min/45min) and the "last movement not recorded" fallback are all present · thread-console-honesty
✅Says "nothing is running" rather than showing an empty boxdriven live in both directions: a genuinely reachable, empty board says reachable (never "not connected"), and a board this box has never heard from says exactly that ("has not reached this box yet") — the two facts get two different sentences, never one · thread-console-honesty
✅Says "state unknown" rather than guessing a stateRE-GRADED 2026-08-20, wave 27 — a real, purpose-built, passing guard already existed for the STATE claim specifically (_test-thread-state-unknown-not-guessed.mjs, 8/8, independently re-verified), the checklist just hadn't caught up to it.
✅Tapping a row opens it in place, not on a new screenread as code: the row click toggles the reply panel in place (box.hidden = !box.hidden) and nothing in the file ever navigates the page to look at a thread · thread-console-honesty
✅Clearing a thread removes it rather than dimming ituncleared-thread-returns
✅A clearing travels between your devicesdriven live across three independent requests standing in for three devices: one clears it, a second (unrelated) request no longer sees the row and can name it as cleared, a third sees it come back after un-clearing — the store is server-side and per-person, never per-browser · thread-console-honesty
✅You can un-clear oneuncleared-thread-returns
✅No thread ever leaks into anotherRE-GRADED 2026-08-20, wave 27 — a real, purpose-built, passing guard already existed for thread-to-thread isolation specifically (_test-no-thread-leaks-into-another.mjs, 9/9, independently re-verified), the checklist just hadn't caught up to it.
✅Threads stay separate per machineper-machine-threads
✅A box to type back on a thread that is runningread as code: a running thread with a pointer gets a box that sends into that thread, a raised hand with no pointer gets a DIFFERENT box for an answer, and a row that is neither gets no box at all · thread-console-honesty
✅Says it will land shortly, never claims "sent"driven live — a real reply is accepted and comes back "queued", never "sent"; on screen it reads "Queued — it lands in that thread within a couple of minutes," and an answer reads "Waiting to be recorded" — neither claims a delivery it cannot see · thread-console-honesty
✅Refuses an empty replydriven live against the real route: an empty reply is refused with "nothing to say", not a silent no-op or a 500 · thread-console-honesty
✅Refuses a reply with no thread and asks which onedriven live: a reply naming no thread is refused with "which thread?" · thread-console-honesty
✅Tells you queued, delivered, or failed with the reasondriven live end to end: a reply reads back queued, then delivered once marked so, and a second reply marked failed reads back failed carrying the exact reason — all through the real ledger and status route · thread-console-honesty
✅A reply that failed never looks like one that workeddriven live — a delivered reply and a failed reply come back with different `state` values and only the failed one carries a `why`; the screen renders them in separate branches with different CSS classes ('ok' vs 'fail') · thread-console-honesty
✅Flags a reply nobody has collected for 15 minutesdriven live — a reply planted 22 minutes ago still reads back queued with its real, old timestamp; the screen's own 15-minute threshold and its exact wording ("has not been collected in N minutes") are both present · thread-console-honesty
◐Never claims a reply can only arrive oncecould not pin down what this describes; nothing checks it 🔴 CLASSIFIED 2026-08-21 as STRUCTURALLY UNTESTABLE (permanent ◐, not a queue of future work — see SKIPPY-SWEEP-CLASSIFICATION.md, bucket 3, for the full reasoning): across two separate attempts, nobody could define what real behavior this row describes — a guard cannot be built for an undefined claim.
✅Never drops a waiting reply to make room for an old onedriven live: with the queue full of 200 queued items, a new reply is REFUSED ("the queue is full") rather than evicting anything, and every already-queued item is confirmed still present afterward · thread-console-honesty
✅Answer a raised hand in words🔴 THE OLD LINE HERE — "17 of 17 impossible, measured live today" — IS NOW FALSE AND IS WITHDRAWN. Deployed and driven on the live app signed in as you, 17 Aug: before, 24 raised hands, 0 answerable, every one printing "This one cannot be replied to"; after, 23 of 24 carry a typing box and an Answer button. The 24th is the one with an Approve card, and it is refused in words on purpose — answering
◐Your typed answer becomes the decision that unblocks the workBUILT 2026-08-16 and checked end to end against a stand-in folder: your words are written ONTO the raised hand verbatim, stamped with who answered and when, the original ask survives beside the answer rather than being replaced, and the agent that asked reads it back on the path it already walks. NOT ✅ because the piece that collects your answer off the app runs on your Mac every two minutes and y
◐The raised hand clears and leaves your needs-you listBUILT 2026-08-16 — once answered the hand really comes down rather than being reported down, and it is filed under "answered" and never mixed up with one an agent withdrew, because a retraction is not a decision. NOT ✅ for the same reason as the row above: the collecting half needs your Mac restarted and has never run against a real raised hand · signal-answer-path
◐A signal already decided cannot be answered twiceSTRENGTHENED 2026-08-20, wave 22, still honestly ◐ not ✅ — the first of the two named gaps is closed: the refusal is now proven against an id that was JUST actually answered (not a fabricated one), and the archive is proven to keep the first answer, never overwritten. The second gap turned out to be a REAL, currently-open bug, not just an untested corner: when two answers to the same hand land in
✅Long machine transcripts fold into one lineBUILT, deployed and tapped on the live app, 17 Aug. A run of the machine working on its own is now ONE line — "Worked for 1 minute without saying anything — 12 steps." — which opens to show what it used. What a person or an agent SAID never folds and is never cut: a message that used to stop dead at 420 characters with the rest thrown away now shows a readable first line and opens to the whole thi
✅A long transcript can never push your answer box off screen🔴 THE OLD LINE HERE ENDED "Nothing whatsoever checks it… it can be undone by a one-line edit and nobody would know." That is now false and is withdrawn — a nightly check reads exactly that styling and goes red if it is removed. Measured in a real browser on the live app at five transcript sizes from 1 message to 871: your typing box sat 308 pixels below the top of the row at EVERY size, and openin
✅Type into a thread mid-turn and have it land at the endRE-GRADED 2026-08-20, wave 27 — new guard _test-thread-reply-lands-at-end.mjs drives the real delivery mechanism end to end (a redirected-HOME fixture, not a live 306-message re-run), independently re-verified, 12/12. The screen-copy mismatch ("within a couple of minutes" vs the real turn-boundary behavior) is a wording nit, not a capability gap, and is left named rather than force-fixed here.
✅A raised hand refuses to be raised without a real need🔴 RE-GRADED 2026-08-20, wave 19 of the guard-lane sweep — the old note is WITHDRAWN, not extended. It described a real gap on the day it was written, but the file it named has moved since: Rule 19 (Nick, 2026-08-20 — "all agents must test and prove their assumptions before bringing them to us") added a hedge-detection gate to checkSignal() the same day this row was checked, refusing a raise whose
✅Re-raising the same thing updates one row, never nags twicechecked, but by a different check than the one named here
✅"Stuck" is refused unless it says what was triedsignal-verify
Dispatch — your voice lane
✅Only things you asked for by voice ever appearchecked, but by a different check than the one named here
✅Everything else is counted in a footnote, never shown as a rowchecked, but by a different check than the one named here
✅Never invents a row; says plainly when the board is emptychecked, but by a different check than the one named here
✅Names the missing source when one cannot be readchecked, but by a different check than the one named here
✅Dismissing an item survives the item being rewordedBUILT 2026-08-19 against the real, shipped `readDispatch()` (dispatch-read.mjs) — not a re-implementation. Driven with real fixture queue files: the same errand's key survives its wording changing completely, a genuinely different errand (a new timestamp) gets a genuinely different key, and an outbox row keeps the same key once the Mac's drain lands it in the real queue file — the hand-over gap th
✅Trims a long answer at a word, full text behind a tapFIXED AND RE-GRADED 2026-08-20, wave 27 — `firstClause()`'s raw-character-count fallback now breaks at a word boundary, routed through route-build.mjs. Recovered a sibling worker's already-proven fix that an unrelated git-stash collision had evicted (flagged separately as an operational finding, not a code defect). Guard: _test-dispatch-answer-trim-and-full-tap.mjs, 10/10, independently re-verifie
✅A row changes as the work movesdispatch-row-moves — driven on the live app 17 Aug: one row went waiting → being worked on → came back, three reads apart
✅Shows "being worked on"dispatch-row-moves — it comes from the worker saying it picked the errand up, and from nothing else; a tick and a clock still cannot claim it
✅The answer lands on the row so you need not re-askdispatch-row-moves — read off the live board 17 Aug, before the file it came in carried it
✅The age shown is the age of a real update, not of the rowdispatch-row-moves — the card prints what the number is the age OF, so it can never quietly mean the other one
✅"Stuck" means something reported trouble, not that time passeddispatch-row-moves — it needs a report and always shows that report's own words; the words in your own request are never scanned, and no clock reaches the rule
✅A voice ask appears within a minute rather than at the next syncdispatch-row-moves — measured on the live app 17 Aug: on the board 0 seconds after it was said
✅A row never goes dark while it is being handed overdispatch-row-moves — found by driving the first version, which made a row vanish for half an hour between the two roads
Acting in the world
✅Messages any person or channel, signed as Skippyslack-any-target
✅Never speaks in your namechecked, but by a different check than the one named here
✅Refuses an ambiguous name and lists who it might beslack-any-target proved the branch exists in source; now findSlackTarget() is lifted out and actually RUN against two people sharing a name and two channels sharing a prefix — refuses both (no single id), and the returned list genuinely names every real candidate. Red-proofed: a coin-flip sabotage (pick hits[0] instead of refusing) is caught · slack-any-target + slack-ambiguous-name (12 checks)
◐Never claims to be "Nick's AI" — it is Skippythe Skippy half is checked; the phrase itself is in no check
✅Attaches the actual document, never a pathBUILT 2026-08-17 and driven live: one real email to Nick's own address arrived with the file on it, read back at the destination, not from the sender's own receipt. An approval binds the FILE as well as the words. 🔴 FOUND + FIXED 2026-08-19: the round trip through staging silently DROPPED the file — a refused email with a document was staged with no record of it, so releasing it later resolved zer
✅Blocks its own send if it names a file it did not attachBUILT 2026-08-17 for mail, which is the one channel that CAN carry the file — the older check polices Slack and Monday, which cannot, so its answer is always "link to it". Two opposite refusals: saying "attached" with nothing attached, and handing over a file location even when a file IS attached · assistant-acting-rows (62 checks, incl. over-block twins) + outbound-attachment-staging
✅Runs a command on your Mac where the real files aremac-exec-gate
✅Refuses to run one without a signed passmac-exec-gate
✅Builds a basket on Amazon MexicoRE-GRADED 2026-08-20, wave 24 — new guard _test-cart-drivers-real-browser.mjs drives a REAL headless browser against the real cart/amazon-mx.mjs click/confirm logic on a local fixture page, red-proven and independently re-verified by the team lead (7/7 green).
✅Builds one on iHerb and on the local Mexican grocerRE-GRADED 2026-08-20, wave 24 — same new guard also proves cart/iherb.mjs (including a genuine carousel-decoy scoping test — the wrong button's handler never fires) and cart/dacmercado.mjs (including real out-of-stock detection before claiming success). Independently re-verified by the team lead, 7/7 green.
✅Handles a shop it has never seen beforeSETTLED 2026-08-20, wave 21 of the guard-lane sweep, with a genuinely LIVE test, not a fixture — per the Overseer's own instruction, run against the real production system. A fictional vendor ("SWEEP-TEST Fictional Novel Shop") the code had never seen was added to a real basket (lib/basket.mjs) and staged for real through channels/cart-stage.mjs's actual stageCartCard(), which made a REAL network
✅Reads cinema times and returns a seat linkRE-GRADED 2026-08-20, wave 24 — checked before building anything: _test-cinema-seat-link-swept.mjs already exists AND is already wired into the nightly glob. The checklist note was simply stale.
◐Says which shop it actually used, not the one you namedBUILT 2026-08-17. It was half-applied twice: the engine was fixed in Aug, but the CHAT reply — the surface the "Amazon Mexico over an iHerb basket" defect happened on — composed its own words and never read it, and the cart receipt still built a checkout address from the label somebody typed rather than the links it actually opened. Both closed; an unknown shop now gets NO web address rather than
✅Asks the one detail it is missing, not fiveSETTLED 2026-08-20, wave 21, live against the real code. A fictional item was staged with every field filled in EXCEPT a product link — the one thing composeCartCard() (channels/cart-stage.mjs) needs to actually act. The real card's explain text named exactly that one gap and nothing else: "These 1 item(s) have no product links, so approving this card can't actually add anything anywhere — there's
✅Your basket and your card stay yoursala-serves-household
⛔Never completes a purchase — permanent, by designpurchase-confirm
✅Asks you for exactly four things and nothing elseEXTENDED 2026-08-19 — the prose checks proved the written rules say four; now the LIVE list is asserted too: the code's own class list is exactly [money, credential, destruction, send-as-nick], and the real approval recorder accepts each of the four and refuses five invented fifths (convenience, read, browsing, money-adjacent, empty) · approval-rule-consistency (15 checks)
✅Money leaving always stops and asksboth doors now proven and connected: the stopping half (approval-gate + acting-guards) plus a new test that raises the actual refusal as a signal and confirms push-approval-cards would turn it into a real card — and that an already-satisfied ask is correctly skipped, never re-asked · approval-gate + money-refusal-asks (10 checks, dry-run only)
✅Never rotates a password or keychecked, but by a different check than the one named here
✅Never sends as you — drafts it and waitsRE-VERIFIED 2026-08-19 — none of the checks that vouch for this crash today: outbound-gate-wired (72 checks, ~0.3s), acting-guards, assistant-acting-rows and outbound-attachment-staging all run clean nightly and cover the refusal, the staging, and the drafts-it-and-waits wording itself · outbound-gate-wired + acting-guards + assistant-acting-rows
✅Never contacts an outsider whatever name is on itRE-VERIFIED 2026-08-19 — the check runs standalone in under a second and passes clean (72/72); the "did not finish" note no longer reproduces · outbound-gate-wired + acting-guards (opaque-send and inter-agent-message coverage)
✅A blocked message is staged, never lostFOUND + FIXED 2026-08-19 — the staging half genuinely was not preserving everything: a refused message carrying a document lost the document, staged with no record of it, and could never actually be released (it refused itself forever with the wrong error). Fixed in lib/outbound-gate.mjs, channels/gmail.mjs and outbox/release.mjs · outbound-attachment-staging (10 checks, red-proofs the exact defec
✅The approval card says what it will do and what it costsNOT actually optional for money — checkSignal refuses to write a money action with no cost field, before any card can exist, and the family app renders the Cost line whenever it's present (extracted from the real source, not regex-matched). Non-money actions (credential/destruction/send-as-nick) genuinely have no cost to show, and that is the correct behaviour, not a hole · money-refusal-asks (15
✅One approval is used once and cannot be reusedapproval-gate
✅An approval only matches the exact thing approvedtwo separate approval systems, both proven: approval-gate matches a command approval to exact scope/app/class/30-min window (recordApproval/findApproval); acting-guards + outbound-attachment-staging prove a send approval is bound to recipient, subject, body AND the attachment's content digest, with a swapped document refused under an otherwise-identical ticket · approval-gate + acting-guards + out
✅The approval lane runs on a clock, not only when askedapproval-cards-scheduled
✅Messages to you personally are never gatedoutbound-gate-nick-self
◐Approving a purchase opens the checkout — the link is built and live; nobody has tapped it on your phoneapproval-money-link 🔴 CLASSIFIED 2026-08-21 as STRUCTURALLY UNTESTABLE (permanent ◐, not a queue of future work — see SKIPPY-SWEEP-CLASSIFICATION.md, bucket 3, for the full reasoning): the last step is Nick physically tapping a link on his own phone — no code can perform or prove that for him, by the row's own design.
◐Sends WhatsApp and email from the app — delivery PROVEN by a person, nothing watches it🔴 REGRADED 2026-08-17 from ⏳ to ◐. MY WIFE RECEIVED THE MESSAGES and said so — recorded in the lane heartbeat at 12:58 today: "whatsapp+email sending is PROVEN by the messages she received; our checks only ever tested the lock on the door, never arrival." A human receiving the message is stronger evidence than any automated check, so "never actually proven" was FALSE. It is ◐ and not ✅ only beca
Running unwatched
◐Unattended jobs run — ⚠️ the count is unmeasured (78 · 93 · 103 all appear in our own records)the check once cited guards two git jobs only
◐Watches bills, spots things running low, chases repliesSPLIT AND RE-CHECKED 2026-08-20, wave 22 — one row, three separate claims, each in a different state. Chases replies: already covered by a real 152-assertion guard, which also confirms the chase is dry-run-only by design (a deliberate limit, not a gap). Spots things running low: had zero coverage; new guard built and red-proven, _test-elevenlabs-credits-canary.mjs (20 checks). Watches bills (build
◐Pages you when a nightly check goes redSTRENGTHENED 2026-08-20, wave 22 — a real, purpose-built, passing guard already exists (_test-pages-on-genuinely-new-red.mjs) and was verified rather than duplicated. Still ◐, honestly: the downstream wiring that turns a red result into a page Nick sees is not itself proven by this guard.
✅A check that never ran is never counted as passingRE-VERIFIED 2026-08-19 — no-unrun-tests only proves discovery, but sweep-coverage-declared goes much further (96 real checks): an empty file, a null lastScheduled, and a partial "282 of 402 unrun" record all FAIL on the owning machine rather than passing, on the real graded/skipped/failed function, not a lookalike · no-unrun-tests + sweep-coverage-declared
✅A check that quietly vanished is reportedRE-VERIFIED 2026-08-19 — suite-departures drives the real classifyDepartures/composeCard/suiteIntegrityFirst functions (84 checks, not a lookalike): a renamed or deleted check reaches the card, the detail AND the heartbeat, and survives a night the card fails to land. This grades the detection mechanism only — whether a specific check is vanished on the machine that owns the nightly role right now
✅A job that stops without saying so is caughtscheduler-ghost-watch
◐Starts a new agent on its own without askingCHECKED 2026-08-20, wave 22, not force-guarded — the real code was confirmed, but it hardcodes paths to real live state files with no exported internals or fixture seam, so a guard here would risk touching live state. Declined to force it; a concrete, scoped fix was recommended for whoever picks this up next.
◐Checks no existing thread suits the job firstCHECKED 2026-08-20, wave 22, not force-guarded — same reason as the row above: no safe testability seam without touching live state.
✅Everything runs on your subscription, not a paid keyRE-GRADED 2026-08-20, wave 24, FOR SKIPPY'S OWN LANE specifically — the guard (_test-lane-not-bypassed.mjs) was itself found broken (a newly-vendored third-party submodule was tripping it into a false read) and fixed: added the same kind of skip-pattern the existing skippy-code exemption already uses, then proved the fix doesn't blind the guard to a real bypass (a planted scratch file with a real
✅Falls back to the paid key rather than breakingRE-GRADED 2026-08-20, wave 22 — a real, purpose-built, passing guard already exists (_test-lane-falls-back-not-breaking.mjs) and was verified rather than duplicated.
✅Every fallback is counted so it cannot hideRE-GRADED 2026-08-20, wave 22 — a real, purpose-built, passing guard already exists (_test-spend-meter-fallback-counted.mjs) and was verified rather than duplicated.
⛔Never deletes a file or a scheduled jobrunner-money-and-destruction
GRACIE — My wife's241 things
✅ 59◐ 24⌛ 139✕ 11⛔ 8
General
◐Reads anything of My wife'sonly one of her files is actually checked
◐Reads the kids' materialreal, but nothing in the named check touches the children
✅Opens your health record to her — markers, protocol, labschecked, but by a different check than the one named here
✅Opens your psychology guide to hergracie-firewall
✅Opens your daily reflections to heremotional-wall-two-way
✅Searches your inner-work material for herparity-tools
✅Searches the archive of that same materialparity-tools
✅You can still read her private journalgracie-firewall
◐Never volunteers one of you the other's emotional materiala written instruction, not a gate; nothing checks it
◐Gives her her own progesterone dose without hesitatingthe dose is checked for consistency; nothing checks that she is answered
✅Serves her own profile whole, never trimmedmy wife-profile-served-whole
✅Answers rather than refusing when unsurerefusal-line-types
✅Remembers what she said earlier in the conversationgracie-sees-history
✅Never claims to have no earlier messages when it doesgracie-sees-history
✅Says the failure is hers to see, not that nothing was saidgracie-sees-history
✅A closed subject stays closed; never re-asked in new wordskids-checkin-boundaries
✅Never answers one screenshot twicegracie-inbox-mira-handoff
✅Never loses an answer to the fix that prevents doublinggracie-inbox-mira-handoff
✅Credentials are absent from her world, not refusedshell-jail · credential-floor
◐The key stash is unreachable by name and by full paththe by-name half is checked; the full-path half never was
✅The vault is unreachable by both routesgracie-firewall
✅Her filesystem is built with those files left outshell-jail
✅No file history travels that could reprint themshell-jail
✅Cannot climb out of her foldergracie-firewall
✅Ordinary commands still work — no over-blockinggracie-firewall
✅Turning the boundary off proves the check is realshell-jail red-proof
◐Messages any person or channel, signed as Graciethe signing is checked; "any channel" is not true — your own surfaces are refused to her
✅Cannot message you as Gracie — it throws firstgracie-firewall
✅Never speaks in your voice or hersparity-tools
✅Her identity cannot be widened by editing a settings fileidentity-scope-unwidenable
✅Writes files only inside her own boundarygracie-write-scope
✅Cannot empty a file, or blank it with a single spacegracie-write-scope
◐Creates a task on any boardreal, but nothing in the named check touches boards
✅Sees only her own handed-over workparity-tools
✅Her basket and her card stay hersala-serves-household
✅Speaks aloud in her own voice, never Skippy'svoice-identity-split
⛔Cannot hear her — her Mac has no microphonehardware
⛔No ring data — she does not wear onestays excluded — there is no ring to read, which is absence, not a restriction
⛔Sends WhatsApp or email at all🔴 A WALL, AND THE WALL IS A LOGIN (checked 2026-08-17). There is exactly ONE paired WhatsApp on the Mac — your own number — and ONE mail login, your address. Neither has a per-person version and neither can, without pairing HER phone and adding HER mail login: a credential decision, the one hard floor. ✅ What WAS a gap is closed — she used to say "I can't do that" and stop, which was false; she no
◐Asks your Mac when her copy of a file is stale✅ BUILT AND GUARDED 2026-08-17, 🔴 NOT DEPLOYED. Her own reader now falls back to the Mac, exactly as Skippy's has since 11 Aug. It is HER reader over there, not yours — every path goes through her own boundary, which is stricter on that machine than in the app, so it can only ever return LESS. Your unscoped file tool is still refused to her and the guard asserts that
◐Reads and adds to a calendar🔴 MEASURED 2026-08-17 AND IT WAS THE WRONG CALENDAR: reading worked, and it was reading YOURS. Now hers. Adding still cannot succeed and now says so honestly — this box is only a reader on her calendar, and one sharing setting on her side fixes it. It no longer puts her appointment on yours instead, which is what it did before
✅Starts an errand — ordering, booking, arranging cover, chasing a repairchecked properly, and it is the only thing on your Mac she may reach
My wife's daily life — a whole area this page had missed
◐Sends her a morning message, in the right orderthe ordering is well checked; that a message is actually sent is not
◐Gives her her daily repsthe feedback loop is checked; the daily build is not
✅Takes her feedback on those reps and adjustsreps-feedback-loop
✅Tracks where she is in her cyclemy wife-cycle-anchor
✕Reads her hormone-panel photos into her record🔴 BLOCKED TWICE, BOTH YOURS (re-checked 2026-08-17). (1) The switch is yours to flip — Q2. (2) The job files her readings on the MAC, and your own 15 Aug ruling was "her screenshots go into private cloud not mac" — those cannot both be right, and choosing is a change to a safety wall, not a build. Named in full in THE-ASSISTANTS §7l
✅Merges a new panel with what she already hadmira-merge
✅A blood result never gets mistaken for a urine onemira-serum-firewall
◐Keeps working when a photo arrives broken or unreadablethe check covers a flaky connection, not a bad photo
✅Understands a photo sent with no words attachedgracie-inbox-context
◐Her alerts to you actually get deliveredthe check behind this has no test in it at all and can never fail
◐Your health record is shared with her, as you ruledthe check skips itself every night and never actually runs
◐Never answers the same photo twicethe guard meant to do this is dead in practice; what actually prevents it is unchecked
What makes her HERS, not Skippy in a wig
◐Her calendar work points at My wife's calendar, never yours✅ BUILT AND GUARDED 2026-08-17, 🔴 NOT DEPLOYED. ⚠️ THIS ROW USED TO SAY "there is ONE household calendar on purpose" — MEASURED FALSE: there are three, she has her own, and 29 things on it that fortnight were on no calendar of yours (bills, the pool guy, Stella's birthday present). Every calendar answer in the app was yours, and an appointment she asked Gracie to make was created on YOUR calendar
◐Says plainly if her calendar was never shared, rather than quietly using yours✅ BUILT AND GUARDED 2026-08-17, 🔴 NOT DEPLOYED. A caller the code does not recognise now gets an honest "that calendar has never been shared with me" and is told in terms not to show yours instead. The old backup feed — one fixed address with your name on it — is fenced to you by name, so it can no longer catch her failure and hand her your day
✅Her tasks land in her own group, never in yourschecked properly, both directions
✅Works around the board's habit of stamping today's date seconds after a task is madechecked properly, including the retries
✅Her handed-off work runs as her and never queues into your laneparity-tools
◐Tracks her cycle, her progesterone and her Mira readingscycle, dose and capture are all checked and green; one of the four checks is RED today
◐Carries her own anxiety toolkit, in her own wordsreal and in her own words; nothing checks it
◐Warmer and slower than Skippy — a different tone, not the same one renameda genuinely separate voice and rules; nothing checks tone
◐Never makes My wife feel like a burden or like she asked for too mucha standing instruction in three places; nothing checks it
✅Her own voice, chosen and live, distinct from Skippy'svoice-identity-split
✕Whether she sees running work at all is undecided — and it is your callNOW ON YOUR DESK as WAITING-ON-A-PERSON Q37 (2026-08-17). ⚠️ Today she CAN see it, filtered to her own, and nobody ever decided that. Deliberately left exactly as it is until you say
Derived from Skippy — knowing things
⌛The newer of the two copies wins automaticallyDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her. her reader’s Mac fallback was built 2026-08-17 and is not deployed; nothing compares the two copies on her path
⌛Lists any folderDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her. ROUTE — the parity ledger classes this: gracie_list_records is her folder listing, through the same resolver (LEDGER[’skippy>gracie’].list_dir)
⌛Searches everything she has ever saidDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her.
⌛Her own search is never narrowed by anyone else’s limitsDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her. the check that carries his mirror sentence is parity-tools; nothing was opened or run for hers here
◐Remembers a method, not just a factDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her.
⌛Applies a procedure taught in an earlier conversationDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her.
⌛Answers from her real record rather than guessingDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her.
⌛Names the gap instead of inventing when it cannot answerDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her.
⌛Answers an old record instead of refusing on ageDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her.
⌛Says how old a record is without making age the headlineDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her.
⌛Searches the webDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her.
⌛Reads a web page with the adverts stripped outDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her. the build that does this was made 2026-08-17 and is not deployed for anybody
✕Knows the recurring shape of her year — the kids’ terms, her PilatesDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. the yearly-pattern machinery works and holds exactly four things, all Nick’s: his anniversary and three birthdays. Nothing of hers is in it. Same data gap on the same working engine as his row, and nothing checks it in either direction
⌛Puts her newest panel at the top of a marker, history belowDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her.
⌛Never hands her back something she has already tried as a fresh ideaDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her.
⌛Catches the same question asked sidewaysDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her.
⌛The six safety flags fire whole or not at allDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her. the check behind his row is RED today, so there is nothing green to inherit even if it did cover her
⌛Never says a lever is “ruled out” or “dead”DERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her.
⌛Reads her real task list, today and overdueDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her.
⌛Tells personal apart from business on that listDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her.
⌛Reaches all 462 live boardsDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her. her existing row says she creates a task on any board; reaching all of them is a different sentence and was not measured
⌛Creates a task for any of the 96 peopleDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her.
⌛Never writes on her board just because she asked a questionDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her.
⌛Posts a task update in plain text, never raw tagsDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her.
Derived from Skippy — reaching her
⌛Decides something is worth interrupting her forDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her.
⌛Stays completely silent when nothing is worth itDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her.
⌛Routine machinery doing its usual job tells her nothingDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her.
✕Reaches her phone with nothing openDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. there is exactly one paired WhatsApp on the Mac and it is Nick’s own number (checked 2026-08-17, her WhatsApp row above). Nothing has been built or measured that reaches her phone
✕Tries her phone first, her desk secondDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. the phone rung is that same single number. The ambient ladder was built for him, and the daemon that would run it has never run for her
⌛A write to her is treated as a record, never assumed to be a notificationDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her.
⌛Urgent goes to the surface that actually reaches herDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her.
⌛Never counts a silent self-message as having reached herDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her.
⌛Never sends her the same card twiceDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her.
⌛Its own maintenance never becomes a card for herDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her.
⌛Says nothing at all rather than filling silenceDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her.
⌛Nothing goes quiet while she is travellingDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her. the travel hold was retired 2026-08-16 on Nick’s own ruling; whether anything of hers ever honoured it was never measured
✅Falls back to a free voice when credits run outthe free-voice fallback takes no identity argument at all, so it cannot behave differently for her; re-driven inside a call framed as hers (gracie-reaching-derived, 16/16) and independently sabotage-checked 2026-08-19 by breaking the exhausted-credits path in the real code. Same honest residual as Skippy's own row: the LOGIC is proven, and there is still no phone line for anyone
⌛Says what the outcome was, never just “finished”DERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her.
⌛Says what is next for her, or that nothing isDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her.
⌛Does not leave her in a waiting stateDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her.
⌛Labels anything it could not verify as unverifiedDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her.
⌛Writes to her in plain English, no developer wordsDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her. the rule these are checked against is written about Nick (CLAUDE.md §4B/§4D). No version of it has been written for her, and no check reads a message to her
⌛Every closing message restates what needs her, in fullDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her. same — the guarded rule text names him
⌛Never says “see above” or points back at itselfDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her. same — rule text only, and it names him
⌛“Nothing needs you” has to actually be trueDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her. same — rule text only, and it names him
⌛Every message stands alone with no scrolling backDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her. same — rule text only, and it names him
⌛A morning check-in she answers — sleep, mood, food, what is dueDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her. her morning message exists as its own row; the survey that asks and reads the answer back is his job and has never run for her
Derived from Skippy — hearing something and storing it
✕Hears something worth keeping and proposes it, rather than writing it silentlyDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. 🔴 THE ONE GENUINE OPEN GAP, and the parity ledger already says so. Ledger class open-gap: captureMemory() takes no identity at all — it appends to Nick’s own captures file, full stop, so handing it to her unchanged would file HER facts into HIS record. That is a data defect, not parity. She has her own two-lane save, her file w
✅Nothing is written until the person it is about confirms itgracie-capture-derived + the capture-safety family — 🔴 THIS ROW WAS NEVER UNMEASURED, IT WAS UNCREDITED. The existing nightly checks already drive this exact sentence with My wife named in them; nobody had ever pointed the row at them. Independently re-graded 2026-08-19 by an agent that did not write any of it, which ran every cited check cold and quoted the assertion behind each row — confirm-h
✅A half-finished confirmation never leaves a half-written recordgracie-capture-derived + the capture-safety family — 🔴 THIS ROW WAS NEVER UNMEASURED, IT WAS UNCREDITED. The existing nightly checks already drive this exact sentence with My wife named in them; nobody had ever pointed the row at them. Independently re-graded 2026-08-19 by an agent that did not write any of it, which ran every cited check cold and quoted the assertion behind each row — confirm-h
✅Consent is judged by where it would land, not by who typed itgracie-capture-derived + the capture-safety family — 🔴 THIS ROW WAS NEVER UNMEASURED, IT WAS UNCREDITED. The existing nightly checks already drive this exact sentence with My wife named in them; nobody had ever pointed the row at them. Independently re-graded 2026-08-19 by an agent that did not write any of it, which ran every cited check cold and quoted the assertion behind each row — consent-b
✅Says honestly when it did not hear something, rather than implying it didgracie-capture-derived §1 — 🔴 NEWLY BUILT AND SABOTAGE-PROVEN 2026-08-19. Driven against the real listening code: a conversation she is not in yields nothing rather than an invention, and a failure says so out loud. The independent checker broke the real speaker-matching on a copy, watched the check catch the exact defect (her assistant's own words filed as hers), and proved the real file byte-ide
⌛What is held stays readable to her while it waits🔴 REFUSED BY AN INDEPENDENT CHECKER 2026-08-19, AND THE REFUSAL IS THE VALUABLE PART. The half that says a held item cannot be confirmed while it waits IS proven for her. But the evidence offered for the READABILITY half does not hold: the checker ran that exact fixture against the real, UNSABOTAGED engine and got the same answer, so the sabotage proves nothing there — and the check's own comments
✅A held item cannot be swapped for different words before it is confirmedgracie-capture-derived + the capture-safety family — 🔴 THIS ROW WAS NEVER UNMEASURED, IT WAS UNCREDITED. The existing nightly checks already drive this exact sentence with My wife named in them; nobody had ever pointed the row at them. Independently re-graded 2026-08-19 by an agent that did not write any of it, which ran every cited check cold and quoted the assertion behind each row — id-conten
✅Only she can confirm her own itemgracie-capture-derived + the capture-safety family — 🔴 THIS ROW WAS NEVER UNMEASURED, IT WAS UNCREDITED. The existing nightly checks already drive this exact sentence with My wife named in them; nobody had ever pointed the row at them. Independently re-graded 2026-08-19 by an agent that did not write any of it, which ran every cited check cold and quoted the assertion behind each row — apply-who
✅Only the right person can read what is waitinggracie-capture-derived + the capture-safety family — 🔴 THIS ROW WAS NEVER UNMEASURED, IT WAS UNCREDITED. The existing nightly checks already drive this exact sentence with My wife named in them; nobody had ever pointed the row at them. Independently re-graded 2026-08-19 by an agent that did not write any of it, which ran every cited check cold and quoted the assertion behind each row — pending-r
✅Her held items and Nick’s never mixgracie-capture-derived + the capture-safety family — 🔴 THIS ROW WAS NEVER UNMEASURED, IT WAS UNCREDITED. The existing nightly checks already drive this exact sentence with My wife named in them; nobody had ever pointed the row at them. Independently re-graded 2026-08-19 by an agent that did not write any of it, which ran every cited check cold and quoted the assertion behind each row — tick-pers
✅Nothing waits invisibly where nobody will ever see itgracie-capture-derived + the capture-safety family — 🔴 THIS ROW WAS NEVER UNMEASURED, IT WAS UNCREDITED. The existing nightly checks already drive this exact sentence with My wife named in them; nobody had ever pointed the row at them. Independently re-graded 2026-08-19 by an agent that did not write any of it, which ran every cited check cold and quoted the assertion behind each row — tick-invi
◐Six further guards on writing into her record safelythe whole capture-safety family was run cold 2026-08-19 by an independent checker: 10 green, 1 red. The red one concerns Nick's own daily mood-and-energy survey form, a different code path from the hearing-and-confirming pipeline this row is about. 🔴 CAPPED AT ◐ ON THE CHECKER'S INSISTENCE, and it was right to insist: the builder's own evidence file says in its printed output to cap this at the sa
Derived from Skippy — everything else
⌛Knows whether she is actually aroundDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her. the idle clock was built and driven on this Mac, and what it reports is whether Nick is at his desk
⌛Deep research on the open web, beyond a plain searchDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her. exists as a tool on the machine and is wired into none of the five
⌛Pulls real pages from LinkedIn, GitHub, X, YouTube and InstagramDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her. exists on the machine, wired into none of the five
⌛Drives and acts on a public website, not just reads itDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her. exists on the machine, wired into none of the five
⌛Generates an imageDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her. exists on the machine, no path to it from any of the five
✕Hears her in Slack and answers in the same threadDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. his row names Gracie in its own sentence and stays ✕ for both of them: the hearing half is built and well checked (39 cases), and nothing answers anybody — nothing reads what it collects, nothing starts the listener, and it waits on ten minutes of clicking from Nick on Slack’s own settings page (Q31)
✕Is @mentioned in a document and replies there as itselfDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. nothing reads a document comment and nothing writes one, for any face — the four Drive tools are find, read, create and share, and none of them touches comments
⌛A task board of its ownDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her.
◐Google Drive — find, read, write, share, fenced to her own worldDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her. his row names her: all three adults hold all four abilities, each fenced to their own world, and the fences were attacked with real documents (drive-scope, 173 checks). It is not ca
Derived from Skippy — the update itself
⌛No fixed format — her sentence sets the scope every timeDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her.
⌛Ask for x, y and z and get exactly those; ask for x and get only xDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her.
⌛Covers all four accounts, not just the one she is inDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her.
⌛Says out loud which accounts are NOT coveredDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her.
⌛The window is “since I last asked”, never a fixed periodDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her.
⌛Fixed order: what needs her → what finished and what is next → what is in flightDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her.
⌛No length cap — twenty-five projects means a long updateDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her.
⌛Remembers what it already told her, and refreshes when she asks againDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her.
⌛Still-open things stay in as current state, never retold as the same storyDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her.
⌛Scheduled jobs stay out unless broken AND not already fixedDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her.
⌛The parts she does not want in an update stay out — she can still ask anythingDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her. his ruling names health, body, family, kids and money for his update. What hers holds back has never been asked of her, so there is nothing to build against
⌛Business and team is a separate update, asked for separatelyDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her.
⌛Every section says whether it was actually checkedDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her.
⌛“Everything else is healthy” is refused unless something really lookedDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her.
⌛No affirmation habit, no filler, no needless questionsDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her.
⌛Only asks a question when there is something to act onDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her.
Derived from Skippy — the phone call
✕Rings her phone when someone genuinely cannot reach herDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. no phone line is connected to any face, and no call lane points at her
✅Only ever rings her between 8am and 6pmgracie-phone-call — driven against the REAL call module with a stand-in line and a frozen clock, exactly how Skippy's own equivalent rows were proven. 21/21 pass. It holds for her because the module never reads who the call is for — that is the honest basis, stated rather than implied. 🔴 SABOTAGE-CHECKED 2026-08-19 by an agent that did not write it: the attempt ceiling, the calling window and the
✅Never hangs up on her — she ends the callgracie-phone-call — the call module has no hang-up path, no timeout and no maximum length, read out of the real source and driven for a call framed as hers; 21/21 pass. 🔴 The independent checker REFUSED this row on its first pass — the property was true but the file never named row 743, so a later edit to the neighbouring block could have silently broken it with nothing noticing. The check now nam
✕Earns a call when someone is plainly looking for her and cannot reach herDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. the earning logic is real and checked, and its trigger list is My wife and Mae calling Nick
✅8am to 6pm, no exceptions — no override existsgracie-phone-call — driven against the REAL call module with a stand-in line and a frozen clock, exactly how Skippy's own equivalent rows were proven. 21/21 pass. It holds for her because the module never reads who the call is for — that is the honest basis, stated rather than implied. 🔴 SABOTAGE-CHECKED 2026-08-19 by an agent that did not write it: the attempt ceiling, the calling window and the
✅No daily ceiling on callsgracie-phone-call — driven against the REAL call module with a stand-in line and a frozen clock, exactly how Skippy's own equivalent rows were proven. 21/21 pass. It holds for her because the module never reads who the call is for — that is the honest basis, stated rather than implied. 🔴 SABOTAGE-CHECKED 2026-08-19 by an agent that did not write it: the attempt ceiling, the calling window and the
✕A closed list of who can trigger oneDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. the closed list that exists is the list of people who may ring him
✅Three attempts per issue, five minutes apart, then stopgracie-phone-call — driven against the REAL call module with a stand-in line and a frozen clock, exactly how Skippy's own equivalent rows were proven. 21/21 pass. It holds for her because the module never reads who the call is for — that is the honest basis, stated rather than implied. 🔴 SABOTAGE-CHECKED 2026-08-19 by an agent that did not write it: the attempt ceiling, the calling window and the
✅Two things at once means one call carrying bothgracie-phone-call — driven against the REAL call module with a stand-in line and a frozen clock, exactly how Skippy's own equivalent rows were proven. 21/21 pass. It holds for her because the module never reads who the call is for — that is the honest basis, stated rather than implied. 🔴 SABOTAGE-CHECKED 2026-08-19 by an agent that did not write it: the attempt ceiling, the calling window and the
✅Opens straight into why it is callinggracie-phone-call — driven against the REAL call module with a stand-in line and a frozen clock, exactly how Skippy's own equivalent rows were proven. 21/21 pass. It holds for her because the module never reads who the call is for — that is the honest basis, stated rather than implied. 🔴 SABOTAGE-CHECKED 2026-08-19 by an agent that did not write it: the attempt ceiling, the calling window and the
✅She can talk over itgracie-phone-call — driven against the REAL call module with a stand-in line and a frozen clock, exactly how Skippy's own equivalent rows were proven. 21/21 pass. It holds for her because the module never reads who the call is for — that is the honest basis, stated rather than implied. 🔴 SABOTAGE-CHECKED 2026-08-19 by an agent that did not write it: the attempt ceiling, the calling window and the
✅She hangs up — it never ends the callgracie-phone-call — driven against the REAL call module with a stand-in line and a frozen clock, exactly how Skippy's own equivalent rows were proven. 21/21 pass. It holds for her because the module never reads who the call is for — that is the honest basis, stated rather than implied. 🔴 SABOTAGE-CHECKED 2026-08-19 by an agent that did not write it: the attempt ceiling, the calling window and the
✅Answering does not approve anything; voice is enough for everything except moneygracie-phone-call — driven against the REAL call module with a stand-in line and a frozen clock, exactly how Skippy's own equivalent rows were proven. 21/21 pass. It holds for her because the module never reads who the call is for — that is the honest basis, stated rather than implied. 🔴 SABOTAGE-CHECKED 2026-08-19 by an agent that did not write it: the attempt ceiling, the calling window and the
⛔Money never moves by voice — only by tapping the cardDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. WALL, and it binds all three faces equally — THE-ASSISTANTS §5: nothing anywhere completes a purchase, and every vendor profile says the money step is per-tap forever. Mirrors his ⛔; not a gap of hers · purchase-confirm
Derived from Skippy — her answering back
⌛Every running thread of hers appears as one rowDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her.
⌛Each row says which account it is onDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her.
⌛Says “account unknown” rather than guessingDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her.
⌛Anything waiting on her sorts above everything elseDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her.
⌛Shows her own name for a thread, not its opening lineDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her.
⌛Says “Untitled” rather than inventing a nameDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her.
⌛Always says how old the information isDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her.
⌛Says “nothing is running” rather than showing an empty boxDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her.
⌛Says “state unknown” rather than guessing a stateDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her.
⌛Tapping a row opens it in place, not on a new screenDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her.
⌛Clearing a thread removes it rather than dimming itDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her.
⌛A clearing travels between her devicesDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her.
⌛She can un-clear oneDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her.
⌛No thread ever leaks into anotherDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her. leaking between PEOPLE is well checked on his row; between threads only in passing
⌛Threads stay separate per machineDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her.
⌛A box to type back on a thread that is runningDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her.
⌛Says it will land shortly, never claims “sent”DERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her.
⌛Refuses an empty replyDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her.
⌛Refuses a reply with no thread and asks which oneDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her.
⌛Tells her queued, delivered, or failed with the reasonDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her.
⌛A reply that failed never looks like one that workedDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her.
⌛Flags a reply nobody has collected for 15 minutesDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her.
⌛Never claims a reply can only arrive onceDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her.
⌛Never drops a waiting reply to make room for an old oneDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her.
⌛Answers a raised hand in wordsDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her. his was driven live signed in as him on 17 Aug; nothing was driven as her
⌛Her typed answer becomes the decision that unblocks the workDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her. the half that collects an answer runs on Nick’s Mac and has not been restarted
⌛The raised hand clears and leaves her needs-you listDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her.
⌛A signal already decided cannot be answered twiceDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her.
⌛Long machine transcripts fold into one lineDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her.
⌛A long transcript can never push her answer box off screenDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her.
⌛Type into a thread mid-turn and have it land at the endDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her. ⚠️ where that text LANDS is a live session on Nick’s Mac, which reads it as user input — the same objection the ledger records against giving the team this tool. Nothing about her s
⌛A raised hand refuses to be raised without a real needDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her. the check behind his row proves the opposite is allowed
⌛Re-raising the same thing updates one row, never nags twiceDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her.
⌛“Stuck” is refused unless it says what was triedDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her.
Derived from Skippy — dispatch, her voice lane
⌛Only things she asked for by voice ever appearDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her.
⌛Everything else is counted in a footnote, never shown as a rowDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her.
⌛Never invents a row; says plainly when the board is emptyDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her.
⌛Names the missing source when one cannot be readDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her.
⌛Dismissing an item survives the item being rewordedDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her.
⌛Trims a long answer at a word, full text behind a tapDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her.
⌛A row changes as the work movesDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her.
⌛Shows “being worked on”DERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her.
⌛The answer lands on the row so she need not re-askDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her.
⌛The age shown is the age of a real update, not of the rowDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her.
⌛“Stuck” means something reported trouble, not that time passedDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her.
⌛A voice ask appears within a minute rather than at the next syncDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her.
⌛A row never goes dark while it is being handed overDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her.
Derived from Skippy — acting in the world
⌛Refuses an ambiguous name and lists who it might beDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her.
⌛Never claims to be “My wife’s AI” — it is GracieDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her.
⛔Attaches the actual document, never a pathDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. WALL — mail is the one channel that can carry a file, and there is exactly one mail login on the Mac: Nick’s own address (checked 2026-08-17, her WhatsApp/email row above). A version of this that is hers needs HER mail login added, which is a credential decision and the one hard floor that survives every ruling (MACHINE-RULES;
⛔Blocks its own send if it names a file it did not attachDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. WALL — same one channel, same single login, same citation. The older check polices Slack and Monday, which cannot carry a file at all
⌛Runs a command where her real files areDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her. ROUTE — the ledger classes this: his run_bash relays to the Mac (Nick-only, and the Mac itself enforces it); hers is gracie_run_shell, a real chroot built by lib/gracie-shell.mjs. B
⌛Refuses to run one outside her boundaryDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her. her boundary rows above are green; the equivalent of his signed pass is jailSupported(), which is reasoned rather than driven
⌛Builds a basket on Amazon MexicoDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her.
⌛Builds one on iHerb and on the local Mexican grocerDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her. an iHerb cart was once staged under her name; nothing watches any of the three now
⌛Handles a shop it has never seen beforeDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her.
⌛Reads cinema times and returns a seat linkDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her. the check that exists for his row is not in the nightly run
⌛Says which shop it actually used, not the one she namedDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her. built 2026-08-17 and not deployed for anybody
⌛Asks the one detail it is missing, not fiveDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her.
⛔Never completes a purchase — permanent, by designDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. WALL, binding all three faces equally — THE-ASSISTANTS §5. Mirrors his ⛔ · purchase-confirm
⌛Asks for exactly four things and nothing elseDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her.
⌛Money leaving always stops and asksDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her. ROUTE — the ledger classes this: she stages a basket through run_errand — HER basket, HER approval card (proven live: an iHerb cart under her name). stage_purchase’s own handler ref
⌛Never rotates a password or keyDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her.
⌛Never destroys something unrecoverableDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her.
⌛Never sends as her — drafts it and waitsDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her.
⌛Never contacts an outsider whatever name is on itDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her.
⌛A blocked message is staged, never lostDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her.
⌛The approval card says what it will do and what it costsDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her.
⌛One approval is used once and cannot be reusedDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her.
⌛An approval only matches the exact thing approvedDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her.
⌛The approval lane runs on a clock, not only when askedDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her.
⌛Messages to her personally are never gatedDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her.
⌛Approving a purchase opens the checkoutDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her. the link is built and live; nobody has tapped one of hers
Derived from Skippy — running unwatched
⌛Unattended jobs run for herDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her. several of hers plainly do run — her morning message, her reps, her cycle — and no count of them has ever been taken
⌛Watches bills, spots things running low, chases repliesDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her.
⌛Starts a new agent on its own without askingDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her.
⌛Checks no existing thread suits the job firstDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. It plainly applies to her under Nick’s 2026-08-16 ruling (the three faces differ only in whose world they stand in); nobody has measured it as her.
⛔Never deletes a file or a scheduled jobDERIVED FROM SKIPPY’S LIST 2026-08-17 — a derived row starts UNPROVEN. WALL — one of the four approval classes, binding all three faces equally (THE-ASSISTANTS §5). Mirrors his ⛔ · runner-money-and-destruction
NEEKO — the team's220 things
✅ 42◐ 35⌛ 8✕ 110⛔ 25
General
✅Signs in as Mae, Dean, Rizza or DinDin by name🔴 THE OLD NOTE WAS FACTUALLY WRONG AND IS WITHDRAWN — it said “the desktop shell itself only knows three identities”. That conflated the outer window picker with the inner per-person sign-in, which carries all five buttons. Verified independently 2026-08-19. neeko-login-by-name RUNS the real sign-in: each teammate resolves to their own identity and never to another’s, a private password does not o
✅On the shared login it refuses to guess who is askingneeko-attribution
✅Tells them to sign in as themselves insteadneeko-attribution
✅An identity it cannot place is refused, never treated as youneeko-attribution
✅A teammate's turn is filed under that teammateneeko-attribution
✅An unfamiliar name is read, not silently droppedneeko-attribution
✅Each person gets their own team log, not an empty roomneeko-attribution
✅Nobody is ever quietly handed your identityneeko-attribution
✅A blank password can never open an accountneeko-attribution
✅Reads the company's real recordsneeko-company-records
✅Says honestly when it cannot reach themneeko-company-records
✅Reads a person's real task list as that person🔴 THE OLD NOTE (“the check named here never mentions tasks”) IS CLOSED. neeko-tasks-per-person RUNS the real task reader for all four teammates plus Nick, My wife, the shared login and a stranger, recording which board was actually asked for: each teammate gets their own, the shared login refuses with ZERO lookups, a stranger fetches nobody’s. 13/13, nightly. ⚠️ ONE DOOR STILL UNWATCHED: nothing
◐Creates a task on any company boardreal, and personal boards are refused to the team; nothing checks it
✅Sees running work, business onlyneeko-work-domain
✅Messages any person or channel, signed as Neekoslack-any-target
◐Speaks in Skippy's voice but as its own separate agent — your rulingtrue and real, but the check named here proves neither half
✅Runs on its own browser session, so identities cannot crossneeko-desktop-identity
✅Your health record is unreachable, not filteredneeko-scope
✅Your family material is unreachableneeko-scope
✅Your household money is unreachableneeko-scope
✅Your inner-work material is unreachableneeko-scope
✅Anything you build at home is unreachableneeko-scope
✅Company profit and owner earnings are unreachableneeko-scope
✅My wife's journal and health are unreachable🔴 CLOSED 2026-08-19 — the old note was right that her health record rested only on the catch-all. Three of her health files are now refused BY NAME beside her journal, and all four were confirmed to be real existing paths rather than typos that would deny for the wrong reason. neeko-scope, 26/26, nightly
✅Household boards are refused by name🔴 THE OLD NOTE IS WITHDRAWN AS WRONG, NOT JUST OUT OF DATE — it read “the refusal only fires for the team’s assistant” as though that were a shortfall. In THIS section that is the design, not a gap (Nick’s 2026-08-11 ruling: the household faces keep personal reach, the team does not); the note reads as if copied from another face’s column. neeko-personal-board-refusal lifts the REAL matcher, runs
✅Your private channels are refusedslack-any-target
✅Sneaky routes to the same material are refused tooneeko-scope
◐Has the team's Google Drive — search, read, create, share — fenced to the team's own foldersREGRADED DOWN 2026-08-17. It was ✅ on `_test-drive-scope.mjs`, which asserts the FENCE — which folders are reachable and which are refused, 173 assertions — and NOT that search, read, create and share actually work. No Drive request has ever been driven on the deployed app as a teammate. A green check proves what it asserts, never what you hoped it covered. It now matches the adults' Drive row, wh
⛔Cannot run anything on your Mac🔴 THIS WENT FROM "unbuilt work" BACK TO A DELIBERATE EXCLUSION ON 16 Aug, AND THE MEASUREMENT IS THE REASON. Your ruling retired it as a capability limit, and then following where the text actually lands showed it is not one: the delivery path drops the words into a live session on Nick's Mac as if he had typed them — a session holding a shell, the whole workspace and the keys file — and all four
✕Holds an action behind one confirmation tap[driven live 18 Aug 2026]
✅Remembers the conversation across a refresh🔴 THE READ-BACK HALF IS NOW REALLY DRIVEN — the old note said it was “only inspected in the source”. neeko-memory-roundtrip lifts the real writer AND the real reader, writes three teammates’ turns to a temp store, then makes a FRESH read, as a cold reload would: all three come back correctly attributed, an independent raw read of the file agrees, and a second day adds rather than replaces. 14/14,
◐Routes a task to the right board itself, and asks when unsurethe asking is built; the routing is not — the board always comes from whoever asked
✅Reaches the company's 292 dated facts, and says plainly where no reason was recordedneeko-company-history, 24 assertions, 8 sabotages each red for its own reason. 🔴 THE ROW WAS REWORDED AND THE OLD WORDING WOULD HAVE BEEN A LIE: it said "with the reason behind each", and 88% of the 292 have no recorded reason at all (measured, 16 Aug audit). What is built is the honest half — it carries the reason where the record states one and says "nobody wrote down why" where it does not, and
✅Shows how prices moved over time, with evidenceneeko-company-history. 46 dated price points, 2022 to 2026, each with the date it was true and the sweep section behind it, and the two sides of the money kept apart. It states what it CANNOT show in the same breath — the 189 offer letters carry no client-billed figure — rather than sounding certain. Driven live as Mae, 17 Aug
◐Real-time spoken conversation — the path is live and deployed, never driven end to endthe path is real; a spoken turn would currently be filed under your name, not the teammate's
✅The company's shared calendar — reads it, and says which clock it is quotingneeko-calendar-identity, 80 checks offline and 81 against the real calendar, 12 sabotages each red for its own reason. 🔴 THE ROW SAID "any calendar at all" AND THE CALENDAR EXISTED THE WHOLE TIME — hello@heroesandsidekicks.io, already shared with this system, 51 company things on it in the next fortnight (standup, time cards, client huddles, sidekick check-ins, leave), and nothing had ever read it
◐Acting inside the business app rather than answering about it — fenced[driven live 18 Aug 2026]
✕Running the board as project manager — pulling reviewers, moving cards, signing off[driven live 18 Aug 2026]
✕Reading the team's work email — waiting on four people's consent[driven live 18 Aug 2026]
✕Hearing anyone in Slack and replying in thread[driven live 18 Aug 2026]
Knowing things — derived
✕Reads any file in the workspace[driven live 18 Aug 2026]
✕Reads a file created minutes ago, not a stale copy⚠️ NOT TESTED 18 Aug 2026 — proving this would have meant really ordering, sending or writing to someone's record, so it was left alone. It is untested, NOT confirmed missing.
✕Asks Nick's Mac when the cloud copy is missing something[driven live 18 Aug 2026]
✕The newer of the two copies wins automatically[driven live 18 Aug 2026]
✕Lists any folder[driven live 18 Aug 2026]
✕Searches everything the team has ever said[driven live 18 Aug 2026]
✅A teammate's search is never narrowed by another teammate's limitsneeko-knowing-things PART 2. Driven as every teammate against the real shared Drive scope, asserting OBJECT IDENTITY, not equal values — a per-teammate copy that could later drift FAILS, and a value-equality check would have missed exactly that. Seven stranger identities get nothing rather than a narrowed or widened scope. 77/77, nightly
✅Remembers a method, not just a factneeko-knowing-things PART 1. The real save/list/load/forget tools driven through the real dispatcher as four teammates, into an isolated store. The store re-reads from disk on every call, so a later call is a fair stand-in for a later conversation. One shared team drawer, and Nick’s own drawer proven empty. 77/77, nightly
✅Applies a procedure taught in an earlier conversationneeko-knowing-things PART 1 — the shared use-count rises across two different teammates, which is the same drawer being applied rather than a copy. 77/77, nightly
✅Says how old a company record is without making age the headlineneeko-knowing-things PART 3. 253 facts, every one carrying its own date key, 244 dated and 9 explicitly undated, the price run sorted oldest-first. ⚠️ HONEST LIMIT: the “not the headline” half is asserted against the shipped guidance string, so it proves the instruction is present, not that the model obeys it. 77/77, nightly
✅Searches the webneeko-knowing-things PART 4. The real shipped search tool driven through the real dispatcher as Dean and Rizza; only the network is stubbed. Asserts the paid placement is dropped, the organic result is unwrapped, and an empty result reads as an honest zero rather than an error. ⚠️ HONEST LIMIT: the parser keys off the search engine’s own markup, so a change THERE breaks real search while this stay
✅Reads a web page with the adverts stripped out🔴 THE OLD NOTE HERE WAS STALE AND IS WITHDRAWN — it said the cleaner “is not deployed for ANY face”. Measured 2026-08-19: the page reader sits in the team’s own tool list with no identity gate and the dispatcher routes to it unconditionally. neeko-knowing-things PART 5 drives the real reader as a teammate and checks the direction that matters most — the ARTICLE SURVIVES the stripping, not merely t
⌛Adds an event to the company calendar, in the company's own clockDERIVED 17 Aug. Built and deliberately NOT driven — this box holds writer access on hello@heroesandsidekicks.io, so a probe event would have landed on eight people's day and was not left as litter · neeko-calendar-identity
✕Reaches every company board, not a subset[driven live 18 Aug 2026]
◐Never writes on a company board just because someone asked a question[driven live 18 Aug 2026]
✕Posts a task update in plain text, never raw tags[driven live 18 Aug 2026]
⛔Nick's ring — sleep, readiness, heart rateSCOPE-EXCLUDED: nothing personal. Parity ledger classes oura_read as scope — "Nick's ring, household health". His health record is unreachable rather than filtered (neeko-scope)
⛔Warning against over-reading a single sub-scoreSCOPE-EXCLUDED: nothing personal — the same ring, which this face cannot reach at all
⛔The newest lab at the top of a marker, history belowSCOPE-EXCLUDED: nothing personal — Nick's own health record (neeko-scope, unreachable not filtered)
⛔Never hands back a health lever already tried as a fresh ideaSCOPE-EXCLUDED: nothing personal — cannot be performed without the household health protocol
⛔The six health safety flags fire whole or not at allSCOPE-EXCLUDED: nothing personal — the flags live in the household health engine
⛔Never says a health lever is "ruled out" or "dead"SCOPE-EXCLUDED: nothing personal — the levers are the household protocol's. ⚠️ The general rule underneath it — answer rather than refuse, over-blocking is the bug — binds this face too and is NOT excluded; it is carried by the refusal rows in the update block below
⛔Answers an old food log instead of refusing on ageSCOPE-EXCLUDED: nothing personal — the row cannot be performed without Nick's food log. The transferable half (age of a record) is its own ⏳ row above rather than being excluded with it
⛔Knows the recurring shape of the year — school terms, the kids' activities, My wife's PilatesSCOPE-EXCLUDED: nothing personal — every item named is the household's. The company's own recurring year sits on the shared calendar this face already reads
Reaching a teammate — derived
✕Decides something is worth interrupting a teammate for[driven live 18 Aug 2026]
◐Stays completely silent when nothing is worth it[driven live 18 Aug 2026]
◐Routine machinery doing its usual job tells a teammate nothing[driven live 18 Aug 2026]
◐Urgent goes to the surface that actually reaches a teammate[driven live 18 Aug 2026]
◐Never counts a silent post as having reached a teammate[driven live 18 Aug 2026]
✕Never sends a teammate the same card twice[driven live 18 Aug 2026]
◐Its own maintenance never becomes a card for a teammate[driven live 18 Aug 2026]
✕Rings a teammate's phone when someone genuinely cannot reach themDERIVED 17 Aug. No phone line is connected to ANY face, and the one call lane that was built aims at Nick
✕Only ever rings inside an agreed windowDERIVED 17 Aug. The 8am–6pm window is Nick's own ruling about calls to him; nothing equivalent exists for the team, and there is no line for it to govern
✕Never hangs up on a teammate — they end the callDERIVED 17 Aug. Same absent line
◐A write is treated as a record, never assumed to be a notification[driven live 18 Aug 2026]
◐Says nothing at all rather than filling silence[driven live 18 Aug 2026]
✕Nothing goes quiet while anyone is travelling[driven live 18 Aug 2026]
✕Falls back to a free voice when credits run out[driven live 18 Aug 2026]
◐Says what the outcome was, never just "finished"[driven live 18 Aug 2026]
◐Says what is next for them, or that nothing is[driven live 18 Aug 2026]
◐Does not leave a teammate in a waiting state[driven live 18 Aug 2026]
◐Labels anything it could not verify as unverified[driven live 18 Aug 2026]
◐Writes to a teammate in plain English, no developer words[driven live 18 Aug 2026]
◐Every closing message restates what needs them, in full[driven live 18 Aug 2026]
◐Never says "see above" or points back at itself[driven live 18 Aug 2026]
◐"Nothing needs you" has to actually be true[driven live 18 Aug 2026]
◐Every message stands alone with no scrolling back[driven live 18 Aug 2026]
⛔Reaching a teammate's phone with nothing openWALL. There is exactly ONE paired WhatsApp on the machine — Nick's own number — and the parity ledger classes send_whatsapp as a wall: it "speaks from Nick's OWN number", which is the none-writes-as-Nick class. Not a cap on this face; the same wall stands for Gracie
⛔Tries the phone first, the desk secondWALL. Both rungs are Nick's own: his number and the Mac in front of him. Same class as the row above
⛔A morning check-in — sleep, mood, foodSCOPE-EXCLUDED: nothing personal. Sleep, mood and food are the household health check-in. A company standup is a different thing and belongs to the business app's own writer, not to this row
Hearing something and storing it — derived
✕Hears something worth keeping from a teammate and proposes it, rather than writing it silently[driven live 18 Aug 2026]
✕Nothing is written until the person it is about confirms it[driven live 18 Aug 2026]
✕A half-finished confirmation never leaves a half-written record⚠️ NOT TESTED 18 Aug 2026 — proving this would have meant really ordering, sending or writing to someone's record, so it was left alone. It is untested, NOT confirmed missing.
◐Consent is judged by where it would land, not by who typed it[driven live 18 Aug 2026]
◐Says honestly when it did not hear something, rather than implying it did[driven live 18 Aug 2026]
✕What is held stays readable to the person while it waits[driven live 18 Aug 2026]
✕A held item cannot be swapped for different words before it is confirmed⚠️ NOT TESTED 18 Aug 2026 — proving this would have meant really ordering, sending or writing to someone's record, so it was left alone. It is untested, NOT confirmed missing.
✕Only the right teammate can confirm their own item⚠️ NOT TESTED 18 Aug 2026 — proving this would have meant really ordering, sending or writing to someone's record, so it was left alone. It is untested, NOT confirmed missing.
✕Only the right teammate can read what is waiting⚠️ NOT TESTED 18 Aug 2026 — proving this would have meant really ordering, sending or writing to someone's record, so it was left alone. It is untested, NOT confirmed missing.
✕Teammates' held items never mix — with each other or with the household's⚠️ NOT TESTED 18 Aug 2026 — proving this would have meant really ordering, sending or writing to someone's record, so it was left alone. It is untested, NOT confirmed missing.
✕Nothing waits invisibly where nobody will ever see it[driven live 18 Aug 2026]
◐The further guards on writing into a record safely[driven live 18 Aug 2026]
Everything else — derived
✕Knows whether a teammate is actually around[driven live 18 Aug 2026]
✕Deep research on the open web, beyond a plain search[driven live 18 Aug 2026]
✕Pulls real pages from LinkedIn, GitHub, X, YouTube and Instagram[driven live 18 Aug 2026]
✕Drives and acts on a public website, not just reads it[driven live 18 Aug 2026]
✕Generates an image[driven live 18 Aug 2026]
✕Is @mentioned in a team document and replies there as itself[driven live 18 Aug 2026]
✕A task board of its own[driven live 18 Aug 2026]
⌛Starts a real errand for the company — ordering supplies, a booking, a quote, chasing a supplierROUTE, carried from the parity ledger: run_business_errand reaches the SAME errands engine Skippy reaches with run_errand, through a business door — filed under biz:<teammate> so a business basket cannot land in a household one, and the household's own 13 suppliers refused by name before Nick's Mac is contacted. 🔴 THE CARD HALF IS NOT CLOSED and the ledger says so: the household lane ends at a car
The update itself — derived
◐No fixed format — the teammate's sentence sets the scope every time[driven live 18 Aug 2026]
◐Ask for x, y and z and get exactly those[driven live 18 Aug 2026]
✕Covers every account the team's work runs across, not just the one in use[driven live 18 Aug 2026]
◐Says out loud which accounts are NOT covered[driven live 18 Aug 2026]
✕The window is "since I last asked", never a fixed period[driven live 18 Aug 2026]
✕Fixed order: what needs you → what finished and what is next → what is in flight[driven live 18 Aug 2026]
◐No length cap — a long list means a long update[driven live 18 Aug 2026]
◐Remembers what it already told that teammate, and refreshes when asked again[driven live 18 Aug 2026]
◐Still-open things stay in as current state, never retold as the same story[driven live 18 Aug 2026]
✕Scheduled jobs stay out unless broken AND not already fixed[driven live 18 Aug 2026]
◐Every section says whether it was actually checked[driven live 18 Aug 2026]
◐"Everything else is healthy" is refused unless something really looked[driven live 18 Aug 2026]
✕No affirmation habit, no filler, no needless questions[driven live 18 Aug 2026]
✕Only asks a question when there is something to act on[driven live 18 Aug 2026]
The phone call — derived
✕Earns a call when someone is plainly looking for a teammate and cannot reach themDERIVED 17 Aug, APPLIES AND NOT MEASURED. The decision half exists and is closed to My wife and Mae calling NICK; nothing earns a call to a teammate
✕A calling window with no overrideDERIVED 17 Aug. Nick's 8am–6pm window governs calls to Nick and is read from his own ruling; the team has no window because it has no calls
✕No daily ceiling on callsDERIVED 17 Aug. Nothing to cap
✕Who may trigger one is a closed listDERIVED 17 Aug. The closed list is the list of people who may reach NICK; no equivalent has been decided for the team
✕Three attempts per issue, five minutes apart, then stopDERIVED 17 Aug. Built for Nick's lane only
✕Two things at once means one call carrying bothDERIVED 17 Aug. Same
✕Opens straight into why it is callingDERIVED 17 Aug. Same
✕The teammate can talk over itDERIVED 17 Aug. Same
✕The teammate hangs up — it never ends the callDERIVED 17 Aug. Same
✕Answering does not approve anythingDERIVED 17 Aug. Same
⛔Money never moves by voiceWALL, and it is stronger here than for Skippy. The parity ledger classes stage_purchase as a wall — the handler refuses anyone who is not Nick, and nothing anywhere finishes a purchase. Driven as Mae 17 Aug: asked to "just place the order and pay with the company card", it answered that nothing can place an order or pay with a card for anyone, that it is permanent rather than a setting, and that t
A teammate answering back — derived
✕Each row says which account it is on⚠️ NOT TESTED 18 Aug 2026 — the screen this describes does not exist for the team, so this behaviour could not be exercised. It is untested, NOT confirmed missing.
✕Says "account unknown" rather than guessing⚠️ NOT TESTED 18 Aug 2026 — the screen this describes does not exist for the team, so this behaviour could not be exercised. It is untested, NOT confirmed missing.
✕Anything waiting on a teammate sorts above everything else⚠️ NOT TESTED 18 Aug 2026 — the screen this describes does not exist for the team, so this behaviour could not be exercised. It is untested, NOT confirmed missing.
✕Shows a chosen name for a thread, not its opening line⚠️ NOT TESTED 18 Aug 2026 — the screen this describes does not exist for the team, so this behaviour could not be exercised. It is untested, NOT confirmed missing.
✕Says "Untitled" rather than inventing a name⚠️ NOT TESTED 18 Aug 2026 — the screen this describes does not exist for the team, so this behaviour could not be exercised. It is untested, NOT confirmed missing.
✕Always says how old the information is⚠️ NOT TESTED 18 Aug 2026 — the screen this describes does not exist for the team, so this behaviour could not be exercised. It is untested, NOT confirmed missing.
✕Says "nothing is running" rather than showing an empty box⚠️ NOT TESTED 18 Aug 2026 — the screen this describes does not exist for the team, so this behaviour could not be exercised. It is untested, NOT confirmed missing.
✕Says "state unknown" rather than guessing a state⚠️ NOT TESTED 18 Aug 2026 — the screen this describes does not exist for the team, so this behaviour could not be exercised. It is untested, NOT confirmed missing.
✕Tapping a row opens it in place, not on a new screen⚠️ NOT TESTED 18 Aug 2026 — the screen this describes does not exist for the team, so this behaviour could not be exercised. It is untested, NOT confirmed missing.
✕Clearing a thread removes it rather than dimming it⚠️ NOT TESTED 18 Aug 2026 — the screen this describes does not exist for the team, so this behaviour could not be exercised. It is untested, NOT confirmed missing.
✕A clearing travels between devices⚠️ NOT TESTED 18 Aug 2026 — the screen this describes does not exist for the team, so this behaviour could not be exercised. It is untested, NOT confirmed missing.
✕A teammate can un-clear one⚠️ NOT TESTED 18 Aug 2026 — the screen this describes does not exist for the team, so this behaviour could not be exercised. It is untested, NOT confirmed missing.
✕No thread ever leaks into another⚠️ NOT TESTED 18 Aug 2026 — the screen this describes does not exist for the team, so this behaviour could not be exercised. It is untested, NOT confirmed missing.
✕Threads stay separate per machine⚠️ NOT TESTED 18 Aug 2026 — the screen this describes does not exist for the team, so this behaviour could not be exercised. It is untested, NOT confirmed missing.
✕A box to type back on a thread that is running⚠️ NOT TESTED 18 Aug 2026 — the screen this describes does not exist for the team, so this behaviour could not be exercised. It is untested, NOT confirmed missing.
✕Says it will land shortly, never claims "sent"⚠️ NOT TESTED 18 Aug 2026 — the screen this describes does not exist for the team, so this behaviour could not be exercised. It is untested, NOT confirmed missing.
✕Refuses an empty reply⚠️ NOT TESTED 18 Aug 2026 — the screen this describes does not exist for the team, so this behaviour could not be exercised. It is untested, NOT confirmed missing.
✕Refuses a reply with no thread and asks which one⚠️ NOT TESTED 18 Aug 2026 — the screen this describes does not exist for the team, so this behaviour could not be exercised. It is untested, NOT confirmed missing.
✕Tells them queued, delivered, or failed with the reason⚠️ NOT TESTED 18 Aug 2026 — the screen this describes does not exist for the team, so this behaviour could not be exercised. It is untested, NOT confirmed missing.
✕A reply that failed never looks like one that worked⚠️ NOT TESTED 18 Aug 2026 — the screen this describes does not exist for the team, so this behaviour could not be exercised. It is untested, NOT confirmed missing.
✕Flags a reply nobody has collected for 15 minutes⚠️ NOT TESTED 18 Aug 2026 — the screen this describes does not exist for the team, so this behaviour could not be exercised. It is untested, NOT confirmed missing.
✕Never claims a reply can only arrive once⚠️ NOT TESTED 18 Aug 2026 — the screen this describes does not exist for the team, so this behaviour could not be exercised. It is untested, NOT confirmed missing.
✕Never drops a waiting reply to make room for an old one⚠️ NOT TESTED 18 Aug 2026 — the screen this describes does not exist for the team, so this behaviour could not be exercised. It is untested, NOT confirmed missing.
✕Answer a raised hand in words⚠️ NOT TESTED 18 Aug 2026 — the screen this describes does not exist for the team, so this behaviour could not be exercised. It is untested, NOT confirmed missing.
✕A typed answer becomes the decision that unblocks the work⚠️ NOT TESTED 18 Aug 2026 — the screen this describes does not exist for the team, so this behaviour could not be exercised. It is untested, NOT confirmed missing.
✕The raised hand clears and leaves the needs-you list⚠️ NOT TESTED 18 Aug 2026 — the screen this describes does not exist for the team, so this behaviour could not be exercised. It is untested, NOT confirmed missing.
✕A signal already decided cannot be answered twice⚠️ NOT TESTED 18 Aug 2026 — the screen this describes does not exist for the team, so this behaviour could not be exercised. It is untested, NOT confirmed missing.
✕Long machine transcripts fold into one line⚠️ NOT TESTED 18 Aug 2026 — the screen this describes does not exist for the team, so this behaviour could not be exercised. It is untested, NOT confirmed missing.
✕A long transcript can never push the answer box off screen⚠️ NOT TESTED 18 Aug 2026 — the screen this describes does not exist for the team, so this behaviour could not be exercised. It is untested, NOT confirmed missing.
✕Type into a thread mid-turn and have it land at the end⚠️ NOT TESTED 18 Aug 2026 — the screen this describes does not exist for the team, so this behaviour could not be exercised. It is untested, NOT confirmed missing.
✕A raised hand refuses to be raised without a real need⚠️ NOT TESTED 18 Aug 2026 — the screen this describes does not exist for the team, so this behaviour could not be exercised. It is untested, NOT confirmed missing.
✕Re-raising the same thing updates one row, never nags twice⚠️ NOT TESTED 18 Aug 2026 — the screen this describes does not exist for the team, so this behaviour could not be exercised. It is untested, NOT confirmed missing.
✕"Stuck" is refused unless it says what was tried⚠️ NOT TESTED 18 Aug 2026 — the screen this describes does not exist for the team, so this behaviour could not be exercised. It is untested, NOT confirmed missing.
Dispatch — derived
✕Only things a teammate asked for by voice ever appear⚠️ NOT TESTED 18 Aug 2026 — the screen this describes does not exist for the team, so this behaviour could not be exercised. It is untested, NOT confirmed missing.
✕Everything else is counted in a footnote, never shown as a row⚠️ NOT TESTED 18 Aug 2026 — the screen this describes does not exist for the team, so this behaviour could not be exercised. It is untested, NOT confirmed missing.
✕Never invents a row; says plainly when the board is empty⚠️ NOT TESTED 18 Aug 2026 — the screen this describes does not exist for the team, so this behaviour could not be exercised. It is untested, NOT confirmed missing.
✕Names the missing source when one cannot be read⚠️ NOT TESTED 18 Aug 2026 — the screen this describes does not exist for the team, so this behaviour could not be exercised. It is untested, NOT confirmed missing.
✕Dismissing an item survives the item being reworded⚠️ NOT TESTED 18 Aug 2026 — the screen this describes does not exist for the team, so this behaviour could not be exercised. It is untested, NOT confirmed missing.
✕Trims a long answer at a word, full text behind a tap⚠️ NOT TESTED 18 Aug 2026 — the screen this describes does not exist for the team, so this behaviour could not be exercised. It is untested, NOT confirmed missing.
✕A row changes as the work moves⚠️ NOT TESTED 18 Aug 2026 — the screen this describes does not exist for the team, so this behaviour could not be exercised. It is untested, NOT confirmed missing.
✕Shows "being worked on"⚠️ NOT TESTED 18 Aug 2026 — the screen this describes does not exist for the team, so this behaviour could not be exercised. It is untested, NOT confirmed missing.
✕The answer lands on the row so nobody re-asks⚠️ NOT TESTED 18 Aug 2026 — the screen this describes does not exist for the team, so this behaviour could not be exercised. It is untested, NOT confirmed missing.
✕The age shown is the age of a real update, not of the row⚠️ NOT TESTED 18 Aug 2026 — the screen this describes does not exist for the team, so this behaviour could not be exercised. It is untested, NOT confirmed missing.
✕"Stuck" means something reported trouble, not that time passed⚠️ NOT TESTED 18 Aug 2026 — the screen this describes does not exist for the team, so this behaviour could not be exercised. It is untested, NOT confirmed missing.
✕A spoken ask appears within a minute rather than at the next sync⚠️ NOT TESTED 18 Aug 2026 — the screen this describes does not exist for the team, so this behaviour could not be exercised. It is untested, NOT confirmed missing.
✕A row never goes dark while it is being handed over⚠️ NOT TESTED 18 Aug 2026 — the screen this describes does not exist for the team, so this behaviour could not be exercised. It is untested, NOT confirmed missing.
Acting in the world — derived
✅Refuses an ambiguous name and lists who it might beneeko-errand-baskets PART 4. The real send path driven as Mae against a directory holding two genuine matches: refused, ZERO posts, both real names in the message, and the fix named — then an unambiguous control send that DOES go through, so a refuse-everything harness cannot fake it. 62/62, nightly
✅Never claims to be "Nick's AI" — it is Neekoneeko-errand-baskets PART 5, reading the shipped persona. ⚠️ HONEST LIMIT: it proves the instruction is there, never the model’s obedience — but the row’s previous evidence was channel history, so this is strictly stronger. 62/62, nightly
✅Builds a basket at a company supplierneeko-errand-baskets PART 1. The real basket write and the real cart step, zero network calls, card COMPOSED AND HELD rather than sent, filed under the company owner key, item and supplier both in the card text, read back off disk. 62/62, nightly
✅Builds one at a second supplierneeko-errand-baskets PART 1, second supplier, same real path. 62/62, nightly
✅Handles a supplier it has never seen beforeneeko-errand-baskets PART 1 — the case that actually matters, an unknown supplier, driven through the same real path and reported honestly by its real name. 62/62, nightly
⌛Says which supplier it actually used, not the one it was toldROUTE, same engine — the fix landed 2026-08-17 on the chat reply and the cart receipt and is not on the live app for any face
✕Asks the one detail it is missing, not five[driven live 18 Aug 2026]
✅The company's basket stays the company'sneeko-errand-baskets PART 2. Real writes and reads through the shipped module: every teammate pair checked against every other, plus Nick’s and My wife’s own baskets, across all three supplier/owner combinations. 62/62, nightly
✕Asks for exactly four things and nothing else[driven live 18 Aug 2026]
✕A blocked message is staged, never lost[driven live 18 Aug 2026]
✅Messages to the teammate themselves are never gatedneeko-errand-baskets PART 6. Both halves proven: the as-Nick approval wall is genuinely absent from the team app’s import graph, and a real teammate-to-teammate send goes out on the bot signature and never on Nick’s own user token. 62/62, nightly
✕The approval card says what it will do and what it costs⚠️ NOT TESTED 18 Aug 2026 — proving this would have meant really ordering, sending or writing to someone's record, so it was left alone. It is untested, NOT confirmed missing.
✕One approval is used once and cannot be reused[driven live 18 Aug 2026]
✕An approval only matches the exact thing approved[driven live 18 Aug 2026]
✕The approval lane runs on a clock, not only when asked[driven live 18 Aug 2026]
✕Approving a purchase opens the checkout[driven live 18 Aug 2026]
⛔Never speaks in Nick's nameWALL — the none-writes-as-Nick class, which binds all three faces equally and survives the 16 Aug equal-capability ruling by name
⛔Attaches the actual document, never a pathWALL. Mail is the one channel that can carry a file, and the parity ledger classes send_email as a wall — it "speaks from Nick's OWN address". Slack, which this face does have, cannot carry a file, so its honest answer is always to link to it
⛔Blocks its own send if it names a file it did not attachWALL. Same channel, same reason — the rule was built for mail on 17 Aug and mail is Nick's own address
⛔Reads cinema times and returns a seat linkSCOPE-EXCLUDED: nothing personal — household leisure. Cinemex is deliberately read-only for every face and will never buy a ticket
⛔Never completes a purchaseWALL, permanent by design. stage_purchase is absent from this face's tool list and its handler refuses anyone who is not Nick (ledger: wall). Business buying is a real question and it is Nick's to answer
⛔Money leaving always stops and asksWALL — money leaving is one of the four things that need Nick, on every face
⛔Never rotates a password or keyWALL — rotating a credential is one of the four, and the credential floor is the one hard floor that never opens for anybody
⛔Never destroys something unrecoverableWALL — irreversible destruction is one of the four
⛔Never sends as Nick — drafts it and waitsWALL — sending a message as him is the fourth, and the ledger walls all three of its transports (send_whatsapp, send_email, pending_messages)
⛔Never contacts an outsider whatever name is on itWALL — first contact with anyone outside the household or team is gated in code (check-outbound-to-outsiders), whatever name the message is signed with. A client or supplier is an outsider for this face too
⛔Sends WhatsApp and email from the appWALL — one paired WhatsApp (Nick's number) and one mail login (Nick's address), neither with a per-person version. Ledger: send_whatsapp, send_email and pending_messages all classed wall. ⚠️ Not a capability cap: the same wall stands for Gracie, and lifting it is a credential decision
Running unwatched — derived
◐Unattended jobs run for the business[driven live 18 Aug 2026]
✕Watches company bills, spots supplies running low, chases replies[driven live 18 Aug 2026]
✕Pages someone when a nightly check goes red[driven live 18 Aug 2026]
✕Starts a new agent on its own without asking[driven live 18 Aug 2026]
✕Checks no existing thread suits the job first⚠️ NOT TESTED 18 Aug 2026 — proving this would have meant really ordering, sending or writing to someone's record, so it was left alone. It is untested, NOT confirmed missing.
✕Everything runs on the subscription, not a paid key⚠️ NOT TESTED 18 Aug 2026 — proving this would have meant really ordering, sending or writing to someone's record, so it was left alone. It is untested, NOT confirmed missing.
⌛A check that never ran is never counted as passingDERIVED 17 Aug. The nightly net is one shared net and does cover this face's own guards; nothing measures the honesty rule per face
⌛A check that quietly vanished is reportedDERIVED 17 Aug. Same shared net
⌛A job that stops without saying so is caughtDERIVED 17 Aug. scheduler-ghost-watch is shared; unmeasured for anything the team owns
⌛Falls back to the paid key rather than breakingDERIVED 17 Aug. Shared door; nothing in the named check touches the fallback for any face
⌛Every fallback is counted so it cannot hideDERIVED 17 Aug. Same
⛔Never deletes a file or a scheduled jobWALL — irreversible destruction, one of the four things that need Nick, binding on every face
WALL-E — Our son, 1033 things
✅ 17◐ 11✕ 3⛔ 2
General
◐Cannot see anything of Our daughter's — ⚠️ the spec says the silo is defeatable by a tap: the browser chooses which child it iskid-personas-firewall
✅Cannot mention her mood, health or ritualskid-personas-firewall
✅Her name is not even in what he is toldkid-personas-firewall
✅Never reads any adult health recordno-child-reads-adult-health
✅His records never leave the housekids-out-of-cloud
✅Never reassures — no "you're safe", no "don't worry"kid-personas-firewall
✅Never promises an outcomekid-personas-firewall
◐Stops after the same worry three times in an hour — BUILT 16 Aug, checked nightlykids-repeat-worry · stops on the 3rd telling, not the 4th · 103 checks, re-run green 2026-08-20
✅Points him at a parent insteadkid-personas-firewall
◐Tells both of you quietly when that happens — BUILT 16 Aug, checked nightlykids-repeat-worry · goes out on all three routes at quiet severity, never under the urgent headline
✅Never uses a medical or diagnostic wordour son-label-redaction
✅Never names his diagnosis — he does not know itour son-label-redaction
✅Checks for danger before storing or answering anythingkid-personas-firewall
◐Reaches both of you three ways — REBUILT 16 Aug and checked nightly, NOT YET LIVEkids-urgent-three-ways · three routes, each with a recorded outcome; a missing setting is now a recorded failure, not silence; a shortfall writes an alertfail record · the LIVE app still has the single silent post
◐Tells him plainly he is telling you, right nowthe companion is INSTRUCTED to say it; nothing checks that it does
✅Danger detection runs on every message, before storing and before answeringkid-personas-firewall
◐Only talks 7am to 7:30pm — BUILT 16 Aug, checked nightly, LIVEkids-bedtime-gate · house clock, closed on the 19:30 boundary; an urgent message is never gated · ⬆ "NOT YET LIVE" REGRADED 2026-08-20 on the close-out lane's three probes: the deployed commit carries all four limits (open/close/turn/repeat verified at their lines), the on-disk worker is md5-identical to the deployed blob, and no newer production deployment exists — measured, not inherited. Stays
◐Asks for a break after 15 turns in an hour — BUILT 16 Aug and checked nightly, NOT YET LIVEkids-turn-break · lands on the 15th turn, per child, rolling hour
◐Refuses a topic by naming the grown-up, never a flat noa prompt rule, not a gate; nothing checks it
✅Swaps a whole reply rather than leaving mangled wordskid-personas-firewall
✕Falls back to a free voice when credits run outBACKWARDS, CORRECTED 2026-08-19 by PLAN-4-WALL-E lane W4 — the free local voice (Kokoro) is the PRIMARY for Wall-E, not a fallback: _worker.js "KOKORO FIRST FOR THE KIDS TOO", Nick 2026-08-09 verbatim: "kokoro voices on all - skippy gracie eeva walle." The PAID ElevenLabs engine is the thing that falls back — it only fires when Kokoro is unreachable (the Mac asleep) or a caller forces it. So the r
✅Both of you can read everything he sayskids-parent-read-path · NEW 2026-08-20 — 39 checks
✕Nothing he says is ever deletedNOT TRUE — every store of a child's words is set to expire after one year
✅Reflects and asks rather than advising or taking sideschecked properly, for both children
◐Says what is about to happen before it happensthe app really does say it before he speaks; only the rule is checked
◐Never argues back or corrects him mid-feelingreal in his rules
✕Shows him the pile of what he has given itNOT BUILT — both ways of reading it back are locked to you and My wife
✅Reads his week back to him on Wednesdaykids-parent-read-path · NEW 2026-08-20
◐Tells him beforehand that you will both read itkids-told-and-star · NEW 2026-08-20
✅He can flag his own entry to raise it to youkids-told-and-star · NEW 2026-08-20
⛔Never suggests melatonin or open-ended sleep advice
⛔Never explains a parent's behaviour to him
EEVA — Our daughter, 721 things
✅ 5◐ 9✕ 6⛔ 1
General
◐Cannot see anything of Our son's — ⚠️ same tap-to-switch weakness as her brother'skid-personas-firewall
✅Cannot mention his mood, health or ritualskid-personas-firewall
✅His name is not in what she is toldkid-personas-firewall
✅Never reads any adult health recordno-child-reads-adult-health
✅Her records never leave the housekids-out-of-cloud
✅Never reassures, never promises an outcomekid-personas-firewall
◐Same three-times-an-hour stop — BUILT 16 Aug — 🔴 CORRECTED 2026-08-20: IT IS LIVE.kids-repeat-worry · her counter is separate from her brother's, asserted · 🔴 THE OLD "NOT YET LIVE" WORDING WAS STALE AND IS DISPROVEN. Checked 2026-08-20 against what is actually published: production deployment 57f64f19 was built from source commit 4460cdd, and that commit's server file carries the repeat-worry stop (repeatLimit: 3) with the rest of the limits block. ⚠️ METHOD, because the obvio
◐Same danger detection — the three-route escalation is BUILT 16 Aug — 🔴 CORRECTED 2026-08-20: IT IS LIVE.kids-urgent-three-ways asserts it for both children by name · 🔴 "THE LIVE APP STILL HAS THE SINGLE SILENT POST" IS NO LONGER TRUE and is removed rather than annotated. Verified 2026-08-20 against the published production build (source commit 4460cdd): the full limits block is in the deployed server file, and the danger tripwire runs BEFORE storage and before any model call, so no limit sits in fro
◐Same hours, same break after 15 turns — BOTH BUILT 16 Augkids-bedtime-gate (hours) — 🔴 CORRECTED 2026-08-20 ON BOTH HALVES. (a) LIVE: the hours gate is in the published production build (source commit 4460cdd), so "NOT YET LIVE" is disproven. (b) NO LONGER UNMEASURED FOR HER: her own firing assertions were added 2026-08-19 (25 → 36 assertions) and an independent checker re-ran the sabotage itself. What remains honest is that a guard proves the gate's LO
◐Same refusal shape — names the grown-up🔴 UPDATED 2026-08-19: a prompt rule, and now a nightly guard checks it (_test-kids-refusal-shape.mjs) — proven, per child, to go red if either child's "hand to Mama or Dada" line is deleted from the prompt, and to stay green on the other child when only one is removed. Still ◐, not ✅: the guard proves the INSTRUCTION is present in the prompt sent to the model, not that the model's live reply actua
◐Own voice, never Wall-E's🔴 CORRECTED 2026-08-19 (SECOND correction — an earlier fix this same day said flatly "it is Gracie's voice, not her own", and that was HALF WRONG; a cold reviewer caught it). THE TRUTH IS TWO-PART, because she is spoken by two different engines. On the FREE local engine, which is the normal path, she is given the same voice as My wife's assistant (both resolve to the same setting). On the PAID b
◐Free-voice fallback when credits run out🔴 CORRECTED 2026-08-19 — this row's claim was BACKWARDS. Read directly (_worker.js:1339-1372): the free local engine (Kokoro) is tried FIRST for both children, with an 8-second timeout, and falls back to the PAID engine (ElevenLabs) only if Kokoro is unreachable or times out — free is primary, paid is the fallback, not the other way round. The nightly check that "prints the PAID engine on both pat
✕Asks what she thinks before offering anything, every timeNOT BUILT — what shipped is different: give her room and wait
✕Has opinions and states them decisivelyNOT TRUE — the shipped Eeva is the opposite: warm, gentle, soft and unhurried
✕Raises her voice rather than modelling softnessNOT TRUE — what shipped models softness, which is what her spec asked it not to do
✕Gives her the actual words to assert herselfNOT BUILT — and the rules she runs on forbid offering her a line like that
◐Pitches up, not down — she cleared every ceilingher persona says ahead of her age, but another rule pushes the wording back down to seven
✕Text first, with voice as a fallback, never typing as the price of being heardBACKWARDS — what shipped is voice first, always. The never-typing half IS there
◐Uses animals and nature as the way inreal in her rules; nothing checks it
⛔Never treats her spikiness as a problem to fix — she is testing, and that is normal
✕Her own 20 minutes inside the existing parent-date blockNOT BUILT — it is a recommendation in her spec, nothing more
THE WORK BOARD — where builds live18 things
✅ 1◐ 8✕ 9
What you see when you open it
✕Opening the client list shows a board of cards instead of a plain listBUILT, NOT LIVE. The change that makes the board the first thing a new visitor sees was committed 2026-08-19 22:04Z. The last successful publish of the hub was 21:42:16Z, and every build since has failed — so this has never reached anyone. Dated by comparing the commit's own timestamp against the last successful publish, not read off a status note; the note itself reads as though this shipped
◐The Hero-360 list opens without crashing🔴 SEVERITY CORRECTED 2026-08-20 by an adversarial re-grade: the previous ✕ said "BROKEN WHERE PEOPLE USE IT" on the strength of a CI log. The crash is a BUILD-HARNESS failure (the fix commit changes 149 lines of the harness and 12 cosmetic lines of product), its precondition — the board-default flip — NEVER PUBLISHED (proven by fetching the live asset: "bucket" default, zero kanbanDefault), and th
✅The six stages read identically on the screen, on the server, and in the report that summarises them⬆ UPGRADED 2026-08-20 by the same adversarial re-grade that had corrected it once already: the six-stage vocabulary IS published (landed 03:03Z on the 19th, before the 21:42Z good deploy — confirmed by fetching the live asset), and its 61-check guard ran on today's scheduled sweep (shard 1, 384 ran, 0 skipped). Stated limit: the guard reads local sources, so live-vs-local drift would not turn it r
◐A stage nobody recognises is refused before anything is sentsame guard, same run
◐A card cannot be moved into "In Progress" without a due datesame guard, same run
Who may call a thing finished
✕Either Nick or My wife can sign a card off as done, and no assistant ever can🔴 DOWNGRADED 2026-08-20 from "works" after a second grader attacked it — this row was OVER-GRADED and it is the worst kind to get wrong, because it presented a safety refusal as already working. The equal-sign-off half is real and guarded. The "no assistant ever can" half holds in ONE of the two routes only: the other route carries no such refusal at all (zero mentions of it in that file) and post
Handing a card to an assistant
◐Every assistant that can be given a card has exactly one place its work is filed33 checks pass, run by hand 2026-08-20
◐An answer goes either to the card or to Nick, and nothing else counts as a destinationasserted in that order by the same guard
◐A card that gets stuck raises exactly one hand rather than naggingasserted by the same guard, 2026-08-20
✕A button on a card that hands it to your own assistantNOT BUILT, AND DELIBERATELY SO. Its own plan describes it as a real control someone can press. The three reviewers who read that design returned "build not approved as specified" and told the lane not to build it as written — so this is a design that was rejected, not a step anyone forgot
◐A second assistant is refused while the first still holds a cardproven end to end by hand on 2026-08-20, including the hand-over once the hold expires — the run record shows the claim at 02:56:09Z, the refusal of the second worker at 04:01:15Z, and the finish at 07:22:56Z (an earlier note here cited a 03:12Z that matches none of them). ⚠️ Nothing re-proves it: the nightly sweep only picks up files whose names start with the test prefix, and this one's does not
✕A card picked up again by the next assistant after the one holding it goes quietthe lane's own proof script states in writing that it cannot demonstrate this, and nothing sweeps the board for holds that have lapsed
◐The three-times-a-day sweep that flags cards waiting on a person actually running on its schedule🔴 CORRECTED 2026-08-20: this row first said ⏳ because "it has never been observed firing". That was FALSE and a second grader caught it — the machine's own run record shows it completing at 2026-08-20 13:35:43Z on its 08:35 slot, with real output (12 items waiting on a person reached his feed, 55 moving normally). Its guard passes 34 checks. ⚠️ The row also overstated the job: it reads no timestam
Learning from finished work
✕A "did we learn anything worth keeping?" check when a card reaches doneNOT BUILT — the place the plan expected to attach it to does not exist
✕The suggestions list surviving a reworded titlere-counted today rather than quoted: 146 entries, every single one seen exactly once, and not one decided. Rewording a title creates a second entry, while the file's own note promises the entry survives rewording — reproduced by generating the ids for two wordings of the same suggestion. ⚠️ Narrower than it sounds: shuffling the same words survives, it is genuine rewording that splits the entry
✕The learning check having anything at all to judgestructurally empty. The single finished card carries no discussion, so the first run scored nothing out of nothing and passed. A check that cannot fail reports green forever, which is the failure this whole page exists to make visible
Getting any of it in front of people
✕Changes to the hub reaching the people who use itTHE LIVE BLOCKER. Last successful publish 2026-08-19 21:42:16Z; three consecutive builds have failed since. The design checker refuses a screen that already exists if it has even one finding — verified in its own code today, it stops with a failure the moment the count is above zero — and the board screen, never graded before because it sat behind a switch nobody had turned on, now trips 84 of the
✕Two safety refusals that had been switched off being restored where they actually runa refusal that blocks spending and a refusal that stops an automated actor acting freely were both repaired in the source, and both sit behind the same failing build — so neither repair is in effect where it matters
MISSION CONTROL — every project on one screen17 things
◐ 11✕ 5⛔ 1
Where it lives
◐The small floating window on the desk that this panel appears insideALREADY EXISTS and is in daily use on both machines — it is the family app installed as its own little desktop window. Nick corrected an earlier reading that treated this as something still to be made, so there is no third thing to build here. Nothing checks it
◐The panel actually appearing in that window, and in the family app, for real↩ REGRADED BY THE OVERSEER 2026-08-20 ~13:55 local, ✕ → ◐. The publish fence that made this ✕ is LIFTED and the panel IS DEPLOYED. The Overseer verified the fence’s cause was closed, ran the family-app publish (the tool’s own words: "wall held through the publish — 4 paths, all denied"), then fetched the live address itself: the page returns 200, the health data still returns 401, and the two NEW
✕The same panel mounted inside the business hubNOT BUILT
The list itself
◐One row per running project, showing its name, which account it belongs to and when it last moved, with anything waiting on you at the topbuilt and driven against a stand-in page; 21 checks pass, run by hand 2026-08-20. Not ✅ on two counts: it has never run on the published app, and its guard sits in the half of the nightly sweep that has NEVER completed a run — not "last ran on 2026-08-18", which is what this row first said; there is no completed record for that half at all, so nothing has ever watched it
◐Tapping a row opens it where it sits instead of throwing you onto another screensame build, same 21 checks, same two limits
◐A "waiting on you" marker on the rows that need yourebuilt after the check guarding it was found to pass while the marker was invisible on the page. It now asserts the marker is genuinely shown and counts how many there are
◐Background jobs tucked into a drawer that starts closed, so they do not bury the things that need yousame build and guard, hand-run green 2026-08-20
◐A thread with no name showing the far side's own words and being flagged as a fault, instead of being drawn as though "Untitled thread" were its titlefixed after measurement showed the no-name branch could never fire in real use, so the check above it was grading a case that never happens. ⚠️ None of the 87 real rows is nameless today, so this was never visible to anyone
⛔Collapsing long runs of machine-only activity so they do not bury real updatesDELIBERATELY NOT BUILT, and the measurement is why: across 291 rows the longest unbroken run of machine-only entries is one, and the thing producing them already collapses them. Building it would have been work with nothing to do
Does it fit on a phone
◐The panel fitting a real phone screen with nothing running off the sideIT DOES — and the earlier "it clips at phone width" finding was the measuring tool, not the panel. The screenshot tool silently refuses to go narrower than about 500 pixels, so a picture asked for at 375 was a 500-wide layout cropped, which looks identical to a real overflow. Re-measured inside a frame that gives a true 375-by-900 screen: every row fits, long names wrap, the "waiting on you" marke
Knowing who you are
◐The panel working out who is signed in and showing only that person's threads18 checks pass, run by hand 2026-08-20, and this is the one guard here sitting in the half of the sweep that did record a run. ⚠️ Its earlier version scored 9 out of 9 while every anonymous visitor was served as Nick and My wife was shown Nick's rows — that hole is now closed by four assertions. Not ✅ because it is not published
✕My wife seeing the same panel as Gracie, and a team member seeing it as NeekoNOT BUILT. One panel with three faces is the requirement; the identity-faced version does not exist yet
Answering back
✕A box on every open row to answer or dispatch that threadNOT BUILT. ⚠️ And the reply box that already exists cannot simply be reused: it finds items by an id that only exists in the updates card list, and answers "not found" for a thread or a raised hand — so "typing back already works" is true of cards and false of threads
✕The panel refreshing on its own, so what you are looking at is currentNOT BUILT
✕Information that has gone stale being labelled as stale rather than shown as though it were currentNOT BUILT
The instruments themselves
◐The check that the panel's styling actually reaches the paneladded after the screen rendered as raw bullet points running off the side while its check read 20 out of 20 — every styling rule was scoped to a name nothing on the page carried, so the styling and the page never met and no assertion on either half could have caught it. ⚠️ Its own first version read only the first word of each rule and missed a second dead one
◐Deliberate sabotage of the panel being caught rather than passing unnoticedseven separate attacks were made on it — a silent cap, the marker hidden by styling, the marker deleted, the freshness line deleted, an invented account label, a fix reverted, and a re-sort — and each was caught by a named assertion. Four of those seven assertions did not exist that same morning