fix: complete ordinary channel runtime paths
This commit is contained in:
parent
40501233ef
commit
2e48b7d768
12 changed files with 158 additions and 40 deletions
|
|
@ -40,7 +40,7 @@ test('native binary exposes MCP stdio and numbered gateway controls', () => {
|
|||
assert.match(dispatcher, /external_ai_gateway::set_gateway_exposure/)
|
||||
const statusRoute = dispatcher.match(/"external_ai_gateway::get_gateway_status"[\s\S]*?"external_ai_gateway::set_gateway_exposure"/)?.[0]
|
||||
assert.ok(statusRoute, 'gateway status route must remain discoverable')
|
||||
assert.match(statusRoute, /verified_user_route/)
|
||||
assert.match(statusRoute, /authenticated_human_subject/)
|
||||
assert.match(statusRoute, /HOLOLAKE_GATEWAY_VERIFIED_HUMAN_REQUIRED/)
|
||||
assert.match(frontendIpc, /get_external_ai_gateway_status/)
|
||||
assert.match(frontendIpc, /set_external_ai_gateway_exposure/)
|
||||
|
|
|
|||
|
|
@ -33,6 +33,7 @@ test('numbered IPC registry is a closed unique route graph', async () => {
|
|||
assert.equal(contract.runtime.grant_single_use, true)
|
||||
assert.equal(contract.runtime.payload_bound_grants, true)
|
||||
assert.equal(contract.runtime.authority_binding_issued_server_side, true)
|
||||
assert.equal(contract.runtime.ordinary_user_local_channel_authority, 'EXPLICIT_INITIALIZATION_PLUS_ACCOUNT_SCOPED_SESSION_PLUS_KEYCHAIN_SECRET')
|
||||
assert.equal(contract.runtime.persona_binding_claimed, false)
|
||||
assert.equal(contract.runtime.unknown_route, 'FAIL_CLOSED')
|
||||
assert.ok(contract.operations.length >= 60)
|
||||
|
|
@ -65,6 +66,19 @@ test('numbered IPC registry is a closed unique route graph', async () => {
|
|||
assert.deepEqual([...payloadAliases].sort(), [...aliases].sort())
|
||||
})
|
||||
|
||||
test('ordinary user local channels receive account-scoped IPC authority without claiming a Guanghu number', async () => {
|
||||
const source = await readFile(path.join(rustRoot, 'numbered_ipc.rs'), 'utf8')
|
||||
const dispatcher = await readFile(dispatcherPath, 'utf8')
|
||||
assert.match(source, /AUTHENTICATED_LOCAL_HUMAN:PERSONAL_CHANNEL/)
|
||||
assert.match(source, /session\.domain == "PERSONAL_CHANNEL"/)
|
||||
assert.match(source, /session\.host == "local\.hololake"/)
|
||||
assert.match(source, /current_login_session\(app\)/)
|
||||
assert.match(source, /HOLOLAKE_NUMBERED_IPC_VERIFIED_HUMAN_REQUIRED/)
|
||||
assert.match(dispatcher, /fn authenticated_human_subject/)
|
||||
assert.match(dispatcher, /identity_for_channel_runtime\(app\)/)
|
||||
assert.match(dispatcher, /external_ai_gateway::get_gateway_status[\s\S]*authenticated_human_subject/)
|
||||
})
|
||||
|
||||
test('the webview has one IPC entrance and cannot invoke legacy commands', async () => {
|
||||
const contract = JSON.parse(await readFile(contractPath, 'utf8'))
|
||||
const aliases = new Set(contract.operations.map((operation) => operation.alias))
|
||||
|
|
|
|||
|
|
@ -48,6 +48,13 @@ test('marketplace lifecycle is reachable only through exact numbered operations'
|
|||
assert.match(frontend, /只有零点原核与企业发布双签同时通过/)
|
||||
})
|
||||
|
||||
test('an installed physical marketplace module becomes a directly usable ordinary-channel application', () => {
|
||||
assert.match(frontend, /installMarketplaceItem[\s\S]*await refreshCompositionModule\(\)/)
|
||||
assert.match(frontend, /installMarketplaceItem[\s\S]*await refreshEducationModule\(\)/)
|
||||
assert.match(frontend, /compositionModule\?\.installedState === 'ACTIVE'[\s\S]*title="原生组合视图"[\s\S]*已安装成品模块 · 直接使用/)
|
||||
assert.match(frontend, /educationModule\?\.installedState === 'ACTIVE'[\s\S]*title="教育行业工作台"[\s\S]*已安装成品模块 · 直接使用/)
|
||||
})
|
||||
|
||||
for (const file of [
|
||||
'HLP-SKILL-OFFICIAL-DELIVERY-VERIFICATION-0001-0.1.0.ghskill',
|
||||
'HLP-SKILL-OFFICIAL-MODULE-BOUNDARY-REVIEW-0001-0.1.0.ghskill',
|
||||
|
|
|
|||
|
|
@ -31,8 +31,11 @@ test('knowledge-embedded Agent keeps one channel body with human-managed convers
|
|||
assert.equal(contract.channel.response_target_is_selected_per_turn, true)
|
||||
assert.equal(contract.channel.persona_identity_preconfigured, false)
|
||||
assert.equal(contract.channel.persona_declares_own_number_and_name, true)
|
||||
assert.match(frontend, /ICE-GL∞/)
|
||||
assert.match(frontend, /零点原核频道系统/)
|
||||
assert.match(frontend, /正在读取当前频道/)
|
||||
assert.match(frontend, /频道编号核验中/)
|
||||
assert.match(frontend, /setRuntime\(nextRuntime\)[\s\S]*list_persona_agent_conversations/)
|
||||
assert.doesNotMatch(frontend, /artifactCount \?\? 0/)
|
||||
assert.doesNotMatch(frontend, /runtime\?\.humanNumber \|\| 'ICE-GL∞'/)
|
||||
assert.doesNotMatch(frontend, /ICE-P-ZY001/)
|
||||
assert.doesNotMatch(frontend, />\s*人类\s*</)
|
||||
assert.match(frontend, /新建/)
|
||||
|
|
|
|||
|
|
@ -57,6 +57,24 @@ test('the authenticated world return control remains clickable above the non-int
|
|||
assert.match(rule, /pointer-events:auto/)
|
||||
})
|
||||
|
||||
test('switching UI families enters the selected real home instead of retaining the other family inner stage', () => {
|
||||
const app = read('src/main.tsx')
|
||||
const chooser = app.match(/const chooseSurface = \(next:[\s\S]*?window\.localStorage\.setItem\('hololake-surface', next\)\n \}/)?.[0]
|
||||
assert.ok(chooser)
|
||||
assert.match(chooser, /setWorldStage\('domain'\)/)
|
||||
assert.match(chooser, /setView\('overview'\)/)
|
||||
assert.match(chooser, /setPublicDomain\(null\)/)
|
||||
})
|
||||
|
||||
test('language-world themes alter the whole scene through semantic optical tokens', () => {
|
||||
const styles = read('src/modules/qoder-surface/starlake-surface.css')
|
||||
assert.match(styles, /background:linear-gradient\(180deg, var\(--surface-sky\)/)
|
||||
assert.match(styles, /opacity:var\(--primitive-scene-opacity\)/)
|
||||
assert.match(styles, /background:var\(--accent-light\)/)
|
||||
assert.match(styles, /color:var\(--content-primary\)/)
|
||||
assert.match(styles, /color:var\(--content-secondary\)/)
|
||||
})
|
||||
|
||||
test('zero-sense and fifth-domain boundaries remain explicit', () => {
|
||||
const app = read('src/main.tsx')
|
||||
const portal = read('src/modules/public-domain/PublicDomainPortal.tsx')
|
||||
|
|
|
|||
Loading…
Reference in a new issue