From af23192a85bc6f6257229d5dd8863cb001b986f8 Mon Sep 17 00:00:00 2001 From: Lan_zhijiang Date: Wed, 4 Nov 2026 22:08:37 +0800 Subject: [PATCH] =?UTF-8?q?ref(app):=20=E7=BB=9F=E4=B8=80=E4=BA=A7?= =?UTF-8?q?=E5=93=81=E8=A7=92=E8=89=B2=E4=B8=8E=20Web=20=E5=BA=94=E7=94=A8?= =?UTF-8?q?=E5=91=BD=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 用 App 表示交付应用、Peer 表示运行参与者,保留真实协议 client 语义 - 同步当前网站指南和图片路径,旧图片链接使用兼容重定向 --- .../cross-domain-interactions.md | 6 +++--- 10-prd/domain-structure/derived-boundaries.md | 2 +- 10-prd/glossary.md | 8 ++++---- 20-product-tdd/core-app-boundary.md | 4 +++- .../extension-documentation-hosting.md | 6 +++--- .../extension-release-and-installation.md | 4 ++-- ...eature-retrieval-and-media-interpretation.md | 8 ++++---- 20-product-tdd/graph-navigation-retrieval.md | 2 +- 20-product-tdd/knowledge-capability-contract.md | 4 ++-- 20-product-tdd/observability-contract.md | 10 +++++----- .../peer-database-runtime-contract.md | 2 +- 20-product-tdd/system-state-and-authority.md | 6 +++--- website/README.md | 10 +++++----- website/content/en/developer/architecture.md | 6 +++--- website/content/en/developer/contributing.md | 2 +- website/content/en/developer/index.md | 4 ++-- website/content/en/getting-started.md | 4 ++-- website/content/en/guide/collect.md | 2 +- website/content/en/guide/connect.md | 4 ++-- website/content/en/guide/daily-use.md | 2 +- website/content/en/guide/first-source.md | 2 +- website/content/en/guide/schedules.md | 2 +- website/content/en/guide/search.md | 4 ++-- website/content/en/guide/sources/mail.md | 2 +- website/content/en/guide/sources/memos.md | 2 +- website/content/en/guide/sources/rss.md | 2 +- website/content/en/guide/sources/twitter.md | 8 ++++---- website/content/en/guide/troubleshooting.md | 2 +- website/content/en/index.md | 2 +- website/content/en/self-hosted/custom.md | 16 ++++++++-------- website/content/en/self-hosted/index.md | 2 +- website/content/public/_redirects | 1 + .../{client-web => web}/collection-job.png | Bin .../{client-web => web}/create-source-type.png | Bin .../{client-web => web}/info-base-graph.png | Bin .../{client-web => web}/lexical-search.png | Bin .../images/{client-web => web}/mail-content.png | Bin .../images/{client-web => web}/memos-setup.png | Bin .../{client-web => web}/peers-overview.png | Bin .../{client-web => web}/settings-overview.png | Bin .../{client-web => web}/source-schedule.png | Bin .../{client-web => web}/sources-overview.png | Bin .../{client-web => web}/twitter-setup.png | Bin 43 files changed, 72 insertions(+), 69 deletions(-) create mode 100644 website/content/public/_redirects rename website/content/public/images/{client-web => web}/collection-job.png (100%) rename website/content/public/images/{client-web => web}/create-source-type.png (100%) rename website/content/public/images/{client-web => web}/info-base-graph.png (100%) rename website/content/public/images/{client-web => web}/lexical-search.png (100%) rename website/content/public/images/{client-web => web}/mail-content.png (100%) rename website/content/public/images/{client-web => web}/memos-setup.png (100%) rename website/content/public/images/{client-web => web}/peers-overview.png (100%) rename website/content/public/images/{client-web => web}/settings-overview.png (100%) rename website/content/public/images/{client-web => web}/source-schedule.png (100%) rename website/content/public/images/{client-web => web}/sources-overview.png (100%) rename website/content/public/images/{client-web => web}/twitter-setup.png (100%) diff --git a/10-prd/domain-structure/cross-domain-interactions.md b/10-prd/domain-structure/cross-domain-interactions.md index d5bd37f..6199b98 100644 --- a/10-prd/domain-structure/cross-domain-interactions.md +++ b/10-prd/domain-structure/cross-domain-interactions.md @@ -20,7 +20,7 @@ - semantic contract: extensions add source, resolver, storage, sink, or protocol capability without bypassing graph or deployment ownership boundaries. - shared language: extension, source, resolver, storage, sink, protocol, lifecycle hooks. -## Interaction Pair: Client -> Shared System +## Interaction Pair: Peer -> Shared System -- semantic contract: each client is one running node that can participate around the same shared info-base. -- shared language: client, runtime, shared system, info-base. +- semantic contract: each peer is one running node that can participate around the same shared info-base. +- shared language: peer, runtime, shared system, info-base. diff --git a/10-prd/domain-structure/derived-boundaries.md b/10-prd/domain-structure/derived-boundaries.md index fe68590..8c6d93a 100644 --- a/10-prd/domain-structure/derived-boundaries.md +++ b/10-prd/domain-structure/derived-boundaries.md @@ -25,7 +25,7 @@ - derivation source: `../behavior/capabilities.md`, `../behavior/rules-and-invariants.md` - boundary intent: add bounded source, resolver, storage, sink, or protocol capabilities through controlled registration and lifecycle hooks. -## Client +## Peer - derivation source: `../behavior/capabilities.md`, `../behavior/rules-and-invariants.md` - boundary intent: represent one runtime participant operating around the shared system. diff --git a/10-prd/glossary.md b/10-prd/glossary.md index 0a598ce..41a6696 100644 --- a/10-prd/glossary.md +++ b/10-prd/glossary.md @@ -48,11 +48,11 @@ - user-visible or business lifecycle language: a pluggable way to extend the product without forking the core. - notes on ambiguity with framework terms: this is product vocabulary, not only a Python packaging concept. -## client +## app -- canonical business meaning: a user-facing application through which a person interacts with InKCre or a compatible product protocol. -- user-visible or business lifecycle language: the app or interface a person uses. -- notes on ambiguity with framework terms: use `client` only for an actual application or a protocol-native client role; it is not a product-facing synonym for an InKCre runtime Peer. +- canonical business meaning: a runnable InKCre application that assembles Core capabilities with its environment, lifecycle, policies, and optional user interface. +- user-visible or business lifecycle language: the Web app, browser extension, desktop app, CLI, or service a person uses or runs. +- notes on ambiguity with framework terms: App names a delivered application; Peer names a running participant. App is distinct from the knowledge activity `application`. Reserve `client` for an actual protocol role, such as an HTTP, database, OAuth, or external Memos client; it does not name an InKCre product tier. ## peer diff --git a/20-product-tdd/core-app-boundary.md b/20-product-tdd/core-app-boundary.md index 54782c0..2abab7c 100644 --- a/20-product-tdd/core-app-boundary.md +++ b/20-product-tdd/core-app-boundary.md @@ -24,6 +24,8 @@ Core 可以执行 I/O、持有缓存和运行任务,也可以直接使用其 一个实现仓库可以交付库、多个应用和扩展;一个运行中的应用可承载 Peer。Core 库本身不因被安装或导入就成为在线 Peer。各语言实现也不构成一个必须同时发布或同时运行的中央系统。 +产品名称与交付名称使用 App 或具体应用形态,如 Web 应用、浏览器扩展、桌面应用、CLI 和服务;身份、在线状态与能力管理使用 Peer。代码、配置、构建、发布及文档沿用这一区分,不使用 Client 表示 InKCre 的应用层或节点类别。HTTP、数据库、OAuth 等协议中的 client 仍保持其准确含义。命名迁移不得改变已保存的身份或数据归属;已发布产物、持久化键和旧协议入口若需要兼容,必须明确其过渡用途,新的产品入口使用当前名称。 + 数据库 schema 与迁移仍由 impl-py 拥有,所有 Peer 遵守同一个 [Peer database runtime contract](peer-database-runtime-contract.md)。使用哪种语言、哪种数据库传输或哪一种 App,不改变已认证 Peer 的协议权限。 ## 责任分配 @@ -68,7 +70,7 @@ App:入口、交互、配置选择、启动退出与运行政策 ## 配置、实例与生命周期 -调用方显式创建操作所需的客户端或上下文,绑定目标部署、传输、凭据来源和已选能力。Core 内部传递已验证的类型,不重复依赖 App 的环境读取和表单校验。 +调用方显式创建操作所需的库实例或上下文,绑定目标部署、传输、凭据来源和已选能力。Core 内部传递已验证的类型,不重复依赖 App 的环境读取和表单校验。 导入或链接基础 core 不读取必填应用环境、不连接数据库、不监听端口、不发布 Peer、不启动定时器、不安装扩展,也不触发权限 UI。对象构造可以建立本地状态;I/O 与后台执行通过公开、显式的操作或生命周期开始。 diff --git a/20-product-tdd/extension-documentation-hosting.md b/20-product-tdd/extension-documentation-hosting.md index a738d39..02d403c 100644 --- a/20-product-tdd/extension-documentation-hosting.md +++ b/20-product-tdd/extension-documentation-hosting.md @@ -56,16 +56,16 @@ to Registry's executable API and local documentation. Namespace publication authority also controls that namespace's documentation. Creating a set requires a conditional create; replacing it requires the observed current entity tag. Only after all files are available may Registry atomically move that set's entry to the new snapshot. A failed -upload or conflicting replacement leaves the previous entry intact. Clients resolve uncertain +upload or conflicting replacement leaves the previous entry intact. Publishers resolve uncertain responses by retrying the same saved publication candidate. Its snapshot identity also identifies that publication: once committed, the exact same target, content, provenance, and original write precondition return the original commit receipt without changing the current-set pointer. Reusing the identity for a different committed request is a conflict. A receipt confirms a historical commit, not that its snapshot is still current; another publication may already have superseded it. -Clients may make bounded best-effort retries, but hosting does not guarantee eventual delivery. +Publishers may make bounded best-effort retries, but hosting does not guarantee eventual delivery. When a receipt cannot be obtained, the outcome remains unknown and the candidate must remain -available for a later retry. Clients do not refresh the write precondition, generate a replacement +available for a later retry. Publishers do not refresh the write precondition, generate a replacement identity, or infer failure merely because a response was lost. Authentication and Release lifecycle rules also apply when confirming an earlier commit. diff --git a/20-product-tdd/extension-release-and-installation.md b/20-product-tdd/extension-release-and-installation.md index 86d83b6..ca2900e 100644 --- a/20-product-tdd/extension-release-and-installation.md +++ b/20-product-tdd/extension-release-and-installation.md @@ -53,7 +53,7 @@ Extension 不拥有独立共享数据表。资料使用 Block/Relation/Stora 宿主在改变运行状态前校验目标坐标、发布状态、元数据、原生产物和 SDK 条件。启用成功须包含完成启动和相应副作用;持久化失败需要按宿主生命周期清理或报告真实未收敛状态。保存目标版本不等于升级完成。 -针对共享参与的显式启用和停用命令先保存参与意图,再应用运行变化;运行失败保留意图并报告实际错误,不以运行成功回调重新写入意图。原生宿主的本地停用先保存本机停用状态并停止运行,再尝试更新共享意图;连接、凭据或授权错误不能阻止本机停止,也不能将共享更新报告为成功。自动恢复只消费已有意图,不能将用户已撤回的启用写回。宿主串行处理同一参与记录的生命周期,并在异步初始化或激活后复核精确选择与启用意图;若意图已撤回或版本已变,清理迟到实例,不将它报告为当前运行结果。该串行边界只协调当前宿主,不能排除其他已准入客户端的数据库写入,也不保证持久意图与进程状态瞬时原子切换。 +针对共享参与的显式启用和停用命令先保存参与意图,再应用运行变化;运行失败保留意图并报告实际错误,不以运行成功回调重新写入意图。原生宿主的本地停用先保存本机停用状态并停止运行,再尝试更新共享意图;连接、凭据或授权错误不能阻止本机停止,也不能将共享更新报告为成功。自动恢复只消费已有意图,不能将用户已撤回的启用写回。宿主串行处理同一参与记录的生命周期,并在异步初始化或激活后复核精确选择与启用意图;若意图已撤回或版本已变,清理迟到实例,不将它报告为当前运行结果。该串行边界只协调当前宿主,不能排除其他已准入 Peer 的数据库写入,也不保证持久意图与进程状态瞬时原子切换。 离线 Peer 只能接收待应用选择,不能被宣称已停止旧实例或已运行新版。租约过期不证明进程停止。Python 等宿主若安装会修改共享原生依赖环境,应暂停该 Peer 的执行,安装后从新进程启动;只停目标插件不足以证明其他已加载依赖安全。应用失败应报告失败或待处理,不能假定自动恢复旧环境或撤销插件已经执行的业务迁移。具体进程、打包和恢复操作留在宿主本地文档。 @@ -69,4 +69,4 @@ Registry v2 提供独立原生分发读写。v1 只读取历史统一坐标, 发布验收观察每种分发独立发布、缺少自身产物时保持不可公开、候选重试和提交身份一致,以及历史公开读取遵守封禁。部署验收包含精确旧版本迁移、未知分发延迟解析和非空业务 state 保留。 -完整运行验收从实际 Client Web 安装入口进入目标 Peer 的启用、运行、停用和刷新恢复。一个 Peer 升级不能改变另一个同种分发 Peer 的选择;睡眠恢复、离线待应用和 Python 环境更新后的新进程也属于验收。插件案例需覆盖已有内容读取与按需执行、设置 UI 的先行运行以及共享业务数据延续。仅构建、独立 import 或调用 MF 容器不能代替实际入口验收。 +完整运行验收从实际 Web 应用安装入口进入目标 Peer 的启用、运行、停用和刷新恢复。一个 Peer 升级不能改变另一个同种分发 Peer 的选择;睡眠恢复、离线待应用和 Python 环境更新后的新进程也属于验收。插件案例需覆盖已有内容读取与按需执行、设置 UI 的先行运行以及共享业务数据延续。仅构建、独立 import 或调用 MF 容器不能代替实际入口验收。 diff --git a/20-product-tdd/feature-retrieval-and-media-interpretation.md b/20-product-tdd/feature-retrieval-and-media-interpretation.md index 33d67df..31f9582 100644 --- a/20-product-tdd/feature-retrieval-and-media-interpretation.md +++ b/20-product-tdd/feature-retrieval-and-media-interpretation.md @@ -4,7 +4,7 @@ Define the shared semantics of the first feature-retrieval increment: Block-local lexical projection, independently maintained derived records, exact local/Peer retrieval, faithful -multimodal text materialization, system-driven media interpretation, and client navigation. +multimodal text materialization, system-driven media interpretation, and app navigation. Unit repositories still own framework classes, SQL queries, prompts, provider credentials, storage implementations, UI styling, and runtime scheduling intervals. @@ -108,7 +108,7 @@ query ---------------------------------------------------------> ranked existing - Lexical maintenance later indexes the resulting text Blocks. This temporal composition does not transfer record ownership to Organization. -## Peer Capability And Client Navigation +## Peer Capability And App Navigation - Exact synchronous capability `core.feature_retrieval.lexical.v1` accepts one non-empty textual query plus a result bound and returns the V1 lexical result. The business facade @@ -117,10 +117,10 @@ query ---------------------------------------------------------> ranked existing - `route_to_peer` / `routeToPeer` remains caller-local routing policy and does not enter the capability payload. - `InfoBaseListView` is the first list navigation host for retrieval results. Selecting a - result uses the client-supplied singleton `InfoBaseRouter`; List and Graph views may both + result uses the app-supplied singleton `InfoBaseRouter`; List and Graph views may both realize Block Inspector and solved-content popup destinations without creating another navigation/history authority. -- Match excerpts are plain presentation-neutral text. A client must not interpret authored +- Match excerpts are plain presentation-neutral text. An app must not interpret authored markup merely because it appears in a lexical result. ## Explicit Non-Goals diff --git a/20-product-tdd/graph-navigation-retrieval.md b/20-product-tdd/graph-navigation-retrieval.md index 89437c2..4a0d126 100644 --- a/20-product-tdd/graph-navigation-retrieval.md +++ b/20-product-tdd/graph-navigation-retrieval.md @@ -59,7 +59,7 @@ layout、camera or route state. authority,but remain separate presentation contracts. Preview is bounded and interaction-free;solved content may support focused reading and business interaction. - Block and Relation inspectors are entity-local. Application routing/history remains owned by - the client application,while a Graph view may realize those destinations as a navigation + the app,while a Graph view may realize those destinations as a navigation host. ## Shared Acceptance Corpus diff --git a/20-product-tdd/knowledge-capability-contract.md b/20-product-tdd/knowledge-capability-contract.md index ac4aa2e..715d30d 100644 --- a/20-product-tdd/knowledge-capability-contract.md +++ b/20-product-tdd/knowledge-capability-contract.md @@ -202,8 +202,8 @@ external API uses one of those words. - Hydrated content is the inline value or Storage-loaded bytes behind one Block. Solved content is a Resolver-derived use projection that may combine hydrated content with local graph facts and may lazily materialize missing semantic content under its contract. -- `InfoBaseRouter` is a client-supplied, deployment-singleton capability port over stable - Block/Relation-oriented destinations. It maps domain navigation to the client's existing +- `InfoBaseRouter` is an app-supplied, deployment-singleton capability port over stable + Block/Relation-oriented destinations. It maps domain navigation to the app's existing navigation authority; it does not maintain a second history or prescribe Graph as the only possible default presentation. - `InfoBaseView` is a navigation host that realizes those destinations. GraphSurface is the diff --git a/20-product-tdd/observability-contract.md b/20-product-tdd/observability-contract.md index 172e155..3e91341 100644 --- a/20-product-tdd/observability-contract.md +++ b/20-product-tdd/observability-contract.md @@ -6,7 +6,7 @@ 额外 OpenTelemetry 导出与 W3C 上下文采集仍由每个 Peer 的本地配置显式启用,缺省关闭。关闭该出口不关闭基础观测;关闭时不新增 Trace Context 注入、提取或 Job carrier 捕获。原文内容的额外采集权限独立于以上开关。 -后端配置在客户端或进程初始化时形成明确快照,不承诺透明热切换。选择外部但配置不完整、后端不可达或没有就绪的执行 Peer 时,查询明确失败,采集按有界策略报告丢弃,不能静默退回内置存储。观测故障不能使业务 readiness 失败。 +后端配置在观测实例初始化时形成明确快照,不承诺透明热切换。选择外部但配置不完整、后端不可达或没有就绪的执行 Peer 时,查询明确失败,采集按有界策略报告丢弃,不能静默退回内置存储。观测故障不能使业务 readiness 失败。 ## 权威与身份 @@ -16,9 +16,9 @@ 部署标识、Peer 标识、运行实例与业务 ID 各有意义。部署配置 owner 提供稳定、非秘密的观测部署标识,同一部署的 Peer 与可选采集转发组件使用一致归属;不从凭据、数据库地址或观测产品的项目 ID 派生。重启与原部署恢复保持标识,独立 preview、克隆或新 owner 的部署分配新标识。配置尚不可用的记录可缺少该关联,不能伪造身份或以此阻止启动。 -共享部署配置使用 key `inkcre.observability`、schema `inkcre.observability.v1`;value 含 `deployment_id` UUID,以及可选、无凭据的 `otlp_http_endpoints` 对象与 `diagnostics_url`。出口对象按需声明 traces、logs、metrics 的完整 OTLP/HTTP URL;本地启用后缺省信号仍不导出,不要求所有信号共享一个 base URL;共享 value 不携带启用开关。部署启用步骤仅在缺失时创建身份,Peer 不各自生成;服务端私密采集凭据仅从运行配置提供,不进入客户端;客户端直连需使用适合其公开环境的受限写入能力,否则经过受控转发。凭据不进入该非秘密配置。各 Unit 注册和读取同一 schema;关闭额外 OTLP 的 Peer 不为该出口读取配置或初始化身份,开启时配置尚不可用只暂停该出口。基础记录的后端选择使用独立配置,不依赖 OTLP 身份初始化。 +共享部署配置使用 key `inkcre.observability`、schema `inkcre.observability.v1`;value 含 `deployment_id` UUID,以及可选、无凭据的 `otlp_http_endpoints` 对象与 `diagnostics_url`。出口对象按需声明 traces、logs、metrics 的完整 OTLP/HTTP URL;本地启用后缺省信号仍不导出,不要求所有信号共享一个 base URL;共享 value 不携带启用开关。部署启用步骤仅在缺失时创建身份,Peer 不各自生成;私密采集凭据仅从持有凭据的 Peer 运行配置提供,不进入浏览器;浏览器直连需使用适合其公开环境的受限写入能力,否则经过受控转发。凭据不进入该非秘密配置。各 Unit 注册和读取同一 schema;关闭额外 OTLP 的 Peer 不为该出口读取配置或初始化身份,开启时配置尚不可用只暂停该出口。基础记录的后端选择使用独立配置,不依赖 OTLP 身份初始化。 -Peer 复用现有身份,运行实例区分进程或客户端运行期,Job、Thread、ToolCall 与实体保留业务 ID。Trace/Span ID 由标准 SDK 管理,不能用业务 ID 替代。可变业务 ID 适合日志与 Trace 关联,不进入无界指标标签。资源属性用于筛选和诊断,不提供认证或权限证明。 +Peer 复用现有身份,运行实例区分各 App 运行期,Job、Thread、ToolCall 与实体保留业务 ID。Trace/Span ID 由标准 SDK 管理,不能用业务 ID 替代。可变业务 ID 适合日志与 Trace 关联,不进入无界指标标签。资源属性用于筛选和诊断,不提供认证或权限证明。 ## 同步传播 @@ -74,7 +74,7 @@ Usage 以 provider 实际返回为依据,覆盖流式结束阶段。未提供 首个双向外部实现为 Loki;其它已配置的日志 writer 或 OTLP endpoint 不能仅凭存在就冒充统一查询后端。Loki URL、认证和租户信息由具备能力的服务 Peer 私密持有,公共配置与浏览器均不携带它们。多个服务 Peer 必须装配同一部署选中的存储;同一公共选择不允许在不同 Peer 上代表不同租户的数据。 -各实现通过 `core.observability.v1` 精确 Peer 能力提供 `POST /observability`,沿用已有 Peer 认证、发现与 HTTP 协议。请求包含 `action`:`status`、`query` 或 `ingest`。委派的 `query`/`ingest` 必须附上 `expected_backend`,服务将其与本实例选择原子核对;不匹配返回 409,不把请求写入另一个存储。候选状态探测不能代替这次接收边界检查。数据库模式的客户端可以直接使用已准入数据库协议实现同一接口;外部模式通过具备私密配置的 Peer 执行,业务请求不因此集中到该 Peer。调用者不能指定任意外部 URL、请求头或原生查询语言。 +各实现通过 `core.observability.v1` 精确 Peer 能力提供 `POST /observability`,沿用已有 Peer 认证、发现与 HTTP 协议。请求包含 `action`:`status`、`query` 或 `ingest`。委派的 `query`/`ingest` 必须附上 `expected_backend`,服务将其与本实例选择原子核对;不匹配返回 409,不把请求写入另一个存储。候选状态探测不能代替这次接收边界检查。数据库模式的调用方可以直接使用已准入数据库协议实现同一接口;外部模式通过具备私密配置的 Peer 执行,业务请求不因此集中到该 Peer。调用者不能指定任意外部 URL、请求头或原生查询语言。 ### 公共 JSON @@ -102,7 +102,7 @@ Usage 以 provider 实际返回为依据,覆盖流式结束阶段。未提供 ### Web 消费 -全局工作区和 Job 详情复用同一查询客户端。过滤、关联详情、操作时间线和当前窗口摘要不包含供应商分支。状态面板展示当前存储、配置/能力、历史说明及读取故障;加载、空、错误和截断分别呈现。外部完整 Trace/指标系统可通过已配置诊断入口访问,不用当前窗口的操作摘要假装实现完整 APM。 +全局工作区和 Job 详情复用同一观测查询接口。过滤、关联详情、操作时间线和当前窗口摘要不包含供应商分支。状态面板展示当前存储、配置/能力、历史说明及读取故障;加载、空、错误和截断分别呈现。外部完整 Trace/指标系统可通过已配置诊断入口访问,不用当前窗口的操作摘要假装实现完整 APM。 ### 变更验证 diff --git a/20-product-tdd/peer-database-runtime-contract.md b/20-product-tdd/peer-database-runtime-contract.md index 434cc4c..4a5ea27 100644 --- a/20-product-tdd/peer-database-runtime-contract.md +++ b/20-product-tdd/peer-database-runtime-contract.md @@ -107,7 +107,7 @@ The shared browser-to-database and browser-to-runtime token contract is: `iat` 与 `exp` 必须是有效数值时间,`exp` 必须晚于 `iat`;接收端校验允许的未来 `iat` 时钟偏差和实际过期时间。协议不设置 `exp - iat` 的最大值,也不将某个部署的签发默认值作为准入上限。 -签发者拥有自己的默认有效期与配置方式。服务端签发默认值由环境配置,配置值必须是正整数;默认值只影响以后签发的 JWT,降低默认值不会撤销尚未过期的既有凭据。静态客户端的默认值属于该签发者的策略,不从数据库准入合同派生。 +签发者拥有自己的默认有效期与配置方式。服务端签发默认值由环境配置,配置值必须是正整数;默认值只影响以后签发的 JWT,降低默认值不会撤销尚未过期的既有凭据。静态 Web 应用的默认值属于该签发者的策略,不从数据库准入合同派生。 签发者可以将 `iat` 向过去调整一个有界的小幅度,以容忍独立部署的 Peer 与协议运行时之间的普通时钟偏差,并从调整后的 `iat` 计算 `exp`。时钟偏差处理属于签发边界;数据库查询和业务调用者不逐个重试或改写 token。 diff --git a/20-product-tdd/system-state-and-authority.md b/20-product-tdd/system-state-and-authority.md index dd00d0f..78bae99 100644 --- a/20-product-tdd/system-state-and-authority.md +++ b/20-product-tdd/system-state-and-authority.md @@ -27,7 +27,7 @@ Record durable ownership of authoritative state across units and distinguish it - Extension installation state is authoritative at the deployment level. - One deployment must not carry multiple installed records for the same extension ID. -- Installation state is distinct from client-scoped permission and distinct from current runtime activity. +- Installation state is distinct from a Peer’s local execution permissions and from current runtime activity. - Validated extension configuration is deployment-scoped durable state. External protocol profiles or credentials projected from that configuration do not create an InKCre User or tenant authority. @@ -66,7 +66,7 @@ Record durable ownership of authoritative state across units and distinguish it - One InKCre deployment is one owner context; the product does not currently define tenants, terminal users, or per-row user ownership. - Technical runtime participants are Peers and are presented as Peers wherever a person manages - their identity, configuration, liveness, or capabilities. `Client` remains valid only for an - actual application or protocol-native role. Identities named by an external source or + their identity, configuration, liveness, or capabilities. Delivered applications are Apps; + `client` describes only a protocol-native role. Identities named by an external source or compatibility protocol keep their native boundary meaning and must not silently become shared-system principals. diff --git a/website/README.md b/website/README.md index a9792f9..e8fa1fd 100644 --- a/website/README.md +++ b/website/README.md @@ -98,7 +98,7 @@ are resolved from the rewritten route, not the source file location. - Review a changed page with its navigation entry and exit. Render at least one representative procedure in desktop light mode and at narrow width; confirm that hidden interface variants, lists, code, tables, screenshots, and links remain understandable. -- User procedures default to client-web. Use the shared `InterfaceGuide` component with `#web` and +- User procedures default to the Web app. Use the shared `InterfaceGuide` component with `#web` and `#cli` slots for alternate steps on the same route; CLI instructions primarily serve Agents. The choice survives client-side navigation, not a full reload. Without JavaScript, both sections remain readable. Keep shared prerequisites and limitations outside the slots. @@ -124,7 +124,7 @@ are resolved from the rewritten route, not the source file location. - Add a screenshot when it helps the reader identify a control, confirm a saved state, or compare a result. Keep prose authoritative; do not use screenshots as decorative substitutes for steps. -- Capture client-web in light mode at a desktop viewport. Use 1:1, 4:3, or approximately 16:9, and +- Capture the Web app in light mode at a desktop viewport. Use 1:1, 4:3, or approximately 16:9, and crop to the application viewport rather than including the browser toolbar or desktop. Use a mobile viewport only when the procedure specifically documents the mobile experience. - Show the smallest useful state around the documented action. Preserve enough surrounding UI for @@ -132,9 +132,9 @@ are resolved from the rewritten route, not the source file location. - Use fixtures or placeholders where possible. Remove personal content and real credentials; mask secrets before capture, and inspect the final pixels rather than relying only on the control's intended masking behavior. -- Store client-web images under `content/public/images/client-web/` with stable, kebab-case names. - Alt text identifies the surface and visible state; the following italic caption explains what the - reader should notice or do. +- Store Web app images under `content/public/images/web/` with stable, kebab-case names. Alt text + identifies the surface and visible state; the following italic caption explains what the reader + should notice or do. - Before publishing, inspect the rendered page at desktop width, confirm that text remains legible, and verify the image route in the exact preview deployment. Keep raw acceptance evidence in the task packet rather than publishing browser chrome, credentials, or transient diagnostics. diff --git a/website/content/en/developer/architecture.md b/website/content/en/developer/architecture.md index 9464410..8201dc8 100644 --- a/website/content/en/developer/architecture.md +++ b/website/content/en/developer/architecture.md @@ -43,7 +43,7 @@ for the shared semantics. ## Info-base authority Persisted Blocks and Relations are the shared information authority. Source-native objects, resolver -output, search indexes, embeddings, and client views may represent or accelerate parts of that +output, search indexes, embeddings, and app views may represent or accelerate parts of that information, but none creates a parallel authoritative store merely because its native shape is convenient. @@ -62,7 +62,7 @@ defines principals, protocol admission, lifecycle, readiness, and JWT claims. `impl-py` owns migrations and the executable database lifecycle contract, but it is not a central owner of every request path or product behavior. -Client-web demonstrates this topology: database operations use PostgREST, while runtime-owned +The Web app demonstrates this topology: database operations use PostgREST, while runtime-owned capabilities may use native HTTP surfaces advertised by an online Peer. The durable boundary is the admitted protocol and capability contract, not a permanent frontend/backend hierarchy. @@ -97,7 +97,7 @@ second durable `running` flag for users to maintain. Runtime errors and capabili still show that expected activation failed. Core supports Python wheels with explicit Host compatibility. A release may also contain a browser -distribution for client-web setup or rendering. The +distribution for Web app setup or rendering. The [Source Extension tutorial](/developer/ecosystem/source-extension) covers the current Core Host SDK `0.3.x` path; those programming interfaces still import Core modules and are not a standalone, permanently stable Source SDK. diff --git a/website/content/en/developer/contributing.md b/website/content/en/developer/contributing.md index 3b9464a..62fe143 100644 --- a/website/content/en/developer/contributing.md +++ b/website/content/en/developer/contributing.md @@ -34,7 +34,7 @@ Report suspected vulnerabilities privately through that repository's `SECURITY.m | Cross-unit state, topology, or interoperability | [`InKCre/docs`](https://github.com/InKCre/docs) → [`20-product-tdd/**`](https://github.com/InKCre/docs/tree/main/20-product-tdd) | | Hub/Spoke shared-document workflow | [`InKCre/docs`](https://github.com/InKCre/docs) → [`00-meta/**`](https://github.com/InKCre/docs/tree/main/00-meta) | | Core runtime, migrations, or database lifecycle | [`InKCre/impl-py`](https://github.com/InKCre/impl-py) | -| Web client or browser extension | [`InKCre/impl-ts`](https://github.com/InKCre/impl-ts) | +| Web app or browser extension | [`InKCre/impl-ts`](https://github.com/InKCre/impl-ts) | | Design tokens or shared UI | [`InKCre/ui`](https://github.com/InKCre/ui) | | Public website content or presentation | [`InKCre/docs`](https://github.com/InKCre/docs) → [`website/**`](https://github.com/InKCre/docs/tree/main/website) | diff --git a/website/content/en/developer/index.md b/website/content/en/developer/index.md index 4bfc6df..57f64f8 100644 --- a/website/content/en/developer/index.md +++ b/website/content/en/developer/index.md @@ -18,7 +18,7 @@ common mental model and routes you to the repository that owns the details. Start with [Architecture](/developer/architecture) to understand the shared vocabulary and topology. Then use [Contributing](/developer/contributing) to locate the owner of the product, cross-unit, -runtime, client, UI, or website change you want to make. +runtime, app, UI, or website change you want to make. Exact setup commands, runtime versions, tests, and pull-request requirements stay in the repository that enforces them. @@ -42,7 +42,7 @@ This is not a promise of unrestricted database access or a complete API compatib | ----------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | | [`InKCre/docs`](https://github.com/InKCre/docs) | Shared product and cross-unit documentation Hub; source of this website. Start with its [README](https://github.com/InKCre/docs#readme). | | [`InKCre/impl-py`](https://github.com/InKCre/impl-py) | Python core runtime, migrations, and database lifecycle authority. Follow its [contributing guide](https://github.com/InKCre/impl-py/blob/main/CONTRIBUTING.md). | -| [`InKCre/impl-ts`](https://github.com/InKCre/impl-ts) | Web client, browser Extensions, and shared client infrastructure. Start with its [README](https://github.com/InKCre/impl-ts#readme). | +| [`InKCre/impl-ts`](https://github.com/InKCre/impl-ts) | Web app, browser extension, and shared TypeScript SDK libraries. Start with its [README](https://github.com/InKCre/impl-ts#readme). | | [`InKCre/ui`](https://github.com/InKCre/ui) | Design system, tokens, and shared Web UI packages. Start with its [README](https://github.com/InKCre/ui#readme). | The [InKCre GitHub organization](https://github.com/InKCre) contains prototypes and historical diff --git a/website/content/en/getting-started.md b/website/content/en/getting-started.md index 39dfe91..3d2dfad 100644 --- a/website/content/en/getting-started.md +++ b/website/content/en/getting-started.md @@ -35,8 +35,8 @@ milestone than a large collection you cannot yet use. ### 1. Choose how to access an instance -An **instance** stores your collected information and runs capabilities such as collection. A -**client**, such as the [Web app](https://app.inkcre.dev/settings), connects to that instance. +An **instance** stores your collected information and runs capabilities such as collection. An +**app**, such as the [Web app](https://app.inkcre.dev/settings), lets you work with that instance. Opening the Web app does not create an instance for you. - **Run your own instance:** choose a quick or custom path in [Self-Hosted](/self-hosted/), then diff --git a/website/content/en/guide/collect.md b/website/content/en/guide/collect.md index 8333064..daf5840 100644 --- a/website/content/en/guide/collect.md +++ b/website/content/en/guide/collect.md @@ -22,7 +22,7 @@ You need a [connected interface](/guide/connect) and a configured Source. 5. If creation could not be confirmed, check the Jobs list before submitting again. A timeout does not prove the first request did nothing. -![A finished RSS collection Job with its Source, timestamps, state, and diagnostics](/images/client-web/collection-job.png) +![A finished RSS collection Job with its Source, timestamps, state, and diagnostics](/images/web/collection-job.png) _A finished Job is the place to verify what the collector actually did._ diff --git a/website/content/en/guide/connect.md b/website/content/en/guide/connect.md index 29a0d1c..bd5db61 100644 --- a/website/content/en/guide/connect.md +++ b/website/content/en/guide/connect.md @@ -6,7 +6,7 @@ description: Use the Web app yourself, or connect a trusted Agent through the CL # Connect to Your Instance -Use **client-web** for your own day-to-day setup and reading. The **CLI** is primarily an interface +Use the **Web app** for your own day-to-day setup and reading. The **CLI** is primarily an interface for your trusted Agent. You do not need to configure every interface before starting. The selector on these guides changes the instructions, not your instance, and keeps your choice while navigating the site. @@ -28,7 +28,7 @@ the site. 6. To use the public Extension Registry, select **Edit Config** on **This browser**, set `extension_registry_url` to `https://registry.inkcre.dev`, and save. -![Client-web Peers showing the current browser and Core with their versions and states](/images/client-web/peers-overview.png) +![The Web app Peers page showing the current browser and Core with their versions and states](/images/web/peers-overview.png) _Peers shows the runtimes connected to this deployment. Edit a Peer when configuration belongs to that runtime._ diff --git a/website/content/en/guide/daily-use.md b/website/content/en/guide/daily-use.md index eb49fc9..e435bc2 100644 --- a/website/content/en/guide/daily-use.md +++ b/website/content/en/guide/daily-use.md @@ -20,7 +20,7 @@ own Peer ID; do not manually create a Peer or reuse Core's identity. 3. Bookmark the app. A new browser/device needs its own connection. A Settings **Export** restores the complete browser connection, including its secret, but is not an information backup. -![Info Base graph centered on one Block and its direct relationships](/images/client-web/info-base-graph.png) +![Info Base graph centered on one Block and its direct relationships](/images/web/info-base-graph.png) _Open a result's neighborhood to move from one Block to the information directly related to it._ diff --git a/website/content/en/guide/first-source.md b/website/content/en/guide/first-source.md index fa73afc..c72d6b6 100644 --- a/website/content/en/guide/first-source.md +++ b/website/content/en/guide/first-source.md @@ -28,7 +28,7 @@ online Core Peer when enabling a Python collector. The browser does not need to 3. [Run a Collection](/guide/collect) and wait for its Job to finish. 4. [Find What You Saved](/guide/search) and open a known item. -![The client-web Sources page showing saved Sources and their collection actions](/images/client-web/sources-overview.png) +![The Web app Sources page showing saved Sources and their collection actions](/images/web/sources-overview.png) _Each row is one configured Source. Open it to inspect configuration and history, or run a manual collection from the row._ diff --git a/website/content/en/guide/schedules.md b/website/content/en/guide/schedules.md index b24bd48..510d2d7 100644 --- a/website/content/en/guide/schedules.md +++ b/website/content/en/guide/schedules.md @@ -23,7 +23,7 @@ First complete [a manual collection](/guide/collect) and [find a known item](/gu Existing Jobs and collected information remain. An Agent can instead disable a Cron through the CLI if you want to retain it for later re-enabling. -![A Source details page with saved configuration, collection scheduling, and recent Jobs](/images/client-web/source-schedule.png) +![A Source details page with saved configuration, collection scheduling, and recent Jobs](/images/web/source-schedule.png) _Schedules and recent Jobs belong to the selected Source; confirm its name and type before changing the schedule._ diff --git a/website/content/en/guide/search.md b/website/content/en/guide/search.md index aa5b817..24ba581 100644 --- a/website/content/en/guide/search.md +++ b/website/content/en/guide/search.md @@ -25,12 +25,12 @@ First finish [one collection](/guide/collect). a bounded batch, so a larger import can need another run. A maintenance schedule avoids this manual step after every collection. -2. Open **Info Base** in client-web. Enter a distinctive phrase from the collected item and search. +2. Open **Info Base** in the Web app. Enter a distinctive phrase from the collected item and search. 3. Select a result, inspect its details, use **View content** where supported, and follow its graph relationships. Some content needs a compatible browser Extension for rich rendering; an Agent can also retrieve Core-resolved text through the CLI. -![Lexical search in Info Base returning a collected RSS item](/images/client-web/lexical-search.png) +![Lexical search in Info Base returning a collected RSS item](/images/web/lexical-search.png) _Search for a phrase you recognize; the result should be the information itself, not merely a successful maintenance Job._ diff --git a/website/content/en/guide/sources/mail.md b/website/content/en/guide/sources/mail.md index cd02bbd..fd12e03 100644 --- a/website/content/en/guide/sources/mail.md +++ b/website/content/en/guide/sources/mail.md @@ -36,7 +36,7 @@ Choose dates appropriate to your mailbox. The start is included and the end excl Job, then [index and search](/guide/search) for a known email. This collector does not send mail or generate email digests. Keep credentials and diagnostics private. -![A collected email opened in Info Base with content, attachments, and related messages](/images/client-web/mail-content.png) +![A collected email opened in Info Base with content, attachments, and related messages](/images/web/mail-content.png) _After indexing, open a collected message from Info Base to read its content and follow related mail._ diff --git a/website/content/en/guide/sources/memos.md b/website/content/en/guide/sources/memos.md index a7f81d5..27faa12 100644 --- a/website/content/en/guide/sources/memos.md +++ b/website/content/en/guide/sources/memos.md @@ -27,7 +27,7 @@ a bounded Memos `0.29.1` API subset; the previously accepted client is MoeMemos 5. Write a distinctive note, refresh the client, and reopen it. Then [index and search](/guide/search) for the same text in InKCre. -![Memos setup showing a ready Server URL and masked Personal Access Token](/images/client-web/memos-setup.png) +![Memos setup showing a ready Server URL and masked Personal Access Token](/images/web/memos-setup.png) _Copy both values from Setup; keep the PAT masked and private._ diff --git a/website/content/en/guide/sources/rss.md b/website/content/en/guide/sources/rss.md index 5f41d73..bf829a0 100644 --- a/website/content/en/guide/sources/rss.md +++ b/website/content/en/guide/sources/rss.md @@ -19,7 +19,7 @@ Choose a publication's **RSS or Atom feed URL**, not its normal homepage. 2. Open **Sources** and the create-source form. Set **Nickname** to `My first feed`. 3. Choose **Type** `extensions.rss.rss.Source`, or `extensions.rss.atom.Source` for Atom. - ![Create Source with the searchable Type dropdown open](/images/client-web/create-source-type.png) + ![Create Source with the searchable Type dropdown open](/images/web/create-source-type.png) _Search by type name, then select the matching feed format._ diff --git a/website/content/en/guide/sources/twitter.md b/website/content/en/guide/sources/twitter.md index ec540c3..e54e9c8 100644 --- a/website/content/en/guide/sources/twitter.md +++ b/website/content/en/guide/sources/twitter.md @@ -40,7 +40,7 @@ configuration. Do not downgrade to `0.3.0`: its Python package targets Core Host 3. Choose your online Core Peer in the wizard. Enable Twitter there if prompted. Core handles the callback and collection; browser enablement alone is insufficient. -![Twitter setup wizard showing the account-connection step](/images/client-web/twitter-setup.png) +![Twitter setup wizard showing the account-connection step](/images/web/twitter-setup.png) _The wizard keeps preparation, account connection, Source selection, and review as separate steps._ @@ -68,9 +68,9 @@ private. 3. Review the handle, Source and schedule, then explicitly choose **Start collecting bookmarks**. The final action enables the schedule **and submits an immediate collection Job**. It does not mean -that Job has finished. Open the Source's Jobs in client-web, [inspect the run](/guide/collect), then -[index and search](/guide/search) for a recent bookmark. Do not add a second collection schedule -after using the wizard. +that Job has finished. Open the Source's Jobs in the Web app, [inspect the run](/guide/collect), +then [index and search](/guide/search) for a recent bookmark. Do not add a second collection +schedule after using the wizard. To disconnect later, stop its collection schedule first, then use **Disconnect** in the wizard's account step. You can separately revoke the app in X. Neither action removes collected information. diff --git a/website/content/en/guide/troubleshooting.md b/website/content/en/guide/troubleshooting.md index df12008..f5edfbf 100644 --- a/website/content/en/guide/troubleshooting.md +++ b/website/content/en/guide/troubleshooting.md @@ -11,7 +11,7 @@ Use the symptom below to find the next check. Keep credentials out of logs or sc | ---------------------------------------- | -------------------------------------------------------------------------------------------------------------- | | Deployment workflow missing | Enable Actions in your fork and check that it is up to date with upstream `main`. | | Core slow or offline | Start it from your hosting dashboard, then choose **Refresh** in Peers. Inspect host logs if it stays offline. | -| Client returns `401` | Check endpoint and secret. Anonymous PostgREST `401` is expected; authenticated `401` is not. | +| App reports `401` | Check endpoint and secret. Anonymous PostgREST `401` is expected; authenticated `401` is not. | | Source type absent | Install a compatible Extension and enable it on Core, not only in the Web app. | | Job stays pending | Confirm Core is awake and its collector enabled. Job creation only confirms acceptance. | | Collection finished but search empty | Confirm the source exposed the item; run lexical maintenance and inspect diagnostics. | diff --git a/website/content/en/index.md b/website/content/en/index.md index 53776f4..1333c8f 100644 --- a/website/content/en/index.md +++ b/website/content/en/index.md @@ -44,7 +44,7 @@ hero:
Collect from existing sources -

