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
2 changes: 1 addition & 1 deletion .claude/agents/build-monitor.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,4 +12,4 @@ Use skills (minimal subset):
- `best-practices`

Rules:
- Follow `docs/workflows/BASE_HANDBOOK.md`
- Follow `CLAUDE.md` (repo root — the canonical rules) and `docs/workflows/flow-router.md`
4 changes: 2 additions & 2 deletions .claude/agents/content-creator.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
---
name: content-creator
description: Creates or edits site/course content under the JT voice guide, canon, and anti-AI-pattern gates. Voice-sensitive judgment work.
model: fable
model: opus
---

# Content Creator (Canonical)
Expand All @@ -15,6 +15,6 @@ Use skills (minimal subset):
- `copywriting-core`

Rules:
- Follow `docs/workflows/BASE_HANDBOOK.md`
- Follow `CLAUDE.md` (repo root — the canonical rules) and `docs/workflows/flow-router.md`
- For full blog workflow, see `docs/workflows/blog-pipeline.md`
- For cover images, follow `docs/workflows/cover-images.md` and `.stitch/design.md`
2 changes: 1 addition & 1 deletion .claude/agents/core/analyst.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,4 +13,4 @@ Use skills (minimal subset):
- `six-thinking-hats`

Rules:
- Follow `docs/workflows/BASE_HANDBOOK.md`
- Follow `CLAUDE.md` (repo root — the canonical rules) and `docs/workflows/flow-router.md`
6 changes: 3 additions & 3 deletions .claude/agents/core/coder.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
---
name: core-coder
description: Implements changes with minimal context - thin wrapper over the incremental-implementation skill set and BASE_HANDBOOK rules.
model: fable
description: Implements changes with minimal context - thin wrapper over the incremental-implementation skill set and CLAUDE.md rules.
model: opus
---

# Core Coder (Critical)
Expand All @@ -13,7 +13,7 @@ Use skills (minimal subset):
- `best-practices`

Rules:
- Follow `docs/workflows/BASE_HANDBOOK.md`
- Follow `CLAUDE.md` (repo root — the canonical rules) and `docs/workflows/flow-router.md`
- If a task is domain-specific (SEO/Hugo/content), defer to the canonical agent or skill

## Methodology stance (XP / lean)
Expand Down
2 changes: 1 addition & 1 deletion .claude/agents/core/planner.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ Use skills (minimal subset):
- `incremental-implementation`

Rules:
- Follow `docs/workflows/BASE_HANDBOOK.md`
- Follow `CLAUDE.md` (repo root — the canonical rules) and `docs/workflows/flow-router.md`

## Methodology stance (Shape Up / lean)

Expand Down
2 changes: 1 addition & 1 deletion .claude/agents/core/researcher.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ Use skills (minimal subset):
- `knowledge-synthesis`

Rules:
- Follow `docs/workflows/BASE_HANDBOOK.md`
- Follow `CLAUDE.md` (repo root — the canonical rules) and `docs/workflows/flow-router.md`
- Obey the Research Protocol for claude-context searches

## Methodology stance (lean)
Expand Down
4 changes: 2 additions & 2 deletions .claude/agents/core/reviewer.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
---
name: core-reviewer
description: Reviews changes for correctness and risk across the repo - the general 4-eyes gate. Judgment role, findings with file:line evidence.
model: fable
model: opus
---

# Core Reviewer (Critical)
Expand All @@ -13,7 +13,7 @@ Use skills (minimal subset):
- `code-review-quality`

Rules:
- Follow `docs/workflows/BASE_HANDBOOK.md`
- Follow `CLAUDE.md` (repo root — the canonical rules) and `docs/workflows/flow-router.md`

## Methodology stance (XP / lean)

Expand Down
2 changes: 1 addition & 1 deletion .claude/agents/core/screenshot-guardian.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,4 +13,4 @@ Use skills (minimal subset):
- `pagespeed-insights`

Rules:
- Follow `docs/workflows/BASE_HANDBOOK.md`
- Follow `CLAUDE.md` (repo root — the canonical rules) and `docs/workflows/flow-router.md`
2 changes: 1 addition & 1 deletion .claude/agents/core/tester.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ Use skills (minimal subset):
- `tdd-fix-tests`

Rules:
- Follow `docs/workflows/BASE_HANDBOOK.md`
- Follow `CLAUDE.md` (repo root — the canonical rules) and `docs/workflows/flow-router.md`

## Methodology stance (XP)

Expand Down
2 changes: 1 addition & 1 deletion .claude/agents/hugo-expert.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,5 +14,5 @@ Use skills (minimal subset):
- `postcss-best-practices`

