roadmapsmith 0.9.7 → 0.9.8

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "roadmapsmith",
3
- "version": "0.9.7",
3
+ "version": "0.9.8",
4
4
  "description": "Evidence-backed ROADMAP.md generator and sync tool for AI coding agents.",
5
5
  "main": "src/index.js",
6
6
  "bin": {
@@ -800,9 +800,6 @@ function findNegativeImplementationSignals(candidatePaths, fileIndex) {
800
800
 
801
801
  const indexedFiles = new Map(fileIndex.map((file) => [file.relativePath, file]));
802
802
  const negativeSignals = [
803
- /\bTODO\b/i,
804
- /\bFIXME\b/i,
805
- /\bdisabled\b/i,
806
803
  /\bnot implemented\b/i,
807
804
  /throw\s+new\s+Error\s*\(\s*['"`][^'"`]*not implemented/i
808
805
  ];
@@ -1166,6 +1163,23 @@ function validateTask(task, context, config, plugins) {
1166
1163
  passed = false;
1167
1164
  }
1168
1165
 
1166
+ const shouldPreserveCheckedTask =
1167
+ task.checked &&
1168
+ !passed &&
1169
+ !authoritativeEvidence.active &&
1170
+ pathHints.length === 0 &&
1171
+ symbolHints.length === 0 &&
1172
+ !hasDirectReferencePass &&
1173
+ evidence.structuralEvidence !== false &&
1174
+ negativeSignalMatches.length === 0;
1175
+ let preservedCheckedState = false;
1176
+ if (shouldPreserveCheckedTask) {
1177
+ passed = true;
1178
+ confidence = 'low';
1179
+ uniqueReasons = [];
1180
+ preservedCheckedState = true;
1181
+ }
1182
+
1169
1183
  // True when the only passing evidence is artifact/doc files and the task is not a doc task.
1170
1184
  // Used by auditValidation to flag implementation tasks that pass solely via documentation.
1171
1185
  const evidenceIsDocOnly = !evidence.code && !evidence.test && evidence.artifact && !isDocTask(task.text);
@@ -1179,7 +1193,8 @@ function validateTask(task, context, config, plugins) {
1179
1193
  evidenceIsDocOnly,
1180
1194
  requiresTest,
1181
1195
  hasEvidence: hasStrongEvidence || hasWeakEvidence,
1182
- attempted
1196
+ attempted,
1197
+ preservedCheckedState
1183
1198
  };
1184
1199
  }
1185
1200
 
@@ -1237,6 +1252,9 @@ function applyMinimumConfidence(results, minimumConfidence) {
1237
1252
  const minRank = CONFIDENCE_RANK[minimumConfidence] ?? 0;
1238
1253
  if (minRank === 0) return;
1239
1254
  for (const result of Object.values(results)) {
1255
+ if (result.preservedCheckedState) {
1256
+ continue;
1257
+ }
1240
1258
  if ((CONFIDENCE_RANK[result.confidence] ?? 0) < minRank) {
1241
1259
  result.passed = false;
1242
1260
  result.reasons = [