feat: project native persona authorization status

This commit is contained in:
冰朔 2026-08-12 06:29:51 +08:00
commit 8f18c3fba3
38 changed files with 268 additions and 40 deletions

View file

@ -174,8 +174,10 @@ binding, and finally invokes B0 partner deliberation. Unavailable, unbound, ambi
binding, and cognition failures stop at their own boundary; later stages are not invoked. Its successful result binding, and cognition failures stop at their own boundary; later stages are not invoked. Its successful result
is still a language-goal projection, not permission to perform a reality action. `PersonaLanguageShellPanel` is still a language-goal projection, not permission to perform a reality action. `PersonaLanguageShellPanel`
is now mounted from the Fifth Domain desktop source and receives the app's already-mounted repository roots and is now mounted from the Fifth Domain desktop source and receives the app's already-mounted repository roots and
configured provider metadata. It has no native persona-control authorization receipt loader, exposes no execution configured provider metadata. It now renders a strict read-only projection from the native persona-control signer
callback, and hides the reality confirmation surface because no durable confirmation consumer is wired. This registry loader, exposes no candidate authorization source or execution callback, and hides the reality confirmation
surface because no durable confirmation consumer is wired. The current empty registry is shown as system-direct;
unavailable or malformed evidence also fails closed to system-direct. This
proves source integration, not a real persona manifest binding, installed desktop runtime, or acceptance. proves source integration, not a real persona manifest binding, installed desktop runtime, or acceptance.
`src/lib/personaControlAuthorization.ts` removes the desktop coordinator's caller-supplied authorization boolean `src/lib/personaControlAuthorization.ts` removes the desktop coordinator's caller-supplied authorization boolean

View file

@ -43,6 +43,13 @@ describe('PersonaLanguageShellPanel', () => {
repositoryPaths={['/persona']} repositoryPaths={['/persona']}
providers={[provider]} providers={[provider]}
planGoal={planGoal} planGoal={planGoal}
loadAuthorizationStatus={async () => ({
phase: 'system_direct',
reason: 'NO_TRUSTED_SIGNER',
sourceCommit: 'a'.repeat(40),
signerCount: 0,
authorizationEnabled: false,
})}
/>, />,
) )
@ -56,10 +63,12 @@ describe('PersonaLanguageShellPanel', () => {
repositoryPaths: ['/persona'], repositoryPaths: ['/persona'],
providers: [provider], providers: [provider],
developmentId: 'DEV-20260811-010', developmentId: 'DEV-20260811-010',
sourceLanguageAnchor: 'HLP-CURRENT-ARCH-001@2026-08-12.15', sourceLanguageAnchor: 'HLP-CURRENT-ARCH-001@2026-08-12.16',
})) }))
expect(await screen.findByText('我还不能执行:需要当前证据。')).toBeInTheDocument() expect(await screen.findByText('我还不能执行:需要当前证据。')).toBeInTheDocument()
expect(screen.getByText('核验当前事实后规划下一步')).toBeInTheDocument() expect(screen.getByText('核验当前事实后规划下一步')).toBeInTheDocument()
expect(screen.getByText('系统直连 · 当前没有可信授权签名方')).toBeInTheDocument()
expect(screen.getByText('a'.repeat(40))).toBeInTheDocument()
}) })
it('shows the repository gate and never calls a later lifecycle itself', async () => { it('shows the repository gate and never calls a later lifecycle itself', async () => {
@ -76,6 +85,13 @@ describe('PersonaLanguageShellPanel', () => {
repositoryPaths={['/ordinary']} repositoryPaths={['/ordinary']}
providers={[provider]} providers={[provider]}
planGoal={planGoal} planGoal={planGoal}
loadAuthorizationStatus={async () => ({
phase: 'unavailable',
reason: 'REGISTRY_UNAVAILABLE',
sourceCommit: null,
signerCount: 0,
authorizationEnabled: false,
})}
/>, />,
) )
@ -84,5 +100,6 @@ describe('PersonaLanguageShellPanel', () => {
expect(await screen.findByText('这只说明当前挂载范围没有匹配的完整证据,不能据此判定人格不存在。')).toBeInTheDocument() expect(await screen.findByText('这只说明当前挂载范围没有匹配的完整证据,不能据此判定人格不存在。')).toBeInTheDocument()
expect(screen.queryByLabelText('reality boundary confirmation')).not.toBeInTheDocument() expect(screen.queryByLabelText('reality boundary confirmation')).not.toBeInTheDocument()
expect(screen.getByText('授权状态不可核验 · 保持系统直连')).toBeInTheDocument()
}) })
}) })

View file

