Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
47 changes: 47 additions & 0 deletions .okf/log.md
Original file line number Diff line number Diff line change
Expand Up @@ -927,3 +927,50 @@ HTML on five posts, three of them already live (kamal-2-multi-server,
ai-code-ownership-accountability, claude-code-xp-team-workflow). It is internal
review metadata from the writer brief. Removed sitewide; writers should report
cadence in the handback, never in the file.

## 2026-08-08 — Passive keyword monitor purged from the sourcing machinery

**Decision (Paul)**: remove F5Bot outright — "it's not working as you wanted."
The tool was already marked retired on 2026-08-08, but the retirement was
half-done: its doc survived as a "kept for the keyword derivation" stub, and two
separate boards still carried *"paste the v2 keywords into F5Bot"* as a
load-bearing 2-minute ask on Paul's desk (`operation-runbook.md` Sprint-3 header
and `20.09` §P0). A dead blocker parked on the CEO's desk is worse than no
blocker: it reads as the cheapest available unblock, so it displaces the real
one.

**Durable rule — two structural tests any sourcing tool must pass.** Neither is
fixable by better keywords, and both killed this one:

1. **Active, not passive.** A monitor only knows what arrived after it was
switched on, so it can never backfill a window. Card #29 needs rows verified
inside ≤30 days *on demand*; a passive feed cannot satisfy that by
construction.
2. **Ranked retrieval, not literal substring matching.** Founders don't type our
phrasing. The v1 composed phrases (`vibe coded broke`) matched **0 of the 25
posts we had already found by hand**.

Do not re-propose the class. Judge paid alternatives (RedReach, Buska, Syften,
CommunityTracker) against those two tests *before* spending.

**Keyword derivation preserved and re-verified**, moved into
`prospects/p7-search-sweep.md` §3 with counts re-run across
`voice-of-customer.md` + `cold-prospect-list.md`: `non-technical` 20×,
`replit` 16×, `lovable` 8×, `cursor` 5×, `vibe coded` 2× (vs the gerund
`vibe coding` 10×, rejected — it floods with commentary, not distress).

**Finding surfaced by the move**: `dev shop` has **zero** corpus occurrences
(`dev shop`/`devshop` 0, `agency` 1). It carries the Trigger-3
ownership/hostage lane, and its only prior coverage argument *was* passive
monitoring. So our second-strongest trigger now rides an unevidenced query term
in a lane grooming already proved unfindable through open search. A zero return
on it is a **lane gap to escalate**, not a quiet zero. `bolt.new`/`base44` are
likewise unevidenced tool-name guesses — drop after two empty sweeps.

