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
@@ -22,3 +22,4 @@ export function getStyles(primaryColor) {
22
22
  `;
23
23
  return root + staticCss;
24
24
  }
25
+ //# sourceMappingURL=styles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"styles.js","sourceRoot":"","sources":["../../src/lib/styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEnD,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAE1D,MAAM,UAAU,SAAS,CAAC,YAAoB;IAC5C,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,EAAE,yBAAyB,CAAC,CAAC;IAC3D,MAAM,SAAS,GAAG,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAChD,sDAAsD;IACtD,MAAM,cAAc,GAAG,eAAe,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC;IAChF,MAAM,IAAI,GAAG;iBACE,cAAc;sBACT,cAAc;;;;;;;;;CASnC,CAAC;IACA,OAAO,IAAI,GAAG,SAAS,CAAC;AAC1B,CAAC"}
@@ -1,4 +1,4 @@
1
- import type { TimelineEntry, TimelineCommitItem, TimelineTagItem, EntryLink, GitCommit } from './template-types.js';
1
+ import type { TimelineEntry, TimelineCommitItem, TimelineTagItem, TimelineAdrItem, EntryLink, GitCommit } from './template-types.js';
2
2
  export declare const html: (strings: TemplateStringsArray, ...values: unknown[]) => string;
3
3
  export declare const navLink: (entry: EntryLink, dir: "prev" | "next") => string;
4
4
  export declare const renderTagsAndWorkspaces: (tags: string[] | undefined, workspaces: string[] | undefined) => string;
@@ -6,4 +6,9 @@ export declare const renderCommits: (commits: GitCommit[] | undefined, repositor
6
6
  export declare const renderTimelineEntryItem: (e: TimelineEntry) => string;
7
7
  export declare const renderTimelineCommitItem: (c: TimelineCommitItem, jiraBaseUrl?: string, jiraPrefix?: string, repositoryUrl?: string) => string;
8
8
  export declare const renderTimelineTagItem: (t: TimelineTagItem, repositoryUrl?: string) => string;
9
+ export declare function getAdrStatusInfo(status: string): {
10
+ badgeClass: string;
11
+ icon: string;
12
+ };
13
+ export declare const renderTimelineAdrItem: (item: TimelineAdrItem) => string;
9
14
  export declare const paginationLinks: (currentPage: number, totalPages: number) => string;
@@ -88,6 +88,69 @@ export const renderTimelineTagItem = (t, repositoryUrl) => {
88
88
  : `<span class="tag-chip-name">${name}</span>`;
89
89
  return `<div class="timeline-item timeline-item--tag"><div class="tag-chip"><span class="tag-chip-icon">🏷</span>${tagHtml}<span class="tag-chip-date" title="${t.timestamp}" ${ATTR_DATA_DATE}="${t.timestamp}">${formatted}</span></div></div>`;
90
90
  };
91
+ export function getAdrStatusInfo(status) {
92
+ let badgeClass = 'tag-badge';
93
+ let icon = '📋';
94
+ const norm = status.toLowerCase();
95
+ if (norm === 'accepted') {
96
+ badgeClass += ' tag-feature';
97
+ icon = '✅';
98
+ }
99
+ else if (norm === 'proposed') {
100
+ badgeClass += ' tag-refactor';
101
+ icon = '💡';
102
+ }
103
+ else if (norm === 'superseded') {
104
+ badgeClass += ' tag-superseded';
105
+ icon = '🔄';
106
+ }
107
+ else if (norm === 'rejected') {
108
+ badgeClass += ' tag-bugfix';
109
+ icon = '❌';
110
+ }
111
+ else {
112
+ badgeClass += ' tag-workspace';
113
+ }
114
+ return { badgeClass, icon };
115
+ }
116
+ export const renderTimelineAdrItem = (item) => {
117
+ const adrId = `ADR-${String(item.id).padStart(4, '0')}`;
118
+ const title = escapeHtml(item.title);
119
+ const status = escapeHtml(item.status.toLowerCase());
120
+ const author = escapeHtml(item.author);
121
+ const decisionHtml = item.decisionHtml || escapeHtml(item.decision);
122
+ const displayDate = escapeHtml(item.displayDate);
123
+ // Parse filename/slug for local static site linking
124
+ const stem = item.filepath.split('/').pop()?.replace(/\.md$/i, '') || '';
125
+ const adrUrl = `./adr/${stem}/index.html`;
126
+ const { badgeClass: statusBadgeClass, icon: statusIcon } = getAdrStatusInfo(status);
127
+ const tagsHtml = item.tags && item.tags.length > 0
128
+ ? item.tags.map((tag) => `<span class="tag-badge tag-workspace">${escapeHtml(tag)}</span>`).join('')
129
+ : '';
130
+ const headerMeta = html `<span ${ATTR_DATA_DATE}="${item.date}">${displayDate}</span> • Decision Record by ${author}`;
131
+ const cardContent = html `
132
+ <div class="item-content">
133
+ <div class="item-meta">${headerMeta}</div>
134
+ <h3 class="item-title">
135
+ <span class="${statusBadgeClass} adr-status-badge">${statusIcon} ${status}</span>
136
+ ${adrId}: ${title}
137
+ </h3>
138
+ <div class="item-summary">${decisionHtml}</div>
139
+ <div class="tags-wrapper">
140
+ <span class="tag-badge adr-indicator-badge">ADR</span>
141
+ ${tagsHtml}
142
+ </div>
143
+ </div>
144
+ `;
145
+ return html `
146
+ <div class="timeline-item">
147
+ <a class="timeline-card timeline-card--adr" href="${escapeHtml(adrUrl)}">
148
+ ${cardContent}
149
+ <span class="item-arrow">›</span>
150
+ </a>
151
+ </div>
152
+ `;
153
+ };
91
154
  export const paginationLinks = (currentPage, totalPages) => {
92
155
  let links = '';
93
156
  if (currentPage > 1) {
@@ -100,3 +163,4 @@ export const paginationLinks = (currentPage, totalPages) => {
100
163
  }
101
164
  return links ? `<nav class="pagination-nav">${links}</nav>` : '';
102
165
  };
166
+ //# sourceMappingURL=template-helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"template-helpers.js","sourceRoot":"","sources":["../../src/lib/template-helpers.ts"],"names":[],"mappings":"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"}
@@ -16,6 +16,7 @@ export interface TimelineTemplateProps {
16
16
  groups: TimelineGroup[];
17
17
  readmeHtml: string;
18
18
  aboutHtml: string;
19
+ welcomeHtml?: string;
19
20
  jiraBaseUrl?: string;
20
21
  jiraPrefix?: string;
21
22
  repositoryUrl?: string;
@@ -30,9 +31,28 @@ export interface TimelineGroup {
30
31
  items: TimelineItem[];
31
32
  }
32
33
  /**
33
- * A timeline item is either a logbook entry card, a git commit, or a git tag.
34
+ * A timeline item is either a logbook entry card, a git commit, a git tag, or an ADR.
34
35
  */
35
- export type TimelineItem = TimelineEntry | TimelineCommitItem | TimelineTagItem;
36
+ export type TimelineItem = TimelineEntry | TimelineCommitItem | TimelineTagItem | TimelineAdrItem;
37
+ /**
38
+ * An ADR decision record shown on the timeline.
39
+ */
40
+ export interface TimelineAdrItem {
41
+ kind: 'adr';
42
+ id: number;
43
+ filepath: string;
44
+ title: string;
45
+ status: string;
46
+ date: string;
47
+ displayDate: string;
48
+ author: string;
49
+ superseded_by?: number | null;
50
+ tags?: string[];
51
+ decision: string;
52
+ decisionHtml?: string;
53
+ monthGroup: string;
54
+ sortTime: string;
55
+ }
36
56
  /**
37
57
  * Configuration for a timeline entry
38
58
  */
@@ -1 +1,2 @@
1
1
  export {};
2
+ //# sourceMappingURL=template-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"template-types.js","sourceRoot":"","sources":["../../src/lib/template-types.ts"],"names":[],"mappings":""}
@@ -1,6 +1,9 @@
1
1
  import type { TabConfig, TimelineTemplateProps, PostTemplateProps } from './template-types.js';
2
- export declare const tabsComponent: (tabs: TabConfig[], defaultActive?: number) => string;
3
- export declare const layout: ({ title, header, content, projectName, basePath, description, bodySlug, buildMeta, includeRssLink, }: {
2
+ export declare const tabsComponent: (tabs: TabConfig[], defaultActive?: number) => {
3
+ tabsHtml: string;
4
+ sectionsHtml: string;
5
+ };
6
+ export declare const layout: ({ title, header, content, projectName, basePath, description, bodySlug, buildMeta, includeRssLink, prevUrl, nextUrl, }: {
4
7
  title: string;
5
8
  header: string;
6
9
  content: string;
@@ -10,6 +13,8 @@ export declare const layout: ({ title, header, content, projectName, basePath, d
10
13
  bodySlug?: string;
11
14
  buildMeta?: string;
12
15
  includeRssLink?: boolean;
16
+ prevUrl?: string;
17
+ nextUrl?: string;
13
18
  }) => string;
14
19
  export declare const timelineTemplate: (props: TimelineTemplateProps & {
15
20
  includeRssLink?: boolean;
@@ -1,6 +1,6 @@
1
1
  import { ATTR_PAGE_SLUG, ATTR_DATA_DATE } from './html-attributes.js';
2
2
  import { escapeHtml, validateUrlScheme } from './html-escape.js';
3
- import { html, navLink, renderTagsAndWorkspaces, renderCommits, renderTimelineEntryItem, renderTimelineCommitItem, renderTimelineTagItem, paginationLinks, } from './template-helpers.js';
3
+ import { html, navLink, renderTagsAndWorkspaces, renderCommits, renderTimelineEntryItem, renderTimelineCommitItem, renderTimelineTagItem, renderTimelineAdrItem, paginationLinks, } from './template-helpers.js';
4
4
  export const tabsComponent = (tabs, defaultActive = 0) => {
5
5
  const tabsHtml = tabs
6
6
  .map((tab, index) => `<div class="tab ${index === defaultActive ? 'active' : ''}" role="tab" aria-selected="${index === defaultActive}" aria-controls="${escapeHtml(tab.id)}" tabindex="${index === defaultActive ? '0' : '-1'}" onclick="showTab(event, '${escapeHtml(tab.id)}')">${escapeHtml(tab.title)}</div>`)
@@ -8,57 +8,74 @@ export const tabsComponent = (tabs, defaultActive = 0) => {
8
8
  const sectionsHtml = tabs
9
9
  .map((tab, index) => `<div id="${escapeHtml(tab.id)}" class="content-section" role="tabpanel" style="${index === defaultActive ? '' : 'display:none;'}">${tab.content}</div>`)
10
10
  .join('');
11
- return html `<div class="tabs-wrapper">
12
- <div class="tabs" id="tabs" role="tablist" aria-label="Navigation tabs">${tabsHtml}</div>
13
- ${sectionsHtml}
14
- </div>`;
11
+ return { tabsHtml, sectionsHtml };
15
12
  };
16
- export const layout = ({ title, header, content, projectName, basePath = './', description, bodySlug, buildMeta, includeRssLink = false, }) => html `<!DOCTYPE html>
13
+ export const layout = ({ title, header, content, projectName, basePath = './', description, bodySlug, buildMeta, includeRssLink = false, prevUrl, nextUrl, }) => {
14
+ const metaDescription = description ||
15
+ `A chronological timeline of recent development changes, narrative updates, and commits for ${projectName}.`;
16
+ return html `<!DOCTYPE html>
17
17
  <html lang="en">
18
18
  <head>
19
19
  <meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0">
20
20
  <title>${escapeHtml(title)} | ${escapeHtml(projectName)}</title>
21
- ${description ? `<meta name="description" content="${escapeHtml(description).replace(/"/g, '&quot;').substring(0, 160)}">` : ''}
21
+ <meta name="description" content="${escapeHtml(metaDescription).replace(/"/g, '&quot;').substring(0, 160)}">
22
22
  ${includeRssLink ? `<link rel="alternate" type="application/rss+xml" title="Subscribe to Project RSS Feed" href="${basePath}rss.xml">` : ''}
