feat: expose HoloLake development lane to authenticated carriers

This commit is contained in:
冰朔 2026-08-17 15:41:04 +08:00
commit 96769846ac
7 changed files with 324 additions and 9 deletions

View file

@ -44,6 +44,8 @@ The visible shell is HoloLake itself. Git is the durable history engine below it
MCP may discover HoloLake, but it does not own continuity. The installed application starts a user-only Unix socket broker. A programming AI opens or resumes a HoloLake-issued local session, then uses the installed executable's `--connector` mode for newline-delimited protocol traffic. Session secrets are stored only as hashes. Events use exact cursors and idempotency keys.
An authenticated non-visitor connector may now acquire, inspect and explicitly release the existing account-scoped development write lane through that broker. Account, lane and client instance must match the HoloLake session before the bridge mutates. HoloLake projects the same Rust-owned lane state on the system-details page, so a human can distinguish a nearby expression-only visitor from an active development writer. This is a controlled writer handoff, not a general programming tool loop: shell, file patching, build execution, publication and deployment still require later supervised execution organs and separate authorization receipts.
## Circular-lake protocol membrane and nearby AI
HoloLake 0.4.0 places a deterministic protocol membrane in front of the local language inbox. The membrane accepts only strict GLP/1.0 expression envelopes from a HoloLake-issued visitor session. Unknown fields, malformed identifiers, incorrect checksums, oversized content, attachments and command content are rejected before storage. Accepted natural language is an expression receipt only; it never carries execution authority by itself. Intent interpretation remains behind the membrane and cannot weaken its structural admission rules.

View file

@ -0,0 +1,34 @@
# ADR 0005: Authenticated development lane projection
- Status: accepted for the next HoloLake desktop candidate
- Date: 2026-08-17
## Context
The same-device HoloLake broker can already discover an external AI, open an expression-only visitor session, and resume a HoloLake-issued authenticated session. The local development bridge can already enforce one writer per account, but it is reachable only from the WebView command surface. As a result, an external programming carrier can be visibly connected while still being unable to acquire the HoloLake-owned development lane. The system page also cannot distinguish a connected visitor from an active development writer.
## Decision
Expose acquire, inspect, and release operations for the existing local development lane through the user-only Unix broker. Every operation requires a non-visitor HoloLake session. The session account must equal the lane account, the session lane must equal the requested write lane, and the session client instance must equal the requested writer instance. A generic expression-only visitor is rejected before any lane mutation.
Project the active lane and writer on the HoloLake system-details page by reading the same Rust-owned bridge state. The projection does not create authority and is not a second state store.
This slice establishes the controlled writer handoff only. It does not yet provide a general shell, file mutation, patch, build, deployment, model, persona binding, or reality-execution engine.
## Why
The user needs to see whether development is merely connected or has actually switched into HoloLake's single-writer environment. Reusing the existing session and writer kernels closes that gap without turning socket discovery, MCP, or a visitor message into execution authority.
## Rejected alternatives
- Letting any same-device visitor acquire a write lane: discovery and expression are not authorization.
- Maintaining a separate UI-only development status: it would create a second truth source.
- Calling the lane handoff a complete native development container: the programming tool loop and supervised execution engine remain unimplemented.
## Evidence
- `src-tauri/src/direct_local_broker.rs`
- `src-tauri/src/direct_local_session.rs`
- `src-tauri/src/local_development_bridge.rs`
- `src/main.tsx`
- `contracts/local-development-bridge.json`