57 lines
2.9 KiB
JavaScript
57 lines
2.9 KiB
JavaScript
|
|
import assert from 'node:assert/strict'
|
||
|
|
import fs from 'node:fs'
|
||
|
|
import test from 'node:test'
|
||
|
|
|
||
|
|
const read = (relative) => fs.readFileSync(new URL(`../${relative}`, import.meta.url), 'utf8')
|
||
|
|
const contract = JSON.parse(read('contracts/personal-channel-kernel.json'))
|
||
|
|
const foundation = JSON.parse(read('foundation.json'))
|
||
|
|
const stageOne = JSON.parse(read('contracts/stage-one-platform.json'))
|
||
|
|
const rust = read('src-tauri/src/personal_channel.rs')
|
||
|
|
const lib = read('src-tauri/src/lib.rs')
|
||
|
|
const ui = read('src/main.tsx')
|
||
|
|
|
||
|
|
test('personal channel kernel has one private SQLite owner and no server authority', () => {
|
||
|
|
assert.equal(contract.storage.owner, 'HOLOLAKE_NATIVE_RUST_CORE')
|
||
|
|
assert.equal(contract.storage.engine, 'EMBEDDED_SQLITE')
|
||
|
|
assert.equal(contract.storage.webview_direct_database_access, false)
|
||
|
|
assert.equal(contract.identity.platform_account_authentication_claimed, false)
|
||
|
|
assert.equal(contract.identity.server_or_repository_authority_granted, false)
|
||
|
|
assert.equal(contract.acceptance.server_deployment, false)
|
||
|
|
})
|
||
|
|
|
||
|
|
test('identity and task mutations create one-to-one chained events and receipts', () => {
|
||
|
|
assert.equal(contract.event_and_receipt.identity_and_task_mutations_are_single_sqlite_transactions, true)
|
||
|
|
assert.equal(contract.event_and_receipt.every_mutation_has_event, true)
|
||
|
|
assert.equal(contract.event_and_receipt.every_event_has_receipt, true)
|
||
|
|
assert.equal(contract.event_and_receipt.tampering_fails_closed, true)
|
||
|
|
assert.match(rust, /CREATE TABLE IF NOT EXISTS events/)
|
||
|
|
assert.match(rust, /CREATE TABLE IF NOT EXISTS receipts/)
|
||
|
|
assert.match(rust, /verify_integrity\(&connection\)/)
|
||
|
|
})
|
||
|
|
|
||
|
|
test('the human projection establishes identity once and keeps task mutation below the default surface', () => {
|
||
|
|
for (const command of [
|
||
|
|
'get_personal_channel_snapshot',
|
||
|
|
'initialize_personal_channel',
|
||
|
|
'create_personal_channel_task',
|
||
|
|
'transition_personal_channel_task',
|
||
|
|
]) {
|
||
|
|
assert.match(lib, new RegExp(`personal_channel::${command}`))
|
||
|
|
}
|
||
|
|
for (const command of ['get_personal_channel_snapshot', 'initialize_personal_channel']) {
|
||
|
|
assert.match(ui, new RegExp(`['"]${command}['"]`))
|
||
|
|
}
|
||
|
|
assert.doesNotMatch(ui, /['"]create_personal_channel_task['"]/)
|
||
|
|
assert.doesNotMatch(ui, /['"]transition_personal_channel_task['"]/)
|
||
|
|
assert.doesNotMatch(ui, /下一件事|为什么做|开始这件事/)
|
||
|
|
assert.equal(stageOne.personal_channel_kernel.native_source_implemented, true)
|
||
|
|
assert.equal(stageOne.personal_channel_kernel.installed_runtime_acceptance, true)
|
||
|
|
assert.equal(foundation.personal_channel_identity_task_event_receipt_kernel_implemented, true)
|
||
|
|
assert.equal(foundation.personal_channel_installed_runtime_acceptance, true)
|
||
|
|
})
|
||
|
|
|
||
|
|
test('full stage-one completion stays false after the first source slice', () => {
|
||
|
|
assert.equal(stageOne.implementation_complete, false)
|
||
|
|
assert.equal(foundation.stage_one_next_slice, 'HUMAN_APPROVAL_CENTER_AND_GIT_EVIDENCE_READBACK')
|
||
|
|
assert.match(foundation.stage_one_visible_body_state, /PRODUCT_INCOMPLETE/)
|
||
|
|
})
|