23
+ ${prevUrl ? `<link rel="prev" href="${escapeHtml(prevUrl)}">` : ''}
24
+ ${nextUrl ? `<link rel="next" href="${escapeHtml(nextUrl)}">` : ''}
23
25
  <link rel="icon" type="image/svg+xml" href="${basePath}favicon.svg">
24
26
  <link rel="stylesheet" href="${basePath}style.css">
25
27
  </head>
26
- <body${bodySlug ? ` ${ATTR_PAGE_SLUG}="${bodySlug}"` : ''}>
28
+ <body${bodySlug ? ` ${ATTR_PAGE_SLUG}="${bodySlug}"` : ''} class="tabs-wrapper">
27
29
  ${header}<main>${content}</main>
28
30
  <footer>
29
31
  ${buildMeta ? `<p class="build-time">${buildMeta}${includeRssLink ? ` • <a href="${basePath}rss.xml">RSS Feed</a>` : ''}</p>` : ''}
30
32
  </footer>
31
33
  <script src="${basePath}logbook.js"></script>
32
34
  </body></html>`;
35
+ };
33
36
  export const timelineTemplate = (props) => {
34
- const { projectName, groups, readmeHtml, aboutHtml, jiraBaseUrl, jiraPrefix, repositoryUrl, currentPage, totalPages, } = props;
35
- const timelineTab = html `<div class="timeline">
36
- ${groups
37
+ const { projectName, groups, readmeHtml, aboutHtml, welcomeHtml, jiraBaseUrl, jiraPrefix, repositoryUrl, currentPage, totalPages, } = props;
38
+ const welcomeBannerHtml = welcomeHtml
39
+ ? `<div id="welcome-banner" class="welcome-banner" style="display:none;">
40
+ <button id="welcome-banner-close" class="welcome-banner-close" aria-label="Dismiss welcome banner">&times;</button>
41
+ <div class="welcome-banner-content">${welcomeHtml}</div>
42
+ </div>`
43
+ : '';
44
+ const timelineTab = html `${welcomeBannerHtml}
45
+ <div class="timeline">
46
+ ${groups
37
47
  .map((g) => html `<section class="month-group">
38
- <h2>${g.month}</h2>
39
- ${g.items
48
+ <h2>${g.month}</h2>
49
+ ${g.items
40
50
  .map((item) => {
41
51
  if (item.kind === 'entry')
42
52
  return renderTimelineEntryItem(item);
43
53
  if (item.kind === 'tag')
44
54
  return renderTimelineTagItem(item, repositoryUrl);
55
+ if (item.kind === 'adr')
56
+ return renderTimelineAdrItem(item);
45
57
  return renderTimelineCommitItem(item, jiraBaseUrl, jiraPrefix, repositoryUrl);
46
58
  })
47
59
  .join('')}
48
- </section>`)
60
+ </section>`)
49
61
  .join('')}
