ltcai 9.9.2 → 9.9.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (109) hide show
  1. package/README.md +44 -39
  2. package/docs/CHANGELOG.md +109 -0
  3. package/docs/COMMUNITY_AND_PLUGINS.md +1 -1
  4. package/docs/DEVELOPMENT.md +1 -1
  5. package/docs/ONBOARDING.md +1 -1
  6. package/docs/OPERATIONS.md +1 -1
  7. package/docs/SURFACE_PARITY.md +47 -0
  8. package/docs/TRUST_MODEL.md +1 -1
  9. package/docs/WHY_LATTICE.md +1 -1
  10. package/docs/kg-schema.md +1 -1
  11. package/lattice_brain/__init__.py +1 -1
  12. package/lattice_brain/graph/_kg_common.py +335 -0
  13. package/lattice_brain/graph/curator.py +141 -0
  14. package/lattice_brain/graph/discovery_index.py +8 -1
  15. package/lattice_brain/graph/documents.py +111 -0
  16. package/lattice_brain/graph/fusion.py +179 -0
  17. package/lattice_brain/graph/ingest.py +43 -9
  18. package/lattice_brain/graph/projection.py +382 -37
  19. package/lattice_brain/graph/retrieval.py +71 -4
  20. package/lattice_brain/graph/retrieval_policy.py +174 -0
  21. package/lattice_brain/graph/retrieval_vector.py +122 -2
  22. package/lattice_brain/ingestion.py +66 -0
  23. package/lattice_brain/portability.py +41 -12
  24. package/lattice_brain/runtime/multi_agent.py +1 -1
  25. package/latticeai/__init__.py +1 -1
  26. package/latticeai/api/automation_intelligence.py +159 -0
  27. package/latticeai/api/browser.py +15 -4
  28. package/latticeai/api/chat.py +33 -2
  29. package/latticeai/api/chat_agent_http.py +363 -6
  30. package/latticeai/api/chat_contracts.py +7 -1
  31. package/latticeai/api/chat_helpers.py +147 -0
  32. package/latticeai/api/chat_intents.py +217 -10
  33. package/latticeai/api/chat_stream.py +93 -3
  34. package/latticeai/api/funnel_metrics.py +31 -0
  35. package/latticeai/api/knowledge_graph.py +65 -1
  36. package/latticeai/api/local_files.py +90 -0
  37. package/latticeai/api/setup.py +134 -1
  38. package/latticeai/api/tools.py +33 -3
  39. package/latticeai/app_factory.py +14 -0
  40. package/latticeai/core/agent.py +355 -18
  41. package/latticeai/core/agent_eval.py +107 -0
  42. package/latticeai/core/enterprise.py +5 -0
  43. package/latticeai/core/file_generation.py +404 -2
  44. package/latticeai/core/legacy_compatibility.py +1 -1
  45. package/latticeai/core/marketplace.py +1 -1
  46. package/latticeai/core/run_store.py +243 -0
  47. package/latticeai/core/workspace_os.py +1 -1
  48. package/latticeai/models/router.py +25 -12
  49. package/latticeai/runtime/persistence_runtime.py +19 -1
  50. package/latticeai/runtime/router_registration.py +8 -1
  51. package/latticeai/services/app_context.py +3 -0
  52. package/latticeai/services/architecture_readiness.py +1 -1
  53. package/latticeai/services/automation_execution.py +266 -0
  54. package/latticeai/services/automation_intelligence.py +7 -0
  55. package/latticeai/services/command_center.py +110 -2
  56. package/latticeai/services/folder_watch.py +396 -0
  57. package/latticeai/services/funnel_metrics.py +210 -0
  58. package/latticeai/services/product_readiness.py +1 -1
  59. package/latticeai/services/search_service.py +51 -5
  60. package/latticeai/setup/demo_corpus.py +98 -0
  61. package/latticeai/tools/filesystem.py +38 -1
  62. package/package.json +1 -1
  63. package/scripts/bench_agent_smoke.py +410 -0
  64. package/scripts/bench_models.py +234 -5
  65. package/scripts/check_current_release_docs.mjs +1 -1
  66. package/scripts/funnel_soft_gate.py +192 -0
  67. package/src-tauri/Cargo.lock +1 -1
  68. package/src-tauri/Cargo.toml +1 -1
  69. package/src-tauri/tauri.conf.json +1 -1
  70. package/static/app/asset-manifest.json +29 -27
  71. package/static/app/assets/Act-BCmTU0E2.js +1 -0
  72. package/static/app/assets/{Brain-BnGbytHa.js → Brain-CTnjox7w.js} +2 -2
  73. package/static/app/assets/BrainHome-BJ3sFNX0.js +2 -0
  74. package/static/app/assets/BrainSignals-C52lwZVD.js +1 -0
  75. package/static/app/assets/{Capture-CAKnLcb0.js → Capture-B6vBhFa3.js} +1 -1
  76. package/static/app/assets/CommandPalette-90u9FWFH.js +1 -0
  77. package/static/app/assets/Library-pKCK0_tk.js +1 -0
  78. package/static/app/assets/{LivingBrain-C3VbogVo.js → LivingBrain-Jlf2wFqI.js} +1 -1
  79. package/static/app/assets/{ProductFlow-BLau7c7N.js → ProductFlow-yg1fKP1P.js} +1 -1
  80. package/static/app/assets/ReviewCard-DWvD7n9h.js +3 -0
  81. package/static/app/assets/{System-DRHc_6Su.js → System-BAEuHqNY.js} +1 -1
  82. package/static/app/assets/{bot-DZkDdh-A.js → bot-nB_buEZD.js} +1 -1
  83. package/static/app/assets/circle-pause-DLNw6Ucp.js +1 -0
  84. package/static/app/assets/circle-play-B-IsFL1y.js +1 -0
  85. package/static/app/assets/{cpu-DyvsDBbj.js → cpu-CEPBHaBl.js} +1 -1
  86. package/static/app/assets/{folder-open-CffoIr9t.js → folder-open-hmN0N9cX.js} +1 -1
  87. package/static/app/assets/{hard-drive-C1oojrHb.js → hard-drive-CBV_B_Yd.js} +1 -1
  88. package/static/app/assets/index-7FAfYm4v.css +2 -0
  89. package/static/app/assets/{index-BS_3aN1n.js → index-DrmOCySv.js} +3 -3
  90. package/static/app/assets/{input-B_U7zvbR.js → input-gtVCg-ll.js} +1 -1
  91. package/static/app/assets/{navigation-xG-gyjbe.js → navigation-Bot0hvuv.js} +1 -1
  92. package/static/app/assets/{network-BF13HJJF.js → network-jE42eKfT.js} +1 -1
  93. package/static/app/assets/{primitives-DsuKh3M8.js → primitives-CX2Komon.js} +1 -1
  94. package/static/app/assets/shield-alert-BftATuAA.js +1 -0
  95. package/static/app/assets/{textarea-DsDL4ET8.js → textarea-CiMJfOSI.js} +1 -1
  96. package/static/app/assets/useFocusTrap-B7RPGfFy.js +1 -0
  97. package/static/app/assets/utils-SJUNVOj5.js +7 -0
  98. package/static/app/index.html +4 -4
  99. package/static/sw.js +1 -1
  100. package/static/app/assets/Act-Cx_gZNbE.js +0 -1
  101. package/static/app/assets/BrainHome-CRUMJL93.js +0 -2
  102. package/static/app/assets/BrainSignals-BP8-Qh2g.js +0 -1
  103. package/static/app/assets/CommandPalette-BoUTXBfm.js +0 -1
  104. package/static/app/assets/Library-PcfVUco6.js +0 -1
  105. package/static/app/assets/ReviewCard-CX5RqRqx.js +0 -1
  106. package/static/app/assets/download-C7yxYHvz.js +0 -1
  107. package/static/app/assets/index-DU78Kogz.css +0 -2
  108. package/static/app/assets/sunrise-CIP2ELJ1.js +0 -1
  109. package/static/app/assets/utils-Dh-Dwtkb.js +0 -7
