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 +1 -1
- package/src/validator/index.js +22 -4
package/package.json
CHANGED
package/src/validator/index.js
CHANGED
|
@@ -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 = [
|