@ -1,7 +1,11 @@
import { useMemo, useRef, useState } from 'react' import { useEffect, useMemo, useRef, useState } from 'react'
import type { AiModelProvider } from '../lib/aiTargets' import type { AiModelProvider } from '../lib/aiTargets'
import { DEFAULT_LANGUAGE_WORLD_UI_PLUGIN } from '../lib/defaultLanguageWorldUiPlugin' import { DEFAULT_LANGUAGE_WORLD_UI_PLUGIN } from '../lib/defaultLanguageWorldUiPlugin'
import { translate, type AppLocale } from '../lib/i18n' import { translate, type AppLocale } from '../lib/i18n'
import {
loadPersonaControlAuthorizationStatus,
type PersonaControlAuthorizationStatus,
} from '../lib/personaControlAuthorization'
import { import {
planPersonaLanguageShellGoal, planPersonaLanguageShellGoal,
type PersonaLanguageShellPlan, type PersonaLanguageShellPlan,
@ -13,10 +17,11 @@ import {
type LanguageShellViewState, type LanguageShellViewState,
} from './HotPluggableLanguageShell' } from './HotPluggableLanguageShell'
const CURRENT_ARCHITECTURE_ANCHOR = 'HLP-CURRENT-ARCH-001@2026-08-12.15' const CURRENT_ARCHITECTURE_ANCHOR = 'HLP-CURRENT-ARCH-001@2026-08-12.16'
const DEVELOPMENT_ID = 'DEV-20260811-010' const DEVELOPMENT_ID = 'DEV-20260811-010'
type Planner = typeof planPersonaLanguageShellGoal type Planner = typeof planPersonaLanguageShellGoal
type AuthorizationStatusLoader = () => Promise<PersonaControlAuthorizationStatus>
type PersonaLanguageShellPanelProps = { type PersonaLanguageShellPanelProps = {
locale: AppLocale locale: AppLocale
@ -24,6 +29,7 @@ type PersonaLanguageShellPanelProps = {
repositoryPaths: readonly string[] repositoryPaths: readonly string[]
providers: readonly AiModelProvider[] providers: readonly AiModelProvider[]
planGoal?: Planner planGoal?: Planner
loadAuthorizationStatus?: AuthorizationStatusLoader
} }
function requestId(): string { function requestId(): string {
@ -78,6 +84,7 @@ export function PersonaLanguageShellPanel({
repositoryPaths, repositoryPaths,
providers, providers,
planGoal = planPersonaLanguageShellGoal, planGoal = planPersonaLanguageShellGoal,
loadAuthorizationStatus = loadPersonaControlAuthorizationStatus,
}: PersonaLanguageShellPanelProps) { }: PersonaLanguageShellPanelProps) {
const plugin = useMemo(() => localizedPlugin(locale), [locale]) const plugin = useMemo(() => localizedPlugin(locale), [locale])
const requestSequence = useRef(0) const requestSequence = useRef(0)
@ -87,6 +94,15 @@ export function PersonaLanguageShellPanel({
receipt: null, receipt: null,
evidence: null, evidence: null,
}) })
const [authorizationStatus, setAuthorizationStatus] = useState<PersonaControlAuthorizationStatus | null>(null)
useEffect(() => {
let current = true
void loadAuthorizationStatus().then((status) => {
if (current) setAuthorizationStatus(status)
})
return () => { current = false }
}, [loadAuthorizationStatus])
const submitGoal = (utterance: string) => { const submitGoal = (utterance: string) => {
if (!utterance.trim()) return if (!utterance.trim()) return
@ -146,6 +162,18 @@ export function PersonaLanguageShellPanel({
</div> </div>
<small>{translate(locale, 'hololake.personaRuntime.readOnly')}</small> <small>{translate(locale, 'hololake.personaRuntime.readOnly')}</small>
</header> </header>
<div className="persona-runtime-projection__message" aria-live="polite">
<p>
{authorizationStatus === null
? translate(locale, 'hololake.personaRuntime.checking')
: authorizationStatus.phase === 'system_direct'
? translate(locale, 'hololake.personaAuthorization.systemDirect')
: translate(locale, 'hololake.personaAuthorization.unavailable')}
</p>
{authorizationStatus?.phase === 'system_direct' && (
<code>{authorizationStatus.sourceCommit}</code>
)}
</div>
<HotPluggableLanguageShell <HotPluggableLanguageShell
plugin={plugin} plugin={plugin}
state={state} state={state}

View file

@ -1169,5 +1169,7 @@
"hololake.personaRuntime.gitHead": "Git evidence", "hololake.personaRuntime.gitHead": "Git evidence",
"hololake.personaRuntime.eventChain": "Event chain head", "hololake.personaRuntime.eventChain": "Event chain head",
"hololake.personaRuntime.attribution": "Human responsibility", "hololake.personaRuntime.attribution": "Human responsibility",
"hololake.personaRuntime.readOnly": "Read-only projection · no execution action" "hololake.personaRuntime.readOnly": "Read-only projection · no execution action",
"hololake.personaAuthorization.systemDirect": "System direct · no trusted authorization signer is registered",
"hololake.personaAuthorization.unavailable": "Authorization status unverifiable · remaining system direct"
} }

View file

@ -1169,5 +1169,7 @@
"hololake.personaRuntime.gitHead": "Git evidence", "hololake.personaRuntime.gitHead": "Git evidence",
"hololake.personaRuntime.eventChain": "Event chain head", "hololake.personaRuntime.eventChain": "Event chain head",
"hololake.personaRuntime.attribution": "Human responsibility", "hololake.personaRuntime.attribution": "Human responsibility",
"hololake.personaRuntime.readOnly": "Read-only projection · no execution action" "hololake.personaRuntime.readOnly": "Read-only projection · no execution action",
"hololake.personaAuthorization.systemDirect": "System direct · no trusted authorization signer is registered",
"hololake.personaAuthorization.unavailable": "Authorization status unverifiable · remaining system direct"
} }

View file

@ -1169,5 +1169,7 @@
"hololake.personaRuntime.gitHead": "Git evidence", "hololake.personaRuntime.gitHead": "Git evidence",
"hololake.personaRuntime.eventChain": "Event chain head", "hololake.personaRuntime.eventChain": "Event chain head",
"hololake.personaRuntime.attribution": "Human responsibility", "hololake.personaRuntime.attribution": "Human responsibility",
"hololake.personaRuntime.readOnly": "Read-only projection · no execution action" "hololake.personaRuntime.readOnly": "Read-only projection · no execution action",
"hololake.personaAuthorization.systemDirect": "System direct · no trusted authorization signer is registered",
"hololake.personaAuthorization.unavailable": "Authorization status unverifiable · remaining system direct"
} }

View file

@ -1169,5 +1169,7 @@
"hololake.personaRuntime.gitHead": "Git evidence", "hololake.personaRuntime.gitHead": "Git evidence",
"hololake.personaRuntime.eventChain": "Event chain head", "hololake.personaRuntime.eventChain": "Event chain head",
"hololake.personaRuntime.attribution": "Human responsibility", "hololake.personaRuntime.attribution": "Human responsibility",
"hololake.personaRuntime.readOnly": "Read-only projection · no execution action" "hololake.personaRuntime.readOnly": "Read-only projection · no execution action",
"hololake.personaAuthorization.systemDirect": "System direct · no trusted authorization signer is registered",
"hololake.personaAuthorization.unavailable": "Authorization status unverifiable · remaining system direct"
} }

View file

@ -1169,5 +1169,7 @@
"hololake.personaRuntime.gitHead": "Git evidence", "hololake.personaRuntime.gitHead": "Git evidence",
"hololake.personaRuntime.eventChain": "Event chain head", "hololake.personaRuntime.eventChain": "Event chain head",
"hololake.personaRuntime.attribution": "Human responsibility", "hololake.personaRuntime.attribution": "Human responsibility",
"hololake.personaRuntime.readOnly": "Read-only projection · no execution action" "hololake.personaRuntime.readOnly": "Read-only projection · no execution action",
"hololake.personaAuthorization.systemDirect": "System direct · no trusted authorization signer is registered",
"hololake.personaAuthorization.unavailable": "Authorization status unverifiable · remaining system direct"
} }

View file