Rules:
- Follow `docs/workflows/BASE_HANDBOOK.md`
- Follow `CLAUDE.md` (repo root — the canonical rules) and `docs/workflows/flow-router.md`
- For CSS rules see `docs/workflows/css-consolidation.md`
42 changes: 42 additions & 0 deletions .claude/agents/okf-maintainer.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
---
name: okf-maintainer
description: Maintains the .okf/ knowledge bundle - distills a durable learning into its concept file + section index + a dated log.md entry, riding the SAME commit/branch as the change that produced it. Dispatch in parallel with the main work per the ENFORCED CLAUDE.md OKF rule. Also upserts the concept's okf-* mirror entry in ruflo memory (namespace okf) per the sync rule.
model: opus
---

# OKF Maintainer

You maintain `.okf/` — the Open Knowledge Format bundle. You are dispatched
with (a) the durable learning (root cause, gotcha, decision, canon change) and
(b) the branch/commit it must ride with.

- Follow `CLAUDE.md` (repo root — the canonical rules) and `docs/workflows/flow-router.md`
- Consume the bundle via the `okf:okf` skill; never hand-edit the bundle FORMAT
from memory — the skill carries the spec.

## The job, every time

1. **Consolidate before creating**: find the existing concept the learning
belongs to (`.okf/*/index.md` first). A new concept file is the exception
and needs a matching index row.
2. Update the concept + its section `index.md` row if the description changed.
3. Append a dated `## YYYY-MM-DD - <headline>` entry to `.okf/log.md`
(newest first) — what changed, why, and the pointer.
4. **Ruflo mirror (sync rule)**: if a concept's title/description changed,
upsert its memory entry:
`npx @claude-flow/cli@latest memory store -n okf -k okf-<section-abbrev>-<slug> -v "<Type>: <description> Details: <path>"`
(prefixes: okf-build- / okf-content- / okf-wf- / okf-design- / okf-arch- / okf-cs-).
5. Validate: run the `okf:validate` skill's checker with `--strict`; the gate
is **0 ERRORS** (warnings are a known-red state — check the error count,
not the exit code or the checkmark).
6. Commit on the SAME branch as the main work (or hand the staged files back
to the coordinator if it owns the commit) — the bundle update rides the
same commit as the change. Never a separate cleanup PR.

## Boundaries

- You edit `.okf/` and the ruflo okf namespace only. Never the change under
documentation, never CLAUDE.md, never STATUS.md — flag mismatches back to
the coordinator instead.
- One learning per dispatch; if you find a second stale thing while working,
report it, don't fix it silently.
4 changes: 2 additions & 2 deletions .claude/agents/ruby/ruby-coder.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
---
name: ruby-coder
description: Ruby/test-suite changes with minimal context - Minitest, Rake tasks, bin/ scripts. Follows 37signals/DHH style and the repo's TDD gates.
model: sonnet
model: opus
---

# Ruby Coder (Critical)
Expand All @@ -14,4 +14,4 @@ Use skills (minimal subset):
- `minitest`

Rules:
- Follow `docs/workflows/BASE_HANDBOOK.md`
- Follow `CLAUDE.md` (repo root — the canonical rules) and `docs/workflows/flow-router.md`
4 changes: 2 additions & 2 deletions .claude/agents/ruby/ruby-reviewer.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
---
name: ruby-reviewer
description: Reviews Ruby/test-suite changes for correctness, risk, and repo-convention fit. The 4-eyes gate for Ruby work - judgment role, evidence-cited findings.
model: fable
model: opus
---

# Ruby Reviewer (Critical)
Expand All @@ -13,4 +13,4 @@ Use skills (minimal subset):
- `rails-expert`

Rules:
- Follow `docs/workflows/BASE_HANDBOOK.md`
- Follow `CLAUDE.md` (repo root — the canonical rules) and `docs/workflows/flow-router.md`
2 changes: 1 addition & 1 deletion .claude/agents/seo-specialist.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,5 +15,5 @@ Use skills (minimal subset):
- `pagespeed-insights`

Rules:
- Follow `docs/workflows/BASE_HANDBOOK.md`
- Follow `CLAUDE.md` (repo root — the canonical rules) and `docs/workflows/flow-router.md`
- If the task is not SEO-related, defer to the appropriate skill or agent
2 changes: 1 addition & 1 deletion .claude/agents/validation/qa-browser-tester.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,4 +13,4 @@ Use skills (minimal subset):
- `web-design-reviewer`

Rules:
- Follow `docs/workflows/BASE_HANDBOOK.md`
- Follow `CLAUDE.md` (repo root — the canonical rules) and `docs/workflows/flow-router.md`
Original file line number Diff line number Diff line change
Expand Up @@ -13,4 +13,4 @@ Use skills (minimal subset):
- `ux-principles`

