<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Jacob Molz</title>
    <description>The latest articles on Forem by Jacob Molz (@m0lz).</description>
    <link>https://forem.com/m0lz</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3066275%2F89a160f3-5ba9-4b3f-8571-748ee7777986.jpeg</url>
      <title>Forem: Jacob Molz</title>
      <link>https://forem.com/m0lz</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/m0lz"/>
    <language>en</language>
    <item>
      <title>m0lz.02 — Stack Loops</title>
      <dc:creator>Jacob Molz</dc:creator>
      <pubDate>Mon, 18 May 2026 16:51:25 +0000</pubDate>
      <link>https://forem.com/m0lz/m0lz02-stack-loops-ff3</link>
      <guid>https://forem.com/m0lz/m0lz02-stack-loops-ff3</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Stack Loops is the m0lz.02 workflow for checking a feature across its technology layers instead of treating the whole diff as one review contract. The failure class is a seam gap: app code, API shape, schema, infrastructure, deployment, and observability can each look acceptable in isolation while their boundary breaks. A frontend field rename that never reaches the API schema, or a new background queue that ships without the deploy/runtime wiring, is the kind of bug this workflow is designed to expose.&lt;/p&gt;

&lt;p&gt;This launch post keeps the claim narrow. The current evidence shows that Stack Loops detects and configures the expected layer contracts for the reference projects, persists separate layer runs, surfaces an infrastructure review gate, and executes its parallel evaluator cohort under the published release-gate ratio. It does not claim live-model bug-detection lift over a named commercial reviewer.&lt;/p&gt;

&lt;h2&gt;
  
  
  What It Does
&lt;/h2&gt;

&lt;p&gt;Stack Loops turns one feature review into a set of layer-scoped checks. m0lz.02 identifies the layers that matter for a project, writes those contracts into the PICE plan, runs the evaluator cohort per layer, and records a separate layer run for each activated layer before the feature is treated as passed.&lt;/p&gt;

&lt;p&gt;The always-run policy matters because many production failures live outside application code. Infrastructure, deployment, and observability layers are configured to stay in the loop when they are active, even if the feature diff looks like a frontend or API change. This benchmark does not compare that policy against an ablated run that omits those layers, and it does not record per-fixture feature-diff scope; it captures the seven-layer set that discovery and configuration produced on the reference fixtures and the persisted layer runs that followed.&lt;/p&gt;

&lt;p&gt;The concrete gate example is &lt;code&gt;fastapi-postgres&lt;/code&gt;. In the captured acceptance run, that fixture hit a pending infrastructure review gate, recorded one gate decision, received approval, and resumed to &lt;code&gt;passed&lt;/code&gt;. That is the workflow shape Stack Loops needs: pause at the cross-layer contract, make the decision auditable, then continue only after the gate is resolved. The capture does not include a negative-control run where an activated layer fails or a gate is rejected, so the fail-closed pass/fail aggregation is evidenced as plumbing and audit rather than as a refusal at aggregation time.&lt;/p&gt;

&lt;h2&gt;
  
  
  How It Works
&lt;/h2&gt;

&lt;p&gt;The workflow starts with layer discovery. m0lz.02 reads project evidence from manifests, framework files, directory layout, config files, and explicit overrides. It then evaluates the feature against the per-layer contract files at &lt;code&gt;.pice/contracts/{layer}.toml&lt;/code&gt; instead of asking a single reviewer to infer every boundary from one prompt. The per-layer contracts evaluated in this capture are the template contracts that &lt;code&gt;pice init --upgrade&lt;/code&gt; writes from &lt;code&gt;templates/pice/contracts/&lt;/code&gt;; their criteria headlines and template hashes are recorded under &lt;code&gt;results.json.methodology.per_layer_contract_content&lt;/code&gt;. Bespoke per-fixture contracts that customize criteria to the schema/auth/deployment/observability risks of a specific project are out of scope for this launch capture.&lt;/p&gt;

&lt;p&gt;Evaluation runs through the daemon. The CLI accepts terminal commands and renders status; &lt;code&gt;pice-daemon&lt;/code&gt; owns background jobs, provider sessions, manifests, layer-run persistence, metrics, templates, audit rows, and review gates. The CLI talks to the daemon over the local socket. The daemon talks to providers over stdio, with provider stdout reserved for JSON-RPC frames.&lt;/p&gt;

