The public decision log on michaelhouck.co is generated from decisions/. It is the
site’s strongest proof asset (dated, first-party, numbers attached) and the easiest way
to leak something that costs a client, a hire, or a negotiation. This playbook is the
gate. Default is PRIVATE. Nothing renders unless a human adds a public: block and the
exporter’s checks pass.
Who decides
Michael, or someone he names, adds the public: block. Agents may DRAFT the block in
inbox/ and propose it; they never add it to a decision file directly.
The rule of thumb
Publish the CALL, the STAKES, and the REASONING. Never publish the COUNTERPARTY, the PEOPLE, or the TERMS.
Hard exclusions (exporter refuses; no override)
scope:is notrye-valley. Client-account and client-engagement decisions are someone else’s business.- Any client, prospect, vendor, or investor is named or identifiable (company, person, domain, product). Anonymize to shape: “a $1.9k/mo agency client”, “a payments vendor”.
- A named hire, fire, contractor change, compensation, or performance judgment about any individual, including RV team. “Added three agents instead of a tenth hire” is fine; who was not hired is not.
- A live negotiation, offer, term sheet, acquisition talk, or legal matter that has not closed. Publish after close, and only the shape.
- Personal health, relationship, family, or financial detail beyond what is already in the public bio (Charleston, 80 pounds, engaged, walked away).
- Numbers finer than the site already shows: per-client revenue, margins by client, payroll, cash balances, bank or processor account detail. Entity-level monthly revenue is already public on the cards, so entity-level figures are allowed.
- Security, credential, infrastructure, or incident detail (anything under Owner tier, anything tagged incident or leak).
- The Launch House sensitivity boundary: public altitude only (“walked away from my nine-figure startup”). No cap table, split, ouster sequence, or cofounder detail.
What a good public entry looks like
The site renders five fields, so the public: block writes them explicitly rather than
exposing the file body. The body stays private.
public:
approved_by: Michael
approved_on: 2026-09-02
call: "Sell Lore for $2M?"
choice: "Declined. The number I would have taken was higher, and the offer attached three years of my time to the paper."
stakes: "$15.7k/mo entity at the time"
status: made # made | open | reversed
reversible: "No" # short answer: Yes / No / a dollar figure for the cost of reversingcall is a question in plain English. choice is one or two sentences, first person,
past tense, including the reason. stakes is one figure or phrase at entity altitude.
Reversed decisions STAY published with status: reversed; that is the point of the log.
Exporter checks (automatic, in scripts/export_public_decisions.py)
- Refuses any file without
public:; refusesscope != rye-valley. - Refuses if
call,choiceorstakescontains: any string fromclients/*.mdnames/domains/aliases, anypeople/*.mdname other than Michael Houck, an email, a URL, a$figure with more than one decimal group followed by “/client” or a client-shaped phrase, or any word from the banned-word list (em dashes included). - Refuses if the source file is under Owner tier or has
incident/leakin its name. - Writes
decisions.jsonto the site data repo. Every refusal is printed with the reason so a human can fix the block, never the check.
Cadence
Decisions are proposed for publication in the Sunday review: the agent lists the week’s
scope: rye-valley decisions with a drafted public: block for each candidate; Michael
approves by pasting the block into the file. Publication follows on the next nightly run.