diff --git a/.changeset/graph-navigation-retrieval.md b/.changeset/graph-navigation-retrieval.md
new file mode 100644
index 0000000..de0dfff
--- /dev/null
+++ b/.changeset/graph-navigation-retrieval.md
@@ -0,0 +1,7 @@
+---
+'@inkcre/core': minor
+'@inkcre/ext-mail': minor
+'@inkcre/ext-twitter': minor
+---
+
+Add peer-local graph-navigation retrieval and the required Resolver preview presentation contract.
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 2a78369..3df851d 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -204,15 +204,6 @@ jobs:
--core-package packages/core/package.json
--artifact-directory extensions/twitter/dist/client-web
- - name: Upload unit-test evidence on failure
- if: failure()
- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
- with:
- name: workspace-failure-evidence
- path: test-results/vitest
- if-no-files-found: ignore
- retention-days: 7
-
toolchain-shadow:
name: Type-aware and TypeScript 7 shadow
runs-on: ubuntu-latest
diff --git a/AGENTS.md b/AGENTS.md
index be1fd1a..b5df922 100644
--- a/AGENTS.md
+++ b/AGENTS.md
@@ -18,7 +18,7 @@ Reason in English. Communicate with humans in Chinese.
- Run `svc status . --json`, then use `svc lookup --keyword` and `svc lookup --path` only for guidance required by the current pressure.
- Read the active Task Packet, relevant durable owner, and nearest local `AGENTS.md` before editing.
-- Resolve one semantic owner before adding durable material. Prefer code, types, tests, configuration, and CI for mechanically enforceable truth.
+- Resolve one semantic owner before adding durable material. Prefer code, types, configuration, and CI for mechanically enforceable truth.
- Before a reference-sensitive, logic-altering, or non-obviously-local durable mutation, state the target, objective `From -> To`, operation, blast radius, invariants, verification, and uncertainty.
- Search before creating a type, utility, document, or abstraction.
- Keep Task Packets compact and disposable. Add supporting entries only when a distinct owner and coordination pressure exist.
@@ -31,6 +31,8 @@ Reason in English. Communicate with humans in Chinese.
- Develop: `pnpm dev`, `pnpm dev:all`, or an explicit source lane documented in `docs/40-deployment/development-runtime.md`.
- Required verification: `pnpm check`; required production outputs: `pnpm build`.
- Shadow verification: `pnpm lint:type-aware` and `pnpm type-check:ts7`.
+- Follow the organization-wide [Verification and Test Policy](https://github.com/InKCre/.github/blob/main/TESTING.md).
+ The admitted Playwright E2E suites do not authorize new automation by analogy.
- Follow `.agents/prompts/code-for-human.md` for source changes.
- Require explicit Human authorization before modifying source code and before commit, push, or external publication. Task Packet maintenance is exempt from the source gate.
diff --git a/apps/client-web/package.json b/apps/client-web/package.json
index 614bd90..9366445 100644
--- a/apps/client-web/package.json
+++ b/apps/client-web/package.json
@@ -8,8 +8,7 @@
"build": "run-p type-check \"build-only {@}\" --",
"preview": "vite preview",
"build-only": "vite build",
- "type-check": "vue-tsc --build",
- "test": "pnpm --dir ../.. exec vitest --project client-web"
+ "type-check": "vue-tsc --build"
},
"dependencies": {
"@codemirror/autocomplete": "^6.20.0",
@@ -19,23 +18,14 @@
"@codemirror/state": "^6.5.2",
"@codemirror/view": "^6.38.8",
"@inkcre/core": "workspace:*",
- "@inkcre/ui-web": "1.2.2",
+ "@inkcre/ui-web": "1.4.0",
"@module-federation/runtime": "^0.21.4",
"@supabase/postgrest-js": "^2.84.0",
"@vue-flow/background": "^1.3.2",
- "@vue-flow/controls": "^1.1.3",
"@vue-flow/core": "^1.48.1",
- "@vue-flow/minimap": "^1.5.4",
"@vueuse/core": "^14.0.0",
- "d3-force": "^3.0.0",
- "dagre": "^0.8.5",
"dayjs": "^1.11.19",
- "graphology": "^0.26.0",
- "graphology-communities-louvain": "^2.0.2",
- "graphology-dag": "^0.4.1",
- "graphology-shortest-path": "^2.1.0",
"jose": "^6.1.2",
- "ml-matrix": "^6.12.1",
"pinia": "^3.0.3",
"vscode-json-languageservice": "^5.6.4",
"vscode-languageserver-textdocument": "^1.0.12",
@@ -51,12 +41,9 @@
"@module-federation/enhanced": "^0.22.0",
"@module-federation/vite": "^1.1.0",
"@tsconfig/node22": "^22.0.2",
- "@types/d3-force": "^3.0.10",
- "@types/dagre": "^0.7.53",
"@types/node": "^22.16.5",
"@vitejs/plugin-vue": "^6.0.1",
"@vitejs/plugin-vue-jsx": "^5.1.2",
- "@vue/test-utils": "^2.4.6",
"@vue/tsconfig": "^0.7.0",
"get-port": "^7.1.0",
"npm-run-all2": "^8.0.4",
diff --git a/apps/client-web/src/App.vue b/apps/client-web/src/App.vue
index 6ce1849..d58aa6c 100644
--- a/apps/client-web/src/App.vue
+++ b/apps/client-web/src/App.vue
@@ -6,6 +6,7 @@ import router from './router'
import { createInkRouterAdapter } from './router'
import { INK_ROUTER_KEY } from '@inkcre/ui-web'
import { useRoute } from 'vue-router'
+import RecallSearch from './components/recall/RecallSearch.vue'
provide(INK_ROUTER_KEY, createInkRouterAdapter(router, useRoute()))
@@ -25,6 +26,7 @@ const sidebarExpanded = ref(false)
+
diff --git a/apps/client-web/src/components/info-base/BlockInspectorPopup/BlockInspectorPopup.vue b/apps/client-web/src/components/info-base/BlockInspectorPopup/BlockInspectorPopup.vue
index fdbce2c..c0899c2 100644
--- a/apps/client-web/src/components/info-base/BlockInspectorPopup/BlockInspectorPopup.vue
+++ b/apps/client-web/src/components/info-base/BlockInspectorPopup/BlockInspectorPopup.vue
@@ -78,7 +78,7 @@ async function ruminate(): Promise {
-
+