@natjswenson/devlog 0.5.1 → 0.5.2

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.
@@ -7,12 +7,30 @@ import { join } from 'node:path';
7
7
  import { RE_PROJECT_KEY, RE_FINAL_RELEASE, atomicWriteJSON } from './core.mjs';
8
8
  import { parseFrontmatter } from './lint_post.mjs';
9
9
 
10
- // Newest-first by date; ties keep insertion order (Array.prototype.sort is
11
- // stable). Date order is normally also version order, but a backported tag
12
- // (v1.9.1 tagged after v2.0.0) can diverge sorting by date matches how the
13
- // feed renders.
10
+ // Newest-first by date; same-date ties break by version, highest first.
11
+ // Without the tiebreak, several releases cut on one day render oldest-on-top
12
+ // in the feed (stable sort keeps insertion order), burying the newest post
13
+ // under its predecessors. Date still wins overall because a backported tag
14
+ // (v1.9.1 tagged after v2.0.0) must sort by when it was released.
15
+ function versionNums(entry) {
16
+ const m = /^v(\d+(?:\.\d+)*)$/.exec(entry.version || '');
17
+ return m ? m[1].split('.').map(Number) : null;
18
+ }
19
+
20
+ function compareVersionsDesc(a, b) {
21
+ const va = versionNums(a);
22
+ const vb = versionNums(b);
23
+ if (!va || !vb) return 0; // legacy rows without a version keep their order
24
+ for (let i = 0; i < Math.max(va.length, vb.length); i++) {
25
+ const d = (vb[i] ?? 0) - (va[i] ?? 0);
26
+ if (d !== 0) return d;
27
+ }
28
+ return 0;
29
+ }
30
+
14
31
  function sortEntries(entries) {
15
- return entries.slice().sort((a, b) => String(b.date).localeCompare(String(a.date)));
32
+ return entries.slice().sort((a, b) =>
33
+ String(b.date).localeCompare(String(a.date)) || compareVersionsDesc(a, b));
16
34
  }
17
35
 
18
36
  export function publishEntry({ cloneDir, project, version, entryPath }) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@natjswenson/devlog",
3
- "version": "0.5.1",
3
+ "version": "0.5.2",
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",