**Correction to the board while here**: `#29` was described as agent-runnable.
It is not — the replacement sweep ran on 2026-08-08 and returned zero rows
because every thread-open hit `EGRESS_BLOCKED` and Reddit rejected the tool's
user agent. Qualification requires a timestamp read from the *opened* thread, so
**no sourcing method can produce a lead until thread-open access is restored**
(`chrome-devtools` + egress to indiehackers.com / reddit.com). That is now the
real P0 in both boards, in place of the keyword ask.
19 changes: 13 additions & 6 deletions .okf/workflows/outbound-sprint.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ tags: [outbound, sales, browser-agent, kanban, sourcing]
generated:
by: process:okf-migrate
at: 2026-07-26T00:00:00Z
updated: 2026-08-08T00:00:00Z
resource: docs/projects/2607-vibe-code-rescue/
sources:
- resource: "/workflows/review-swarm.md"
Expand All @@ -21,8 +22,8 @@ sources:
for Paul's per-message approval, then send, then log. Nothing sends on
silence.
2. **Monitor** - each morning `rescue-sprint/reply-monitor-prompt.md`
sweeps IH notifications, LinkedIn, Reddit, and Gmail (`neetocal`,
`from:f5bot.com`), classifies replies, drafts responses from the
sweeps IH notifications, LinkedIn, Reddit (once batch 2 is live), and
Gmail (`neetocal`), classifies replies, drafts responses from the
objection bank (marked DRAFT - Paul sends), and updates the ledger.
3. **Measure** - `rescue-sprint/pipeline.md` is the single ledger (one row
per touch + Friday tally). The A0 kill-criteria (~20 touches / ~10
Expand Down Expand Up @@ -85,10 +86,16 @@ sources:

# Gotchas

- **F5Bot sends nothing until the account email is verified** - the verify
email hid for 3 days (2026-07-21 to 07-24) because...
- ...mail to `pftg.sof@gmail.com` is auto-labeled + archived in that
- **Passive keyword monitors do not work for this sprint** (retired
2026-08-08 after a 2-week trial). Two structural flaws, neither tunable:
they match literal substrings, so composed founder phrasing never fires
(0 hits against 25 posts we found by hand), and they are passive, so they
can never backfill the ≤30-day lead window on demand. Sourcing uses
date-filtered active search instead
(`rescue-sprint/prospects/p7-search-sweep.md`). Do not re-propose the
class - judge any paid alternative against those two tests first.
- **Mail to `pftg.sof@gmail.com`** is auto-labeled + archived in that
mailbox and auto-forwarded to Paul's main inbox. Monitor by search query
(`from:f5bot.com`, `neetocal`), never by scanning that inbox.
(`neetocal`), never by scanning that inbox.
- Statusline/parallel sessions contend on `.git/index.lock` - transient;
re-check before force-removing.
135 changes: 55 additions & 80 deletions docs/business/operating-system.md
Original file line number Diff line number Diff line change
@@ -1,110 +1,85 @@
# JetThoughts Operating System (lean)

**Scope**: this is the **company** operating system - how JetThoughts runs across every opportunity, not just the current one. It is the durable cadence (accountability chart, quarterly OKR, rocks, weekly scorecard, issues, pipeline). The **active bet it currently drives** is the [Vibe Code Rescue validation project](../projects/2607-vibe-code-rescue/) (portfolio bet #1); when the next opportunity becomes active, the same OS runs it with a new OKR/rocks.
**Company layer**: [`index.md`](index.md) (front door) · [`vision-mission.md`](vision-mission.md) (who we are) · [`opportunity-portfolio.md`](opportunity-portfolio.md) (the bets, and how we validate/kill/scale them).
**Purpose**: the smallest cadence that reliably ships the current company objective - right now, **1 Vibe Code Rescue client by Nov 30, 2026** (the active portfolio bet).
**Owner**: Paul Keen | **Created**: 2026-07-21 | **Review**: weekly
**Model**: EOS-lite (accountability chart + quarterly OKR + weekly scorecard + rocks + issues), sized for a founder + white-label delivery + AI execution.
**Scope**: the **company** operating system - how JetThoughts runs across every opportunity, not just the current one. **Company layer**: [`index.md`](index.md) (front door) · [`vision-mission.md`](vision-mission.md) (who we are, still DRAFT) · [`opportunity-portfolio.md`](opportunity-portfolio.md) (the bets).
**Purpose**: the smallest cadence that reliably ships the current objective - **1 Vibe Code Rescue client by Nov 30, 2026**.
**Owner**: Paul Keen | **Created**: 2026-07-21 | **Review**: weekly, in §1 below - no separate ritual
**State**: this file does NOT duplicate the runbook's fresh-session state. For "what do I do right now," open [`operation-runbook.md`](../projects/2607-vibe-code-rescue/operation-runbook.md) → START HERE. This file is the numbers layer over it.

---

## 0. Current state & where to start (fresh session)
## 1. This week

**As of 2026-07-21**: foundation is set. A0 assumptions register ✓, G0 white-label partner ✓ (locked per CEO), offer/kit/booking drafts ✓, T1 trigger taxonomy ✓, T2 sourcing pipeline ✓.
**Active sprint**: Rescue Demand Sprint — populate the prospect list (agent) so Paul can send + book calls.
**Next agent work**: `T4/T5` (build the list) → `T6` dedupe → `T7` openers; `T8` discovery kit in parallel.
**To execute**: open [`operation-runbook.md`](../projects/2607-vibe-code-rescue/operation-runbook.md) → **▶ START HERE** block → take the next Ready task. That runbook is the shared state across sessions; this file is the weekly cadence over it.
**Paul's desk (human-only)**: booking page (~5 min), confirm price band (✅ done: $2,500 triage / $7,500 rescue / $10,000 foundation reset), review + send the outreach, take the calls, close. Optional: Gmail consent (warm lane), Apollo $79/mo + Hunter key (paid cold funnel).
Source of truth: [`rescue-sprint/pipeline.md`](../projects/2607-vibe-code-rescue/rescue-sprint/pipeline.md) §Weekly tally. This table is that tally's numbers, not a second set - update the sheet first, this row second, same sitting.

| week of | touches sent | replies | calls booked | audits sold | rescues signed | posts shipped |
|---|---|---|---|---|---|---|
| 2026-08-08 | 0 | 0 | 0 (target 8-12 by Nov 30) | 0 (target 3-5) | 0 (target 1) | 2 (Aug, target ~6/mo) |

**Verdict: 🔴 red.** Not "zero calls" - **zero touches have ever been sent.** Batch-1 has been HOLD since 2026-07-26 (stale rows); the Sprint-3 re-source ran 2026-08-08 and is now BLOCKED-ON-TOOLING (`operation-runbook.md` §Card #29). 18 days since Sprint 3 kicked off (2026-07-26), the bottleneck hasn't moved past sourcing.
**Kill-check**: the C1 kill-criteria ("2 weeks of warm outreach yields 0 booked calls → pause, re-open A+C") has **not fired** - its precondition is 2 weeks of *actual* outreach, and none has gone out yet. Don't read that as safe: it means we don't even have the data the criteria needs. See Issue 2.
**Where sessions went this week**: mostly 2605 (course wave completion, W1-W5) and 2510 (content re-plan), plus this session's 2607 sourcing-tool diagnosis. That allocation is why a distribution failure sat unflagged for 18 days - nobody was in the pipeline sheet.

---

## 1. Accountability chart (who owns what)
## 2. Accountability chart

| Seat | Owner | Owns |
|---|---|---|
| **CEO / Sales / Trust layer** | Paul | Discovery calls, offer, pricing, the founder relationship, fractional-CTO oversight |
| **Delivery** | White-label partner | The rescue build (Rails), under JT brand, to JT quality bar |
| **Marketing / Content / Ops engine** | Claude Code (+ Paul review) | Content, SEO, landing, lead magnets, LinkedIn drafts, pipeline tracking, this OS |

One person can hold several seats - but every seat has exactly one accountable owner.
| **CEO / Sales / Trust layer** | Paul | Discovery calls, offer, pricing, founder relationship |
| **Delivery** | White-label partner | The rescue build (Rails), under JT brand |
| **Marketing / Content / Ops** | Claude Code (+ Paul review) | Content, SEO, landing, pipeline tracking, this OS |

## 2. Quarterly OKR (Q3->Q4 2026)
## 3. OKR (Q3Q4 2026) + kill-check

**Objective**: Land the first Vibe Code Rescue client and prove the machine.

| Key Result | Target | Status |
| KR | Target | Status |
|---|---|---|
| KR1 - Offer + white-label partner live | Rescue Audit priced, partner signed, landing CTA live | 🟢 partner signed ✓; offer priced ✓ ($2,500 / $7,500 / $10,000); landing deferred |
| KR2 - Discovery calls booked | 8-12 by Nov 15 | 🔲 |
| KR3 - Audits delivered | 3-5 free Rescue Audits (45-min call + 48h scorecard — the funnel entry; paid tiers follow) | 🔲 |
| KR4 - Rescue signed | **1 engagement by Nov 30** | 🔲 |
| KR1 - Offer + partner live | Priced, partner signed, landing CTA live | 🟢 partner ✓, priced ✓ ($2,500/$7,500/$10,000), booking link live ✓; full landing page still Blocked (card B1) |
| KR2 - Discovery calls booked | 8-12 by Nov 30 | 🔴 0. (Mid-Nov is an internal trend checkpoint, not a separate deadline - both KRs share one date now.) |
| KR3 - Audits delivered | 3-5 free Rescue Audits | 🔴 0 - blocked behind KR2 |
| KR4 - Rescue signed | 1 by Nov 30 | 🔴 0 - blocked behind KR3 |

## 3. Rocks (90-day priorities = roadmap milestones)
**Kill-criteria (from the assumptions register, evaluated here weekly - this is the "runs automatically via OS-WEEKLY" promise, made real):** C1 warm-channel test - 0 calls after 2 weeks of *actual sent* outreach → pause, re-open ICP/channel. Currently **untestable**, see §1. A0 ICP test - if ≥half of early interest is technical or pre-launch founders, re-open the ICP vote. Not yet evaluable - zero interest of any kind so far.

1. **Offer + partner locked** (Aug) - the machine can't sell without these.
2. **Landing = booking machine** (Aug) - offer, proof, one CTA.
3. **Demand-gen live on all channels** (Aug->Sep) - LinkedIn 3-4/wk, rescue SEO cluster, paid pilot.
4. **First audit -> first signing** (Oct).

## 4. Weekly scorecard (leading metrics, review every week)

| Metric | Owner | Target/wk |
|---|---|---|
| LinkedIn posts published | Paul/Claude | 3-4 |
| LinkedIn qualified replies/DMs | Paul | >=3 |
| New email subs from magnets | Claude | trend up |
| Blog posts shipped (rescue/ICP-E) | Claude | 2-3 |
| **Discovery calls booked** | Paul | trend to 8-12 by mid-Nov |
| Rescue Audits sold | Paul | cumulative -> 3-5 |
| Rescues signed | Paul | -> 1 |
## 4. Rocks (open only)

Green = hit target, Red = missed. Any red 2 weeks running becomes an Issue (section 6).
1. **Unblock sourcing** (now) - card #29 needs `chrome-devtools` + egress to at least one of indiehackers.com / reddit.com. Nothing else on the board matters until this moves.
2. **Landing page** (Aug) - card B1, Blocked on nothing but capacity; booking link already live standalone.
3. **First send → first call** (Aug-Sep) - batch-1/2/3, gated entirely on Rock 1.
4. **First audit → first signing** (Oct) - not started, gated on Rock 3.

## 5. Meeting cadence
*Closed*: offer + partner locked (Jul 21). *Cut* (20.09, 2026-08-07): the paid-pilot rock - budget only matters once organic proves a reply signal, and the bet currently forbids a content sprint.

> **Async-first rule**: meetings below are the exception, not the medium. All knowledge transfer defaults to written artifacts per `.agents/skills/async-first-communication/SKILL.md`; every meeting's outcome is written back into this file (scorecard/OKR/issues) same-day.

- **Weekly ops review (~30 min)**: scorecard (5 min) -> rock progress (5 min) -> pipeline
walk (10 min) -> IDS the top issues (10 min). Update the scorecard + OKR statuses in this file.
- **Monthly strategy check (~45 min)**: is the wedge still right? adjust roadmap; refresh
market scan if signals shift.
- **Per-deal**: discovery call -> audit -> proposal, tracked in the pipeline (section 7).

## 6. Issues list (IDS: Identify, Discuss, Solve)

Rolling list of the top blockers. Solve the highest-leverage one each week; don't let it grow.
## 5. Issues (IDS - top 5, solve the highest-leverage one each week)

| # | Issue | Owner | Status |
|---|---|---|---|
| 1 | White-label delivery partner (runbook G0) | Paul | ✅ Resolved 2026-07-21 (locked per CEO). Standing validation: confirm a paid trial rescue hits the quality bar + a fallback partner is named before the first real signing. |
| 2 | Prospect list populated — 25 deduped rows merged in P8 | Claude | ✅ Resolved 2026-07-22 (P8 complete) |
| 3 | Price band confirmed — A2 set at $2,500 triage / $7,500 rescue / $10,000 foundation reset | Paul | ✅ Resolved 2026-07-22 (A2 confirmed) |
| 1 | Sourcing BLOCKED-ON-TOOLING - #29's sweep can't open any thread to verify a timestamp | Infra/Paul | 🔴 Open since 2026-08-08 - see runbook §Card #29 |
| 2 | Kill-criteria untestable, not "not fired" - 18 days, zero touches sent, so the C1 test has never actually run | Claude/Paul | 🔴 Open - ratify: is this a distribution defect (re-run once unblocked) or does it call the bet itself into question? |
| 3 | Joy Adamson override - only survivor of batch-1, 5mo old, still publicly unanswered | Paul | 🟡 Open - 1-min decision, unresolved since ~2026-07-26 |
| 4 | Pricing vs. thesis tension - JT undercuts at $7,500 against $25-55K competitors one week after publishing "cheap developers are expensive," which argues against its own thesis to a twice-shy founder | Paul | 🟡 Open - content flagged it (20.09 §10), not a content fix |
| 5 | vision-mission.md still stamped DRAFT, 18 days on, while other docs cite it as settled | Paul | 🟡 Open - 1-line decision: ship it or say what's wrong |

## 7. Pipeline (simple funnel, no CRM needed yet)
*Resolved, moved to changelog*: white-label partner (Jul 21) · prospect list populated, P8 (Jul 22) · price band (Jul 22).

Track each lead as a row: **Source -> Discovery call -> Audit sold -> Proposal -> Signed**.
Stages: `Lead` -> `Call booked` -> `Audit sold` -> `Proposal out` -> `Won` / `Lost (reason)`.
Keep it in a single sheet (or a section here) until volume justifies a real CRM.
**Leads originate from** the populated target list in [`rescue-sprint/warm-intro-referral-kit.md`](../projects/2607-vibe-code-rescue/rescue-sprint/warm-intro-referral-kit.md) (agent-built via runbook T4-T7); once Paul sends, each contacted row becomes a pipeline `Lead`.

## 8. Tooling map
## 6. Tooling map

| Function | Tool |
|---|---|
| Site / blog | Hugo (`bin/hugo-build`), content in `content/blog/` |
| Content ops | Blog pipeline (`docs/workflows/blog-pipeline.md`), voice guide 90.11 |
| LinkedIn | LinkedIn pipeline (`docs/workflows/linkedin-post-pipeline.md`) + ICP validation plan |
| Discovery scheduling | NeetoCal (per outreach template) |
| Pipeline tracking | Sheet / this doc section 7 until CRM is justified |
| OKR spine | `lark-okr` skill for structuring quarterly OKRs |
| Weekly OS loop | `eos-lite` skill (`Skill(eos-lite) weekly`) — runs scorecard/OKR/rocks/issues/pipeline over this doc |
| Step-by-step execution | [`operation-runbook.md`](../projects/2607-vibe-code-rescue/operation-runbook.md) — ordered task cards + Incremental agent backlog; **▶ START HERE** for any fresh session |
| Foundational premises | [`rescue-sprint/assumptions-register.md`](../projects/2607-vibe-code-rescue/rescue-sprint/assumptions-register.md) — ICP/trigger/channel/pre-validation, voted, with kill-criteria (runbook rule 7) |
| Sprint artifacts | `rescue-sprint/` — offer, warm-intro kit, booking spec, trigger taxonomy, sourcing pipeline (see runbook START HERE artifact index) |

## 9. Definition of "operating" (are we actually running the system?)

- Scorecard updated weekly, with real numbers.
- Every rock has a next action and an owner.
- The Issues list is short because we solve the top one each week.
- Discovery-calls-booked moves up week over week from Sept.
| Site / blog | Hugo (`bin/hugo-build`), `content/blog/` |
| Content ops | `docs/workflows/blog-pipeline.md`, voice guide 90.11 |
| LinkedIn | `docs/workflows/linkedin-post-pipeline.md` + ICP validation plan |
| Discovery scheduling | NeetoCal |
| Pipeline tracking | [`rescue-sprint/pipeline.md`](../projects/2607-vibe-code-rescue/rescue-sprint/pipeline.md) - the only copy of these numbers |
| OKR/weekly-loop skills | `lark-okr`, `eos-lite` (`Skill(eos-lite) weekly`) |
| Step-by-step execution | [`operation-runbook.md`](../projects/2607-vibe-code-rescue/operation-runbook.md) - START HERE for any fresh session |
| Foundational premises | [`rescue-sprint/assumptions-register.md`](../projects/2607-vibe-code-rescue/rescue-sprint/assumptions-register.md) - kill-criteria live here |

## Changelog (resolved issues + closed rocks move here, newest first)

| Date | Change |
|---|---|
| 2026-08-08 | Rewrote this file: 110→~90 lines, bound §1 to `pipeline.md` instead of duplicating a second scorecard, fixed the KR2 Nov-15/Nov-30 date conflict, replaced the 3 stale "all-resolved" Issues with the real ones, cut the paid-pilot rock (superseded by 20.09), deleted the stale §0 snapshot in favor of linking the runbook. |
| 2026-07-22 | Prospect list populated (P8, 25 rows) · price band confirmed ($2,500/$7,500/$10,000) |
| 2026-07-21 | White-label partner locked · offer/kit/booking drafts done |
Loading
Loading