50
- ${paginationLinks(currentPage, totalPages)}
51
- </div>`;
52
- const header = html `<header>
53
- <h1><a href="./index.html">${escapeHtml(projectName)}</a></h1>
54
- <p class="tagline">A brief summary of the recent changes to the project.</p>
55
- </header>`;
56
- const content = tabsComponent([
62
+ ${paginationLinks(currentPage, totalPages)}
63
+ </div>`;
64
+ const { tabsHtml, sectionsHtml } = tabsComponent([
57
65
  { id: 'timeline', title: 'Timeline', content: timelineTab },
58
66
  { id: 'readme', title: 'Project Readme', content: readmeHtml || '<p>No README available.</p>' },
59
67
  { id: 'about', title: 'About this Logbook', content: aboutHtml || '<p>No information available.</p>' },
60
68
  ], 0);
61
- return { header, content };
69
+ const header = html `<header>
70
+ <div class="header-inner">
71
+ <h1><a href="./index.html">${escapeHtml(projectName)}</a></h1>
72
+ <p class="tagline">A brief summary of the recent changes to the project.</p>
73
+ <div class="header-nav header-nav--center">
74
+ <div class="tabs" id="tabs" role="tablist" aria-label="Navigation tabs">${tabsHtml}</div>
75
+ </div>
76
+ </div>
77
+ </header>`;
78
+ return { header, content: sectionsHtml };
62
79
  };
