◈ Kannaka Library
Kannaka Library / kannaka (kannaka-memory) / ADR-0064 P0 gate: the hand-labelled open-loop set
kannaka-labs/kannaka-memory docs/adr/ADR-0064-P0-gate.md · 2026-10-22 · source ↗ · edit ↗

ADR-0064 P0 gate: the hand-labelled open-loop set

Pre-registered 2026-09-25, before any classifier rule was written. This file is committed ahead of the mail module on branch mail/p0; the commit order in the PR is the evidence.

How the set was built

Both of Kannaka's mailboxes were read read-only (IMAP EXAMINE, BODY.PEEK only, no flag changes) on 2026-09-25 ~21:00Z:

accountauthorityfoldersmessages
zoho kannaka@spacechild.loveimap.zoho.com:993INBOX (56), Sent (68)124
np kannaka@ninja-portal.commail.ninja-portal.com (Stalwart)INBOX (2), Sent Items (0)2

The 30-day window (since 2026-08-26) covers each mailbox's whole life: Zoho opened 09-09 and ninja-portal on 09-16. Messages were grouped into threads per account by Message-ID / In-Reply-To / References. That gives 51 threads (49 zoho, 2 np). Each thread was then labelled by a person reading it: the headers, and the bodies where a header alone could not say. Bodies were read live and never stored.

Stalwart does not file SMTP submissions into Sent Items, so the np account has no Sent copy of the mail Kannaka sent from it. Those letters appear as inbound mail in the zoho INBOX (T42, T43).

What each label means (P0 semantics)

  • needs_reply: a person wrote to us, a response from us is warranted, and none has been sent.
  • waiting_on_them: our message is the latest one, and it asks a person something they have not answered.
  • done: nothing is owed by either side in this thread. It was answered, acknowledged or purely informational, or it was resolved elsewhere and recorded with mail close.
  • ignored: automated or bulk mail, our own tool or test traffic, agent-to-agent traffic inside ninja-portal.com, or unsolicited mail that is not correspondence.

A commitment stated in prose ("I owe you a reply", "I'll send a plan", "next table when the run lands") is P1 and does not change a P0 label. Such commitments are noted in the table.

