@natjswenson/devlog 0.3.1 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/SKILL.md +123 -23
  3. package/package.json +2 -2
package/CHANGELOG.md CHANGED
@@ -2,6 +2,25 @@
2
2
 
3
3
  All notable changes to `@natjswenson/devlog` are documented here.
4
4
 
5
+ ## 0.4.0 (2026-06-28) — researched, end-to-end implementation-guide posts
6
+
7
+ **Changed**
8
+ - `/devlog` now writes each release entry as a researched, cited, end-to-end
9
+ implementation guide rather than a narrative summary of what shipped. Step 6
10
+ derives the engineering topic(s) the work touched, researches them against
11
+ reputable outside sources (cited inline and in a `## Sources` section), and
12
+ writes a setup → build → use → verify walkthrough with multiple
13
+ copy-paste-reusable, language-tagged code blocks that together form a complete,
14
+ runnable whole (right-sized: roughly 3-6 essential blocks for a substantive
15
+ feature, fewer for a small change, never padded). A short `## Shipped` hook
16
+ still opens the post and `## Changelog` still closes it. Updated the skill
17
+ description and the Step 6 / 6a-6c guidance accordingly.
18
+
19
+ **Added**
20
+ - `deepDive` config block: `topicDomains` (default: AI, DevOps/SRE, software
21
+ engineering) and `minSources` (default 2) to steer topic selection and the
22
+ citation floor. Repo-agnostic; user-supplied values live in `config.json`.
23
+
5
24
  ## 0.3.1 (2026-06-20) — fetch tags before discovering releases
6
25
 
7
26
  **Fixed**
package/SKILL.md CHANGED
@@ -1,14 +1,20 @@
1
1
  ---
2
2
  name: devlog
3
- description: Generate a dev log entry for each new version release from git tags, written in your own voice, and publish to GitHub
3
+ description: Generate a researched, cited blog post for each new version release from git tags, written in your own voice, and publish to GitHub
4
4
  user_invocable: true
5
5
  ---
6
6
 
7
- # /devlog — Release Dev Log Generator
7
+ # /devlog — Release Blog-Post Generator
8
8
 
9
- You are generating a dev log entry **for each new version release** (a semver git tag) in
10
- the user's projects, writing each entry **in the user's own voice**, and publishing them to
11
- a GitHub repo configured in `~/.claude/skills/devlog/config.json`.
9
+ You are generating a **blog post for each new version release** (a semver git tag) in the
10
+ user's projects, writing each in **the user's own voice**, and publishing them to a GitHub
11
+ repo configured in `~/.claude/skills/devlog/config.json`.
12
+
13
+ Each post is more than a changelog: a short "what shipped" hook, then a **deeply researched,
14
+ end-to-end implementation guide** for the engineering topic(s) the work touched — how to build
15
+ and use the technique, grounded in BOTH the user's actual work AND reputable, cited outside
16
+ sources, with multiple copy-paste-reusable code blocks that form a complete, runnable whole
17
+ (see Step 6).
12
18
 
13
19
  Usage: `/devlog` (all configured projects) or `/devlog <project-key>` (single project)
14
20
 
@@ -55,6 +61,11 @@ Optional fields:
55
61
  (e.g. `devlog-v` for tags like `devlog-v0.2.0`). Defaults to `v` (matching tags like
56
62
  `v1.4.0`). In a monorepo, each project sets its own prefix so its releases are detected
57
63
  independently.
64
+ - `deepDive` — optional object controlling the researched deep-dive (Step 6). Repo-agnostic;
65
+ all values have sensible defaults:
66
+ - `topicDomains` — array of domains the deep dive may explore. Default
67
+ `["AI", "DevOps/SRE", "software engineering"]`.
68
+ - `minSources` — minimum reputable external sources to cite per post. Default `2`.
58
69
 
59
70
  ## Step 0: Load and validate config
60
71
 
@@ -266,42 +277,131 @@ git -C '<project.path>' branch --contains '<hash>' -r 2>/dev/null | grep -q 'ori
266
277
  - If the remote URL matches `<project.remote>` (i.e. `github.com/<project.remote>` or the SSH equivalent) and the commit is on the published branch, it's a public commit — link it using `https://github.com/<project.remote>/commit/<hash>`.
267
278
  - Otherwise, describe the change without linking.
268
279
 
