project-logbook 0.4.0 → 1.0.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 (150) hide show
  1. package/README.md +36 -1
  2. package/dist/commands/build.js +34 -76
  3. package/dist/commands/build.js.map +1 -0
  4. package/dist/commands/init.js +1 -0
  5. package/dist/commands/init.js.map +1 -0
  6. package/dist/commands/lint.js +7 -2
  7. package/dist/commands/lint.js.map +1 -0
  8. package/dist/commands/list.js +4 -16
  9. package/dist/commands/list.js.map +1 -0
  10. package/dist/commands/log.d.ts +1 -3
  11. package/dist/commands/log.js +4 -3
  12. package/dist/commands/log.js.map +1 -0
  13. package/dist/commands/new.js +1 -0
  14. package/dist/commands/new.js.map +1 -0
  15. package/dist/commands/preview.js +1 -0
  16. package/dist/commands/preview.js.map +1 -0
  17. package/dist/commands/release.js +1 -0
  18. package/dist/commands/release.js.map +1 -0
  19. package/dist/commands/start.d.ts +1 -1
  20. package/dist/commands/start.js +53 -12
  21. package/dist/commands/start.js.map +1 -0
  22. package/dist/commands/status.js +7 -18
  23. package/dist/commands/status.js.map +1 -0
  24. package/dist/commands/steer.js +1 -0
  25. package/dist/commands/steer.js.map +1 -0
  26. package/dist/commands/upgrade.js +1 -0
  27. package/dist/commands/upgrade.js.map +1 -0
  28. package/dist/index.js +3 -3
  29. package/dist/index.js.map +1 -0
  30. package/dist/lib/about-content.js +1 -0
  31. package/dist/lib/about-content.js.map +1 -0
  32. package/dist/lib/adr-renderer.d.ts +12 -0
  33. package/dist/lib/adr-renderer.js +53 -0
  34. package/dist/lib/adr-renderer.js.map +1 -0
  35. package/dist/lib/build-helpers.js +8 -3
  36. package/dist/lib/build-helpers.js.map +1 -0
  37. package/dist/lib/build-steps.d.ts +20 -2
  38. package/dist/lib/build-steps.js +107 -13
  39. package/dist/lib/build-steps.js.map +1 -0
  40. package/dist/lib/config.d.ts +8 -0
  41. package/dist/lib/config.js +19 -1
  42. package/dist/lib/config.js.map +1 -0
  43. package/dist/lib/entry-id.js +1 -0
  44. package/dist/lib/entry-id.js.map +1 -0
  45. package/dist/lib/entry-paths.js +1 -0
  46. package/dist/lib/entry-paths.js.map +1 -0
  47. package/dist/lib/git-helpers.d.ts +5 -16
  48. package/dist/lib/git-helpers.js +52 -78
  49. package/dist/lib/git-helpers.js.map +1 -0
  50. package/dist/lib/git-url-helpers.d.ts +16 -0
  51. package/dist/lib/git-url-helpers.js +76 -0
  52. package/dist/lib/git-url-helpers.js.map +1 -0
  53. package/dist/lib/hast-helpers.js +1 -0
  54. package/dist/lib/hast-helpers.js.map +1 -0
  55. package/dist/lib/html-attributes.js +1 -0
  56. package/dist/lib/html-attributes.js.map +1 -0
  57. package/dist/lib/html-escape.js +1 -0
  58. package/dist/lib/html-escape.js.map +1 -0
  59. package/dist/lib/image-helpers.js +20 -30
  60. package/dist/lib/image-helpers.js.map +1 -0
  61. package/dist/lib/jira-helpers.js +1 -0
  62. package/dist/lib/jira-helpers.js.map +1 -0
  63. package/dist/lib/lint-runner.js +1 -0
  64. package/dist/lib/lint-runner.js.map +1 -0
  65. package/dist/lib/lint-types.js +1 -0
  66. package/dist/lib/lint-types.js.map +1 -0
  67. package/dist/lib/lockfile.js +1 -0
  68. package/dist/lib/lockfile.js.map +1 -0
  69. package/dist/lib/logbook-client.js +1 -0
  70. package/dist/lib/logbook-client.js.map +1 -0
  71. package/dist/lib/markdown-processors.js +1 -0
  72. package/dist/lib/markdown-processors.js.map +1 -0
  73. package/dist/lib/migrations.js +1 -0
  74. package/dist/lib/migrations.js.map +1 -0
  75. package/dist/lib/package-version.js +1 -0
  76. package/dist/lib/package-version.js.map +1 -0
  77. package/dist/lib/rss.js +1 -0
  78. package/dist/lib/rss.js.map +1 -0
  79. package/dist/lib/session.js +47 -35
  80. package/dist/lib/session.js.map +1 -0
  81. package/dist/lib/styles.js +1 -0
  82. package/dist/lib/styles.js.map +1 -0
  83. package/dist/lib/template-helpers.d.ts +6 -1
  84. package/dist/lib/template-helpers.js +64 -0
  85. package/dist/lib/template-helpers.js.map +1 -0
  86. package/dist/lib/template-types.d.ts +22 -2
  87. package/dist/lib/template-types.js +1 -0
  88. package/dist/lib/template-types.js.map +1 -0
  89. package/dist/lib/templates.d.ts +7 -2
  90. package/dist/lib/templates.js +54 -34
  91. package/dist/lib/templates.js.map +1 -0
  92. package/dist/lib/theme.js +1 -0
  93. package/dist/lib/theme.js.map +1 -0
  94. package/dist/lib/url-helpers.js +1 -0
  95. package/dist/lib/url-helpers.js.map +1 -0
  96. package/dist/linters/diff-to-narrative.d.ts +2 -1
  97. package/dist/linters/diff-to-narrative.js +3 -10
  98. package/dist/linters/diff-to-narrative.js.map +1 -0
  99. package/dist/linters/frontmatter.js +1 -0
  100. package/dist/linters/frontmatter.js.map +1 -0
  101. package/dist/linters/index.js +1 -0
  102. package/dist/linters/index.js.map +1 -0
  103. package/dist/linters/jira-prefix.js +1 -0
  104. package/dist/linters/jira-prefix.js.map +1 -0
  105. package/dist/linters/links.js +26 -4
  106. package/dist/linters/links.js.map +1 -0
  107. package/dist/linters/lockfile.js +1 -0
  108. package/dist/linters/lockfile.js.map +1 -0
  109. package/dist/linters/placeholders.js +6 -4
  110. package/dist/linters/placeholders.js.map +1 -0
  111. package/dist/linters/project-integrity.js +1 -0
  112. package/dist/linters/project-integrity.js.map +1 -0
  113. package/dist/linters/readability.js +2 -3
  114. package/dist/linters/readability.js.map +1 -0
  115. package/dist/linters/technical-log.js +1 -0
  116. package/dist/linters/technical-log.js.map +1 -0
  117. package/dist/linters/workspaces.js +1 -0
  118. package/dist/linters/workspaces.js.map +1 -0
  119. package/dist/templates/WELCOME.md +12 -0
  120. package/dist/templates/index.md +2 -1
  121. package/dist/templates/logbook-client.js +29 -0
  122. package/dist/templates/styles.css +205 -32
  123. package/dist/utils/date.js +1 -0
  124. package/dist/utils/date.js.map +1 -0
  125. package/dist/utils/frontmatter.d.ts +9 -0
  126. package/dist/utils/frontmatter.js +16 -0
  127. package/dist/utils/frontmatter.js.map +1 -0
  128. package/dist/utils/fs.d.ts +10 -0
  129. package/dist/utils/fs.js +112 -0
  130. package/dist/utils/fs.js.map +1 -0
  131. package/dist/utils/id.js +1 -0
  132. package/dist/utils/id.js.map +1 -0
  133. package/dist/utils/log-timeline.d.ts +2 -1
  134. package/dist/utils/log-timeline.js +1 -0
  135. package/dist/utils/log-timeline.js.map +1 -0
  136. package/dist/utils/slug.js +1 -0
  137. package/dist/utils/slug.js.map +1 -0
  138. package/dist/utils/string.js +1 -0
  139. package/dist/utils/string.js.map +1 -0
  140. package/dist/utils/timeline-helpers.d.ts +2 -2
  141. package/dist/utils/timeline-helpers.js +5 -2
  142. package/dist/utils/timeline-helpers.js.map +1 -0
  143. package/dist/utils/validation.d.ts +5 -0
  144. package/dist/utils/validation.js +21 -0
  145. package/dist/utils/validation.js.map +1 -0
  146. package/package.json +10 -4
  147. package/src/templates/WELCOME.md +12 -0
  148. package/src/templates/index.md +2 -1
  149. package/src/templates/logbook-client.js +29 -0
  150. package/src/templates/styles.css +205 -32
