feat(FN-4810): complete Step 1 — truncate scope-leak log rendering

Fusion-Task-Id: FN-4810
Fusion-Task-Lineage: b7080f83-96b0-4106-9742-e14b20afeab1
This commit is contained in:
Fusion (runfusion.ai)
2026-05-16 16:07:43 -07:00
committed by gsxdsm
parent 8bef30655d
commit af4607ed54

View File

@@ -5198,14 +5198,24 @@ export class TaskExecutor {
return { blocked: false };
}
const message = `[scope-leak] reviewLevel=${reviewLevel} enforcement=${enforcementMode} off-scope touched files [${offScopeFiles.join(", ")}]; declared scope [${declaredScope.join(", ")}]`;
const renderListPreview = (items: string[], cap = 10): string => {
if (items.length <= cap) {
return items.join(", ");
}
const remaining = items.length - cap;
return `${items.slice(0, cap).join(", ")}, … (+${remaining} more)`;
};
const offScopePreview = renderListPreview(offScopeFiles);
const declaredScopePreview = renderListPreview(declaredScope);
const message = `[scope-leak] reviewLevel=${reviewLevel} enforcement=${enforcementMode} off-scope touched files [${offScopePreview}]; declared scope [${declaredScopePreview}]; total off-scope=${offScopeFiles.length} total scope=${declaredScope.length}`;
executorLog.warn(`${task.id}: ${message}`);
await this.store.logEntry(task.id, message, undefined, this.currentRunContext);
if (enforcementMode === "block") {
return {
blocked: true,
message: `Plan-Only scope-leak guard refused fn_task_done. Off-scope paths: [${offScopeFiles.join(", ")}]. Revert them before retrying (for example: git checkout -- <paths>).`,
message: `Plan-Only scope-leak guard refused fn_task_done. Off-scope paths: [${offScopePreview}]. Revert them before retrying (for example: git checkout -- <paths>).`,
};
}