@@ -237,7 +250,7 @@ export function GuanghuWorldLoginGate({
{state.error ? (
{t('hololake.login.errorTitle')}
-
{state.error}
+
{loginErrorCopy(state.error)}
@@ -259,10 +272,10 @@ export function GuanghuWorldLoginGate({
diff --git a/product-source/hololake-platform/src/components/HoloLakeHome.test.tsx b/product-source/hololake-platform/src/components/HoloLakeHome.test.tsx
index 58f8766..9f77f05 100644
--- a/product-source/hololake-platform/src/components/HoloLakeHome.test.tsx
+++ b/product-source/hololake-platform/src/components/HoloLakeHome.test.tsx
@@ -170,7 +170,7 @@ describe('HoloLakeHome', () => {
fireEvent.click(screen.getByRole('button', { name: /验证并进入第五域/ }))
expect(screen.getByRole('button', { name: /冰朔,访客入口 · 未验证/ })).toBeInTheDocument()
- fireEvent.click(screen.getByRole('button', { name: /光湖主域.*稳定运行/ }))
+ fireEvent.click(screen.getByRole('button', { name: /光湖主域.*等待公共回执/ }))
expect(screen.getByRole('heading', { name: '光湖主域' })).toBeInTheDocument()
expect(screen.getByRole('button', { name: '当前入口尚未开放' })).toBeDisabled()
expect(screen.queryByRole('button', { name: /给我发送授权链接/ })).not.toBeInTheDocument()
@@ -361,6 +361,24 @@ describe('HoloLakeHome', () => {
expect(screen.getByRole('heading', { name: '心跳核心频道' })).toBeInTheDocument()
})
+ it('labels the forced online browser route as a visual preview, not a live receipt', () => {
+ useGuanghuWorldLoginMock.mockReturnValue(worldLogin('online', {
+ state: {
+ ...worldLogin('online').state,
+ navigation: { domains: 5, map_hash: 'local-visual-preview' },
+ workorderId: 'local-visual-preview',
+ },
+ }))
+
+ render(
)
+ fireEvent.click(screen.getByRole('button', { name: /进入第五域/ }))
+
+ expect(screen.getAllByText('本地拓扑预览').length).toBeGreaterThan(0)
+ expect(screen.getAllByText('未实时核验').length).toBeGreaterThan(0)
+ expect(screen.getByText('本页仅展示本地登记拓扑,不能证明节点在线或人格体已恢复。')).toBeInTheDocument()
+ expect(screen.queryByText('在线回执')).not.toBeInTheDocument()
+ })
+
it('shows receipt-backed Eternal Lake information without invented resonance scores', () => {
useGuanghuRouterMock.mockReturnValue(onlineRouter())
@@ -505,6 +523,33 @@ describe('HoloLakeHome', () => {
expect(screen.getByRole('button', { name: '重新尝试' })).toBeInTheDocument()
})
+ it('translates a browser preview limitation into human recovery guidance', () => {
+ useGuanghuWorldLoginMock.mockReturnValue(worldLogin('error', {
+ state: {
+ ...worldLogin('error').state,
+ error: 'guanghu_world_login_desktop_runtime_required',
+ },
+ }))
+
+ render(
)
+
+ fireEvent.click(screen.getByRole('button', { name: /验证并进入第五域/ }))
+ expect(screen.getByRole('alert')).toHaveTextContent('当前是本地视觉预览,未向第五域服务器发送登录请求。')
+ expect(screen.getByRole('alert')).toHaveTextContent('请从已签名的 HoloLake 桌面端进入。')
+ expect(screen.queryByText('guanghu_world_login_desktop_runtime_required')).not.toBeInTheDocument()
+ })
+
+ it('does not claim a live world connection before a receipt exists', () => {
+ useGuanghuWorldLoginMock.mockReturnValue(worldLogin('idle'))
+
+ render(
)
+
+ fireEvent.click(screen.getByRole('button', { name: /验证并进入第五域/ }))
+ expect(screen.getByText('世界入口:等待验证')).toBeInTheDocument()
+ expect(screen.getByText('语言共识层:未建立连接')).toBeInTheDocument()
+ expect(screen.queryByText('世界状态:稳定')).not.toBeInTheDocument()
+ })
+
it('opens the public development repository from the entered Heartbeat Core channel', () => {
useGuanghuRouterMock.mockReturnValue(onlineRouter())
diff --git a/product-source/hololake-platform/src/components/HoloLakeHome.tsx b/product-source/hololake-platform/src/components/HoloLakeHome.tsx
index e074fe8..fc4e0a9 100644
--- a/product-source/hololake-platform/src/components/HoloLakeHome.tsx
+++ b/product-source/hololake-platform/src/components/HoloLakeHome.tsx
@@ -115,6 +115,7 @@ export function HoloLakeHome({
const restoreAttempted = useRef(false)
const livingRequestSequence = useRef(0)
const worldOpen = login.state.phase === 'online'
+ const isVisualPreview = login.state.workorderId === 'local-visual-preview'
const fifthDomainOpen = worldOpen && route !== 'world'
const worldRouterState = worldOpen && router.state.status !== 'online'
? {
@@ -325,6 +326,7 @@ export function HoloLakeHome({
if (route === 'fifth-domain') {
return (
navigate('eternal-lake-heart')}
onEnterPufferfish={() => navigate('pufferfish')}
/>
@@ -335,6 +337,7 @@ export function HoloLakeHome({
return (
navigate('eternal-lake-heart')}
onEnterPufferfish={() => navigate('pufferfish')}
/>