From 3d9745851e60a3ece3d6140b8ee30634702905f1 Mon Sep 17 00:00:00 2001 From: Paul Keen <125715+pftg@users.noreply.github.com> Date: Sat, 22 Aug 2026 11:43:00 +0200 Subject: [PATCH 1/6] STATUS.md: root cold-start surface for WIP + goals, async-first write-back rule MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Paul asked (via /claude-md-improver) that anyone landing in the repo can see what's in flight and what the goals are, with concise, maintained ops tracking. - STATUS.md (new, 32 lines): goals (links), Now/WIP table, Blocked-on-Paul — links only, repo-work scope; the vault still owns company operations (2026-08-20 rule unchanged; this surface points, never copies). - CLAUDE.md / AGENTS.md: pointer near the top + same-commit update rule folded into the existing async-first bullet (mirrors the OKF enforcement wording). - async-first SKILL.md: STATUS.md row added to the canonical surfaces table. - OKF: company-layer-ownership concept section + dated log entry (same commit, per the ENFORCED rule). - 2607 backlog: T9 row said Ready while the §Done roll-up and the deliverable file said done — fixed the stale side (found during STATUS.md fact-check). Gates: bin/hugo-build exit 0; OKF validator 0 ERRORS (120 pre-existing warnings, known-red --strict state per log.md); marketing-copy ratchet does not glob root *.md and STATUS.md carries no company claims; all 7 STATUS.md link targets resolve. Co-Authored-By: Claude Fable 5 --- .../skills/async-first-communication/SKILL.md | 1 + .okf/log.md | 11 +++++++ .okf/workflows/company-layer-ownership.md | 13 ++++++++ AGENTS.md | 2 +- CLAUDE.md | 4 ++- STATUS.md | 32 +++++++++++++++++++ .../projects/2607-vibe-code-rescue/backlog.md | 2 +- 7 files changed, 62 insertions(+), 3 deletions(-) create mode 100644 STATUS.md diff --git a/.agents/skills/async-first-communication/SKILL.md b/.agents/skills/async-first-communication/SKILL.md index 85c063e07..855dd94f5 100644 --- a/.agents/skills/async-first-communication/SKILL.md +++ b/.agents/skills/async-first-communication/SKILL.md @@ -25,6 +25,7 @@ the work. A task is not done until its state is readable asynchronously. | What | Where | |---|---| +| Current WIP + goals snapshot (cold-start entry) | `STATUS.md` at repo root — links only, updated in the same commit as the state change | | Decision / groomed design / vote | the project's docs (`docs/projects//`), with rationale | | Task status + claims + handoffs | kanban board (`kanban-md`, local) AND the committed snapshot (project `backlog.md` State section) | | Operational state across sessions | the project runbook (statuses + handoff notes pasted VERBATIM) | diff --git a/.okf/log.md b/.okf/log.md index ab7abd0d4..f6b94b96c 100644 --- a/.okf/log.md +++ b/.okf/log.md @@ -79,6 +79,17 @@ Also corrected: the ~1e-6 noise figure in test-gates and in the code comment was macOS-local and read as universal. Same overclaim shape the #566 reviewer caught one layer down. +## 2026-08-22 - STATUS.md is the repo's cold-start surface + +Paul asked for a way for anyone landing in the repo to know the goals and the +WIP without archaeology. The answer is `STATUS.md` at repo root: goals (links), +a WIP table, blocked-on-Paul — links only, no duplicated state, updated in the +same commit as the state change (same enforcement wording as the OKF rule, +which is the one that has held). Ownership boundary unchanged: the vault still +owns operations; STATUS.md points, never copies. Recorded in +[company-layer-ownership](workflows/company-layer-ownership.md); pointer + rule +added to CLAUDE.md, AGENTS.md, and the async-first skill's surfaces table. + ## 2026-08-22 - the site sells one thing, and title claims are now a canon rule Paul changed the positioning: the site sells an embedded team of senior diff --git a/.okf/workflows/company-layer-ownership.md b/.okf/workflows/company-layer-ownership.md index 0dc9e2082..4035e0e6c 100644 --- a/.okf/workflows/company-layer-ownership.md +++ b/.okf/workflows/company-layer-ownership.md @@ -43,6 +43,19 @@ into published copy days after they were removed from 13 blog posts. Never copy a company number out of a vault note into published copy. Corrected in the vault the same day; the guard lives in the CLAUDE.md banner. +# The repo's cold-start surface: STATUS.md + +Added 2026-08-22 (Paul, via /claude-md-improver): `STATUS.md` at repo root is +the single cold-start index — goals, WIP table, blocked-on-Paul — **links +only**. It never copies vault-owned state (bet status, numbers, weekly loop) +or company facts into itself; it points at the vault and the per-project +surfaces (`docs/projects//README.md` / `backlog.md`). Update rule +(CLAUDE.md §Behavioral Constraints, AGENTS.md): a session that changed what's +in flight updates `STATUS.md` in the same commit/PR, or the session is not +done. Enforcement is rule-only by deliberate choice — no freshness test, no +hook (the 2510 `_ARCHIVED_TASK-TRACKER` rotted under tooling-free neglect; +the OKF same-commit wording is the pattern that has held). + # Where the routers point Aligned 2026-08-17: `AGENTS.md`, `docs/workflows/BASE_HANDBOOK.md`, diff --git a/AGENTS.md b/AGENTS.md index 4e8a1d260..c8478d0ab 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -3,7 +3,7 @@ Canonical instructions live in `CLAUDE.md`. Read that first. Session start: always read `@docs/workflows/BASE_HANDBOOK.md` and `@docs/workflows/flow-router.md`. -**Async-first communication (SOP for ALL agents):** written, discoverable artifacts are the default for every decision, finding, status change, and handoff — sync interaction is the exception and its outcome gets written back same-day. Full rules + canonical surfaces table: `.agents/skills/async-first-communication/SKILL.md`. A task is not done until its state is readable asynchronously. +**Async-first communication (SOP for ALL agents):** written, discoverable artifacts are the default for every decision, finding, status change, and handoff — sync interaction is the exception and its outcome gets written back same-day. Full rules + canonical surfaces table: `.agents/skills/async-first-communication/SKILL.md`. A task is not done until its state is readable asynchronously. **Cold-start surface: `STATUS.md` at repo root** (goals + WIP + blockers, links only) — a session that changed what's in flight updates it in the same commit/PR, or the session is not done. **Four eyes on every stage, author != verifier (SOP for ALL agents):** the point is agents collaborating to find the TRUTH — a single agent cannot find its own blind spot, because it checks the thing it MEANT to build. Every change is **written by one sub-agent and verified by a different one**; the author never produces the evidence for its own claim. The review lands before the artifact leaves the workshop: a plan is peer-reviewed BEFORE the user is asked, a diff BEFORE commit, a finding is reproduced before it is reported, a measurement re-derived before it is quoted. Brief reviewers with the goal and the artifact, never your conclusions; ask for measurements, not verdicts. Routing: internal sub-agents for every per-stage review, `/codex:review` ONCE at the final verify before merge for USER-FACING changes (it is slow — never in the inner loop); docs-only and instruction-layer changes ship on internal review + CI and apply its findings as a follow-up. No reviewer tooling in this runtime? Fall back agent → external → peer session → human, and mark the change UNREVIEWED if none is reachable. Full protocol: the `jt-delivery:contract` skill (plugin `jt-delivery@jetthoughts`); repo bindings: `docs/workflows/autonomous-delivery-prompt.md`. diff --git a/CLAUDE.md b/CLAUDE.md index c38aba845..c6eca905b 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -6,6 +6,8 @@ > > **Company FACTS are NOT vault-owned.** Every claim in `.okf/content/claims-canon.md` is canon HERE, enforced by `test/unit/marketing_copy_test.rb`. Never copy a company number out of a vault note into published copy (the vault itself carried two banned strings on 2026-08-17). The vault decides what we're doing; the canon decides what we're allowed to say. +**What's in flight + goals**: `STATUS.md` at repo root — the cold-start surface; update it in the same commit as any WIP change (rule in §Behavioral Constraints). + **Type**: Hugo static site blog | **Build**: `bin/hugo-build` **Test**: `bin/qtest --changed` (per change — tests the pages your diff touches) / `bin/test --smoke` (fixed 17-test core net, ~50s / ~30s CI) / `bin/rake test:critical` (milestones) / `bin/test` + `bin/dtest` (PR prep). qtest and smoke are complementary: qtest follows your diff, smoke is a constant basics check. **CSS**: PostCSS pipeline | **Content**: `content/blog/` (Markdown + Hugo frontmatter) @@ -81,7 +83,7 @@ Operational knowledge lives in `.okf/` (`build/`, `content/`, `design/`, `workfl - **Feature/idea intake**: `/deliver ` (from the `jt-delivery` plugin) — triage → GOAL → author≠verifier orchestration per the `jt-delivery:contract` skill §1a; repo-specific bindings (gates, canon, reviewer routing): `docs/workflows/autonomous-delivery-prompt.md`. - **Manager triage (Paul 2026-08-01)**: Paul adds requests mid-flight; triage each against the active plan — now / sequenced / backlog / groom-first — and report the verdict in one line so he can override. Deferring is a decision; interrupting a gated pipeline for a non-critical request is the failure. **Autonomy grant**: handle sprints end-to-end; for big/critical calls AND any highly OPINIONATED question (design taste, naming, strategy trade-offs — anywhere reasonable people disagree) run a voting panel of subagents with DISTINCT PERSONAS/lenses and organize an explicit vote (Paul 2026-08-21); make the call (split + irreversible → hold for Paul). Record every autonomous call with its evidence. Paul's explicit words override any panel. - **Agent 4-eyes on EVERY stage, author ≠ verifier (Paul 2026-08-20, widened 2026-08-21)**: every change is written by one agent and verified by a different one; review lands BEFORE the artifact leaves the workshop (plan before Paul sees it, diff before commit, finding before reported, measurement before quoted). Brief reviewers with goal + artifact, never conclusions; ask for measurements, not verdicts. Internal sub-agents per stage — **model routing (Paul 2026-08-21): critical decisions, editing/outlining AND design critique on fable; coding, code review AND content writing on opus; mechanical/simple tasks on sonnet; spawns never inherit the session model implicitly — pass `model` on every Agent call**; `/codex:review` once at the merge gate for user-facing changes. Full protocol: `jt-delivery:contract` skill §5; repo routing: `docs/workflows/autonomous-delivery-prompt.md`. (Evidence: 2026-08-20/21 — reviewers caught a CSS-breaking defect, a fabricated quote, and 11 findings on the delivery prompt itself, all after author self-review.) -- **Async-first (MANDATORY)**: written, discoverable artifacts for every decision, finding, and handoff; sync is the exception, written back same-day. A task is not done until a cold session can read its state with zero questions. Canonical surfaces: `.agents/skills/async-first-communication/SKILL.md`; same SOP in `AGENTS.md`. +- **Async-first (MANDATORY)**: written, discoverable artifacts for every decision, finding, and handoff; sync is the exception, written back same-day. A task is not done until a cold session can read its state with zero questions. Canonical surfaces: `.agents/skills/async-first-communication/SKILL.md`; same SOP in `AGENTS.md`. **Cold-start surface: `STATUS.md` at repo root** — a session that changed what's in flight (started/finished/parked a workstream, shipped a PR, hit a blocker) without updating `STATUS.md` in the same commit/PR is not done. - **Company facts have a canon**: check `.okf/content/claims-canon.md` before publishing any number (founding 2008-09-01; tenure from `site.Params.foundingYear`; "4.8/5 on Clutch" linked, NO review count; founder 22+ vs company 18+). A number with no in-repo source is a defect. Correcting one means sweeping the instruction layer too — `PRODUCT.md`, `docs/business/`, outreach kits have re-introduced bad canon before (4 of 8 published figures were wrong on 2026-08-14). - **Text ratchets read RENDERED output, not source**: `marketing_copy_test` globs source and missed three rendered-only defects on 2026-08-14 (unglobbed partial, line-wrapped banned phrase, composed nested `
`). Queued: `docs/20-29-testing-qa/20.10` §3b P0-4. - **Zero**: generic AI language · unsupported claims · Hugo build breaks (`bin/hugo-build` validates) · ad hoc test scripts (header Test line commands only) · Python for analysis (use `rg`/`sed`/`awk`) · duplicate files (`*_new.*`, `*_backup.*`). diff --git a/STATUS.md b/STATUS.md new file mode 100644 index 000000000..3049c2ee3 --- /dev/null +++ b/STATUS.md @@ -0,0 +1,32 @@ +# Status — what's in flight + +> Cold-start surface. One screen: goals, WIP, blockers. Links carry the detail — +> this file never duplicates project state, it points at it. +> **Update rule**: any session that changes what's in flight (starts/finishes/parks +> a workstream, ships a PR, hits a blocker) updates this file in the same commit/PR. + +## Goals + +- **Company goals / OKR / weekly numbers**: vault `~/Documents/pkm/jt-operations.md` (host-only — vault owns operations; this repo carries growth/marketing execution). +- **Bet of record**: Vibe Code Rescue — **parked until Sept 2026**; bet state in vault `jt-vcr-runbook.md`, campaign artifacts in [`docs/projects/2607-vibe-code-rescue/`](docs/projects/2607-vibe-code-rescue/backlog.md). +- **Content plan of record**: [`20.09 content plan (Aug 2026)`](docs/projects/2510-seo-content-strategy/20-29-strategy/20.09-content-plan-revision-aug-2026.md). + +## Now / WIP + +| Workstream | State | Next step | Entry point | +|---|---|---|---| +| 2608 site design system (v2 `/next/` rail) | Paused 2026-08-22 mid-flight; 3 pilots built + voted | Apply 20.09 repositioned copy; then Paul's 5 decisions | [`2608 README`](docs/projects/2608-site-design-system/README.md) | +| Blog / SEO (2510) | Executing per 20.09 | Next post from the groomed queue | [`GOAL-AT-A-GLANCE`](docs/projects/2510-seo-content-strategy/GOAL-AT-A-GLANCE.md) | +| LinkedIn ICP-E campaign | Drafts only (no publishing) | Draft per plan when asked | [`linkedin-icp-validation-plan`](docs/workflows/linkedin-icp-validation-plan.md) | +| 2605 course | Backlog executable (pilot gate removed 2026-07-31); campaigns last | Next backlog item on request | [`2605 project`](docs/projects/2605-tech-for-non-technical-founders/) | +| 2607 campaign tasks | Bet parked; sourcing tooling unblocked 2026-08-20 | P7 date-filtered sweep re-run | [`2607 backlog`](docs/projects/2607-vibe-code-rescue/backlog.md) | +| Test/CI hygiene | One known red (stale linux baseline, see 2608 README §Known red) | Diff record-vs-test build paths before re-recording | [`test-gates`](.okf/build/test-gates.md) | + +## Blocked on Paul + +| What | Where the full ask lives | +|---|---| +| Five 2608 decisions (register pick, 3 claims, first page, legacy CTO sweep, Sept measurement gate) | [`2608 README`](docs/projects/2608-site-design-system/README.md) | +| 2607 T3 (Gmail warm-source consent) + T10 (split strategy docs, [#449](https://github.com/jetthoughts/jetthoughts.github.io/issues/449)) | [`2607 backlog`](docs/projects/2607-vibe-code-rescue/backlog.md) | + +Last updated: 2026-08-22 diff --git a/docs/projects/2607-vibe-code-rescue/backlog.md b/docs/projects/2607-vibe-code-rescue/backlog.md index 70e626601..c26e37bec 100644 --- a/docs/projects/2607-vibe-code-rescue/backlog.md +++ b/docs/projects/2607-vibe-code-rescue/backlog.md @@ -44,7 +44,7 @@ Strategy/gates/Paul's desk live in [`operation-runbook.md`](operation-runbook.md |---|---|---| | T3 | Gmail warm-source pass (Paul consent) → warm rows | Blocked-on-Paul (optional, non-blocking) | | T8 | Discovery kit (call script + audit template) | ✓ Done (`rescue-sprint/discovery-kit.md`) | -| T9 | Objection + FAQ + follow-up bank → `rescue-sprint/objection-followup-bank.md` | **Ready** | +| T9 | Objection + FAQ + follow-up bank → `rescue-sprint/objection-followup-bank.md` | ✓ Done (file exists; the §Done roll-up already said so — this row was the stale side, fixed 2026-08-22) | | T10 | Split business/strategy docs out of the public repo - [#449](https://github.com/jetthoughts/jetthoughts.github.io/issues/449). Touches this project's `20-29-strategy/` files, so 2607 tracks it. | Blocked-on-Paul (org decision, not a refactor) | --- From 5058aef2095628f419b82825c85a3d58ef4eef51 Mon Sep 17 00:00:00 2001 From: Paul Keen <125715+pftg@users.noreply.github.com> Date: Sat, 22 Aug 2026 11:46:13 +0200 Subject: [PATCH 2/6] STATUS.md: full active-project review (all six docs/projects audited) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Per Paul's follow-up: reviewed every project under docs/projects/ against its own tracker and recent git history, not memory. - 2605: state corrected to "v2 live + measuring; arrival-not-content diagnosis (2026-08-20 triple read)"; next step from 50.05, not generic backlog. - 2510: state sharpened — R-queue restocked from live GSC 2026-08-21 (#524). - Added "Not in flight" line: 2604 closed 2026-08-08; 2509 Phase D dormant, superseded in practice by the 2608 clean-slate rail (ADR-0006). - Blocked-on-Paul gained two real items found in trackers: the three 2605 fabricated-fact findings (Aug-20 sweep) and the empty LinkedIn metrics-ledger row for the 2026-08-13 post. 36 lines; all link targets verified with ls. Co-Authored-By: Claude Fable 5 --- STATUS.md | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/STATUS.md b/STATUS.md index 3049c2ee3..094263895 100644 --- a/STATUS.md +++ b/STATUS.md @@ -16,17 +16,21 @@ | Workstream | State | Next step | Entry point | |---|---|---|---| | 2608 site design system (v2 `/next/` rail) | Paused 2026-08-22 mid-flight; 3 pilots built + voted | Apply 20.09 repositioned copy; then Paul's 5 decisions | [`2608 README`](docs/projects/2608-site-design-system/README.md) | -| Blog / SEO (2510) | Executing per 20.09 | Next post from the groomed queue | [`GOAL-AT-A-GLANCE`](docs/projects/2510-seo-content-strategy/GOAL-AT-A-GLANCE.md) | -| LinkedIn ICP-E campaign | Drafts only (no publishing) | Draft per plan when asked | [`linkedin-icp-validation-plan`](docs/workflows/linkedin-icp-validation-plan.md) | -| 2605 course | Backlog executable (pilot gate removed 2026-07-31); campaigns last | Next backlog item on request | [`2605 project`](docs/projects/2605-tech-for-non-technical-founders/) | +| Blog / SEO (2510) | Active — descriptions done, R-queue restocked from live GSC (2026-08-21) | Next post from the R-queue | [`tracker`](docs/projects/2510-seo-content-strategy/GOAL-AT-A-GLANCE.md) | +| 2605 course | v2 live; measuring. Diagnosis: **arrival, not content** (GSC/GA/Clarity triple-read 2026-08-20) | Arrival/discovery actions per 50.05; no new funnel posts on the unproven bridge | [`TASK-TRACKER`](docs/projects/2605-tech-for-non-technical-founders/TASK-TRACKER.md) | +| LinkedIn ICP-E campaign | Drafts only (16 drafts, UTM-tagged); no publishing | Draft per plan when asked | [`plan`](docs/workflows/linkedin-icp-validation-plan.md) | | 2607 campaign tasks | Bet parked; sourcing tooling unblocked 2026-08-20 | P7 date-filtered sweep re-run | [`2607 backlog`](docs/projects/2607-vibe-code-rescue/backlog.md) | | Test/CI hygiene | One known red (stale linux baseline, see 2608 README §Known red) | Diff record-vs-test build paths before re-recording | [`test-gates`](.okf/build/test-gates.md) | +**Not in flight**: 2604 typography — closed 2026-08-08 (P2 leftovers re-homed). 2509 CSS migration — Phase C complete 2026-07-19, Phase D backlog dormant; the 2608 clean-slate rail is the live CSS strategy ([ADR-0006](docs/adr/0006-clean-slate-dual-run.md)). + ## Blocked on Paul | What | Where the full ask lives | |---|---| | Five 2608 decisions (register pick, 3 claims, first page, legacy CTO sweep, Sept measurement gate) | [`2608 README`](docs/projects/2608-site-design-system/README.md) | +| Three 2605 fabricated-fact findings (five-tech-words client claim, $78K/$400 story, SVG chart stats) | [`2605 TASK-TRACKER`](docs/projects/2605-tech-for-non-technical-founders/TASK-TRACKER.md) §Aug-20 sweep | +| LinkedIn metrics-ledger row for the 2026-08-13 post (empty past the 48-72h window) | `linkedin-posts/metrics-ledger.md` | | 2607 T3 (Gmail warm-source consent) + T10 (split strategy docs, [#449](https://github.com/jetthoughts/jetthoughts.github.io/issues/449)) | [`2607 backlog`](docs/projects/2607-vibe-code-rescue/backlog.md) | Last updated: 2026-08-22 From cafba8e31f2292c5cb6cc8ab0ed6cf2ec9ffe484 Mon Sep 17 00:00:00 2001 From: Paul Keen <125715+pftg@users.noreply.github.com> Date: Sat, 22 Aug 2026 11:48:10 +0200 Subject: [PATCH 3/6] AGENTS.md: remove the phantom .agent/ onboarding stack MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The audit agent flagged and `find` confirmed: no .agent/STATUS.md, .agent/prd/PRD.md, or .agent/tasks.json exists anywhere under docs/projects/ — the documented onboarding order pointed at files that never existed. Replaced with the real surfaces: root STATUS.md (cross-project), the project README / GOAL-AT-A-GLANCE (2608's README is the template), then TASK-TRACKER/backlog. Co-Authored-By: Claude Fable 5 --- AGENTS.md | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/AGENTS.md b/AGENTS.md index c8478d0ab..c4b11708e 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -45,14 +45,11 @@ Projects live in `docs/projects//`. Each project follows a standard onboarding path: **First visit — read in this order:** -1. `PROJECT-INDEX.md` — navigation hub, agent routes, integration rules -2. `GOAL-AT-A-GLANCE.md` — one-page exec summary, strategy, metrics -3. `.agent/prd/PRD.md` — formal spec (if PRD-driven project) -4. `.agent/tasks.json` — machine-readable task graph (if PRD-driven) -5. `TASK-TRACKER.md` — live task queue, migration schedule, active phase - -**Project health:** `.agent/STATUS.md` — cross-project RAG dashboard. -Per-project PM health reports in `40-49-review/40.10-*.md`. +1. `STATUS.md` (repo root) — cross-project view: what's in flight, goals, blockers +2. The project's `README.md` or `GOAL-AT-A-GLANCE.md` — one-page status / exec summary (2608's README is the template: status paragraph, read-order table, open decisions, known reds) +3. `TASK-TRACKER.md` or `backlog.md` — live task queue, active phase + +(The former `.agent/STATUS.md` / `.agent/prd/PRD.md` / `.agent/tasks.json` stack never existed in this repo — removed 2026-08-22; root `STATUS.md` is the cross-project dashboard.) **Skills:** Project-specific skills in `.skills/`. Global skills loaded via `skill` tool. From 77907f0cd9d58e6b9a22face926f00874213b4e5 Mon Sep 17 00:00:00 2001 From: Paul Keen <125715+pftg@users.noreply.github.com> Date: Sat, 22 Aug 2026 11:51:17 +0200 Subject: [PATCH 4/6] =?UTF-8?q?STATUS.md:=20apply=20reviewer=20findings=20?= =?UTF-8?q?=E2=80=94=20verify=20against=20artifacts,=20not=20tracker=20lin?= =?UTF-8?q?es?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The 4-eyes reviewer FAILed round two with measurements; every finding fixed: - P0-1: LinkedIn is LIVE, not drafts-only — metrics-ledger carries 3 posted rows (08-13/18/19, first read 2026-08-20) incl. the ICP-E lane's own week1-mon post; row now leads the WIP table as the primary demand lane. - P0-2: blog row no longer says "next post from the R-queue" (20.09 says the R-queue is empty/retired; replacement is §13) and now carries §1's governing constraint: outreach outranks new posts. §1 is reflected, not superseded. - P1-3: dropped the "empty metrics-ledger row" Paul ask (filled 2026-08-20) and corrected the stale 2605 TASK-TRACKER line it was copied from. - P1-4: 2607 next step is the backlog's actual recommendation — Sept-restart decision to retire the cold lane or buy Reddit API — not a P7 re-run. - P1-5: Joy Adamson override added to Blocked-on-Paul (1-min item, live). - P2-6: bet status no longer copied from vault ownership — Goals row now points at jt-vcr-runbook + the docs/business mirror instead of asserting it. - P2-7: "16 drafts" (all-lanes) corrected to ICP-E's own 3/10. - Reviewer's mechanism note adopted: header now instructs updaters to verify against the artifact, never a tracker line. Also superseded the ICP plan's stale "zero posted" status with a dated update note pointing at the ledger. 41 lines; all link targets verified with ls. Co-Authored-By: Claude Fable 5 --- STATUS.md | 14 ++++++++------ .../TASK-TRACKER.md | 2 +- docs/workflows/linkedin-icp-validation-plan.md | 2 ++ 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/STATUS.md b/STATUS.md index 094263895..662a87c61 100644 --- a/STATUS.md +++ b/STATUS.md @@ -4,22 +4,24 @@ > this file never duplicates project state, it points at it. > **Update rule**: any session that changes what's in flight (starts/finishes/parks > a workstream, ships a PR, hits a blocker) updates this file in the same commit/PR. +> **When updating: verify against the artifact (the ledger, the file, the PR), never +> a tracker line — trackers rot, and this file must not inherit their staleness.** ## Goals - **Company goals / OKR / weekly numbers**: vault `~/Documents/pkm/jt-operations.md` (host-only — vault owns operations; this repo carries growth/marketing execution). -- **Bet of record**: Vibe Code Rescue — **parked until Sept 2026**; bet state in vault `jt-vcr-runbook.md`, campaign artifacts in [`docs/projects/2607-vibe-code-rescue/`](docs/projects/2607-vibe-code-rescue/backlog.md). -- **Content plan of record**: [`20.09 content plan (Aug 2026)`](docs/projects/2510-seo-content-strategy/20-29-strategy/20.09-content-plan-revision-aug-2026.md). +- **Bet of record**: Vibe Code Rescue — status is vault-owned (`jt-vcr-runbook.md`; repo mirror [`docs/business/index.md`](docs/business/index.md)); campaign artifacts in [`docs/projects/2607-vibe-code-rescue/`](docs/projects/2607-vibe-code-rescue/backlog.md). +- **Content plan of record**: [`20.09 (Aug 2026)`](docs/projects/2510-seo-content-strategy/20-29-strategy/20.09-content-plan-revision-aug-2026.md) — its §1 governing constraint: **outreach outranks new posts**. ## Now / WIP | Workstream | State | Next step | Entry point | |---|---|---|---| +| LinkedIn (primary demand lane) | **LIVE** — 3 posts published (2026-08-13/18/19), first metrics read 2026-08-20; ICP-E lane 3/10 drafted, validation clock running | Next post per POSTING-PACKET cadence (Stream 0, 3-4/wk) | [`metrics-ledger`](linkedin-posts/metrics-ledger.md) · [`plan`](docs/workflows/linkedin-icp-validation-plan.md) | | 2608 site design system (v2 `/next/` rail) | Paused 2026-08-22 mid-flight; 3 pilots built + voted | Apply 20.09 repositioned copy; then Paul's 5 decisions | [`2608 README`](docs/projects/2608-site-design-system/README.md) | -| Blog / SEO (2510) | Active — descriptions done, R-queue restocked from live GSC (2026-08-21) | Next post from the R-queue | [`tracker`](docs/projects/2510-seo-content-strategy/GOAL-AT-A-GLANCE.md) | +| Blog / SEO (2510) | Constrained by 20.09 §1 (outreach first). R-queue empty/retired; replacement queue is §13 (restocked 2026-08-21) | Per §1: LinkedIn cadence + sourcing outrank a new post; when drafting, take §13 N-queue | [`20.09 §13`](docs/projects/2510-seo-content-strategy/20-29-strategy/20.09-content-plan-revision-aug-2026.md) | | 2605 course | v2 live; measuring. Diagnosis: **arrival, not content** (GSC/GA/Clarity triple-read 2026-08-20) | Arrival/discovery actions per 50.05; no new funnel posts on the unproven bridge | [`TASK-TRACKER`](docs/projects/2605-tech-for-non-technical-founders/TASK-TRACKER.md) | -| LinkedIn ICP-E campaign | Drafts only (16 drafts, UTM-tagged); no publishing | Draft per plan when asked | [`plan`](docs/workflows/linkedin-icp-validation-plan.md) | -| 2607 campaign tasks | Bet parked; sourcing tooling unblocked 2026-08-20 | P7 date-filtered sweep re-run | [`2607 backlog`](docs/projects/2607-vibe-code-rescue/backlog.md) | +| 2607 campaign tasks | Cold-public-sourcing premise tested and **failed** (3 sweeps, 4 venues, 0 verified-fresh rows; Reddit still un-openable) | Sept-restart Paul decision: retire the cold lane or buy Reddit API access (backlog §c) | [`2607 backlog`](docs/projects/2607-vibe-code-rescue/backlog.md) | | Test/CI hygiene | One known red (stale linux baseline, see 2608 README §Known red) | Diff record-vs-test build paths before re-recording | [`test-gates`](.okf/build/test-gates.md) | **Not in flight**: 2604 typography — closed 2026-08-08 (P2 leftovers re-homed). 2509 CSS migration — Phase C complete 2026-07-19, Phase D backlog dormant; the 2608 clean-slate rail is the live CSS strategy ([ADR-0006](docs/adr/0006-clean-slate-dual-run.md)). @@ -29,8 +31,8 @@ | What | Where the full ask lives | |---|---| | Five 2608 decisions (register pick, 3 claims, first page, legacy CTO sweep, Sept measurement gate) | [`2608 README`](docs/projects/2608-site-design-system/README.md) | +| **Joy Adamson override** (1 min; only survivor of outreach batch 1, still publicly unanswered) | [`20.09 §1`](docs/projects/2510-seo-content-strategy/20-29-strategy/20.09-content-plan-revision-aug-2026.md) desk table + 2607 backlog card #12 | | Three 2605 fabricated-fact findings (five-tech-words client claim, $78K/$400 story, SVG chart stats) | [`2605 TASK-TRACKER`](docs/projects/2605-tech-for-non-technical-founders/TASK-TRACKER.md) §Aug-20 sweep | -| LinkedIn metrics-ledger row for the 2026-08-13 post (empty past the 48-72h window) | `linkedin-posts/metrics-ledger.md` | | 2607 T3 (Gmail warm-source consent) + T10 (split strategy docs, [#449](https://github.com/jetthoughts/jetthoughts.github.io/issues/449)) | [`2607 backlog`](docs/projects/2607-vibe-code-rescue/backlog.md) | Last updated: 2026-08-22 diff --git a/docs/projects/2605-tech-for-non-technical-founders/TASK-TRACKER.md b/docs/projects/2605-tech-for-non-technical-founders/TASK-TRACKER.md index 92a28077b..c1418b320 100644 --- a/docs/projects/2605-tech-for-non-technical-founders/TASK-TRACKER.md +++ b/docs/projects/2605-tech-for-non-technical-founders/TASK-TRACKER.md @@ -17,7 +17,7 @@ Triple-confirms the Aug-14 diagnosis - **arrival, not content**: - **Clarity**: `reference/paid-pilot-full/` is the site's #1 dead-click page (17/7d) - verified NOT a defect: clicks land on the plain opening paragraph (reading/copy behavior), traffic is part internal review, part genuine ChatGPT referrals. No fix; recorded here so nobody "fixes" it later. - **Actions shipped 2026-08-20** (branch `course-arrival-actions-2026-08-20`): `contact_cta_click` GA4 event site-wide (seo-review §6 #1, its top open item - Paul: mark it a key event in GA4 admin, 1 click); course-fix sweep (course pages + last-10 blog posts) via swarm per Paul's request. - **Already done, no action**: every course link in all 16 LinkedIn drafts carries full UTM tags (the Aug-14 "next-campaign action" landed with the LI ops work). -- **Still open, needs Paul**: `linkedin-posts/metrics-ledger.md` row for the 2026-08-13 post - all metric cells empty, past the 48-72h window. Cheapest highest-leverage item for the sprint's kill-criteria. +- ~~**Still open, needs Paul**: `linkedin-posts/metrics-ledger.md` row for the 2026-08-13 post - all metric cells empty~~ **DONE 2026-08-20** - the ledger's "Read of 2026-08-20 (first filled rows)" populated it (307 impressions) plus the 08-18 and 08-19 posts. (Line corrected 2026-08-22; it had gone stale against the artifact it described.) **Aug-20 course-fix sweep (swarm, Paul's request):** 5 audit shards over all 84 course pages + last-10 blog posts, calibrated on 90.20; ~30 surgical fixes applied across 26 files (further-reading trims to the ≤4-external cap with inline-duplicate removal, 4 brick→list/blockquote conversions, "going back to 2011"→"since 2008", de-fabricated 80/20 + "80% of Rails apps" + "40+ rescues" stats, 2 banned-pattern rephrasings, composite disclaimer added to the five-tech-words anecdotes). **3 findings held for Paul (fabricated-fact class, judgment needed):** (1) `five-tech-words` l.94 "B2B HealthTech founder we shipped for in Q2 2025" - direct client claim with precise numbers, no source: cite the real engagement or convert to disclaimed composite; (2) `sow-reading-guide` l.138/176 - "$78K for $400" presented as a real founder's fact but the opener is a hypothetical: de-story or disclaim; (3) `paid-pilot-charge-before-ship` l.55 - the 12%-vs-65% conversion bar chart SVG carries unsourced stats inside artwork (text gates can't see exhibits). diff --git a/docs/workflows/linkedin-icp-validation-plan.md b/docs/workflows/linkedin-icp-validation-plan.md index ebe42e0a0..ec14c546f 100644 --- a/docs/workflows/linkedin-icp-validation-plan.md +++ b/docs/workflows/linkedin-icp-validation-plan.md @@ -2,6 +2,8 @@ > **Status: READY TO ACTIVATE (2026-08-08)** — 3 of 10 posts drafted, zero posted; the 2-week window starts when **Paul posts #1 from [`linkedin-posts/icp-validation/POSTING-PACKET.md`](../../linkedin-posts/icp-validation/POSTING-PACKET.md)** (copy, paste, post — nothing else). This campaign is now the **PRIMARY demand lane** (OS Rock 1, re-weighted 2026-08-08 after the warm-names premise fell). When live, cadence fits inside 20.09 §7's **Stream 0 total of 3-4 posts/week** (shared with course-promo) — not the original 5/week. The hypotheses, hooks, and reply-keyword CTAs below remain the campaign design of record. +> **Update 2026-08-22:** posting is LIVE — the status line above ("zero posted") is superseded. `linkedin-posts/metrics-ledger.md` carries three posted rows (2026-08-13, 08-18, 08-19; first metrics read 2026-08-20), including `week1-mon-jira-not-progress` from this campaign's own lane, so the validation clock is running. + **Purpose:** Validate whether LinkedIn can surface and qualify ICP-E: non-technical founders who feel stuck with a dev shop, freelancer, offshore team, or AI-heavy build they cannot evaluate. **Window:** 2 weeks from first post (clock starts when Paul posts #1) **Cadence:** see status banner — within the 3-4/wk Stream 0 total From 1450e0c1b375849dee3e8f6a07d358135d43bd03 Mon Sep 17 00:00:00 2001 From: Paul Keen <125715+pftg@users.noreply.github.com> Date: Sat, 22 Aug 2026 11:54:57 +0200 Subject: [PATCH 5/6] Round-3 findings: POSTING-PACKET superseded in place, ICP-E count from disk MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - P0-8: the packet still said PULLED / clock-NOT-started and offered the deleted 08-13 parable as the paste block, while the revised post shipped 2026-08-18 (posted_url in week1-mon frontmatter, ledger row read 08-20). Retitled HISTORICAL, dated supersession note added above the paste block, the "copy-paste-post" instruction struck through. STATUS.md next step now routes to the approved drafts (week1-tue / week1-wed), not the packet. - P2-9: "3/10 drafted" (copied from the plan banner) replaced with the on-disk truth: 1 posted + 4 approved (of 10 planned) — measured from frontmatter status fields, not a tracker line. Co-Authored-By: Claude Fable 5 --- STATUS.md | 2 +- linkedin-posts/icp-validation/POSTING-PACKET.md | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/STATUS.md b/STATUS.md index 662a87c61..f7032c16e 100644 --- a/STATUS.md +++ b/STATUS.md @@ -17,7 +17,7 @@ | Workstream | State | Next step | Entry point | |---|---|---|---| -| LinkedIn (primary demand lane) | **LIVE** — 3 posts published (2026-08-13/18/19), first metrics read 2026-08-20; ICP-E lane 3/10 drafted, validation clock running | Next post per POSTING-PACKET cadence (Stream 0, 3-4/wk) | [`metrics-ledger`](linkedin-posts/metrics-ledger.md) · [`plan`](docs/workflows/linkedin-icp-validation-plan.md) | +| LinkedIn (primary demand lane) | **LIVE** — 3 posts published (2026-08-13/18/19), first metrics read 2026-08-20; ICP-E lane on disk: 1 posted + 4 approved (of 10 planned), validation clock running | Post an approved draft (week1-tue / week1-wed) at Stream 0 cadence (3-4/wk) | [`metrics-ledger`](linkedin-posts/metrics-ledger.md) · [`plan`](docs/workflows/linkedin-icp-validation-plan.md) | | 2608 site design system (v2 `/next/` rail) | Paused 2026-08-22 mid-flight; 3 pilots built + voted | Apply 20.09 repositioned copy; then Paul's 5 decisions | [`2608 README`](docs/projects/2608-site-design-system/README.md) | | Blog / SEO (2510) | Constrained by 20.09 §1 (outreach first). R-queue empty/retired; replacement queue is §13 (restocked 2026-08-21) | Per §1: LinkedIn cadence + sourcing outrank a new post; when drafting, take §13 N-queue | [`20.09 §13`](docs/projects/2510-seo-content-strategy/20-29-strategy/20.09-content-plan-revision-aug-2026.md) | | 2605 course | v2 live; measuring. Diagnosis: **arrival, not content** (GSC/GA/Clarity triple-read 2026-08-20) | Arrival/discovery actions per 50.05; no new funnel posts on the unproven bridge | [`TASK-TRACKER`](docs/projects/2605-tech-for-non-technical-founders/TASK-TRACKER.md) | diff --git a/linkedin-posts/icp-validation/POSTING-PACKET.md b/linkedin-posts/icp-validation/POSTING-PACKET.md index 9cff64a7d..1a57e2d84 100644 --- a/linkedin-posts/icp-validation/POSTING-PACKET.md +++ b/linkedin-posts/icp-validation/POSTING-PACKET.md @@ -4,11 +4,13 @@ build: list: never --- -# Posting Packet — ICP post #1 (PULLED, being reworked) +# Posting Packet — ICP post #1 (HISTORICAL — reworked and posted 2026-08-18) > **STATUS 2026-08-13: this jira-not-progress post was scheduled, then DELETED before publish** — Paul judged it AI slop (staged parable, no tactic, "So..." beat-marking). It exposed a broken doctrine in the pipeline ("story, not advice"), now corrected to **idea-first, deliver the point** (see `docs/workflows/linkedin-post-pipeline.md` + `linkedin-posts/README.md`). This post is a **rescue-lane** draft to be REVISED to the new shape, not reposted as-is. The first idea-first post that DID ship is the course-lane `course-promo/week1-thu-validate-before-build.md` (scheduled 3:30pm CEST 2026-08-13, text-only; image is the manual gap). The rescue-lane 2-week clock has NOT started. -**For Paul. Total effort: copy the text block below, paste into LinkedIn, post.** Nothing else. This activates the campaign and starts the kill-criteria clock (register C1 addendum, 2026-08-08). +> **STATUS 2026-08-22 — supersedes the 08-13 note above AND the paste block below.** The rework happened and SHIPPED: `week1-mon-jira-not-progress.md` (idea-first revision) was posted **2026-08-18** (`posted_url` in its frontmatter; metrics row in `../metrics-ledger.md`, first read 2026-08-20). **The rescue-lane clock IS running.** Do NOT paste the block below — it is the deleted 08-13 parable, kept only as history. Next post comes from the approved drafts (`week1-tue-staging-question.md`, `week1-wed-trust-signals-poll.md`) at the Stream 0 cadence. + +~~**For Paul. Total effort: copy the text block below, paste into LinkedIn, post.** Nothing else. This activates the campaign and starts the kill-criteria clock (register C1 addendum, 2026-08-08).~~ *(Superseded 2026-08-22 — already activated; see the status note above.)* Source draft: `week1-mon-jira-not-progress.md` — quoted **verbatim** below; it passed 5 documented critic passes including Paul's own 2026-05-11 corrections (cinematic beat-marking removed). Do not edit before posting; if you want changes, say so and the revision goes back through `reflexion-reflect` first. From 2f8bd60dd3c198783db644516c9a9ff4204dad3e Mon Sep 17 00:00:00 2001 From: Paul Keen <125715+pftg@users.noreply.github.com> Date: Sat, 22 Aug 2026 11:57:04 +0200 Subject: [PATCH 6/6] P1-10: stamp the last live "zero posted / PULLED" claim in the 2605 tracker Third and final instance of the stale-claim class (rg "zero posted" now finds only lines directly superseded in place by dated stamps). Item 0 gains a 2026-08-22 update: revised post shipped 08-18, 3 live, clock running, packet is HISTORICAL. Co-Authored-By: Claude Fable 5 --- .../2605-tech-for-non-technical-founders/TASK-TRACKER.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/projects/2605-tech-for-non-technical-founders/TASK-TRACKER.md b/docs/projects/2605-tech-for-non-technical-founders/TASK-TRACKER.md index c1418b320..c7b1d1f9e 100644 --- a/docs/projects/2605-tech-for-non-technical-founders/TASK-TRACKER.md +++ b/docs/projects/2605-tech-for-non-technical-founders/TASK-TRACKER.md @@ -49,6 +49,7 @@ The queue below is groomed into agent-executable task cards in ## Open queue (in execution order) 0. **Sprint "Prove ICP Arrival" (validation) — ACTIVE, set 2026-08-13.** Manager panel (growth + learning + lean lenses, `/brainstorm`+vote) UNANIMOUS: with no traffic lift (84→75 sessions/14d, ~93% Direct, course absent from GSC) AND a dead funnel (start_course=1, mechanics=0), the constraint is **arrival/reach, not polish**. **Audit correction (premise was stale):** the campaign for this is ALREADY BUILT and READY — `linkedin-posts/icp-validation/POSTING-PACKET.md`, 10 posts drafted, zero posted, UTM scheme defined (`utm_campaign=icp_validation_`), **▶ 2026-08-13 UPDATE:** the rescue-lane jira post was scheduled then PULLED (Paul: AI slop). It exposed the pipeline's broken "story, not advice" doctrine → corrected to **idea-first, deliver the point** (`linkedin-post-pipeline.md` + new `linkedin-posts/README.md` LI operating system: 2 lanes course/rescue, 2-3 posts/wk, frontmatter v2, `metrics-ledger.md`, `reference-examples.md` from Cutler/Rossi/Holub/Paolino). First idea-first post SHIPPED: course-lane `course-promo/week1-thu-validate-before-build.md`, scheduled 3:30pm CEST (text-only; image = manual gap). **Next wave: revise the ~10 existing lane drafts to the new doctrine, 2-3/wk, Paul-gated.** Post #1 is a **reply-CTA** post (validates ICP *presence*/language on LinkedIn, H1-H5), which is the correct **cheapest FIRST test** — upstream of course *arrival*. **Step 2 (backlog, manager-prepped): UTM'd course-link posts** to test click-through/arrival, drafted only if step-1 engagement appears (contradicts H5's no-link-CTA design, so gated on step-1 signal). **Manager autonomous work while Paul-gated:** verify packet still valid post-Aug-14 (✅ story post evergreen, passed 5 critic passes), prep step-2 arrival posts + the 5-day measurement/kill-criteria read. **Panel parked, data-justified:** rest of W4 (item 13) dead-mechanic removal → opportunistic; 36-image SVG migration → opportunistic; item 7 → BLOCKED by gate #1. + > **▶ 2026-08-22 UPDATE — supersedes this item's "zero posted" and "PULLED" claims:** the pulled jira post was revised idea-first and **SHIPPED 2026-08-18** (`posted_url` in `linkedin-posts/icp-validation/week1-mon-jira-not-progress.md` frontmatter). Three posts are live (2026-08-13/18/19), first metrics read 2026-08-20 in `linkedin-posts/metrics-ledger.md`; the rescue-lane validation clock IS running. Lane on disk: 1 posted + 4 approved. (`POSTING-PACKET.md` is retitled HISTORICAL — do not paste from it.) 1. **Item 16 — Landing full-migration to the shuffle2 reference. ✅ DONE, MERGED (PR #444, squash `902686f3`, 2026-08-12).** Paul approved the render + flagged `bin/check-landing-parity` as redundant → removed (YAGNI). Design panel (conversion/taste/UX) decided Fork A = Option 2 + embedded CTA (dark NOT-cover, endcap merged into the dark base, no light sliver), Fork B = relocate all 4 off-reference sections, section reorder to reference order. Shipped T1-T6 (relocate 4 sections + 5 anchor repoints, reorder, gradient H1, 3-col mistakes, hero stat cells, dark band + merged endcap + 4 dead-selector cleanup, de-farmed chapter links). Linux baselines re-recorded via CI `update-baselines` (40-file env-drift re-sync incl. the intended `desktop/course/landing`) and rode the merge. Result render: `40-49-review/40.32-item16-result-full.jpeg`. Both reviewer agents failed on Fable quota → all blocking checks self-run with grep evidence. **Landing is live.**