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)

  1. scope: is not rye-valley. Client-account and client-engagement decisions are someone else’s business.
  2. 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”.
  3. 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.
  4. A live negotiation, offer, term sheet, acquisition talk, or legal matter that has not closed. Publish after close, and only the shape.
  5. Personal health, relationship, family, or financial detail beyond what is already in the public bio (Charleston, 80 pounds, engaged, walked away).
  6. 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.
  7. Security, credential, infrastructure, or incident detail (anything under Owner tier, anything tagged incident or leak).
  8. 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 reversing

call 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:; refuses scope != rye-valley.
  • Refuses if call, choice or stakes contains: any string from clients/*.md names/domains/aliases, any people/*.md name 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/leak in its name.
  • Writes decisions.json to 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.