ltcai 8.0.0 → 8.2.0
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.
- package/README.md +33 -72
- package/docs/CHANGELOG.md +52 -874
- package/docs/DEVELOPMENT.md +26 -3
- package/docs/LEGACY_COMPATIBILITY.md +3 -1
- package/docs/TRUST_MODEL.md +26 -26
- package/docs/WHY_LATTICE.md +28 -25
- package/docs/kg-schema.md +6 -4
- package/lattice_brain/__init__.py +1 -1
- package/lattice_brain/embeddings.py +9 -1
- package/lattice_brain/graph/schema.py +6 -0
- package/lattice_brain/runtime/multi_agent.py +1 -1
- package/latticeai/__init__.py +1 -1
- package/latticeai/api/computer_use.py +2 -0
- package/latticeai/api/memory.py +13 -0
- package/latticeai/app_factory.py +43 -162
- package/latticeai/brain/__init__.py +1 -1
- package/latticeai/core/config.py +10 -0
- package/latticeai/core/local_embeddings.py +8 -0
- package/latticeai/core/marketplace.py +1 -1
- package/latticeai/core/mcp_registry.py +140 -1
- package/latticeai/core/tool_registry.py +10 -0
- package/latticeai/core/workspace_graph_trace.py +132 -0
- package/latticeai/core/workspace_memory.py +75 -0
- package/latticeai/core/workspace_os.py +135 -1283
- package/latticeai/core/workspace_os_utils.py +132 -0
- package/latticeai/core/workspace_permissions.py +99 -0
- package/latticeai/core/workspace_plugins.py +97 -0
- package/latticeai/core/workspace_runs.py +612 -0
- package/latticeai/core/workspace_skills.py +114 -0
- package/latticeai/core/workspace_snapshots.py +195 -0
- package/latticeai/core/workspace_timeline.py +107 -0
- package/latticeai/runtime/audit_runtime.py +64 -0
- package/latticeai/runtime/config_runtime.py +4 -0
- package/latticeai/runtime/sso_runtime.py +52 -0
- package/latticeai/services/architecture_readiness.py +6 -5
- package/latticeai/services/memory_service.py +215 -7
- package/latticeai/services/model_capability_registry.py +68 -0
- package/latticeai/services/model_engines.py +603 -0
- package/latticeai/services/model_loading.py +482 -0
- package/latticeai/services/model_recommendation.py +5 -0
- package/latticeai/services/model_runtime.py +146 -837
- package/latticeai/services/product_readiness.py +19 -18
- package/package.json +2 -2
- package/scripts/build_frontend_assets.mjs +11 -2
- package/src-tauri/Cargo.lock +1 -1
- package/src-tauri/Cargo.toml +1 -1
- package/src-tauri/tauri.conf.json +1 -1
- package/static/app/asset-manifest.json +11 -102
- package/static/app/assets/Act-D9jIknFd.js +1 -0
- package/static/app/assets/Brain-CFOtWbPN.js +321 -0
- package/static/app/assets/{Capture-B9Tlhzqr.js → Capture-Q4WYzwr5.js} +1 -2
- package/static/app/assets/Library-C5Q2yWee.js +1 -0
- package/static/app/assets/System-BLbjdr1_.js +1 -0
- package/static/app/assets/core-CwxXejkd.js +1 -2
- package/static/app/assets/index-BqammyNu.js +16 -0
- package/static/app/assets/index-ty1iGgZu.css +2 -0
- package/static/app/assets/primitives-Br8uSfZ4.js +1 -0
- package/static/app/assets/{textarea-BZk6ybp5.js → textarea-BnhNs1_X.js} +1 -2
- package/static/app/index.html +3 -10
- package/static/app/theme-boot.js +8 -0
- package/static/sw.js +1 -1
- package/tools/__init__.py +2 -1
- package/tools/computer.py +21 -0
- package/docs/CARRYOVER_AUDIT_v3.6.0.md +0 -61
- package/docs/HANDOVER_v3.6.0.md +0 -46
- package/docs/RUNTIME_HOOK_COVERAGE_v3.5.0.md +0 -56
- package/docs/RUNTIME_HOOK_COVERAGE_v3.6.0.md +0 -49
- package/docs/V2_ARCHITECTURE.md +0 -561
- package/docs/V3_2_AUDIT.md +0 -82
- package/docs/V3_BACKEND_ARCHITECTURE.md +0 -138
- package/docs/V3_FRONTEND.md +0 -140
- package/docs/V4_1_FRONTEND_ARCHITECTURE_REVIEW.md +0 -65
- package/docs/V4_1_FRONTEND_MIGRATION_REPORT.md +0 -70
- package/docs/V4_1_VALIDATION_REPORT.md +0 -47
- package/docs/V4_2_BRAIN_CORE_ARCHITECTURE.md +0 -97
- package/docs/V4_2_STORAGE_MIGRATION_REPORT.md +0 -91
- package/docs/V4_2_VALIDATION_REPORT.md +0 -89
- package/docs/V4_3_2_DEADCODE_AUDIT_REPORT.md +0 -174
- package/docs/V4_3_2_DOCUMENTATION_CLEANUP_REPORT.md +0 -81
- package/docs/V4_3_2_GITHUB_VERCEL_CHECK_REPORT.md +0 -75
- package/docs/V4_3_2_GRAPH_UX_REPORT.md +0 -48
- package/docs/V4_3_2_INDEPENDENT_AUDIT_PACKAGE.md +0 -209
- package/docs/V4_3_2_PRODUCT_POLISH_REPORT.md +0 -57
- package/docs/V4_3_2_SELF_AUDIT_REPORT.md +0 -63
- package/docs/V4_3_2_VALIDATION_REPORT.md +0 -97
- package/docs/V4_3_3_VALIDATION_REPORT.md +0 -46
- package/docs/V4_3_PORTABILITY_ARCHITECTURE.md +0 -69
- package/docs/V4_3_PRIVACY_AUDIT.md +0 -60
- package/docs/V4_3_PRODUCT_HARDENING_REPORT.md +0 -53
- package/docs/V4_3_VALIDATION_REPORT.md +0 -58
- package/docs/V4_4_0_EXTRACTION_REPORT.md +0 -239
- package/docs/V4_5_0_GEMMA_RUNTIME_COMPATIBILITY_REPORT.md +0 -49
- package/docs/V4_5_0_GRAPH_UX_REPORT.md +0 -34
- package/docs/V4_5_0_MODEL_RUNTIME_UX_REPORT.md +0 -40
- package/docs/V4_5_0_ONBOARDING_REPORT.md +0 -31
- package/docs/V4_5_0_PRODUCT_EXPERIENCE_RECOVERY_REPORT.md +0 -49
- package/docs/V4_5_0_VALIDATION_REPORT.md +0 -60
- package/docs/V4_5_1_GRAPH_EXPERIENCE_REPORT.md +0 -33
- package/docs/V4_5_1_MODEL_EXPERIENCE_REPORT.md +0 -37
- package/docs/V4_5_1_NAVIGATION_REPORT.md +0 -37
- package/docs/V4_5_1_ONBOARDING_REPORT.md +0 -29
- package/docs/V4_5_1_PRODUCT_REIMAGINING_REPORT.md +0 -61
- package/docs/V4_5_1_RC_ARTIFACTS.md +0 -44
- package/docs/V4_5_1_UX_REPORT.md +0 -45
- package/docs/V4_5_1_VALIDATION_REPORT.md +0 -55
- package/docs/V4_5_1_VISUAL_DESIGN_REPORT.md +0 -30
- package/docs/V4_6_0_LIVING_BRAIN_EXPERIENCE_REPORT.md +0 -72
- package/docs/V4_6_1_RELEASE_REFRESH_REPORT.md +0 -42
- package/docs/V4_7_0_ADMIN_SEPARATION_REPORT.md +0 -42
- package/docs/V4_7_1_ADMIN_OPERATIONS_REPORT.md +0 -49
- package/docs/V4_7_2_INTUITIVE_BRAIN_UX_REPORT.md +0 -62
- package/docs/V4_BRAIN_ARCHITECTURE.md +0 -322
- package/docs/V4_DIGITAL_BRAIN_RECOVERY.md +0 -555
- package/docs/V4_IMPLEMENTATION_PLAN.md +0 -470
- package/frontend/index.html +0 -24
- package/frontend/openapi.json +0 -15425
- package/frontend/src/App.tsx +0 -243
- package/frontend/src/api/client.ts +0 -580
- package/frontend/src/api/openapi.ts +0 -17892
- package/frontend/src/components/AdminAccessGate.tsx +0 -70
- package/frontend/src/components/FeedbackState.tsx +0 -45
- package/frontend/src/components/LanguageSwitcher.tsx +0 -23
- package/frontend/src/components/LivingBrain.tsx +0 -220
- package/frontend/src/components/ProductFlow.tsx +0 -171
- package/frontend/src/components/WorkspaceProfileSwitcher.tsx +0 -176
- package/frontend/src/components/onboarding/AnalysisScreen.tsx +0 -135
- package/frontend/src/components/onboarding/DownloadConsentPanel.tsx +0 -29
- package/frontend/src/components/onboarding/InstallScreen.tsx +0 -263
- package/frontend/src/components/onboarding/LanguageChooser.tsx +0 -23
- package/frontend/src/components/onboarding/LoginScreen.tsx +0 -131
- package/frontend/src/components/onboarding/ProductFlowScreens.tsx +0 -13
- package/frontend/src/components/onboarding/RecommendationScreen.tsx +0 -116
- package/frontend/src/components/onboarding/recommendationModel.ts +0 -189
- package/frontend/src/components/primitives.tsx +0 -392
- package/frontend/src/components/ui/badge.tsx +0 -27
- package/frontend/src/components/ui/button.tsx +0 -37
- package/frontend/src/components/ui/card.tsx +0 -22
- package/frontend/src/components/ui/input.tsx +0 -16
- package/frontend/src/components/ui/textarea.tsx +0 -16
- package/frontend/src/features/admin/AdminConsole.tsx +0 -334
- package/frontend/src/features/brain/BrainCarePanel.tsx +0 -254
- package/frontend/src/features/brain/BrainComposer.tsx +0 -85
- package/frontend/src/features/brain/BrainConversation.tsx +0 -688
- package/frontend/src/features/brain/BrainGraphLayer.tsx +0 -365
- package/frontend/src/features/brain/BrainHome.tsx +0 -624
- package/frontend/src/features/brain/BrainMemoryLayer.tsx +0 -45
- package/frontend/src/features/brain/BrainOverviewPanel.tsx +0 -149
- package/frontend/src/features/brain/BrainRelationshipLayer.tsx +0 -43
- package/frontend/src/features/brain/DepthEmergence.tsx +0 -53
- package/frontend/src/features/brain/brainData.ts +0 -246
- package/frontend/src/features/brain/graphLayout.ts +0 -37
- package/frontend/src/features/brain/types.ts +0 -150
- package/frontend/src/features/review/ReviewCard.tsx +0 -100
- package/frontend/src/features/review/ReviewInbox.tsx +0 -127
- package/frontend/src/features/review/reviewHelpers.ts +0 -69
- package/frontend/src/i18n.ts +0 -1303
- package/frontend/src/lib/utils.ts +0 -33
- package/frontend/src/main.tsx +0 -23
- package/frontend/src/pages/Act.tsx +0 -458
- package/frontend/src/pages/Ask.tsx +0 -14
- package/frontend/src/pages/Brain.tsx +0 -914
- package/frontend/src/pages/Capture.tsx +0 -258
- package/frontend/src/pages/Library.tsx +0 -486
- package/frontend/src/pages/System.tsx +0 -621
- package/frontend/src/routes.ts +0 -92
- package/frontend/src/store/appStore.ts +0 -94
- package/frontend/src/styles.css +0 -6579
- package/static/app/assets/Act-DOvf59ru.js +0 -2
- package/static/app/assets/Act-DOvf59ru.js.map +0 -1
- package/static/app/assets/Brain-C7_0mEiI.js +0 -322
- package/static/app/assets/Brain-C7_0mEiI.js.map +0 -1
- package/static/app/assets/Capture-B9Tlhzqr.js.map +0 -1
- package/static/app/assets/Library-BJPEEm5O.js +0 -2
- package/static/app/assets/Library-BJPEEm5O.js.map +0 -1
- package/static/app/assets/System-D6t9jo9V.js +0 -2
- package/static/app/assets/System-D6t9jo9V.js.map +0 -1
- package/static/app/assets/core-CwxXejkd.js.map +0 -1
- package/static/app/assets/index-C7g26IF6.css +0 -2
- package/static/app/assets/index-DbcEYJQ2.js +0 -17
- package/static/app/assets/index-DbcEYJQ2.js.map +0 -1
- package/static/app/assets/primitives-CD38lt4n.js +0 -2
- package/static/app/assets/primitives-CD38lt4n.js.map +0 -1
- package/static/app/assets/textarea-BZk6ybp5.js.map +0 -1
package/docs/HANDOVER_v3.6.0.md
DELETED
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
# Lattice AI v3.6.0 — Completion Record (Knowledge Graph First)
|
|
2
|
-
|
|
3
|
-
**Status: ✅ RELEASED — 2026-06-10.** All planned scopes implemented, tested,
|
|
4
|
-
committed, pushed, CI green, tagged, and published. No external publish/deploy.
|
|
5
|
-
|
|
6
|
-
- **Tag:** `v3.6.0` → commit `3c85675`
|
|
7
|
-
- **GitHub Release:** https://github.com/TaeSooPark-PTS/LatticeAI/releases/tag/v3.6.0
|
|
8
|
-
(published, not draft; assets: `ltcai-3.6.0-py3-none-any.whl`,
|
|
9
|
-
`ltcai-3.6.0.tar.gz`, `ltcai-3.6.0.tgz`, `ltcai-3.6.0.vsix`)
|
|
10
|
-
- **CI:** main CI ✓, Visual Smoke ✓, release.yml (tag) ✓
|
|
11
|
-
- **Tests:** unit 455 passing · lint 64/64 · check:python 153 (3.11/3.12/3.14) ·
|
|
12
|
-
release artifacts built + validated
|
|
13
|
-
|
|
14
|
-
## Commits (v3.5.0 → v3.6.0)
|
|
15
|
-
|
|
16
|
-
| Commit | Scope |
|
|
17
|
-
|---|---|
|
|
18
|
-
| `baa2bf6` | chore(audit) — v3.5.0 carry-over (0 blocking) |
|
|
19
|
-
| `5a6a7d4` | feat(kg) — entities/relationships schema |
|
|
20
|
-
| `135e81a` | feat(kg) — unified ingestion pipeline + provenance |
|
|
21
|
-
| `b548885` | feat(browser) — browser/web ingestion + MV3 extension |
|
|
22
|
-
| `39a7a0c` | feat(kg) — export/import/backup/restore |
|
|
23
|
-
| `21cfb97` | fix(runtime) — hook coverage for ingestion paths |
|
|
24
|
-
| `7009e39` | fix(ui) — Knowledge Graph as primary surface |
|
|
25
|
-
| `fa89a84` | docs(philosophy) — Digital Brain Platform rewrite |
|
|
26
|
-
| `aa011a5` | release: v3.6.0 (version bump) |
|
|
27
|
-
| `3c85675` | fix(ci) — 3.11-compatible f-string (PEP 701 quote reuse) |
|
|
28
|
-
|
|
29
|
-
## Carry-over audit result
|
|
30
|
-
|
|
31
|
-
Zero blocking items. Settled postures preserved: Vercel landing-only, OIDC
|
|
32
|
-
RSA-only, legacy `/account` `/admin` out of scope. The one honest v3.5.0 gap (KG
|
|
33
|
-
ingestion not firing tool hooks) is **closed**. Full detail:
|
|
34
|
-
`docs/CARRYOVER_AUDIT_v3.6.0.md`.
|
|
35
|
-
|
|
36
|
-
## Key facts for future work
|
|
37
|
-
|
|
38
|
-
- New seams: `latticeai/services/ingestion.py` (single write-side entrypoint),
|
|
39
|
-
`latticeai/services/kg_portability.py`, `latticeai/api/browser.py`,
|
|
40
|
-
`latticeai/api/portability.py`, provenance in `knowledge_graph.py`.
|
|
41
|
-
- **Gotcha:** PEP 701 f-string quote reuse (`f'{x or ''}'`) compiles on 3.12+ but
|
|
42
|
-
is a SyntaxError on 3.11 — always run `python3.11 scripts/check_python.py`
|
|
43
|
-
before pushing (CI tests on 3.11 + 3.12).
|
|
44
|
-
- Version canonical: `WORKSPACE_OS_VERSION`; mirrors enforced by
|
|
45
|
-
`test_version_consistency.py`.
|
|
46
|
-
- Local tests need `.venv/bin/python` (system `python3` lacks fastapi).
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
# Runtime Hook Coverage — v3.5.0
|
|
2
|
-
|
|
3
|
-
Every place Lattice AI executes a real tool or agent action, and whether it runs
|
|
4
|
-
through the unified lifecycle. The single tool path is
|
|
5
|
-
`dispatch_tool(hooks, name, args, run_fn)` in `latticeai/core/hooks.py`
|
|
6
|
-
(`pre_tool → execute → post_tool`); the HTTP helper `_tool_response`
|
|
7
|
-
(`latticeai/api/tools.py`) wraps it; uploads use the parallel
|
|
8
|
-
`pre_upload/post_upload/pre_index/post_index` lifecycle
|
|
9
|
-
(`latticeai/services/upload_service.py`); agent runs use `pre_run/post_run`.
|
|
10
|
-
|
|
11
|
-
**Method.** Routers/services were enumerated by a 6-way parallel audit and then
|
|
12
|
-
each genuine execution path was verified by reading the call site. A path is a
|
|
13
|
-
*bypass* only if a real tool/agent action skips its lifecycle. Read-only metadata
|
|
14
|
-
endpoints (status, list-permissions, config) execute no tool and are not bypasses.
|
|
15
|
-
|
|
16
|
-
**Result.** All discovered tool/agent execution paths are covered. The four
|
|
17
|
-
remaining "uncovered" rows are deliberate, documented design decisions (service
|
|
18
|
-
maintenance ops + an action already inside the upload lifecycle), not gaps.
|
|
19
|
-
|
|
20
|
-
## Tool / agent execution paths
|
|
21
|
-
|
|
22
|
-
| Entrypoint | Execution | Lifecycle path | pre fired | post fired | Test |
|
|
23
|
-
|---|---|---|---|---|---|
|
|
24
|
-
| `POST /tools/list_dir`, `workspace_tree`, `write_file`, `search_files`, `todo_*`, `inspect_html`, `preview_url`, `create_*`, `read_document`, `knowledge_*`, `obsidian_*`, `network_status` | tool fn | `_tool_response`→`dispatch_tool` | yes (`pre_tool`) | yes (`post_tool`) | `test_hooks_dispatch`, `test_runtime_coverage` |
|
|
25
|
-
| `POST /tools/read_file` | `read_file` (kwargs) | `_tool_response` (kwargs-aware) ✅v3.5.0 | yes | yes | `test_runtime_coverage` |
|
|
26
|
-
| `POST /tools/edit_file` | `edit_file` (kwargs) | `_tool_response` ✅v3.5.0 | yes | yes | `test_runtime_coverage` |
|
|
27
|
-
| `POST /tools/grep` | `grep` (kwargs) | `_tool_response` ✅v3.5.0 | yes | yes | `test_runtime_coverage` |
|
|
28
|
-
| `POST /tools/clear_history` | `clear_history` | `_dispatch`→`dispatch_tool` ✅v3.5.0 | yes | yes | `test_runtime_coverage` |
|
|
29
|
-
| `POST /tools/git_*`, `run_command`, `build_project`, `deploy_project` | tool fn | `_tool_response` | yes | yes | `test_route_compatibility` |
|
|
30
|
-
| `POST /local/*` (list/read/write) | `local_*` | `tool_response` | yes | yes | `test_route_compatibility` |
|
|
31
|
-
| `GET/POST /cu/*` (open_app/url/click/type/key/scroll/move/drag) | `computer_*` | `tool_response` | yes | yes | `test_runtime_coverage` |
|
|
32
|
-
| `GET /cu/status`, `/cu/screenshot` | `computer_status/screenshot` | `_dispatch` ✅v3.5.0 | yes | yes | `test_runtime_coverage` |
|
|
33
|
-
| `POST /cu/agent` (agent loop) | `execute_tool(name,args)` per step + Chrome shortcut | `_dispatch`→`dispatch_tool` ✅v3.5.0 | yes | yes | `test_runtime_coverage` |
|
|
34
|
-
| `POST /agent/eval` | `execute_tool` per eval case | `dispatch_tool` ✅v3.5.0 | yes | yes | (covered via dispatch_tool) |
|
|
35
|
-
| Single-agent runtime tool calls | `execute_tool` via `AgentDeps` | `core/agent.py`→`dispatch_tool` | yes | yes | `test_hooks_dispatch` |
|
|
36
|
-
| Agent run (start→finish) | orchestrator run | `agent_runtime` `pre_run`/`post_run` | yes (`pre_run`) | yes (`post_run`) | `test_hooks_dispatch` |
|
|
37
|
-
| Workflow tool node | `dispatch_tool` | `platform_runtime` | yes | yes | `test_hooks_dispatch` |
|
|
38
|
-
| Workflow run (start→end) | engine run | `WorkflowEngine` `pre_workflow`/`post_workflow` | yes | yes | `test_hooks_dispatch` |
|
|
39
|
-
| `POST /upload/document` | `process_uploaded_document` | upload lifecycle | `pre_upload` | `post_upload` | existing upload tests |
|
|
40
|
-
| Document indexing (upload + folder watch) | embed/graph build | `pre_index`/`post_index` | yes | yes | existing |
|
|
41
|
-
|
|
42
|
-
## Intentionally outside the tool lifecycle (documented, not gaps)
|
|
43
|
-
|
|
44
|
-
| Entrypoint | Why not `pre_tool`/`post_tool` |
|
|
45
|
-
|---|---|
|
|
46
|
-
| `read_document` inside `process_uploaded_document` (`upload_service.py`) | Already inside the upload lifecycle (`pre_upload`→`post_upload`); wrapping it again would double-dispatch the same user action. |
|
|
47
|
-
| `POST /api/memory/{prune,compact,rebuild,clear}` | Knowledge/memory **service** maintenance operations, not registry tools; they have their own audit events. Not part of the agent tool vocabulary. |
|
|
48
|
-
| `clear_history` inside `core/agent.py` executor | Runs inside an agent run already bracketed by `pre_run`/`post_run`; not re-wrapped to avoid nested dispatch. |
|
|
49
|
-
| Read-only status/config endpoints (`/tools/permissions`, `/obsidian/status`, model/catalog reads) | Execute no tool — nothing to gate. |
|
|
50
|
-
|
|
51
|
-
## Summary
|
|
52
|
-
|
|
53
|
-
- Genuine tool/agent execution paths discovered: **all enumerated routers + services**.
|
|
54
|
-
- Bypasses found and closed in v3.5.0: **read_file, edit_file, grep, clear_history, computer-use agent loop (+ /cu/status, /cu/screenshot), skill-eval**.
|
|
55
|
-
- Bypasses remaining: **none** (the four rows above are deliberate, documented design decisions).
|
|
56
|
-
- Coverage of discovered tool/agent execution paths: **100%**.
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
# Runtime Hook Coverage — v3.6.0
|
|
2
|
-
|
|
3
|
-
v3.6.0 makes the Knowledge Graph the primary architecture and adds new
|
|
4
|
-
**ingestion** paths (web URL, browser tab, unified text/file pipeline) plus
|
|
5
|
-
**portability** ops (export/import/backup/restore). This doc extends
|
|
6
|
-
[`RUNTIME_HOOK_COVERAGE_v3.5.0.md`](./RUNTIME_HOOK_COVERAGE_v3.5.0.md) and records
|
|
7
|
-
that the new data-mutating paths run through the unified lifecycle.
|
|
8
|
-
|
|
9
|
-
The single tool path is `dispatch_tool(hooks, name, args, run_fn)` in
|
|
10
|
-
`latticeai/core/hooks.py` (`pre_tool → execute → post_tool`). v3.5.0's one honest
|
|
11
|
-
gap was that **KG ingestion did not fire hooks**. v3.6.0 closes it: every source
|
|
12
|
-
now flows through `IngestionPipeline.ingest` (`latticeai/services/ingestion.py`),
|
|
13
|
-
which wraps the store write in `dispatch_tool(..., source="ingestion")`.
|
|
14
|
-
|
|
15
|
-
**Result.** All v3.5.0 coverage is preserved (no regression), and every new
|
|
16
|
-
v3.6.0 ingestion path is covered. Portability admin/maintenance ops follow the
|
|
17
|
-
v3.5.0 convention for service maintenance (own audit events), documented below.
|
|
18
|
-
|
|
19
|
-
## New v3.6.0 execution paths
|
|
20
|
-
|
|
21
|
-
| Entrypoint | Execution | Lifecycle path | pre fired | post fired | Test |
|
|
22
|
-
|---|---|---|---|---|---|
|
|
23
|
-
| `IngestionPipeline.ingest` (any source) | `ingest_source` / `ingest_document` | `dispatch_tool(name="kg_ingest.<type>", source="ingestion")` | yes (`pre_tool`) | yes (`post_tool`) | `test_ingestion_pipeline` |
|
|
24
|
-
| `POST /api/browser/read-url` | fetch URL → `pipeline.ingest` (web_url) | pipeline → `dispatch_tool` | yes | yes | `test_browser_ingestion`, `test_runtime_coverage_v36` |
|
|
25
|
-
| `POST /api/browser/ingest-current-tab` | sanitize → `pipeline.ingest` (browser_tab) | pipeline → `dispatch_tool` | yes | yes | `test_browser_ingestion`, `test_runtime_coverage_v36` |
|
|
26
|
-
| Local file / upload via pipeline | `ingest_document` | pipeline → `dispatch_tool` | yes | yes | `test_ingestion_pipeline` |
|
|
27
|
-
| Provenance write per ingestion | `record_provenance` | inside the bracketed `dispatch_tool` run_fn | (bracketed) | (bracketed) | `test_ingestion_pipeline` |
|
|
28
|
-
|
|
29
|
-
A blocking `pre_tool` hook makes ingestion return `status="blocked"` (the
|
|
30
|
-
`PermissionError` from `dispatch_tool` is caught and surfaced honestly), exactly
|
|
31
|
-
mirroring how a blocked tool call is handled — verified in
|
|
32
|
-
`test_runtime_coverage_v36` and `test_ingestion_pipeline`.
|
|
33
|
-
|
|
34
|
-
## Intentionally outside the tool lifecycle (documented, not gaps)
|
|
35
|
-
|
|
36
|
-
| Entrypoint | Why not `pre_tool`/`post_tool` |
|
|
37
|
-
|---|---|
|
|
38
|
-
| `POST /api/knowledge-graph/{export,export-file,backup,restore,import}` | Admin **portability/maintenance** operations over the whole machine-global graph, not agent-vocabulary tools. They are admin-gated (`require_admin`) and recorded via the platform audit trail — same convention as the v3.5.0 memory maintenance ops (`prune/compact/rebuild/clear`). Wrapping a whole-store backup in `pre_tool` would misrepresent it as a per-action agent tool. |
|
|
39
|
-
| `read_document` inside upload (`upload_service.py`) | Already inside the `pre_upload`→`post_upload` lifecycle (unchanged from v3.5.0). |
|
|
40
|
-
| `POST /api/memory/{prune,compact,rebuild,clear}` | Unchanged from v3.5.0 — service maintenance with own audit events. |
|
|
41
|
-
| Read-only KG reads (`/knowledge-graph/{stats,graph,search,...}`, `/api/knowledge-graph/portability` status) | Execute no mutation — nothing to gate. |
|
|
42
|
-
|
|
43
|
-
## Summary
|
|
44
|
-
|
|
45
|
-
- v3.5.0 coverage of tool/agent execution paths: **100%, preserved** (no regression).
|
|
46
|
-
- v3.6.0 gap closed: **KG ingestion now fires `pre_tool`/`post_tool`** via the unified pipeline (the one honest carry-over note from v3.5.0).
|
|
47
|
-
- New ingestion paths (unified pipeline, `read-url`, `ingest-current-tab`): **covered**.
|
|
48
|
-
- Portability admin ops: **documented as audit-gated maintenance**, consistent with the v3.5.0 convention — not bypasses.
|
|
49
|
-
- Coverage of discovered mutating ingestion paths: **100%**.
|