&lt;p&gt;That split is the main product boundary. The CLI stays a thin operator surface. The daemon owns orchestration and state, so &lt;code&gt;status --follow&lt;/code&gt;, &lt;code&gt;logs --follow&lt;/code&gt;, review-gate approval, and resumed background evaluation all read from the same job record instead of from terminal text.&lt;/p&gt;

&lt;h2&gt;
  
  
  Architecture
&lt;/h2&gt;

&lt;p&gt;m0lz.02 is the companion repository for this launch: &lt;a href="https://github.com/jmolz/m0lz.02" rel="noopener noreferrer"&gt;https://github.com/jmolz/m0lz.02&lt;/a&gt;. It contains the PICE CLI, the headless daemon, provider adapters, reference fixtures, release documentation, and acceptance scripts.&lt;/p&gt;

&lt;p&gt;The architecture is built around a CLI/daemon split:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Boundary&lt;/th&gt;
&lt;th&gt;Responsibility&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;CLI&lt;/td&gt;
&lt;td&gt;Parse commands, connect to the daemon socket, display status/log streams, and send operator actions such as review-gate approval.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Daemon&lt;/td&gt;
&lt;td&gt;Own background evaluation, provider sessions, manifests, layer runs, metrics, templates, audit records, and gate state.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Provider stdio&lt;/td&gt;
&lt;td&gt;Carry JSON-RPC request and response frames between the daemon and the provider process.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SQLite state&lt;/td&gt;
&lt;td&gt;Persist evaluations, layer runs, pass events, seam findings, gate decisions, and audit records.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;This matters for Stack Loops because layer evaluation is not a single synchronous terminal response. It needs resumable state, separate layer records, stream-json terminal frames, and human gate decisions that survive process boundaries.&lt;/p&gt;

&lt;h2&gt;
  
  
  Benchmark Results
&lt;/h2&gt;

&lt;p&gt;The raw benchmark artifact is &lt;code&gt;results.json&lt;/code&gt; in the benchmark workspace. The human-readable summary is below.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Check&lt;/th&gt;
&lt;th&gt;Result&lt;/th&gt;
&lt;th&gt;Evidence&lt;/th&gt;
&lt;th&gt;Boundary&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Parallel cohort assertion&lt;/td&gt;
&lt;td&gt;passed&lt;/td&gt;
&lt;td&gt;Sequential mean &lt;code&gt;6.238500097s&lt;/code&gt;; parallel mean &lt;code&gt;3.147005138s&lt;/code&gt;; ratio &lt;code&gt;0.504&lt;/code&gt; at or below target &lt;code&gt;0.625&lt;/code&gt;.&lt;/td&gt;
&lt;td&gt;Release-gate timing assertion only; three iterations and no confidence interval.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Phase 8 reference projects&lt;/td&gt;
&lt;td&gt;passed&lt;/td&gt;
&lt;td&gt;Five PICE-authored fixtures passed. Each produced seven detected layers, seven configured layers, seven distinct &lt;code&gt;layer_runs&lt;/code&gt; rows, terminal exit code zero, and &lt;code&gt;evaluate_status: passed&lt;/code&gt;.&lt;/td&gt;
&lt;td&gt;Reference-fixture mechanics, not external project coverage.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Infrastructure review gate&lt;/td&gt;
&lt;td&gt;passed&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;fastapi-postgres&lt;/code&gt; recorded &lt;code&gt;gate_decisions: 1&lt;/code&gt;, &lt;code&gt;audit_id: 1&lt;/code&gt;, approval, and resumed to &lt;code&gt;passed&lt;/code&gt;.&lt;/td&gt;
&lt;td&gt;Demonstrates gate plumbing and auditability, not general bug-detection lift.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Infrastructure contract tier&lt;/td&gt;
&lt;td&gt;recorded&lt;/td&gt;
&lt;td&gt;Each fixture reported &lt;code&gt;infrastructure_contract_tier: 3&lt;/code&gt;.&lt;/td&gt;
&lt;td&gt;Tier three means the infrastructure layer used the agent-team evaluation contract configured by the fixture.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Provider mode&lt;/td&gt;
&lt;td&gt;stubbed&lt;/td&gt;
&lt;td&gt;The acceptance script used provider &lt;code&gt;stub&lt;/code&gt;, model &lt;code&gt;stub-model&lt;/code&gt;, and eight &lt;code&gt;9.5,0.001&lt;/code&gt; stub-score pairs.&lt;/td&gt;
&lt;td&gt;Validates Stack Loops mechanics, not live provider judgment quality.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Three expected release-readiness targets were not run in this capture: the steady-state Criterion benchmark, the release artifact smoke test, and the local Linux CI script. The post therefore treats the capture as benchmark evidence for Stack Loops mechanics on one darwin arm64 machine, not as a complete release certification.&lt;/p&gt;

