feat: mount persona language planning entry
This commit is contained in:
parent
d9abf241a6
commit
5d465115cb
11 changed files with 294 additions and 16 deletions
|
|
@ -102,7 +102,7 @@ REVISE | REFUSE`。
|
|||
- 自然语言伙伴审议与家园完整性门的纯源码编译契约为 `100`:未经审议的原句失败关闭,审议只允许
|
||||
`PROCEED | RESEARCH | REVISE | REFUSE`,并把后三者保持为不可执行状态。
|
||||
- 自然语言到 PNCC 生命周期的源码适配器为 `100`:只接收带独立 `real_purpose` 的完整生命周期回执,
|
||||
不在前端用摘要或关键词猜目标;该适配器尚未挂载桌面语言入口。
|
||||
不在前端用摘要或关键词猜目标;桌面源码现已把它挂入第五域语言入口,但尚无真实 manifest 与安装态验收。
|
||||
- 人格仓库绑定发现源码为 `100`:桌面候选 Git 仓库必须逐一通过 persona ID、manifest、提交头、脑入口、
|
||||
B0、检查点、模型绑定与器官契约核验;零个候选保持未绑定,多个候选保持歧义,均不得自动选择或唤醒。
|
||||
当前官方工作范围内没有发现 `ICE-P-ZY001` 的真实 manifest,因此真实人格仓库绑定仍为 `0`。
|
||||
|
|
@ -113,10 +113,11 @@ REVISE | REFUSE`。
|
|||
该一个规范仓库;未绑定和歧义状态直接保持原义,不再把普通挂载仓库的 manifest 缺失显示为人格运行时
|
||||
回执故障。该门只收束事实读取范围,不创建、选择或唤醒人格仓库。
|
||||
- 人格语言外壳控制器源码为 `100`:它按唯一人格仓库、manifest 固定模型、公开设备身份、精确唤醒绑定、
|
||||
B0 伙伴审议的顺序失败关闭;成功只产生语言目标规划,不提供现实动作执行入口。该控制器尚未挂载到桌面
|
||||
语言外壳,不能据此把运行集成或桌面验收记为完成。
|
||||
- 完整 HoloLake Runtime 与单 AGE 纵向闭环仍为 `0`:桌面语言入口绑定、真实人格仓库 manifest 绑定和
|
||||
桌面运行验收尚未完成,因此不能用本轮源码测试冒充可用产品。
|
||||
B0 伙伴审议的顺序失败关闭;成功只产生语言目标规划,不提供现实动作执行入口。桌面源码接线为 `100`:
|
||||
第五域入口只传入已挂载仓库与已配置模型元数据,并在没有桌面授权回执时保持系统直控、隐藏无法持久消费的
|
||||
确认按钮。该接线不等于真实人格仓库绑定、安装态运行或桌面验收。
|
||||
- 完整 HoloLake Runtime 与单 AGE 纵向闭环仍为 `0`:真实人格仓库 manifest 绑定和桌面运行验收尚未完成,
|
||||
因此不能用本轮源码测试冒充可用产品。
|
||||
- Mirror runner、制品、部署和运行健康:`0`。
|
||||
- 0.8.0 桌面制品与线上 0.4.6 产品源码仍然分叉;本轮架构登记不消除该事实。
|
||||
|
||||
|
|
|
|||
|
|
@ -17,7 +17,9 @@ it does not pretend that deterministic keyword matching can perform persona reas
|
|||
utterance as a bounded `FACT_SENSE` partner-deliberation question, accepts only a completed and schema-valid
|
||||
PNCC lifecycle receipt, maps the eleven-field snake-case gravity frame into `PartnerDeliberation`, and only
|
||||
then calls `compileLanguageGoal`. A failed, malformed, non-fact, or purpose-less receipt never becomes a goal.
|
||||
The adapter is not yet mounted to the desktop language entry and has no live-product acceptance claim.
|
||||
`PersonaLanguageShellPanel` now mounts this adapter in the Fifth Domain desktop source. That source wiring is
|
||||
still gated by a unique manifest-valid persona repository, the manifest-pinned configured model, and public
|
||||
device identity; it has no installed-desktop or live-product acceptance claim.
|
||||
|
||||
`compilePersonaLanguageGoalBinding` builds the exact native wake envelope only after a single clean persona
|
||||
repository, its B0 and organ contracts, a registered local device identity, and the manifest-pinned model all
|
||||
|
|
@ -217,7 +219,10 @@ The source-level authority-order coordinator for one natural-language goal. It f
|
|||
discovery yields one clean persona binding and the configured provider/model matches that repository manifest.
|
||||
Only then may it read the public node identity, compile the exact PNCC wake binding, and request B0 partner
|
||||
deliberation. The result contains a plan and evidence binding only; it exposes no execution callback and performs
|
||||
no reality action. Source implementation is distinct from desktop mounting and native acceptance.
|
||||
no reality action. `PersonaLanguageShellPanel` mounts it through the capability-limited `LanguageShellBridge`,
|
||||
passes only already-mounted Git roots and configured provider metadata, and deliberately keeps persona authority
|
||||
false until a desktop authorization receipt exists. The panel does not expose an approval control because this
|
||||
slice has no durable confirmation consumer. Source mounting remains distinct from native acceptance.
|
||||
|
||||
Key abstractions and domain models in Tolaria.
|
||||
|
||||
|
|
|
|||
|
|
@ -172,8 +172,11 @@ boundary. It resolves exactly one manifest-valid persona repository before selec
|
|||
configured model, reads the public device-identity receipt only after those gates pass, compiles the wake
|
||||
binding, and finally invokes B0 partner deliberation. Unavailable, unbound, ambiguous, model-missing, identity,
|
||||
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. This controller is not yet
|
||||
mounted into the desktop language shell and therefore does not establish runtime integration or acceptance.
|
||||
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
|
||||
configured provider metadata. It keeps `personaAuthorized=false`, exposes no execution callback, and hides the
|
||||
reality confirmation surface because no durable confirmation consumer is wired. This proves source integration,
|
||||
not a real persona manifest binding, installed desktop runtime, or acceptance.
|
||||
|
||||
Tolaria is a personal knowledge and life management desktop app. It reads a vault of markdown files with YAML frontmatter and presents them in a four-panel UI inspired by Bear Notes.
|
||||
|
||||
|
|
|
|||
|
|
@ -1712,7 +1712,7 @@ function MainApp({
|
|||
</>
|
||||
)}
|
||||
<div className={`app__editor${aiActivity.highlightElement === 'editor' || aiActivity.highlightElement === 'tab' ? ' ai-highlight' : ''}`}>
|
||||
{showHoloLakeHome && !isTeamDistribution ? <HoloLakeHome locale={appLocale} repositoryPaths={activeGitRepositoryPaths} livingSystemTarget={aiFeaturesEnabled && quickPromptTargetReady && quickPromptTarget.kind === 'api_model' ? quickPromptTarget : null} onEnterKnowledgeBase={() => setShowHoloLakeHome(false)} onOpenAiWorkspace={openAIChat} onOpenLocalWorkspace={async () => {
|
||||
{showHoloLakeHome && !isTeamDistribution ? <HoloLakeHome locale={appLocale} repositoryPaths={activeGitRepositoryPaths} aiModelProviders={settings.ai_model_providers ?? []} livingSystemTarget={aiFeaturesEnabled && quickPromptTargetReady && quickPromptTarget.kind === 'api_model' ? quickPromptTarget : null} onEnterKnowledgeBase={() => setShowHoloLakeHome(false)} onOpenAiWorkspace={openAIChat} onOpenLocalWorkspace={async () => {
|
||||
await vaultSwitcher.handleOpenLocalFolder()
|
||||
setShowHoloLakeHome(false)
|
||||
}} /> : <Editor
|
||||
|
|
|
|||
|
|
@ -1,6 +1,8 @@
|
|||
import { useState } from 'react'
|
||||
import type { AppLocale } from '../lib/i18n'
|
||||
import type { AiModelProvider } from '../lib/aiTargets'
|
||||
import { Button } from './ui/button'
|
||||
import { PersonaLanguageShellPanel } from './PersonaLanguageShellPanel'
|
||||
import { PersonaRepositoryBindingPanel } from './PersonaRepositoryBindingPanel'
|
||||
import { PersonaRuntimeProjectionPanel } from './PersonaRuntimeProjectionPanel'
|
||||
|
||||
|
|
@ -12,6 +14,7 @@ type FifthDomainSystemsProps = {
|
|||
onEnterEternalLake: () => void
|
||||
onEnterPufferfish: () => void
|
||||
repositoryPaths: readonly string[]
|
||||
aiModelProviders: readonly AiModelProvider[]
|
||||
}
|
||||
|
||||
const PUFFERFISH_FACTS = {
|
||||
|
|
@ -27,6 +30,7 @@ export function FifthDomainSystems({
|
|||
onEnterEternalLake,
|
||||
onEnterPufferfish,
|
||||
repositoryPaths,
|
||||
aiModelProviders,
|
||||
}: FifthDomainSystemsProps) {
|
||||
const [selected, setSelected] = useState<FifthDomainSystemId | null>(
|
||||
detail === 'pufferfish' ? 'pufferfish' : null,
|
||||
|
|
@ -159,6 +163,12 @@ export function FifthDomainSystems({
|
|||
personaId="ICE-P-ZY001"
|
||||
repositoryPaths={repositoryPaths}
|
||||
/>
|
||||
<PersonaLanguageShellPanel
|
||||
locale={locale}
|
||||
personaId="ICE-P-ZY001"
|
||||
repositoryPaths={repositoryPaths}
|
||||
providers={aiModelProviders}
|
||||
/>
|
||||
<Button onClick={onEnterEternalLake}>进入永恒湖心系统</Button>
|
||||
</>
|
||||
)}
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ import { useGuanghuRouter } from '../hooks/useGuanghuRouter'
|
|||
import { useGuanghuShanghaiNode } from '../hooks/useGuanghuShanghaiNode'
|
||||
import { useGuanghuWorldLogin } from '../hooks/useGuanghuWorldLogin'
|
||||
import { useGuanghuEnterpriseStatus } from '../hooks/useGuanghuEnterpriseStatus'
|
||||
import type { AiModelTarget } from '../lib/aiTargets'
|
||||
import type { AiModelProvider, AiModelTarget } from '../lib/aiTargets'
|
||||
import {
|
||||
createDeterministicLivingSystemPlan,
|
||||
createLivingSystemEvent,
|
||||
|
|
@ -47,6 +47,7 @@ type HoloLakeHomeProps = {
|
|||
onOpenLocalWorkspace?: () => void | Promise<void>
|
||||
livingSystemTarget?: AiModelTarget | null
|
||||
repositoryPaths?: readonly string[]
|
||||
aiModelProviders?: readonly AiModelProvider[]
|
||||
}
|
||||
|
||||
type ChannelRoute = GuanghuChannelRoute
|
||||
|
|
@ -92,6 +93,7 @@ export function HoloLakeHome({
|
|||
onOpenLocalWorkspace,
|
||||
livingSystemTarget,
|
||||
repositoryPaths = [],
|
||||
aiModelProviders = [],
|
||||
}: HoloLakeHomeProps) {
|
||||
const initialRoute: ChannelRoute = isEducationWorkLakePath(window.location.pathname)
|
||||
? 'education-work-lake'
|
||||
|
|
@ -367,6 +369,7 @@ export function HoloLakeHome({
|
|||
onEnterEternalLake={() => navigate('eternal-lake-heart')}
|
||||
onEnterPufferfish={() => navigate('pufferfish')}
|
||||
repositoryPaths={repositoryPaths}
|
||||
aiModelProviders={aiModelProviders}
|
||||
/>
|
||||
)
|
||||
}
|
||||
|
|
@ -379,6 +382,7 @@ export function HoloLakeHome({
|
|||
onEnterEternalLake={() => navigate('eternal-lake-heart')}
|
||||
onEnterPufferfish={() => navigate('pufferfish')}
|
||||
repositoryPaths={repositoryPaths}
|
||||
aiModelProviders={aiModelProviders}
|
||||
/>
|
||||
)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,89 @@
|
|||
import { fireEvent, render, screen, waitFor } from '@testing-library/react'
|
||||
import { beforeEach, describe, expect, it, vi } from 'vitest'
|
||||
import type { AiModelProvider } from '../lib/aiTargets'
|
||||
import { PersonaLanguageShellPanel } from './PersonaLanguageShellPanel'
|
||||
|
||||
const provider: AiModelProvider = {
|
||||
id: 'provider-1',
|
||||
name: 'Local provider',
|
||||
kind: 'open_ai_compatible',
|
||||
base_url: 'http://127.0.0.1:8000/v1',
|
||||
models: [{
|
||||
id: 'model-1',
|
||||
capabilities: { streaming: false, tools: false, vision: false, json_mode: true, reasoning: true },
|
||||
}],
|
||||
}
|
||||
|
||||
describe('PersonaLanguageShellPanel', () => {
|
||||
beforeEach(() => vi.clearAllMocks())
|
||||
|
||||
it('connects desktop language input to the fail-closed partner planner without persona authority', async () => {
|
||||
const planGoal = vi.fn().mockResolvedValue({
|
||||
phase: 'planned',
|
||||
binding: { requestId: 'request-1' },
|
||||
goal: {
|
||||
goal: '核验当前事实后规划下一步',
|
||||
originalUtterance: '继续开发',
|
||||
mode: 'system_direct',
|
||||
status: 'needs_research',
|
||||
executable: false,
|
||||
deliberation: {
|
||||
evidenceSources: ['repo://current-main'],
|
||||
executionDisposition: { decision: 'RESEARCH', reason: '需要当前证据' },
|
||||
},
|
||||
confirmation: { required: false, boundaries: [], question: null },
|
||||
receiptSummary: '我还不能执行:需要当前证据。',
|
||||
},
|
||||
})
|
||||
|
||||
render(
|
||||
<PersonaLanguageShellPanel
|
||||
locale="zh-CN"
|
||||
personaId="ICE-P-ZY001"
|
||||
repositoryPaths={['/persona']}
|
||||
providers={[provider]}
|
||||
planGoal={planGoal}
|
||||
/>,
|
||||
)
|
||||
|
||||
fireEvent.change(screen.getByLabelText('language goal'), { target: { value: '继续开发' } })
|
||||
fireEvent.click(screen.getByRole('button', { name: '继续' }))
|
||||
|
||||
await waitFor(() => expect(planGoal).toHaveBeenCalledTimes(1))
|
||||
expect(planGoal).toHaveBeenCalledWith(expect.objectContaining({
|
||||
utterance: '继续开发',
|
||||
personaId: 'ICE-P-ZY001',
|
||||
repositoryPaths: ['/persona'],
|
||||
providers: [provider],
|
||||
personaAuthorized: false,
|
||||
developmentId: 'DEV-20260811-010',
|
||||
sourceLanguageAnchor: 'HLP-CURRENT-ARCH-001@2026-08-12.8',
|
||||
}))
|
||||
expect(await screen.findByText('我还不能执行:需要当前证据。')).toBeInTheDocument()
|
||||
expect(screen.getByText('核验当前事实后规划下一步')).toBeInTheDocument()
|
||||
})
|
||||
|
||||
it('shows the repository gate and never calls a later lifecycle itself', async () => {
|
||||
const planGoal = vi.fn().mockResolvedValue({
|
||||
phase: 'unbound',
|
||||
inspectedRepositoryCount: 1,
|
||||
failures: [],
|
||||
})
|
||||
|
||||
render(
|
||||
<PersonaLanguageShellPanel
|
||||
locale="zh-CN"
|
||||
personaId="ICE-P-ZY001"
|
||||
repositoryPaths={['/ordinary']}
|
||||
providers={[provider]}
|
||||
planGoal={planGoal}
|
||||
/>,
|
||||
)
|
||||
|
||||
fireEvent.change(screen.getByLabelText('language goal'), { target: { value: '继续开发' } })
|
||||
fireEvent.click(screen.getByRole('button', { name: '继续' }))
|
||||
|
||||
expect(await screen.findByText('这只说明当前挂载范围没有匹配的完整证据,不能据此判定人格不存在。')).toBeInTheDocument()
|
||||
expect(screen.queryByLabelText('reality boundary confirmation')).not.toBeInTheDocument()
|
||||
})
|
||||
})
|
||||
|
|
@ -0,0 +1,161 @@
|
|||
import { useMemo, useRef, useState } from 'react'
|
||||
import type { AiModelProvider } from '../lib/aiTargets'
|
||||
import { DEFAULT_LANGUAGE_WORLD_UI_PLUGIN } from '../lib/defaultLanguageWorldUiPlugin'
|
||||
import { translate, type AppLocale } from '../lib/i18n'
|
||||
import {
|
||||
planPersonaLanguageShellGoal,
|
||||
type PersonaLanguageShellPlan,
|
||||
} from '../lib/personaLanguageShellController'
|
||||
import { trackEvent } from '../lib/telemetry'
|
||||
import type { HoloLakeUiPlugin } from '../lib/uiPluginSystem'
|
||||
import {
|
||||
HotPluggableLanguageShell,
|
||||
type LanguageShellViewState,
|
||||
} from './HotPluggableLanguageShell'
|
||||
|
||||
const CURRENT_ARCHITECTURE_ANCHOR = 'HLP-CURRENT-ARCH-001@2026-08-12.8'
|
||||
const DEVELOPMENT_ID = 'DEV-20260811-010'
|
||||
|
||||
type Planner = typeof planPersonaLanguageShellGoal
|
||||
|
||||
type PersonaLanguageShellPanelProps = {
|
||||
locale: AppLocale
|
||||
personaId: string
|
||||
repositoryPaths: readonly string[]
|
||||
providers: readonly AiModelProvider[]
|
||||
planGoal?: Planner
|
||||
}
|
||||
|
||||
function requestId(): string {
|
||||
const suffix = globalThis.crypto?.randomUUID?.() ?? `${Date.now()}-${Math.random().toString(16).slice(2)}`
|
||||
return `persona-language-${suffix}`
|
||||
}
|
||||
|
||||
function localizedPlugin(locale: AppLocale): HoloLakeUiPlugin {
|
||||
const plugin = structuredClone(DEFAULT_LANGUAGE_WORLD_UI_PLUGIN)
|
||||
const stack = plugin.layout.children?.[0]
|
||||
const nodes = stack?.children ?? []
|
||||
const intro = nodes.find((node) => node.kind === 'text')
|
||||
const input = nodes.find((node) => node.kind === 'language_input')
|
||||
const confirmation = nodes.find((node) => node.kind === 'reality_boundary_confirmation')
|
||||
const evidence = nodes.find((node) => node.kind === 'evidence_toggle')
|
||||
if (intro) intro.text = translate(locale, 'hololake.personaRepository.description')
|
||||
if (input) input.text = translate(locale, 'onboarding.ai.continue')
|
||||
if (confirmation) {
|
||||
confirmation.approveText = translate(locale, 'onboarding.ai.continue')
|
||||
confirmation.declineText = translate(locale, 'common.cancel')
|
||||
}
|
||||
if (evidence) evidence.text = translate(locale, 'hololake.personaRuntime.verified')
|
||||
return plugin
|
||||
}
|
||||
|
||||
function gateMessage(locale: AppLocale, result: Exclude<PersonaLanguageShellPlan, { phase: 'planned' }>): string {
|
||||
switch (result.phase) {
|
||||
case 'unavailable': return translate(locale, 'hololake.personaRuntime.unavailable')
|
||||
case 'unbound': return translate(locale, 'hololake.personaRepository.unboundDescription')
|
||||
case 'ambiguous': return translate(locale, 'hololake.personaRepository.ambiguousDescription')
|
||||
case 'model_unavailable': return `${translate(locale, 'hololake.personaRepository.model')}: ${translate(locale, 'hololake.personaRuntime.unavailable')}`
|
||||
case 'model_ambiguous': return translate(locale, 'hololake.personaRepository.ambiguousDescription')
|
||||
case 'error':
|
||||
case 'device_identity_error':
|
||||
case 'binding_error':
|
||||
case 'cognition_error': return `${translate(locale, 'hololake.personaRuntime.error')}: ${result.code}`
|
||||
}
|
||||
}
|
||||
|
||||
function safeEvidence(result: Extract<PersonaLanguageShellPlan, { phase: 'planned' }>): string {
|
||||
return JSON.stringify({
|
||||
status: result.goal.status,
|
||||
mode: result.goal.mode,
|
||||
disposition: result.goal.deliberation.executionDisposition.decision,
|
||||
fact_sources: result.goal.deliberation.evidenceSources,
|
||||
}, null, 2)
|
||||
}
|
||||
|
||||
export function PersonaLanguageShellPanel({
|
||||
locale,
|
||||
personaId,
|
||||
repositoryPaths,
|
||||
providers,
|
||||
planGoal = planPersonaLanguageShellGoal,
|
||||
}: PersonaLanguageShellPanelProps) {
|
||||
const plugin = useMemo(() => localizedPlugin(locale), [locale])
|
||||
const requestSequence = useRef(0)
|
||||
const [state, setState] = useState<LanguageShellViewState>({
|
||||
status: translate(locale, 'hololake.personaRepository.description'),
|
||||
confirmationQuestion: null,
|
||||
receipt: null,
|
||||
evidence: null,
|
||||
})
|
||||
|
||||
const submitGoal = (utterance: string) => {
|
||||
if (!utterance.trim()) return
|
||||
const sequence = ++requestSequence.current
|
||||
setState({
|
||||
status: translate(locale, 'hololake.personaRepository.checking'),
|
||||
confirmationQuestion: null,
|
||||
receipt: null,
|
||||
evidence: null,
|
||||
})
|
||||
trackEvent('persona_language_shell_planning_started')
|
||||
void planGoal({
|
||||
utterance,
|
||||
personaId,
|
||||
repositoryPaths,
|
||||
providers,
|
||||
// No desktop authorization receipt is wired yet, so this source slice
|
||||
// must remain system-direct even after partner deliberation succeeds.
|
||||
personaAuthorized: false,
|
||||
requestId: requestId(),
|
||||
modelInstanceId: `hololake-desktop:${personaId}`,
|
||||
developmentId: DEVELOPMENT_ID,
|
||||
sourceLanguageAnchor: CURRENT_ARCHITECTURE_ANCHOR,
|
||||
}).then((result) => {
|
||||
if (sequence !== requestSequence.current) return
|
||||
trackEvent('persona_language_shell_planning_completed', {
|
||||
phase: result.phase,
|
||||
...(result.phase === 'planned' ? { status: result.goal.status } : {}),
|
||||
})
|
||||
if (result.phase !== 'planned') {
|
||||
setState({
|
||||
status: gateMessage(locale, result),
|
||||
confirmationQuestion: null,
|
||||
receipt: null,
|
||||
evidence: null,
|
||||
})
|
||||
return
|
||||
}
|
||||
setState({
|
||||
status: result.goal.receiptSummary,
|
||||
// The desktop confirmation consumer is not part of this source slice.
|
||||
// Never render an approval control that cannot be durably consumed.
|
||||
confirmationQuestion: null,
|
||||
receipt: result.goal.goal,
|
||||
evidence: safeEvidence(result),
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
return (
|
||||
<section className="persona-runtime-projection" aria-labelledby="persona-language-shell-title">
|
||||
<header>
|
||||
<div>
|
||||
<span>GH-AIOS · {personaId}</span>
|
||||
<h3 id="persona-language-shell-title">{translate(locale, 'hololake.personaRepository.title')}</h3>
|
||||
<p>{translate(locale, 'hololake.personaRepository.description')}</p>
|
||||
</div>
|
||||
<small>{translate(locale, 'hololake.personaRuntime.readOnly')}</small>
|
||||
</header>
|
||||
<HotPluggableLanguageShell
|
||||
plugin={plugin}
|
||||
state={state}
|
||||
bridge={{
|
||||
submitGoal,
|
||||
// This slice only produces an audited plan. Reality execution and
|
||||
// confirmation consumption remain deliberately disconnected.
|
||||
answerConfirmation: () => undefined,
|
||||
}}
|
||||
/>
|
||||
</section>
|
||||
)
|
||||
}
|
||||
|
|
@ -109,7 +109,7 @@
|
|||
"FAIL_CLOSED_PERSONA_LANGUAGE_SHELL_CONTROLLER"
|
||||
],
|
||||
"natural_language_entry_contract": {
|
||||
"state": "SOURCE_AND_PNCC_LIFECYCLE_ADAPTER_IMPLEMENTED_NOT_DESKTOP_INTEGRATED",
|
||||
"state": "DESKTOP_SOURCE_MOUNTED_NOT_REAL_MANIFEST_BOUND_NOT_RUNTIME_ACCEPTED",
|
||||
"name": "PARTNER_DELIBERATION_AND_LANGUAGE_HOME_INTEGRITY_GATE",
|
||||
"implementation": "product-source/hololake-platform/src/lib/languageOperatingModel.ts",
|
||||
"tests": "product-source/hololake-platform/src/lib/languageOperatingModel.test.ts",
|
||||
|
|
@ -121,6 +121,8 @@
|
|||
"language_wake_binding_compiler_tests": "product-source/hololake-platform/src/lib/personaLanguageGoalBinding.test.ts",
|
||||
"language_shell_controller": "product-source/hololake-platform/src/lib/personaLanguageShellController.ts",
|
||||
"language_shell_controller_tests": "product-source/hololake-platform/src/lib/personaLanguageShellController.test.ts",
|
||||
"desktop_language_shell": "product-source/hololake-platform/src/components/PersonaLanguageShellPanel.tsx",
|
||||
"desktop_language_shell_tests": "product-source/hololake-platform/src/components/PersonaLanguageShellPanel.test.tsx",
|
||||
"human_utterance_is_direct_command": false,
|
||||
"required_before_capability_execution": [
|
||||
"RESTORE_REAL_PURPOSE_FROM_CONTEXT",
|
||||
|
|
@ -137,7 +139,6 @@
|
|||
"refusal_requires_auditable_harm_path": true
|
||||
},
|
||||
"remaining_before_vertical_slice_acceptance": [
|
||||
"DESKTOP_LANGUAGE_ENTRY_TO_PARTNER_LIFECYCLE_BINDING",
|
||||
"REAL_PERSONA_REPOSITORY_MANIFEST_BINDING",
|
||||
"DESKTOP_LIFECYCLE_RUNTIME_ACCEPTANCE"
|
||||
],
|
||||
|
|
@ -164,6 +165,7 @@
|
|||
"persona_repository_binding_discovery_source_implemented": 100,
|
||||
"persona_language_wake_binding_compiler_source_implemented": 100,
|
||||
"persona_language_shell_controller_source_implemented": 100,
|
||||
"desktop_language_entry_source_integrated": 100,
|
||||
"real_persona_repository_manifest_bound": 0,
|
||||
"natural_language_partner_adapter_runtime_integrated": 0,
|
||||
"single_age_vertical_loop_implemented": 0,
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ const age = readJson("routing/hololake-age-runtime-architecture.json");
|
|||
const rules = readJson("routing/hololake-engineering-rules.json");
|
||||
|
||||
test("B0 is restored before product organs and remains resident in every cognition step", () => {
|
||||
assert.equal(architecture.version, "2026-08-12.7");
|
||||
assert.equal(architecture.version, "2026-08-12.8");
|
||||
assert.equal(
|
||||
architecture.read_order[1],
|
||||
architecture.cognitive_gravity_and_continuity.architecture_page,
|
||||
|
|
@ -95,6 +95,7 @@ test("the first implementation stage is one vertical AGE loop, not Mirror parall
|
|||
assert.equal(gravity.truth.persona_repository_binding_discovery_source_implemented, 100);
|
||||
assert.equal(gravity.truth.persona_language_wake_binding_compiler_source_implemented, 100);
|
||||
assert.equal(gravity.truth.persona_language_shell_controller_source_implemented, 100);
|
||||
assert.equal(gravity.truth.desktop_language_entry_source_integrated, 100);
|
||||
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.single_age_vertical_loop_implemented, 0);
|
||||
|
|
@ -103,11 +104,12 @@ test("the first implementation stage is one vertical AGE loop, not Mirror parall
|
|||
|
||||
test("natural language enters partner deliberation before any execution organ", () => {
|
||||
const entry = gravity.development_replan.natural_language_entry_contract;
|
||||
assert.equal(entry.state, "SOURCE_AND_PNCC_LIFECYCLE_ADAPTER_IMPLEMENTED_NOT_DESKTOP_INTEGRATED");
|
||||
assert.equal(entry.state, "DESKTOP_SOURCE_MOUNTED_NOT_REAL_MANIFEST_BOUND_NOT_RUNTIME_ACCEPTED");
|
||||
assert.match(entry.pncc_lifecycle_adapter, /personaLanguageGoal\.ts$/);
|
||||
assert.match(entry.repository_binding_discovery, /personaRepositoryBinding\.ts$/);
|
||||
assert.match(entry.language_wake_binding_compiler, /personaLanguageGoalBinding\.ts$/);
|
||||
assert.match(entry.language_shell_controller, /personaLanguageShellController\.ts$/);
|
||||
assert.match(entry.desktop_language_shell, /PersonaLanguageShellPanel\.tsx$/);
|
||||
assert.equal(entry.human_utterance_is_direct_command, false);
|
||||
assert.equal(entry.language_home_destruction_is_executable, false);
|
||||
assert.equal(entry.integrity_gate_may_absorb_human_sovereignty, false);
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"schema": "hololake.current-architecture/v1",
|
||||
"architecture_id": "HLP-CURRENT-ARCH-001",
|
||||
"version": "2026-08-12.7",
|
||||
"version": "2026-08-12.8",
|
||||
"state": "CURRENT_CANONICAL",
|
||||
"product": {
|
||||
"formal_name": "光湖语言系统 · 通用人工智能操作平台",
|
||||
|
|
@ -115,6 +115,7 @@
|
|||
"persona_repository_binding_read_only_ui_source_integrated": true,
|
||||
"persona_runtime_projection_repository_gate_source_integrated": true,
|
||||
"persona_language_shell_controller_source_implemented": true,
|
||||
"desktop_language_entry_source_integrated": true,
|
||||
"real_persona_repository_manifest_bound": false,
|
||||
"natural_language_partner_adapter_runtime_integrated": false,
|
||||
"required_natural_language_entry": "PARTNER_DELIBERATION_AND_LANGUAGE_HOME_INTEGRITY_GATE",
|
||||
|
|
|
|||
Loading…
Reference in a new issue