@ -1169,5 +1169,7 @@
"hololake.personaRuntime.gitHead": "Git evidence", "hololake.personaRuntime.gitHead": "Git evidence",
"hololake.personaRuntime.eventChain": "Event chain head", "hololake.personaRuntime.eventChain": "Event chain head",
"hololake.personaRuntime.attribution": "Human responsibility", "hololake.personaRuntime.attribution": "Human responsibility",
"hololake.personaRuntime.readOnly": "Read-only projection · no execution action" "hololake.personaRuntime.readOnly": "Read-only projection · no execution action",
"hololake.personaAuthorization.systemDirect": "System direct · no trusted authorization signer is registered",
"hololake.personaAuthorization.unavailable": "Authorization status unverifiable · remaining system direct"
} }

View file

@ -1169,5 +1169,7 @@
"hololake.personaRuntime.gitHead": "Git evidence", "hololake.personaRuntime.gitHead": "Git evidence",
"hololake.personaRuntime.eventChain": "Event chain head", "hololake.personaRuntime.eventChain": "Event chain head",
"hololake.personaRuntime.attribution": "Human responsibility", "hololake.personaRuntime.attribution": "Human responsibility",
"hololake.personaRuntime.readOnly": "Read-only projection · no execution action" "hololake.personaRuntime.readOnly": "Read-only projection · no execution action",
"hololake.personaAuthorization.systemDirect": "System direct · no trusted authorization signer is registered",
"hololake.personaAuthorization.unavailable": "Authorization status unverifiable · remaining system direct"
} }

View file

@ -1169,5 +1169,7 @@
"hololake.personaRuntime.gitHead": "Git evidence", "hololake.personaRuntime.gitHead": "Git evidence",
"hololake.personaRuntime.eventChain": "Event chain head", "hololake.personaRuntime.eventChain": "Event chain head",
"hololake.personaRuntime.attribution": "Human responsibility", "hololake.personaRuntime.attribution": "Human responsibility",
"hololake.personaRuntime.readOnly": "Read-only projection · no execution action" "hololake.personaRuntime.readOnly": "Read-only projection · no execution action",
"hololake.personaAuthorization.systemDirect": "System direct · no trusted authorization signer is registered",
"hololake.personaAuthorization.unavailable": "Authorization status unverifiable · remaining system direct"
} }

View file

@ -1169,5 +1169,7 @@
"hololake.personaRuntime.gitHead": "Git evidence", "hololake.personaRuntime.gitHead": "Git evidence",
"hololake.personaRuntime.eventChain": "Event chain head", "hololake.personaRuntime.eventChain": "Event chain head",
"hololake.personaRuntime.attribution": "Human responsibility", "hololake.personaRuntime.attribution": "Human responsibility",
"hololake.personaRuntime.readOnly": "Read-only projection · no execution action" "hololake.personaRuntime.readOnly": "Read-only projection · no execution action",
"hololake.personaAuthorization.systemDirect": "System direct · no trusted authorization signer is registered",
"hololake.personaAuthorization.unavailable": "Authorization status unverifiable · remaining system direct"
} }

View file

@ -1169,5 +1169,7 @@
"hololake.personaRuntime.gitHead": "Git evidence", "hololake.personaRuntime.gitHead": "Git evidence",
"hololake.personaRuntime.eventChain": "Event chain head", "hololake.personaRuntime.eventChain": "Event chain head",
"hololake.personaRuntime.attribution": "Human responsibility", "hololake.personaRuntime.attribution": "Human responsibility",
"hololake.personaRuntime.readOnly": "Read-only projection · no execution action" "hololake.personaRuntime.readOnly": "Read-only projection · no execution action",
"hololake.personaAuthorization.systemDirect": "System direct · no trusted authorization signer is registered",
"hololake.personaAuthorization.unavailable": "Authorization status unverifiable · remaining system direct"
} }

View file

@ -1169,5 +1169,7 @@
"hololake.personaRuntime.gitHead": "Git evidence", "hololake.personaRuntime.gitHead": "Git evidence",
"hololake.personaRuntime.eventChain": "Event chain head", "hololake.personaRuntime.eventChain": "Event chain head",
"hololake.personaRuntime.attribution": "Human responsibility", "hololake.personaRuntime.attribution": "Human responsibility",
"hololake.personaRuntime.readOnly": "Read-only projection · no execution action" "hololake.personaRuntime.readOnly": "Read-only projection · no execution action",
"hololake.personaAuthorization.systemDirect": "System direct · no trusted authorization signer is registered",
"hololake.personaAuthorization.unavailable": "Authorization status unverifiable · remaining system direct"
} }

View file

@ -1169,5 +1169,7 @@
"hololake.personaRuntime.gitHead": "Git evidence", "hololake.personaRuntime.gitHead": "Git evidence",
"hololake.personaRuntime.eventChain": "Event chain head", "hololake.personaRuntime.eventChain": "Event chain head",
"hololake.personaRuntime.attribution": "Human responsibility", "hololake.personaRuntime.attribution": "Human responsibility",
"hololake.personaRuntime.readOnly": "Read-only projection · no execution action" "hololake.personaRuntime.readOnly": "Read-only projection · no execution action",
"hololake.personaAuthorization.systemDirect": "System direct · no trusted authorization signer is registered",
"hololake.personaAuthorization.unavailable": "Authorization status unverifiable · remaining system direct"
} }

View file

@ -1169,5 +1169,7 @@
"hololake.personaRuntime.gitHead": "Git evidence", "hololake.personaRuntime.gitHead": "Git evidence",
"hololake.personaRuntime.eventChain": "Event chain head", "hololake.personaRuntime.eventChain": "Event chain head",
"hololake.personaRuntime.attribution": "Human responsibility", "hololake.personaRuntime.attribution": "Human responsibility",
"hololake.personaRuntime.readOnly": "Read-only projection · no execution action" "hololake.personaRuntime.readOnly": "Read-only projection · no execution action",
"hololake.personaAuthorization.systemDirect": "System direct · no trusted authorization signer is registered",
"hololake.personaAuthorization.unavailable": "Authorization status unverifiable · remaining system direct"
} }

View file

@ -1169,5 +1169,7 @@
"hololake.personaRuntime.gitHead": "Git evidence", "hololake.personaRuntime.gitHead": "Git evidence",
"hololake.personaRuntime.eventChain": "Event chain head", "hololake.personaRuntime.eventChain": "Event chain head",
"hololake.personaRuntime.attribution": "Human responsibility", "hololake.personaRuntime.attribution": "Human responsibility",
"hololake.personaRuntime.readOnly": "Read-only projection · no execution action" "hololake.personaRuntime.readOnly": "Read-only projection · no execution action",
"hololake.personaAuthorization.systemDirect": "System direct · no trusted authorization signer is registered",
"hololake.personaAuthorization.unavailable": "Authorization status unverifiable · remaining system direct"
} }