package/README.md CHANGED
@@ -6,7 +6,7 @@
6
6
 
7
7
  ![Screenshot of generated website](/static/screenshot.jpg "Generated website")
8
8
 
9
- See [CONTRIBUTING.md](CONTRIBUTING.md) for the mandatory working protocol.
9
+ See [CONTRIBUTING.md](CONTRIBUTING.md) for the mandatory working protocol. (Or read this [unauthorized, cynical review](review-article-project-logbook.md) — also available in [German](review-article-project-logbook-de.md) — about how this project got dragged and saved.)
10
10
 
11
11
 
12
12
  ## The Three-File Standard
@@ -20,6 +20,8 @@ Each entry in `logbook/` consists of:
20
20
  npm i project-logbook -g
21
21
  ```
22
22
 
23
+ You can run the CLI using either `logbook` or the shortcut alias `lb`. For example, `lb status` works as a drop-in replacement for `logbook status`.
24
+
23
25
  ## Commands
24
26
 
25
27
  | Command | Description |
@@ -30,8 +32,41 @@ npm i project-logbook -g
30
32
  | `logbook release` | Release the active logbook entry (removes `.logbook-active` lockfile). |
31
33
  | `logbook log <message>` | Append a timestamped log entry to the active `log.md`. |
32
34
  | `logbook list` | List all logbook entries with their status. |
35
+ | `logbook status` | Show current active logbook task, configuration settings, and statistics. |
33
36
  | `logbook lint` | Validate structure, frontmatter, and internal links. |
34
37
  | `logbook build` | Compile logbook entries into a static HTML site (default: `public/`). |
35
38
  | `logbook preview` | Build and open the logbook in your default browser. |
36
39
  | `logbook upgrade` | Synchronize core project files (like `CONTRIBUTING.md`) with latest templates. |
37
40
  | `logbook steer` | Output agentic protocol for AI assistants. |
41
+
42
+
43
+ ## Configuration
44
+
45
+ Running `logbook init` creates a `.project-logbook` configuration file in your project root. You can customize the following properties:
46
+
47
+ | Key | Type | Default | Description |
48
+ |---|---|---|---|
49
+ | `projectName` | `string` | `"My Project"` | Title shown on the generated static website. |
50
+ | `logbookDir` | `string` | `"logbook"` | The directory where logbook entries are located. |
51
+ | `outputDir` | `string` | `"dist/logbook"` | The output directory where the compiled website is built. |
52
+ | `adrDir` | `string` | `"docs/adr"` | The directory where Architecture Decision Records (ADRs) are located. Set to `null` or omit to disable ADR integration. |
53
+ | `primaryColor` | `string` | `"#2563eb"` | The theme's accent color (CSS variable `--primary`). Must be a hex code. |
54
+ | `jiraBaseUrl` | `string` | `undefined` | Optional base URL of your Jira workspace (e.g. `https://myorg.atlassian.net/browse/`). Enables clickable Jira link buttons. |
55
+ | `jiraPrefix` | `string` | `undefined` | Optional Jira project prefix (e.g. `PROJ`) used to validate IDs and auto-link issues. |
56
+ | `repositoryUrl` | `string` | *Auto-detected* | Optional base web URL of your Git repository (e.g. `https://github.com/org/repo`). Automatically falls back to parsing your git remote URL if not specified. |
57
+ | `tags` | `object` | See below | Optional configuration for categorization tags. |
58
+
59
+ ### Tags Configuration Example
60
+
61
+ ```json
62
+ {
63
+ "projectName": "My API Gateway",
64
+ "primaryColor": "#0f766e",
65
+ "jiraBaseUrl": "https://mycompany.atlassian.net/browse/",
66
+ "jiraPrefix": "GW",
67
+ "tags": {
68
+ "allowed": ["#bugfix", "#feature", "#refactor", "#security", "#performance"]
69
+ }
70
+ }
71
+ ```
72
+
@@ -1,19 +1,18 @@
1
1
  import fs from 'fs-extra';