269
- ## Step 6: Generate the entry (in the user's voice)
280
+ ## Step 6: Research and write the blog post (in the user's voice)
281
+
282
+ Each entry is a **proper blog post**, not a changelog: a short "what shipped" hook, then a
283
+ **researched deep dive** into the engineering topic(s) the work touched. The release is the
284
+ springboard; the teaching is the point. Every post must be grounded in BOTH the user's actual
285
+ work AND **reputable outside sources, cited**.
286
+
287
+ ### Step 6a: Derive the deep-dive topic(s)
288
+
289
+ From the release's real changes (Step 4), identify the **one** substantive topic the work
290
+ touched (occasionally several, only when the work genuinely spans them) in the configured
291
+ `deepDive.topicDomains` (default: AI, DevOps/SRE, and software engineering). The topic is the
292
+ general concept *behind* what shipped, e.g. shipping a `feature→dev→main` flow → branching
293
+ strategy and release engineering. Never pad with topics the work didn't touch.
294
+
295
+ ### Step 6b: Research — deeply, from reputable sources
296
+
297
+ For each topic, **research before writing**. Use web search/fetch to gather authoritative
298
+ sources and concrete, citable facts. Requirements:
299
+ - **Prefer primary/authoritative sources:** official docs and release notes, standards bodies
300
+ (e.g. semver.org), primary research (e.g. DORA / *Accelerate*), and well-regarded
301
+ engineering writing (e.g. Martin Fowler / Thoughtworks, Atlassian, the project's own docs).
302
+ Avoid SEO content farms and low-signal blog spam.
303
+ - **At least `deepDive.minSources` reputable sources** (default 2; aim for 3+ on a meaty topic).
304
+ - **Every specific external claim must be backed by a source** — version numbers, behaviors,
305
+ research findings, definitions, statistics. If you can't source a specific claim, don't make
306
+ it. Verify facts against the source rather than recalling them.
307
+ - Keep a working list of `(claim, url)` pairs to cite in the post.
308
+
309
+ ### Step 6c: Write the post
270
310
 
271
- For each new release, generate a markdown entry with this structure, writing the prose to
272
- match the voice profile resolved in Step 2 (its openers, rhythm, vocabulary, never-do):
311
+ Structure (write the prose to match the voice profile resolved in Step 2 openers, rhythm,
312
+ vocabulary, never-do):
273
313
 
274
314
  ```markdown
275
315
  ---
276
- title: "<concise title for this release>"
316
+ title: "<essay-style title; NOT 'release vX.Y.Z'>"
277
317
  date: YYYY-MM-DD
278
318
  project: <project.key>
279
319
  version: <version label, e.g. v0.2.0>
280
- summary: "<1-2 sentence summary of what shipped>"
320
+ tags: [<2-5 lowercase topic tags, e.g. git, ci-cd, release-engineering>]
321
+ summary: "<1-2 sentence hook that frames the deep dive, not just what shipped>"
281
322
  ---
282
323
 
283
- ## What Shipped
324
+ ## Shipped
325
+
326
+ <2-4 sentences: what this release actually delivered, plainly. End by pivoting to the topic
327
+ the rest of the post explores. This is the only purely-changelog part.>
328
+
329
+ ## <Descriptive section heading for the deep dive / walkthrough>
330
+
331
+ <The deep dive is an END-TO-END IMPLEMENTATION GUIDE, not a single illustrative snippet. A
332
+ developer should be able to read this post and actually BUILD and USE the thing it's about.
333
+ Weave together THREE threads throughout: (1) what the user actually did (grounded, first-person,
334
+ no fabrication), (2) the general concept backed by the researched sources, cited inline as
335
+ markdown links, and (3) the user's earned take/lesson.
336
+
337
+ Cover the full path, in order, using descriptive section headings (split across multiple `##`
338
+ sections — do not cram the whole build into one):
339
+
340
+ - **Setup / prerequisites** — what's needed before the core code: dependencies, config, the
341
+ relevant data model, types, or interfaces. Include a code block whenever it has real content
342
+ (install command, schema, config file).
343
+ - **Build it, step by step** — the core implementation broken into ordered steps, EACH with its
344
+ own language-tagged code block, that together form a COMPLETE, coherent, runnable whole, not
345
+ one isolated centerpiece function. Show the wiring between the pieces (how they call each
346
+ other), not just the most interesting line.
347
+ - **Use it** — how to actually invoke or run the result, with a code block showing the call site
348
+ and a realistic example of its output or effect.
349
+ - **Verify it / edge cases** — how to confirm it works (a test, an assertion, or what to check),
350
+ plus the one or two real failure modes worth calling out.
351
+
352
+ This is a blog for DEVELOPERS: every code block must be real, correct, idiomatic, language-tagged,
353
+ and copy-paste-reusable, and the blocks must be collectively complete enough to reproduce the
354
+ LOAD-BEARING path of the feature. Aim for the essential blocks (roughly 3-6 for a substantive
355
+ feature, fewer for a small change) — show the pieces that carry the idea and the wiring between
356
+ them, not every helper, import, or obvious glue line. Favor one clear block per step over many
357
+ tiny ones or one giant dump; if a block isn't teaching something, cut it. A clean, general
358
+ version of the concept is the goal; it need not be the user's exact source. Use inline `code`
359
+ for identifiers.>
360
+
361
+ ## <Next build/use section — continue the walkthrough>
284
362
 