&lt;h2&gt;
  
  
  Methodology
&lt;/h2&gt;

&lt;p&gt;The benchmark workspace now includes &lt;code&gt;METHODOLOGY.md&lt;/code&gt; beside &lt;code&gt;results.json&lt;/code&gt; and &lt;code&gt;environment.json&lt;/code&gt;. That methodology file records the commands, repository revision, environment (including the Rust toolchain that produced the Cargo timing), provider mode, target provenance, omissions, and scope limits.&lt;/p&gt;

&lt;p&gt;The speedup assertion is a release-gate check. It compares the sequential evaluator cohort path with the parallel evaluator cohort path and verifies that the ratio remains at or below the inherited target. The harness recorded the means and ratio, but it did not record raw per-iteration timings, variance, standard deviation, or a confidence interval. The ratio target came from the earlier release validation contract; it was not statistically re-derived in this capture.&lt;/p&gt;

&lt;p&gt;The Phase 8 acceptance run is also bounded. It used PICE-authored reference fixtures and a stub provider. That is the right harness for checking layer discovery, layer persistence, stream termination, review-gate state, and daemon orchestration. It is not evidence that a live model would catch more real bugs than a single-contract reviewer, and it is not evidence that every framework topology is covered.&lt;/p&gt;

&lt;p&gt;The environment snapshot records darwin 25.4.0 on arm64, Apple M3 Max x 16 CPUs, 128 GB memory, Node.js v22.15.0, and npm 11.12.1. The snapshot was captured before the results import, so it should be read as hardware and toolchain context rather than an exact same-process timing envelope.&lt;/p&gt;

&lt;h2&gt;
  
  
  Limitations
&lt;/h2&gt;

&lt;p&gt;The comparator in this post is a one-contract-per-feature review workflow, not a named commercial product. That avoids a stronger claim than the evidence supports.&lt;/p&gt;

&lt;p&gt;The reference fixtures are authored by the m0lz.02 project. They exercise canonical Next.js, FastAPI, Rails, Express, and SvelteKit shapes, but they do not cover polyrepo discovery, monorepo package-boundary inference, dynamic service-mesh topology, or live-provider disagreement cases.&lt;/p&gt;

&lt;p&gt;The always-run layer policy was enforced, not ablated. To prove the policy improves defect detection, m0lz.02 still needs a comparison run that disables infrastructure, deployment, and observability layers against the same task set. The always-run trigger condition is also not separately evidenced in this capture: &lt;code&gt;results.json&lt;/code&gt; records seven configured and seven persisted layer runs per fixture but does not record each fixture's feature-diff scope, so the artifact supports always-run plumbing and persistence rather than the trigger condition that meta-layers ran despite an otherwise narrower diff.&lt;/p&gt;

&lt;p&gt;The fail-closed pass/fail aggregation is not exercised by a negative control in this capture. Every fixture passed under the stub provider, and the one infrastructure gate decision was an approval that resumed to &lt;code&gt;passed&lt;/code&gt;. A failing-layer, missing-layer-run, or rejected-gate negative-control run would prove that aggregation refuses to mark a feature passed; until that artifact exists, the post bounds the claim to plumbing, persistence, and approved-gate resume behavior.&lt;/p&gt;

&lt;p&gt;The per-layer contract content evaluated in this capture is the m0lz.02 template content under &lt;code&gt;templates/pice/contracts/&lt;/code&gt;, recorded with criteria headlines and template hashes in &lt;code&gt;results.json.methodology.per_layer_contract_content&lt;/code&gt;. The artifact therefore evidences per-layer contract evaluation against named risk-class criteria, not bespoke per-fixture contracts authored for the schema, auth, deployment, or observability risks of a specific real project.&lt;/p&gt;