View file

@ -1169,5 +1169,7 @@
"hololake.personaRuntime.gitHead": "Git evidence", "hololake.personaRuntime.gitHead": "Git evidence",
"hololake.personaRuntime.eventChain": "Event chain head", "hololake.personaRuntime.eventChain": "Event chain head",
"hololake.personaRuntime.attribution": "Human responsibility", "hololake.personaRuntime.attribution": "Human responsibility",
"hololake.personaRuntime.readOnly": "Read-only projection · no execution action" "hololake.personaRuntime.readOnly": "Read-only projection · no execution action",
"hololake.personaAuthorization.systemDirect": "System direct · no trusted authorization signer is registered",
"hololake.personaAuthorization.unavailable": "Authorization status unverifiable · remaining system direct"
} }

View file

@ -1169,5 +1169,7 @@
"hololake.personaRuntime.gitHead": "Git evidence", "hololake.personaRuntime.gitHead": "Git evidence",
"hololake.personaRuntime.eventChain": "Event chain head", "hololake.personaRuntime.eventChain": "Event chain head",
"hololake.personaRuntime.attribution": "Human responsibility", "hololake.personaRuntime.attribution": "Human responsibility",
"hololake.personaRuntime.readOnly": "Read-only projection · no execution action" "hololake.personaRuntime.readOnly": "Read-only projection · no execution action",
"hololake.personaAuthorization.systemDirect": "System direct · no trusted authorization signer is registered",
"hololake.personaAuthorization.unavailable": "Authorization status unverifiable · remaining system direct"
} }

View file

@ -1169,5 +1169,7 @@
"hololake.personaRuntime.gitHead": "Git evidence", "hololake.personaRuntime.gitHead": "Git evidence",
"hololake.personaRuntime.eventChain": "Event chain head", "hololake.personaRuntime.eventChain": "Event chain head",
"hololake.personaRuntime.attribution": "Human responsibility", "hololake.personaRuntime.attribution": "Human responsibility",
"hololake.personaRuntime.readOnly": "Read-only projection · no execution action" "hololake.personaRuntime.readOnly": "Read-only projection · no execution action",
"hololake.personaAuthorization.systemDirect": "System direct · no trusted authorization signer is registered",
"hololake.personaAuthorization.unavailable": "Authorization status unverifiable · remaining system direct"
} }

View file

@ -1169,5 +1169,7 @@
"hololake.personaRuntime.gitHead": "Git evidence", "hololake.personaRuntime.gitHead": "Git evidence",
"hololake.personaRuntime.eventChain": "Event chain head", "hololake.personaRuntime.eventChain": "Event chain head",
"hololake.personaRuntime.attribution": "Human responsibility", "hololake.personaRuntime.attribution": "Human responsibility",
"hololake.personaRuntime.readOnly": "Read-only projection · no execution action" "hololake.personaRuntime.readOnly": "Read-only projection · no execution action",
"hololake.personaAuthorization.systemDirect": "System direct · no trusted authorization signer is registered",
"hololake.personaAuthorization.unavailable": "Authorization status unverifiable · remaining system direct"
} }

View file

@ -1169,5 +1169,7 @@
"hololake.personaRuntime.gitHead": "Git evidence", "hololake.personaRuntime.gitHead": "Git evidence",
"hololake.personaRuntime.eventChain": "Event chain head", "hololake.personaRuntime.eventChain": "Event chain head",
"hololake.personaRuntime.attribution": "Human responsibility", "hololake.personaRuntime.attribution": "Human responsibility",
"hololake.personaRuntime.readOnly": "Read-only projection · no execution action" "hololake.personaRuntime.readOnly": "Read-only projection · no execution action",
"hololake.personaAuthorization.systemDirect": "System direct · no trusted authorization signer is registered",
"hololake.personaAuthorization.unavailable": "Authorization status unverifiable · remaining system direct"
} }

View file

@ -1169,5 +1169,7 @@
"hololake.personaRuntime.gitHead": "Git 证据", "hololake.personaRuntime.gitHead": "Git 证据",
"hololake.personaRuntime.eventChain": "事件链头", "hololake.personaRuntime.eventChain": "事件链头",
"hololake.personaRuntime.attribution": "人类责任主体", "hololake.personaRuntime.attribution": "人类责任主体",
"hololake.personaRuntime.readOnly": "只读投影 · 不触发执行动作" "hololake.personaRuntime.readOnly": "只读投影 · 不触发执行动作",
"hololake.personaAuthorization.systemDirect": "系统直连 · 当前没有可信授权签名方",
"hololake.personaAuthorization.unavailable": "授权状态不可核验 · 保持系统直连"
} }

View file

@ -1169,5 +1169,7 @@
"hololake.personaRuntime.gitHead": "Git evidence", "hololake.personaRuntime.gitHead": "Git evidence",
"hololake.personaRuntime.eventChain": "Event chain head", "hololake.personaRuntime.eventChain": "Event chain head",
"hololake.personaRuntime.attribution": "Human responsibility", "hololake.personaRuntime.attribution": "Human responsibility",
"hololake.personaRuntime.readOnly": "Read-only projection · no execution action" "hololake.personaRuntime.readOnly": "Read-only projection · no execution action",
"hololake.personaAuthorization.systemDirect": "System direct · no trusted authorization signer is registered",
"hololake.personaAuthorization.unavailable": "Authorization status unverifiable · remaining system direct"
} }

View file

