@natjswenson/devlog 0.5.2 → 0.8.1

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/lib/scan.mjs CHANGED
@@ -74,6 +74,7 @@ export function scanProject(project, { branch = 'main', fetch = true, existingFi
74
74
  key: project.key,
75
75
  label: project.label || project.key,
76
76
  remote: project.remote,
77
+ private: !!project.private,
77
78
  path: project.path,
78
79
  pathFilter: project.pathFilter || null,
79
80
  tagPrefix: project.tagPrefix || 'v',
@@ -107,6 +108,11 @@ export function scanProject(project, { branch = 'main', fetch = true, existingFi
107
108
  const hasPublishedRef = git(project.path, ['rev-parse', '--verify', '--quiet', publishedRef]) !== null;
108
109
 
109
110
  const isPublic = (rev) => {
111
+ // A private project has no safe commit surface, full stop — this bypasses
112
+ // remoteMatches/hasPublishedRef entirely rather than relying on them to
113
+ // happen to be false, since a private repo can still have origin configured
114
+ // correctly (remoteMatches true) and a normally-pushed branch.
115
+ if (project.private) return false;
110
116
  if (!remoteMatches || !hasPublishedRef) return false;
111
117
  return spawnArgs('git', ['-C', project.path, 'merge-base', '--is-ancestor', rev, publishedRef]).status === 0;
112
118
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@natjswenson/devlog",
3
- "version": "0.5.2",
3
+ "version": "0.8.1",
4
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",
@@ -33,6 +33,7 @@
33
33
  "preview/",
34
34
  "examples/",
35
35
  "voice/",
36
+ "image-style/",
36
37
  "SKILL.md",
37
38
  "SECURITY.md",
38
39
  "CHANGELOG.md",
@@ -50,11 +51,13 @@
50
51
  "dependencies": {
51
52
  "@vitejs/plugin-react": "6.0.1",
52
53
  "kleur": "4.1.5",
54
+ "playwright": "1.61.1",
53
55
  "prompts": "2.4.2",
54
56
  "react": "18.3.1",
55
57
  "react-dom": "18.3.1",
56
58
  "react-markdown": "9.1.0",
57
59
  "remark-gfm": "4.0.1",
60
+ "sharp": "0.35.3",
58
61
  "vite": "8.0.16"
59
62
  }
60
63
  }
@@ -60,7 +60,32 @@
60
60
  "id": "no-push-retry",
61
61
  "pattern": "do not retry automatically",
62
62
  "rationale": "A failed push is surfaced to the user, not retried blind."
63
+ },
64
+ {
65
+ "id": "private-project-no-links",
66
+ "pattern": "no post ever[\\s\\S]{0,10}links a commit for it",
67
+ "rationale": "A private project's commits must never scan as public just because remoteMatches + branch-contains happen to hold — losing this line reopens the dead-link-to-a-private-repo path."
68
+ },
69
+ {
70
+ "id": "cover-composition-scope",
71
+ "pattern": "never the raw draft file, never[\\s\\S]{0,10}## Changelog",
72
+ "rationale": "Cover composition must draw only from title/tags/summary/## Shipped — never the raw draft or Changelog — losing this line reopens off-scope content leaking into an auto-composed image."
73
+ },
74
+ {
75
+ "id": "cover-never-blocks-publish",
76
+ "pattern": "[Nn]ever block[\\s\\S]{0,10}publish on a missing style guide",
77
+ "rationale": "A missing/uninstalled style guide must degrade gracefully (no cover this run), never abort the whole publish."
78
+ },
79
+ {
80
+ "id": "cover-review-gate",
81
+ "pattern": "this interactive review IS the quality gate for the cover",
82
+ "rationale": "The rendered cover must be shown to the user before push, the same way Step 4 gates the prose — losing this line reopens publishing an unreviewed cover."
83
+ },
84
+ {
85
+ "id": "cover-custom-illustration",
86
+ "pattern": "cover that just re-renders the title in large text is a failure",
87
+ "rationale": "First shipped version of this feature produced a shared text-heavy template with a rotating stock shape — rejected as bland/repetitive. Losing this line reopens that regression."
63
88
  }
64
89
  ],
65
- "cli_commands_referenced": ["scan", "lint-post", "publish-entry", "add-project", "remove-project", "set", "config", "init"]
90
+ "cli_commands_referenced": ["scan", "lint-post", "publish-entry", "add-project", "remove-project", "set", "config", "init", "cover-context", "render-cover"]
66
91
  }