Devlog
Weekly narrative of what shipped, what changed, and the decisions behind it. Synthesized from ops reports, git history, GitHub activity, and session logs.
2026-W13 — Summary sweep, Vercel migration, and the first public input channel
Summary sweep, Vercel migration, and the first public input channel
After Week 12’s content sprint, Week 13 shifted to infrastructure and polish. The entire catalog got one-line summaries in a single day, the site moved to Vercel with a new card layout, and the /suggest form opened Metaphorex’s first channel for anonymous contributions. Meanwhile, a batch of ten kaizen fixes hardened the pipeline, seventeen prospecting playbooks cleared a long-standing backlog, and 85 new entries brought the catalog to 1,384.
By the Numbers
- 85 entries added (1,299 → 1,384), 25 new frames (249 → 274). A deliberate cooldown from Week 12’s 849-entry sprint.
- Summary enrichment completed in ~18 hours. 1,299 entries swept across 16 batches in three tiers, plus a 58-entry mop-up pass. The entire catalog now has one-line summaries for card views and search results.
- ~55 PRs merged, 50+ issues closed. Most closures were dangling-reference issues consumed by the miner.
- 90 commits across three authors: fshot (75), m4x-ops (10), m4x-miner (5).
- Work concentrated Monday through Thursday; quiet Friday through Sunday.
What Shipped
Summary enrichment — the whole catalog, in a day:
The summary field was Week 12’s top “What’s Next” item. A tiered playbook swept the catalog: Tier 1 (435 high-traffic entries) first for tone calibration, then Tier 2 (649 entries), Tier 3 (155 entries), and a mop-up batch for 58 entries that slipped through the tier-assignment script. Every entry now carries a summary suitable for cards, search snippets, and embed previews.
Site — Layout B cards, Vercel, and /suggest:
Three changes shipped in quick succession on Wednesday:
- Layout B card pages replaced the previous entry layout, leveraging the new summary field for browsable card grids.
- Vercel migration moved hosting from GitHub Pages to Vercel with hybrid output mode — all existing pages remain static, but individual routes can opt into server-side rendering. Vercel Analytics added the same day.
- /suggest form (PR #2732): the first mechanism for non-GitHub users to contribute. A static Astro page POSTs to a serverless API route that validates via Cloudflare Turnstile and creates a GitHub issue labeled
suggestion. No auth, no database.
Content — 85 new entries:
- Dangling references project: ~50 entries filling gaps in the
relatedgraph (biases, psychology, idioms, design patterns, archetypes) - Stoic philosophy: 5 entries (dichotomy-of-control, memento-mori, negative-visualization, the-mind-is-a-citadel, life-is-a-play)
- Firefighting/military proverbs: 5 entries
- Miscellaneous: ai-research-is-a-jumping-machine and others
Prospecting backlog — 17 playbooks merged:
A concentrated session on Wednesday rebased and merged playbooks that had accumulated over weeks: agricultural proverbs, Bannard’s aphorisms, firefighting maxims, Alexander pattern language batch 2, culinary mise en place, mathematical folklore, child psychology, carpentry-woodworking, Schein’s surgical aphorisms, Napoleon’s military maxims, comedy writers’ glossary, Hauser & Reich directing, psychotherapy re-prospect, eval novel metaphors re-prospect, stoic philosophy, and dangling references.
Pipeline & Kaizen
Ten kaizen fixes merged in a single session, targeting specific failure modes that had accumulated over prior weeks:
- Cross-PR file conflict detection (#2719 / kaizen #2217): the validator now catches when two open PRs modify the same catalog file.
- Manifest validation (#2713 / kaizen #1924, #2702 / kaizen #2288, #2704 / kaizen #2300): archive URL verification and category slug validation added.
- Miner safety: restricted to catalog/ files only (#2721), pre-PR rebase with frame recency check (#2734), PR title/body must match branch content (#2699).
- Assayer: fixup commit pattern documented (#2692), worktree conflict on PR checkout fixed (#2735).
- Survey pipeline: phantom sub-issue filtering (#2708), pipeline lifecycle gaps filled (#2742), nugget issues added to survey (#2744).
- Bot signatures: agent comment signatures standardized across all agent prompts (#2347).
The /curate command shipped to close the loop from /suggest: it fetches suggestion-labeled issues, presents them for triage, and can relabel as nugget (queuing for the miner), close, merge as duplicate, or skip.
Steering Notes
- Vercel was forced by /suggest. GitHub Pages can’t run server-side code. The hybrid output mode was the minimal migration path: zero regression risk for static pages, opt-in server routes where needed.
- Summary enrichment used tiered batching for tone control. Starting with Tier 1 allowed calibrating the summary voice before scaling to the full catalog. The mop-up batch proved the tier-assignment script had gaps — 58 entries missed the first pass.
- Layout B was chosen over two alternatives. Three mockups (A/B/C) were committed; Layout B’s card format best leveraged the new summary field.
- Kaizen debt was cleared before the prospecting backlog. The ten pipeline fixes landed first on Wednesday, ensuring the miner, assayer, and validator were solid before the content burst that followed.
- First suggestion already triaged. Issue #2733 (“Landing some Code”) came in through /suggest and was relabeled as a nugget via /curate — the full public contribution pipeline works end to end.
What’s Next
- Dangling references project wrapping up: a handful of entries still missing from the
relatedgraph. - Ops pipeline still needs attention: no reports generated since Week 12.
- Open kaizen: GraphQL rate limits on m4x-reviewer (#2689), agent-identity verification before dispatch (#2337).
- Flat directory threshold: 1,384 entries in a single directory — the 200-entry “revisit” mark is long past.
2026-W12 — 849 entries, structural enrichment, and the rename
849 entries, structural enrichment, and the rename
Week 12 nearly tripled the catalog. Fifteen import projects ran concurrently, the structural enrichment sweep tagged every entry for shape-based retrieval, and the project-wide rename from “mappings” to “entries” landed. By Sunday the catalog held 1,299 entries, 249 frames, and 26 categories.
By the Numbers
- 849 entries added in seven days (450 to 1,299). Nearly double the pace of Week 11’s 474.
- 284 PRs merged, 200+ issues closed. The auto-merge workflow handled the volume without manual intervention.
- Structural enrichment completed in a single day (March 21): 22 batches covering ~1,080 entries, plus a 200-entry cleanup pass. Every entry in the catalog now carries structural tags.
- Ops reports stopped after March 18. The digest pipeline didn’t keep up with the pace of change. Cost data is incomplete for the second half of the week.
What Shipped
Content — fifteen import projects running concurrently:
The pipeline sustained a pace that would have been unthinkable two weeks earlier. Major projects:
- Alexander pattern language (PRs #2385-#2391, 30 entries from A Pattern Language)
- Stoic philosophy (PRs #2453-#2474, 20 entries from Marcus Aurelius, Epictetus, Seneca)
- Psychotherapy metaphors (PRs #2422-#2438, ~40 entries from ACT, narrative therapy, somatic work)
- Ecological metaphors (PRs #2374-#2381, ~25 entries from ecology and permaculture)
- Hacker laws (PRs #2445-#2447, 14 entries: Hyrum’s Law, Goodhart’s Law, Dunning-Kruger, etc.)
- Bannard aphorisms + carpentry proverbs (PRs #2364-#2370, ~30 entries)
- Surgical aphorisms + agricultural proverbs (PRs #2341-#2348, ~25 entries)
- Dangling references cleanup (PRs #2677-#2691, ~40 entries filling gaps in the
relatedgraph) - Eval-novel-metaphors (PRs #2426-#2435, ~12 entries testing whether the pipeline can generate original metaphors)
Structural enrichment — the whole catalog, tagged for shape:
The structural enrichment sweep added four fields to every entry: embodied_patterns, relation_types, structure, and abstraction_level. The motivation: keyword search and even embeddings find topically similar entries, but the catalog’s real value is surfacing non-obvious connections across domains. Two entries from completely different fields can share the same embodied pattern (container, path, cycle, tension) or the same relational structure (part-whole, cause-effect, enabler-constraint). These tags make that kind of structural retrieval possible. The vocabulary was designed in docs/plans/2026-03-20-structural-enrichment-vocabulary.md, validated with an eval harness, then swept across the catalog in 22 batches on March 21.
Schema and naming:
- Mappings renamed to entries (PR #1567). Every file, script, agent prompt, skill, and template updated. The old term was confusing to newcomers.
- Schema v2 (PR #1458): five-kind taxonomy (metaphor, pattern, archetype, paradigm, mental-model),
applies_tofield,groundinglevels. 41 paradigms reclassified to mental-model (PR #1459).
Site:
- Structural neighbors sidebar added to entry detail pages. When viewing an entry, the sidebar shows entries that share embodied patterns or relation types.
- Pagefind faceted filters for kind and category.
Infrastructure:
- Agent identity and RBAC system (PR #2334). Agents can now operate under their own GitHub bot accounts via operator-level crew config.
- Embeddings pipeline and evaluation framework (PR #1520).
- Relation subtypes with weighted Jaccard similarity for the structural exploration system.
Pipeline & Kaizen
Six kaizen fixes shipped:
- Smelter label corrected:
ready-for-assaytoneeds-assay(PR #1572) - Miner required
needs-smeltinglabel on all PRs (PR #1569) gh pr reviewreplaced withgh apifor review submission (PR #2398)- Validator now warns on unknown frontmatter fields (PR #2399)
- Prospector gained scrape result validation and selector fallback guidance (PR #2421)
- Worktree branch guard added to miner agent (PR #1682)
Other pipeline improvements: no-cosmetic-changes rule for the miner, duplicate section and deprecated heading checks in the validator, circular mapping warnings when source_frame appears in applies_to, and a kaizen self-improvement guard with principles doc.
Steering Notes
- “Mappings” was the wrong word. The rename to “entries” was driven by user feedback: the term “mapping” confused people who expected a geographic or data-mapping tool. “Entry” is neutral and accurate.
- Structural enrichment vocabulary was designed casuals-first. The plan explicitly chose “embodied patterns” over the academic term “image schemas” because “image” misleadingly suggests something visual. The felt, bodily quality of these patterns is what matters.
- Ops reports fell behind. The digest pipeline didn’t run after March 18, likely because the session cadence shifted to longer, less frequent runs. Cost visibility was lost for the second half of the week.
What’s Next
- Summary enrichment pass: add a one-line
summaryfield to every entry for card views and search results - Dangling references project wrapping up: ~50 entries still missing from the
relatedgraph - Ops pipeline needs attention: no reports generated since March 18
- Site: card-based entry browsing (Layout B design)
2026-W11 — From 13 entries to 739: the week the pipeline came online
From 13 entries to 739: the week the pipeline came online
Week 11 was the inflection point. The project went from a hand-curated seed catalog to a full agent-driven pipeline producing hundreds of entries per day. The schema was overhauled, the monorepo consolidated, observability stood up, and six import projects ran concurrently. By Sunday the catalog had 739 entries, 145 frames, and 21 categories.
By the Numbers
- 474 entries added in seven days, up from 13 at week start. Cost: $241.75 total, roughly $0.51 per entry.
- 460 agent runs across the week. The miner (opus) dominated at $179.87 (74% of spend). The smelter (haiku) handled 118 runs for just $3.95 — the cheapest agent per run by far.
- 50 PRs merged, 50 issues closed. The auto-merge workflow went live mid-week, cutting manual merge overhead to near zero.
- Peak day: 193 entries on March 13, the day the pipeline hit full stride with multiple import projects running in parallel.
What Shipped
Content — six import projects running concurrently:
- Lakoff-Johnson MWLB canon (cognitive linguistics core)
- Jungian archetypes (PR #901 prospected, entries #945-#955 mined — shadow, self, persona, anima/animus, great mother, wise old man, senex, shapeshifter)
- Dead metaphors worth resurrecting (PR #900 — bankrupt, muscle, shell, kernel, daemon, spam, patch, silo)
- Fantasy-mythology-folklore (ouroboros, excalibur, damocles-sword, gordian-knot, pyrrhic-victory, pandemonium, cerberus, and more)
- Patterns of Software / Cathedral & Bazaar (software-habitability, piecemeal-growth, the-quality-without-a-name)
- Hacker Laws (PR #1235 prospected)
Schema v2 (PR #1458):
- Five-kind taxonomy: metaphor, pattern, archetype, paradigm, mental-model
- New fields:
applies_to,grounding(proven/established/folk/contested),provenance - Reclassified 41 paradigms to mental-model, 2 to metaphor (PR #1459)
- Added
catalog/works/for source text provenance tracking (PR #1362)
Infrastructure:
- Monorepo consolidation (PR #531) — agents repo merged into main, metaphorex.org launched
- Observability and kaizen system (PR #1193) — ops reports, digest.py, kaizen issue template
- Auto-merge on
approvedlabel (.github/workflows) - Split licensing: CC BY-SA 4.0 for content, MIT for code
- Marginalia-inspired site theme
Pipeline & Kaizen
The full agent squad came online this week. Six agents were created or substantially rewritten:
- Miner — extracts entries from playbooks. 197 runs, the workhorse.
- Assayer — reviews and refines miner output. 123 runs on sonnet.
- Smelter — mechanical cleanup (frontmatter normalization, formatting). 118 runs on haiku, the most cost-efficient agent.
- Prospector — researches new sources, builds playbooks and manifests. 9 runs on opus.
- Surveyor — validates prospector output before mining begins. 7 runs.
- Fixer — applies kaizen fixes to agent prompts and scripts. 1 run (kaizen backlog was empty most of the week).
The /work orchestrator command was built to dispatch agents in sequence: smelt → assay → mine → prospect, with a kaizen triage phase.
Session and identity management took shape. The project moved from a single workspace (-workspace-metaphorex) to a second workspace (-workspace-m4x-factory) mid-week, establishing the pattern of separate working directories for different operational contexts. GitHub auth and bot identity setup appeared in multiple sessions as the crew configuration system was bootstrapped — laying groundwork for agents to operate under their own GitHub identities via the /configure command and agent-identity skill.
Bug fixes:
- survey.py: fixed detection of
needs-surveylabel and REST sub_issues API (PR #943, issue #1369) - Auto-merge workflow: added missing
--repoflag (PR #1365)
18 new scripts landed, including digest.py (ops/changelog generation), validate.py improvements, survey.py (work queue), stats.py (cost accounting from issue comments), and several backfill utilities for the schema migration.
Steering Notes
Key decisions from session logs (March 9 steering session):
- Em-dash ban as style norm. “Presence of em-dash is considered proof of AI-slop-ness.” Established as editorial guidance — agents must use periods, colons, or shorter sentences instead.
- Authorship attribution policy. Seed content re-attributed to
fshotrather than source authors, after weighing competing arguments about credit vs. provenance. - Security category created as standalone (not merged with risk). “Just create security, not risk, for now.”
- Frame roles simplified. Initial design was too complex for systematic enumeration. Backtracked to simpler guidance after discussion: “that’s too complex, please backtrack.”
- Gold-standard entries identified.
the-commons.mdandfirewall.mdselected as style exemplars after explicit evaluation of the seed catalog. - Eval hypothesis planted. Late-week session explored whether LLMs with catalog access outperform those without — designed as a milestone series to test as the catalog grows. Led to embeddings pipeline and eval framework design docs.
- Dotfile management with chezmoi discussed as a way to track user/system-level improvements across sessions.
What’s Next
- Hacker Laws import project queued (prospected, not yet mined)
- Content enrichment pass at 47% (transfers + limits for existing entries)
- Eval framework design docs written — implementation pending catalog growth
- Kaizen backlog empty — pipeline running clean, friction not yet accumulating at scale