@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.
- package/CHANGELOG.md +19 -0
- package/SKILL.md +123 -23
- 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
|
|
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
|
|
7
|
+
# /devlog — Release Blog-Post Generator
|
|
8
8
|
|
|
9
|
-
You are generating a
|
|
10
|
-
|
|
11
|
-
|
|
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:
|
|
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
|
-
|
|
272
|
-
|
|
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: "<
|
|
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
|
-
|
|
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
|
-
##
|
|
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
|
-
|
|
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
|
-
##
|
|
365
|
+
## Sources
|
|
291
366
|
|
|
292
|
-
<
|
|
367
|
+
- [<source title>](<url>) — <one phrase on what it supports>
|
|
368
|
+
- [<source title>](<url>) — <...>
|
|
293
369
|
|
|
294
|
-
##
|
|
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
|
-
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
-
|
|
304
|
-
|
|
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.
|
|
4
|
-
"description": "Release dev log generator
|
|
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",
|