feat: add HoloLake personal channel module runtime
This commit is contained in:
parent
bb96d5eb89
commit
a106b23f9b
21 changed files with 786 additions and 31 deletions
|
|
@ -0,0 +1,35 @@
|
|||
import test from 'node:test';
|
||||
import assert from 'node:assert/strict';
|
||||
import { applyChannelPatch, defaultChannelState, KNOWLEDGE_MODULE_ID, normalizeChannelState } from './channel-runtime.js';
|
||||
|
||||
test('module removal unmounts the module but preserves a reversible before state', () => {
|
||||
const receipt = applyChannelPatch(defaultChannelState('2026-08-09T00:00:00.000Z'), {
|
||||
operation: 'set_module_state',
|
||||
moduleId: KNOWLEDGE_MODULE_ID,
|
||||
installed: false,
|
||||
}, '2026-08-09T00:01:00.000Z');
|
||||
assert.equal(receipt.after.modules[0].installed, false);
|
||||
assert.equal(receipt.after.modules[0].mounted, false);
|
||||
assert.equal(receipt.before.modules[0].installed, true);
|
||||
assert.equal(receipt.after.revision, 1);
|
||||
});
|
||||
|
||||
test('unknown modules fail closed instead of becoming UI-only entries', () => {
|
||||
assert.throws(() => applyChannelPatch(defaultChannelState(), {
|
||||
operation: 'set_module_state',
|
||||
moduleId: 'UNREGISTERED-MODULE',
|
||||
installed: true,
|
||||
}), /未在光湖注册表登记/);
|
||||
});
|
||||
|
||||
test('stored state is normalized against the current official registry', () => {
|
||||
const state = normalizeChannelState({
|
||||
schema: 'hololake.personal-channel-state/v1',
|
||||
channelId: 'CHANNEL-ICE-001',
|
||||
revision: 3,
|
||||
updatedAt: '2026-08-09T00:00:00.000Z',
|
||||
modules: [{ id: KNOWLEDGE_MODULE_ID, installed: false, mounted: true, order: 0 }],
|
||||
});
|
||||
assert.equal(state.modules[0].installed, false);
|
||||
assert.equal(state.modules[0].mounted, false);
|
||||
});
|
||||
Loading…
Reference in a new issue