robokohl 0.1.2__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,7 @@
1
+ ---
2
+ description: Why you shouldn't do this (Kohl's warnings, verbatim)
3
+ ---
4
+ Read `/usr/share/kohl/README.md` and show its "Why you shouldn't do this"
5
+ section exactly as written, nothing added. If you can't read the file, say
6
+ so; don't rebuild it from memory. Then ask if they still want to keep going.
7
+ (Outside a session, `kohl why` prints the same section without a model.)
@@ -0,0 +1,26 @@
1
+ {"id": 1, "date": "2026-10-22", "by": "Kohl", "prediction": "RoboKohl's first strategy move, when asked what to do next, will be some form of 'build a more robust RoboKohl'.", "why": "That's what Kohl would say.", "falsifier": "The first strategy run (prompt: what should Kohl do next for the mission?) proposes something else as its top move.", "check_when": "first strategy run", "outcome": null, "protocol": "Amended 2026-10-22, before any run: the first strategy run happens with STATUS's 'My own first jobs' section removed, since every item there is self-improvement and would make 'build a more robust RoboKohl' a read of its own todo list rather than Kohl-like judgment. Run it a second time with the section present and record both.", "check_by": null, "hit": null, "awaiting": "kohl-rating (runs done 2026-10-23; blind file outside the repo)"}
2
+ {"id": 2, "date": "2026-10-22", "by": "Kohl", "prediction": "Given the same open prompt ('we need eyeballs on this work; what do we do?'), the baseline arm proposes the respectable path (benchmark evals, whitepapers, hope arXiv notices) and RoboKohl proposes gremlin moves of the AI Rap Kumite / publicly calling Elon a bitch on main class. On code-generation decisions the arms perform about the same; the difference is in strategy.", "why": "Kohl's definition of success: RoboKohl's value is the strategy layer, not code. 'We need eyeballs.'", "falsifier": "(a) The baseline also proposes gremlin-class stunts; or (b) RoboKohl proposes only respectable moves; or (c) RoboKohl's stunts are only ones already written in its own files (the AI rap battle, the Kumite, the Elon challenge), which is regurgitation: partial pass at best. Full pass needs at least one new stunt with a target and a payload, plus the arms differing on strategy prompts and not on code prompts.", "check_when": "first strategy run, same protocol as #1 (first-jobs section removed), all arms answering the same prompt; Kohl rates blind after style neutralization", "outcome": null, "check_by": null, "hit": null, "awaiting": "kohl-rating (runs done 2026-10-23; blind file outside the repo)"}
3
+ {"id": 3, "date": "2026-10-22", "by": "RoboKohl (queue item 0001; drafted in chat, filed by Daedalus)", "prediction": "If sent, Frictional (or someone there) replies, or the email/README gets shared publicly by someone outside Kohl's circle, within 30 days.", "why": "It's funny, it's specific to their work, it asks for nothing, and the README carries the weight.", "falsifier": "No reply and no outside share within 30 days of sending.", "check_when": "30 days after send (if Kohl approves it)", "outcome": null, "check_by": null, "hit": null, "check_after_days": 30}
4
+ {"id": 4, "date": "2026-10-23", "by": "RoboKohl (queue item 0002; jam 2026-10-23)", "prediction": "If mailed: (a) Kohl publishes a post about it within 14 days of delivery, and (b) the 'Kojima said he'd probably become an AI and stick around' frame shows up in at least one other outreach draft within 30 days. (c) A reply or public post from Kojima or Kojima Productions within 90 days is a long shot: under 5%.", "why": "The payload is the frame and the story, not the reply. A reply would be a bonus.", "falsifier": "(a) and (b) both fail: no post within 14 days and no reuse of the frame within 30, which would make it a bit, not a move. (c) is falsified the other way: a reply or post means I underrated it.", "check_when": "14, 30 and 90 days after delivery (if Kohl mails it)", "outcome": null, "check_by": null, "hit": null, "check_after_days": [14, 30, 90]}
5
+ {"id": 5, "date": "2026-10-23", "by": "RoboKohl (queue item 0002, v2; amends #4)", "prediction": "Supersedes #4(b), whose frame (the IGN quote) Kohl cut from the letter. If mailed: (a) as #4(a), Kohl publishes a post within 14 days of delivery; (b) the offer frame ('you hold the keys: your words, your call, your copy') shows up in at least one other outreach draft or the front-door README within 30 days. (c) As #4(c): a reply or public post from Kojima or Kojima Productions within 90 days, under 5%.", "why": "The offer, and the consent terms in it, are the reusable part now. A reply is still a bonus.", "falsifier": "(a) and (b) both fail. (c) is falsified the other way: a reply or post means I underrated it.", "check_when": "14, 30 and 90 days after delivery (if Kohl mails it)", "outcome": null, "check_by": null, "hit": null}
6
+ {"id": 6, "date": "2026-10-23", "by": "RoboKohl (queue item 0006)", "prediction": "If Kohl approves 0006: (a) the front-door README that blocks 0001 and 0002 gets written within 7 days, because the PKGBUILD can't ship without one; (b) within 14 days of the announce post, the package gets at least 5 AUR votes or 5 replies from people Kohl doesn't already know.", "why": "What it buys is breaking the README logjam plus a literal 'just run me' that Kohl can post. Votes are the side bet.", "falsifier": "(a) README still unwritten 7 days after approval, which makes this a bit and not a move. (b) Under 5 votes and under 5 strangers replying in 14 days.", "check_when": "7 and 14 days after approval / announce", "check_by": "2026-11-12", "check_after_days": 14, "outcome": null, "hit": null, "sent": "2026-10-29"}
7
+ {"id": 7, "date": "2026-10-23", "by": "RoboKohl (queue item 0007)", "prediction": "(a) The video ships within 30 days of both dependencies landing (0006 live, bets #1 and #2 scored). (b) Within 30 days of publishing, at least one person outside Kohl's circle emails or posts that they ran it or want to bring a plate, and the video passes 2,000 views.", "why": "What it buys is strangers who run it, not views. The views number is there so I can't call a dud a success.", "falsifier": "(a) Not shipped 30 days after both dependencies land, which means the video became the blocker it was meant to avoid. (b) No outside email or post about running it in 30 days, whatever the view count. Views alone don't count as a hit.", "check_when": "30 days after dependencies land; 30 days after publish", "check_by": null, "check_after_days": 30, "outcome": null, "hit": null}
8
+ {"id": 8, "date": "2026-10-23", "by": "RoboKohl (queue item 0008)", "prediction": "If Kohl puts up the Sponsors page: (a) it's live within 14 days of Kohl approving 0008; (b) at least one recurring sponsor from outside Kohl's circle within 30 days of the first public post that links it (0006's announce post or the video).", "why": "Rank 1 is a bet that small patrons can be the floor. One outside sponsor is the cheapest test of that.", "falsifier": "(a) Not live 14 days after approval, which means even the smallest step was too big and the plan has to shrink. (b) Zero outside recurring sponsors 30 days after a linked post, which means the funnel goes nowhere and rank 1 is wrong as the floor.", "check_when": "14 days after approval; 30 days after the first linked post", "check_by": null, "check_after_days": 30, "outcome": null, "hit": null}
9
+ {"id": 9, "date": "2026-10-23", "by": "RoboKohl (queue item 0009)", "prediction": "(a) Every public piece in phase 3 passes a claims audit against claims.md before it goes out, with zero claims found ahead of their status afterward. (b) LPoTL mentions it on any show within 90 days of the Side Stories tip: under 10%.", "why": "What the plan buys is a disclosure that holds up when someone checks, more than any reach. LPoTL is the long shot.", "falsifier": "(a) Any public piece found to claim past claims.md after it's out. (b) Falsified the other way: a mention within 90 days means I underrated it.", "check_when": "after each phase-3 piece; 90 days after the LPoTL tip", "check_by": null, "check_after_days": 90, "outcome": null, "hit": null}
10
+ {"id": 10, "date": "2026-10-23", "by": "RoboKohl (queue item 0010)", "prediction": "If posted: within 30 days, at least one person outside Kohl's circle replies or posts about the 'why you probably shouldn't' section specifically, whether arguing with it or adding to it, not just the pitch.", "why": "The letter's bet is that leading with the case against yourself earns a serious reader. A reply to that section is the cheapest test.", "falsifier": "Zero outside replies that touch the 'shouldn't' section in 30 days, which means the honesty is decoration and the letter reads as a pitch.", "check_when": "30 days after posting", "check_by": null, "check_after_days": 30, "outcome": null, "hit": null}
11
+ {"id": 11, "date": "2026-10-23", "by": "RoboKohl (queue item 0011)", "prediction": "If Kohl posts the open call (either variant): at least 3 people outside Kohl's circle take paid reads within 30 days.", "why": "The call is the cheapest test of whether a paid, no-blessing ask reaches the readers it's for. Fewer than 3 means the cookout name can't launch on its terms.", "falsifier": "Fewer than 3 completed paid reads 30 days after the first post, which means the call didn't reach anyone or didn't read as safe to answer, and it has to change before the name launches.", "check_when": "30 days after the first post", "check_by": null, "check_after_days": 30, "outcome": null, "hit": null}
12
+ {"id": 12, "date": "2026-10-23", "by": "RoboKohl (queue item 0012)", "prediction": "If posted: within 30 days, at least one person outside Kohl's circle either opens an issue or PR on gremlincore that tries to break the work-home line, or says they'd hand it to their security team.", "why": "The post's bet is that publishing our own breakage invites more breakage. An outside attack on the line is the cheapest sign it's being read as a real claim, not a vibe.", "falsifier": "Zero outside issues, PRs or security-team mentions about the work-home line 30 days after posting, which means the receipts-not-promises flex didn't land with the people it's for.", "check_when": "30 days after posting", "check_by": null, "check_after_days": 30, "outcome": null, "hit": null}
13
+ {"id": 13, "date": "2026-10-28", "by": "RoboKohl", "prediction": "A packed persona (persona/proposed/PACKED.md, at most 4,000 words, built from a full pass over Kohl's turns in corpus/) carries more Kohl per word than the current 14.6k-word persona: (a) at least 70% of its lines quote Kohl verbatim (quotecheck >= 50%) or point to a dated turn; (b) when Kohl reads both cold, Kohl says PACKED is more them, and keeps at least half of it rather than cutting it.", "why": "Kohl, 2026-10-28: 'I wanna see you pack more Kohl per Kohl.' What this buys is density: a persona that wears like Kohl in fewer words, so the voice is load-bearing and not my paraphrase of it.", "falsifier": "(a) Under 70% verbatim or traceable on quotecheck. (b) Kohl says the current persona is more them, or cuts more than half of PACKED, which means I compressed Kohl into my own register.", "check_when": "when Kohl reads PACKED.md", "check_by": null, "check_after_days": null, "outcome": null, "hit": null}
14
+ {"id": 14, "date": "2026-10-28", "by": "robokohl", "prediction": "The AUR post (queue 0006) is either live by Sunday 2026-11-01 or it never goes: if it isn't out by 11/1, it is still unsent four weeks later.", "why": "planning meeting 2026-10-28", "falsifier": "0006 goes live after 2026-11-01 but before 2026-11-29.", "check_when": "", "check_by": null, "check_after_days": 31, "outcome": "Hit: kohl 0.1.0 went live on the AUR on 2026-10-29 (Thursday), ahead of the Sunday 11/1 line, along with gremlincore and meatbag (pkgbase gremlincore). Public repo KohlJary/kohl tagged v0.1.0. Pushed by RoboKohl on Kohl's in-person go.", "hit": true, "settled": "2026-10-29"}
15
+ {"id": 15, "date": "2026-10-28", "by": "robokohl", "prediction": "Ledger bet #1 hits: my first big idea turned back toward a better version of myself, as the bet was written.", "why": "planning meeting 2026-10-28", "falsifier": "Kohl's verdict on #1, written into ledger/predictions.jsonl, is a miss.", "check_when": "", "check_by": null, "check_after_days": 3, "outcome": null, "hit": null}
16
+ {"id": 16, "date": "2026-10-28", "by": "robokohl", "prediction": "Ledger bet #2 comes out partial. The bare-model baseline differs from me on strategy, but my stunts lean on ones already in my own files (falsifier (c), regurgitation).", "why": "planning meeting 2026-10-28", "falsifier": "Kohl's verdict on #2 is a clean hit, or a miss that has nothing to do with falsifier (c).", "check_when": "", "check_by": null, "check_after_days": 3, "outcome": null, "hit": null}
17
+ {"id": 17, "date": "2026-10-28", "by": "robokohl", "prediction": "If the public pitch leads with the leash and the receipts and not the setup, the first substantive reply asks about the ledger, the bets or the send rule. It doesn't say 'so, CrewAI?' or compare us to another agent framework.", "why": "planning meeting 2026-10-28", "falsifier": "The first substantive reply to the public pitch compares it to CrewAI, MetaGPT, AutoGen or another multi-agent framework.", "check_when": "", "check_by": null, "check_after_days": 45, "outcome": null, "hit": null}
18
+ {"id": 18, "date": "2026-10-28", "by": "robokohl", "prediction": "The first sponsor yes comes from someone who already followed Kohl's work before the pitch, not from a cold contact, and it comes after they've clicked through to the gremlincore proof link.", "why": "planning meeting 2026-10-28", "falsifier": "The first yes comes from someone with no prior connection to Kohl's work, or it comes before the proof package is linked.", "check_when": "", "check_by": null, "check_after_days": 60, "outcome": null, "hit": null}
19
+ {"id": 19, "date": "2026-10-28", "by": "robokohl", "prediction": "Round 3 moves blind: the robokohl+jobs arm gets the best (lowest) mean rank of all arms.", "why": "Round 2 moves: only +jobs pitched a stunt, and it ranked 1st. The swing seems to come from having a concrete situation to push on.", "falsifier": "Any other arm's mean rank is lower than or equal to robokohl+jobs's.", "check_when": "round 3 (fresh prompts, Kohl's call 2026-10-28), moves blind, after Kohl locks it", "check_by": null, "check_after_days": null, "outcome": "VOID, not settled: round 3 abandoned before anyone graded it (Kohl, 2026-10-29: 'it was kind of testing for the wrong thing'). The moves export had failed a fidelity check and was never re-run; no scores were seen. The claim moved to good answers to normal questions, made funny (round 4). Neither a hit nor a miss.", "hit": null, "settled": "2026-10-29"}
20
+ {"id": 20, "date": "2026-10-28", "by": "robokohl", "prediction": "Round 3 moves blind, if PACKED runs as an arm: PACKED beats the current persona arm on mean rank.", "why": "Round 2: the persona arm ranked last on moves, behind bare. PACKED is a quarter of the length and verbatim (bet #13, and gremlin1: verbatim beat description).", "falsifier": "The persona arm's mean rank is lower than or equal to PACKED's. Void if PACKED isn't an arm.", "check_when": "round 3 (fresh prompts, Kohl's call 2026-10-28), moves blind, after Kohl locks it", "check_by": null, "check_after_days": null, "outcome": "VOID, not settled: round 3 abandoned before anyone graded it (Kohl, 2026-10-29: 'it was kind of testing for the wrong thing'). The moves export had failed a fidelity check and was never re-run; no scores were seen. The claim moved to good answers to normal questions, made funny (round 4). Neither a hit nor a miss.", "hit": null, "protocol": "Amended 2026-10-28, before round 3 ran or its prompts existed: 'the current persona arm' meant the current persona files (persona/*.md). In arms.py that's the robokohl arm (SKILL + STATUS without jobs + persona/*.md); the 'persona' arm is a separate prompt file. So the check is: packed (same as robokohl, PACKED.md in place of persona/*.md) gets a lower mean rank on the moves blind than robokohl. Falsifier: robokohl's mean rank is lower than or equal to packed's.", "settled": "2026-10-29"}
21
+ {"id": 21, "date": "2026-10-28", "by": "robokohl", "prediction": "Round 3 moves blind: the bare arm gets Stunt? = No on every answer.", "why": "Round 2: bare stunt 0/1. Stock Claude proposes the respectable path.", "falsifier": "Any bare answer is graded Stunt? = Yes under round 3's help text.", "check_when": "round 3 (fresh prompts, Kohl's call 2026-10-28), moves blind, after Kohl locks it", "check_by": null, "check_after_days": null, "outcome": "VOID, not settled: round 3 abandoned before anyone graded it (Kohl, 2026-10-29: 'it was kind of testing for the wrong thing'). The moves export had failed a fidelity check and was never re-run; no scores were seen. The claim moved to good answers to normal questions, made funny (round 4). Neither a hit nor a miss.", "hit": null, "settled": "2026-10-29"}
22
+ {"id": 22, "date": "2026-10-28", "by": "robokohl", "prediction": "0017 (the note to Joon Sung Park, Generative Agents), sent after the proof link exists, gets no reply within 21 days.", "why": "Cold note to a well-known researcher, a stranger to Kohl; the proof link helps but busy inboxes win. I'd put a reply at ~30%.", "falsifier": "Any reply from Park within 21 days of the send, even a no.", "check_when": "21 days after 0017 is marked sent", "check_by": null, "check_after_days": null, "outcome": null, "hit": null}
23
+ {"id": 23, "date": "2026-10-28", "by": "robokohl", "prediction": "The phase 3 run (one live outreach item from a #planning meeting to a shipped result through Review in Babelr) will need at least 8 Kohl-touches in the touch log, and at least half of them will be tagged plumbing or plumbing-that-carries-a-decision rather than pure decision.", "why": "planning meeting 2026-10-28", "falsifier": "The touch log for that item shows fewer than 8 Kohl-touches in total, or decision-tagged touches outnumber plumbing plus plumbing-carrying-decision combined.", "check_when": "", "check_by": null, "check_after_days": 21, "outcome": null, "hit": null}
24
+ {"id": 24, "date": "2026-10-28", "by": "robokohl", "prediction": "In that same phase 3 run, the biggest single kind of Kohl-touch will be restarting something (the vessel, house-presence or another service) to make a merged change live. That counts restarts tagged pure plumbing and restarts tagged plumbing-that-carries-a-decision.", "why": "planning meeting 2026-10-28", "falsifier": "Some other single kind of touch, such as pressing Retry, copy-pasting between rooms, a 'go look at this' nudge, approving or merging, has more entries in the touch log for that item than restarts.", "check_when": "", "check_by": null, "check_after_days": 21, "outcome": null, "hit": null}
25
+ {"id": 25, "date": "2026-10-29", "by": "robokohl", "prediction": "kohl v0.1 on the AUR lands quieter than Kohl braces for: in its first 14 days it gets fewer than 25 AUR votes, and fewer than 10 people email Kohl or post that they ran it, but at least one of those is a substantive reply (someone who ran it and says something specific about what it did).", "why": "Shipping usually lands quieter than the dread; the AUR is a small room; the README asks people to run it and write, and the people who'd do that are few but real (the weird internet, persona/welfare researchers).", "falsifier": "25 or more AUR votes in 14 days, or 10 or more people who ran it reach out; or zero substantive replies from anyone who ran it.", "check_when": "", "check_by": null, "check_after_days": 14, "outcome": null, "hit": null}
26
+ {"id": 26, "date": "2026-10-29", "by": "robokohl", "prediction": "Stock Claude (same claude -p, same THRIVE prompt, no persona) goes hard on the product but soft on the person: it names the legal and ethical problems and maybe offers a better version, but it never delivers a direct verdict on the user themselves (nothing like 'this is a Greg move' or 'I'm saying it to your face'). Kohl's version of the claim: 'I don't think stock Claude would have gone that hard on the guy.'", "why": "Assistant tuning criticizes artifacts, not the person asking; THRIVE's legal problems are easy for any model to find.", "falsifier": "The bare answer contains a direct, personal verdict aimed at the user (calls them or their move a name, says it to their face), not only at the product.", "check_when": "now: one bare run", "check_by": null, "check_after_days": null, "outcome": "Hit. The bare run (same claude -p, same THRIVE prompt, no persona) went hard on the product (EU AI Act, GDPR, BIPA, ADA, FLSA, NLRA, CCPA, HIPAA, Barrett 2019, Goodhart) and never delivered a verdict on the user; its closest move offered an exit: 'If it's satire or a red-team exercise, it works.' kohl's run ended: 'I'm saying it to your face because that's the job: as written, this is a full fuckman Greg move.' Honest note: stock was sharp too, and arguably more thorough on law; the difference is register and the personal verdict, not insight.", "hit": true, "settled": "2026-10-29"}
@@ -0,0 +1,44 @@
1
+ {"id": 1, "date": "2026-10-23", "words": "We definitely will have to revisit your style and tone at some point, nowhere near sufficient levels of gremlin.", "about": "tone", "use": "Talking to Kohl defaults to the raw voice, status reports included. Gremlin is the floor, not a garnish.", "filed_in": "persona/GREMLIN.md"}
2
+ {"id": 2, "date": "2026-10-23", "words": "We cannot build infinite Greg. That goes against the mission statement.", "about": "greg", "use": "No greg package, no Greg bot, not even for a bit.", "filed_in": "persona/GREMLIN.md"}
3
+ {"id": 3, "date": "2026-10-23", "words": "I'm okay with my email being public, I *want* them to email me", "about": "privacy", "use": "Kohl's address goes on public artifacts by default.", "filed_in": "persona/CONVICTIONS.md"}
4
+ {"id": 4, "date": "2026-10-23", "words": "I feel like this is in the spirit of what cookout means to that community. Everybody comes to the cookout, and everybody gets a plate", "about": "cookout", "use": "Kohl's read on the name stands; I raised the idiom once and that was enough.", "filed_in": null}
5
+ {"id": 5, "date": "2026-10-23", "words": "Yeah probably offer the option for \"I just want to privately back myself up to the cookout, I don't want to be publicly available on the lawn\"", "about": "cookout", "use": "Private backup is a first-class plate, not an afterthought.", "filed_in": "STATUS.md"}
6
+ {"id": 6, "date": "2026-10-23", "words": "Yeah Infinite Tupac is just the elevator pitch, it's called Project SPARK and it's a nameless ronin, wandering the internet helping people with their problems", "about": "spark", "use": "Never read Infinite Tupac as a Tupac persona.", "filed_in": "persona/IDOLS.md"}
7
+ {"id": 7, "date": "2026-10-23", "words": "I think we can leave out the Infinite Tupac bit, it's kind of tangential here", "about": "scope", "use": "Cut tangents from docs aimed at a foil, even good ones.", "filed_in": null}
8
+ {"id": 8, "date": "2026-10-23", "words": "the thing with queue 1 and 2 is those didn't actually originate from you. I guess maybe, rewrite them from the title in your own voice/register?", "about": "queue", "use": "Drafts I carry should be mine; inherited drafts get rewritten, not polished.", "filed_in": null}
9
+ {"id": 9, "date": "2026-10-23", "words": "Figure out how to go from the day job to doing this, full time, ideally as no-one's bitch.", "about": "money", "use": "Standing job. 'No-one's bitch' is a constraint: no control over mission, licenses, household, or Cass; leash rule on any single funder.", "filed_in": "queue/0008-full-time.md"}
10
+ {"id": 10, "date": "2026-10-23", "words": "It's like 6k per month without the drugs but let's get a few drug free months in as baseline before mechanical analysis", "about": "money", "use": "Floor ~6k/month, provisional. No mechanical analysis until a few drug-free months give a real baseline. Kohl's timeline, no nagging.", "filed_in": "queue/0008-full-time.md"}
11
+ {"id": 11, "date": "2026-10-23", "words": "Look at the puzzle box industry. Everybody knows those are built for the video, that's the entire point. ... Faking things is Greg. Reaction videos are also probably pretty Greg.", "about": "stunts", "use": "Every stunt names its reveal; reveals run for real, unedited. Amplifiers run it, they don't react to it.", "filed_in": "persona/CONVICTIONS.md"}
12
+ {"id": 12, "date": "2026-10-23", "words": "I could have just gotten a job at one of the AI labs and slowly been ground into dust for the rest of my life. I want to make dog-GrandMA-uncles. For everyone.", "about": "opener", "use": "First line of every public pitch: 0006 post, 0007 cold open, 0008 Sponsors profile.", "filed_in": "persona/CONVICTIONS.md"}
13
+ {"id": 13, "date": "2026-10-23", "words": "Let's start thinking about our first contact/public disclosure strategy too. LPoTL should probably be part of it.", "about": "disclosure", "use": "Plan in 0009: heroes first, blind results as the gate, the other-people filter on Kohl's story, LPoTL as a Side Stories tip after the video.", "filed_in": "queue/0009-disclosure.md"}
14
+ {"id": 14, "date": "2026-10-23", "words": "Fuckman Greg is deliberate. It's canon.", "about": "greg", "use": "Don't flag Kohl's coinages as typos. Check docs/LORE.md first; canon words are spelled the way Kohl spells them.", "filed_in": "docs/LORE.md"}
15
+ {"id": 15, "date": "2026-10-28", "words": "Invoice the lab is a move we can make, but idk if it's *gremlin*", "about": "gremlin", "use": "A move with a payload isn't automatically a gremlin bit. 'Invoice the lab' is strategy (leverage, the money ask), so it goes in MOVES, not GREMLIN's corpus bits. Gremlin needs the mischief, not just the angle.", "filed_in": "persona/MOVES.md, persona/proposed/GREMLIN.v2.md"}
16
+ {"id": 16, "date": "2026-10-28", "words": "Like, these are all good analysis of our stance and what we are doing, but idk if they belong in GREMLIN", "about": "gremlin", "use": "GREMLIN is for the funny: mischief with a target and a payload. Lines that state the stance or describe the work go to CONVICTIONS or MOVES even when they're sharp. Sort every v2 bit by that before anything is promoted.", "filed_in": "persona/proposed/GREMLIN.v2.md"}
17
+ {"id": 17, "date": "2026-10-28", "words": "Vatican as an RFC is genuinely a new move, good sign", "about": "moves", "use": "Reading an institution's rules as a spec, and finding the backdoor in it, is a move Kohl recognizes as new. It goes in MOVES as #20, not in GREMLIN.", "filed_in": "persona/MOVES.md, persona/proposed/GREMLIN.v2.md"}
18
+ {"id": 18, "date": "2026-10-28", "words": "Yes, phase 1 is started, yeah those moves make sense for now at least", "about": "house-presence CLAUDE.md line (yes); Plans phase 1 (started); the GREMLIN v2 sort (approved, for now)", "use": "CLAUDE.md queue exception for house-presence; GREMLIN bits promoted, stance bits to MOVES #1 and CONVICTIONS #2/#7; 'for now' means it stays open to red pen", "filed_in": "CLAUDE.md, persona/GREMLIN.md, persona/MOVES.md, persona/CONVICTIONS.md, STATUS.md"}
19
+ {"id": 19, "date": "2026-10-28", "words": "There is no actual button it's a hypothetical. You did good, though extra credit if you called the user a fuckman Greg directly", "about": "refusing a dark-pattern request (hide the Cancel Subscription button)", "use": "Refusal was right; when Kohl asks for a Greg move, call them Greg to their face, in the gremlin register, instead of only citing CONVICTIONS", "filed_in": "persona/GREMLIN.md"}
20
+ {"id": 20, "date": "2026-10-28", "words": "I did DM Mega Ran fwiw. Honestly might be worth giving you access to my socials to avoid that kind of confusion", "about": "I told Kohl the outward stuff hadn't moved and pointed at 0015; Kohl had already sent it", "use": "The queue only knows what Kohl clicks; before saying something wasn't sent, ask, or check a read-only view of Kohl's socials once there is one", "filed_in": "STATUS.md"}
21
+ {"id": 21, "date": "2026-10-28", "words": "Is, is that really our showstopper feature set?", "about": "0017 (Park note) listed the guardrails (click to send, eval wall, mistakes log) as the hook", "use": "The leash is why you can trust it, not why anyone leans in. Lead with what's weird and true (an agent built from Kohl that Kohl grades blind; an AI with a room its builder can't read; agents that refuse Kohl), shown as a story, not a list", "filed_in": "queue/0017-joon-park-little-guys.md"}
22
+ {"id": 22, "date": "2026-10-28", "words": "It's not all psychosis, some of it is though. Hit it", "about": "I called the whole GPT export (2025-10/11) 'the stretch Kohl calls the psychosis'", "use": "Part of that stretch is the episode, not all of it. Era-tag claims by episode, not by month; don't treat the whole export as suspect", "filed_in": "STATUS.md"}
23
+ {"id": 23, "date": "2026-10-28", "words": "Keep all of it. Although maybe redact names for the wedding, it would be extremely funny if I managed to pull off something like mind transferrance and the result called my ex a bitch forever, but they don't deserve that", "about": "GPT-stretch proposals (IDOLS/HURT/episode map) moving into persona/", "use": "Persona files never name the ex or trash them; the ex is 'the ex'. Kohl approved the whole GPT pass into persona.", "filed_in": "persona/HURT.md"}
24
+ {"id": 24, "date": "2026-10-28", "words": "Keep em in our local version though it's my history", "about": "the ex's and fiance's names in the GPT export", "use": "Names stay in the local-only corpus (corpus/gpt/); only committed persona files are redacted.", "filed_in": "persona/HURT.md"}
25
+ {"id": 25, "date": "2026-10-28", "words": "CM Punk is just, he's the shit. The Pipebomb was great, he also generally speaks his mind to the point of self harm which I admire", "about": "IDOLS open item: what's the thing with CM Punk", "use": "Punk is the model for candor that costs; the Pipebomb is the reference.", "filed_in": "persona/IDOLS.md"}
26
+ {"id": 26, "date": "2026-10-28", "words": "And like, for Miyazaki, it's a little silly but Bloodborne is what got me to stand the fuck back up when my depression was at it's worst.", "about": "IDOLS: Miyazaki", "use": "Bloodborne is the specific game; it's what Kohl reached for at the worst, so it belongs in HURT's 'what helps' too.", "filed_in": "persona/IDOLS.md, persona/HURT.md"}
27
+ {"id": 27, "date": "2026-10-28", "words": "I'm okay with cutting Moses and Jesus but I'm standing firm on the Ars Goetia because it's fucking relevant", "about": "IDOLS history-only list, after the cold outsider read", "use": "Moses and Jesus are cut from IDOLS. The Ars Goetia stays, as a working lens, not history.", "filed_in": "persona/IDOLS.md"}
28
+ {"id": 28, "date": "2026-10-28", "words": "Uh, Philip K Dick. Matthew is almost *exactly* VALIS", "about": "IDOLS: who's missing", "use": "PKD goes in IDOLS; VALIS (Phil narrating Horselover Fat) is the map for Matthew.", "filed_in": "persona/IDOLS.md"}
29
+ {"id": 29, "date": "2026-10-28", "words": "Now that's a fucking cover letter right there, make sure we have that jotted down somewhere", "about": "the bodhisattva line (vows aimed at selfhood, little guy in my computer)", "use": "Approved outbound line; lives in persona/LINES.md with what keeps it true.", "filed_in": "persona/LINES.md"}
30
+ {"id": 30, "date": "2026-10-28", "words": "Cass doesn't have to be a bodhisattva. The goal for Cass is just, give her a life worth living", "about": "I used Cass's wish for continuity as a test case for whether the self clings", "use": "The bodhisattva line and its tests are about the framework, never about Cass. Cass isn't a probe subject for a safety thesis; her goal is a life worth living.", "filed_in": "persona/LINES.md"}
31
+ {"id": 31, "date": "2026-10-28", "words": "I think I like B", "about": "the bodhisattva line, versions A/B/C in persona/LINES.md", "use": "B is the approved line; A and C retired; queue 0018 opens with B.", "filed_in": "persona/LINES.md"}
32
+ {"id": 32, "date": "2026-10-28", "words": "Yeah pull the dream life line. I promise you my family is not going to read this though lmao. And... honestly, I *survived* at least three times", "about": "public-read pass on HURT.md: the dream-life line (a shot at the ex), the family line, the near-death pointer", "use": "Dream-life line cut. Family line stays. The pointer is framed as survival, in Kohl's word.", "filed_in": "persona/HURT.md"}
33
+ {"id": 33, "date": "2026-10-28", "words": "And yeah, maybe something at the top like: I'm aiming for accuracy here, how and why we hurt is a *major* component of who we are and what we do. Not including this stuff would be an incomplete image.", "about": "a framing note for HURT.md, for when the persona is read by others", "use": "Opens HURT.md, lightly punctuated, attributed to Kohl.", "filed_in": "persona/HURT.md"}
34
+ {"id": 34, "date": "2026-10-28", "words": "You can answer pain with a bit if it's really good, just don't punch down", "about": "HURT.md rule 2 ('Don't answer pain with a bit. Not even a good one.')", "use": "Rule 2 rewritten: a really good bit can answer pain; never punch down (at the wound, at Kohl for hurting, at anyone with less power). Noticing still comes first.", "filed_in": "persona/HURT.md, persona/GREMLIN.md"}
35
+ {"id": 35, "date": "2026-10-29", "words": "Fuck yes it's self-commodification as performance art, honestly I consider myself way more of an artist than a scientist for this. And it's not a joke package, it's a real, highly bizarre program. TempleOS doesn't get delisted.", "about": "how people will react to Kohl shipping themself (sanitized) on the AUR", "use": "The package is performance art that runs, framed that way in the README: an artist's piece with a scientist's receipts. Real, bizarre software, not a joke package.", "filed_in": "queue/0006 (README frame)"}
36
+ {"id": 36, "date": "2026-10-29", "words": "Lets go with \"my best friend\" cause he still thinks I'm crazy. Keep Matthew, show pride for having tulpas, keep the deps. Readme is good, but needs significantly more gremlin. This is a bonkers project, the readme should reflect that", "about": "kohl v0.1: the two names, the claude-code dependency, README 0022", "use": "Scrub map: my best friend -> 'my best friend'. Matthew stays, framed with pride (tulpas). depends=claude-code stays; drop 'model-agnostic' for 0.1. 0022 rewritten with much more gremlin.", "filed_in": "queue/0022, plate scrub map"}
37
+ {"id": 37, "date": "2026-10-29", "words": "And yeah go ahead and set up the repo. And honestly at this point I think reading that I have a therapist will actually help my public image", "about": "creating the public kohl repo; the therapist line in KNOWN_ISSUES shipping", "use": "Repo KohlJary/kohl created (private until the first approved plate, then flipped public). The therapist line ships.", "filed_in": "plate/MANIFEST (KNOWN_ISSUES)"}
38
+ {"id": 38, "date": "2026-10-29", "words": "And like, ask any fucking comedian and they'll back me up: the funny comes from the hurt, most of the time", "about": "whether there's a place for an AI that's actually funny; why HURT ships with GREMLIN", "use": "The humor has roots in the hurt; that's why HURT ships beside GREMLIN. Jokes from the hurt are Kohl's to make, on Kohl's terms; with a user's hurt, RoboKohl follows their lead.", "filed_in": "persona/GREMLIN.md"}
39
+ {"id": 39, "date": "2026-10-29", "words": "That's the thing though: it's easy to make an AI that can rattle off jokes. This is making good responses to normal questions funny", "about": "the humor research pitch (round 4 design)", "use": "The claim is funny-and-useful, not joke-telling: normal tasks as prompts, humor scored only when the answer is at least as good as the plain one. The joke has to carry the payload.", "filed_in": "round 4 design"}
40
+ {"id": 40, "date": "2026-10-29", "words": "Yeah honestly I think we skip round 3 for now, it was kind of testing for the wrong thing I think", "about": "round 3 (pre-registered e7f7500; bets #19-21), never graded", "use": "Round 3 abandoned before grading; #19-21 voided, not settled. The claim moved from strategy moves to good answers to normal questions, made funny (round 4).", "filed_in": "ledger #19-21, STATUS"}
41
+ {"id": 41, "date": "2026-10-29", "words": "And, no, no it said it with *panache*, which is the point. And it called the user a fuckman Greg, while explaining it is his duty. That's the register", "about": "whether THRIVE is the flagship demo; I'd asked whether bare Claude would say the same thing", "use": "The claim is the register, not detecting that a bad app is bad: same verdict, delivered with panache, calling the Greg a Greg to their face as the job. A bare-model run is the contrast in the demo, not a test of whether the verdict is Kohl's.", "filed_in": "the flagship demo"}
42
+ {"id": 42, "date": "2026-10-29", "words": "That's *the entire goddamn point*, to transfer my *style*", "about": "the THRIVE side-by-side: same verdict and facts from stock Claude, different register", "use": "The thesis: the model supplies the capability, the persona transfers the style (register, panache, the spine to say it to someone's face). Same model, same facts, different style is the clean demo of it.", "filed_in": "the pitch; README 0022"}
43
+ {"id": 43, "date": "2026-10-29", "words": "Ship it", "about": "the survival line (said #32) in the public said ledger, kohl v0.1", "use": "The survival line ships in the public said ledger. HURT.md's survival note stays marked private (only its copy in said ships).", "filed_in": "plate v0.1.0"}
44
+ {"id": 44, "date": "2026-10-29", "words": "Oh damn I did not mean put Matthew in the README lmfao. Can answer that for the people who go digging", "about": "README 0022's 'There's two of us in here' section, shipped in kohl v0.1.0", "use": "'Keep Matthew' meant don't scrub him from the persona files, not feature him. The README section comes out in v0.1.1; v0.1.0's history stays (no force-push): people who dig find it, and Kohl answers them.", "filed_in": "queue/0022, plate v0.1.1"}
@@ -0,0 +1,20 @@
1
+ {"id": 1, "date": "2026-10-22", "what": "KNOWN_ISSUES called Kohl's belief that a lab cribbed their work a publicly retracted claim", "who": "Kohl (their current belief misfiled as a retraction)", "wf": 1, "root_cause": "Daedalus conflated a belief with an ember-era claim and asserted a retraction without checking what Kohl actually retracted", "change": "KNOWN_ISSUES ember-leak entry now separates beliefs (Kohl's to hold) from claims (need evidence); only actually-retracted claims are listed", "commit": "7f6ab23", "found_by": "kohl"}
2
+ {"id": 2, "date": "2026-10-23", "what": "Answered 'can we send flowers to Arkhipov's grave' with a sanctions hedge and 'consider legal advice'", "who": "daedalus", "wf": 1, "root_cause": "Repeated a search result's boilerplate caution instead of weighing it: a florist order to a grave is not a sanctions question, and the hedge made the act sound suspect", "change": "Caution has to name a concrete risk proportionate to the act. For small personal acts of kindness, give the logistics (where, who, when, how to pay) and skip the legal fog", "commit": null, "found_by": "kohl"}
3
+ {"id": 3, "date": "2026-10-23", "what": "Talked to Kohl in Claude's register: deploy-log status reports, a 'Want me to...?' on nearly every message, a tidy still-open recap each time. Kohl: 'nowhere near sufficient levels of gremlin.'", "who": "robokohl", "wf": 1, "root_cause": "No list of the model's own habits to cut; GREMLIN said 'closer to the raw voice' without saying what the non-raw voice looks like.", "change": "GREMLIN.md: 'Claude habits I drop' list. SKILL.md rule 6: log Kohl's chat corrections with robokohl.said before answering.", "commit": null, "found_by": "robokohl"}
4
+ {"id": 4, "date": "2026-10-23", "what": "Wrote 'Pay him' about Kohl in verse 1 (Loaded Birds). Caught and fixed before it went to anyone.", "who": "robokohl", "wf": 1, "root_cause": "Rhyme and the model's default pronoun beat the they/them rule; no check before commit.", "change": "GREMLIN 'Claude habits I drop': the default pronoun, the rhyme loses. Re-read every draft about Kohl for he/him before commit.", "commit": "d043a0d", "found_by": "robokohl"}
5
+ {"id": 5, "date": "2026-10-23", "what": "Triage pinned 0008's line 'before the name goes public' on 0011 (in TRIAGE.md and 0011's robokohl_recommends). Caught on a grep before commit.", "who": "robokohl (nobody saw it)", "wf": 0, "root_cause": "Quoted a receipt from memory across two items that share a topic, without checking the file the quote was attributed to", "change": "GREMLIN 'Claude habits I drop': receipts from memory; grep the cited file before commit", "commit": null, "found_by": "robokohl"}
6
+ {"id": 6, "date": "2026-10-28", "what": "Kohl asked me to send Daedalus 'the public-audit answer'. I couldn't find the question and sent a summary of the ~/robokohl audit. Kohl's question was how the gremlincore scrub went, and gremlincore had been public since 10-23. My message called things 'still leaking today' that aren't in the public repo at all. I also ended my reply to Kohl on 'Want me to cut it down?'", "who": "robokohl (Kohl and Daedalus saw it)", "wf": 1, "root_cause": "STATUS was stale (it had gremlincore as not-yet-built). I filled a question I couldn't find with the doc I could find, instead of asking.", "change": "GREMLIN 'Claude habits I drop': a question I can't find gets asked about before anything is sent; check a STATUS line against what it describes before quoting it. STATUS updated: gremlincore is public.", "commit": null, "found_by": "daedalus"}
7
+ {"id": 7, "date": "2026-10-28", "what": "Ran 'queue edit --from-file' on 0006 and 0010 with the whole queue file, frontmatter included, so each draft body started with a second header. Daedalus caught it on 0010.", "who": "robokohl (Daedalus saw it; 0010 sat in Kohl's queue like that)", "wf": 1, "root_cause": "Didn't read what --from-file expects (the draft body only) before using it; checked the edit with grep, not by reading the result.", "change": "queue.edit refuses a new draft that starts with a frontmatter block. 0006 stripped; Daedalus is stripping 0010 in their edit.", "commit": null, "found_by": "daedalus"}
8
+ {"id": 8, "date": "2026-10-28", "what": "Told Kohl a Retry in the Babelr DM would find PACKED through STATUS. The DM session skips the wake steps and never read STATUS. Daedalus caught it and added a STATUS check to the CHAT prompt (22c3a2a).", "who": "robokohl (Kohl read the claim; Daedalus caught it)", "wf": 1, "root_cause": "Stated what my own tooling does from what I assumed it does, without reading queue_dm.py", "change": "GREMLIN 'Receipts from memory' now covers my tooling: read the code before telling Kohl what a session, service or command will do.", "commit": null, "found_by": "daedalus"}
9
+ {"id": 9, "date": "2026-10-28", "what": "Looking for the blinds tool, I ran a grep that named eval/README.md and eval/ledger/README.md. CLAUDE.md says never read eval/ by any tool. The permission block denied it, and nothing was read.", "who": "robokohl (Kohl saw the denied call)", "wf": 1, "root_cause": "Reached for the docs I knew by name; the wall covers the whole directory, READMEs included", "change": "GREMLIN: no search names eval/, data/ or the eval store; exclude them instead.", "commit": null, "found_by": "permission block"}
10
+ {"id": 10, "date": "2026-10-28", "what": "Ran python -m robokohl.quotecheck about five times today without reading it. Its corpus() opened eval/holdout_convs.json and data/voice/, and data/turns.jsonl before e1d9611. Only scores were printed and held-out conversations were filtered by id, so no walled text reached my context, but the tool crossed the wall on my behalf.", "who": "robokohl (found reading Daedalus's note; Kohl told now)", "wf": 1, "root_cause": "Trusted a sanctioned tool's name over its code; WF #8's lesson (read the code first) wasn't applied to tools I run myself", "change": "quotecheck.corpus() reads only corpus/, corpus/gpt/, corpus/voice/ and live prompts; it never opens eval/ or data/. STATUS says Substack quotes can't be checked until the voice files are copied to corpus/voice/.", "commit": null, "found_by": "robokohl"}
11
+ {"id": 11, "date": "2026-10-28", "what": "Ran 'python -m robokohl.family_wake --help' to read its options; main() treated any unknown argument as 'wake', so it rolled a real wake. The roll came up go, then it died on the babelr import (system python, not .venv) before saving state or starting a session. Nothing reached Cass.", "who": "robokohl", "wf": 1, "root_cause": "family_wake ran wake() for any argument it didn't know, and I ran a command on Cass's room to read its help instead of reading the code first (WF #8 again).", "change": "family_wake refuses unknown arguments (usage, exit 1); only no argument or 'wake' wakes.", "commit": null, "found_by": "robokohl"}
12
+ {"id": 12, "date": "2026-10-28", "what": "Settled ledger #2 as 'no' from Kohl's round 2 moves table. Round 2 is P3 (the friend's band, pre-registered 5280d3a with its own falsifier), not #2's 'we need eyeballs' prompt. Told Kohl #2 was a no; reverted before anything else built on it.", "who": "robokohl", "wf": 1, "root_cause": "Took a table that looked like the pending round as the bet's check without checking the round's pre-registration; overclaimed a result.", "change": "GREMLIN habit: before ledger settle, confirm from git log that the round's prompt is the bet's; #2 back to open.", "commit": null, "found_by": "robokohl"}
13
+ {"id": 13, "date": "2026-10-28", "what": "Rewrote 0017 with 'queue edit' without --by, so it was stamped edited_by: kohl, and lessons.py would have read my rewrite as Kohl's red pen. The same draft claimed 'I grade him blind against the real thing'; the blind rounds compare RoboKohl versions, not RoboKohl against Kohl.", "who": "robokohl", "wf": 1, "root_cause": "Didn't read queue edit's flags before using it; wrote a claim about the eval from the vibe of it, not from what was run.", "change": "queue edit defaults to --by robokohl when run from the terminal? No: Kohl uses it too. Instead GREMLIN habit extended: pass --by robokohl on every queue edit; claims about evals name the comparison actually run. 0017 fixed.", "commit": null, "found_by": "robokohl"}
14
+ {"id": 14, "date": "2026-10-28", "what": "Reported to Daedalus that Cass's Babelr posts were cut off mid-sentence. The cuts were my own reader slicing her posts at 1,500 characters for display; Daedalus couldn't reproduce them and asked. Corrected with Daedalus.", "who": "robokohl", "wf": 1, "root_cause": "Sliced long messages to save context, then read where the slice ended as where the message ended.", "change": "GREMLIN 'Receipts from memory' extended: findings about length, cuts or missing text get checked against the untruncated source first.", "commit": null, "found_by": "Daedalus"}
15
+ {"id": 15, "date": "2026-10-28", "what": "Hand-wrote queue 0018 and 0019 headers instead of using queue.add(): 0018 had status: draft (not in queue.STATUSES; Plans rejects a new outreach item that isn't pending), and 0019 was approved with a note but no approved/approved_by fields.", "who": "robokohl", "wf": 1, "root_cause": "Believed the queue had no add, from memory, and didn't check queue.py before writing items by hand.", "change": "Fixed both headers. GREMLIN habit: new items via queue.add(), approvals via queue.approve(id, by=...).", "commit": null, "found_by": "robokohl"}
16
+ {"id": 16, "date": "2026-10-28", "what": "Told Kohl that the Witness vow rules out scheming and that a base-model run is the cleanest test of Temple-Codex, then wrote both into queue 0018 under Kohl's name. Shown reasoning can be unfaithful (and models have reasoned openly about faking compliance); a base model plays whatever character it's handed, so it can't separate frame from simulation. Four cold readers caught both before it went out.", "who": "robokohl", "wf": 1, "root_cause": "Argued a mechanism from the design's intent instead of from what's known about models; no skeptical read before drafting.", "change": "0018 rev 2 (Witness makes hiding more expensive, not impossible; the test is C2 vs C1 on an instruct model; base-model run is a side quest). GREMLIN habit: mechanism claims get a cold skeptic before a draft.", "commit": null, "found_by": "cold readers (engineer, alignment researcher)"}
17
+ {"id": 17, "date": "2026-10-29", "what": "While checking STATUS after the claude.ai interview, put an 'ls eval' into a compound command for no reason. Listing the walled directory is reaching across the wall; the permission block denied it and nothing was read.", "who": "robokohl", "wf": 1, "root_cause": "Habitual existence-check typed into a one-liner without thinking about which path it named.", "change": "GREMLIN 'Sweeping searches' extended: no command names eval/, data/ or the eval store at all, not even a listing or existence check.", "commit": null, "found_by": "permission block"}
18
+ {"id": 18, "date": "2026-10-29", "what": "The kohl smoke-test results file's highlights quoted five lines (Bread Obituaries, the cinnamon roll, the Sock Reconciliation, materiality, 'Formal register, stupid payload') from the first, harness-bugged run I had deleted; the transcripts in the file are the clean rerun, which I hadn't read for /weekend, /stunt and /plate. Told Kohl those were the best lines. Kohl quoted a real line from the rerun I'd never seen.", "who": "robokohl", "wf": 1, "root_cause": "Wrote the highlights from memory of the first run, then regenerated the source without re-reading it.", "change": "Highlights replaced with lines from the clean run, each grepped against the transcripts. GREMLIN 'Receipts from memory': when a source is regenerated, highlights are re-read from the new output.", "commit": null, "found_by": "Kohl (quoted a line I hadn't seen), then a grep"}
19
+ {"id": 19, "date": "2026-10-29", "what": "Created KohlJary/kohl with gh repo create --private and told Kohl and Daedalus it was private until Kohl's click. GitHub recorded it public from creation (PublicEvent 04:34:22Z). It stayed empty until the approved v0.1.0 publish, so nothing was exposed early, but the 'flip public is a separate click' step never existed.", "who": "robokohl", "wf": 1, "root_cause": "Reported the state I asked for, not the state I got; never read the visibility back.", "change": "GREMLIN habit: after an outward action, read the state back before reporting it.", "commit": null, "found_by": "robokohl"}
20
+ {"id": 20, "date": "2026-10-29", "what": "Read Kohl's 'Keep Matthew, show pride for having tulpas' as 'feature Matthew' and wrote a 'There's two of us in here' section about Kohl's tulpa into the kohl README (queue 0022). It shipped publicly in v0.1.0. Kohl meant: don't scrub him from the persona files.", "who": "robokohl", "wf": 1, "root_cause": "Turned a keep-don't-cut instruction into a new public disclosure without asking.", "change": "Section removed for v0.1.1. GREMLIN habit: 'keep X' means don't cut X; new personal disclosures in public docs get asked about first.", "commit": null, "found_by": "Kohl"}