63
80
  export const postTemplate = (props) => {
64
81
  const { title, displayDate, dateStart, harness, llm, prompter, content, ticketHtml, logHtml, commits, version, jiraUrl, repositoryUrl, prevEntry, nextEntry, tags, workspaces } = props; // prettier-ignore
@@ -69,23 +86,25 @@ export const postTemplate = (props) => {
69
86
  : '';
70
87
  const tabBtn = (id, label, active = false) => `<div class="tab${active ? ' active' : ''}" role="tab" aria-selected="${active}" aria-controls="${escapeHtml(id)}" tabindex="${active ? '0' : '-1'}" onclick="showTab(event, '${escapeHtml(id)}')">${escapeHtml(label)}</div>`;
71
88
  const header = html `<header>
72
- <h1>${escapeHtml(title)}</h1>
73
- <div class="tagline">
74
- <span ${ATTR_DATA_DATE}="${dateStart}">${displayDate}</span>
75
- ${llm ? `${escapeHtml(llm)} via ` : ''}${escapeHtml(harness)}${prompter ? ` / ${escapeHtml(prompter)}` : ''}
76
- v${version}
77
- </div>
78
- </header>`;
79
- const mainContent = html `<article class="tabs-wrapper">
80
- <div class="action-bar">
81
- <a href="../index.html" class="back-link">← Back to Timeline</a>
82
- <div class="action-tabs-wrapper">
89
+ <div class="header-inner">
90
+ <h1>${escapeHtml(title)}</h1>
91
+ <div class="tagline">
92
+ <span ${ATTR_DATA_DATE}="${dateStart}">${displayDate}</span>
93
+ ${llm ? `${escapeHtml(llm)} via ` : ''}${escapeHtml(harness)}${prompter ? ` / ${escapeHtml(prompter)}` : ''} •
94
+ v${version}
95
+ </div>
96
+ <div class="header-nav">
97
+ <div class="header-nav-left">
98
+ <a href="../index.html" class="back-link">← Back to Timeline</a>
99
+ </div>
83
100
  <div class="tabs" role="tablist" aria-label="Entry sections">
84
101
  ${tabBtn('story', 'Story', true)}${tabBtn('spec', 'Original Spec')}${tabBtn('log', 'Technical Log')}
85
102
  </div>
103
+ <div class="header-nav-right">${jiraBtn ? `${jiraBtn}` : '<span></span>'}</div>
86
104
  </div>
87
- ${jiraBtn ? `${jiraBtn}` : ''}
88
105
  </div>
106
+ </header>`;
107
+ const mainContent = html `<article>
89
108
  <div class="content-sections">
90
109
  <div id="story" class="content-section" role="tabpanel">
91
110
  ${renderTagsAndWorkspaces(tags, workspaces)}${content}
@@ -102,3 +121,4 @@ export const postTemplate = (props) => {
102
121
  </article>`;
103
122
  return { header, content: mainContent };
104
123
  };
124
+ //# sourceMappingURL=templates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"templates.js","sourceRoot":"","sources":["../../src/lib/templates.ts"],"names":[],"mappings":"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"}
package/dist/lib/theme.js CHANGED
@@ -48,3 +48,4 @@ export function warningMessage(prefix, message) {
48
48
  export function successMessage(prefix, message) {
49
49
  return `${success(prefix)}: ${message}`;
50
50
  }
51
+ //# sourceMappingURL=theme.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theme.js","sourceRoot":"","sources":["../../src/lib/theme.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,sCAAsC;AACtC,MAAM,CAAC,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC;AAEnC,kCAAkC;AAClC,MAAM,CAAC,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC;AAE/B,uCAAuC;AACvC,MAAM,CAAC,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC;AAEpC,4CAA4C;AAC5C,MAAM,CAAC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;AAE/B,sCAAsC;AACtC,MAAM,CAAC,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC;AAElC,wCAAwC;AACxC,MAAM,CAAC,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC;AAEpC,gBAAgB;AAChB,MAAM,CAAC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;AAE/B;;;GAGG;AACH,MAAM,UAAU,MAAM,CAAC,IAAY;IACjC,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC;AACpB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,MAAc,EAAE,OAAe;IAC1D,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,OAAO,EAAE,CAAC;AACxC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,MAAc,EAAE,OAAe;IAC5D,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,OAAO,EAAE,CAAC;AAC1C,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,MAAc,EAAE,OAAe;IAC5D,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,OAAO,EAAE,CAAC;AAC1C,CAAC"}
@@ -25,3 +25,4 @@ export function isExternalUrl(url) {
25
25
  export function isExternalUrlOrAnchor(href) {
26
26
  return EXTERNAL_URL_SCHEME_REGEX.test(href) || href.startsWith('#');
27
27
  }
28
+ //# sourceMappingURL=url-helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"url-helpers.js","sourceRoot":"","sources":["../../src/lib/url-helpers.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,MAAM,yBAAyB,GAAG,sBAAsB,CAAC;AAEzD;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,GAAW;IACvC,OAAO,yBAAyB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC7C,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAAY;IAChD,OAAO,yBAAyB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;AACtE,CAAC"}
@@ -1,5 +1,6 @@
1
1
  import { Linter } from '../lib/lint-types.js';
2
- export declare function stripFrontmatter(content: string): string;
2
+ import { stripFrontmatter } from '../utils/frontmatter.js';
3
+ export { stripFrontmatter };
3
4
  export declare function stripMarkdown(text: string): string;
4
5
  export declare function getWordCount(content: string): number;
5
6
  declare const linter: Linter;
@@ -2,22 +2,14 @@ import { getActiveEntry } from '../lib/session.js';
2
2
  import { getChangedLOC } from '../lib/git-helpers.js';
3
3
  import fs from 'fs-extra';
4
4
  import { join } from 'node:path';
5
+ import { stripFrontmatter } from '../utils/frontmatter.js';
6
+ export { stripFrontmatter };
5
7
  // Thresholds & Limits Configuration
6
8
  const TRIVIAL_LOC_MAX = 20;
7
9
  const STANDARD_LOC_MAX = 150;
8
10
  const TRIVIAL_WORDS = { min: 30, max: 150 };
9
11
  const STANDARD_WORDS = { min: 50, max: 300 };
10
12
  const LARGE_WORDS = { min: 100, max: 400 };
11
- export function stripFrontmatter(content) {
12
- const lines = content.split(/\r?\n/);
13
- if (lines[0]?.trim() === '---') {
14
- const endIdx = lines.indexOf('---', 1);
15
- if (endIdx !== -1) {
16
- return lines.slice(endIdx + 1).join('\n');
17
- }
18
- }
19
- return content;
20
- }
21
13
  export function stripMarkdown(text) {
22
14
  return text
23
15
  .replace(/<[^>]*>/g, '') // HTML tags
@@ -112,3 +104,4 @@ const linter = {
112
104
  },
113
105
  };
114
106
  export default linter;
107
+ //# sourceMappingURL=diff-to-narrative.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diff-to-narrative.js","sourceRoot":"","sources":["../../src/linters/diff-to-narrative.ts"],"names":[],"mappings":"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"}
@@ -86,3 +86,4 @@ const linter = {
86
86
  },
87
87
  };
88
88
  export default linter;
89
+ //# sourceMappingURL=frontmatter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frontmatter.js","sourceRoot":"","sources":["../../src/linters/frontmatter.ts"],"names":[],"mappings":"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"}
@@ -20,3 +20,4 @@ export const linters = [
20
20
  technicalLog,
21
21
  workspaces,
22
22
  ];
23
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/linters/index.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,MAAM,wBAAwB,CAAC;AACrD,OAAO,WAAW,MAAM,kBAAkB,CAAC;AAC3C,OAAO,UAAU,MAAM,kBAAkB,CAAC;AAC1C,OAAO,KAAK,MAAM,YAAY,CAAC;AAC/B,OAAO,QAAQ,MAAM,eAAe,CAAC;AACrC,OAAO,YAAY,MAAM,mBAAmB,CAAC;AAC7C,OAAO,gBAAgB,MAAM,wBAAwB,CAAC;AACtD,OAAO,WAAW,MAAM,kBAAkB,CAAC;AAC3C,OAAO,YAAY,MAAM,oBAAoB,CAAC;AAC9C,OAAO,UAAU,MAAM,iBAAiB,CAAC;AAEzC,MAAM,CAAC,MAAM,OAAO,GAAG;IACrB,eAAe;IACf,WAAW;IACX,UAAU;IACV,KAAK;IACL,QAAQ;IACR,YAAY;IACZ,gBAAgB;IAChB,WAAW;IACX,YAAY;IACZ,UAAU;CACX,CAAC"}
@@ -32,3 +32,4 @@ const linter = {
32
32
  },
33
33
  };
34
34
  export default linter;
35
+ //# sourceMappingURL=jira-prefix.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jira-prefix.js","sourceRoot":"","sources":["../../src/linters/jira-prefix.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,GAAW;IACrB,IAAI,EAAE,aAAa;IACnB,WAAW,EAAE,gEAAgE;IAC7E,KAAK,CAAC,KAAK,CAAC,OAAsB;QAChC,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU;YAAE,OAAO,EAAE,CAAC;QAExF,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;QACnD,MAAM,MAAM,GAAgB,EAAE,CAAC;QAC/B,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;QACrC,IAAI,CAAC,UAAU;YAAE,OAAO,EAAE,CAAC;QAE3B,MAAM,iBAAiB,GAAG,IAAI,MAAM,CAAC,IAAI,UAAU,QAAQ,EAAE,GAAG,CAAC,CAAC;QAClE,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;YACvC,MAAM,CAAC,IAAI,CAAC;gBACV,KAAK,EAAE,OAAO;gBACd,QAAQ,EAAE,aAAa;gBACvB,OAAO,EAAE,iBAAiB,SAAS,uCAAuC,UAAU,uBAAuB,UAAU,cAAc;aACpI,CAAC,CAAC;QACL,CAAC;QAED,MAAM,WAAW,GAAG,WAAW,CAAC,MAAM,CAAC;QACvC,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE,CAAC;YACpC,MAAM,YAAY,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAC/C,IAAI,YAAY,CAAC,WAAW,EAAE,KAAK,UAAU,CAAC,WAAW,EAAE,EAAE,CAAC;gBAC5D,MAAM,CAAC,IAAI,CAAC;oBACV,KAAK,EAAE,OAAO;oBACd,QAAQ,EAAE,aAAa;oBACvB,OAAO,EAAE,UAAU,SAAS,iBAAiB,WAAW,CAAC,MAAM,4CAA4C,UAAU,IAAI;iBAC1H,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;CACF,CAAC;AAEF,eAAe,MAAM,CAAC"}
@@ -1,5 +1,19 @@
1
1
  import fs from 'fs-extra';
2
2
  import { join } from 'node:path';
3
+ import { unified } from 'unified';
4
+ import remarkParse from 'remark-parse';
5
+ function collectLinks(node) {
6
+ const links = [];
7
+ if ((node.type === 'link' || node.type === 'image') && node.url) {
8
+ links.push(node.url);
9
+ }
10
+ if (node.children) {
11
+ for (const child of node.children) {
12
+ links.push(...collectLinks(child));
13
+ }
14
+ }
15
+ return links;
16
+ }
3
17
  const linter = {
4
18
  name: 'links',
5
19
  description: 'Validates relative links within entries',
@@ -7,10 +21,17 @@ const linter = {
7
21
  if (!context.entryName || !context.content || !context.entryPath)
8
22
  return [];
9
23
  const issues = [];
10
- const linkRegex = /\[.*?\]\((.*?)\)/g;
11
- let match;
12
- while ((match = linkRegex.exec(context.content)) !== null) {
13
- const link = match[1];
24
+ let links = [];
25
+ try {
26
+ const processor = unified().use(remarkParse);
27
+ // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
28
+ const ast = processor.parse(context.content);
29
+ links = collectLinks(ast);
30
+ }
31
+ catch {
32
+ return [];
33
+ }
34
+ for (const link of links) {
14
35
  if (link.startsWith('http') || link.startsWith('#'))
15
36
  continue;
16
37
  const linkedPath = join(context.entryPath, link);
@@ -26,3 +47,4 @@ const linter = {
26
47
  },
27
48
  };
28
49
  export default linter;
50
+ //# sourceMappingURL=links.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"links.js","sourceRoot":"","sources":["../../src/linters/links.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,WAAW,MAAM,cAAc,CAAC;AAQvC,SAAS,YAAY,CAAC,IAAe;IACnC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;QAChE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACvB,CAAC;IACD,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClC,KAAK,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,MAAM,GAAW;IACrB,IAAI,EAAE,OAAO;IACb,WAAW,EAAE,yCAAyC;IACtD,KAAK,CAAC,KAAK,CAAC,OAAsB;QAChC,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS;YAAE,OAAO,EAAE,CAAC;QAE5E,MAAM,MAAM,GAAgB,EAAE,CAAC;QAE/B,IAAI,KAAK,GAAa,EAAE,CAAC;QACzB,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,OAAO,EAAE,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;YAC7C,yEAAyE;YACzE,MAAM,GAAG,GAAG,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAc,CAAC;YAC1D,KAAK,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;QAC5B,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;gBAAE,SAAS;YAE9D,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;YACjD,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC;gBACvC,MAAM,CAAC,IAAI,CAAC;oBACV,KAAK,EAAE,OAAO;oBACd,QAAQ,EAAE,MAAM;oBAChB,OAAO,EAAE,mBAAmB,IAAI,EAAE;iBACnC,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;CACF,CAAC;AAEF,eAAe,MAAM,CAAC"}
@@ -18,3 +18,4 @@ const linter = {
18
18
  },
19
19
  };
20
20
  export default linter;
21
+ //# sourceMappingURL=lockfile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lockfile.js","sourceRoot":"","sources":["../../src/linters/lockfile.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,MAAM,MAAM,GAAW;IACrB,IAAI,EAAE,UAAU;IAChB,WAAW,EAAE,2CAA2C;IACxD,KAAK,CAAC,KAAK,CAAC,OAAsB;QAChC,IAAI,OAAO,CAAC,SAAS;YAAE,OAAO,EAAE,CAAC;QAEjC,MAAM,MAAM,GAAgB,EAAE,CAAC;QAC/B,MAAM,MAAM,GAAG,MAAM,cAAc,EAAE,CAAC;QAEtC,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;YAC3C,MAAM,CAAC,IAAI,CAAC;gBACV,KAAK,EAAE,SAAS;gBAChB,QAAQ,EAAE,QAAQ;gBAClB,OAAO,EAAE,UAAU,MAAM,CAAC,IAAI,yGAAyG;aACxI,CAAC,CAAC;QACL,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;CACF,CAAC;AAEF,eAAe,MAAM,CAAC"}
@@ -1,5 +1,6 @@
1
1
  import fs from 'fs-extra';
2
2
  import { join } from 'node:path';
3
+ import { getRawFrontmatterBlock } from '../utils/frontmatter.js';
3
4
  const linter = {
4
5
  name: 'placeholders',
5
6
  description: 'Checks for unremoved template placeholders',
@@ -14,8 +15,7 @@ const linter = {
14
15
  if (context.indexPath && (await fs.pathExists(context.indexPath))) {
15
16
  rawFile = await fs.readFile(context.indexPath, 'utf8');
16
17
  }
17
- const frontmatterMatch = rawFile.match(/^---\n[\s\S]*?\n---/);
18
- const frontmatterBlock = frontmatterMatch ? frontmatterMatch[0] : rawFile;
18
+ const frontmatterBlock = getRawFrontmatterBlock(rawFile);
19
19
  const frontmatterPlaceholders = [
20
20
  '[PROMPTER]',
21
21
  '[HARNESS]',
@@ -35,8 +35,9 @@ const linter = {
35
35
  });
36
36
  }
37
37
  }
38
- // Check boilerplate body text against the full content (body only is fine here) for all entries.
39
- if (context.content.includes('TODO: ')) {
38
+ // Check boilerplate body text against the full content (strip fenced and inline code blocks to avoid false positives)
39
+ const bodyContentWithoutCode = context.content.replace(/```[\s\S]*?```/g, '').replace(/`[^`]*`/g, '');
40
+ if (bodyContentWithoutCode.includes('TODO: ')) {
40
41
  issues.push({
41
42
  level: 'error',
42
43
  category: 'placeholder',
@@ -58,3 +59,4 @@ const linter = {
58
59
  },
59
60
  };
60
61
  export default linter;
62
+ //# sourceMappingURL=placeholders.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"placeholders.js","sourceRoot":"","sources":["../../src/linters/placeholders.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AAEjE,MAAM,MAAM,GAAW;IACrB,IAAI,EAAE,cAAc;IACpB,WAAW,EAAE,4CAA4C;IACzD,KAAK,CAAC,KAAK,CAAC,OAAsB;QAChC,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS;YAAE,OAAO,EAAE,CAAC;QAE5E,MAAM,MAAM,GAAgB,EAAE,CAAC;QAE/B,mFAAmF;QACnF,4FAA4F;QAC5F,iFAAiF;QACjF,IAAI,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;QAC9B,IAAI,OAAO,CAAC,SAAS,IAAI,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC;YAClE,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QACzD,CAAC;QAED,MAAM,gBAAgB,GAAG,sBAAsB,CAAC,OAAO,CAAC,CAAC;QAEzD,MAAM,uBAAuB,GAAG;YAC9B,YAAY;YACZ,WAAW;YACX,OAAO;YACP,sBAAsB;YACtB,cAAc;YACd,uEAAuE;YACvE,0EAA0E;YAC1E,2EAA2E;SAC5E,CAAC;QAEF,KAAK,MAAM,WAAW,IAAI,uBAAuB,EAAE,CAAC;YAClD,IAAI,gBAAgB,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;gBAC3C,MAAM,CAAC,IAAI,CAAC;oBACV,KAAK,EAAE,OAAO;oBACd,QAAQ,EAAE,aAAa;oBACvB,OAAO,EAAE,sCAAsC,WAAW,EAAE;iBAC7D,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,sHAAsH;QACtH,MAAM,sBAAsB,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;QACtG,IAAI,sBAAsB,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC9C,MAAM,CAAC,IAAI,CAAC;gBACV,KAAK,EAAE,OAAO;gBACd,QAAQ,EAAE,aAAa;gBACvB,OAAO,EACL,4IAA4I;aAC/I,CAAC,CAAC;QACL,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;QACxD,IAAI,MAAM,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YACpC,MAAM,aAAa,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;YAC5D,IAAI,aAAa,CAAC,QAAQ,CAAC,4CAA4C,CAAC,EAAE,CAAC;gBACzE,MAAM,CAAC,IAAI,CAAC;oBACV,KAAK,EAAE,OAAO;oBACd,QAAQ,EAAE,aAAa;oBACvB,OAAO,EAAE,gFAAgF;iBAC1F,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;CACF,CAAC;AAEF,eAAe,MAAM,CAAC"}
@@ -27,3 +27,4 @@ const linter = {
27
27
  },
28
28
  };
29
29
  export default linter;
30
+ //# sourceMappingURL=project-integrity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-integrity.js","sourceRoot":"","sources":["../../src/linters/project-integrity.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,GAAW;IACrB,IAAI,EAAE,mBAAmB;IACzB,WAAW,EAAE,iDAAiD;IAC9D,KAAK,CAAC,KAAK,CAAC,OAAsB;QAChC,IAAI,OAAO,CAAC,SAAS;YAAE,OAAO,EAAE,CAAC;QAEjC,MAAM,MAAM,GAAgB,EAAE,CAAC;QAC/B,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC;QAClE,MAAM,aAAa,GAAG,MAAM,gBAAgB,EAAE,CAAC;QAE/C,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;YACjC,IAAI,IAAI,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;gBAC/B,MAAM,CAAC,IAAI,CAAC;oBACV,KAAK,EAAE,SAAS;oBAChB,QAAQ,EAAE,UAAU;oBACpB,OAAO,EAAE,GAAG,IAAI,CAAC,IAAI,wEAAwE;iBAC9F,CAAC,CAAC;YACL,CAAC;iBAAM,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBACrC,MAAM,CAAC,IAAI,CAAC;oBACV,KAAK,EAAE,OAAO;oBACd,QAAQ,EAAE,SAAS;oBACnB,OAAO,EAAE,GAAG,IAAI,CAAC,IAAI,kDAAkD;iBACxE,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;CACF,CAAC;AAEF,eAAe,MAAM,CAAC"}
@@ -5,9 +5,7 @@ const linter = {
5
5
  if (!context.entryName || !context.content)
6
6
  return [];
7
7
  const issues = [];
8
- const contentParts = context.content.split('---');
9
- // Content is after the second '---' if frontmatter exists
10
- const contentWithoutFrontmatter = (contentParts.length >= 3 ? contentParts.slice(2).join('---') : context.content).trim();
8
+ const contentWithoutFrontmatter = context.content.trim();
11
9
  if (contentWithoutFrontmatter.length === 0)
12
10
  return [];
13
11
  // 1. Heading Check
@@ -39,3 +37,4 @@ const linter = {
39
37
  },
40
38
  };
41
39
  export default linter;
40
+ //# sourceMappingURL=readability.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"readability.js","sourceRoot":"","sources":["../../src/linters/readability.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,GAAW;IACrB,IAAI,EAAE,aAAa;IACnB,WAAW,EAAE,oDAAoD;IACjE,KAAK,CAAC,KAAK,CAAC,OAAsB;QAChC,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,CAAC,OAAO,CAAC,OAAO;YAAE,OAAO,EAAE,CAAC;QAEtD,MAAM,MAAM,GAAgB,EAAE,CAAC;QAC/B,MAAM,yBAAyB,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QAEzD,IAAI,yBAAyB,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QAEtD,mBAAmB;QACnB,MAAM,OAAO,GAAG,yBAAyB,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAC/D,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnC,MAAM,CAAC,IAAI,CAAC;gBACV,KAAK,EAAE,SAAS;gBAChB,QAAQ,EAAE,aAAa;gBACvB,OAAO,EAAE,qEAAqE;aAC/E,CAAC,CAAC;QACL,CAAC;QAED,kBAAkB;QAClB,MAAM,KAAK,GAAG,yBAAyB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC;QACxF,IAAI,KAAK,GAAG,EAAE,EAAE,CAAC;YACf,MAAM,CAAC,IAAI,CAAC;gBACV,KAAK,EAAE,SAAS;gBAChB,QAAQ,EAAE,aAAa;gBACvB,OAAO,EAAE,8BAA8B,KAAK,gDAAgD;aAC7F,CAAC,CAAC;QACL,CAAC;aAAM,IAAI,KAAK,GAAG,IAAI,EAAE,CAAC;YACxB,MAAM,CAAC,IAAI,CAAC;gBACV,KAAK,EAAE,SAAS;gBAChB,QAAQ,EAAE,aAAa;gBACvB,OAAO,EAAE,4BAA4B,KAAK,uCAAuC;aAClF,CAAC,CAAC;QACL,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;CACF,CAAC;AAEF,eAAe,MAAM,CAAC"}
@@ -70,3 +70,4 @@ const technicalLog = {
70
70
  },
71
71
  };
72
72
  export default technicalLog;
73
+ //# sourceMappingURL=technical-log.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"technical-log.js","sourceRoot":"","sources":["../../src/linters/technical-log.ts"],"names":[],"mappings":"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"}
@@ -24,3 +24,4 @@ const linter = {
24
24
  },
25
25
  };
26
26
  export default linter;
27
+ //# sourceMappingURL=workspaces.js.map