2
2
  import { join } from 'node:path';
3
3
  import { error, neutral, success } from '../lib/theme.js';
4
- import { getConfig, getWorkspaces, getLogbookDirPath, getOutputDirPath } from '../lib/config.js';
4
+ import { getConfig, getWorkspaces, getLogbookDirPath, getOutputDirPath, getAdrDirPath } from '../lib/config.js';
5
+ import { getActiveEntry } from '../lib/session.js';
5
6
  import { layout, timelineTemplate } from '../lib/templates.js';
6
- import { buildProjectMdFiles, renderPost, generateBuildMeta } from '../lib/build-helpers.js';
7
+ import { buildProjectMdFiles, renderPost, generateBuildMeta, mdToHtml } from '../lib/build-helpers.js';
7
8
  import { getGitCommits, getGitTags } from '../lib/git-helpers.js';
8
- import { setupOutputDirectory, processReadme, copyReadmeImages, processAboutContent } from '../lib/build-steps.js';
9
+ import { setupOutputDirectory, processReadme, copyReadmeImages, processAboutContent, processWelcomeContent, buildRssFeed, processTimelineEntries, } from '../lib/build-steps.js';
10
+ import { renderAdr } from '../lib/adr-renderer.js';
9
11
  import { formatAbsoluteDate, getMonthYear, getSortTime, formatDateTimeForDisplay } from '../utils/date.js';
10
- import { getLogbookEntries } from '../utils/fs.js';
11
- import { toDisplayString, asString, asStringArray } from '../utils/frontmatter.js';
12
+ import { getLogbookEntries, getAdrEntries } from '../utils/fs.js';
12
13
  import { getAboutContent } from '../lib/about-content.js';
13
14
  import { getPackageVersion } from '../lib/package-version.js';
14
15
  import { groupTimelineItems } from '../utils/timeline-helpers.js';
15
- import { getEntryDisplayId, getEntryDisplayTitle } from '../lib/entry-id.js';
16
- import { generateRssFeed, validateRssXml } from '../lib/rss.js';
17
16
  const version = getPackageVersion();