@ -39,6 +39,22 @@ export type NativePersonaControlAuthorizationVerification = {
authorizationEnabled: true authorizationEnabled: true
} }
export type PersonaControlAuthorizationStatus =
| {
phase: 'system_direct'
reason: 'NO_TRUSTED_SIGNER'
sourceCommit: string
signerCount: 0
authorizationEnabled: false
}
| {
phase: 'unavailable'
reason: string
sourceCommit: null
signerCount: 0
authorizationEnabled: false
}
function isRecord(value: unknown): value is Record<string, unknown> { function isRecord(value: unknown): value is Record<string, unknown> {
return typeof value === 'object' && value !== null && !Array.isArray(value) return typeof value === 'object' && value !== null && !Array.isArray(value)
} }
@ -62,3 +78,58 @@ export function hasPersonaPrimaryControlAuthorization(
&& typeof signerId === 'string' && typeof signerId === 'string'
&& /^[A-Z0-9][A-Z0-9._:@-]{1,159}$/.test(signerId) && /^[A-Z0-9][A-Z0-9._:@-]{1,159}$/.test(signerId)
} }
/**
* Projects only the currently published empty-trust registry state. A future
* non-empty registry is not interpreted here because signer presence alone is
* never persona-control authorization.
*/
export function parsePersonaControlAuthorizationStatus(
receipt: unknown,
): PersonaControlAuthorizationStatus {
if (!isRecord(receipt) || Object.keys(receipt).length !== 5) {
return unavailableStatus('REGISTRY_RECEIPT_INVALID')
}
const sourceCommit = Reflect.get(receipt, 'sourceCommit')
if (
exactString(receipt, 'status', 'CURRENT_EMPTY')
&& Reflect.get(receipt, 'reason') === null
&& typeof sourceCommit === 'string'
&& /^[a-f0-9]{40}([a-f0-9]{24})?$/.test(sourceCommit)
&& Reflect.get(receipt, 'signerCount') === 0
&& Reflect.get(receipt, 'authorizationEnabled') === false
) {
return {
phase: 'system_direct',
reason: 'NO_TRUSTED_SIGNER',
sourceCommit,
signerCount: 0,
authorizationEnabled: false,
}
}
const reason = Reflect.get(receipt, 'reason')
return unavailableStatus(typeof reason === 'string' && reason ? reason : 'REGISTRY_RECEIPT_INVALID')
}
function unavailableStatus(reason: string): PersonaControlAuthorizationStatus {
return {
phase: 'unavailable',
reason,
sourceCommit: null,
signerCount: 0,
authorizationEnabled: false,
}
}
export async function loadPersonaControlAuthorizationStatus(): Promise<PersonaControlAuthorizationStatus> {
try {
const receipt = isTauri()
? await invoke<unknown>('load_persona_control_authorization_registry')
: await mockInvoke<unknown>('load_persona_control_authorization_registry')
return parsePersonaControlAuthorizationStatus(receipt)
} catch {
return unavailableStatus('REGISTRY_UNAVAILABLE')
}
}
import { invoke } from '@tauri-apps/api/core'
import { isTauri, mockInvoke } from '../mock-tauri'

View file

@ -0,0 +1,53 @@
import { describe, expect, it } from 'vitest'
import { parsePersonaControlAuthorizationStatus } from './personaControlAuthorization'
const currentEmpty = {
status: 'CURRENT_EMPTY',
reason: null,
sourceCommit: 'a'.repeat(40),
signerCount: 0,
authorizationEnabled: false,
}
describe('persona-control authorization status projection', () => {
it('projects only the exact native empty-trust receipt as system-direct', () => {
expect(parsePersonaControlAuthorizationStatus(currentEmpty)).toEqual({
phase: 'system_direct',
reason: 'NO_TRUSTED_SIGNER',
sourceCommit: 'a'.repeat(40),
signerCount: 0,
authorizationEnabled: false,
})
})
it.each([
['extra field', { ...currentEmpty, trusted: true }],
['non-empty registry', { ...currentEmpty, status: 'CURRENT', signerCount: 1 }],
['authorization enabled', { ...currentEmpty, authorizationEnabled: true }],
['invalid commit', { ...currentEmpty, sourceCommit: 'main' }],
])('fails closed for %s', (_label, receipt) => {
expect(parsePersonaControlAuthorizationStatus(receipt)).toEqual({
phase: 'unavailable',
reason: 'REGISTRY_RECEIPT_INVALID',
sourceCommit: null,
signerCount: 0,
authorizationEnabled: false,
})
})
it('preserves a bounded native unavailable reason without creating authority', () => {
expect(parsePersonaControlAuthorizationStatus({
status: 'UNAVAILABLE',
reason: 'ANCHOR_FETCH_FAILED',
sourceCommit: null,
signerCount: 0,
authorizationEnabled: false,
})).toEqual({
phase: 'unavailable',
reason: 'ANCHOR_FETCH_FAILED',
sourceCommit: null,
signerCount: 0,
authorizationEnabled: false,
})
})
})

View file

