Application Governance
维护稳定 App 身份、唯一 Owner、元信息、Publication、Audience、软删除和管理员所有权转移。
不负责:列表入口、代码协作、业务权限一套稳定的 App 身份与容器协议,承接外部 H5、Tanka Assistant 托管应用、组织上架、群聊分享和公网访问。
应用维护自身身份、当前生产版本和访问范围,不感知自己出现在哪些功能中。
Managed App 的所有升级先到独立预发布;组织已上架时再按管理员策略审核。
Launch Credential 只建立一次可信身份;之后 Session、过期和业务授权由应用负责。
发布、受众、组织上架、保存与分享可以同时存在,但不能互相替代。每个功能侧只持有稳定 appId。
不设计 SDK 具体签名、部署编排、数据库兼容和应用内部权限;这些不再改变核心领域模型。
故事从一个待解决的协作问题开始,依次经过实现路径选择、制作或接入、发布、分发使用与持续治理。角色只是每个阶段的行动者。
例如,安全团队希望员工阅读指定 Memo、完成手写签名、生成 PDF 留档,并让负责人查看签署进度。此时用户表达的是工作目标,还没有 Application。
从零定制、单人维护Member 在 Flow 中交给 Tanka Assistant 制作 Managed App。
已有系统或需要多人研发外部团队完成研发与部署,Tenant Admin 以 General App 接入。
Member 描述要解决的工作问题与期望结果。
选择 Assistant 制作,或接入已有外部系统。
创建稳定 appId;生成源码草稿或配置外部 URL。
Managed App 先预发布;Owner 配置 Audience 并发布。
需要时由 Admin 审核上架并选择升级策略。
分享、保存或嵌入;容器校验后打开业务页面。
新版本重复预发布;必要时下架、转移或删除。
下面按角色汇总职责,便于确认边界;实际发生顺序以上方主线为准。
| 阶段 | 主要角色 | 用户目标 | 领域结果 |
|---|---|---|---|
| 1 · 需求与选路 | Tenant Member / Admin | 解决具体协作问题,并决定自制还是接入 | 尚不创建领域对象;确认路径后再创建 Application |
| 2A · Assistant 制作 | Tenant Member | 在 Flow 描述应用并查看生成结果 | 创建 DRAFT Application、稳定 appId 和可恢复源码项目 |
| 2B · General App 接入 | Tenant Admin | 配置已有外部 H5 的元信息、URL 与 Audience | 创建 EXTERNAL_INTEGRATION Application,由外部团队维护研发部署 |
| 3 · 预发布验收 | Managed App Owner | 在独立实例验证首个或后续 Revision | 生产不受影响;Revision 可提升或撤销 |
| 4 · 首次发布 | Managed App Owner | 确认保存,选择 Public / Private 并发布 | Application 进入 ACTIVE;Publication 指向生产 Revision |
| 5 · 组织上架(可选) | Tenant Admin | 审核 App,并选择 Auto Upgrade 或 Review Required | App Center 创建 OrganizationAppListing 引用 |
| 6 · 分发与保存 | Owner / Tenant Member | 分享 App 或子页面、嵌入 Memo、保存到个人列表 | 各功能保存 appId 引用;Audience 与所有权不变 |
| 7 · 打开与使用 | Tenant Member | 从任一入口进入业务页面并使用原生 Picker | 容器先校验访问;应用后端完成一次身份交换后自管 Session |
| 8 · 修改与升级 | Owner / Tenant Admin | 验证新版本,并按升级策略提升或审核 | 批准后切换 activeRevisionId;拒绝时旧生产版本继续服务 |
| 9 · 持续治理 | Tenant Admin / Owner | 审计、下架、所有权兜底或软删除 | 管理动作留痕;功能侧历史引用不被反向删除 |
“上架”只指进入组织应用中心;“发布”只指在 Tanka 内拥有可运行生产版本。两者必须在产品、事件和接口中分开。
Application Governance 保持最小;App Center、Chat、Memo 与 Navigation 在自己的边界引用 appId,不把入口位置反写进应用。
维护稳定 App 身份、唯一 Owner、元信息、Publication、Audience、软删除和管理员所有权转移。
不负责:列表入口、代码协作、业务权限把 Member 意图转成可恢复的源码项目;开始制作即创建内部 DRAFT Application。
Flow Agent 是工具,不是 Owner管理不可变 ManagedRevision、独立预发布实例与生产指针切换;数据库兼容由应用负责。
所有正式版本先经过 Pre-release持有 OrganizationAppListing、SavedApp、升级策略和审核请求,组合 App Center 查询。
只引用 appId,不反向写 Application跨端解析入口、检查发布与 Audience、运行 H5、初始化 Bridge 并处理版本重新加载。
下架后在加载 H5 前拒绝为一次真实 Host 启动签发和消费 Credential,向应用后端返回 VerifiedPrincipal。
不维护应用自己的 SessionChat 与 Memo 保存自己的 AppReference;分享只创建引用,不改变 Audience。
历史引用可显示下架或删除状态订阅管理类领域事件形成只追加投影;普通打开与 SDK 调用属于未来运行埋点。
不是业务状态源Application 是核心聚合。ManagedRevision、审核请求与 Credential 只有在需要独立生命周期时才单独存在。
应用身份、Tanka 内发布、预发布版本和审核流程分别变化。生产始终只有一个 activeRevisionId。
Application:DRAFT 在用户开始制作时创建,保存后进入 ACTIVE;下架且移除组织上架后可软删除。
Publication:只保留 UNPUBLISHED ⇄ PUBLISHED;下架由容器阻止普通打开。
ManagedRevision:BUILDING → PRE_RELEASE_READY;可撤销,或被生产指针引用。Revision 本身不变成 PUBLISHED。
AppReviewRequest:SUBMITTED → APPROVED / REJECTED / WITHDRAWN;绑定具体 Revision。
所有变更先到预发布;只有“是否组织上架”和 UpgradePolicy 决定生产提升路径。
创建来源是唯一判别字段:TANKA_ASSISTANT 或 EXTERNAL_INTEGRATION。当前不再增加一一对应的 AppKind。
Owner 可以把 App 发布给指定成员或 Tenant 全员,并在群聊传播;Admin 上架决定它是否进入组织应用中心,以及后续生产升级是否必须审核。
前端环境信息用于体验;真实业务身份只能由应用后端消费一次性 Launch Credential 后建立。
surface、hostVersion、bridgeVersion、theme、locale、timezone、tenantHint、memberHint
允许:渲染、兼容判断、调用 Host 能力不能:直接建立业务登录态appId、tenantId、memberId、authenticatedAt、launchId
允许:应用后端建立自己的 Session之后的过期、登出和授权由应用负责GrantId、AppId、TenantId、MemberId、Nonce、IssuedAt、ExpiresAt、ConsumedAt、Status。
只完成一次身份交接,不成为长期业务 Token。服务端确认的 App、Tenant、Member 和认证时间;不包含应用业务角色。
仅供应用后端建立自己的 Session。应用决定自己的 Cookie / Token、续期、过期、登出和业务权限。
Bridge 不在 401 后刷新通用 Tanka userToken。TANKA_ONLY 在拿不到有效 Credential 时阻止业务访问。Managed App 的 PUBLIC_WEB 与可独立打开的 General App 使用自己的公网身份策略,不获得 Tanka 注入状态。
管理审计只覆盖改变应用、版本、组织上架和治理状态的操作。普通打开、Deep Link 点击与 SDK 调用留给未来运行埋点。
ApplicationDraftCreated内部草稿与 appId 已建立ApplicationActivated用户确认保存ApplicationMetadataUpdated当前元信息改变AudiencePolicyChangedPublic / Private 或白名单改变ApplicationPublishedTanka 内正式开放ApplicationUnpublished容器阻止普通打开ApplicationOwnershipTransferredAdmin 指定新 OwnerApplicationSoftDeleted业务对象软删除ManagedRevisionBuildStarted新版本开始构建ManagedRevisionPreReleaseReady独立预发布可验证ManagedRevisionWithdrawn创建者撤销本次版本OrganizationAppListed管理员完成组织上架UpgradePolicyChanged升级治理策略改变VersionUpgradeRequested提交具体 RevisionVersionUpgradeApproved管理员批准版本ProductionRevisionChanged生产指针完成切换AppSavedApp Center 保存 appIdSavedAppRemoved只删除个人保存关系ChatAppReferenceCreatedChat 保存 App 或子页面引用MemoAppReferenceCreatedMemo 保存 Embed 引用OrganizationAppUnlisted移除官方入口,不删除 App按 Tenant 隔离的只追加管理投影。记录谁在什么时候改变了什么,以及命令是否成功。
| 事件 | 直接消费者 | 结果 | 边界 |
|---|---|---|---|
ApplicationUnpublished | Runtime Host | 拒绝新普通会话;功能侧可显示不可用 | 不删除历史引用 |
OrganizationAppListed | App Center | 生成组织应用入口与 UpgradePolicy | 不授予访问权 |
ProductionRevisionChanged | Runtime Host | 新会话加载新 Revision | 旧会话按需 UPGRADE_REQUIRED |
ApplicationOwnershipTransferred | AI Creation + Delivery | 新 Owner 获得源码与后续升级能力 | 不转移原个人 Flow |
ApplicationSoftDeleted | App Center + Collaboration | 引用显示“应用已删除” | AuditRecord 永久保留 |
当前只定义能力族和信任等级。Tanka 数据通过原生 Picker 由用户主动选择,不提供 H5 静默枚举组织数据的接口。
端类型、Host / Bridge 版本、主题、语言、时区和能力判断。
RuntimeDescriptor体验信息Host 握手、ready / failure 与 Capability Negotiation。
BridgeSessionHost 控制请求一次性 Launch Credential;应用后端验证后建立 Session。
CredentialGrant服务端可信resume、pause、back、close、resize 与升级重载。
RuntimeSessionHost 控制打开统一 Tanka Deep Link、返回 Tanka 与跨应用路由。
DeepLink启动前校验唤起成员、Memo、文件等原生选择器,并返回用户选择。
PickerResult业务输入分享 App 或子页面、在 Memo 中创建 Embed 引用。
AppReference引用不授权Host 与 H5 请求响应、事件、超时和协议错误。
BridgeEnvelope协议通道tanka://app/{appId}/{path}?{query}链接不含 Tenant、用户或 Token。AI 只需理解统一 URI 构成即可生成链接;不需要额外 Route Manifest。最终 scheme 名称留到协议详细设计。
_tanka-embed=true、SSR 首屏防闪动、浮窗模式、各端 Picker 清单与错误码属于 Runtime / SDK 设计,不进入领域实体。
这些规则应同时出现在产品验收、服务端校验和契约测试中。
Deep Link 不携带 Tenant;appId 解析所属 Tenant,当前会话提供 Member。
当前只有 TANKA_ASSISTANT 与 EXTERNAL_INTEGRATION 两类来源。
需要多人开发时在外部完成,并以 General App 接入。
保存、分享、上架和 Pin 都不能成为访问授权。
General App 的外部可访问性由外部应用自己决定。
Owner 预览使用明确的预发布入口,不属于普通打开。
代码保存不会直接影响生产,提升才切换 activeRevisionId。
REVIEW_REQUIRED 审核前,普通成员继续运行旧生产版本。
应用后端消费一次性 Credential 后,自行管理 Session 与授权。
数据库兼容与应用业务操作也不属于 Tanka 管理审计。
交接源码项目与管理权,不交接原 Owner 的个人 Flow 和凭证。
软删除不级联 Chat、Memo 或 SavedApp 的历史引用。
领域模型已闭环。剩余问题影响协议和工程实现,不再要求新增核心业务实体。
它们不会改变当前核心模型,但需要在 SDK、平台和数据设计中继续落地。
tanka://app/...,还是兼容既有 tanka-app://...。这条边界让外部 H5 与 Assistant 托管应用共享 appId、Publication、Deep Link 和鉴权入口,同时避免把 App Center、Chat、Memo 或应用业务权限塞进 Application 聚合。