Proof of concept mechanical port of ircnet/ircd to Rust as part of a bit about C being insecure for network services
0

Configure Feed

Select the types of activity you want to include in your feed.


name: create-blogpost description: Use when asked to "work on another blogpost" / "write the next post" for the docs/blog/ series narrating the ircd.rs C→Rust port. Covers picking a topic, the locked format conventions, grounding claims in real source, the hard paragraph rule, and the mandatory voice passes.#

Writing the next blog post#

Overview#

docs/site/content/blog/ is a numbered, public-facing series in Xe Iaso's voice narrating the strangler-fig C→Rust port of IRCnet ircd 2.11. "Work on another blogpost" means write the next 00N-*.md. One post = one topic, written for peers.

This is a faithful-port project, so the posts are technically load-bearing: every claim must be grounded in the actual code, plan, or specs — never hand-waved. The whole series' throughline is honesty over hype (build the oracle first; don't round 98% up to 100%). Match that.

Two skill invocations are mandatory (do not skip either):

  1. /xe-writing:xe-writing-style — before drafting (calibrates voice).
  2. /xe-writing:sound-like-a-person — after drafting (six humanizing passes).

Procedure#

1. Load the series state#

  • Read MEMORY.md → the [[blog-series]] memory. It holds the conventions and which topics are already taken. Authoritative.
  • Read the existing docs/blog/00N-*.md posts (at least the most recent two) to calibrate format, voice, and recurring framing (e.g. "build the oracle first", the Leveva reveal, the standing disclaimer).

2. Pick the topic#

  • Choose an unused topic. The blog-series memory lists candidates (e.g. variadic trampolines, layout drift-net/bindgen, iauth greenfield, a phase retrospective).
  • Topic choice is a real creative fork. If more than one strong candidate is open and the user hasn't named one, ask with AskUserQuestion (one question, 2–4 options, use the preview field to sketch each post's angle). Don't ask if the user already specified.

3. Invoke the writing-style skill#

Call /xe-writing:xe-writing-style. Override its MDX/<Conv> output format — this series uses the plain-markdown conventions below, NOT the live-xeiaso.net MDX. Keep everything else from the skill (voice-tone, the hard rules).

4. Gather real source material#

Ground the post in fact before drafting. Pull from:

  • PLAN.md (the phase plan, the keystone-hazard table, locked decisions).
  • docs/superpowers/plans/ and docs/superpowers/specs/ (the per-phase design docs — these have the precise "why we did X not Y" reasoning).
  • The actual C and Rust source. Quote real functions with real file:line anchors (grep/Read). A post that quotes vsendpreprep at send.c:392 beats one that paraphrases. Verify any line numbers / symbol names you cite — recalled facts may be stale.
  • Project memory (the memory/ dir) for verified findings and gotchas.

5. Draft to the locked format#

Frontmatter — plain markdown, no JSX imports:

---
title: "..."
desc: "One- or two-sentence hook."
date: YYYY-MM-DD
---

Conventions (match the existing posts exactly):

  • No character asides. The old > **Cadey** (coffee): … / > **Mara** (hacker): … blockquote device is retired — the whole back-catalog was de-asided. Write everything inline in one first-person voice: technical tangents (what Mara used to carry) and emotional/reaction beats (Cadey's job) both go in normal prose paragraphs. No second speaker, no blockquote framing.
  • A standing disclaimer that this is an unsanctioned experiment on someone else's code — leave the IRCNet team out of it. (Top of 001; bottom coda on the others.)
  • Footer: --- then links to the relevant docs/superpowers spec/plan and PLAN.md. Link back to prior posts where relevant.
  • Peer-level. No corporate tone. Show tradeoffs and costs, admit uncertainty.

6. Enforce the hard paragraph rule#

No two successive prose paragraphs may start with the same letter. Headers and code blocks don't count as paragraphs. Audit the whole draft explicitly — list each prose paragraph's opening letter in order and fix collisions (including pairs separated only by a header). This rule bites; check it every time, and re-check after the voice passes change openers.

7. Invoke sound-like-a-person#

Call /xe-writing:sound-like-a-person. Run its six passes on the weakest sections — the spots that sound performed rather than lived-in. A series-wide audit turned up five tells that recur in these posts; check for each by name:

  1. Balanced "not X, it's Y" / "X, not Y" antitheses. The single most common tell — fine once per post on the strongest beat, manufactured when stacked. Keep one or two, flatten the rest into plain declaratives that don't pivot on a negation.
  2. Restate-the-point closers. A section lands its point, then a tidy button re-states it to sound conclusive. Cut the button; let the prior sentence end it.
  3. Rule-of-three tricolons, especially one-fragment-per-section recap triads. Collapse to two uneven clauses so the cadence stops marching.
  4. Honesty-signaling. Narrating your own candor ("let me be honest…", "the kind of small honesty I'd rather log") instead of just stating the fact. State it and move on.
  5. Meta-narration. Pointing at the essay's own structure ("the part worth telling is…", "this post describes…", "sit with the shape of it"). Delete the framing, lead straight into the thing.

Also watch the older offenders: em-dash reveals used as a repeated tic, and too-tidy quotable endings. Roughen pacing, cut twin clauses, prefer an imperfect ending over a bow. Then re-run step 6 (the passes change paragraph openers) and read it aloud once.

8. Commit + update series state#

  • Commit the post alone (don't sweep unrelated working-tree changes) using /conventional-commits: docs(blog): add 00N-<slug>, --signoff, with the Assisted-by: footer. Commit straight to master (this repo's convention — see [[work-on-master-directly]]).
  • Update the [[blog-series]] memory: add the new post to the "taken topics" list so the next post won't re-pick it.

Anti-patterns#

  • Skipping either mandatory skill invocation (style before, person after).
  • Reaching for character asides — > **Cadey** / > **Mara** blockquotes (or <Conv>/MDX JSX). The aside device is gone; fold every beat into plain prose.
  • Leaning on the five recurring voice tells in step 7 (antithesis, restate-closer, tricolon, honesty-signaling, meta-narration).
  • Asserting technical claims without checking the source (this is a verifiable-faithfulness project — wrong claims undermine the whole point).
  • Forgetting the successive-paragraph-letter audit.
  • Rounding up: don't claim more is done/Rust/finished than actually is. The series' credibility is the product.