18
17
  export async function build() {
19
18
  const config = getConfig();
@@ -22,63 +21,26 @@ export async function build() {
22
21
  const buildTime = formatDateTimeForDisplay(new Date());
23
22
  if (!(await fs.pathExists(logbookDir))) {
24
23
  console.error(error(`Error: Logbook directory '${config.logbookDir}' not found.`));
25
- return;
24
+ process.exit(1);
26
25
  }
27
26
  await setupOutputDirectory(outputDir, config);
28
27
  const projectRoot = process.cwd();
29
28
  const { html: readmeHtml, imagePaths: readmeImages } = await processReadme(projectRoot);
30
29
  await copyReadmeImages(projectRoot, outputDir, readmeImages);
31
30
  const aboutHtml = await processAboutContent(getAboutContent());
31
+ const welcomeHtml = await processWelcomeContent();
32
32
  const logbookEntries = await getLogbookEntries(logbookDir);
33
- const timelineEntries = [];
33
+ const activeEntry = await getActiveEntry();
34
34
  const availableWorkspaces = getWorkspaces();
35
- for (const entry of logbookEntries) {
36
- if (!entry.hasIndex)
37
- continue;
38
- const { data, content, slug } = entry;
39
- let summary = data.summary;
40
- if (!summary) {
41
- const firstParagraph = content.split('\n\n').find((p) => p.trim() && !p.trim().startsWith('#'));
42
- summary = firstParagraph
43
- ? firstParagraph.trim().substring(0, 200).replace(/[*#`]/g, '') + '...'
44
- : 'No summary available.';
45
- }
46
- const entryWorkspaces = asStringArray(data.workspaces).filter((ws) => availableWorkspaces.includes(ws));
47
- const dateStartValue = data.dateStart;
48
- const dateStart = typeof dateStartValue === 'string'
49
- ? dateStartValue
50
- : dateStartValue instanceof Date
51
- ? dateStartValue.toISOString()
52
- : '';
53
- // Skip DRAFT entries (no valid dateStart) — they break the timeline
54
- if (!dateStart || dateStart.includes('{{') || dateStart === '[DATE_START]')
55
- continue;
56
- const dateEndValue = data.dateEnd;
57
- const dateEnd = typeof dateEndValue === 'string' && dateEndValue !== '[DATE_END]'
58
- ? dateEndValue
59
- : dateEndValue instanceof Date
60
- ? dateEndValue.toISOString()
61
- : undefined;
62
- timelineEntries.push({
63
- kind: 'entry',
64
- slug,
65
- dateStart,
66
- dateEnd,
67
- displayDate: formatAbsoluteDate(dateStart),
68
- sortTime: getSortTime(dateStart, dateEnd),
69
- summary: asString(summary, 'No summary available.') || '',
70
- ticket: getEntryDisplayId(asString(data.ticket), slug),
71
- monthGroup: getMonthYear(dateStart),
72
- tags: asStringArray(data.tags),
73
- workspaces: entryWorkspaces,
74
- title: getEntryDisplayTitle(asString(data.title), slug),
75
- harness: toDisplayString(data.harness),
76
- llm: toDisplayString(data.llm),
77
- prompter: toDisplayString(data.prompter),
78
- });
79
- }
80
- // Fetch global git commits and tags concurrently.
81
- const [globalCommits, rawTags] = await Promise.all([getGitCommits(process.cwd()), getGitTags()]);
35
+ const timelineEntries = processTimelineEntries(logbookEntries, activeEntry, availableWorkspaces);
36
+ // Fetch global git commits, tags, and ADRs concurrently.
37
+ const adrDir = getAdrDirPath(config);
38
+ const relativeAdrDir = config.adrDir || 'docs/adr';
39
+ const [globalCommits, rawTags, adrItems] = await Promise.all([
40
+ getGitCommits(process.cwd()),
41
+ getGitTags(),
42
+ adrDir ? getAdrEntries(adrDir, relativeAdrDir) : Promise.resolve([]),
43
+ ]);
82
44
  const commitItems = globalCommits.map((c) => ({
83
45
  kind: 'commit',
84
46
  sha: c.sha,
@@ -96,15 +58,20 @@ export async function build() {
96
58
  monthGroup: getMonthYear(t.timestamp),
97
59
  sortTime: getSortTime(t.timestamp),
98
60
  }));
99
- console.log(neutral(`Found ${timelineEntries.length} entr${timelineEntries.length === 1 ? 'y' : 'ies'}, ${commitItems.length} commit${commitItems.length === 1 ? '' : 's'} (max 100), and ${tagItems.length} tag${tagItems.length === 1 ? '' : 's'}.`));
61
+ console.log(neutral(`Found ${timelineEntries.length} entr${timelineEntries.length === 1 ? 'y' : 'ies'}, ${commitItems.length} commit${commitItems.length === 1 ? '' : 's'} (max 100), ${tagItems.length} tag${tagItems.length === 1 ? '' : 's'}, and ${adrItems.length} ADR${adrItems.length === 1 ? '' : 's'}.`));
100
62
  timelineEntries.sort((a, b) => {
101
63
  const aEnd = a.dateEnd ? new Date(a.dateEnd).getTime() : new Date(a.dateStart).getTime();
102
64
  const bEnd = b.dateEnd ? new Date(b.dateEnd).getTime() : new Date(b.dateStart).getTime();
103
65
  return bEnd - aEnd;
104
66
  });
105
- await Promise.all(timelineEntries.map((entry, i) => renderPost(entry, i, timelineEntries, { logbookDir, outputDir, config, version, buildTime })));
106
- // Build the full merged, chronologically sorted groups once, then paginate the flat item list.
107
- const allGroups = groupTimelineItems(timelineEntries, commitItems, tagItems);
67
+ await Promise.all([
68
+ ...timelineEntries.map((entry, i) => renderPost(entry, i, timelineEntries, { logbookDir, outputDir, config, version, buildTime })),
69
+ ...adrItems.map(async (adr) => {
70
+ adr.decisionHtml = await mdToHtml(adr.decision);
71
+ await renderAdr(adr, { adrDir: adrDir, outputDir, config, version, buildTime });
72
+ }),
73
+ ]);
74
+ const allGroups = groupTimelineItems(timelineEntries, commitItems, tagItems, adrItems);
108
75
  const flatItems = allGroups.flatMap((g) => g.items);
109
76
  const pageSize = 50;
110
77
  const totalPages = Math.max(1, Math.ceil(flatItems.length / pageSize));
@@ -129,6 +96,7 @@ export async function build() {
129
96
  groups: pageGroups,
130
97
  readmeHtml,
131
98
  aboutHtml,
99
+ welcomeHtml,
132
100
  jiraBaseUrl: config.jiraBaseUrl,
133
101
  jiraPrefix: config.jiraPrefix,
134
102
  repositoryUrl: config.repositoryUrl,
@@ -137,6 +105,8 @@ export async function build() {
137
105
  includeRssLink: currentPage === 1, // Only show RSS link on first page
138
106
  }); // prettier-ignore
139
107
  const buildMeta = generateBuildMeta(version, buildTime);
108
+ const prevPageUrl = currentPage > 1 ? (currentPage === 2 ? './index.html' : `./index-${currentPage - 1}.html`) : undefined;
109
+ const nextPageUrl = currentPage < totalPages ? `./index-${currentPage + 1}.html` : undefined;
140
110
  const timelineHtml = layout({
141
111
  title: 'Timeline',
142
112
  projectName: config.projectName,
@@ -145,6 +115,8 @@ export async function build() {
145
115
  header: timelineHeader,
146
116
  content: timelineMainContent,
147
117
  includeRssLink: currentPage === 1, // Only show RSS link on first page
118
+ prevUrl: prevPageUrl,
119
+ nextUrl: nextPageUrl,
148
120
  });
149
121
  const fileName = currentPage === 1 ? 'index.html' : `index-${currentPage}.html`;
150
122
  await fs.writeFile(join(outputDir, fileName), timelineHtml);
@@ -155,21 +127,7 @@ export async function build() {
155
127
  buildTime,
156
128
  });
157
129
  // Generate RSS feed
158
- const rssConfig = {
159
- title: `${config.projectName} - Recent Updates`,
160
- description: `Latest logbook entries from ${config.projectName}`,
161
- language: 'en',
162
- feed_url: `${config.projectName.toLowerCase().replace(/\s+/g, '-')}/rss.xml`,
163
- site_url: config.projectName,
164
- generator: `Project Logbook CLI v${version}`,
165
- };
166
- const rssXml = generateRssFeed(timelineEntries, rssConfig);
167
- // Basic validation
168
- if (!validateRssXml(rssXml)) {
169
- console.error(error('Error: Generated RSS feed failed basic validation.'));
170
- return;
171
- }
172
- await fs.writeFile(join(outputDir, 'rss.xml'), rssXml);
173
- console.log(neutral(` Generated RSS feed with ${Math.min(50, timelineEntries.length)} entries`));
130
+ await buildRssFeed(outputDir, timelineEntries, config, version);
174
131
  console.log(success(`\nSuccessfully built logbook to ${config.outputDir}/`));
175
132
  }
133
+ //# sourceMappingURL=build.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/commands/build.ts"],"names":[],"mappings":"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"}
@@ -81,3 +81,4 @@ export async function init() {
81
81
  console.log(info('\n💡 Tip: Edit .project-logbook to customize primaryColor, add more tags, or configure Jira settings.'));
82
82
  console.log(info(' Run `logbook new` to create your first entry.\n'));
83
83
  }
84
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import fs from 'fs-extra';
2
2
  import { join } from 'node:path';
3
- import { error as errorStyle, header, success as successStyle, neutral as neutralStyle } from '../lib/theme.js';
3
+ import { error as errorStyle, header, success as successStyle, neutral as neutralStyle, warning as warningStyle, } from '../lib/theme.js';
4
4
  import { getConfig, getLogbookDirPath } from '../lib/config.js';
5
5
  import { runLinters } from '../lib/lint-runner.js';
6
6
  import { getLogbookEntries } from '../utils/fs.js';
@@ -11,7 +11,7 @@ export async function lint() {
11
11
  const logbookDir = getLogbookDirPath(config);
12
12
  if (!(await fs.pathExists(logbookDir))) {
13
13
  console.error(errorStyle(`Error: Logbook directory '${config.logbookDir}' not found.`));
14
- return;
14
+ process.exit(1);
15
15
  }
16
16
  let overallSuccess = true;
17
17
  // Show last log entry nudge if an entry is active
@@ -46,6 +46,10 @@ export async function lint() {
46
46
  }
47
47
  if (isDraft(entry)) {
48
48
  skippedCount++;
49
+ if (active && active.slug === entry.slug) {
50
+ console.log(warningStyle(`\n [SKIPPED] Active entry '${entry.slug}' is a draft (missing valid dateStart).`));
51
+ console.log(warningStyle(` → Run 'logbook start ${entry.slug.split('-')[0]}' to activate it, which sets dateStart and enables linting.\n`));
52
+ }
49
53
  continue;
50
54
  }
51
55
  const entrySuccess = await runLinters({
@@ -85,3 +89,4 @@ function isDraft(entry) {
85
89
  // 2. OR the string representation of 'dateStart' is '[DATE_START]'.
86
90
  return !frontmatter?.dateStart || String(frontmatter.dateStart) === '[DATE_START]';
87
91
  }
92
+ //# sourceMappingURL=lint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lint.js","sourceRoot":"","sources":["../../src/commands/lint.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  import fs from 'fs-extra';
2
2
  import { getConfig, getLogbookDirPath } from '../lib/config.js';
3
3
  import { getLogbookEntries } from '../utils/fs.js';
4
+ import { hasUnfilledPlaceholders } from '../utils/validation.js';
4
5
  import { stripAnsi } from '../utils/string.js';
5
6
  import { parseTicketId } from '../utils/id.js';
6
7
  import { getActiveEntry } from '../lib/session.js';
@@ -41,23 +42,9 @@ export async function list(options = {}) {
41
42
  });
42
43
  continue;
43
44
  }
44
- const { data, content } = entry;
45
+ const { data } = entry;
45
46
  const isActive = activeSlug === entry.slug;
46
- // Check frontmatter field values for bracket-style unfilled placeholders
47
- const dataValues = Object.values(data)
48
- .filter((v) => typeof v === 'string')
49
- .join('\n');
50
- const frontmatterHasPlaceholders = dataValues.includes('[DATE_END]') ||
51
- dataValues.includes('[DATE_START]') ||
52
- dataValues.includes('[WRITE_SUMMARY_HERE]') ||
53
- dataValues.includes('[PROMPTER]') ||
54
- dataValues.includes('[HARNESS]') ||
55
- dataValues.includes('[LLM]');
56
- // Check body content for unfilled template hints (strip inline code spans to avoid false positives)
57
- const contentWithoutCode = content.replace(/`[^`]*`/g, '');
58
- const bodyHasPlaceholders = contentWithoutCode.includes('TODO:') ||
59
- content.includes('Write a polished, highly readable "short story" of the change here.');
60
- const hasPlaceholders = frontmatterHasPlaceholders || bodyHasPlaceholders;
47
+ const hasPlaceholders = hasUnfilledPlaceholders(entry);
61
48
  const status = isActive ? highlight('● ACTIVE') : hasPlaceholders ? warning('DRAFT') : success('DONE');
62
49
  rows.push({
63
50
  ticketId: asString(data.ticket) || neutral('-'),
@@ -125,3 +112,4 @@ export async function list(options = {}) {
125
112
  : `Showing latest ${displayedRows.length} of ${totalEntries} entries (use --all to show all)`;
126
113
  console.log(neutral(`${countText} in ${config.logbookDir}/`));
127
114
  }
115
+ //# sourceMappingURL=list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1 @@
1
- export declare function log(messages: string[], options?: {
2
- id?: string;
3
- }): Promise<void>;
1
+ export declare function log(messages: string[]): Promise<void>;
@@ -3,13 +3,13 @@ import { join } from 'node:path';
3
3
  import { error as errorStyle, successMessage } from '../lib/theme.js';
4
4
  import { getConfig } from '../lib/config.js';
5
5
  import { getActiveEntry } from '../lib/session.js';
6
- export async function log(messages, options = {}) {
6
+ export async function log(messages) {
7
7
  const cwd = process.cwd();
8
8
  // 1. Require an active entry
9
- const active = await getActiveEntry(options, cwd);
9
+ const active = await getActiveEntry({}, cwd);
10
10
  if (!active) {
11
11
  console.error(errorStyle(`Error: No active logbook entry resolved.`));
12
- console.error(errorStyle(`Activate an entry via 'logbook start <id>', checkout a feature branch, or pass --id.`));
12
+ console.error(errorStyle(`Activate an entry via 'logbook start <id>' or checkout a feature branch.`));
13
13
  process.exit(1);
14
14
  }
15
15
  const config = getConfig();
@@ -29,3 +29,4 @@ export async function log(messages, options = {}) {
29
29
  console.log(successMessage('Logged', `${active.slug} (via ${active.source}): ${timestamp}: ${msg}`));
30
30
  }
31
31
  }
32
+ //# sourceMappingURL=log.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"log.js","sourceRoot":"","sources":["../../src/commands/log.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,KAAK,IAAI,UAAU,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACtE,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,MAAM,CAAC,KAAK,UAAU,GAAG,CAAC,QAAkB;IAC1C,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAE1B,6BAA6B;IAC7B,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;IAC7C,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,0CAA0C,CAAC,CAAC,CAAC;QACtE,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,0EAA0E,CAAC,CAAC,CAAC;QACtG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAEpE,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;QACpC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,yBAAyB,CAAC,CAAC,CAAC;QACrD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,qDAAqD;IACrD,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC3C,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,SAAS,KAAK,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAE5E,sBAAsB;IACtB,MAAM,QAAQ,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IACpD,MAAM,SAAS,GAAG,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IACtD,MAAM,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,IAAI,CAAC,CAAC;IAEpE,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC3B,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,QAAQ,EAAE,GAAG,MAAM,CAAC,IAAI,SAAS,MAAM,CAAC,MAAM,MAAM,SAAS,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC;IACvG,CAAC;AACH,CAAC"}
@@ -132,3 +132,4 @@ export async function createNewEntry(id, slug) {
132
132
  await fs.writeFile(join(entryDir, 'log.md'), fillTemplate(getTemplate('log.md')));
133
133
  console.log(successMessage('Created', `logbook entry in ${config.logbookDir}/${entryId}-${entrySlug}/`));
134
134
  }
135
+ //# sourceMappingURL=new.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"new.js","sourceRoot":"","sources":["../../src/commands/new.ts"],"names":[],"mappings":"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"}
@@ -18,3 +18,4 @@ export async function preview() {
18
18
  }
19
19
  });
20
20
  }
21
+ //# sourceMappingURL=preview.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preview.js","sourceRoot":"","sources":["../../src/commands/preview.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,MAAM,EAAE,KAAK,IAAI,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAC/D,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC,MAAM,CAAC,KAAK,UAAU,OAAO;IAC3B,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,MAAM,SAAS,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAC3C,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;IAEhD,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,oCAAoC,CAAC,CAAC,CAAC;IAC1D,MAAM,KAAK,EAAE,CAAC;IAEd,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,oBAAoB,SAAS,EAAE,CAAC,CAAC,CAAC;IAErD,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC;IAE3G,qEAAqE;IACrE,QAAQ,CAAC,KAAK,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE;QACnC,IAAI,GAAG,EAAE,CAAC;YACR,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,2BAA2B,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QACtE,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -64,3 +64,4 @@ function formatElapsed(from, to) {
64
64
  return `${m}m ${s}s`;
65
65
  return `${s}s`;
66
66
  }
67
+ //# sourceMappingURL=release.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"release.js","sourceRoot":"","sources":["../../src/commands/release.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- export declare function start(id: string): Promise<void>;
1
+ export declare function start(id: string, cwd?: string): Promise<void>;
@@ -6,6 +6,7 @@ import matter from 'gray-matter';
6
6
  import { getConfig, getLogbookDirPath } from '../lib/config.js';
7
7
  import { getActiveEntry } from '../lib/session.js';
8
8
  import { getEntryPath } from '../lib/entry-paths.js';
9
+ import { getLogbookEntries } from '../utils/fs.js';
9
10
  import { LOCKFILE_NAME } from '../lib/lockfile.js';
10
11
  function getGitUsername() {
11
12
  try {
@@ -17,8 +18,7 @@ function getGitUsername() {
17
18
  return undefined;
18
19
  }
19
20
  }
20
- export async function start(id) {
21
- const cwd = process.cwd();
21
+ export async function start(id, cwd = process.cwd()) {
22
22
  const lockfilePath = join(cwd, LOCKFILE_NAME);
23
23
  // 1. Enforce single active entry
24
24
  if (await fs.pathExists(lockfilePath)) {
@@ -27,22 +27,62 @@ export async function start(id) {
27
27
  console.error(errorStyle(`Run 'logbook release' before starting a new entry.`));
28
28
  process.exit(1);
29
29
  }
30
- // 2. Resolve folder by ID prefix (e.g. "LB-5" → "LB-5-jira-support")
30
+ // 2. Resolve folder by ID prefix or exact match
31
31
  const config = getConfig();
32
- // If a bare number is given (e.g. "19"), auto-prepend the configured jiraPrefix
33
- const resolvedId = /^\d+$/.test(id) && config.jiraPrefix ? `${config.jiraPrefix}-${id}` : id;
32
+ // If a bare or suffixed number is given (e.g. "20-fix"), auto-prepend the configured jiraPrefix
33
+ const resolvedId = /^\d+(?:-.*)?$/.test(id) && config.jiraPrefix ? `${config.jiraPrefix}-${id}` : id;
34
34
  const logbookDir = getLogbookDirPath(config, cwd);
35
35
  const allDirs = await fs.readdir(logbookDir);
36
- const matchingDir = allDirs.find((d) => {
37
- const prefix = d.split('-').slice(0, resolvedId.split('-').length).join('-');
38
- return prefix.toLowerCase() === resolvedId.toLowerCase();
39
- });
40
- if (!matchingDir) {
36
+ let slug;
37
+ // 2a. Direct folder name match bypasses all other logic
38
+ const exactSlugMatch = allDirs.find((d) => d.toLowerCase() === id.toLowerCase());
39
+ if (exactSlugMatch) {
40
+ slug = exactSlugMatch;
41
+ }
42
+ else {
43
+ // 2b. Query all logbook entries for frontmatter and folder structure
44
+ const logbookEntries = await getLogbookEntries(logbookDir);
45
+ // First Pass: Exact Ticket ID Match in Frontmatter
46
+ const exactTicketMatches = logbookEntries.filter((e) => {
47
+ const ticket = typeof e.data?.ticket === 'string' ? e.data.ticket.trim().toLowerCase() : '';
48
+ return ticket === resolvedId.toLowerCase();
49
+ });
50
+ if (exactTicketMatches.length === 1) {
51
+ slug = exactTicketMatches[0].slug;
52
+ }
53
+ else if (exactTicketMatches.length > 1) {
54
+ console.error(errorStyle(`Error: Multiple entries found with the exact same ticket ID '${resolvedId}'.`));
55
+ console.error(errorStyle(`Please specify the unique folder name/slug directly instead:`));
56
+ for (const match of exactTicketMatches) {
57
+ console.error(errorStyle(` logbook start ${match.slug}`));
58
+ }
59
+ process.exit(1);
60
+ }
61
+ else {
62
+ // Second Pass: Fallback Prefix Match on Folder Names
63
+ const prefixMatches = logbookEntries.filter((e) => {
64
+ const prefix = e.slug.split('-').slice(0, resolvedId.split('-').length).join('-');
65
+ return prefix.toLowerCase() === resolvedId.toLowerCase();
66
+ });
67
+ if (prefixMatches.length === 1) {
68
+ slug = prefixMatches[0].slug;
69
+ }
70
+ else if (prefixMatches.length > 1) {
71
+ console.error(errorStyle(`Error: Multiple entries found matching prefix '${resolvedId}'.`));
72
+ console.error(errorStyle(`Please be more specific. Run one of:`));
73
+ for (const match of prefixMatches) {
74
+ const ticketId = typeof match.data?.ticket === 'string' ? match.data.ticket : match.slug;
75
+ console.error(errorStyle(` logbook start ${ticketId}`));
76
+ }
77
+ process.exit(1);
78
+ }
79
+ }
80
+ }
81
+ if (!slug) {
41
82
  console.error(errorStyle(`Error: No entry found matching ID '${resolvedId}' in ${config.logbookDir}/.`));
42
83
  console.error(errorStyle(`Run 'logbook new <id> <slug>' to create it first.`));
43
84
  process.exit(1);
44
85
  }
45
- const slug = matchingDir;
46
86
  const entryDir = getEntryPath(logbookDir, slug);
47
87
  // Warn if branch-resolved entry is different
48
88
  const activeFromBranch = await getActiveEntry({}, cwd);
@@ -75,7 +115,7 @@ export async function start(id) {
75
115
  raw = raw.replace('prompter: "[PROMPTER]"', `prompter: '${prompter.replace(/'/g, "''")}'`);
76
116
  }
77
117
  else if (!parsed.data.prompter) {
78
- raw = raw.replace(/^(---\n[\s\S]*?)(^---$)/m, (_, frontmatter, closing) => {
118
+ raw = raw.replace(/^(---\r?\n[\s\S]*?)(^---\r?$)/m, (_, frontmatter, closing) => {
79
119
  if (frontmatter.includes('prompter:'))
80
120
  return _;
81
121
  return `${frontmatter}prompter: '${prompter.replace(/'/g, "''")}'\n${closing}`;
@@ -90,3 +130,4 @@ export async function start(id) {
90
130
  }
91
131
  console.log(neutral(`Lockfile written to ${LOCKFILE_NAME}. Run 'logbook release' when done.`));
92
132
  }
133
+ //# sourceMappingURL=start.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"start.js","sourceRoot":"","sources":["../../src/commands/start.ts"],"names":[],"mappings":"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"}