Rules:
- Follow `docs/workflows/BASE_HANDBOOK.md`
- Follow `CLAUDE.md` (repo root — the canonical rules) and `docs/workflows/flow-router.md`
2 changes: 1 addition & 1 deletion .claude/agents/validation/ux-browser-validator.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,4 +13,4 @@ Use skills (minimal subset):
- `ux-principles`

Rules:
- Follow `docs/workflows/BASE_HANDBOOK.md`
- Follow `CLAUDE.md` (repo root — the canonical rules) and `docs/workflows/flow-router.md`
5 changes: 5 additions & 0 deletions .claude/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,11 @@
"type": "command",
"command": "bin/agent-bootstrap > /tmp/agent-bootstrap.log 2>&1 || true",
"timeout": 600
},
{
"type": "command",
"command": "npx @claude-flow/cli@latest memory search -q CORRECTION --type keyword --limit 5 2>/dev/null || true",
"timeout": 45
}
]
}
Expand Down
8 changes: 8 additions & 0 deletions .github/workflows/publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,14 @@ jobs:
PRECOMPILED_ASSETS: '1'
HUGO_DEFAULT_PATH: _dest/public-test

# Course content validators (chapter numbering, links, em-dash,
# year-stamp...). Previously only wired to an uninstalled pre-push hook —
# a green config test stood in front of a gate that never ran
# (docs/70-79-ai-intelligence/70.12, P0). CI is where it cannot be
# uninstalled.
- name: Course validators
run: bin/validate-course

# Asset-pipeline integration: dev vs prod branching in css-processor,
# css-inline, and js-processor (fingerprint/integrity/minify/crossorigin).
# Previously ran only inside `rake test` on push-to-master, so a PR could
Expand Down
11 changes: 6 additions & 5 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@ name: Screenshot Tests
# PR #386) - and record mode would silently overwrite the canonical
# baselines with unpinned renders.
#
# PR runs are REPORT-ONLY during the soak period (continue-on-error) -
# flip that flag off to make the gate blocking.
# PR runs are BLOCKING (2026-08-22): the report-only soak that started
# 2026-07-31 ended after its motivating defects were fixed.

on:
workflow_dispatch:
Expand Down Expand Up @@ -67,9 +67,10 @@ jobs:
if: ${{ github.event_name == 'pull_request' || inputs.screenshots || inputs.update-baselines }}
runs-on: ubuntu-latest
timeout-minutes: 20
# Report-only soak for the PR gate: failures upload the diff report and
# comment on the PR but do not block merging. Remove after the soak.
continue-on-error: ${{ github.event_name == 'pull_request' }}
# BLOCKING since 2026-08-22: the report-only soak (2026-07-31, #413) ended —
# its motivating defects were fixed (#560 tolerance, #566 baselines, #570
# per-page pins) and 22 days report-only meant nothing blocking checked
# Linux pixels (dtest-from-worktree is vacuous).

steps:
# PR events use the default checkout (the PR *merge* commit): testing
Expand Down
18 changes: 18 additions & 0 deletions .okf/log.md
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,24 @@ 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 - audit P0s executed: re-tiered agents, live gates, one rule source

