mirror of
https://github.com/Youzini-afk/ST-Bionic-Memory-Ecology.git
synced 2026-05-15 22:30:38 +08:00
Fix persistence pending gating and add repair actions
This commit is contained in:
@@ -329,6 +329,131 @@ async function testManualExtractIgnoresSupersededPendingPersistence() {
|
||||
assert.notEqual(context.lastExtractionStatus.text, "等待持久化确认");
|
||||
}
|
||||
|
||||
async function testManualExtractIgnoresFailedBatchWithoutPersistenceAttempt() {
|
||||
let executeExtractionBatchCalls = 0;
|
||||
const chat = [{ is_user: true, mes: "u" }, { is_user: false, mes: "a" }];
|
||||
const context = {
|
||||
...createBaseStatusContext(),
|
||||
isExtracting: false,
|
||||
graphPersistenceState: {
|
||||
pendingPersist: false,
|
||||
lastAcceptedRevision: 0,
|
||||
},
|
||||
currentGraph: {
|
||||
historyState: {
|
||||
lastBatchStatus: {
|
||||
outcome: "failed",
|
||||
processedRange: [1, 1],
|
||||
persistence: {
|
||||
outcome: "queued",
|
||||
accepted: false,
|
||||
revision: 0,
|
||||
reason: "",
|
||||
storageTier: "none",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
getCurrentChatId() {
|
||||
return "chat-mobile";
|
||||
},
|
||||
getCurrentGraph() {
|
||||
return context.currentGraph;
|
||||
},
|
||||
getIsExtracting() {
|
||||
return context.isExtracting;
|
||||
},
|
||||
getGraphPersistenceState() {
|
||||
return {
|
||||
pendingPersist: false,
|
||||
lastAcceptedRevision: 0,
|
||||
};
|
||||
},
|
||||
ensureGraphMutationReady() {
|
||||
return true;
|
||||
},
|
||||
async recoverHistoryIfNeeded() {
|
||||
return true;
|
||||
},
|
||||
normalizeGraphRuntimeState(graph) {
|
||||
return graph;
|
||||
},
|
||||
setCurrentGraph(graph) {
|
||||
context.currentGraph = graph;
|
||||
},
|
||||
createEmptyGraph() {
|
||||
return {};
|
||||
},
|
||||
getContext() {
|
||||
return { chat };
|
||||
},
|
||||
getAssistantTurns() {
|
||||
return [1];
|
||||
},
|
||||
getLastProcessedAssistantFloor() {
|
||||
return 0;
|
||||
},
|
||||
clampInt(value, fallback) {
|
||||
return Number.isFinite(Number(value)) ? Number(value) : fallback;
|
||||
},
|
||||
getSettings() {
|
||||
return { extractEvery: 1 };
|
||||
},
|
||||
beginStageAbortController() {
|
||||
return { signal: {} };
|
||||
},
|
||||
async executeExtractionBatch() {
|
||||
executeExtractionBatchCalls += 1;
|
||||
return {
|
||||
success: true,
|
||||
result: {
|
||||
newNodes: 0,
|
||||
updatedNodes: 0,
|
||||
newEdges: 0,
|
||||
},
|
||||
effects: {},
|
||||
batchStatus: {
|
||||
persistence: {
|
||||
accepted: true,
|
||||
revision: 1,
|
||||
attempted: true,
|
||||
},
|
||||
},
|
||||
historyAdvanceAllowed: true,
|
||||
};
|
||||
},
|
||||
async retryPendingGraphPersist() {
|
||||
return {
|
||||
accepted: false,
|
||||
reason: "no-pending-persist",
|
||||
};
|
||||
},
|
||||
isAbortError() {
|
||||
return false;
|
||||
},
|
||||
onManualExtractController,
|
||||
finishStageAbortController() {},
|
||||
setIsExtracting(value) {
|
||||
context.isExtracting = value;
|
||||
},
|
||||
setLastExtractionStatus(text, meta, level) {
|
||||
context.lastExtractionStatus = { text, meta, level };
|
||||
context.runtimeStatus = { text, meta, level };
|
||||
},
|
||||
toastr: {
|
||||
info() {},
|
||||
success() {},
|
||||
warning() {},
|
||||
error() {},
|
||||
},
|
||||
result: null,
|
||||
};
|
||||
|
||||
await onManualExtractController(context, { drainAll: false });
|
||||
assert.equal(executeExtractionBatchCalls, 1);
|
||||
assert.notEqual(context.lastExtractionStatus.text, "等待持久化确认");
|
||||
}
|
||||
|
||||
async function testManualRebuildSetsTerminalRuntimeStatus() {
|
||||
const chat = [{ is_user: true, mes: "u" }, { is_user: false, mes: "a" }];
|
||||
const context = {
|
||||
@@ -405,6 +530,7 @@ testIndexDefinesLastProcessedAssistantFloorHelper();
|
||||
await testVectorSyncTerminalStateUpdatesRuntime();
|
||||
await testManualExtractNoBatchesDoesNotStayRunning();
|
||||
await testManualExtractIgnoresSupersededPendingPersistence();
|
||||
await testManualExtractIgnoresFailedBatchWithoutPersistenceAttempt();
|
||||
await testManualRebuildSetsTerminalRuntimeStatus();
|
||||
|
||||
console.log("mobile-status-regressions tests passed");
|
||||
|
||||
Reference in New Issue
Block a user