feat: admit signed native composition module

This commit is contained in:
冰朔 2026-08-19 01:52:47 +08:00
commit 593d5e5884
22 changed files with 1735 additions and 28 deletions

View file

@ -6,7 +6,7 @@ const catalog = JSON.parse(readFileSync(new URL('../contracts/module-donor-admis
const numbered = JSON.parse(readFileSync(new URL('../contracts/numbered-ipc-registry.json', import.meta.url), 'utf8'))
test('chaotic donors are read-only candidates and never a bulk merge source', () => {
assert.equal(catalog.state, 'DONORS_QUARANTINED_CANDIDATES_NUMBERED_NOT_ADMITTED')
assert.equal(catalog.state, 'ONE_CANDIDATE_ADMITTED_REMAINING_DONORS_QUARANTINED')
assert.equal(catalog.root_rule.repair_old_application_in_place, false)
assert.equal(catalog.root_rule.bulk_merge_or_wholesale_copy_allowed, false)
assert.equal(catalog.root_rule.one_candidate_per_admission_cycle, true)
@ -16,7 +16,8 @@ test('chaotic donors are read-only candidates and never a bulk merge source', ()
test('candidate coordinates are unique but are not permanent runtime module numbers', () => {
const coordinates = catalog.candidates.map((candidate) => candidate.candidate_number)
assert.equal(new Set(coordinates).size, coordinates.length)
assert.ok(catalog.candidates.every((candidate) => candidate.state.startsWith('QUARANTINED')))
assert.equal(catalog.candidates.filter((candidate) => candidate.state.startsWith('ADMITTED')).length, 1)
assert.ok(catalog.candidates.slice(1).every((candidate) => candidate.state.startsWith('QUARANTINED')))
assert.equal(catalog.root_rule.candidate_number_is_runtime_module_number, false)
assert.equal(catalog.root_rule.permanent_module_number_assignment_before_acceptance, false)
})
@ -32,7 +33,7 @@ test('legacy numbering donor is rejected and the numbered IPC root remains singu
test('hot installation is artifact, permission, self-test and rollback backed', () => {
assert.equal(catalog.hot_install_boundary.runtime_state, 'SIGNED_DECLARATIVE_PACKAGE_ENGINE_IMPLEMENTED')
assert.equal(catalog.hot_install_boundary.numbered_module_runtime_operations.length, 7)
assert.equal(catalog.hot_install_boundary.numbered_module_runtime_operations.length, 9)
assert.equal(catalog.hot_install_boundary.source_repository_is_directly_executable, false)
assert.equal(catalog.hot_install_boundary.immutable_signed_artifact_required, true)
assert.equal(catalog.hot_install_boundary.compatibility_manifest_required, true)

View file

@ -20,7 +20,7 @@ test('module packages are signed declarative artifacts rather than executable re
test('module lifecycle is reachable only through numbered verified-human routes', () => {
const routes = registry.operations.filter((route) => route.module_number === 'HLP-NIPC-MOD-0020')
assert.equal(routes.length, 7)
assert.equal(routes.length, 9)
assert.deepEqual(routes.map((route) => route.operation_number), [
'HLP-NIPC-OP-0063',
'HLP-NIPC-OP-0064',
@ -29,6 +29,8 @@ test('module lifecycle is reachable only through numbered verified-human routes'
'HLP-NIPC-OP-0067',
'HLP-NIPC-OP-0068',
'HLP-NIPC-OP-0069',
'HLP-NIPC-OP-0070',
'HLP-NIPC-OP-0071',
])
assert.ok(routes.every((route) => route.admission === 'VERIFIED_HUMAN_ROUTE'))
assert.match(rust, /MINISIGN_ED25519|PublicKey::decode/)

View file

@ -0,0 +1,31 @@
import assert from 'node:assert/strict'
import { readFileSync } from 'node:fs'
import test from 'node:test'
const read = (path) => readFileSync(new URL(`../${path}`, import.meta.url), 'utf8')
const contract = JSON.parse(read('contracts/native-composition-runtime.json'))
const registry = JSON.parse(read('contracts/numbered-ipc-registry.json'))
const modulePackage = JSON.parse(read('fixtures/module-packages/HLP-MOD-LOCAL-NATIVE-COMPOSITION-0001-0.1.0.ghmod'))
const rust = read('src-tauri/src/native_composition.rs')
const frontend = read('src/modules/native-composition/index.tsx')
test('native composition is an admitted numbered read-only adapter, not donor runtime code', () => {
assert.equal(contract.candidate_number, 'HLP-DONOR-CAND-0001')
assert.equal(contract.runtime_module_number, 'HLP-MOD-LOCAL-NATIVE-COMPOSITION-0001')
assert.equal(contract.module_contract.authority, 'CURRENT_AUTHENTICATED_ACCOUNT_READ_ONLY')
assert.equal(contract.admission.signed_package_required, true)
assert.equal(contract.admission.active_module_required_before_execution, true)
assert.equal(contract.provenance.current_mainline_reuses_bulk_source, false)
assert.equal(modulePackage.manifest.adapter, 'native-composition-v1')
assert.deepEqual(modulePackage.manifest.permissions, ['KNOWLEDGE_READ'])
assert.match(rust, /require_active_module_adapter/)
assert.doesNotMatch(rust, /#\[tauri::command\]/)
assert.match(frontend, /NativeCompositionStudio/)
})
test('native composition execution has one exact numbered coordinate pair', () => {
const routes = registry.operations.filter((route) => route.module_number === 'HLP-NIPC-MOD-0021')
assert.deepEqual(routes.map((route) => route.operation_number), ['HLP-NIPC-OP-0072', 'HLP-NIPC-OP-0073'])
assert.ok(routes.every((route) => route.target_number === 'HLP-NIPC-TGT-0021'))
assert.ok(routes.every((route) => route.admission === 'VERIFIED_HUMAN_ROUTE'))
})

View file

@ -40,6 +40,7 @@ test('numbered IPC registry is a closed unique route graph', async () => {
const operationNumbers = new Set()
const aliases = new Set()
const routeCoordinates = new Set()
const moduleCoordinates = new Set(contract.modules.map((module) => `${module.module_number}/${module.target_number}`))
for (const operation of contract.operations) {
assert.match(operation.operation_number, /^HLP-NIPC-OP-\d{4}$/)
assert.match(operation.module_number, /^HLP-NIPC-MOD-\d{4}$/)
@ -53,6 +54,7 @@ test('numbered IPC registry is a closed unique route graph', async () => {
const coordinate = [operation.channel_number, operation.module_number, operation.operation_number, operation.target_number].join('/')
assert.equal(routeCoordinates.has(coordinate), false)
routeCoordinates.add(coordinate)
assert.equal(moduleCoordinates.has(`${operation.module_number}/${operation.target_number}`), true)
}
const payloadAliases = [
...contract.payload_contract.empty_object_aliases,

View file

@ -7,8 +7,8 @@ test('identity, webview and direct broker numbers compile into one unique eviden
const generated = JSON.parse(readFileSync(new URL('../generated/unified-number-coordinate-tree.json', import.meta.url), 'utf8'))
assert.deepEqual(generated, compileUnifiedNumberTree())
assert.equal(generated.recordId, 'HLP-UNIFIED-NUMBER-TREE-001')
assert.equal(generated.routeCount, 91)
assert.equal(new Set(generated.routes.map((route) => route.path)).size, 91)
assert.equal(generated.routeCount, 95)
assert.equal(new Set(generated.routes.map((route) => route.path)).size, 95)
assert.equal(generated.invariants.everyPhysicalCallHasNumberedRoute, true)
assert.equal(generated.invariants.everyAcceptedCallHasEvidenceClass, true)
assert.ok(generated.routes.every((route) => route.admission && route.evidence))