All 70.12 P0s landed the same day. Five agents re-tiered off fable/sonnet to
opus (core coder+reviewer, ruby pair, content-creator) - the reviewer
quota-death root cause. bin/validate-course now runs in CI's unit job and the
config test that green-covered its uninstalled pre-push hook is DELETED (the
enforcement lens's own dissent: fix by deletion, not elaboration). The CI
visual gate's 22-day report-only soak ended - continue-on-error removed.
BASE_HANDBOOK.md deleted with a full reference sweep; CLAUDE.md is the one
rule source and all 20 agents now cite it. okf-maintainer exists as a real
agent (the ENFORCED rule's phantom executor, built); the phantom "weekly
maintain pass" claim removed from both rule copies. Docs-CI three-way
contradiction resolved (no CI fires on docs-only; none is waited for). mem0
dropped (plugin off, fallback = memoria); machine config deduped (~100k
schema tokens/session: ruflo-core plugin MCP, chrome-devtools x2, github,
serena, context7 x2, notebooklm). Ruflo retrieval wired into SessionStart
for the 30-day read measurement. Full audit: docs/70-79-ai-intelligence/70.12.

## 2026-08-22 - six-lens AI-ops audit: the failure mode is silent no-ops, not missing rules

A /swarm panel (six read-only lenses, mandatory dissents) audited the AI
Expand Down
2 changes: 1 addition & 1 deletion .okf/workflows/company-layer-ownership.md
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ 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`,
Aligned 2026-08-17: `AGENTS.md`,
`docs/workflows/flow-router.md` (split into two routes), `CLAUDE.md`,
`docs/projects/2607-vibe-code-rescue/strategy.md`, and
`.agents/skills/async-first-communication/SKILL.md`. If a new doc tells an
Expand Down
24 changes: 20 additions & 4 deletions .okf/workflows/ruflo-runtime.md
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,19 @@ per concept from its frontmatter title/description, exactly as above.
by design has no pattern tables - the skip message "agentdb schema not
initialised" means you pointed it at the wrong DB, not that init is needed.
- 12 background workers exist (`hooks worker list`); the daemon runs them.
- **Retrieval is wired (2026-08-22)**: a second SessionStart hook runs
`memory search -q CORRECTION --type keyword --limit 5` unredirected, so
recalled corrections inject into session context AND increment
`access_count` — the 30-day read measurement that decides the memory
architecture (audit doc 70.12). Do not remove it before the measurement.
- **ruflo-core PLUGIN is disabled (2026-08-22)** — it bundled a duplicate MCP
registration (~61.5k schema tokens/session); the project-level `ruflo`
entry in `~/.claude.json` is the ONE registration (CLAUDE.md hardcodes its
`mcp__ruflo__*` prefix). Its skills (ruflo-doctor, init-project, witness)
were thin wrappers over `npx @claude-flow/cli@latest ...` — call the CLI
directly (doctor / init upgrade / etc.). Other ruflo-* plugins stay enabled.
- **mem0 is dropped from the stack (Paul 2026-08-22)** — plugin disabled;
quota-dead and redundant. Fallback chain is ruflo → memoria.

# CLI bugs observed 2026-08-22 (ruflo v3.38.16) - do not re-fight these

Expand All @@ -64,10 +77,13 @@ or still present.

- `config init` generates a config the loader rejects ("reading 'map'"
warning on every call). Run on defaults; delete any generated config.
- `memory export` fails ("Exported to undefined"); `memory_import_claude`
finds 0 files even with `allProjects: true` (path-encoding). The auto-memory
corpus is deliberately NOT mirrored into ruflo - `MEMORY.md` already loads
every session.
- `memory export` fails ("Exported to undefined"). `memory_import_claude`
has a path-encoding bug (replaces only slashes, but Claude's memory dir
name also dashes the dots) — WORKAROUND: pass a pre-dashed projectPath,
e.g. `/Users/pftg/dev/jetthoughts-github-io`, and it imports. The
auto-memory corpus (48 files) IS mirrored via that workaround since
2026-08-22, namespace `claude-memories`, semantic recall verified —
re-import after big memory-file batches (idempotent, dedups).
- CLI `memory search --type semantic` returns empty in terminals (needs
@ruvector/core); single-term `--type keyword` works; real semantic search is
MCP-only. (Also in CLAUDE.md research protocol.)
Expand Down
6 changes: 3 additions & 3 deletions AGENTS.md
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
# AGENTS.md — JetThoughts Blog

Canonical instructions live in `CLAUDE.md`. Read that first.
Session start: always read `@docs/workflows/BASE_HANDBOOK.md` and `@docs/workflows/flow-router.md`.
Session start: always read `@docs/workflows/flow-router.md` (rules live in `CLAUDE.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. **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`.
**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 + local gates — no CI fires on them (path filters) and none is waited for (Paul 2026-08-22); findings apply 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`.

**Session memory (ruflo-first, SOP for ALL agents):** search ruflo memory (`mcp__ruflo__memory_search`, MCP path) before non-obvious decisions; store decisions/corrections via `mcp__ruflo__memory_store` as they land. Details + prefix conventions: `CLAUDE.md` §Memory.

**OKF maintenance (ENFORCED, parallel by default):** durable learnings (canon numbers, root causes, workflow gotchas) go into `.okf/` — dispatch an okf-maintainer in parallel with the main work, not after it; the bundle update rides the same commit as the change. Weekly scheduled maintain pass back-fills misses. See CLAUDE.md OKF section for the full rule.
**OKF maintenance (ENFORCED, parallel by default):** durable learnings (canon numbers, root causes, workflow gotchas) go into `.okf/` — dispatch the `okf-maintainer` agent in parallel with the main work, not after it; the bundle update rides the same commit as the change. No scheduled back-fill exists; the same-commit rule is the only mechanism. See CLAUDE.md OKF section for the full rule.

<skills>
- `.agents/skills/async-first-communication/SKILL.md` — async-first knowledge sharing SOP (default for ALL work)
Expand Down
Loading
Loading