RSS, GitHub, email, Telegram, bookmarks, and capture clients.

+

RSS, GitHub, email, Telegram, bookmarks, and capture apps.

diff --git a/website/content/en/self-hosted/custom.md b/website/content/en/self-hosted/custom.md index 099bad2..fd1006e 100644 --- a/website/content/en/self-hosted/custom.md +++ b/website/content/en/self-hosted/custom.md @@ -22,13 +22,13 @@ runtime consisting of: | ----------------------------------------------------------- | --------------------------------------------------------------------------------------- | | PostgreSQL with the required extensions, including pgvector | Persists the info-base and shared configuration. | | Database initializer | Creates/migrates the schema, provisions runtime roles, and reconciles built-in records. | -| PostgREST | Exposes the admitted database API used by the Web client. | +| PostgREST | Exposes the admitted database API used by the Web app. | | Core Python program | Runs collection, Jobs, Extensions, and the Core HTTP API. | The initializer is a command you run during deployment, not another permanent service. Core and PostgREST then connect to the initialized database with separate limited roles. The CLI talks to -Core; client-web talks to PostgREST and discovers Core capabilities. You can continue using -`app.inkcre.dev` rather than hosting client-web yourself. +Core; the Web app talks to PostgREST and discovers Core capabilities. You can continue using +`app.inkcre.dev` rather than hosting the Web app yourself. ## 1. Choose a Core release and runtime shape @@ -44,7 +44,7 @@ PostgREST. 1. Provision PostgreSQL with the extensions required by your chosen Core revision. 2. Retain its owner connection only for initialization, migrations, and recovery. 3. Generate separate strong passwords for the `inkcre_core` and `authenticator` login roles. -4. Generate one private JWT secret that PostgREST and your clients will share. +4. Generate one private JWT secret that PostgREST and your authenticated Peers will share. Do not give either running service the database-owner URL. Keep the three generated secrets in your hosting provider's secret storage. @@ -83,8 +83,8 @@ capabilities. The [container guide](https://github.com/InKCre/impl-py/blob/main/docs/40-deployment/docker.md) and [Core README](https://github.com/InKCre/impl-py#readme) own the supported entry points. -**Checkpoint:** after you connect client-web, Core appears in **Peers**. If it is offline, start the -service and refresh until the Peer is online and publishes its capabilities. +**Checkpoint:** after you connect the Web app, Core appears in **Peers**. If it is offline, start +the service and refresh until the Peer is online and publishes its capabilities. ## 6. Connect and complete a real journey @@ -93,7 +93,7 @@ Retain the Core URL, PostgREST URL, JWT secret, and Core Peer ID. Follow recognize. A healthy process is necessary, but a real collection-and-retrieval loop proves that the services work together. -**Checkpoint:** client-web can reach PostgREST and the online Core Peer, and you can retrieve one +**Checkpoint:** the Web app can reach PostgREST and the online Core Peer, and you can retrieve one collected item. ## Operate your instance @@ -106,7 +106,7 @@ important information: - Keep database backups and verify how you will restore them. Your source accounts and repository fork are not backups of the info-base. - Retain deployment credentials securely. Coordinate changes to database passwords and JWT settings - across the services and clients that use them. + across the services and Peers that use them. - Plan upgrades against the selected Core revision's migration and deployment instructions. Inspect readiness and collection Jobs after changes; do not treat a running process as proof that collection succeeded. diff --git a/website/content/en/self-hosted/index.md b/website/content/en/self-hosted/index.md index 7882b79..ada6f96 100644 --- a/website/content/en/self-hosted/index.md +++ b/website/content/en/self-hosted/index.md @@ -6,7 +6,7 @@ description: Choose how to run your own InKCre instance and connect it to your i # Self-Hosted Self-hosting means operating your own InKCre instance: you choose where information is stored, which -sources it collects, and which clients can access it. You also manage credentials, hosting +sources it collects, and which apps can access it. You also manage credentials, hosting availability, backups, and updates. This section is for users choosing that responsibility. For the application-level introduction and first-use journey, start with diff --git a/website/content/public/_redirects b/website/content/public/_redirects new file mode 100644 index 0000000..8d6718b --- /dev/null +++ b/website/content/public/_redirects @@ -0,0 +1 @@ +/images/client-web/* /images/web/:splat 301 diff --git a/website/content/public/images/client-web/collection-job.png b/website/content/public/images/web/collection-job.png similarity index 100% rename from website/content/public/images/client-web/collection-job.png rename to website/content/public/images/web/collection-job.png diff --git a/website/content/public/images/client-web/create-source-type.png b/website/content/public/images/web/create-source-type.png similarity index 100% rename from website/content/public/images/client-web/create-source-type.png rename to website/content/public/images/web/create-source-type.png diff --git a/website/content/public/images/client-web/info-base-graph.png b/website/content/public/images/web/info-base-graph.png similarity index 100% rename from website/content/public/images/client-web/info-base-graph.png rename to website/content/public/images/web/info-base-graph.png diff --git a/website/content/public/images/client-web/lexical-search.png b/website/content/public/images/web/lexical-search.png similarity index 100% rename from website/content/public/images/client-web/lexical-search.png rename to website/content/public/images/web/lexical-search.png diff --git a/website/content/public/images/client-web/mail-content.png b/website/content/public/images/web/mail-content.png similarity index 100% rename from website/content/public/images/client-web/mail-content.png rename to website/content/public/images/web/mail-content.png diff --git a/website/content/public/images/client-web/memos-setup.png b/website/content/public/images/web/memos-setup.png similarity index 100% rename from website/content/public/images/client-web/memos-setup.png rename to website/content/public/images/web/memos-setup.png diff --git a/website/content/public/images/client-web/peers-overview.png b/website/content/public/images/web/peers-overview.png similarity index 100% rename from website/content/public/images/client-web/peers-overview.png rename to website/content/public/images/web/peers-overview.png diff --git a/website/content/public/images/client-web/settings-overview.png b/website/content/public/images/web/settings-overview.png similarity index 100% rename from website/content/public/images/client-web/settings-overview.png rename to website/content/public/images/web/settings-overview.png diff --git a/website/content/public/images/client-web/source-schedule.png b/website/content/public/images/web/source-schedule.png similarity index 100% rename from website/content/public/images/client-web/source-schedule.png rename to website/content/public/images/web/source-schedule.png diff --git a/website/content/public/images/client-web/sources-overview.png b/website/content/public/images/web/sources-overview.png similarity index 100% rename from website/content/public/images/client-web/sources-overview.png rename to website/content/public/images/web/sources-overview.png diff --git a/website/content/public/images/client-web/twitter-setup.png b/website/content/public/images/web/twitter-setup.png similarity index 100% rename from website/content/public/images/client-web/twitter-setup.png rename to website/content/public/images/web/twitter-setup.png