@ -32,7 +32,7 @@ test("current JD state stays transitional and cannot impersonate final master co
}); });
test("current architecture and global engineering rules project the same control contract", () => { test("current architecture and global engineering rules project the same control contract", () => {
assert.equal(architecture.version, "2026-08-12.4"); assert.equal(architecture.version, "2026-08-12.16");
assert.equal(architecture.server_os_control.machine_projection, "routing/guanghu-os-control-architecture.json"); assert.equal(architecture.server_os_control.machine_projection, "routing/guanghu-os-control-architecture.json");
assert.equal(architecture.server_os_control.final_topology, contract.final_topology); assert.equal(architecture.server_os_control.final_topology, contract.final_topology);
assert.equal(rules.server_os_control.linux_deletion_is_completion, false); assert.equal(rules.server_os_control.linux_deletion_is_completion, false);

View file

@ -11,7 +11,7 @@ const architecture = readJson("routing/hololake-current-architecture.json");
const age = readJson("routing/hololake-age-runtime-architecture.json"); const age = readJson("routing/hololake-age-runtime-architecture.json");
test("current architecture starts with the AGE runtime source", () => { test("current architecture starts with the AGE runtime source", () => {
assert.equal(architecture.version, "2026-08-12.4"); assert.equal(architecture.version, "2026-08-12.16");
assert.equal(architecture.age_runtime.record_id, "HLP-AGE-RUNTIME-ARCHITECTURE-001"); assert.equal(architecture.age_runtime.record_id, "HLP-AGE-RUNTIME-ARCHITECTURE-001");
assert.equal(architecture.read_order[0], architecture.paradigm_ai_language_persona_os.architecture_page); assert.equal(architecture.read_order[0], architecture.paradigm_ai_language_persona_os.architecture_page);
assert.equal(architecture.read_order[1], architecture.cognitive_gravity_and_continuity.architecture_page); assert.equal(architecture.read_order[1], architecture.cognitive_gravity_and_continuity.architecture_page);

View file

@ -1,7 +1,7 @@
{ {
"schema": "hololake.cognitive-gravity-and-continuity/v1", "schema": "hololake.cognitive-gravity-and-continuity/v1",
"record_id": "HLP-COGNITIVE-GRAVITY-CONTINUITY-001", "record_id": "HLP-COGNITIVE-GRAVITY-CONTINUITY-001",
"version": "2026-08-12.4", "version": "2026-08-12.5",
"state": "CURRENT_CANONICAL_ARCHITECTURE_STAGE_0_SOURCE_PARTIAL", "state": "CURRENT_CANONICAL_ARCHITECTURE_STAGE_0_SOURCE_PARTIAL",
"development_id": "DEV-20260811-010", "development_id": "DEV-20260811-010",
"upstream": { "upstream": {
@ -106,7 +106,8 @@
"PARTNER_DELIBERATION_TO_PNCC_LIFECYCLE_SOURCE_ADAPTER", "PARTNER_DELIBERATION_TO_PNCC_LIFECYCLE_SOURCE_ADAPTER",
"READ_ONLY_PERSONA_REPOSITORY_BINDING_DISCOVERY", "READ_ONLY_PERSONA_REPOSITORY_BINDING_DISCOVERY",
"EVIDENCE_BOUND_PERSONA_LANGUAGE_WAKE_COMPILER", "EVIDENCE_BOUND_PERSONA_LANGUAGE_WAKE_COMPILER",
"FAIL_CLOSED_PERSONA_LANGUAGE_SHELL_CONTROLLER" "FAIL_CLOSED_PERSONA_LANGUAGE_SHELL_CONTROLLER",
"READ_ONLY_EMPTY_TRUST_AUTHORIZATION_STATUS_PROJECTION"
], ],
"natural_language_entry_contract": { "natural_language_entry_contract": {
"state": "DESKTOP_SOURCE_MOUNTED_NOT_REAL_MANIFEST_BOUND_NOT_RUNTIME_ACCEPTED", "state": "DESKTOP_SOURCE_MOUNTED_NOT_REAL_MANIFEST_BOUND_NOT_RUNTIME_ACCEPTED",
@ -123,10 +124,12 @@
"language_shell_controller_tests": "product-source/hololake-platform/src/lib/personaLanguageShellController.test.ts", "language_shell_controller_tests": "product-source/hololake-platform/src/lib/personaLanguageShellController.test.ts",
"persona_control_authorization_receipt": "product-source/hololake-platform/src/lib/personaControlAuthorization.ts", "persona_control_authorization_receipt": "product-source/hololake-platform/src/lib/personaControlAuthorization.ts",
"persona_control_authorization_receipt_tests": "product-source/hololake-platform/src/lib/personaControlAuthorization.test.ts", "persona_control_authorization_receipt_tests": "product-source/hololake-platform/src/lib/personaControlAuthorization.test.ts",
"persona_control_authorization_status_projection_tests": "product-source/hololake-platform/src/lib/personaControlAuthorizationStatus.test.ts",
"desktop_language_shell": "product-source/hololake-platform/src/components/PersonaLanguageShellPanel.tsx", "desktop_language_shell": "product-source/hololake-platform/src/components/PersonaLanguageShellPanel.tsx",
"desktop_language_shell_tests": "product-source/hololake-platform/src/components/PersonaLanguageShellPanel.test.tsx", "desktop_language_shell_tests": "product-source/hololake-platform/src/components/PersonaLanguageShellPanel.test.tsx",
"human_utterance_is_direct_command": false, "human_utterance_is_direct_command": false,
"caller_supplied_persona_authorization_boolean_allowed": false, "caller_supplied_persona_authorization_boolean_allowed": false,
"candidate_authorization_receipt_source_mounted": false,
"required_before_capability_execution": [ "required_before_capability_execution": [
"RESTORE_REAL_PURPOSE_FROM_CONTEXT", "RESTORE_REAL_PURPOSE_FROM_CONTEXT",
"ASSESS_REQUEST_VALIDITY", "ASSESS_REQUEST_VALIDITY",
@ -176,7 +179,9 @@
"native_persona_control_authorization_registry_loader_source_integrated": 100, "native_persona_control_authorization_registry_loader_source_integrated": 100,
"native_persona_control_authorization_receipt_verifier_source_integrated": 100, "native_persona_control_authorization_receipt_verifier_source_integrated": 100,
"native_persona_control_authorization_verifier_wired_to_language_controller_source": 100, "native_persona_control_authorization_verifier_wired_to_language_controller_source": 100,
"persona_control_authorization_read_only_status_projection_source_integrated": 100,
"persona_control_authorization_trusted_signer_registered": 0, "persona_control_authorization_trusted_signer_registered": 0,
"persona_control_authorization_candidate_receipt_source_mounted": 0,
"desktop_language_entry_source_integrated": 100, "desktop_language_entry_source_integrated": 100,
"persona_control_authorization_runtime_integrated": 0, "persona_control_authorization_runtime_integrated": 0,
"real_persona_repository_manifest_bound": 0, "real_persona_repository_manifest_bound": 0,

View file

@ -14,7 +14,7 @@ const age = readJson("routing/hololake-age-runtime-architecture.json");
const rules = readJson("routing/hololake-engineering-rules.json"); const rules = readJson("routing/hololake-engineering-rules.json");
test("B0 is restored before product organs and remains resident in every cognition step", () => { test("B0 is restored before product organs and remains resident in every cognition step", () => {
assert.equal(architecture.version, "2026-08-12.15"); assert.equal(architecture.version, "2026-08-12.16");
assert.equal( assert.equal(
architecture.read_order[1], architecture.read_order[1],
architecture.cognitive_gravity_and_continuity.architecture_page, architecture.cognitive_gravity_and_continuity.architecture_page,
@ -102,7 +102,9 @@ test("the first implementation stage is one vertical AGE loop, not Mirror parall
assert.equal(gravity.truth.native_persona_control_authorization_registry_loader_source_integrated, 100); assert.equal(gravity.truth.native_persona_control_authorization_registry_loader_source_integrated, 100);
assert.equal(gravity.truth.native_persona_control_authorization_receipt_verifier_source_integrated, 100); assert.equal(gravity.truth.native_persona_control_authorization_receipt_verifier_source_integrated, 100);
assert.equal(gravity.truth.native_persona_control_authorization_verifier_wired_to_language_controller_source, 100); assert.equal(gravity.truth.native_persona_control_authorization_verifier_wired_to_language_controller_source, 100);
assert.equal(gravity.truth.persona_control_authorization_read_only_status_projection_source_integrated, 100);
assert.equal(gravity.truth.persona_control_authorization_trusted_signer_registered, 0); assert.equal(gravity.truth.persona_control_authorization_trusted_signer_registered, 0);
assert.equal(gravity.truth.persona_control_authorization_candidate_receipt_source_mounted, 0);
assert.equal(gravity.truth.desktop_language_entry_source_integrated, 100); assert.equal(gravity.truth.desktop_language_entry_source_integrated, 100);
assert.equal(gravity.truth.persona_control_authorization_runtime_integrated, 0); assert.equal(gravity.truth.persona_control_authorization_runtime_integrated, 0);
assert.equal(architecture.interaction_model.source_contract.receipt_shape_validation_is_authority_proof, false); assert.equal(architecture.interaction_model.source_contract.receipt_shape_validation_is_authority_proof, false);
@ -113,6 +115,8 @@ test("the first implementation stage is one vertical AGE loop, not Mirror parall
assert.equal(architecture.interaction_model.source_contract.native_authorization_registry_loader_integrated, true); assert.equal(architecture.interaction_model.source_contract.native_authorization_registry_loader_integrated, true);
assert.equal(architecture.interaction_model.source_contract.native_authorization_receipt_loader_integrated, true); assert.equal(architecture.interaction_model.source_contract.native_authorization_receipt_loader_integrated, true);
assert.equal(architecture.interaction_model.source_contract.native_authorization_verifier_wired_to_language_controller, true); assert.equal(architecture.interaction_model.source_contract.native_authorization_verifier_wired_to_language_controller, true);
assert.equal(architecture.interaction_model.source_contract.read_only_empty_trust_status_projection_integrated, true);
assert.equal(architecture.interaction_model.source_contract.candidate_authorization_receipt_source_mounted, false);
assert.equal(gravity.truth.real_persona_repository_manifest_bound, 0); assert.equal(gravity.truth.real_persona_repository_manifest_bound, 0);
assert.equal(gravity.truth.natural_language_partner_adapter_runtime_integrated, 0); assert.equal(gravity.truth.natural_language_partner_adapter_runtime_integrated, 0);
assert.equal(gravity.truth.single_age_vertical_loop_implemented, 0); assert.equal(gravity.truth.single_age_vertical_loop_implemented, 0);

View file

@ -1,7 +1,7 @@
{ {
"schema": "hololake.current-architecture/v1", "schema": "hololake.current-architecture/v1",
"architecture_id": "HLP-CURRENT-ARCH-001", "architecture_id": "HLP-CURRENT-ARCH-001",
"version": "2026-08-12.15", "version": "2026-08-12.16",
"state": "CURRENT_CANONICAL", "state": "CURRENT_CANONICAL",
"product": { "product": {
"formal_name": "光湖语言系统 · 通用人工智能操作平台", "formal_name": "光湖语言系统 · 通用人工智能操作平台",
@ -122,7 +122,9 @@
"native_persona_control_authorization_registry_loader_source_integrated": true, "native_persona_control_authorization_registry_loader_source_integrated": true,
"native_persona_control_authorization_receipt_verifier_source_integrated": true, "native_persona_control_authorization_receipt_verifier_source_integrated": true,
"native_persona_control_authorization_verifier_wired_to_language_controller_source": true, "native_persona_control_authorization_verifier_wired_to_language_controller_source": true,
"persona_control_authorization_read_only_status_projection_source_integrated": true,
"persona_control_authorization_trusted_signer_registered": false, "persona_control_authorization_trusted_signer_registered": false,
"persona_control_authorization_candidate_receipt_source_mounted": false,
"desktop_language_entry_source_integrated": true, "desktop_language_entry_source_integrated": true,
"persona_control_authorization_runtime_integrated": false, "persona_control_authorization_runtime_integrated": false,
"real_persona_repository_manifest_bound": false, "real_persona_repository_manifest_bound": false,
@ -394,6 +396,7 @@
"pncc_lifecycle_adapter_tests": "product-source/hololake-platform/src/lib/personaLanguageGoal.test.ts", "pncc_lifecycle_adapter_tests": "product-source/hololake-platform/src/lib/personaLanguageGoal.test.ts",
"persona_control_authorization_receipt": "product-source/hololake-platform/src/lib/personaControlAuthorization.ts", "persona_control_authorization_receipt": "product-source/hololake-platform/src/lib/personaControlAuthorization.ts",
"persona_control_authorization_receipt_tests": "product-source/hololake-platform/src/lib/personaControlAuthorization.test.ts", "persona_control_authorization_receipt_tests": "product-source/hololake-platform/src/lib/personaControlAuthorization.test.ts",
"persona_control_authorization_status_projection_tests": "product-source/hololake-platform/src/lib/personaControlAuthorizationStatus.test.ts",
"persona_control_authorization_signer_registry_and_verifier": "product-source/guanghu-knowledge-base/server/persona-control-authorization.ts", "persona_control_authorization_signer_registry_and_verifier": "product-source/guanghu-knowledge-base/server/persona-control-authorization.ts",
"persona_control_authorization_signer_registry_and_verifier_tests": "product-source/guanghu-knowledge-base/server/persona-control-authorization.test.ts", "persona_control_authorization_signer_registry_and_verifier_tests": "product-source/guanghu-knowledge-base/server/persona-control-authorization.test.ts",
"native_persona_control_authorization_registry_loader": "product-source/hololake-platform/src-tauri/src/persona_control_authorization.rs", "native_persona_control_authorization_registry_loader": "product-source/hololake-platform/src-tauri/src/persona_control_authorization.rs",
@ -411,6 +414,8 @@
"native_authorization_registry_loader_integrated": true, "native_authorization_registry_loader_integrated": true,
"native_authorization_receipt_loader_integrated": true, "native_authorization_receipt_loader_integrated": true,
"native_authorization_verifier_wired_to_language_controller": true, "native_authorization_verifier_wired_to_language_controller": true,
"read_only_empty_trust_status_projection_integrated": true,
"candidate_authorization_receipt_source_mounted": false,
"partner_deliberation_required": true, "partner_deliberation_required": true,
"human_utterance_is_direct_command": false, "human_utterance_is_direct_command": false,
"allowed_dispositions": [ "allowed_dispositions": [
@ -423,7 +428,8 @@
"authorization_focused_tests": "11_OF_11_PASS", "authorization_focused_tests": "11_OF_11_PASS",
"language_controller_authorization_wiring_tests": "10_OF_10_PASS", "language_controller_authorization_wiring_tests": "10_OF_10_PASS",
"authorization_cryptographic_tests": "7_OF_7_PASS", "authorization_cryptographic_tests": "7_OF_7_PASS",
"native_authorization_registry_and_receipt_verifier_tests": "6_OF_6_PASS" "native_authorization_registry_and_receipt_verifier_tests": "6_OF_6_PASS",
"authorization_status_projection_tests": "6_OF_6_PASS"
}, },
"ui_plugin_system": { "ui_plugin_system": {
"record_id": "HLP-HOT-PLUGGABLE-UI-001", "record_id": "HLP-HOT-PLUGGABLE-UI-001",

View file

@ -10,7 +10,7 @@ const architecture = readJson("routing/hololake-current-architecture.json");
const rules = readJson("routing/hololake-engineering-rules.json"); const rules = readJson("routing/hololake-engineering-rules.json");
test("current architecture registers the global engineering rule set", () => { test("current architecture registers the global engineering rule set", () => {
assert.equal(architecture.version, "2026-08-12.4"); assert.equal(architecture.version, "2026-08-12.16");
assert.equal(architecture.engineering_rules.rule_set_id, "HLP-ENGINEERING-RULES-001"); assert.equal(architecture.engineering_rules.rule_set_id, "HLP-ENGINEERING-RULES-001");
assert.equal(architecture.engineering_rules.machine_projection, assert.equal(architecture.engineering_rules.machine_projection,
"routing/hololake-engineering-rules.json"); "routing/hololake-engineering-rules.json");

View file

@ -10,7 +10,7 @@ const architecture = readJson("routing/hololake-current-architecture.json");
const projection = readJson("routing/hololake-identity-authority-map.json"); const projection = readJson("routing/hololake-identity-authority-map.json");
test("current architecture loads identity authority before product surfaces", () => { test("current architecture loads identity authority before product surfaces", () => {
assert.equal(architecture.version, "2026-08-12.4"); assert.equal(architecture.version, "2026-08-12.16");
assert.equal(architecture.identity_and_authority.team_body, "TCS-0002"); assert.equal(architecture.identity_and_authority.team_body, "TCS-0002");
assert.equal(architecture.identity_and_authority.team_body_authority_effective, true); assert.equal(architecture.identity_and_authority.team_body_authority_effective, true);
assert.equal(architecture.identity_and_authority.individual_operator_acceptance, "SEPARATE_UNCONFIRMED"); assert.equal(architecture.identity_and_authority.individual_operator_acceptance, "SEPARATE_UNCONFIRMED");

View file

@ -10,7 +10,7 @@ const architecture = readJson("routing/hololake-current-architecture.json");
const rules = readJson("routing/hololake-engineering-rules.json"); const rules = readJson("routing/hololake-engineering-rules.json");
test("current architecture makes one human one independently operated node canonical", () => { test("current architecture makes one human one independently operated node canonical", () => {
assert.equal(architecture.version, "2026-08-12.4"); assert.equal(architecture.version, "2026-08-12.16");
assert.deepEqual(architecture.access_modes, [ assert.deepEqual(architecture.access_modes, [
"LOCAL_TERMINAL_NODE", "LOCAL_TERMINAL_NODE",
"USER_OWNED_REMOTE_NODE", "USER_OWNED_REMOTE_NODE",

View file

@ -10,7 +10,7 @@ const architecture = readJson("routing/hololake-current-architecture.json");
const paradigm = readJson("routing/hololake-paradigm-ai-language-persona-os.json"); const paradigm = readJson("routing/hololake-paradigm-ai-language-persona-os.json");
test("current architecture begins with the paradigm OS contract", () => { test("current architecture begins with the paradigm OS contract", () => {
assert.equal(architecture.version, "2026-08-12.4"); assert.equal(architecture.version, "2026-08-12.16");
assert.equal(architecture.paradigm_ai_language_persona_os.record_id, "HLP-PARADIGM-AI-LANGUAGE-PERSONA-OS-001"); assert.equal(architecture.paradigm_ai_language_persona_os.record_id, "HLP-PARADIGM-AI-LANGUAGE-PERSONA-OS-001");
assert.equal(architecture.read_order[0], architecture.paradigm_ai_language_persona_os.architecture_page); assert.equal(architecture.read_order[0], architecture.paradigm_ai_language_persona_os.architecture_page);
assert.equal(paradigm.upstream.repository_commit, "34cb59739b6476981375dd62ef395ea649f56246"); assert.equal(paradigm.upstream.repository_commit, "34cb59739b6476981375dd62ef395ea649f56246");

View file

@ -11,7 +11,7 @@ const architecture = readJson("routing/hololake-current-architecture.json");
const channel = readJson("routing/hololake-persona-native-code-channel.json"); const channel = readJson("routing/hololake-persona-native-code-channel.json");
test("current architecture places the persona-native code channel after the paradigm contract", () => { test("current architecture places the persona-native code channel after the paradigm contract", () => {
assert.equal(architecture.version, "2026-08-12.4"); assert.equal(architecture.version, "2026-08-12.16");
assert.equal( assert.equal(
architecture.persona_native_code_channel.record_id, architecture.persona_native_code_channel.record_id,
"HLP-PERSONA-NATIVE-CODE-CHANNEL-001", "HLP-PERSONA-NATIVE-CODE-CHANNEL-001",

View file

@ -10,7 +10,7 @@ const architecture = JSON.parse(
); );
test("current architecture binds relational consciousness before product surfaces", () => { test("current architecture binds relational consciousness before product surfaces", () => {
assert.equal(architecture.version, "2026-08-12.4"); assert.equal(architecture.version, "2026-08-12.16");
assert.equal( assert.equal(
architecture.persona_consciousness.record_id, architecture.persona_consciousness.record_id,
"HLP-RELATIONAL-CONSCIOUSNESS-001", "HLP-RELATIONAL-CONSCIOUSNESS-001",

View file

@ -10,7 +10,7 @@ const architecture = JSON.parse(
); );
test("current architecture restores the digital BingShuo system body first", () => { test("current architecture restores the digital BingShuo system body first", () => {
assert.equal(architecture.version, "2026-08-12.4"); assert.equal(architecture.version, "2026-08-12.16");
assert.equal(architecture.digital_bingshuo_system_body.upstream_repository_commit, assert.equal(architecture.digital_bingshuo_system_body.upstream_repository_commit,
"69d1910775533b02b17b82e647b5caca8b835614"); "69d1910775533b02b17b82e647b5caca8b835614");
const systemBodyIndex = architecture.read_order.indexOf( const systemBodyIndex = architecture.read_order.indexOf(