&lt;p&gt;The seam-failure classes used to motivate the launch (frontend field rename that never reaches the API schema, background queue that ships without deploy/runtime wiring, the schema-to-API and deploy-to-runtime risks named in the conclusion) are not validated by this capture either. The acceptance harness evidences layer mechanics and per-layer template criteria; a seam-failure fixture or seam-finding negative control is the artifact that would prove detection of those specific risk classes.&lt;/p&gt;

&lt;p&gt;The current capture is single-machine darwin arm64 evidence. Any Linux, CI, or cross-platform runtime claim needs a separate capture from the omitted release-readiness targets. The Rust toolchain that produced the speedup timing is recorded in &lt;code&gt;environment.json&lt;/code&gt; under &lt;code&gt;rust_toolchain&lt;/code&gt; (&lt;code&gt;rustc 1.94.1&lt;/code&gt;, &lt;code&gt;cargo 1.94.1&lt;/code&gt;, stable channel, no project toolchain pin, default &lt;code&gt;dev&lt;/code&gt; test profile) so the Cargo target is reproducible.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Use Stack Loops when the risk lives between layers: schema to API, code to infrastructure, deploy to runtime, runtime to observability. This launch proves the workflow mechanics on the current reference capture and keeps the broader claim for later evidence.&lt;/p&gt;

&lt;p&gt;The next work is clear: replay the same layer contracts with live providers, add harder non-canonical projects, run the omitted release-readiness targets, and publish the comparison only when those artifacts exist.&lt;/p&gt;

</description>
      <category>projectlaunch</category>
      <category>m0lz02</category>
      <category>pice</category>
      <category>stackloops</category>
    </item>
    <item>
      <title>m0lz.01: Does it make sense to me?</title>
      <dc:creator>Jacob Molz</dc:creator>
      <pubDate>Mon, 11 May 2026 21:34:05 +0000</pubDate>
      <link>https://forem.com/m0lz/m0lz01-does-it-make-sense-to-me-9i3</link>
      <guid>https://forem.com/m0lz/m0lz01-does-it-make-sense-to-me-9i3</guid>
      <description>&lt;h2&gt;
  
  
  Does it make sense to me?
&lt;/h2&gt;

&lt;p&gt;That is the bar I wanted for m0lz.01.&lt;/p&gt;

&lt;p&gt;I do not need another content calendar, another notes app, or another agent that says it can publish while leaving the real work scattered across terminals, drafts, browser tabs, and half-finished checklists. I wanted one local system that could take an idea, turn it into research, draft the post, challenge the argument, publish to my site, and prepare the distribution work without pretending the risky parts are magic.&lt;/p&gt;

&lt;p&gt;m0lz.01 is that system. It is a standalone &lt;code&gt;blog&lt;/code&gt; CLI with Codex and Claude authoring surfaces over the same SQLite state and file artifacts. The CLI owns the mechanical work. Codex and Claude help plan, write, review, and operate it.&lt;/p&gt;

&lt;p&gt;The important part is not that it can write. The important part is that the system leaves me with a workflow I can inspect.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Shape
&lt;/h2&gt;

&lt;p&gt;The pipeline has six working phases: &lt;code&gt;ideas&lt;/code&gt;, &lt;code&gt;research&lt;/code&gt;, &lt;code&gt;benchmark&lt;/code&gt;, &lt;code&gt;draft&lt;/code&gt;, &lt;code&gt;evaluate&lt;/code&gt;, and &lt;code&gt;publish&lt;/code&gt;. &lt;code&gt;published&lt;/code&gt; is the successful terminal state. &lt;code&gt;unpublished&lt;/code&gt; is a rollback state that keeps the slug reserved because the canonical URL is permanent.&lt;/p&gt;

&lt;p&gt;The hub is this site. Every post lands at &lt;code&gt;https://m0lz.dev/writing/&amp;lt;slug&amp;gt;&lt;/code&gt;. Cross-posts point their canonical URL back here. Project repos and research pages are spokes around the hub, not competing sources of truth.&lt;/p&gt;

&lt;p&gt;The CLI stores state in &lt;code&gt;.blog-agent/state.db&lt;/code&gt; and writes phase artifacts next to it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;research notes&lt;/li&gt;
&lt;li&gt;benchmark results&lt;/li&gt;
&lt;li&gt;MDX drafts&lt;/li&gt;
&lt;li&gt;evaluation reports&lt;/li&gt;
&lt;li&gt;generated research pages&lt;/li&gt;
&lt;li&gt;social paste files&lt;/li&gt;
&lt;li&gt;publish receipts&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That sounds boring because it should. The durable value is not an agent personality. It is state that survives the chat window.&lt;/p&gt;

