feat: mount persona language planning entry

This commit is contained in:
冰朔 2026-08-12 03:58:02 +08:00
commit 5d465115cb
11 changed files with 294 additions and 16 deletions

View file

@ -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 产品源码仍然分叉;本轮架构登记不消除该事实。

View file

@ -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.

View file

@ -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.

View file

@ -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

View file

@ -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>
</>
)}

View file

@ -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}
/>
)
}

View file

@ -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()
})
})

View file

@ -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>
)
}

View file

@ -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,

View file

@ -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);

View file

@ -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",