Optimize detached graph save path

This commit is contained in:
Youzini-afk
2026-04-21 17:44:32 +08:00
parent a0313a6399
commit 6ddf3a7386
2 changed files with 76 additions and 3 deletions

View File

@@ -3782,6 +3782,59 @@ result = {
);
}
{
const harness = await createGraphPersistenceHarness({
chatId: "chat-luker-queued-save-detached",
globalChatId: "chat-luker-queued-save-detached",
characterId: "char-luker-queued-save",
chatMetadata: {
integrity: "meta-luker-queued-save-detached",
},
});
harness.runtimeContext.Luker = {
getContext() {
return harness.runtimeContext.__chatContext;
},
};
harness.api.setCurrentGraph(
stampPersistedGraph(
createMeaningfulGraph("chat-luker-queued-save-detached", "luker-detached"),
{
revision: 6,
integrity: "meta-luker-queued-save-detached",
chatId: "chat-luker-queued-save-detached",
reason: "luker-detached-seed",
},
),
);
harness.api.setGraphPersistenceState({
loadState: "loaded",
chatId: "chat-luker-queued-save-detached",
revision: 6,
lastPersistedRevision: 6,
writesBlocked: false,
});
const result = harness.api.saveGraphToChat({
reason: "luker-detached-save",
markMutation: false,
});
assert.equal(result.queued, true);
assert.equal(result.storageTier, "luker-chat-state");
assert.equal(result.saveMode, "luker-chat-state-queued");
harness.api.getCurrentGraph().nodes[0].fields.title = "runtime-mutated-after-queued-save";
await new Promise((resolve) => setTimeout(resolve, 0));
await new Promise((resolve) => setTimeout(resolve, 0));
assert.equal(
harness.api.getIndexedDbSnapshot()?.nodes?.[0]?.fields?.title,
"事件-luker-detached",
"Luker queued save 的异步本地 mirror 不应被后续 live graph 修改污染",
);
}
{
const harness = await createGraphPersistenceHarness({
chatId: "chat-luker-v2-load",