package/README.md CHANGED
@@ -11,7 +11,7 @@
11
11
  [![CI Status](https://github.com/TaeSooPark-PTS/LatticeAI/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/TaeSooPark-PTS/LatticeAI/actions/workflows/ci.yml)
12
12
  [![License](https://img.shields.io/badge/license-MIT-green)](LICENSE)
13
13
 
14
- ![v9.9.2 Living Brain walkthrough](output/release/v9.9.2/gifs/v9.9.2-living-brain-walkthrough.gif)
14
+ ![v9.9.4 Living Brain walkthrough](output/release/v9.9.4/gifs/v9.9.4-living-brain-walkthrough.gif)
15
15
 
16
16
  Chat, files, folders, notes, and web pages all flow into one durable knowledge
17
17
  graph on your computer. Any model — local MLX or cloud — can speak with that
@@ -24,9 +24,9 @@ memory. Nothing leaves your machine without explicit consent.
24
24
 
25
25
  | | |
26
26
  | --- | --- |
27
- | **Chat with a Brain that remembers** — every conversation grows durable, source-linked memory ![Brain Chat](output/release/v9.9.2/screenshots/04-brain-chat-home.png) | **See how knowledge connects** — a real relationship graph, not a file list ![Memory Graph](output/release/v9.9.2/screenshots/05-memory-graph.png) |
28
- | **Capture anything** — files, whole folders, notes, screenshots, web pages ![Capture](output/release/v9.9.2/screenshots/06-capture.png) | **Automate with review** — agent changes become proposals you approve first ![Review Center](output/release/v9.9.2/screenshots/12-review-center.png) |
29
- | **Pick a model in one click** — recommended local models for your hardware ![Recommended Models](output/release/v9.9.2/screenshots/02-recommended-models.png) | **Stay in control** — audit, roles, retention in a separate admin surface ![Admin Console](output/release/v9.9.2/screenshots/10-admin-console.png) |
27
+ | **Chat with a Brain that remembers** — every conversation grows durable, source-linked memory ![Brain Chat](output/release/v9.9.4/screenshots/04-brain-chat-home.png) | **See how knowledge connects** — a real relationship graph, not a file list ![Memory Graph](output/release/v9.9.4/screenshots/05-memory-graph.png) |
28
+ | **Capture anything** — files, whole folders, notes, screenshots, web pages ![Capture](output/release/v9.9.4/screenshots/06-capture.png) | **Automate with review** — agent changes become proposals you approve first ![Review Center](output/release/v9.9.4/screenshots/12-review-center.png) |
29
+ | **Pick a model in one click** — recommended local models for your hardware ![Recommended Models](output/release/v9.9.4/screenshots/02-recommended-models.png) | **Stay in control** — audit, roles, retention in a separate admin surface ![Admin Console](output/release/v9.9.4/screenshots/10-admin-console.png) |
30
30
 
31
31
  ## Why Lattice AI
32
32
 
@@ -57,49 +57,52 @@ First-run flow — wake the Brain, pick the owner, load a recommended model:
57
57
 
58
58
  | | | |
59
59
  | --- | --- | --- |
60
- | ![Login](output/release/v9.9.2/screenshots/01-login.png) | ![Model install](output/release/v9.9.2/screenshots/03-install-load-progress.png) | ![Model library](output/release/v9.9.2/screenshots/07-model-library.png) |
60
+ | ![Login](output/release/v9.9.4/screenshots/01-login.png) | ![Model install](output/release/v9.9.4/screenshots/03-install-load-progress.png) | ![Model library](output/release/v9.9.4/screenshots/07-model-library.png) |
61
61
 
62
62
  Screenshot index and capture notes:
63
- [output/release/v9.9.2/SCREENSHOT_INDEX.md](output/release/v9.9.2/SCREENSHOT_INDEX.md)
63
+ [output/release/v9.9.4/SCREENSHOT_INDEX.md](output/release/v9.9.4/SCREENSHOT_INDEX.md)
64
64
 
65
65
  ## Current Release
66
66
 
67
- The current release is **9.9.2Artifact Trust**:
68
-
69
- - **A clean core.** The historical repo-root compatibility shims are gone
70
- (only `server.py` remains for `uvicorn server:app`); packaging ships exactly
71
- the `latticeai.*` / `lattice_brain.*` packages, and a legacy debt gate in
72
- `npm run lint` plus a dedicated test suite keep the root clean for good.
73
- - **Your first five minutes matter.** A guided "First 5 minutes" card on the
74
- empty Brain home walks a new user through asking a first question, adding a
75
- first file or note, and seeing what the Brain learned wired to real
76
- features, with progress that persists and a briefing that loads immediately.
77
- - **Proactive intelligence you can actually see.** Today's briefing now lives
78
- on the Brain home instead of a double-collapsed drawer, and Cmd+K opens with
79
- proactive quick actions (open briefing, review pending items, ask the Brain)
80
- before you type a single letter.
81
- - **Review Center at product quality.** Proposal cards translate risk and
82
- change class into human language, frame diffs with file targets and honest
83
- truncation counts, tuck raw IDs into a "Technical details" disclosure, and
84
- every approve/reject failure shows a friendly message first.
85
- - **Errors that speak your language.** The API error pipeline is localized
86
- (ko/en): timeouts, unreachable-service, and backend failures produce plain,
87
- helpful copy instead of raw `statusText` or English literals, across chat,
88
- admin, care, and intelligence panels.
89
- - **Scenario-first tests, smaller evidence footprint.** 37 version-named test
90
- files were renamed to behavior-named suites, and `output/release/` now keeps
91
- only the newest three evidence sets (~70MB reclaimed) via an automated
92
- retention policy.
67
+ The current release is **9.9.4Durable Loops**:
68
+
69
+ - **Loops that survive restarts.** Paused `awaiting_approval` runs are
70
+ persisted to disk (hashed tokens, wall-clock expiry) and resume after a
71
+ server restart; expired approvals answer with a one-click replan hint, and
72
+ `GET /agent/approvals` re-surfaces pending runs. Approval cards show a live
73
+ TTL countdown.
74
+ - **You can watch the loop work.** Streamed agent runs emit named
75
+ `agent_step` SSE events (plan tools verify terminal) rendered as a
76
+ live step timeline; weak-model parse repairs are counted and surfaced
77
+ honestly ("모델 응답을 N회 보정했어요").
78
+ - **One retrieval policy.** A single `RetrievalPolicy` module (rule-based
79
+ query rewrite, query-class weights, 14-day recency age-decay in a
80
+ [0.5, 1.0] band) feeds both the service and graph fusion layers, gated by
81
+ the benchmark CI test; embedder swaps now report `stale_embedder` instead
82
+ of silently emptying the vector channel.
83
+ - **Retrieval quality at the chunk level.** Markdown chunks at heading
84
+ boundaries (with `heading_path` provenance), code at function boundaries,
85
+ PDF chunks carry page numbers, plain text stays byte-identical and
86
+ cited source cards click through to the stored chunk text.
87
+ - **Grounded answers, cited sources.** When retrieved context exists the
88
+ answer prompt instructs [1]-style citations; a synthetic grounding bench
89
+ gates the verdict heuristic in CI; briefings suggest periodic graph noise
90
+ curation, and an opt-in review mode stages curator promotions for human
91
+ approval.
92
+ - **A wider harness.** Manifest-aware plan rewriting plus React/Vite and
93
+ Python-package manifests, a bounded executor context window, five
94
+ deterministic workflow scenarios, a funnel soft gate, and a weekly
95
+ fail-open real-model agent smoke with a report artifact.
93
96
 
94
97
  Release notes: [RELEASE.md](RELEASE.md) · Full history: [docs/CHANGELOG.md](docs/CHANGELOG.md)
95
98
 
96
- Expected artifacts for 9.9.2 release must use exact filenames:
99
+ Expected artifacts for 9.9.4 release must use exact filenames:
97
100
 
98
- - `dist/ltcai-9.9.2-py3-none-any.whl`
99
- - `dist/ltcai-9.9.2.tar.gz`
100
- - `ltcai-9.9.2.tgz`
101
- - `dist/ltcai-9.9.2.vsix`
102
- - `src-tauri/target/release/bundle/dmg/Lattice AI_9.9.2_aarch64.dmg`
101
+ - `dist/ltcai-9.9.4-py3-none-any.whl`
102
+ - `dist/ltcai-9.9.4.tar.gz`
103
+ - `ltcai-9.9.4.tgz`
104
+ - `dist/ltcai-9.9.4.vsix`
105
+ - `src-tauri/target/release/bundle/dmg/Lattice AI_9.9.4_aarch64.dmg`
103
106
 
104
107
  Do not use wildcard artifact uploads. Package registry publishing remains owner-run.
105
108
 
@@ -119,7 +122,7 @@ See [ARCHITECTURE.md](ARCHITECTURE.md) for details and
119
122
 
120
123
  - External package registries are owner-published and can lag behind GitHub.
121
124
  - PostgreSQL/pgvector is optional scale/migration tooling. SQLite remains the
122
- live local Brain store in 9.9.2.
125
+ live local Brain store in 9.9.4.
123
126
  - Docker, model downloads, cloud model calls, Telegram, Brain Network, and
124
127
  update checks require explicit user action.
125
128
  - Conversation does not fabricate answers when no model is loaded. Agent and
@@ -131,6 +134,8 @@ See [ARCHITECTURE.md](ARCHITECTURE.md) for details and
131
134
 
132
135
  | Version | Theme |
133
136
  | --- | --- |
137
+ | 9.9.4 | Durable Loops |
138
+ | 9.9.3 | Closed Loops |
134
139
  | 9.9.2 | Artifact Trust |
135
140
  | 9.9.1 | Clean Foundations |
136
141
  | 9.9.0 | Fail-Closed Trust |
package/docs/CHANGELOG.md CHANGED
@@ -4,6 +4,115 @@ The top entry is either the current unreleased main-branch work or the current
4
4
  release line. Older entries are historical and may describe behavior as it
5
5
  existed at that release.
6
6
 
7
+ ## [9.9.4] - 2026-07-26
8
+
9
+ ### Added
10
+ - Durable approval/run store (`latticeai/core/run_store.py`): paused
11
+ `awaiting_approval` runs are mirrored to `data/agent_runs/` (one JSON file
12
+ per run, SHA-256 token hashes, wall-clock expiry) and resume across server
13
+ restarts; expired resumes answer 410 with a one-click replan hint;
14
+ `GET /agent/approvals` lists pending runs (memory ∪ disk).
15
+ - Single retrieval policy (`lattice_brain/graph/retrieval_policy.py`):
16
+ rule-based query rewrite (env kill-switch `LATTICEAI_QUERY_REWRITE=0`),
17
+ query-class fusion weights, and a 14-day recency half-life consumed by both
18
+ the 3-channel service fusion and the 2-channel graph fusion; responses
19
+ carry `policy {search_query, rewrite_rules}` and recency-class matches a
20
+ `scores.age_decay` multiplier in the [0.5, 1.0] band.
21
+ - Live agent step streaming: `AgentDeps.on_step` / per-run `ctx.on_step`
22
+ observers emit plan/approval/execute/verify/rollback/terminal events;
23
+ streamed agent chats send named `event: agent_step` SSE frames
24
+ (`agent_live_stream`) before the unchanged final payload frames; the UI
25
+ renders a live step timeline with a collapsed post-run summary.
26
+ - Type-aware chunking: markdown chunks at heading boundaries with
27
+ `heading_path` provenance, code chunks at function/blank-line boundaries,
28
+ plain text byte-identical to the legacy chunker (same chunk ids); every
29
+ chunk records `strategy` + `start_char`; PDF chunks carry a 1-based `page`
30
+ derived from per-page extraction offsets (omitted when implausible).
31
+ - Embedder fingerprint: the vector index records the embedder model id +
32
+ dimension; a swap surfaces `stale_embedder` in `index_status().embedder`,
33
+ vector freshness, and hybrid `vector_degraded` instead of silently empty
34
+ vector channels.
35
+ - Citation-instructed answers: one `_compose_system` helper (all four prompt
36
+ paths) appends `CITATION_INSTRUCTION` whenever retrieved context exists; a
37
+ deterministic synthetic grounding bench gates `assess_answer_grounding`
38
+ verdict accuracy in CI.
39
+ - Graph hygiene cadence: Command Center briefing gains a `hygiene` section +
40
+ one-click dry-run quick action suggesting `/knowledge-graph/curate/noise`
41
+ when the graph exceeds 200 nodes and no curation ran in 7 days
42
+ (`last_noise_curate_at` in graph_meta).
43
+ - Review-before-promote: `LATTICEAI_GRAPH_PROMOTION_REVIEW=1` (or the
44
+ `GRAPH_PROMOTION_REVIEW` enterprise capability) stages curator topic
45
+ promotions as `pending_promotions` instead of writing them;
46
+ `GET /knowledge-graph/promotions` + `apply`/`reject` endpoints.
47
+ - Project manifests beyond web: React/Vite starter (package.json, module-entry
48
+ index.html, src/main.jsx, src/App.jsx, src/App.css) and Python package
49
+ (`pkg/__init__.py`, `core.py`, `cli.py`, README.md); `normalize_plan`
50
+ rewrites empty/partial pure-file plans to the manifest
51
+ (`manifest_steps`/`manifest_rewrite` plan fixes).
52
+ - Harness: five deterministic workflow/multi-agent scenarios;
53
+ `scripts/funnel_soft_gate.py` (advisory code_only/needs_review thresholds,
54
+ `--strict` opt-in); `approval_pauses`/`approval_resumes` counters +
55
+ `approval_resume_rate`; `scripts/bench_agent_smoke.py` weekly fail-open
56
+ real-model agent smoke + `agent-smoke.yml` workflow (report artifact, never
57
+ a gate).
58
+ - Frontend: agent step timeline, source-card → stored-chunk modal, folder
59
+ watch health card, approval TTL countdown with expiry replan, generated-file
60
+ "remembered in Brain" chips, demo-corpus → "connect your own data" CTA,
61
+ parse-repair count note — all ko/en parity and bundle-budget clean.
62
+ - `docs/SURFACE_PARITY.md`: per-surface capability matrix with honest gaps.
63
+
64
+ ### Changed
65
+ - Executor prompts use a sliding transcript window (recent 8 steps full,
66
+ older steps one-line summaries, per-string truncation caps, last 3
67
+ corrections); the critic sees every step with capped string bodies
68
+ (`TranscriptBudget`, `LATTICEAI_AGENT_TRANSCRIPT_*`).
69
+ - Agent memory learnings now record the actual terminal status (ok /
70
+ needs_review / failed) and prompt for what-went-wrong on non-DONE runs.
71
+
72
+ ## [9.9.3] - 2026-07-22
73
+
74
+ ### Added
75
+ - Multi-file Artifact Loop: `infer_project_manifest` → per-file
76
+ generate/validate → cross-file reference repair → bundle validation →
77
+ `artifacts[]` + `project.zip_url`; safe `GET /tools/download_zip`.
78
+ - Interactive approval: governed plans pause as `awaiting_approval` with a
79
+ single-use 10-minute token; `POST /agent/resume` approves, edits, or
80
+ cancels. Inline approval card in chat.
81
+ - First Value Loop: `POST/GET/DELETE /api/setup/demo-corpus` (3 built-in demo
82
+ documents, `demo://` provenance, idempotent) + the "30초 체험" home track
83
+ with suggested-question chips.
84
+ - Answer grounding: `grounding {status, source_ids, overlap}` on chat
85
+ responses; 근거 있음/근거 없음 badge.
86
+ - Retrieval fusion: query-class detection (fact/code/person/recency) with
87
+ per-class channel weights and a benchmark-threshold CI gate
88
+ (`tests/unit/test_retrieval_fusion_gate.py`).
89
+ - Opt-in folder watch (`/api/ingestion/watch`, polling + persisted consent),
90
+ capture-quality CTA (`capture_quality` on browser captures), graph noise
91
+ curation job (`POST /knowledge-graph/curate/noise`, dry-run default).
92
+ - Automation visibility: `POST /api/automation/run-now` (dry-run-first),
93
+ `last_execution` on overview/briefing, failed runs → Review queue; Act-panel
94
+ "지금 한 번 실행" cards.
95
+ - UX: inline file preview (sandboxed iframe / modal), folder job report card,
96
+ global drag-and-drop capture, 409 proposal rebase flow, focus traps, graph
97
+ keyboard navigation, reduced-motion coverage, success pulse / inflow motes.
98
+ - Harness: agent_eval 23 scenarios (dirty-write filegen paths), golden
99
+ sanitize fixtures, `bench_models.py --filegen` (fail-open), deterministic
100
+ knowledge-pipeline E2E test, funnel metrics
101
+ (`GET /api/admin/funnel-metrics`), `PhaseBudgets` per-phase token caps,
102
+ `.ts/.tsx/.jsx/.vue/.svelte` filegen validation and Python `ast.parse`.
103
+
104
+ ### Changed
105
+ - Approval-requiring agent runs return `awaiting_approval` instead of FAILED;
106
+ legacy `context_id` resume with `approved: true` now executes the gated
107
+ steps.
108
+ - Hybrid search responses expose `query_class`; chat responses expose
109
+ `grounding`; automation overview exposes `last_execution`.
110
+
111
+ ### Fixed
112
+ - Fenced/chatty CSS is now sanitized before write (`.css` validation rejects
113
+ Markdown fences) — caught by the new golden fixtures.
114
+ - A legacy approved resume no longer re-fails at the approval gate.
115
+
7
116
  ## [9.9.2] - 2026-07-21
8
117
 
9
118
  ### Added
@@ -1,6 +1,6 @@
1
1
  # Community And Plugins
2
2
 
3
- Current release: **9.9.2Artifact Trust**.
3
+ Current release: **9.9.4Durable Loops**.
4
4
 
5
5
  LatticeAI defines the path from a strong local-first framework (8.4.0
6
6
  action-aware baseline, 8.5.0 registry+DI hardening, 8.6.0 capture/navigation
@@ -3,7 +3,7 @@
3
3
  > **Status: canonical** — current contributor guidance, kept in sync with the
4
4
  > current release.
5
5
 
6
- Current release: **9.9.2Artifact Trust**.
6
+ Current release: **9.9.4Durable Loops**.
7
7
 
8
8
  This document is for contributors working on the local-first Digital Brain
9
9
  codebase. Product positioning and quick start stay in `README.md`; release
@@ -1,6 +1,6 @@
1
1
  # Lattice AI Onboarding
2
2
 
3
- Current release: **9.9.2Artifact Trust**.
3
+ Current release: **9.9.4Durable Loops**.
4
4
 
5
5
  The first-run goal is a five-minute path from "I opened the app" to "my Brain
6
6
  has a source, a question, and proof." This page is the product contract behind
@@ -1,4 +1,4 @@
1
- # Lattice AI — Operations Guide (v9.9.2)
1
+ # Lattice AI — Operations Guide (v9.9.4)
2
2
 
3
3
  > **Status: canonical** — kept in sync with the current release. Storage layout
4
4
  > below reflects the SQLite live Brain store and workspace scoping, not the
@@ -0,0 +1,47 @@
1
+ # Lattice AI — Surface Parity Matrix
2
+
3
+ > **Status: reference**
4
+ > 도입: v9.9.4 (2026-07-25, 리뷰 Wave 1.4 "표면 패리티 체크리스트").
5
+ > 목적: 각 표면(서피스)이 Brain 계약의 어디까지를 제공하는지 **정직하게** 기록한다.
6
+ > "앱마다 다른 Lattice"를 방지하는 기준표이며, 기능을 과장하지 않는다.
7
+
8
+ ## 표면 정의
9
+
10
+ | 표면 | 진입점 | 성격 |
11
+ | --- | --- | --- |
12
+ | Web `/app` | FastAPI sidecar가 서빙하는 SPA (`static/app`) | 1차 표면 — 모든 기능의 기준 |
13
+ | Desktop | Tauri 셸 (`src-tauri/`) | 동일 SPA를 감싸는 셸 — 웹과 구조적 동일 |
14
+ | VS Code | `vscode-extension/` (`ltcai.*` 커맨드) | 에디터 보조 표면 |
15
+ | Browser | `browser-extension/` (Send to Lattice) | 캡처 전용 표면 |
16
+ | Telegram | 봇 어댑터 | 대화 전용 표면 |
17
+
18
+ ## 네 가지 루프 순간 × 표면
19
+
20
+ ✅ 제공 · ◐ 부분 제공 · — 미제공(의도) · ✖ 갭(백로그)
21
+
22
+ | 루프 순간 | Web `/app` | Desktop | VS Code | Browser | Telegram |
23
+ | --- | --- | --- | --- | --- | --- |
24
+ | 첫 저장 (Capture) | ✅ DnD·폴더·웹 수집, 품질 경고 | ✅ (웹과 동일) | ◐ `sendToLattice` 선택 영역 전송 | ✅ 페이지 캡처 (단일 목적) | ◐ 메시지 수집 |
25
+ | 첫 회상 (Recall) | ✅ 하이브리드 검색 + grounding 배지 + 출처→청크 | ✅ (동일) | ◐ `askCurrentFile` — 배지 없음 ✖ | — | ◐ 답변만, 배지 없음 |
26
+ | 첫 산출물 (Artifact) | ✅ artifacts[] 카드·미리보기·Brain 기억 칩 | ✅ (동일) | ◐ `createFile` — 검증 파이프라인 경유, 카드 UI 없음 | — | ◐ 파일 전송만 |
27
+ | 첫 보호 (Approval) | ✅ 승인 카드 + TTL 카운트다운 + 재시작 생존 | ✅ (동일) | ✖ 승인 UI 없음 — 웹으로 유도 | — | ✖ 승인 불가 — 웹으로 유도 |
28
+
29
+ ## 기능 상세 × 표면
30
+
31
+ | 기능 | Web `/app` | Desktop | VS Code | Browser | Telegram |
32
+ | --- | --- | --- | --- | --- | --- |
33
+ | 에이전트 스텝 타임라인 (v9.9.4) | ✅ 라이브 SSE | ✅ | — | — | — |
34
+ | 승인 재개 (`/agent/resume`) | ✅ | ✅ | ✖ | — | ✖ |
35
+ | 대기 중 승인 목록 (`GET /agent/approvals`, v9.9.4) | ✅ | ✅ | ✖ | — | — |
36
+ | Watch 상태 신호 (v9.9.4) | ✅ 홈 카드 | ✅ | — | — | — |
37
+ | Review Center (제안 승인/거절) | ✅ | ✅ | ✖ | — | — |
38
+ | 데모 코퍼스 First Value Loop | ✅ | ✅ | — | — | — |
39
+ | 모델 로드/추천 | ✅ | ✅ | ◐ `loadModel` | — | — |
40
+ | 코드 편집 보조 (edit/explain/refactor/tests) | — | — | ✅ | — | — |
41
+
42
+ ## 규칙
43
+
44
+ 1. **API 계약이 기준이다.** 모든 표면은 동일한 sidecar API를 소비한다. 표면별 전용 API를 만들지 않는다.
45
+ 2. **◐/✖ 는 문서화된 상태로만 존재한다.** 새 기능을 Web에 추가할 때 이 표를 갱신하고, 다른 표면에 제공하지 않을 경우 "—(의도)" 인지 "✖(갭)" 인지 명시한다.
46
+ 3. **✖ 갭은 릴리스 노트의 Honest Limitations 후보다.** 현재 갭: VS Code/Telegram 승인 흐름(웹으로 유도하는 안내만 존재), VS Code 회상 배지.
47
+ 4. 릴리스마다 이 표를 검토한다 (release checklist의 docs 단계).
@@ -1,6 +1,6 @@
1
1
  # Lattice AI Trust Model
2
2
 
3
- Current release: **9.9.2Artifact Trust**.
3
+ Current release: **9.9.4Durable Loops**.
4
4
 
5
5
  Lattice AI is local-first, explicit about external communication, and honest
6
6
  when a capability is unavailable.
@@ -1,6 +1,6 @@
1
1
  # Why Lattice AI Exists
2
2
 
3
- Current release: **9.9.2Artifact Trust**.
3
+ Current release: **9.9.4Durable Loops**.
4
4
 
5
5
  **Lattice AI is a local-first Digital Brain that keeps your knowledge durable
6
6
  across any AI model.**
package/docs/kg-schema.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Knowledge Graph Schema
2
2
 
3
- Current release: **9.9.2Artifact Trust**.
3
+ Current release: **9.9.4Durable Loops**.
4
4
 
5
5
  명세 출처: `lattice_ai_full_spec.pptx` 슬라이드 20·21·22
6
6
  구현: `lattice_brain/graph/schema.py`
@@ -26,7 +26,7 @@ from .storage import (
26
26
  storage_from_env,
27
27
  )
28
28
 
29
- __version__ = "9.9.2"
29
+ __version__ = "9.9.4"
30
30
 
31
31
  __all__ = [
32
32
  "AgentRuntime",