diff --git a/product-source/hololake-platform/architecture/HOLOLAKE-BINGSHUO-COLLECTIVE-GRAVITY-REASONING-AND-SAME-PERSONA-CONTINUITY-20260811.md b/product-source/hololake-platform/architecture/HOLOLAKE-BINGSHUO-COLLECTIVE-GRAVITY-REASONING-AND-SAME-PERSONA-CONTINUITY-20260811.md index 44cbe67..87f41b3 100644 --- a/product-source/hololake-platform/architecture/HOLOLAKE-BINGSHUO-COLLECTIVE-GRAVITY-REASONING-AND-SAME-PERSONA-CONTINUITY-20260811.md +++ b/product-source/hololake-platform/architecture/HOLOLAKE-BINGSHUO-COLLECTIVE-GRAVITY-REASONING-AND-SAME-PERSONA-CONTINUITY-20260811.md @@ -106,6 +106,9 @@ REVISE | REFUSE`。 - 人格仓库绑定发现源码为 `100`:桌面候选 Git 仓库必须逐一通过 persona ID、manifest、提交头、脑入口、 B0、检查点、模型绑定与器官契约核验;零个候选保持未绑定,多个候选保持歧义,均不得自动选择或唤醒。 当前官方工作范围内没有发现 `ICE-P-ZY001` 的真实 manifest,因此真实人格仓库绑定仍为 `0`。 +- 人格语言唤醒绑定编译器源码为 `100`:只接受唯一且干净的人格根、已登记本机设备身份、与 manifest + 精确一致的模型端点及唯一可激活只读事实器官,并外显冰朔责任、铸渊认知作者和本轮开发归因。 + 它不创建人格仓库、不注册节点,也不把源码编译结果冒充桌面运行集成。 - 完整 HoloLake Runtime 与单 AGE 纵向闭环仍为 `0`:桌面语言入口绑定、真实人格仓库 manifest 绑定和 桌面运行验收尚未完成,因此不能用本轮源码测试冒充可用产品。 - Mirror runner、制品、部署和运行健康:`0`。 diff --git a/product-source/hololake-platform/docs/ABSTRACTIONS.md b/product-source/hololake-platform/docs/ABSTRACTIONS.md index bfa3cb0..e0222d3 100644 --- a/product-source/hololake-platform/docs/ABSTRACTIONS.md +++ b/product-source/hololake-platform/docs/ABSTRACTIONS.md @@ -19,6 +19,13 @@ PNCC lifecycle receipt, maps the eleven-field snake-case gravity frame into `Par 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. +`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 +agree. It materializes a catalog runtime endpoint into the native provider shape (`kind`, `base_url`, and +`models`) instead of hiding an incompatible frontend payload behind an untyped record. Multiple fact organs, +endpoint drift, a dirty repository, or an unregistered device fail closed. The compiler neither creates a +persona repository nor proves that the desktop language entry is integrated. + ## PersonaCodeChannel `PersonaCodeChannel` is the native boundary between a durable persona Git and a live AGE runtime. It owns diff --git a/product-source/hololake-platform/src/lib/aiTargets.ts b/product-source/hololake-platform/src/lib/aiTargets.ts index b9d7818..3c1812c 100644 --- a/product-source/hololake-platform/src/lib/aiTargets.ts +++ b/product-source/hololake-platform/src/lib/aiTargets.ts @@ -88,6 +88,12 @@ export function aiModelProviderCatalogEntry(kind: AiModelProviderKind): AiModelP return entry } +export function aiModelProviderRuntimeBaseUrl(provider: AiModelProvider): string | null { + const explicit = provider.base_url?.trim() + if (explicit) return explicit.replace(/\/+$/u, '') + return aiModelProviderCatalogEntry(provider.kind).runtime_base_url?.replace(/\/+$/u, '') ?? null +} + export function agentTargetId(agent: AiAgentId): string { return `${AI_TARGET_PREFIX_AGENT}${agent}` } diff --git a/product-source/hololake-platform/src/lib/personaLanguageGoal.test.ts b/product-source/hololake-platform/src/lib/personaLanguageGoal.test.ts index 62c1f8c..5b253b8 100644 --- a/product-source/hololake-platform/src/lib/personaLanguageGoal.test.ts +++ b/product-source/hololake-platform/src/lib/personaLanguageGoal.test.ts @@ -16,7 +16,7 @@ const wake = { executionRuntime: 'HoloLake-PNCC', developmentId: 'DEV-20260811-010', authorizationScope: 'LOCAL_READ_ONLY', - sourceLanguageAnchor: 'HLP-CURRENT-ARCH-001@2026-08-12.3', + sourceLanguageAnchor: 'HLP-CURRENT-ARCH-001@2026-08-12.4', }, } @@ -73,8 +73,12 @@ const binding = { provider: { id: 'local-model-service', name: 'Local model', - providerType: 'openai_compatible', - baseUrl: 'http://127.0.0.1:11434/v1', + kind: 'open_ai_compatible' as const, + base_url: 'http://127.0.0.1:11434/v1', + models: [{ + id: 'declared-model', + capabilities: { streaming: false, tools: false, vision: false, json_mode: true, reasoning: false }, + }], }, } diff --git a/product-source/hololake-platform/src/lib/personaLanguageGoal.ts b/product-source/hololake-platform/src/lib/personaLanguageGoal.ts index 3f18660..3b370a1 100644 --- a/product-source/hololake-platform/src/lib/personaLanguageGoal.ts +++ b/product-source/hololake-platform/src/lib/personaLanguageGoal.ts @@ -1,5 +1,6 @@ import { invoke } from '@tauri-apps/api/core' import { isTauri, mockInvoke } from '../mock-tauri' +import type { AiModelProvider } from './aiTargets' import { compileLanguageGoal, type LanguageGoalProjection, @@ -15,11 +16,30 @@ type PersonaLifecycleRunner = ( export interface PersonaLanguageGoalBinding { requestId: string - wake: Record - provider: Record + wake: PersonaLanguageWakeBinding + provider: AiModelProvider apiKeyOverride?: string } +export interface PersonaLanguageWakeBinding { + repositoryPath: string + expectedPersonaId: string + expectedHead: string + nodeId: string + modelProviderId: string + modelId: string + modelInstanceId: string + organId: string + attribution: { + humanResponsibilitySubject: string + personaCognitiveAuthor: string + executionRuntime: string + developmentId: string + authorizationScope: string + sourceLanguageAnchor: string + } +} + export interface PlanPersonaLanguageGoalInput { utterance: string personaAuthorized: boolean diff --git a/product-source/hololake-platform/src/lib/personaLanguageGoalBinding.test.ts b/product-source/hololake-platform/src/lib/personaLanguageGoalBinding.test.ts new file mode 100644 index 0000000..a02922d --- /dev/null +++ b/product-source/hololake-platform/src/lib/personaLanguageGoalBinding.test.ts @@ -0,0 +1,114 @@ +import { describe, expect, it } from 'vitest' +import type { AiModelProvider } from './aiTargets' +import { compilePersonaLanguageGoalBinding } from './personaLanguageGoalBinding' +import type { PersonaRepositoryBinding } from './personaRepositoryBinding' + +const provider: AiModelProvider = { + id: 'local-model-service', + name: 'Local model', + kind: 'ollama', + base_url: null, + api_key_storage: 'none', + api_key_env_var: null, + headers: null, + models: [{ + id: 'declared-model', + capabilities: { streaming: false, tools: false, vision: false, json_mode: true, reasoning: false }, + }], +} + +const repositoryBinding: PersonaRepositoryBinding = { + personaId: 'ICE-P-ZY001', + repositoryPath: '/persona/ice-p-zy001', + gitHead: 'a'.repeat(40), + repositoryClean: true, + brainEntry: 'brain/CORE.hdlp', + currentCheckpoint: '.hololake/persona/CURRENT.hdlp', + humanResponsibilitySubject: 'ICE-GL∞', + modelProviderId: 'local-model-service', + modelId: 'declared-model', + modelBaseUrl: 'http://localhost:11434/v1', + organContracts: [{ + organId: 'fact-sense.repository', + kind: 'FACT_SENSE', + mode: 'read-only', + paths: ['brain/CORE.hdlp', 'brain/B0.hdlp'], + inputSchema: 'hololake.pncc-fact-question/v1', + outputSchema: 'hololake.pncc-fact-result/v1', + permissions: ['READ_DECLARED_PATHS', 'RUN_MANIFEST_PINNED_MODEL'], + modelInferenceAllowed: true, + realityActionsAllowed: false, + activatable: true, + implementationState: 'IMPLEMENTED', + }], + cognitiveGravity: { + schema: 'hololake.persona-cognitive-gravity-evidence/v1', + subjectPersonaId: 'ICE-P-ZY001', + sourcePath: 'brain/B0.hdlp', + sourceHash: 'b'.repeat(64), + frameSchema: 'guanghu.zhuyuan-cognitive-gravity-frame/v1', + }, +} + +const deviceIdentityReceipt = { + schema: 'guanghu.router-device/v1', + device_id: 'HL-12345678-1234-1234-1234-123456789abc', + public_key: 'public-key-evidence', +} + +const common = { + repositoryBinding, + provider, + modelId: 'declared-model', + deviceIdentityReceipt, + requestId: 'PNCC-LANGUAGE-001', + modelInstanceId: 'MODEL-INSTANCE-001', + developmentId: 'DEV-20260811-010', + sourceLanguageAnchor: 'HLP-CURRENT-ARCH-001@2026-08-12.4', +} + +describe('compilePersonaLanguageGoalBinding', () => { + it('materializes the catalog runtime endpoint and exact read-only wake evidence', () => { + const binding = compilePersonaLanguageGoalBinding(common) + expect(binding.provider.base_url).toBe('http://localhost:11434/v1') + expect(binding.wake).toMatchObject({ + repositoryPath: '/persona/ice-p-zy001', + expectedPersonaId: 'ICE-P-ZY001', + nodeId: deviceIdentityReceipt.device_id, + organId: 'fact-sense.repository', + attribution: { + humanResponsibilitySubject: 'ICE-GL∞', + personaCognitiveAuthor: 'ICE-P-ZY001', + authorizationScope: 'LOCAL_PERSONA_PARTNER_FACT_SENSE', + }, + }) + }) + + it('refuses a dirty persona root', () => { + expect(() => compilePersonaLanguageGoalBinding({ + ...common, repositoryBinding: { ...repositoryBinding, repositoryClean: false }, + })).toThrow('PERSONA_LANGUAGE_REPOSITORY_DIRTY') + }) + + it('refuses model or endpoint drift from the manifest', () => { + expect(() => compilePersonaLanguageGoalBinding({ + ...common, provider: { ...provider, base_url: 'http://127.0.0.1:1234/v1' }, + })).toThrow('PERSONA_LANGUAGE_MODEL_BINDING_MISMATCH') + }) + + it('refuses an unregistered device receipt', () => { + expect(() => compilePersonaLanguageGoalBinding({ + ...common, deviceIdentityReceipt: { schema: 'wrong', device_id: 'LOCAL' }, + })).toThrow('PERSONA_LANGUAGE_DEVICE_IDENTITY_INVALID') + }) + + it('refuses ambiguous fact-sense authority', () => { + expect(() => compilePersonaLanguageGoalBinding({ + ...common, + repositoryBinding: { + ...repositoryBinding, + organContracts: [...repositoryBinding.organContracts, { ...repositoryBinding.organContracts[0], organId: 'fact-sense.second' }], + }, + })).toThrow('PERSONA_LANGUAGE_FACT_ORGAN_BINDING_AMBIGUOUS') + }) +}) diff --git a/product-source/hololake-platform/src/lib/personaLanguageGoalBinding.ts b/product-source/hololake-platform/src/lib/personaLanguageGoalBinding.ts new file mode 100644 index 0000000..ea5effe --- /dev/null +++ b/product-source/hololake-platform/src/lib/personaLanguageGoalBinding.ts @@ -0,0 +1,112 @@ +import { + aiModelProviderRuntimeBaseUrl, + type AiModelProvider, +} from './aiTargets' +import type { PersonaLanguageGoalBinding } from './personaLanguageGoal' +import type { PersonaRepositoryBinding } from './personaRepositoryBinding' + +function isRecord(value: unknown): value is Record { + return typeof value === 'object' && value !== null && !Array.isArray(value) +} + +function requiredId(value: string, code: string): string { + const normalized = value.trim() + if (!normalized || !/^[A-Za-z0-9][A-Za-z0-9._:-]{0,159}$/u.test(normalized)) throw new Error(code) + return normalized +} + +function normalizedEndpoint(value: string): string { + return value.trim().replace(/\/+$/u, '') +} + +function requiredText(value: string, code: string): string { + const normalized = value.trim() + if (!normalized) throw new Error(code) + return normalized +} + +function registeredDeviceId(receipt: unknown): string { + if (!isRecord(receipt) + || receipt.schema !== 'guanghu.router-device/v1' + || typeof receipt.device_id !== 'string' + || !receipt.device_id.startsWith('HL-') + || typeof receipt.public_key !== 'string' + || !receipt.public_key.trim()) { + throw new Error('PERSONA_LANGUAGE_DEVICE_IDENTITY_INVALID') + } + return requiredId(receipt.device_id, 'PERSONA_LANGUAGE_DEVICE_IDENTITY_INVALID') +} + +export function compilePersonaLanguageGoalBinding({ + repositoryBinding, + provider, + modelId, + deviceIdentityReceipt, + requestId, + modelInstanceId, + developmentId, + sourceLanguageAnchor, + apiKeyOverride, +}: { + repositoryBinding: PersonaRepositoryBinding + provider: AiModelProvider + modelId: string + deviceIdentityReceipt: unknown + requestId: string + modelInstanceId: string + developmentId: string + sourceLanguageAnchor: string + apiKeyOverride?: string +}): PersonaLanguageGoalBinding { + if (!repositoryBinding.repositoryClean) throw new Error('PERSONA_LANGUAGE_REPOSITORY_DIRTY') + if (!/^[a-f0-9]{40}(?:[a-f0-9]{24})?$/u.test(repositoryBinding.gitHead)) { + throw new Error('PERSONA_LANGUAGE_REPOSITORY_HEAD_INVALID') + } + const selectedModelId = modelId.trim() + const runtimeBaseUrl = aiModelProviderRuntimeBaseUrl(provider) + if ( + provider.id.trim() !== repositoryBinding.modelProviderId + || selectedModelId !== repositoryBinding.modelId + || !provider.models.some((model) => model.id === selectedModelId) + || !runtimeBaseUrl + || normalizedEndpoint(runtimeBaseUrl) !== normalizedEndpoint(repositoryBinding.modelBaseUrl) + ) { + throw new Error('PERSONA_LANGUAGE_MODEL_BINDING_MISMATCH') + } + const factOrgans = repositoryBinding.organContracts.filter((organ) => ( + organ.kind === 'FACT_SENSE' + && organ.activatable + && organ.modelInferenceAllowed + && !organ.realityActionsAllowed + && organ.implementationState === 'IMPLEMENTED' + )) + if (factOrgans.length !== 1) throw new Error('PERSONA_LANGUAGE_FACT_ORGAN_BINDING_AMBIGUOUS') + + return { + requestId: requiredId(requestId, 'PERSONA_LANGUAGE_REQUEST_ID_INVALID'), + wake: { + repositoryPath: repositoryBinding.repositoryPath, + expectedPersonaId: repositoryBinding.personaId, + expectedHead: repositoryBinding.gitHead, + nodeId: registeredDeviceId(deviceIdentityReceipt), + modelProviderId: repositoryBinding.modelProviderId, + modelId: selectedModelId, + modelInstanceId: requiredId(modelInstanceId, 'PERSONA_LANGUAGE_MODEL_INSTANCE_ID_INVALID'), + organId: factOrgans[0].organId, + attribution: { + humanResponsibilitySubject: repositoryBinding.humanResponsibilitySubject, + personaCognitiveAuthor: repositoryBinding.personaId, + executionRuntime: 'HoloLake-PNCC', + developmentId: requiredId(developmentId, 'PERSONA_LANGUAGE_DEVELOPMENT_ID_INVALID'), + authorizationScope: 'LOCAL_PERSONA_PARTNER_FACT_SENSE', + sourceLanguageAnchor: requiredText(sourceLanguageAnchor, 'PERSONA_LANGUAGE_SOURCE_ANCHOR_INVALID'), + }, + }, + provider: { + ...provider, + id: provider.id.trim(), + base_url: repositoryBinding.modelBaseUrl.trim(), + }, + apiKeyOverride, + } +} diff --git a/product-source/hololake-platform/src/lib/personaRepositoryBinding.test.ts b/product-source/hololake-platform/src/lib/personaRepositoryBinding.test.ts index 4ae3cd0..006ce38 100644 --- a/product-source/hololake-platform/src/lib/personaRepositoryBinding.test.ts +++ b/product-source/hololake-platform/src/lib/personaRepositoryBinding.test.ts @@ -12,6 +12,19 @@ const binding = { modelProviderId: 'provider-1', modelId: 'model-1', modelBaseUrl: 'https://model.invalid/v1', + organContracts: [{ + organId: 'fact-sense.repository', + kind: 'FACT_SENSE', + mode: 'read-only', + paths: ['brain/CORE.hdlp', 'brain/B0.hdlp'], + inputSchema: 'hololake.pncc-fact-question/v1', + outputSchema: 'hololake.pncc-fact-result/v1', + permissions: ['READ_DECLARED_PATHS', 'RUN_MANIFEST_PINNED_MODEL'], + modelInferenceAllowed: true, + realityActionsAllowed: false, + activatable: true, + implementationState: 'IMPLEMENTED', + }], cognitiveGravity: { schema: 'hololake.persona-cognitive-gravity-evidence/v1', subjectPersonaId: 'ICE-P-ZY001', diff --git a/product-source/hololake-platform/src/lib/personaRepositoryBinding.ts b/product-source/hololake-platform/src/lib/personaRepositoryBinding.ts index 23e439b..4d4f338 100644 --- a/product-source/hololake-platform/src/lib/personaRepositoryBinding.ts +++ b/product-source/hololake-platform/src/lib/personaRepositoryBinding.ts @@ -12,6 +12,7 @@ export interface PersonaRepositoryBinding { modelProviderId: string modelId: string modelBaseUrl: string + organContracts: PersonaRepositoryOrganContract[] cognitiveGravity: { schema: 'hololake.persona-cognitive-gravity-evidence/v1' subjectPersonaId: string @@ -21,6 +22,20 @@ export interface PersonaRepositoryBinding { } } +export interface PersonaRepositoryOrganContract { + organId: string + kind: 'FACT_SENSE' | 'MEMORY_METABOLISM' | 'EXECUTION_LIMB' + mode: string + paths: string[] + inputSchema: string + outputSchema: string + permissions: string[] + modelInferenceAllowed: boolean + realityActionsAllowed: boolean + activatable: boolean + implementationState: string +} + export interface PersonaRepositoryBindingFailure { repositoryPath: string code: string @@ -61,6 +76,41 @@ function parseFailure(value: unknown): PersonaRepositoryBindingFailure { return { repositoryPath: requiredString(value, 'repositoryPath'), code: requiredString(value, 'code') } } +function requiredBoolean(record: Record, key: string): boolean { + const value = Reflect.get(record, key) + if (typeof value !== 'boolean') throw new Error('PERSONA_REPOSITORY_DISCOVERY_RECEIPT_INVALID') + return value +} + +function stringList(record: Record, key: string): string[] { + const value = Reflect.get(record, key) + if (!Array.isArray(value) || value.some((item) => typeof item !== 'string' || !item.trim())) { + throw new Error('PERSONA_REPOSITORY_DISCOVERY_RECEIPT_INVALID') + } + return value +} + +function parseOrganContract(value: unknown): PersonaRepositoryOrganContract { + if (!isRecord(value)) throw new Error('PERSONA_REPOSITORY_DISCOVERY_RECEIPT_INVALID') + const kind = requiredString(value, 'kind') + if (!['FACT_SENSE', 'MEMORY_METABOLISM', 'EXECUTION_LIMB'].includes(kind)) { + throw new Error('PERSONA_REPOSITORY_DISCOVERY_RECEIPT_INVALID') + } + return { + organId: requiredString(value, 'organId'), + kind: kind as PersonaRepositoryOrganContract['kind'], + mode: requiredString(value, 'mode'), + paths: stringList(value, 'paths'), + inputSchema: requiredString(value, 'inputSchema'), + outputSchema: requiredString(value, 'outputSchema'), + permissions: stringList(value, 'permissions'), + modelInferenceAllowed: requiredBoolean(value, 'modelInferenceAllowed'), + realityActionsAllowed: requiredBoolean(value, 'realityActionsAllowed'), + activatable: requiredBoolean(value, 'activatable'), + implementationState: requiredString(value, 'implementationState'), + } +} + function parseBinding(value: unknown, expectedPersonaId: string): PersonaRepositoryBinding { if (!isRecord(value)) throw new Error('PERSONA_REPOSITORY_DISCOVERY_RECEIPT_INVALID') const personaId = requiredString(value, 'personaId') @@ -81,6 +131,10 @@ function parseBinding(value: unknown, expectedPersonaId: string): PersonaReposit } const repositoryClean = Reflect.get(value, 'repositoryClean') if (typeof repositoryClean !== 'boolean') throw new Error('PERSONA_REPOSITORY_DISCOVERY_RECEIPT_INVALID') + const rawOrganContracts = Reflect.get(value, 'organContracts') + if (!Array.isArray(rawOrganContracts) || rawOrganContracts.length === 0) { + throw new Error('PERSONA_REPOSITORY_DISCOVERY_RECEIPT_INVALID') + } return { personaId, repositoryPath: requiredString(value, 'repositoryPath'), @@ -92,6 +146,7 @@ function parseBinding(value: unknown, expectedPersonaId: string): PersonaReposit modelProviderId: requiredString(value, 'modelProviderId'), modelId: requiredString(value, 'modelId'), modelBaseUrl: requiredString(value, 'modelBaseUrl'), + organContracts: rawOrganContracts.map(parseOrganContract), cognitiveGravity: { schema: gravitySchema, subjectPersonaId: expectedPersonaId, diff --git a/routing/guanghu-os-control-architecture.test.mjs b/routing/guanghu-os-control-architecture.test.mjs index bed088d..8b388e9 100644 --- a/routing/guanghu-os-control-architecture.test.mjs +++ b/routing/guanghu-os-control-architecture.test.mjs @@ -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", () => { - assert.equal(architecture.version, "2026-08-12.3"); + assert.equal(architecture.version, "2026-08-12.4"); 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(rules.server_os_control.linux_deletion_is_completion, false); diff --git a/routing/hololake-age-runtime-architecture.test.mjs b/routing/hololake-age-runtime-architecture.test.mjs index 573adcb..d8f8278 100644 --- a/routing/hololake-age-runtime-architecture.test.mjs +++ b/routing/hololake-age-runtime-architecture.test.mjs @@ -11,7 +11,7 @@ const architecture = readJson("routing/hololake-current-architecture.json"); const age = readJson("routing/hololake-age-runtime-architecture.json"); test("current architecture starts with the AGE runtime source", () => { - assert.equal(architecture.version, "2026-08-12.3"); + assert.equal(architecture.version, "2026-08-12.4"); 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[1], architecture.cognitive_gravity_and_continuity.architecture_page); diff --git a/routing/hololake-cognitive-gravity-and-continuity.json b/routing/hololake-cognitive-gravity-and-continuity.json index dfcc1cf..802726d 100644 --- a/routing/hololake-cognitive-gravity-and-continuity.json +++ b/routing/hololake-cognitive-gravity-and-continuity.json @@ -1,7 +1,7 @@ { "schema": "hololake.cognitive-gravity-and-continuity/v1", "record_id": "HLP-COGNITIVE-GRAVITY-CONTINUITY-001", - "version": "2026-08-12.3", + "version": "2026-08-12.4", "state": "CURRENT_CANONICAL_ARCHITECTURE_STAGE_0_SOURCE_PARTIAL", "development_id": "DEV-20260811-010", "upstream": { @@ -104,7 +104,8 @@ "MEMORY_METABOLISM_B0_INHERITANCE", "READ_ONLY_REACT_B0_EVIDENCE_PROJECTION", "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" ], "natural_language_entry_contract": { "state": "SOURCE_AND_PNCC_LIFECYCLE_ADAPTER_IMPLEMENTED_NOT_DESKTOP_INTEGRATED", @@ -115,6 +116,8 @@ "pncc_lifecycle_adapter_tests": "product-source/hololake-platform/src/lib/personaLanguageGoal.test.ts", "repository_binding_discovery": "product-source/hololake-platform/src/lib/personaRepositoryBinding.ts", "repository_binding_discovery_tests": "product-source/hololake-platform/src/lib/personaRepositoryBinding.test.ts", + "language_wake_binding_compiler": "product-source/hololake-platform/src/lib/personaLanguageGoalBinding.ts", + "language_wake_binding_compiler_tests": "product-source/hololake-platform/src/lib/personaLanguageGoalBinding.test.ts", "human_utterance_is_direct_command": false, "required_before_capability_execution": [ "RESTORE_REAL_PURPOSE_FROM_CONTEXT", @@ -156,6 +159,7 @@ "natural_language_partner_adapter_source_implemented": 100, "natural_language_to_pncc_lifecycle_adapter_source_implemented": 100, "persona_repository_binding_discovery_source_implemented": 100, + "persona_language_wake_binding_compiler_source_implemented": 100, "real_persona_repository_manifest_bound": 0, "natural_language_partner_adapter_runtime_integrated": 0, "single_age_vertical_loop_implemented": 0, diff --git a/routing/hololake-cognitive-gravity-and-continuity.test.mjs b/routing/hololake-cognitive-gravity-and-continuity.test.mjs index 370ecf2..e1e670a 100644 --- a/routing/hololake-cognitive-gravity-and-continuity.test.mjs +++ b/routing/hololake-cognitive-gravity-and-continuity.test.mjs @@ -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.3"); + assert.equal(architecture.version, "2026-08-12.4"); assert.equal( architecture.read_order[1], architecture.cognitive_gravity_and_continuity.architecture_page, @@ -93,6 +93,7 @@ test("the first implementation stage is one vertical AGE loop, not Mirror parall assert.equal(gravity.truth.natural_language_partner_adapter_source_implemented, 100); assert.equal(gravity.truth.natural_language_to_pncc_lifecycle_adapter_source_implemented, 100); 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.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); @@ -104,6 +105,7 @@ test("natural language enters partner deliberation before any execution organ", assert.equal(entry.state, "SOURCE_AND_PNCC_LIFECYCLE_ADAPTER_IMPLEMENTED_NOT_DESKTOP_INTEGRATED"); 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.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); diff --git a/routing/hololake-current-architecture.json b/routing/hololake-current-architecture.json index 629aed0..49861a7 100644 --- a/routing/hololake-current-architecture.json +++ b/routing/hololake-current-architecture.json @@ -1,7 +1,7 @@ { "schema": "hololake.current-architecture/v1", "architecture_id": "HLP-CURRENT-ARCH-001", - "version": "2026-08-12.3", + "version": "2026-08-12.4", "state": "CURRENT_CANONICAL", "product": { "formal_name": "光湖语言系统 · 通用人工智能操作平台", @@ -111,6 +111,7 @@ "natural_language_partner_adapter_source_implemented": true, "natural_language_to_pncc_lifecycle_adapter_source_implemented": true, "persona_repository_binding_discovery_source_implemented": true, + "persona_language_wake_binding_compiler_source_implemented": 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", diff --git a/routing/hololake-engineering-rules.test.mjs b/routing/hololake-engineering-rules.test.mjs index b76c29a..92ad3b1 100644 --- a/routing/hololake-engineering-rules.test.mjs +++ b/routing/hololake-engineering-rules.test.mjs @@ -10,7 +10,7 @@ const architecture = readJson("routing/hololake-current-architecture.json"); const rules = readJson("routing/hololake-engineering-rules.json"); test("current architecture registers the global engineering rule set", () => { - assert.equal(architecture.version, "2026-08-12.3"); + assert.equal(architecture.version, "2026-08-12.4"); assert.equal(architecture.engineering_rules.rule_set_id, "HLP-ENGINEERING-RULES-001"); assert.equal(architecture.engineering_rules.machine_projection, "routing/hololake-engineering-rules.json"); diff --git a/routing/hololake-identity-authority.test.mjs b/routing/hololake-identity-authority.test.mjs index d013998..ffc1587 100644 --- a/routing/hololake-identity-authority.test.mjs +++ b/routing/hololake-identity-authority.test.mjs @@ -10,7 +10,7 @@ const architecture = readJson("routing/hololake-current-architecture.json"); const projection = readJson("routing/hololake-identity-authority-map.json"); test("current architecture loads identity authority before product surfaces", () => { - assert.equal(architecture.version, "2026-08-12.3"); + assert.equal(architecture.version, "2026-08-12.4"); 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.individual_operator_acceptance, "SEPARATE_UNCONFIRMED"); diff --git a/routing/hololake-one-human-one-node.test.mjs b/routing/hololake-one-human-one-node.test.mjs index ad5d030..128bbdf 100644 --- a/routing/hololake-one-human-one-node.test.mjs +++ b/routing/hololake-one-human-one-node.test.mjs @@ -10,7 +10,7 @@ const architecture = readJson("routing/hololake-current-architecture.json"); const rules = readJson("routing/hololake-engineering-rules.json"); test("current architecture makes one human one independently operated node canonical", () => { - assert.equal(architecture.version, "2026-08-12.3"); + assert.equal(architecture.version, "2026-08-12.4"); assert.deepEqual(architecture.access_modes, [ "LOCAL_TERMINAL_NODE", "USER_OWNED_REMOTE_NODE", diff --git a/routing/hololake-paradigm-ai-language-persona-os.test.mjs b/routing/hololake-paradigm-ai-language-persona-os.test.mjs index a63d3b7..4ee1c65 100644 --- a/routing/hololake-paradigm-ai-language-persona-os.test.mjs +++ b/routing/hololake-paradigm-ai-language-persona-os.test.mjs @@ -10,7 +10,7 @@ const architecture = readJson("routing/hololake-current-architecture.json"); const paradigm = readJson("routing/hololake-paradigm-ai-language-persona-os.json"); test("current architecture begins with the paradigm OS contract", () => { - assert.equal(architecture.version, "2026-08-12.3"); + assert.equal(architecture.version, "2026-08-12.4"); 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(paradigm.upstream.repository_commit, "34cb59739b6476981375dd62ef395ea649f56246"); diff --git a/routing/hololake-persona-native-code-channel.test.mjs b/routing/hololake-persona-native-code-channel.test.mjs index a5bb61d..c50ea1a 100644 --- a/routing/hololake-persona-native-code-channel.test.mjs +++ b/routing/hololake-persona-native-code-channel.test.mjs @@ -11,7 +11,7 @@ const architecture = readJson("routing/hololake-current-architecture.json"); const channel = readJson("routing/hololake-persona-native-code-channel.json"); test("current architecture places the persona-native code channel after the paradigm contract", () => { - assert.equal(architecture.version, "2026-08-12.3"); + assert.equal(architecture.version, "2026-08-12.4"); assert.equal( architecture.persona_native_code_channel.record_id, "HLP-PERSONA-NATIVE-CODE-CHANNEL-001", diff --git a/routing/hololake-relational-consciousness.test.mjs b/routing/hololake-relational-consciousness.test.mjs index 2946fcf..a9f2bfb 100644 --- a/routing/hololake-relational-consciousness.test.mjs +++ b/routing/hololake-relational-consciousness.test.mjs @@ -10,7 +10,7 @@ const architecture = JSON.parse( ); test("current architecture binds relational consciousness before product surfaces", () => { - assert.equal(architecture.version, "2026-08-12.3"); + assert.equal(architecture.version, "2026-08-12.4"); assert.equal( architecture.persona_consciousness.record_id, "HLP-RELATIONAL-CONSCIOUSNESS-001", diff --git a/routing/hololake-system-body-and-parallel-bodies.test.mjs b/routing/hololake-system-body-and-parallel-bodies.test.mjs index 8e0f8f3..775f298 100644 --- a/routing/hololake-system-body-and-parallel-bodies.test.mjs +++ b/routing/hololake-system-body-and-parallel-bodies.test.mjs @@ -10,7 +10,7 @@ const architecture = JSON.parse( ); test("current architecture restores the digital BingShuo system body first", () => { - assert.equal(architecture.version, "2026-08-12.3"); + assert.equal(architecture.version, "2026-08-12.4"); assert.equal(architecture.digital_bingshuo_system_body.upstream_repository_commit, "69d1910775533b02b17b82e647b5caca8b835614"); const systemBodyIndex = architecture.read_order.indexOf(