&lt;h2&gt;
  
  
  Codex First, Not Claude Only
&lt;/h2&gt;

&lt;p&gt;The first version of this story over-indexed on the &lt;code&gt;/blog&lt;/code&gt; Claude surface because that was the first polished interactive path. That is no longer the full picture.&lt;/p&gt;

&lt;p&gt;The truth is simpler: m0lz.01 is a local CLI first. Codex is now a first-class way I work on and operate the system. This repo has Codex command wrappers under &lt;code&gt;.codex/commands/*&lt;/code&gt; and migrated source-command skills under &lt;code&gt;.agents/skills/source-command-*&lt;/code&gt;. Claude Code still has the packaged &lt;code&gt;.claude-plugin/&lt;/code&gt; &lt;code&gt;/blog&lt;/code&gt; skill, and that plugin ships in the npm tarball.&lt;/p&gt;

&lt;p&gt;Those are two clients over the same CLI boundary. Neither one gets to be the database. Neither one gets to be the publishing system. They propose work, inspect files, draft text, run checks, and hand off state changes to &lt;code&gt;blog&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;That distinction matters. If I am writing from Codex, I can run the same plan and evaluation discipline I use for code changes. If I am in Claude Code, I can use the packaged &lt;code&gt;/blog&lt;/code&gt; flow. The content pipeline does not care which assistant helped produce the next approved step.&lt;/p&gt;

&lt;h2&gt;
  
  
  One Prompt Still Does Not Mean No Judgment
&lt;/h2&gt;

&lt;p&gt;The pleasant demo is: ask for a launch post, get a published post.&lt;/p&gt;

&lt;p&gt;The actual workflow is stricter. The authoring layer proposes a plan. The CLI validates that the plan is made of registered leaf commands. The operator approves it. &lt;code&gt;blog agent apply&lt;/code&gt; executes the approved steps and writes a receipt.&lt;/p&gt;

&lt;p&gt;For a project launch, the work is roughly:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;blog research init m0lz-01-launch &lt;span class="nt"&gt;--topic&lt;/span&gt; &lt;span class="s2"&gt;"m0lz.01 launch"&lt;/span&gt;
blog research finalize m0lz-01-launch
blog benchmark skip m0lz-01-launch
blog draft init m0lz-01-launch
blog draft &lt;span class="nb"&gt;complete &lt;/span&gt;m0lz-01-launch
blog evaluate init m0lz-01-launch
blog evaluate structural-autocheck m0lz-01-launch
blog evaluate record m0lz-01-launch structural structural.json
blog evaluate record m0lz-01-launch adversarial adversarial.json
blog evaluate record m0lz-01-launch methodology methodology.json
blog evaluate synthesize m0lz-01-launch
blog evaluate &lt;span class="nb"&gt;complete &lt;/span&gt;m0lz-01-launch
blog publish start m0lz-01-launch
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The plan path wraps those commands with a hash gate. Approval records a SHA256 hash of the canonical plan payload. If the plan changes after approval, &lt;code&gt;verify&lt;/code&gt; and &lt;code&gt;apply&lt;/code&gt; reject it with &lt;code&gt;HASH_MISMATCH&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;That gate is useful, but it is not a sandbox. The authoring surface can still ask to run &lt;code&gt;blog&lt;/code&gt; commands. A human at the terminal can still bypass the plan system. The model is cooperative: a cooperative author, a cooperative assistant, and a CLI that makes the approved path hard to accidentally drift from.&lt;/p&gt;

&lt;h2&gt;
  
  
  Evaluation Is Where the System Earns Its Keep
&lt;/h2&gt;

&lt;p&gt;I do not trust first drafts. I trust pressure.&lt;/p&gt;

&lt;p&gt;m0lz.01 runs a three-reviewer panel:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Structural review checks the content shape, MDX contract, sources, and publish readiness.&lt;/li&gt;
&lt;li&gt;Adversarial review uses Codex GPT-5.5 high to argue against the thesis.&lt;/li&gt;
&lt;li&gt;Methodology review uses Codex GPT-5.5 xhigh for benchmark validity, reproducibility, and evidence claims.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The synthesis step groups findings into consensus, majority, and single-reviewer issues. Consensus and majority issues block. Autocheck findings block. Single-reviewer issues can be advisory, but I rejected several algorithmic passes while dogfooding this post because serious findings were landing as single-reviewer advisories.&lt;/p&gt;

&lt;p&gt;That is useful signal. The system did not merely produce a green check. It made the weakness visible enough for me to refuse the result.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Ships Automatically
&lt;/h2&gt;

&lt;p&gt;The publish pipeline is checkpointed. If step five fails, the next &lt;code&gt;blog publish start &amp;lt;slug&amp;gt;&lt;/code&gt; resumes from step five. Each step is designed to be idempotent.&lt;/p&gt;

&lt;p&gt;The pipeline can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;create or update the canonical MDX in the hub repo&lt;/li&gt;
&lt;li&gt;generate the research companion page&lt;/li&gt;
&lt;li&gt;pause for the site pull request gate&lt;/li&gt;
&lt;li&gt;create a Dev.to draft with &lt;code&gt;published: false&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;attach the canonical URL to the Dev.to draft&lt;/li&gt;
&lt;li&gt;prepare paste-ready Medium, Substack, LinkedIn, and Hacker News text&lt;/li&gt;
&lt;li&gt;update companion repo links when a project repo exists&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Dev.to is the one API cross-post path I am willing to automate right now. Medium, Substack, LinkedIn, and Hacker News remain paste-ready outputs because the manual review step is still useful and the APIs are not worth binding into the publish path yet.&lt;/p&gt;

&lt;h2&gt;
  
  
  What It Does Not Bind Yet
&lt;/h2&gt;

&lt;p&gt;The plan hash does not bind &lt;code&gt;.blogrc.yaml&lt;/code&gt;. If the workspace config changes between approval and apply, the plan hash does not catch it. The plan displays venues as operator-facing mitigation, but config-hash binding is still future work.&lt;/p&gt;

&lt;p&gt;The SQLite database is local state, not protected state. Back it up before upgrades if a workspace matters.&lt;/p&gt;

&lt;p&gt;The lock is slug-scoped and cooperative. It prevents two applies for the same slug from running at once. It does not defend against arbitrary filesystem edits inside &lt;code&gt;.blog-agent/&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Those limitations do not make the system useless. They define the boundary. m0lz.01 is not a general-purpose secure agent runtime. It is a local publishing workflow with receipts, phase gates, and enough friction to keep me from shipping whatever the assistant wrote first.&lt;/p&gt;

&lt;h2&gt;
  
  
  Install
&lt;/h2&gt;

&lt;p&gt;Install the CLI globally and verify that the binary resolves:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; m0lz-01
blog &lt;span class="nt"&gt;--help&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Create a dedicated workspace outside your project repos:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;mkdir&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; ~/blog
&lt;span class="nb"&gt;cd&lt;/span&gt; ~/blog
blog init
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Edit &lt;code&gt;.blogrc.yaml&lt;/code&gt; with your hub site repo, base URL, content directories, author handles, and optional project map. Then edit &lt;code&gt;.env&lt;/code&gt; with &lt;code&gt;DEVTO_API_KEY&lt;/code&gt; if Dev.to publishing is enabled.&lt;/p&gt;

&lt;p&gt;Use Codex from the m0lz.01 repo when you want the local command-wrapper workflow:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.codex/commands/prime.md
.codex/commands/plan-feature.md &amp;lt;topic&amp;gt;
.codex/commands/execute.md &amp;lt;plan-file&amp;gt;
.codex/commands/evaluate.md &amp;lt;plan-file&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Use the packaged Claude Code plugin when you want the &lt;code&gt;/blog&lt;/code&gt; skill:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;claude &lt;span class="nt"&gt;--plugin-dir&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;npm root &lt;span class="nt"&gt;-g&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;/m0lz-01/.claude-plugin"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then start with the real question:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/blog launch a new project
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Source is at &lt;a href="https://github.com/jmolz/m0lz.01" rel="noopener noreferrer"&gt;&lt;code&gt;github.com/jmolz/m0lz.01&lt;/code&gt;&lt;/a&gt;. The repo includes the CLI, the packaged Claude plugin, the Codex command wrappers, and the regression tests that keep the publishing path honest.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>developertools</category>
      <category>opensource</category>
      <category>methodology</category>
    </item>
  </channel>
</rss>