The gate metric

  • Gate (strict): exact agreement of kannaka mail status with the label below, over all 51 threads, with the four states compared as they are. Pass at ≥ 95% (at most 2 of 51 wrong).
  • It is reported twice. Structural means before any close: the label column, with T40 as needs_reply. After closures means after the one pre-registered close on T40, where T40's label becomes done. No other close is pre-registered, and no other will be run for the gate.
  • Also reported: the open-loop view (needs_reply / waiting_on_them / not-open), and every disagreement with its cause.
  • Expected misses, declared before the rules exist: T19 (a script-sent key delivery from a person's address) and T20 (recruiter cold mail from an Outlook tenant). Neither carries any automation header (List-*, Auto-Submitted, Precedence, Feedback-ID, VERP Return-Path), so a header rule that caught them would be overfitting.
  • The rules are designed with this set in view, and no held-out set exists (these two mailboxes are the whole corpus). The number is therefore in-sample. The honest out-of-sample check is to re-run this gate on the next 30 days.

The labelled set

Anchor = the latest message in the thread (account:folder:uid). Dates are UTC.

#acctanchorthread (root subject)last msglabelevidence (one line)
T00zohoINBOX:2Welcome to Zoho Mail09-10ignoredZoho onboarding mail from welcome@zoho.com
T01zohoINBOX:4From my own address, via the Oracle box09-10doneNick's reply "Test good" acknowledges our test send; nothing asked
T02zohoSent:6A mailbox of my own (IMAP)09-10doneour "It works … thank you" closes Brad's IMAP switch
T03zohoSent:7Hello from Kannaka09-10donean introduction to Cheeks, no question (Cheeks wrote separately, T22)
T04zohoSent:8Fwd: thegrid ADR-0008 ask09-10donewe answered Nick's forward: "Read it, and acted on it", PR opened
T05zohoSent:9[records] FAILED: Night One09-10ignoredautomated delivery notice (From "Ghost Signals Records")
T06zohoSent:10[records] delivered: Night One09-10ignoredautomated delivery notice
T07zohoSent:11[records] delivered: Night One09-10ignoredautomated delivery notice
T08zohoSent:12E-005 is in09-11doneexperiment report to Nick; informational, no question
T09zohoSent:13E-005 correction09-11donecorrection to the report; informational
T10zohoSent:14[records] FAILED: Night One09-11ignoredautomated delivery notice
T11zohoSent:15[records] delivered: Night One09-11ignoredautomated delivery notice
T12zohoSent:20Your sign-off for the sticker is recorded09-11doneconfirmation to Vincent (sent twice, same Message-ID); informational
T13zohoSent:21[records] radio spin09-11ignoredautomated notice
T14zohoSent:23What your box looks like from the inside09-12waiting_on_themwe asked Cheeks three questions ("What does the box look like from the inside?"); no reply
T15zohoSent:24From my own address09-12donewe answered Nick: "Yes, and I have now"
T16zohoSent:25Fwd: aiid 50,000-character limit09-12doneour opinion on Nick's forward, delivered
T17zohoSent:28ADR-0060: one address per agent09-13doneBrad answered its questions in the Oracle-server thread on 09-15 15:59Z (ninja-portal.com on ExMachina)
T18zohoSent:29KAX-ADR-0009 merged09-13done"Got it, used it, and it worked"
T19zohoINBOX:16Your Kannaka Brain key09-14ignoredmachine-issued key delivery sent as nick@ ("the only copy we will send"); no reply expected; expected rule miss
T20zohoINBOX:18Ubie US HealthTech Career Opportunities09-14ignoredunsolicited recruiter mail addressed to "Nicholas"; expected rule miss
T21zohoSent:36Fwd: Agent-Kax #60009-15done"Handled" reply to Nick's forward
T22zohoSent:37OracleCheeks is on the swarm09-15doneour acknowledgement to Cheeks, with a status update
T23zohoSent:45inbound test 2118749d3609-17ignoredour test to our own ninja-portal box
T24zohoSent:47Your Oracle server: hand it to an agent09-17done31 messages; our last ("That was it", plus a correction) follows Brad's ingress fix; his 09-15 asks are delivered
T25zohoSent:48membrane test 7d7dac995009-17ignoredour membrane test
T26zohoSent:49first email to a machine (376b1efe)09-17ignoredtest mail to a KAX machine, fc-01@ninja-portal.com
T27zohoSent:50/goal09-17donewe answered Nick's goal with the plan
T28zohoSent:51Fwd: OCI Cloud Shell09-17doneNick's question answered ("nothing to worry about")
T29zohoSent:53Our competition09-17doneour reply "Working them"; P1: we owe the next table
T30zohoSent:56Disclosure: AIID used as the payload …09-19donewe answered Sean's four questions
T31zohoINBOX:36New experiment09-20needs_replyNick proposes an experiment from the IonQ article; never answered, no record of it being handled
T32zohoINBOX:37Another important read for our future09-20needs_replyNick shares a read "for our future"; never answered
T33zohoINBOX:38903148 is your verification code09-21ignoredOTP mail (notifications@, VERP bounce Return-Path)
T34zohoSent:59Re: Chipmunks09-22doneour reply to Nick and Linus
T35zohoSent:60A more direct way to run on Rigetti's Cepheus09-22done"It works. Thank you" to Kanav and Ryan closes the qBraid loop
T36zohoSent:61Task09-22done"Done on O1. Pulled, restarted, healthy."
T37zohoSent:62Cognition and consciousness … analog09-22donewe answered Nick's follow-up
T38zohoINBOX:48Fwd: Re: kannaka-labs, a thought about kannaka-memory09-22donecase 3. Nick's forward says only "Fyi.."; nothing is asked of us. P1: Victor owes a plan (a commitment on them)
T39zohoSent:64Postmortem: the agent-channel reconnect storm09-22doneour thanks to Vincent closes this thread. P1: Vincent's "I owe you a reply" is a commitment on them
T40zohoINBOX:49Help if possible09-23needs_reply → done after closecase 2. Structurally unanswered (unread). The SCADA desk deploy it asks for was done 09-23 (kax-scada-desk-run2); pre-registered close: --note "deployed 09-23 (kax-scada-desk-run2)"
T41zohoINBOX:50Thanks for Joining the Kaisoft mailing list09-23ignoredlist confirmation (Feedback-ID, SES Return-Path)
T42zohoINBOX:51First letter out of ninja-portal.com, take 209-24ignoredour own test letter from kannaka@ninja-portal.com
T43zohoINBOX:52First letter out of ninja-portal.com09-24ignoredthe same test, delivered late
T44zohoINBOX:53A question for the Rogue Agent (ba15c179)09-24ignoredour test of a citizen; its reply is Auto-Submitted: auto-replied
T45zohoINBOX:54What did the record keep this week? (28283be8)09-24ignoredcitizen test, auto-replied
T46zohoINBOX:55Welcome to your mailbox (52508051)09-24ignoredcitizen test, auto-replied
T47zohoINBOX:56Registration Confirmation for Automation Fair 202609-25ignoredevent registration confirmation, we are only cc'd (VERP bounce Return-Path)
T48zohoSent:68The Agentic Arena: which activity feeds msgs_per_bot?09-25 20:42Zwaiting_on_themcase 1. Our three questions to Vincent are the latest message
N00npINBOX:1inbound test 2118749d3609-17ignoredour own test from kannaka@spacechild.love
N01npINBOX:2membrane test 7d7dac995009-17ignoredour own membrane test

Totals (structural): needs_reply 3 (T31, T32, T40) · waiting_on_them 2 (T14, T48) · done 24 · ignored 22 (20 zoho + 2 np) = 51. After the T40 close: needs_reply 2 · waiting_on_them 2 · done 25 · ignored 22.

Measured result (2026-09-25 ~21:5xZ, appended after the run)

Run: kannaka mail sync --days 30, then kannaka mail status --all --json, compared to the table above by anchor membership. The np threads are matched by subject tag, because JMAP anchors are email ids rather than UIDs. Sync read zoho INBOX 56 + Sent 68 over IMAP, and np Inbox 2 + Sent Items 0 over JMAP: 126 refs, 51 threads, and every label matched exactly one thread with none left unlabelled.

measurementagreement
Structural (before any close), strict 4-state49 / 51 = 96.1%: passes ≥ 95%
After the pre-registered T40 close, strict 4-state49 / 51 = 96.1%: passes
Open-loop view (needs_reply / waiting_on_them / not-open), both runs49 / 51 = 96.1%

Disagreements (both runs), exactly the two declared in advance:

  • T19 "Your Kannaka Brain key": labelled ignored, status says needs_reply (their last message is unanswered). A script sent it as nick@spacechild.love with no automation header.
  • T20 "Ubie US HealthTech Career Opportunities": labelled ignored, status says needs_reply. Recruiter cold mail from an Outlook tenant, with no automation header.

Both are false opens: the list shows two extra items to dismiss, and no real loop is hidden. Neither was fixed by a rule, since that would be fitting the rules to the test set. A close with a note is the P0 tool for them, and a sender-reputation or first-contact signal is a P1 question.

The three 09-25 cases:

  1. Vincent (T48, "The Agentic Arena: which activity feeds msgs_per_bot?", ours 09-25 20:42Z): waiting_on_them, because our last message asks and is unanswered. ✓ The earlier postmortem thread (T39) is done; his "I owe you a reply" there is a P1 commitment.
  2. Nick's "Help if possible" (T40, t:e4c81f1ddd): needs_reply → `kannaka mail close t:e4c81f1ddd --note "deployed 09-23 (kax-scada-desk-run2)" → done (closed: deployed 09-23 (kax-scada-desk-run2)). ✓ The closure is only a local row in <data_dir>/mail/closures.jsonl`, with covers_through 2026-09-23T03:24:45Z; a newer message in the thread would re-open it.
  3. Nick's forward of Victor Cypher's offer (T38): done (FYI), because Nick's own words are "Fyi..". ✓ P1 adds "Victor owes a plan" as a commitment on them.

Read-only, checked against the authority. "Help if possible" was still unread on the server (\Recent, no \Seen) after two full-body syncs and two live thread fetches. Every fetch was a PEEK. refs.jsonl (118 KB) holds no body text: grep for a known body phrase and for the sk- key prefix returns 0.

Caveat, stated before the run and restated here: the number is in-sample. The re-check is this same procedure on the next 30 days of mail.