285
- <Narrative paragraphs about what this version delivers. Focus on WHAT changed and WHY it
286
- matters to someone using or following the project, not raw commit messages. Group related
287
- commits into the handful of changes that actually matter. Write in the user's voice per the
288
- resolved voice profile.>
363
+ <...>
289
364
 
290
- ## What's Next
365
+ ## Sources
291
366
 
292
- <Brief 1-2 sentence forward-looking note based on the trajectory of the work.>
367
+ - [<source title>](<url>) <one phrase on what it supports>
368
+ - [<source title>](<url>) — <...>
293
369
 
294
- ## Commits
370
+ ## Changelog
295
371
 
296
372
  - <commit message> ([short-hash](https://github.com/<project.remote>/commit/full-hash))
297
373
  ```
298
374
 
299
375
  **Important rules for content generation:**
300
- - "What Shipped" is a NARRATIVE release note, not a commit list. Describe the changes that matter, grouped, with their impact.
301
- - Match the **voice profile** for tone and phrasing; let `voice-notes.md` override it. Do NOT apply any LinkedIn reach rules — this is a dev log.
302
- - Only include the "Commits" section's links for commits on the published branch of a public repo.
303
- - "What's Next" should be a reasonable inference from the release's trajectory never a fabricated roadmap.
304
- - **Never invent** metrics, motivations, or outcomes the commits don't support.
376
+ - **Separate fact from concept.** What the user *did* comes only from the commits/diff never
377
+ invent metrics, motivations, decisions, or outcomes the work doesn't support. What the topic
378
+ *is* comes from the cited sources. Keep the two clearly distinguishable to the reader.
379
+ - **No unsourced external claims.** Any specific fact about the wider world (a version, a
380
+ behavior, a study, a definition) needs a `## Sources` citation. General reasoning and the
381
+ user's own opinions don't need a citation, but must be clearly the user's view.
382
+ - **Match the voice profile + `voice-notes.md`** for tone and phrasing. Apply the voice's
383
+ authenticity, anti-AI-tell, and punctuation rules (e.g. no em dashes if the profile bans
384
+ them; no rhetorical fragment-lists; no clever-symmetry "payoff" closer; end on the last real
385
+ point). Do **NOT** apply the profile's LinkedIn length/reach rules — a blog implementation
386
+ guide needs room (target ~900–1600 words for a substantive feature; shorter for a genuinely
387
+ small change; as long as a complete, honest walkthrough requires, never padded).
388
+ - **Accessible but substantive:** a curious non-expert can follow the entry, an experienced
389
+ engineer still learns something non-obvious.
390
+ - **Write it as an END-TO-END implementation guide, not a snippet showcase.** The post must
391
+ teach a developer how to BUILD and USE the technique, not just glimpse it. Walk the full path:
392
+ setup/prerequisites → the implementation built up step by step across MULTIPLE code blocks
393
+ that form a complete, runnable whole → how to invoke/use it → how to verify it (and the key
394
+ failure modes). A reader should be able to reproduce the feature from the post alone. Every
395
+ code block is real, correct, idiomatic, language-tagged, and copy-paste-reusable; show the
396
+ load-bearing pieces and how they wire together, but keep it lean (roughly 3-6 blocks for a
397
+ substantive feature) — don't block every helper, import, or obvious glue line, and cut any
398
+ block that isn't teaching something. The code need NOT be the user's exact source (a clean, general version
399
+ of the concept is fine), but never claim illustrative code is verbatim production source and
400
+ never put fabricated metrics/results in it. **Right-size honestly:** a genuinely small change
401
+ gets a proportionally shorter guide that still shows the full build-and-use path; never pad a
402
+ thin change to look bigger, and never shrink a real feature to a single teaser block.
403
+ - Only include the `## Changelog` links for commits on the published branch of a public repo
404
+ (per Step 5); omit the section if there are none.
305
405
 
306
406
  ## Step 7: Push to GitHub
307
407
 
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@natjswenson/devlog",
3
- "version": "0.3.1",
4
- "description": "Release dev log generator Claude Code skill + preview app for publishing version-release dev logs, written in your voice, to your site",
3
+ "version": "0.4.0",
4
+ "description": "Release dev log generator \u2014 Claude Code skill + preview app for publishing version-release dev logs, written in your voice, to your site",
5
5
  "license": "MIT",
6
6
  "author": "Nate Swenson",
7
7
  "homepage": "https://github.com/natejswenson/devlog",