roadmapsmith 0.9.5 → 0.9.6

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/README.md CHANGED
@@ -22,6 +22,29 @@ npx skills add PapiScholz/roadmapsmith --skill roadmap-sync
22
22
 
23
23
  This adds the `roadmap-sync` agent skill. It does not install the CLI package.
24
24
 
25
+ ## Updating
26
+
27
+ Update the CLI based on how it was installed:
28
+
29
+ ```bash
30
+ # Global npm install
31
+ npm install -g roadmapsmith@latest
32
+
33
+ # Project dependency
34
+ npm install roadmapsmith@latest
35
+
36
+ # One-off execution without installing
37
+ npx roadmapsmith@latest sync --audit
38
+ ```
39
+
40
+ The `roadmap-sync` agent skill is separate from the CLI. Re-running the skills install updates the agent instructions, but it does not update the `roadmapsmith` npm binary:
41
+
42
+ ```bash
43
+ npx skills add PapiScholz/roadmapsmith --skill roadmap-sync
44
+ ```
45
+
46
+ Fixes are available through `@latest` only after a new npm package version has been published. Before publication, install from a local checkout or a packed tarball for testing.
47
+
25
48
  ## Operating Modes
26
49
 
27
50
  ### Zero Mode
package/bin/cli.js CHANGED
@@ -44,6 +44,14 @@ function maybeFilterTasks(tasks, filterValue) {
44
44
  });
45
45
  }
46
46
 
47
+ function tasksInManagedBlock(parsedRoadmap) {
48
+ if (!parsedRoadmap.managedRange) {
49
+ return parsedRoadmap.tasks;
50
+ }
51
+ const { start, end } = parsedRoadmap.managedRange;
52
+ return parsedRoadmap.tasks.filter((task) => task.lineIndex > start && task.lineIndex < end);
53
+ }
54
+
47
55
  function printAudit(audit) {
48
56
  console.log(`Audit summary: ${audit.checkedWithoutEvidence.length} checked-without-evidence, ${audit.readyButUnchecked.length} ready-but-unchecked.`);
49
57
  if (audit.checkedWithoutEvidence.length > 0) {
@@ -157,10 +165,11 @@ async function run() {
157
165
  }
158
166
 
159
167
  const parsedRoadmap = parseRoadmap(content);
168
+ const syncTasks = tasksInManagedBlock(parsedRoadmap);
160
169
  const validationContext = buildValidationContext(projectRoot, config, loadPlugins(projectRoot, config.plugins));
161
- const results = validateTasks(parsedRoadmap.tasks, validationContext, config, validationContext.plugins);
170
+ const results = validateTasks(syncTasks, validationContext, config, validationContext.plugins);
162
171
  applyMinimumConfidence(results, config.validation?.minimumConfidence);
163
- const next = applySync(content, parsedRoadmap.tasks, results);
172
+ const next = applySync(content, syncTasks, results);
164
173
  const dryRun = isEnabled(flags['dry-run']);
165
174
  const writeResult = writeText(roadmapFile, next, { dryRun });
166
175
 
@@ -175,7 +184,7 @@ async function run() {
175
184
  }
176
185
 
177
186
  if (isEnabled(flags.audit)) {
178
- const audit = auditValidation(parsedRoadmap.tasks, results);
187
+ const audit = auditValidation(syncTasks, results);
179
188
  printAudit(audit);
180
189
  }
181
190
  return;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "roadmapsmith",
3
- "version": "0.9.5",
3
+ "version": "0.9.6",
4
4
  "description": "Evidence-backed ROADMAP.md generator and sync tool for AI coding agents.",
5
5
  "main": "src/index.js",
6
6
  "bin": {
@@ -11,6 +11,7 @@ const MANAGED_END = '<!-- rs:managed:end -->';
11
11
 
12
12
  function parseRoadmap(content) {
13
13
  const lines = String(content || '').split(/\r?\n/);
14
+ const managedRange = findManagedRange(lines);
14
15
  const tasks = [];
15
16
  let section = '';
16
17
 
@@ -61,6 +62,8 @@ function parseRoadmap(content) {
61
62
 
62
63
  return {
63
64
  lines,
65
+ managedRange,
66
+ hasManagedBlock: Boolean(managedRange),
64
67
  tasks
65
68
  };
66
69
  }
@@ -105,6 +108,7 @@ function upsertManagedBlock(existingContent, managedBody) {
105
108
  }
106
109
 
107
110
  module.exports = {
111
+ findManagedRange,
108
112
  parseRoadmap,
109
113
  upsertManagedBlock
110
114
  };